@kepler.gl/reducers 3.3.0-alpha.13 → 3.3.0-alpha.14

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.
@@ -5,7 +5,7 @@ var _typeof3 = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.addAnnotationUpdater = exports.INITIAL_VIS_STATE = exports.DEFAULT_EDITOR = exports.DEFAULT_ANIMATION_CONFIG = exports.ACTION_TASK_FIT_BOUNDS = exports.ACTION_TASK_ADD_NOTIFICATION = void 0;
8
+ exports.addChartUpdater = exports.addAnnotationUpdater = exports.INITIAL_VIS_STATE = exports.DEFAULT_EDITOR = exports.DEFAULT_ANIMATION_CONFIG = exports.ACTION_TASK_FIT_BOUNDS = exports.ACTION_TASK_ADD_NOTIFICATION = void 0;
9
9
  exports.addDefaultLayers = addDefaultLayers;
10
10
  exports.addDefaultTooltips = addDefaultTooltips;
11
11
  exports.addLayerUpdater = exports.addLayerToLayerGroupUpdater = exports.addLayerGroupUpdater = exports.addFilterUpdater = exports.addEffectUpdater = void 0;
@@ -47,13 +47,14 @@ exports.nextFileBatchUpdater = exports.mouseMoveUpdater = exports.mapClickUpdate
47
47
  exports.parseProgress = parseProgress;
48
48
  exports.pinTableColumnUpdater = pinTableColumnUpdater;
49
49
  exports.prepareStateForDatasetReplace = prepareStateForDatasetReplace;
50
+ exports.preservedOrderWithParked = preservedOrderWithParked;
50
51
  exports.processFileContentUpdater = processFileContentUpdater;
51
52
  exports.receiveMapConfigUpdater = void 0;
52
53
  exports.refreshDatasetErrorUpdater = refreshDatasetErrorUpdater;
53
54
  exports.refreshDatasetProgressUpdater = refreshDatasetProgressUpdater;
54
55
  exports.refreshDatasetSuccessUpdater = refreshDatasetSuccessUpdater;
55
56
  exports.refreshDatasetUpdater = refreshDatasetUpdater;
56
- exports.removeAnnotationUpdater = void 0;
57
+ exports.removeChartUpdater = exports.removeAnnotationUpdater = void 0;
57
58
  exports.removeDatasetUpdater = removeDatasetUpdater;
58
59
  exports.removeFilterUpdater = exports.removeEffectUpdater = void 0;
59
60
  exports.removeFromDatasetUpdater = removeFromDatasetUpdater;
@@ -89,7 +90,7 @@ exports.toggleEditorVisibilityUpdater = toggleEditorVisibilityUpdater;
89
90
  exports.toggleSplitMapUpdater = exports.toggleLayerForMapUpdater = exports.toggleLayerAnimationUpdater = exports.toggleLayerAnimationControlUpdater = exports.toggleFilterFeatureUpdater = exports.toggleFilterAnimationUpdater = void 0;
90
91
  exports.updateAllLayerDomainData = updateAllLayerDomainData;
91
92
  exports.updateAnimationDomain = updateAnimationDomain;
92
- exports.updateAnnotationUpdater = void 0;
93
+ exports.updateChartUpdater = exports.updateAnnotationUpdater = void 0;
93
94
  exports.updateDatasetPropsUpdater = updateDatasetPropsUpdater;
94
95
  exports.updateDatasetUpdater = updateDatasetUpdater;
95
96
  exports.updateEffectUpdater = void 0;
@@ -274,6 +275,9 @@ var INITIAL_VIS_STATE = exports.INITIAL_VIS_STATE = {
274
275
  // effects
275
276
  effects: [],
276
277
  effectOrder: [],
278
+ // charts (enabled by default; gated by enableChartsPanel)
279
+ charts: [],
280
+ chartsToBeMerged: [],
277
281
  // annotations
278
282
  annotations: [],
279
283
  annotationsToBeMerged: [],
@@ -382,9 +386,9 @@ function applyLayerConfigUpdater(state, action) {
382
386
  var oldLayerId = action.oldLayerId,
383
387
  newLayerConfig = action.newLayerConfig,
384
388
  layerIndex = action.layerIndex;
385
- var newParsedLayer =
386
- // will move visualChannels to the config prop
387
- (0, _visStateMerger.parseLayerConfig)(state.schema, newLayerConfig);
389
+ // Saved configs have a visualChannels sibling; parsed/editor JSON folds those
390
+ // fields into config. Re-parsing the latter drops colorField and resets the scale.
391
+ var newParsedLayer = (0, _visStateMerger.isSavedLayerConfigV1)(newLayerConfig) ? (0, _visStateMerger.parseLayerConfig)(state.schema, newLayerConfig) : newLayerConfig;
388
392
  var oldLayer = state.layers.find(function (l) {
389
393
  return l.id === oldLayerId;
390
394
  });
@@ -1791,7 +1795,9 @@ function removeLayerUpdater(state, _ref9) {
1791
1795
  splitMaps: (0, _utils.removeLayerFromSplitMaps)(state.splitMaps, layerToRemove)
1792
1796
  // TODO: update filters, create helper to remove layer form filter (remove layerid and dataid) if mapped
1793
1797
  });
1794
- return updateAnimationDomain(newState);
1798
+ return updateAnimationDomain(removeChartsAndFilters(newState, function (chart) {
1799
+ return isLayerChartConfig(chart) && chart.layerId === layerToRemove.id;
1800
+ }));
1795
1801
  }
1796
1802
 
1797
1803
  /**
@@ -2242,16 +2248,169 @@ var updateEffectUpdater = exports.updateEffectUpdater = function updateEffectUpd
2242
2248
  effectOrder: effectOrder
2243
2249
  });
2244
2250
  };
2251
+ function isLayerChartConfig(chart) {
2252
+ return chart.type === 'layerChart';
2253
+ }
2254
+ function mergeChartConfig(chart, props) {
2255
+ return _objectSpread(_objectSpread(_objectSpread({}, chart), props), {}, {
2256
+ display: _objectSpread(_objectSpread({}, chart.display), props.display || {}),
2257
+ chartDisplay: _objectSpread(_objectSpread({}, chart.chartDisplay), props.chartDisplay || {})
2258
+ });
2259
+ }
2260
+ function axisFieldIfPresent(axis, fieldNames) {
2261
+ var _axis$field;
2262
+ if (!(axis !== null && axis !== void 0 && (_axis$field = axis.field) !== null && _axis$field !== void 0 && _axis$field.name) || fieldNames.has(axis.field.name)) {
2263
+ return axis;
2264
+ }
2265
+ return _objectSpread(_objectSpread({}, axis), {}, {
2266
+ field: null,
2267
+ title: null
2268
+ });
2269
+ }
2270
+ function dropMissingChartFields(chart, dataset) {
2271
+ var fieldNames = new Set(((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).map(function (field) {
2272
+ return field.name;
2273
+ }));
2274
+ var next = chart;
2275
+ return mergeChartConfig(chart, {
2276
+ xAxis: axisFieldIfPresent(next.xAxis, fieldNames),
2277
+ yAxis: axisFieldIfPresent(next.yAxis, fieldNames),
2278
+ axis: axisFieldIfPresent(next.axis, fieldNames),
2279
+ groupBy: axisFieldIfPresent(next.groupBy, fieldNames),
2280
+ value: axisFieldIfPresent(next.value, fieldNames)
2281
+ });
2282
+ }
2283
+ function removeChartsAndFilters(state, shouldRemove) {
2284
+ var charts = state.charts || [];
2285
+ var removed = charts.filter(shouldRemove);
2286
+ if (!removed.length) {
2287
+ return state;
2288
+ }
2289
+ var removedIds = new Set(removed.map(function (chart) {
2290
+ return chart.id;
2291
+ }));
2292
+ var filterIds = new Set(removed.flatMap(function (chart) {
2293
+ var _chart$crossFilter;
2294
+ var id = (_chart$crossFilter = chart.crossFilter) === null || _chart$crossFilter === void 0 ? void 0 : _chart$crossFilter.filterId;
2295
+ return id ? [id, "".concat(id, "-x"), "".concat(id, "-y")] : [];
2296
+ }));
2297
+ var nextState = _objectSpread(_objectSpread({}, state), {}, {
2298
+ charts: charts.filter(function (chart) {
2299
+ return !removedIds.has(chart.id);
2300
+ })
2301
+ });
2302
+ if (filterIds.size) {
2303
+ nextState = nextState.filters.reduceRight(function (accu, filter, idx) {
2304
+ return filterIds.has(filter.id) ? removeFilterUpdater(accu, {
2305
+ idx: idx
2306
+ }) : accu;
2307
+ }, nextState);
2308
+ }
2309
+ return nextState;
2310
+ }
2311
+
2312
+ /**
2313
+ * Add a chart
2314
+ * @memberof visStateUpdaters
2315
+ * @public
2316
+ */
2317
+ var addChartUpdater = exports.addChartUpdater = function addChartUpdater(state, _ref13) {
2318
+ var _chart$display$isConf, _chart$display;
2319
+ var chart = _ref13.chart;
2320
+ if (!(chart !== null && chart !== void 0 && chart.id)) {
2321
+ return state;
2322
+ }
2323
+ if ((state.charts || []).some(function (existing) {
2324
+ return existing.id === chart.id;
2325
+ })) {
2326
+ return state;
2327
+ }
2328
+ return _objectSpread(_objectSpread({}, state), {}, {
2329
+ charts: [].concat((0, _toConsumableArray2["default"])((state.charts || []).map(function (existing) {
2330
+ return _objectSpread(_objectSpread({}, existing), {}, {
2331
+ display: _objectSpread(_objectSpread({}, existing.display), {}, {
2332
+ isConfigActive: false
2333
+ })
2334
+ });
2335
+ })), [_objectSpread(_objectSpread({}, chart), {}, {
2336
+ display: _objectSpread(_objectSpread({}, chart.display), {}, {
2337
+ isConfigActive: (_chart$display$isConf = (_chart$display = chart.display) === null || _chart$display === void 0 ? void 0 : _chart$display.isConfigActive) !== null && _chart$display$isConf !== void 0 ? _chart$display$isConf : false
2338
+ })
2339
+ })])
2340
+ });
2341
+ };
2342
+
2343
+ /**
2344
+ * Update a chart
2345
+ * @memberof visStateUpdaters
2346
+ * @public
2347
+ */
2348
+ var updateChartUpdater = exports.updateChartUpdater = function updateChartUpdater(state, _ref14) {
2349
+ var _next$crossFilter2, _prev$crossFilter, _prev$crossFilter2, _next$crossFilter3;
2350
+ var id = _ref14.id,
2351
+ props = _ref14.props;
2352
+ var idx = (state.charts || []).findIndex(function (chart) {
2353
+ return chart.id === id;
2354
+ });
2355
+ if (idx < 0) {
2356
+ return state;
2357
+ }
2358
+ var prev = state.charts[idx];
2359
+ var dataIdChanged = typeof props.dataId === 'string' && props.dataId !== prev.dataId;
2360
+ var layerIdChanged = isLayerChartConfig(prev) && typeof props.layerId === 'string' && props.layerId !== prev.layerId;
2361
+ var next = mergeChartConfig(prev, props);
2362
+ if (dataIdChanged || layerIdChanged) {
2363
+ var _next$crossFilter;
2364
+ var dataId = next.dataId || undefined;
2365
+ next = dropMissingChartFields(next, dataId ? state.datasets[dataId] : undefined);
2366
+ if ((_next$crossFilter = next.crossFilter) !== null && _next$crossFilter !== void 0 && _next$crossFilter.enabled) {
2367
+ next = mergeChartConfig(next, {
2368
+ crossFilter: _objectSpread(_objectSpread({}, next.crossFilter), {}, {
2369
+ enabled: false,
2370
+ value: {},
2371
+ fieldNames: {}
2372
+ })
2373
+ });
2374
+ }
2375
+ }
2376
+ var charts = (0, _toConsumableArray2["default"])(state.charts);
2377
+ charts[idx] = next;
2378
+ var nextState = _objectSpread(_objectSpread({}, state), {}, {
2379
+ charts: charts
2380
+ });
2381
+ var filterId = ((_next$crossFilter2 = next.crossFilter) === null || _next$crossFilter2 === void 0 ? void 0 : _next$crossFilter2.filterId) || ((_prev$crossFilter = prev.crossFilter) === null || _prev$crossFilter === void 0 ? void 0 : _prev$crossFilter.filterId);
2382
+ if ((_prev$crossFilter2 = prev.crossFilter) !== null && _prev$crossFilter2 !== void 0 && _prev$crossFilter2.enabled && !((_next$crossFilter3 = next.crossFilter) !== null && _next$crossFilter3 !== void 0 && _next$crossFilter3.enabled) && filterId) {
2383
+ var ownedFilterIds = new Set([filterId, "".concat(filterId, "-x"), "".concat(filterId, "-y")]);
2384
+ nextState = nextState.filters.reduceRight(function (accu, filter, idx) {
2385
+ return ownedFilterIds.has(filter.id) ? removeFilterUpdater(accu, {
2386
+ idx: idx
2387
+ }) : accu;
2388
+ }, nextState);
2389
+ }
2390
+ return nextState;
2391
+ };
2392
+
2393
+ /**
2394
+ * Remove a chart and any cross-filter it owns
2395
+ * @memberof visStateUpdaters
2396
+ * @public
2397
+ */
2398
+ var removeChartUpdater = exports.removeChartUpdater = function removeChartUpdater(state, _ref15) {
2399
+ var id = _ref15.id;
2400
+ return removeChartsAndFilters(state, function (chart) {
2401
+ return chart.id === id;
2402
+ });
2403
+ };
2245
2404
 
2246
2405
  // ANNOTATION UPDATERS
2247
2406
 
2248
2407
  function makeNewAnnotation(config) {
2249
- var _config$kind, _ref13, _config$textSide, _ref14, _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;
2408
+ 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;
2250
2409
  var kind = (_config$kind = config === null || config === void 0 ? void 0 : config.kind) !== null && _config$kind !== void 0 ? _config$kind : _constants.INITIAL_ANNOTATION_KIND;
2251
2410
  var providedAngle = Number.isFinite(config === null || config === void 0 ? void 0 : config.angle) ? config.angle : undefined;
2252
2411
  var derivedFromAngle = providedAngle != null ? (0, _constants.textPlacementFromAngle)(providedAngle) : undefined;
2253
- var textSide = (_ref13 = (_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 && _ref13 !== void 0 ? _ref13 : kind === _constants.AnnotationKind.TEXT ? undefined : _constants.INITIAL_ANNOTATION_TEXT_SIDE;
2254
- var textVerticalPosition = (_ref14 = (_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 && _ref14 !== void 0 ? _ref14 : kind === _constants.AnnotationKind.TEXT ? undefined : _constants.INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION;
2412
+ 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 === _constants.AnnotationKind.TEXT ? undefined : _constants.INITIAL_ANNOTATION_TEXT_SIDE;
2413
+ 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 === _constants.AnnotationKind.TEXT ? undefined : _constants.INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION;
2255
2414
  var base = _objectSpread(_objectSpread(_objectSpread({
2256
2415
  id: (_config$id = config === null || config === void 0 ? void 0 : config.id) !== null && _config$id !== void 0 ? _config$id : (0, _commonUtils.generateHashId)(6),
2257
2416
  kind: kind,
@@ -2320,8 +2479,8 @@ var addAnnotationUpdater = exports.addAnnotationUpdater = function addAnnotation
2320
2479
  * @memberof visStateUpdaters
2321
2480
  * @public
2322
2481
  */
2323
- var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref15) {
2324
- var id = _ref15.id;
2482
+ var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref18) {
2483
+ var id = _ref18.id;
2325
2484
  return _objectSpread(_objectSpread({}, state), {}, {
2326
2485
  annotations: state.annotations.filter(function (a) {
2327
2486
  return a.id !== id;
@@ -2336,9 +2495,9 @@ var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeA
2336
2495
  * @memberof visStateUpdaters
2337
2496
  * @public
2338
2497
  */
2339
- var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref16) {
2340
- var id = _ref16.id,
2341
- config = _ref16.config;
2498
+ var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref19) {
2499
+ var id = _ref19.id,
2500
+ config = _ref19.config;
2342
2501
  var idx = state.annotations.findIndex(function (a) {
2343
2502
  return a.id === id;
2344
2503
  });
@@ -2365,8 +2524,8 @@ var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateA
2365
2524
  * @memberof visStateUpdaters
2366
2525
  * @public
2367
2526
  */
2368
- var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref17) {
2369
- var id = _ref17.id;
2527
+ var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref20) {
2528
+ var id = _ref20.id;
2370
2529
  var original = state.annotations.find(function (a) {
2371
2530
  return a.id === id;
2372
2531
  });
@@ -2390,9 +2549,9 @@ var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function d
2390
2549
  * @memberof visStateUpdaters
2391
2550
  * @public
2392
2551
  */
2393
- var setSelectedAnnotationUpdater = exports.setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref18) {
2394
- var id = _ref18.id,
2395
- isEditingText = _ref18.isEditingText;
2552
+ var setSelectedAnnotationUpdater = exports.setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref21) {
2553
+ var id = _ref21.id,
2554
+ isEditingText = _ref21.isEditingText;
2396
2555
  if (id === state.selectedAnnotationId && (isEditingText !== null && isEditingText !== void 0 ? isEditingText : false) === state.isEditingAnnotationText) {
2397
2556
  return state;
2398
2557
  }
@@ -2459,12 +2618,20 @@ function removeDatasetUpdater(state, action) {
2459
2618
  newState = _objectSpread(_objectSpread({}, newState), {}, {
2460
2619
  filters: filters
2461
2620
  });
2462
- return removeDatasetFromInteractionConfig(newState, {
2621
+ return removeChartsAndFilters(removeDatasetFromInteractionConfig(newState, {
2463
2622
  dataId: datasetKey
2623
+ }), function (chart) {
2624
+ if (chart.dataId === datasetKey) {
2625
+ return true;
2626
+ }
2627
+ if (isLayerChartConfig(chart)) {
2628
+ return layersToRemove.includes(chart.layerId);
2629
+ }
2630
+ return false;
2464
2631
  });
2465
2632
  }
2466
- function removeDatasetFromInteractionConfig(state, _ref19) {
2467
- var dataId = _ref19.dataId;
2633
+ function removeDatasetFromInteractionConfig(state, _ref22) {
2634
+ var dataId = _ref22.dataId;
2468
2635
  var interactionConfig = state.interactionConfig;
2469
2636
  var _interactionConfig = interactionConfig,
2470
2637
  tooltip = _interactionConfig.tooltip;
@@ -2549,12 +2716,12 @@ var resetMapConfigUpdater = exports.resetMapConfigUpdater = function resetMapCon
2549
2716
  * @memberof visStateUpdaters
2550
2717
  * @public
2551
2718
  */
2552
- var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref20) {
2553
- var _ref20$payload = _ref20.payload,
2554
- _ref20$payload$config = _ref20$payload.config,
2555
- config = _ref20$payload$config === void 0 ? {} : _ref20$payload$config,
2556
- _ref20$payload$option = _ref20$payload.options,
2557
- options = _ref20$payload$option === void 0 ? {} : _ref20$payload$option;
2719
+ var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref23) {
2720
+ var _ref23$payload = _ref23.payload,
2721
+ _ref23$payload$config = _ref23$payload.config,
2722
+ config = _ref23$payload$config === void 0 ? {} : _ref23$payload$config,
2723
+ _ref23$payload$option = _ref23$payload.options,
2724
+ options = _ref23$payload$option === void 0 ? {} : _ref23$payload$option;
2558
2725
  if (!config.visState) {
2559
2726
  return state;
2560
2727
  }
@@ -2659,8 +2826,8 @@ var mapClickUpdater = exports.mapClickUpdater = function mapClickUpdater(state,
2659
2826
  * @memberof visStateUpdaters
2660
2827
  * @public
2661
2828
  */
2662
- var mouseMoveUpdater = exports.mouseMoveUpdater = function mouseMoveUpdater(state, _ref21) {
2663
- var evt = _ref21.evt;
2829
+ var mouseMoveUpdater = exports.mouseMoveUpdater = function mouseMoveUpdater(state, _ref24) {
2830
+ var evt = _ref24.evt;
2664
2831
  if (Object.values(state.interactionConfig).some(function (config) {
2665
2832
  return config.enabled;
2666
2833
  })) {
@@ -2694,9 +2861,9 @@ var toggleSplitMapUpdater = exports.toggleSplitMapUpdater = function toggleSplit
2694
2861
  * @memberof visStateUpdaters
2695
2862
  * @public
2696
2863
  */
2697
- var toggleLayerForMapUpdater = exports.toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref22) {
2698
- var mapIndex = _ref22.mapIndex,
2699
- layerId = _ref22.layerId;
2864
+ var toggleLayerForMapUpdater = exports.toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref25) {
2865
+ var mapIndex = _ref25.mapIndex,
2866
+ layerId = _ref25.layerId;
2700
2867
  var splitMaps = state.splitMaps;
2701
2868
  return _objectSpread(_objectSpread({}, state), {}, {
2702
2869
  splitMaps: splitMaps.map(function (sm, i) {
@@ -2767,7 +2934,7 @@ function _hydrateExternallyHostedProtoDataset() {
2767
2934
  }
2768
2935
  var HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK = _tasks["default"].fromPromise(hydrateExternallyHostedProtoDataset, 'HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK');
2769
2936
  var FAIL_CREATE_DATASET_TASK = _tasks["default"].fromPromise(/*#__PURE__*/function () {
2770
- var _ref23 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(message) {
2937
+ var _ref26 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(message) {
2771
2938
  return _regenerator["default"].wrap(function _callee$(_context) {
2772
2939
  while (1) switch (_context.prev = _context.next) {
2773
2940
  case 0:
@@ -2779,7 +2946,7 @@ var FAIL_CREATE_DATASET_TASK = _tasks["default"].fromPromise(/*#__PURE__*/functi
2779
2946
  }, _callee);
2780
2947
  }));
2781
2948
  return function (_x2) {
2782
- return _ref23.apply(this, arguments);
2949
+ return _ref26.apply(this, arguments);
2783
2950
  };
2784
2951
  }(), 'FAIL_CREATE_DATASET_TASK');
2785
2952
  function createNewDataEntryTask(dataset, datasets) {
@@ -2800,12 +2967,12 @@ function refreshExternallyHostedTable(_x3) {
2800
2967
  return _refreshExternallyHostedTable.apply(this, arguments);
2801
2968
  }
2802
2969
  function _refreshExternallyHostedTable() {
2803
- _refreshExternallyHostedTable = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref24) {
2970
+ _refreshExternallyHostedTable = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref27) {
2804
2971
  var metadata, onProgress;
2805
2972
  return _regenerator["default"].wrap(function _callee3$(_context3) {
2806
2973
  while (1) switch (_context3.prev = _context3.next) {
2807
2974
  case 0:
2808
- metadata = _ref24.arg, onProgress = _ref24.onProgress;
2975
+ metadata = _ref27.arg, onProgress = _ref27.onProgress;
2809
2976
  return _context3.abrupt("return", (0, _processors.loadExternallyHostedDataset)(_objectSpread(_objectSpread({}, metadata), {}, {
2810
2977
  onProgress: onProgress,
2811
2978
  bypassCache: true
@@ -2826,9 +2993,9 @@ var REFRESH_EXTERNALLY_HOSTED_DATASET_TASK = _tasks["default"].fromPromiseWithPr
2826
2993
  * @memberof visStateUpdaters
2827
2994
  * @public
2828
2995
  */
2829
- function refreshDatasetUpdater(state, _ref25) {
2996
+ function refreshDatasetUpdater(state, _ref28) {
2830
2997
  var _dataset$metadata2, _dataset$metadata3;
2831
- var dataId = _ref25.dataId;
2998
+ var dataId = _ref28.dataId;
2832
2999
  var dataset = state.datasets[dataId];
2833
3000
  if (!dataset || dataset.type !== _constants.DatasetType.EXTERNALLY_HOSTED || typeof ((_dataset$metadata2 = dataset.metadata) === null || _dataset$metadata2 === void 0 ? void 0 : _dataset$metadata2.source) !== 'string') {
2834
3001
  return state;
@@ -2867,10 +3034,10 @@ function refreshDatasetUpdater(state, _ref25) {
2867
3034
  * @memberof visStateUpdaters
2868
3035
  * @public
2869
3036
  */
2870
- function refreshDatasetProgressUpdater(state, _ref26) {
3037
+ function refreshDatasetProgressUpdater(state, _ref29) {
2871
3038
  var _dataset$metadata4, _dataset$metadata5;
2872
- var dataId = _ref26.dataId,
2873
- percent = _ref26.percent;
3039
+ var dataId = _ref29.dataId,
3040
+ percent = _ref29.percent;
2874
3041
  var dataset = state.datasets[dataId];
2875
3042
  if (!dataset || ((_dataset$metadata4 = dataset.metadata) === null || _dataset$metadata4 === void 0 ? void 0 : _dataset$metadata4.refreshStatus) !== 'loading') {
2876
3043
  return state;
@@ -2960,10 +3127,10 @@ function rebindLayersAndFiltersAfterSchemaChange(state, dataId, datasets) {
2960
3127
  * @memberof visStateUpdaters
2961
3128
  * @public
2962
3129
  */
2963
- function refreshDatasetSuccessUpdater(state, _ref27) {
3130
+ function refreshDatasetSuccessUpdater(state, _ref30) {
2964
3131
  var _result$data;
2965
- var dataId = _ref27.dataId,
2966
- result = _ref27.result;
3132
+ var dataId = _ref30.dataId,
3133
+ result = _ref30.result;
2967
3134
  var dataset = state.datasets[dataId];
2968
3135
  if (!dataset) {
2969
3136
  return state;
@@ -3057,10 +3224,10 @@ function normalizeDatasetRows(rows, fields) {
3057
3224
  * @memberof visStateUpdaters
3058
3225
  * @public
3059
3226
  */
3060
- function addToDatasetUpdater(state, _ref28) {
3061
- var dataId = _ref28.dataId,
3062
- rows = _ref28.rows,
3063
- options = _ref28.options;
3227
+ function addToDatasetUpdater(state, _ref31) {
3228
+ var dataId = _ref31.dataId,
3229
+ rows = _ref31.rows,
3230
+ options = _ref31.options;
3064
3231
  var dataset = state.datasets[dataId];
3065
3232
  if (!dataset) {
3066
3233
  return state;
@@ -3085,10 +3252,10 @@ function addToDatasetUpdater(state, _ref28) {
3085
3252
  * @memberof visStateUpdaters
3086
3253
  * @public
3087
3254
  */
3088
- function removeFromDatasetUpdater(state, _ref29) {
3089
- var dataId = _ref29.dataId,
3090
- rowIndexes = _ref29.rowIndexes,
3091
- byField = _ref29.byField;
3255
+ function removeFromDatasetUpdater(state, _ref32) {
3256
+ var dataId = _ref32.dataId,
3257
+ rowIndexes = _ref32.rowIndexes,
3258
+ byField = _ref32.byField;
3092
3259
  var dataset = state.datasets[dataId];
3093
3260
  if (!dataset) {
3094
3261
  return state;
@@ -3111,9 +3278,9 @@ function removeFromDatasetUpdater(state, _ref29) {
3111
3278
  * @memberof visStateUpdaters
3112
3279
  * @public
3113
3280
  */
3114
- function refreshDatasetErrorUpdater(state, _ref30) {
3115
- var dataId = _ref30.dataId,
3116
- error = _ref30.error;
3281
+ function refreshDatasetErrorUpdater(state, _ref33) {
3282
+ var dataId = _ref33.dataId,
3283
+ error = _ref33.error;
3117
3284
  var dataset = state.datasets[dataId];
3118
3285
  if (!dataset) {
3119
3286
  return state;
@@ -3153,10 +3320,10 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
3153
3320
  }
3154
3321
  var createDatasetTasks = [];
3155
3322
  var notificationTasks = [];
3156
- datasets.forEach(function (_ref31, datasetIndex) {
3157
- var _ref31$info = _ref31.info,
3158
- info = _ref31$info === void 0 ? {} : _ref31$info,
3159
- rest = (0, _objectWithoutProperties2["default"])(_ref31, _excluded2);
3323
+ datasets.forEach(function (_ref34, datasetIndex) {
3324
+ var _ref34$info = _ref34.info,
3325
+ info = _ref34$info === void 0 ? {} : _ref34$info,
3326
+ rest = (0, _objectWithoutProperties2["default"])(_ref34, _excluded2);
3160
3327
  var task = createNewDataEntryTask(_objectSpread({
3161
3328
  info: info
3162
3329
  }, rest), state.datasets);
@@ -3460,10 +3627,10 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3460
3627
  // follow renamed columns
3461
3628
  var columnsPatch = {};
3462
3629
  var columnsChanged = false;
3463
- Object.entries(layer.config.columns || {}).forEach(function (_ref32) {
3464
- var _ref33 = (0, _slicedToArray2["default"])(_ref32, 2),
3465
- ckey = _ref33[0],
3466
- col = _ref33[1];
3630
+ Object.entries(layer.config.columns || {}).forEach(function (_ref35) {
3631
+ var _ref36 = (0, _slicedToArray2["default"])(_ref35, 2),
3632
+ ckey = _ref36[0],
3633
+ col = _ref36[1];
3467
3634
  if (col !== null && col !== void 0 && col.value && renames[col.value]) {
3468
3635
  columnsPatch[ckey] = _objectSpread(_objectSpread({}, col), {}, {
3469
3636
  value: renames[col.value]
@@ -3476,8 +3643,8 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3476
3643
  }
3477
3644
 
3478
3645
  // follow renamed visual-channel fields (colorField, sizeField, ...)
3479
- Object.values(layer.visualChannels).forEach(function (_ref34) {
3480
- var field = _ref34.field;
3646
+ Object.values(layer.visualChannels).forEach(function (_ref37) {
3647
+ var field = _ref37.field;
3481
3648
  var fieldConfig = layer.config[field];
3482
3649
  if (fieldConfig !== null && fieldConfig !== void 0 && fieldConfig.name && renames[fieldConfig.name]) {
3483
3650
  configPatch[field] = _objectSpread(_objectSpread({}, fieldConfig), {}, {
@@ -3867,14 +4034,14 @@ function parseProgress() {
3867
4034
  * @memberof visStateUpdaters
3868
4035
  * @public
3869
4036
  */
3870
- var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref35) {
4037
+ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref38) {
3871
4038
  var _accumulated$data;
3872
- var _ref35$payload = _ref35.payload,
3873
- gen = _ref35$payload.gen,
3874
- fileName = _ref35$payload.fileName,
3875
- progress = _ref35$payload.progress,
3876
- accumulated = _ref35$payload.accumulated,
3877
- onFinish = _ref35$payload.onFinish;
4039
+ var _ref38$payload = _ref38.payload,
4040
+ gen = _ref38$payload.gen,
4041
+ fileName = _ref38$payload.fileName,
4042
+ progress = _ref38$payload.progress,
4043
+ accumulated = _ref38$payload.accumulated,
4044
+ onFinish = _ref38$payload.onFinish;
3878
4045
  var stateWithProgress = updateFileLoadingProgressUpdater(state, {
3879
4046
  fileName: fileName,
3880
4047
  progress: parseProgress(state.fileLoadingProgress[fileName], progress)
@@ -3891,9 +4058,9 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
3891
4058
  return (0, _actions.loadFilesSuccess)(result);
3892
4059
  }, function (err) {
3893
4060
  return (0, _actions.loadFilesErr)(fileName, err);
3894
- })] : []), [(0, _tasks.UNWRAP_TASK)(gen.next()).bimap(function (_ref36) {
3895
- var value = _ref36.value,
3896
- done = _ref36.done;
4061
+ })] : []), [(0, _tasks.UNWRAP_TASK)(gen.next()).bimap(function (_ref39) {
4062
+ var value = _ref39.value,
4063
+ done = _ref39.done;
3897
4064
  return done ? onFinish(accumulated) : (0, _actions.nextFileBatch)({
3898
4065
  gen: gen,
3899
4066
  fileName: fileName,
@@ -3911,9 +4078,9 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
3911
4078
  * @memberof visStateUpdaters
3912
4079
  * @public
3913
4080
  */
3914
- var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref37) {
3915
- var error = _ref37.error,
3916
- fileName = _ref37.fileName;
4081
+ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref40) {
4082
+ var error = _ref40.error,
4083
+ fileName = _ref40.fileName;
3917
4084
  // update ui with error message
3918
4085
  _window.console.warn(error);
3919
4086
  if (!state.fileLoading) {
@@ -3941,8 +4108,8 @@ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpd
3941
4108
  * @memberof visStateUpdaters
3942
4109
  * @public
3943
4110
  */
3944
- var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref38) {
3945
- var dataId = _ref38.dataId;
4111
+ var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref41) {
4112
+ var dataId = _ref41.dataId;
3946
4113
  // apply cpuFilter
3947
4114
  var dataIds = (0, _commonUtils.toArray)(dataId);
3948
4115
  return dataIds.reduce(function (accu, id) {
@@ -4001,9 +4168,9 @@ function initialFileLoadingProgress(file, index) {
4001
4168
  error: null
4002
4169
  });
4003
4170
  }
4004
- function updateFileLoadingProgressUpdater(state, _ref40) {
4005
- var fileName = _ref40.fileName,
4006
- progress = _ref40.progress;
4171
+ function updateFileLoadingProgressUpdater(state, _ref43) {
4172
+ var fileName = _ref43.fileName,
4173
+ progress = _ref43.progress;
4007
4174
  // @ts-expect-error
4008
4175
  return (0, _composerHelpers.pick_)('fileLoadingProgress')((0, _composerHelpers.pick_)(fileName)((0, _composerHelpers.merge_)(progress)))(state);
4009
4176
  }
@@ -4095,8 +4262,8 @@ function updateAnimationDomain(state) {
4095
4262
  * Update the status of the editor
4096
4263
  * @memberof visStateUpdaters
4097
4264
  */
4098
- var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state, _ref41) {
4099
- var mode = _ref41.mode;
4265
+ var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state, _ref44) {
4266
+ var mode = _ref44.mode;
4100
4267
  var sketchesEnabled = (0, _utils.getApplicationConfig)().enableDrawOnMapSketches;
4101
4268
  if (!sketchesEnabled && (mode === _constants.EDITOR_MODES.DRAW_POINT || mode === _constants.EDITOR_MODES.DRAW_LINESTRING)) {
4102
4269
  return state;
@@ -4114,10 +4281,10 @@ var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorMode
4114
4281
  * Update editor features
4115
4282
  * @memberof visStateUpdaters
4116
4283
  */
4117
- function setFeaturesUpdater(state, _ref42) {
4284
+ function setFeaturesUpdater(state, _ref45) {
4118
4285
  var _lastFeature$properti, _lastFeature$properti2;
4119
- var _ref42$features = _ref42.features,
4120
- features = _ref42$features === void 0 ? [] : _ref42$features;
4286
+ var _ref45$features = _ref45.features,
4287
+ features = _ref45$features === void 0 ? [] : _ref45$features;
4121
4288
  var lastFeature = features.length && features[features.length - 1];
4122
4289
  var newState = _objectSpread(_objectSpread({}, state), {}, {
4123
4290
  editor: _objectSpread(_objectSpread({}, state.editor), {}, {
@@ -4190,10 +4357,10 @@ function findEditorFeature(state, feature) {
4190
4357
  * Set user-facing GeoJSON properties on a sketch or polygon-filter feature.
4191
4358
  * @memberof visStateUpdaters
4192
4359
  */
4193
- function setEditorFeaturePropertiesUpdater(state, _ref43) {
4360
+ function setEditorFeaturePropertiesUpdater(state, _ref46) {
4194
4361
  var _state$editor$selecte2;
4195
- var feature = _ref43.feature,
4196
- properties = _ref43.properties;
4362
+ var feature = _ref46.feature,
4363
+ properties = _ref46.properties;
4197
4364
  if (!(0, _utils.getApplicationConfig)().enableDrawOnMapSketches) {
4198
4365
  return state;
4199
4366
  }
@@ -4232,9 +4399,9 @@ function setEditorFeaturePropertiesUpdater(state, _ref43) {
4232
4399
  * Set the current selected feature
4233
4400
  * @memberof uiStateUpdaters
4234
4401
  */
4235
- var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref44) {
4236
- var feature = _ref44.feature,
4237
- selectionContext = _ref44.selectionContext;
4402
+ var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref47) {
4403
+ var feature = _ref47.feature,
4404
+ selectionContext = _ref47.selectionContext;
4238
4405
  // add bbox for polygon filter to speed up filtering
4239
4406
  var selectedFeature = feature;
4240
4407
  if (feature !== null && feature !== void 0 && feature.properties) {
@@ -4256,8 +4423,8 @@ var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function set
4256
4423
  * Delete existing feature from filters
4257
4424
  * @memberof visStateUpdaters
4258
4425
  */
4259
- function deleteFeatureUpdater(state, _ref45) {
4260
- var feature = _ref45.feature;
4426
+ function deleteFeatureUpdater(state, _ref48) {
4427
+ var feature = _ref48.feature;
4261
4428
  if (!feature) {
4262
4429
  return state;
4263
4430
  }
@@ -4402,10 +4569,10 @@ function setPolygonFilterAllLayersUpdater(state, payload) {
4402
4569
  * @memberof visStateUpdaters
4403
4570
  * @public
4404
4571
  */
4405
- function sortTableColumnUpdater(state, _ref46) {
4406
- var dataId = _ref46.dataId,
4407
- column = _ref46.column,
4408
- mode = _ref46.mode;
4572
+ function sortTableColumnUpdater(state, _ref49) {
4573
+ var dataId = _ref49.dataId,
4574
+ column = _ref49.column,
4575
+ mode = _ref49.mode;
4409
4576
  var dataset = state.datasets[dataId];
4410
4577
  if (!dataset) {
4411
4578
  return state;
@@ -4426,9 +4593,9 @@ function sortTableColumnUpdater(state, _ref46) {
4426
4593
  * @memberof visStateUpdaters
4427
4594
  * @public
4428
4595
  */
4429
- function pinTableColumnUpdater(state, _ref47) {
4430
- var dataId = _ref47.dataId,
4431
- column = _ref47.column;
4596
+ function pinTableColumnUpdater(state, _ref50) {
4597
+ var dataId = _ref50.dataId,
4598
+ column = _ref50.column;
4432
4599
  var dataset = state.datasets[dataId];
4433
4600
  if (!dataset) {
4434
4601
  return state;
@@ -4442,9 +4609,9 @@ function pinTableColumnUpdater(state, _ref47) {
4442
4609
  * @memberof visStateUpdaters
4443
4610
  * @public
4444
4611
  */
4445
- function copyTableColumnUpdater(state, _ref48) {
4446
- var dataId = _ref48.dataId,
4447
- column = _ref48.column;
4612
+ function copyTableColumnUpdater(state, _ref51) {
4613
+ var dataId = _ref51.dataId,
4614
+ column = _ref51.column;
4448
4615
  var dataset = state.datasets[dataId];
4449
4616
  if (!dataset) {
4450
4617
  return state;
@@ -4468,9 +4635,9 @@ function copyTableColumnUpdater(state, _ref48) {
4468
4635
  * @memberof visStateUpdaters
4469
4636
  * @public
4470
4637
  */
4471
- function setColumnDisplayFormatUpdater(state, _ref49) {
4472
- var dataId = _ref49.dataId,
4473
- formats = _ref49.formats;
4638
+ function setColumnDisplayFormatUpdater(state, _ref52) {
4639
+ var dataId = _ref52.dataId,
4640
+ formats = _ref52.formats;
4474
4641
  var dataset = state.datasets[dataId];
4475
4642
  if (!dataset) {
4476
4643
  return state;
@@ -4521,12 +4688,12 @@ function requestDatasetColumnStatistics(_x4) {
4521
4688
  return _requestDatasetColumnStatistics.apply(this, arguments);
4522
4689
  }
4523
4690
  function _requestDatasetColumnStatistics() {
4524
- _requestDatasetColumnStatistics = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(_ref50) {
4691
+ _requestDatasetColumnStatistics = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(_ref53) {
4525
4692
  var dataset, field, filterProps, mappedValue, values, result;
4526
4693
  return _regenerator["default"].wrap(function _callee4$(_context4) {
4527
4694
  while (1) switch (_context4.prev = _context4.next) {
4528
4695
  case 0:
4529
- dataset = _ref50.dataset, field = _ref50.field;
4696
+ dataset = _ref53.dataset, field = _ref53.field;
4530
4697
  _context4.next = 3;
4531
4698
  return yieldForPaint();
4532
4699
  case 3:
@@ -4559,9 +4726,9 @@ var LOAD_COLUMN_STATS_TASK = _tasks["default"].fromPromise(requestDatasetColumnS
4559
4726
  * @memberof visStateUpdaters
4560
4727
  * @public
4561
4728
  */
4562
- function loadColumnStatsUpdater(state, _ref51) {
4563
- var dataId = _ref51.dataId,
4564
- fieldName = _ref51.fieldName;
4729
+ function loadColumnStatsUpdater(state, _ref54) {
4730
+ var dataId = _ref54.dataId,
4731
+ fieldName = _ref54.fieldName;
4565
4732
  var fieldNamesToLoad = (0, _commonUtils.toArray)(fieldName);
4566
4733
  var dataset = state.datasets[dataId];
4567
4734
  var fieldsToLoad = dataset === null || dataset === void 0 ? void 0 : dataset.fields.filter(function (f) {
@@ -4582,9 +4749,9 @@ function loadColumnStatsUpdater(state, _ref51) {
4582
4749
  return LOAD_COLUMN_STATS_TASK({
4583
4750
  dataset: newDataset,
4584
4751
  field: f
4585
- }).bimap(function (_ref52) {
4586
- var result = _ref52.result,
4587
- filterProps = _ref52.filterProps;
4752
+ }).bimap(function (_ref55) {
4753
+ var result = _ref55.result,
4754
+ filterProps = _ref55.filterProps;
4588
4755
  return (0, _actions.loadColumnStatsSuccess)(newDataset.id, f.name, result, filterProps);
4589
4756
  }, function (error) {
4590
4757
  return (0, _actions.loadColumnStatsError)(newDataset.id, f.name, error);
@@ -4599,11 +4766,11 @@ function loadColumnStatsUpdater(state, _ref51) {
4599
4766
  * @memberof visStateUpdaters
4600
4767
  * @public
4601
4768
  */
4602
- function loadColumnStatsSuccessUpdater(state, _ref53) {
4603
- var result = _ref53.result,
4604
- filterProps = _ref53.filterProps,
4605
- dataId = _ref53.dataId,
4606
- fieldName = _ref53.fieldName;
4769
+ function loadColumnStatsSuccessUpdater(state, _ref56) {
4770
+ var result = _ref56.result,
4771
+ filterProps = _ref56.filterProps,
4772
+ dataId = _ref56.dataId,
4773
+ fieldName = _ref56.fieldName;
4607
4774
  var dataset = state.datasets[dataId];
4608
4775
  var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
4609
4776
  return f.name === fieldName;
@@ -4631,10 +4798,10 @@ function loadColumnStatsSuccessUpdater(state, _ref53) {
4631
4798
  * @memberof visStateUpdaters
4632
4799
  * @public
4633
4800
  */
4634
- function loadColumnStatsErrorUpdater(state, _ref54) {
4635
- var error = _ref54.error,
4636
- dataId = _ref54.dataId,
4637
- fieldName = _ref54.fieldName;
4801
+ function loadColumnStatsErrorUpdater(state, _ref57) {
4802
+ var error = _ref57.error,
4803
+ dataId = _ref57.dataId,
4804
+ fieldName = _ref57.fieldName;
4638
4805
  _window.console.error(error);
4639
4806
  var dataset = state.datasets[dataId];
4640
4807
  var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
@@ -4720,8 +4887,8 @@ _action) {
4720
4887
  * Copy in-memory rows (or loaded vector-tile features) inside the selected
4721
4888
  * Draw on Map polygon into a new dataset.
4722
4889
  */
4723
- function extractDataFromFeatureUpdater(state, _ref55) {
4724
- var layerId = _ref55.layerId;
4890
+ function extractDataFromFeatureUpdater(state, _ref58) {
4891
+ var layerId = _ref58.layerId;
4725
4892
  var feature = state.editor.selectedFeature;
4726
4893
  var layer = state.layers.find(function (l) {
4727
4894
  return l.id === layerId;
@@ -4801,9 +4968,9 @@ function extractDataFromFeatureUpdater(state, _ref55) {
4801
4968
  }
4802
4969
  });
4803
4970
  }
4804
- function setFilterAnimationTimeConfigUpdater(state, _ref56) {
4805
- var idx = _ref56.idx,
4806
- config = _ref56.config;
4971
+ function setFilterAnimationTimeConfigUpdater(state, _ref59) {
4972
+ var idx = _ref59.idx,
4973
+ config = _ref59.config;
4807
4974
  var oldFilter = state.filters[idx];
4808
4975
  if (!oldFilter) {
4809
4976
  _window.console.error("filters.".concat(idx, " is undefined"));
@@ -4833,8 +5000,8 @@ function checkTimeConfigArgs(config) {
4833
5000
  /**
4834
5001
  * Update editor
4835
5002
  */
4836
- function setLayerAnimationTimeConfigUpdater(state, _ref57) {
4837
- var config = _ref57.config;
5003
+ function setLayerAnimationTimeConfigUpdater(state, _ref60) {
5004
+ var config = _ref60.config;
4838
5005
  if (!config) {
4839
5006
  return state;
4840
5007
  }
@@ -5032,8 +5199,8 @@ function setTimeFilterTimelineModeUpdater(state, action) {
5032
5199
  * @returns nextState
5033
5200
  * @public
5034
5201
  */
5035
- var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref58) {
5036
- var change = _ref58.payload.change;
5202
+ var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref61) {
5203
+ var change = _ref61.payload.change;
5037
5204
  var loadingIndicatorValue = state.loadingIndicatorValue;
5038
5205
  if (!loadingIndicatorValue) {
5039
5206
  loadingIndicatorValue = 0;
@@ -5102,6 +5269,9 @@ function adjustTimeFilterInterval(state, filter) {
5102
5269
  // replace it with another dataId
5103
5270
  function defaultReplaceParentDatasetIds(value, dataId, dataIdToReplace) {
5104
5271
  var _value$config, _value$config2;
5272
+ if (value == null) {
5273
+ return null;
5274
+ }
5105
5275
  if (Array.isArray(value)) {
5106
5276
  // for layers, filters, call defaultReplaceParentDatasetIds on each item in array
5107
5277
  var replaced = value.map(function (v) {
@@ -5153,10 +5323,10 @@ function findChildDatasetIds(value) {
5153
5323
  }
5154
5324
 
5155
5325
  // moved unmerged layers, filters, interactions
5156
- function moveValueToBeMerged(state, propValues, _ref60) {
5157
- var prop = _ref60.prop,
5158
- toMergeProp = _ref60.toMergeProp,
5159
- saveUnmerged = _ref60.saveUnmerged;
5326
+ function moveValueToBeMerged(state, propValues, _ref63) {
5327
+ var prop = _ref63.prop,
5328
+ toMergeProp = _ref63.toMergeProp,
5329
+ saveUnmerged = _ref63.saveUnmerged;
5160
5330
  // remove prop value from state
5161
5331
  // TODO: should we add remove updater to merger as well?
5162
5332
  if (!propValues) {
@@ -5215,17 +5385,50 @@ function prepareStateForDatasetReplace(state, dataId, dataIdToUse) {
5215
5385
  }
5216
5386
  return nextState;
5217
5387
  }
5218
- function replaceDatasetDepsInState(state, _ref61) {
5219
- var dataId = _ref61.dataId,
5220
- dataIdToUse = _ref61.dataIdToUse;
5388
+
5389
+ /**
5390
+ * The order to preserve for the items that will be merged back.
5391
+ *
5392
+ * `ids` comes from the serialized state, so it lists everything but the items
5393
+ * another dataset's replacement parked a moment ago: an app refreshing several
5394
+ * datasets in a row prepares the second replacement before the first one's
5395
+ * items have merged back. Writing `ids` as it is would drop those, and
5396
+ * `insertItemBasedOnPreservedOrder` puts an item it cannot place at the front —
5397
+ * so they would come back reversed. Where they belong is what the order written
5398
+ * when they were parked already says, so that order is kept for them.
5399
+ */
5400
+ function preservedOrderWithParked() {
5401
+ var previousOrder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
5402
+ var ids = arguments.length > 1 ? arguments[1] : undefined;
5403
+ var parked = arguments.length > 2 ? arguments[2] : undefined;
5404
+ var parkedIds = parked.map(function (item) {
5405
+ return item === null || item === void 0 ? void 0 : item.id;
5406
+ }).filter(function (id) {
5407
+ return Boolean(id) && !ids.includes(id);
5408
+ });
5409
+ if (!parkedIds.length) {
5410
+ return ids;
5411
+ }
5412
+ var known = new Set([].concat((0, _toConsumableArray2["default"])(ids), (0, _toConsumableArray2["default"])(parkedIds)));
5413
+ var ordered = (previousOrder || []).filter(function (id) {
5414
+ return known.has(id);
5415
+ });
5416
+ var rest = [].concat((0, _toConsumableArray2["default"])(ids), (0, _toConsumableArray2["default"])(parkedIds)).filter(function (id) {
5417
+ return !ordered.includes(id);
5418
+ });
5419
+ return [].concat((0, _toConsumableArray2["default"])(ordered), (0, _toConsumableArray2["default"])(rest));
5420
+ }
5421
+ function replaceDatasetDepsInState(state, _ref64) {
5422
+ var dataId = _ref64.dataId,
5423
+ dataIdToUse = _ref64.dataIdToUse;
5221
5424
  var serializedState = (0, _visStateMerger.serializeVisState)(state, state.schema);
5222
- var nextState = state.mergers.reduce(function (accuState, _ref62) {
5223
- var prop = _ref62.prop,
5224
- toMergeProp = _ref62.toMergeProp,
5225
- replaceParentDatasetIds = _ref62.replaceParentDatasetIds,
5226
- getChildDatasetIds = _ref62.getChildDatasetIds,
5227
- saveUnmerged = _ref62.saveUnmerged,
5228
- preserveOrder = _ref62.preserveOrder;
5425
+ var nextState = state.mergers.reduce(function (accuState, _ref65) {
5426
+ var prop = _ref65.prop,
5427
+ toMergeProp = _ref65.toMergeProp,
5428
+ replaceParentDatasetIds = _ref65.replaceParentDatasetIds,
5429
+ getChildDatasetIds = _ref65.getChildDatasetIds,
5430
+ saveUnmerged = _ref65.saveUnmerged,
5431
+ preserveOrder = _ref65.preserveOrder;
5229
5432
  // get dataset ids that are depends on this dataset
5230
5433
  var props = (0, _commonUtils.toArray)(prop);
5231
5434
  var toMergeProps = (0, _commonUtils.toArray)(toMergeProp);
@@ -5234,13 +5437,20 @@ function replaceDatasetDepsInState(state, _ref61) {
5234
5437
  }) : [];
5235
5438
  var replacedState = accuState;
5236
5439
  savedProps.forEach(function (propValue, i) {
5237
- var _replacedState$merger;
5440
+ var _replacedState$merger, _replacedState$merger2;
5441
+ if (propValue == null) {
5442
+ return;
5443
+ }
5238
5444
  var mergerOptions = {
5239
5445
  prop: props[i],
5240
5446
  toMergeProp: toMergeProps[i],
5241
5447
  getChildDatasetIds: getChildDatasetIds,
5242
5448
  saveUnmerged: saveUnmerged
5243
5449
  };
5450
+
5451
+ // What another dataset's replacement parked a moment ago and has not
5452
+ // merged back yet, read before this one parks anything of its own.
5453
+ var parkedElsewhere = mergerOptions.toMergeProp !== undefined ? (0, _commonUtils.toArray)((_replacedState$merger = replacedState[mergerOptions.toMergeProp]) !== null && _replacedState$merger !== void 0 ? _replacedState$merger : []) : [];
5244
5454
  var replacedItem = (replaceParentDatasetIds === null || replaceParentDatasetIds === void 0 ? void 0 : replaceParentDatasetIds(propValue, dataId, dataIdToUse)) || defaultReplaceParentDatasetIds(propValue, dataId, dataIdToUse);
5245
5455
  replacedState = replacedItem ? replacePropValueInState(replacedState, replacedItem, mergerOptions) : replacedState;
5246
5456
 
@@ -5248,21 +5458,21 @@ function replaceDatasetDepsInState(state, _ref61) {
5248
5458
  // can still hold another dataset's items, replaced a moment earlier and
5249
5459
  // not merged back yet; overwriting the order they were parked with would
5250
5460
  // merge them back in reverse.
5251
- if (replacedItem && mergerOptions.toMergeProp !== undefined && (_replacedState$merger = replacedState[mergerOptions.toMergeProp]) !== null && _replacedState$merger !== void 0 && _replacedState$merger.length && preserveOrder) {
5252
- replacedState[preserveOrder] = propValue.map(function (item) {
5461
+ if (replacedItem && mergerOptions.toMergeProp !== undefined && (_replacedState$merger2 = replacedState[mergerOptions.toMergeProp]) !== null && _replacedState$merger2 !== void 0 && _replacedState$merger2.length && preserveOrder) {
5462
+ replacedState[preserveOrder] = preservedOrderWithParked(replacedState[preserveOrder], propValue.map(function (item) {
5253
5463
  return item.id;
5254
- });
5464
+ }), parkedElsewhere);
5255
5465
  }
5256
5466
  });
5257
5467
  return replacedState;
5258
5468
  }, state);
5259
5469
  return nextState;
5260
5470
  }
5261
- function replacePropValueInState(state, replacedItem, _ref63) {
5262
- var prop = _ref63.prop,
5263
- toMergeProp = _ref63.toMergeProp,
5264
- getChildDatasetIds = _ref63.getChildDatasetIds,
5265
- saveUnmerged = _ref63.saveUnmerged;
5471
+ function replacePropValueInState(state, replacedItem, _ref66) {
5472
+ var prop = _ref66.prop,
5473
+ toMergeProp = _ref66.toMergeProp,
5474
+ getChildDatasetIds = _ref66.getChildDatasetIds,
5475
+ saveUnmerged = _ref66.saveUnmerged;
5266
5476
  // prop is depends on the dataset to be replaced
5267
5477
  // remove prop from state, and move it to toBeMerged
5268
5478
  var nextState = moveValueToBeMerged(state, replacedItem, {
@@ -5280,4 +5490,4 @@ function replacePropValueInState(state, replacedItem, _ref63) {
5280
5490
  }
5281
5491
  return nextState;
5282
5492
  }
5283
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl9pbnRlcmFjdGlvblV0aWxzIiwiX2xheWVyVXRpbHMiLCJfZWZmZWN0cyIsIl9kYXRhVXRpbHMiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiYSIsInUiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJleHBvcnRzIiwidG9vbHRpcCIsImlkIiwibGFiZWwiLCJlbmFibGVkIiwiY29uZmlnIiwiZmllbGRzVG9TaG93IiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkNPTVBBUkVfVFlQRVMiLCJBQlNPTFVURSIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiYW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uc1RvQmVNZXJnZWQiLCJzZWxlY3RlZEFubm90YXRpb25JZCIsImlzRWRpdGluZ0Fubm90YXRpb25UZXh0IiwiaW50ZXJhY3Rpb25Db25maWciLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsIm1vdXNlUG9zIiwibWF4RGVmYXVsdFRvb2x0aXBzIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJMYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwiVklTX1NUQVRFX01FUkdFUlMiLCJzY2hlbWEiLCJLZXBsZXJHTFNjaGVtYSIsIkFDVElPTl9UQVNLX0ZJVF9CT1VORFMiLCJUYXNrIiwiZnJvbUNhbGxiYWNrIiwiXyIsImNiIiwiQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiIsInVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSIsInN0YXRlIiwiX3JlZiIsImxheWVyIiwiaWR4IiwibWFwIiwibHlyIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImlzVmlzaWJsZSIsImFkZE5ld0xheWVyc1RvU3BsaXRNYXAiLCJyZW1vdmVMYXllckZyb21TcGxpdE1hcHMiLCJhbmltYXRpb24iLCJ1cGRhdGVBbmltYXRpb25Eb21haW4iLCJwaWNrQ2hhbmdlZFByb3BzIiwicHJldiIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwia2V5IiwicHJvdG90eXBlIiwiaXNFcXVhbCIsIlZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMiLCJhcHBseUxheWVyQ29uZmlnVXBkYXRlciIsImFjdGlvbiIsIl9zZXJpYWxpemVMYXllciIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJuZXdQYXJzZWRMYXllciIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsIl90ZXh0TGFiZWwkZmluZCRjb2xsaSIsIl90ZXh0TGFiZWwkZmluZCIsImNvbGxpc2lvbkVuYWJsZWQiLCJCb29sZWFuIiwidXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlIiwic3BsaWNlIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyIiwiX29sZExheWVyJGdldERlZmF1bHRMIiwiX29sZExheWVyJGdldERlZmF1bHRMMiIsImdldERlZmF1bHRMYXllckNvbmZpZyIsIl90ZXh0TGFiZWwkIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm5ld1R5cGUiLCJvbGRJZCIsIkNvbnNvbGUiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsInJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldCIsInZpc3VhbENoYW5uZWwiLCJpbmNvbWluZyIsIl90eXBlb2YyIiwiZm91bmQiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJjaGFubmVsS2V5IiwiamVua3MiLCJlZGl0Qm91bmRzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTYiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwiX3JlZjQiLCJyZWR1Y2UiLCJhY2N1Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJzZXRGaWx0ZXJVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlciIsIl9yZWY1IiwiYW5pbWF0aW9uV2luZG93IiwibmV3RmlsdGVyIiwic3dhcF8iLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwic2V0RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsInRvQXJyYXkiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsInYiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ1bmlxIiwiZmlsdGVyV2l0aFBMb3QiLCJ1cGRhdGVGaWx0ZXJQbG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiZ2V0RGVmYXVsdEZpbHRlciIsInJlbW92ZUZpbHRlclBsb3QiLCJfaSIsIl9hcnIiLCJuZXh0VmFsIiwiZG9tYWluU3RlcHMiLCJtZXJnZUZpbHRlckRvbWFpbiIsIm5leHRGaWx0ZXIiLCJzdGVwIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImRhdGFzZXRJZHMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsIm9sZERhdGFJZCIsImRhdGFzZXRJZCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsInNldEZpbHRlckdwdU1vZGUiLCJhc3NpZ25HcHVDaGFubmVsIiwiZW5kTmFtZSIsIl9hcHBseVRpbWVGaWx0ZXJFbmRGaSIsImFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSIsImdwdUNoYW5uZWwiLCJncHVFbmRDaGFubmVsIiwibGF5ZXJJZERpZmZlcmVuY2UiLCJ4b3IiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwic2V0RmlsdGVyUGxvdFVwZGF0ZXIiLCJfcmVmNiIsIm5ld1Byb3AiLCJwaWNrXyIsIm1lcmdlXyIsInBsb3RUeXBlIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJpc1NpZGVGaWx0ZXIiLCJhcHBseUZpbHRlckNvbmZpZyIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwiZ2V0TmV3TGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVySWRzVG9SZW1vdmUiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImFycmF5TW92ZSIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJnZW5lcmF0ZUhhc2hJZCIsIkxBWUVSX0lEX0xFTkdUSCIsInBhcmVudEdyb3VwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJhcnJheUluc2VydCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiZWZmZWN0IiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwibmV3RWZmZWN0IiwiY3JlYXRlRWZmZWN0Iiwic2V0UHJvcHMiLCJmaXhFZmZlY3RPcmRlciIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9yZWYxMyIsIl9jb25maWckdGV4dFNpZGUiLCJfcmVmMTQiLCJfY29uZmlnJHRleHRWZXJ0aWNhbFAiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYXJtTGVuZ3RoMiIsIl9hcm1MZW5ndGgzIiwiX3JhZGl1c0luTWV0ZXJzIiwia2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwicHJvdmlkZWRBbmdsZSIsImFuZ2xlIiwiZGVyaXZlZEZyb21BbmdsZSIsInRleHRQbGFjZW1lbnRGcm9tQW5nbGUiLCJ0ZXh0U2lkZSIsIkFubm90YXRpb25LaW5kIiwiVEVYVCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJ0ZXh0VmVydGljYWxQb3NpdGlvbiIsInZlcnRpY2FsIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04iLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImxpbmVDb2xvciIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwibGluZVdpZHRoIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJ0ZXh0V2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCIsInRleHRIZWlnaHQiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQiLCJ0ZXh0VmVydGljYWxBbGlnbiIsImRlZmF1bHRBbmdsZSIsIkFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFIiwiUE9JTlQiLCJhcm1MZW5ndGgiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIkFSUk9XIiwiQ0lSQ0xFIiwicmFkaXVzSW5NZXRlcnMiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNSIsInVwZGF0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE2IiwibmV4dEFubm90YXRpb24iLCJuZXdBbm5vdGF0aW9ucyIsImR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE3IiwiY2xvbmVEZWVwIiwic2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxOCIsImlzRWRpdGluZ1RleHQiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJfc3RhdGUkZGF0YXNldHMiLCJuZXdEYXRhc2V0cyIsImxheWVyc1RvUmVtb3ZlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluZGV4T2YiLCJyZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnIiwiX3JlZjE5IiwiX2ludGVyYWN0aW9uQ29uZmlnIiwiX2NvbmZpZyRmaWVsZHNUb1Nob3ciLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyIiwidXBkYXRlRGF0YXNldFByb3BzVXBkYXRlciIsIm5ld0NvbG9yIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMjAiLCJfcmVmMjAkcGF5bG9hZCIsInBheWxvYWQiLCJfcmVmMjAkcGF5bG9hZCRjb25maWciLCJfcmVmMjAkcGF5bG9hZCRvcHRpb24iLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsImlzVmFsaWRNZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYyMSIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjIyIiwiaGFzVGFidWxhckRhdGFzZXREYXRhIiwiZGF0YSIsIl9kYXRhJHJvd3MiLCJfZGF0YSRjb2xzIiwicm93cyIsImNvbHMiLCJhcnJvd1RhYmxlIiwibmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZSIsIl9kYXRhc2V0JGluZm8iLCJfZGF0YXNldCRtZXRhZGF0YSIsIkRhdGFzZXRUeXBlIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJfZGF0YXNldCRtZXRhZGF0YTciLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTgiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYWJydXB0IiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwiZm9ybWF0IiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2UiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJfcmVmMjMiLCJfY2FsbGVlIiwibWVzc2FnZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJfeDIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwiY2hhaW4iLCJoeWRyYXRlZCIsInRhc2siLCJwYXRjaERhdGFzZXRNZXRhZGF0YSIsInBhdGNoIiwiY29weVRhYmxlQW5kVXBkYXRlIiwicmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl94MyIsIl9yZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX2NhbGxlZTMiLCJfcmVmMjQiLCJvblByb2dyZXNzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiYXJnIiwiUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyIsInJlZnJlc2hEYXRhc2V0VXBkYXRlciIsIl9yZWYyNSIsIl9kYXRhc2V0JG1ldGFkYXRhMiIsIl9kYXRhc2V0JG1ldGFkYXRhMyIsIm5leHREYXRhc2V0IiwicmVmcmVzaEVycm9yIiwicmVmcmVzaFByb2dyZXNzIiwid2l0aFRhc2siLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50IiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsIk1hdGgiLCJyb3VuZCIsInBlcmNlbnQiLCJiaW1hcCIsInJlZnJlc2hEYXRhc2V0U3VjY2VzcyIsInJlZnJlc2hEYXRhc2V0RXJyb3IiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlciIsIl9yZWYyNiIsIl9kYXRhc2V0JG1ldGFkYXRhNCIsIl9kYXRhc2V0JG1ldGFkYXRhNSIsIm5leHRQZXJjZW50IiwibWF4IiwibWluIiwiZmllbGROYW1lc0VxdWFsIiwiY3VycmVudCIsImV2ZXJ5IiwicmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlIiwibmV4dExheWVycyIsImRyb3BwZWRMYXllcnMiLCJyZWJvdW5kIiwibmV4dExheWVyT3JkZXIiLCJuZXh0U3BsaXRNYXBzIiwibmV4dExheWVyRGF0YSIsIm9sZElkeCIsImZpbHRlcnNGb3JEYXRhc2V0Iiwib3RoZXJGaWx0ZXJzIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJuZXh0RmlsdGVycyIsInJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfcmVmMjciLCJfcmVzdWx0JGRhdGEiLCJtZXRhZGF0YVBhdGNoIiwic2NoZW1hVW5jaGFuZ2VkIiwibm90TW9kaWZpZWQiLCJ1cGRhdGUiLCJyZWZyZXNoZWQiLCJyZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSIsImlzRGF0YXNldFJvd0xpc3QiLCJpc1BsYWluT2JqZWN0IiwidG9BcnJheVJvdyIsInJvdyIsInJlY29yZCIsIm5vcm1hbGl6ZURhdGFzZXRSb3dzIiwibGlzdCIsIm5vcm1hbGl6ZWQiLCJhcnJheVJvdyIsImFkZFRvRGF0YXNldFVwZGF0ZXIiLCJfcmVmMjgiLCJhcHBsaWVkIiwidXBzZXJ0QnkiLCJ1cHNlcnRSb3dzIiwiYXBwZW5kUm93cyIsInJlbW92ZUZyb21EYXRhc2V0VXBkYXRlciIsIl9yZWYyOSIsInJvd0luZGV4ZXMiLCJieUZpZWxkIiwiaW5kZXhlcyIsImZpbmRSb3dJbmRleGVzQnlGaWVsZFZhbHVlcyIsInJlbW92ZVJvd3MiLCJyZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlciIsIl9yZWYzMCIsInVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwiY3JlYXRlRGF0YXNldFRhc2tzIiwibm90aWZpY2F0aW9uVGFza3MiLCJfcmVmMzEiLCJkYXRhc2V0SW5kZXgiLCJfcmVmMzEkaW5mbyIsInJlc3QiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsImRhdGFzZXRzQWxsU2V0dGxlZFRhc2siLCJhbGxTZXR0bGVkIiwicmVzdWx0cyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwiYWRkVG9NYXBPcHRpb25zIiwic2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIiLCJwYXlsb2FkXyIsImNoYW5nZSIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiQUNUSU9OX1RBU0siLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zIiwibGF5ZXJWaXNDb25maWciLCJwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhIiwiX2xheWVyJGNvbmZpZyIsIkxBWUVSX1RZUEVTIiwiZ2VvanNvbiIsImNvbHVtbk1vZGUiLCJmRGF0YUlkIiwiZGF0YXNldEZpbHRlcmVkIiwiZGF0YUVtcHR5IiwibmV3TGF5ZXJzIiwiYXV0b0NyZWF0ZUxheWVycyIsImFkZERlZmF1bHRMYXllcnMiLCJsYXllcnNOb3RJblNwbGl0TWFwcyIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJwb2x5Z29uRmlsdGVycyIsInBvbHlnb24iLCJwb2x5Z29uTWV0YURhdGFJZHMiLCJfZiRsYXllcklkIiwiY2VudGVyTWFwIiwiYm91bmRzIiwiZmluZE1hcEJvdW5kcyIsInBhZGRpbmciLCJmaXRCb3VuZHNUYXNrIiwiZml0TWFwQm91bmRzIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheTIiLCJpc1JnYkNvbG9yIiwiZGVlcG1lcmdlIiwiZXhpc3RpbmciLCJyZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEiLCJyZW5hbWVzIiwibmV3VGFibGUiLCJfbGF5ZXIkY29uZmlnJHRleHRMYWIiLCJjb25maWdQYXRjaCIsImNvbHVtbnNQYXRjaCIsImNvbHVtbnNDaGFuZ2VkIiwiY29sdW1ucyIsIl9yZWYzMiIsIl9yZWYzMyIsImNrZXkiLCJjb2wiLCJfcmVmMzQiLCJmaWVsZENvbmZpZyIsImxheWVyQ29weSIsImFzc2lnbiIsImNyZWF0ZSIsImdldFByb3RvdHlwZU9mIiwiaGFzQWxsQ29sdW1ucyIsInVwZGF0ZURhdGFzZXRVcGRhdGVyIiwiX2ludGVyYWN0aW9uQ29uZmlnMiIsIl90b29sdGlwJGNvbmZpZyIsIl9hY3Rpb24kcmVuYW1lcyIsInVwZGF0ZVNjaGVtYSIsImZpbHRlcmVkSWR4Q1BVIiwiYWxsSW5kZXhlcyIsImZpbHRlclJlY29yZENQVSIsInNvcnRDb2x1bW4iLCJzb3J0T3JkZXIiLCJwaW5uZWRDb2x1bW5zIiwiX3JlbmFtZXMkbmFtZSIsImdldENvbHVtbkZpZWxkSWR4IiwibmV3RmllbGRzQnlOYW1lIiwiU2V0IiwiX3JlbmFtZXMkb2xkTmFtZSIsIl91cGRhdGVkJHlBeGlzIiwidmkiLCJvbGROYW1lIiwibmV3TmFtZSIsImZpZWxkSWR4IiwiX2FwcGx5RmlsdGVyRmllbGROYW1lMiIsInVwZGF0ZWQiLCJmaWx0ZXJUYWJsZSIsInJlY29uY2lsZWQiLCJuZXh0RmllbGRzVG9TaG93IiwiZmxhdE1hcCIsIl9yZW5hbWVzJGYkbmFtZSIsIl9zdGF0ZSRzcGxpdE1hcHMkaW5kZSIsImluZGV4VG9SZXRyaWV2ZSIsIm1hcExheWVycyIsImxvYWRGaWxlc1VwZGF0ZXIiLCJmaWxlcyIsIl9hY3Rpb24kb25GaW5pc2giLCJvbkZpbmlzaCIsImxvYWRGaWxlc1N1Y2Nlc3MiLCJjb21wYW5pb25GaWxlcyIsImZpbGVzVG9Mb2FkIiwiZ2V0RmlsZXNUb1BhcnNlIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsIl9zdGF0ZSRmaWxlTG9hZGluZyIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheTIiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiTE9BRF9GSUxFX1RBU0siLCJnZW4iLCJuZXh0RmlsZUJhdGNoIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiY29udGVudCIsImxvYWRGaWxlc0VyciIsInByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQyIiwiUFJPQ0VTU19GSUxFX0RBVEEiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiX3JlZjM1IiwiX2FjY3VtdWxhdGVkJGRhdGEiLCJfcmVmMzUkcGF5bG9hZCIsImFjY3VtdWxhdGVkIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJ1c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIlVOV1JBUF9UQVNLIiwiX3JlZjM2IiwibG9hZEZpbGVzRXJyVXBkYXRlciIsIl9yZWYzNyIsIl9zdGF0ZSRmaWxlTG9hZGluZzIiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmMzgiLCJkYXRhSWRzIiwiZmlsdGVyRGF0YXNldENQVSIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJmaW5kRmllbGRzVG9TaG93IiwibWVyZ2VkIiwiX3JlZjQwIiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlVGltZURvbWFpbnMiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJtZXJnZWRUaW1lU3RlcHMiLCJzb3J0IiwiQkFTRV9TUEVFRCIsIkZQUyIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsImlzSW5SYW5nZSIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjQxIiwic2tldGNoZXNFbmFibGVkIiwiZW5hYmxlRHJhd09uTWFwU2tldGNoZXMiLCJEUkFXX1BPSU5UIiwiRFJBV19MSU5FU1RSSU5HIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjQyIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWY0MiRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImJib3giLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjQzIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsIm5leHRGZWF0dXJlIiwibWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMiLCJuZXh0RWRpdG9yIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWY0NCIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWY0NSIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsInNrZXRjaEZlYXR1cmUiLCJ0b1NrZXRjaEZlYXR1cmUiLCJzdGF0ZVdpdGhvdXRGaWx0ZXIiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlciIsInZpc2libGVMYXllcklkcyIsImFsbExheWVySWRzIiwic29ydFRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0NiIsImNvbHVtbiIsInNvcnRNb2RlIiwiY3VycmVudE1vZGUiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwic29ydGVkIiwic29ydERhdGFzZXRCeUNvbHVtbiIsInBpblRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0NyIsInBpblRhYmxlQ29sdW1ucyIsImNvcHlUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNDgiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInBhcnNlRmllbGRWYWx1ZSIsInZhbHVlQXQiLCJqb2luIiwiY29weSIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjQ5IiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnMiIsImNvbG9yRmllbGQiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjUwIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJjb2xsZWN0Q29sdW1uVmFsdWVzIiwiZ2V0Q29sdW1uU3RhdGlzdGljcyIsImZpZWxkVHlwZSIsIkxPQURfQ09MVU1OX1NUQVRTX1RBU0siLCJsb2FkQ29sdW1uU3RhdHNVcGRhdGVyIiwiX3JlZjUxIiwiZmllbGROYW1lIiwiZmllbGROYW1lc1RvTG9hZCIsImZpZWxkc1RvTG9hZCIsImlzTG9hZGluZ1N0YXRzIiwidGFza3MiLCJfcmVmNTIiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzIiwibG9hZENvbHVtblN0YXRzRXJyb3IiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlciIsIl9yZWY1MyIsIm5ld0ZpbHRlclByb3BzIiwiY29sdW1uU3RhdHMiLCJsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIiLCJfcmVmNTQiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsImNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyIiwiX2FjdGlvbiIsInByb2Nlc3NHZW9qc29uIiwiZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uIiwiY2xlYXJlZFN0YXRlIiwibGFiZWxJZCIsImZsb29yIiwicmFuZG9tIiwiZXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNTUiLCJpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIiLCJleHRyYWN0ZWQiLCJleHRyYWN0Um93c0luc2lkZUZlYXR1cmUiLCJyb3dDb3VudCIsInNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjU2IiwidXBkYXRlcyIsImNoZWNrVGltZUNvbmZpZ0FyZ3MiLCJhbGxvd2VkIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY1NyIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXIiLCJfbGF5ZXIkZmlsdGVyZWRJdGVtQ28iLCJldmVudCIsImRlY2tnbExheWVySWQiLCJjb3VudCIsImZpbHRlcmVkSXRlbUNvdW50Iiwid21zRmVhdHVyZUluZm9VcGRhdGVyIiwiZmVhdHVyZUluZm8iLCJjb25zb2xlIiwib2JqZWN0Iiwid21zRmVhdHVyZUluZm8iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28yIiwiX2FjdGlvbiRlbmFibGUiLCJpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIm5ld0ZpbHRlckRvbWFpbiIsIkFOSU1BVElPTl9XSU5ET1ciLCJpbnRlcnZhbCIsImFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbCIsIm5ld0ZpbHRlclZhbHVlIiwic3luY1RpbWVsaW5lTW9kZSIsIlNZTkNfVElNRUxJTkVfTU9ERVMiLCJlbmQiLCJ2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlIiwiX3JlZjU4IiwidGltZWxpbmVWYWx1ZSIsImdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyIiwic25hcFRvTWFya3MiLCJmcmVlIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsIlRJTUVfSU5URVJWQUxTX09SREVSRUQiLCJsYXllclRpbWVJbnRlcnZhbCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsInVwZGF0ZWRQbG90VHlwZSIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImlzT2JqZWN0IiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNjAiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiY29tcG9zZV8iLCJhcHBseV8iLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiX3NlcmlhbGl6ZWRTdGF0ZSRzcGxpIiwiY29tYmluZVNwbGl0TWFwc0J5SW5kZXgiLCJfcmVmNjEiLCJhY2N1U3RhdGUiLCJfcmVmNjIiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIm1lcmdlck9wdGlvbnMiLCJyZXBsYWNlZEl0ZW0iLCJyZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZSIsIl9yZWY2MyIsImNoaWxkRGF0YUlkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Jib3h9IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IHR5cGUge0FsbEdlb0pTT059IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IGNvcHkgZnJvbSAnY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9jbG9uZURlZXAnO1xuaW1wb3J0IGdldCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9nZXQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvaXNFcXVhbCc7XG5pbXBvcnQgcGljayBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9waWNrJztcbmltcG9ydCB1bmlxIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3VuaXEnO1xuaW1wb3J0IHhvciBmcm9tICdlcy10b29sa2l0L2NvbXBhdC94b3InO1xuaW1wb3J0IFRhc2ssIHtkaXNhYmxlU3RhY2tDYXB0dXJpbmcsIHdpdGhUYXNrfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbmltcG9ydCB0eXBlIHtUYXNrRGVzY3JpcHRvcn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBUYXNrc1xuaW1wb3J0IHtcbiAgREVMQVlfVEFTSyxcbiAgQUNUSU9OX1RBU0ssXG4gIExPQURfRklMRV9UQVNLLFxuICBQUk9DRVNTX0ZJTEVfREFUQSxcbiAgVU5XUkFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGROb3RpZmljYXRpb24sXG4gIEFjdGlvblR5cGVzLFxuICBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFZpc1N0YXRlQWN0aW9ucyxcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MsXG4gIGxheWVyQ29uZmlnQ2hhbmdlLFxuICBsYXllclR5cGVDaGFuZ2UsXG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gIGxvYWRGaWxlU3RlcFN1Y2Nlc3MsXG4gIGxvYWRGaWxlc0VycixcbiAgbG9hZEZpbGVzU3VjY2VzcyxcbiAgbG9hZE5leHRGaWxlLFxuICBuZXh0RmlsZUJhdGNoLFxuICBzZXRGaWx0ZXIsXG4gIHByb2Nlc3NGaWxlQ29udGVudCxcbiAgZml0Qm91bmRzIGFzIGZpdE1hcEJvdW5kcyxcbiAgdG9nZ2xlTGF5ZXJGb3JNYXAsXG4gIGFwcGx5RmlsdGVyQ29uZmlnLFxuICBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZCxcbiAgbG9hZENvbHVtblN0YXRzU3VjY2VzcyxcbiAgbG9hZENvbHVtblN0YXRzRXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0U3VjY2VzcyxcbiAgcmVmcmVzaERhdGFzZXRFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRQcm9ncmVzc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICBhcnJheUluc2VydCxcbiAgY29tYmluZVNwbGl0TWFwc0J5SW5kZXgsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbixcbiAgZXh0cmFjdFJvd3NJbnNpZGVGZWF0dXJlLFxuICBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIsXG4gIG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzLFxuICB0b1NrZXRjaEZlYXR1cmUsXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0c1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHRvQXJyYXksIGFycmF5TW92ZX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuLy8gTWVyZ2Vyc1xuaW1wb3J0IHtcbiAgQU5JTUFUSU9OX1dJTkRPVyxcbiAgQkFTRV9TUEVFRCxcbiAgQ09NUEFSRV9UWVBFUyxcbiAgREVGQVVMVF9URVhUX0xBQkVMLFxuICBFRElUT1JfTU9ERVMsXG4gIEZJTFRFUl9UWVBFUyxcbiAgRklMVEVSX1ZJRVdfVFlQRVMsXG4gIExBWUVSX1RZUEVTLFxuICBGUFMsXG4gIExJR0hUX0FORF9TSEFET1dfRUZGRUNULFxuICBESVNUQU5DRV9GT0dfVFlQRSxcbiAgU1VSRkFDRV9GT0dfVFlQRSxcbiAgTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG4gIFBMT1RfVFlQRVMsXG4gIFNPUlRfT1JERVIsXG4gIFNZTkNfVElNRUxJTkVfTU9ERVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBTQ0FMRV9UWVBFUyxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRSxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfU0lERSxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04sXG4gIEFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5ULFxuICB0ZXh0UGxhY2VtZW50RnJvbUFuZ2xlLFxuICBBbm5vdGF0aW9uS2luZCxcbiAgRGF0YXNldFR5cGUsXG4gIGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyxcbiAgZ2V0UmVtb3RlU291cmNlRm9ybWF0XG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TEFZRVJfSURfTEVOR1RILCBMYXllciwgTGF5ZXJDbGFzc2VzfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBhcHBseV8sXG4gIGNvbXBvc2VfLFxuICBmaWx0ZXJPdXRCeUlkLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtnZXRGaWxlc1RvUGFyc2UsIGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCwgcHJvY2Vzc0dlb2pzb259IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5cbmltcG9ydCB7XG4gIEZpbHRlcixcbiAgRmVhdHVyZSxcbiAgSW50ZXJhY3Rpb25Db25maWcsXG4gIEFuaW1hdGlvbkNvbmZpZyxcbiAgRmlsdGVyQW5pbWF0aW9uQ29uZmlnLFxuICBFZGl0b3IsXG4gIEZpZWxkLFxuICBMYXllclZpc0NvbmZpZyxcbiAgVGltZVJhbmdlRmlsdGVyLFxuICBBbm5vdGF0aW9uLFxuICBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsLFxuICBQcm90b0RhdGFzZXRcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0xvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvbG9hZGVyLXV0aWxzJztcblxuaW1wb3J0IHtcbiAgRGF0YXNldHMsXG4gIEtlcGxlclRhYmxlLFxuICBGaWx0ZXJQcm9wcyxcbiAgYXNzaWduR3B1Q2hhbm5lbCxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgc29ydERhdGFzZXRCeUNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7ZmluZEZpZWxkc1RvU2hvd30gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVMYXllckRhdGEsXG4gIGZpbmREZWZhdWx0TGF5ZXIsXG4gIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzLFxuICBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMsXG4gIGdldE5ld0xheWVyR3JvdXAsXG4gIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcixcbiAgcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyLFxuICBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIsXG4gIGZpbmRQYXJlbnRHcm91cEZvckxheWVyLFxuICBnZXRJbmRleEZyb21MYXllckVudHJ5SWQsXG4gIHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIsXG4gIGdldEZsYXRMYXllck9yZGVyLFxuICByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlclxufSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlLFxuICBjb2xsZWN0Q29sdW1uVmFsdWVzLFxuICBnZXRDb2x1bW5TdGF0aXN0aWNzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge1BheWxvYWRBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5pbXBvcnQge2ZpbmRNYXBCb3VuZHN9IGZyb20gJy4vZGF0YS11dGlscyc7XG5cbi8vIGRpc2FibGUgc3RhY2sgY2FwdHVyZSBmb3Igd2l0aFRhc2sgY2FsbHMgdGhhdCBoYXBwZW4gb3V0c2lkZSBzdHJpY3QgcmVkdWNlciBjb250ZXh0XG5kaXNhYmxlU3RhY2tDYXB0dXJpbmcoKTtcblxuLyoqXG4gKiBVcGRhdGVycyBmb3IgYHZpc1N0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt2aXNTdGF0ZVVwZGF0ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbiAqIC8vIFJvb3QgUmVkdWNlclxuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogIGtlcGxlckdsOiBrZXBsZXJHbFJlZHVjZXIsXG4gKiAgYXBwOiBhcHBSZWR1Y2VyXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21wb3NlZFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICogIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICB2aXNTdGF0ZTogdmlzU3RhdGVVcGRhdGVycy5lbmxhcmdlRmlsdGVyVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgc3RhdGUua2VwbGVyR2wuZm9vLnZpc1N0YXRlLFxuICogICAgICAgICAgICAgICB7aWR4OiAwfVxuICogICAgICAgICAgICAgKVxuICogICAgICAgICAgfVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnOiBJbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgdG9vbHRpcDoge1xuICAgIGlkOiAndG9vbHRpcCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMudG9vbHRpcCcsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBjb25maWc6IHtcbiAgICAgIGZpZWxkc1RvU2hvdzoge30sXG4gICAgICBjb21wYXJlTW9kZTogZmFsc2UsXG4gICAgICBjb21wYXJlVHlwZTogQ09NUEFSRV9UWVBFUy5BQlNPTFVURVxuICAgIH1cbiAgfSxcbiAgZ2VvY29kZXI6IHtcbiAgICBpZDogJ2dlb2NvZGVyJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5nZW9jb2RlcicsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGwsXG4gICAgY29uZmlnOiB7XG4gICAgICBsaW1pdFNlYXJjaDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGJydXNoOiB7XG4gICAgaWQ6ICdicnVzaCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuYnJ1c2gnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgLy8gc2l6ZSBpcyBpbiBrbVxuICAgICAgc2l6ZTogMC41XG4gICAgfVxuICB9LFxuICBjb29yZGluYXRlOiB7XG4gICAgaWQ6ICdjb29yZGluYXRlJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5jb29yZGluYXRlJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTklNQVRJT05fQ09ORklHOiBBbmltYXRpb25Db25maWcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVTdGVwczogbnVsbCxcbiAgdGltZUZvcm1hdDogbnVsbCxcbiAgdGltZXpvbmU6IG51bGwsXG4gIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsLFxuICBoaWRlQ29udHJvbDogZmFsc2UsXG4gIGR1cmF0aW9uOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1I6IEVkaXRvciA9IHtcbiAgbW9kZTogRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgZmVhdHVyZXM6IFtdLFxuICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gIHZpc2libGU6IHRydWVcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVklTX1NUQVRFOiBWaXNTdGF0ZSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJydcbiAgfSxcbiAgLy8gbGF5ZXJzXG4gIGxheWVyczogW10sXG4gIGxheWVyRGF0YTogW10sXG4gIGxheWVyVG9CZU1lcmdlZDogW10sXG4gIGxheWVyT3JkZXI6IFtdLFxuICBsYXllck9yZGVyVG9CZU1lcmdlZDogbnVsbCxcblxuICAvLyBmaWx0ZXJzXG4gIGZpbHRlcnM6IFtdLFxuICBmaWx0ZXJUb0JlTWVyZ2VkOiBbXSxcblxuICAvLyBhIGNvbGxlY3Rpb24gb2YgbXVsdGlwbGUgZGF0YXNldFxuICBkYXRhc2V0czoge30sXG4gIGVkaXRpbmdEYXRhc2V0OiB1bmRlZmluZWQsXG5cbiAgLy8gZWZmZWN0c1xuICBlZmZlY3RzOiBbXSxcbiAgZWZmZWN0T3JkZXI6IFtdLFxuXG4gIC8vIGFubm90YXRpb25zXG4gIGFubm90YXRpb25zOiBbXSxcbiAgYW5ub3RhdGlvbnNUb0JlTWVyZ2VkOiBbXSxcbiAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG51bGwsXG4gIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZSxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHt9LFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBvdmVybGF5QmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG4gIG1heERlZmF1bHRUb29sdGlwczogTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG4gIGlzTWVyZ2luZ0RhdGFzZXRzOiB7fSxcbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgLy8gZm9yIGxvYWRpbmcgZGF0YXNldHNcbiAgbG9hZGluZ0luZGljYXRvclZhbHVlOiAwLFxuXG4gIGxvYWRlcnM6IFtdLFxuICBsb2FkT3B0aW9uczoge30sXG5cbiAgLy8gdmlzU3RhdGVNZXJnZXJzXG4gIG1lcmdlcnM6IFZJU19TVEFURV9NRVJHRVJTLFxuXG4gIC8vIGtlcGxlciBzY2hlbWFzXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFcbn07XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19GSVRfQk9VTkRTID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfRklUX0JPVU5EUydcbik7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTidcbik7XG5cbnR5cGUgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZSA9IHtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllckRhdGE6IGFueVtdO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgd2l0aCB1cGRhdGVkIGxheWVyIGFuZCBsYXllckRhdGFcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGE8UyBleHRlbmRzIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGU+KFxuICBzdGF0ZTogUyxcbiAge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH06IHtsYXllckRhdGE/OiBhbnk7IGxheWVyOiBMYXllcjsgaWR4OiBudW1iZXJ9XG4pOiBTIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAoKGx5ciwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyIDogbHlyKSksXG4gICAgbGF5ZXJEYXRhOiBsYXllckRhdGFcbiAgICAgID8gc3RhdGUubGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyRGF0YSA6IGQpKVxuICAgICAgOiBzdGF0ZS5sYXllckRhdGFcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2U8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgbGF5ZXI6IExheWVyKTogUyB7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgPyBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgICAgIDogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIG9iamVjdHMgKG9yIGFycmF5cykgYW5kIHJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggb25seSB0aGVcbiAqIHByb3BlcnRpZXMgdGhhdCBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIHBpY2tDaGFuZ2VkUHJvcHM8VD4ocHJldjogVCwgbmV4dDogVCk6IFBhcnRpYWw8VD4ge1xuICBjb25zdCBjaGFuZ2VkUHJvcHM6IFBhcnRpYWw8VD4gPSB7fTtcbiAgY29uc3QgcGlja1Byb3BzT2YgPSBvYmogPT4ge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZWRQcm9wcywga2V5KSAmJlxuICAgICAgICAhaXNFcXVhbChwcmV2W2tleV0sIG5leHRba2V5XSlcbiAgICAgICkge1xuICAgICAgICBjaGFuZ2VkUHJvcHNba2V5XSA9IG5leHRba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcGlja1Byb3BzT2YocHJldik7XG4gIHBpY2tQcm9wc09mKG5leHQpO1xuICByZXR1cm4gY2hhbmdlZFByb3BzO1xufVxuXG5jb25zdCBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTID0gWydmaWVsZCcsICdzY2FsZScsICdkb21haW4nLCAnYWdncmVnYXRpb24nXTtcblxuLyoqXG4gKiBBcHBseSBsYXllciBjb25maWdcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHksIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlMYXllckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVySWQsIG5ld0xheWVyQ29uZmlnLCBsYXllckluZGV4fSA9IGFjdGlvbjtcbiAgY29uc3QgbmV3UGFyc2VkTGF5ZXIgPVxuICAgIC8vIHdpbGwgbW92ZSB2aXN1YWxDaGFubmVscyB0byB0aGUgY29uZmlnIHByb3BcbiAgICBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbmV3TGF5ZXJDb25maWcpO1xuICBjb25zdCBvbGRMYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gIGlmICghb2xkTGF5ZXIgfHwgIW5ld1BhcnNlZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllckluZGV4ICE9PSBudWxsICYmIGxheWVySW5kZXggIT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5sYXllcnNbbGF5ZXJJbmRleF0gIT09IG9sZExheWVyKSB7XG4gICAgLy8gbGF5ZXJJbmRleCBpcyBwcm92aWRlZCwgYnV0IGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIG9sZExheWVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tuZXdQYXJzZWRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgdmFsaWQgYW5kIGNvbnZlcnQgaXQgdG8gTGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbmV3UGFyc2VkTGF5ZXIsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIGlmICghbmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgaWYgKG5ld0xheWVyLnR5cGUgJiYgbmV3TGF5ZXIudHlwZSAhPT0gb2xkTGF5ZXIudHlwZSkge1xuICAgIGNvbnN0IG9sZExheWVySW5kZXggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gICAgaWYgKG9sZExheWVySW5kZXggPj0gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihuZXh0U3RhdGUsIGxheWVyVHlwZUNoYW5nZShvbGRMYXllciwgbmV3TGF5ZXIudHlwZSkpO1xuICAgICAgLy8gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciBjaGFuZ2VzIHRoZSBpZCBvZiB0aGUgbGF5ZXIsIHNvIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBuZXcgaWRcbiAgICAgIC8vIGJ1dCBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgbGF5ZXIgd2FzIG5vdCByZW1vdmVkXG4gICAgICBpZiAobmV4dFN0YXRlLmxheWVycy5sZW5ndGggPT09IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJJZCA9IG5leHRTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF0uaWQ7XG4gICAgICAgIG5leHRTdGF0ZSA9IGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBhcHBseUxheWVyQ29uZmlnKG5ld0xheWVySWQsIHsuLi5uZXdMYXllckNvbmZpZywgaWQ6IG5ld0xheWVySWR9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgLy8gc2VyaWFsaXplTGF5ZXIoKSBtaWdodCByZXR1cm4gbnVsbCBpZiB0aGUgb2xkIGxheWVyIGlzIG5vdCB2YWxpZCxcbiAgLy8gd2Ugc2hvdWxkIHN0aWxsIGFwcGx5IHRoZSBjaGFuZ2VzIGluIHRoYXQgY2FzZVxuICBjb25zdCBzZXJpYWxpemVkT2xkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvbGRMYXllciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdMYXllciA9IHNlcmlhbGl6ZUxheWVyKG5ld0xheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWlzRXF1YWwoc2VyaWFsaXplZE9sZExheWVyLCBzZXJpYWxpemVkTmV3TGF5ZXIpKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZExheWVyLmNvbmZpZywgc2VyaWFsaXplZE5ld0xheWVyLmNvbmZpZyk7XG5cbiAgICBpZiAoJ3Zpc0NvbmZpZycgaW4gY2hhbmdlZCkge1xuICAgICAgaWYgKGNoYW5nZWQudmlzQ29uZmlnKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXNDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIGNoYW5nZWQudmlzQ29uZmlnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNoYW5nZWQudmlzQ29uZmlnO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9sZExheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxOYW1lID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsTmFtZV07XG4gICAgICBjb25zdCBjaGFubmVsUHJvcE5hbWVzID0gVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUy5tYXAocHJvcCA9PiBjaGFubmVsW3Byb3BdKTtcbiAgICAgIGlmIChjaGFubmVsUHJvcE5hbWVzLnNvbWUocHJvcCA9PiBwcm9wIGluIGNoYW5nZWQpKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZShcbiAgICAgICAgICAgIG9sZExheWVyLFxuICAgICAgICAgICAgcGljayhuZXdMYXllci5jb25maWcsIGNoYW5uZWxQcm9wTmFtZXMpLFxuICAgICAgICAgICAgY2hhbm5lbE5hbWVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBjaGFubmVsUHJvcE5hbWVzKSB7XG4gICAgICAgICAgZGVsZXRlIGNoYW5nZWRbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhjaGFuZ2VkKS5sZW5ndGggPiAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBPYmplY3Qua2V5cyhjaGFuZ2VkKSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZWxheWVyVmlzaWJpbHR5KHN0YXRlOiBWaXNTdGF0ZSwgbmV3TGF5ZXI6IExheWVyLCBpc1Zpc2libGU/OiBib29sZWFuKTogVmlzU3RhdGUge1xuICBsZXQgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlKHN0YXRlLCBuZXdMYXllcik7XG4gIGNvbnN0IGZpbHRlckluZGV4ID0gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlKTtcbiAgaWYgKGlzTGF5ZXJBbmltYXRhYmxlKG5ld0xheWVyKSAmJiBmaWx0ZXJJbmRleCAhPT0gLTEpIHtcbiAgICAvLyBpZiBsYXllciBpcyBnb2luZyB0byBiZSB2aXNpYmxlIHdlIHN5bmMgd2l0aCBmaWx0ZXIgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBvdGhlciBhbmltYXRhYmxlIGxheWVycyBleGlzdHMgYW5kIGFyZSB2aXNpYmxlXG4gICAgbmV3U3RhdGUgPSBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgIGVuYWJsZTogaXNWaXNpYmxlID8gaXNWaXNpYmxlIDogZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKS5sZW5ndGggPiAwXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld0NvbmZpZyk7XG4gIGlmIChcbiAgICB0eXBlb2YgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgPT09ICdzdHJpbmcnICYmXG4gICAgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgIT09IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgKSB7XG4gICAgY29uc3Qge2RhdGFJZCwgLi4ucmVzdENvbmZpZ30gPSBhY3Rpb24ubmV3Q29uZmlnO1xuICAgIGNvbnN0IHN0YXRlV2l0aERhdGFJZCA9IGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdDb25maWc6IHtkYXRhSWR9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dExheWVyID0gc3RhdGVXaXRoRGF0YUlkLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICAgIHJldHVybiBuZXh0TGF5ZXIgJiYgT2JqZWN0LmtleXMocmVzdENvbmZpZykubGVuZ3RoXG4gICAgICA/IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZVdpdGhEYXRhSWQsIHtvbGRMYXllcjogbmV4dExheWVyLCBuZXdDb25maWc6IHJlc3RDb25maWd9KVxuICAgICAgOiBzdGF0ZVdpdGhEYXRhSWQ7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhhY3Rpb24ubmV3Q29uZmlnKTtcblxuICBsZXQgbGF5ZXJEYXRhO1xuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gc3RhdGUubGF5ZXJEYXRhW2lkeF07XG5cbiAgICBjb25zdCB1cGRhdGVMYXllckRhdGFSZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIG5ld0xheWVyID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyO1xuICAgIGxheWVyRGF0YSA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllckRhdGE7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKCdpc1Zpc2libGUnIGluIGFjdGlvbi5uZXdDb25maWcpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgYWN0aW9uLm5ld0NvbmZpZy5pc1Zpc2libGUpO1xuICB9XG5cbiAgaWYgKCdjb2x1bW5zJyBpbiBhY3Rpb24ubmV3Q29uZmlnICYmIG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIC8vIFRPRE86IFNoYW4sIG1ha2UgdGhlIGFuaW1hdGlvbiBjb25maWcgZnVuY3Rpb24gbW9yZSByb2J1c3RcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBpZHhcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYWN0aW9uKTogUyB7XG4gIGNvbnN0IHtvbGRMYXllciwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGFuaW1hdGlvbjoge1xuICAgICAgLi4ub2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbixcbiAgICAgIFtwcm9wXTogdmFsdWVcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpZHhdKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZFxuICogaGFuZGxlcyB0d28gY2FzZXM6XG4gKiAxKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgbG9jYWwgU3BsaXRNYXAgbGF5ZXIgKHZpc1N0YXRlLnNwbGl0TWFwLmxheWVycylcbiAqIDIpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBnbG9iYWwgbGF5ZXIgKHZpc1N0YXRlLmxheWVycylcblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGQgPT4gZC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgaWYgKCFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChzcGxpdE1hcElkKSB7XG4gICAgLy8gW2Nhc2UgMV06IHRvZ2dsZSBsb2NhbCBsYXllciB2aXNpYmlsaXR5IGZvciBlYWNoIFNwbGl0TWFwXG4gICAgY29uc3QgbWFwSW5kZXggPSBuZXdTdGF0ZS5zcGxpdE1hcHMuZmluZEluZGV4KHNtID0+IHNtLmlkID09PSBzcGxpdE1hcElkKTtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAvLyAxKSBpZiB0aGUgbGF5ZXIgaXMgaW52aXNpYmxlIGdsb2JhbGx5XG4gICAgICAvLyAtPiBzZXQgZ2xvYmFsIHZpc2liaWxpdHkgdG8gdHJ1ZVxuICAgICAgbmV3U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIobmV3U3RhdGUsIGxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCB7aXNWaXNpYmxlOiB0cnVlfSkpO1xuXG4gICAgICAvLyAtPiBzZXQgbG9jYWwgdmlzaWJpbGl0eSB0byB0cnVlIGFuZCB0aGUgbG9jYWwgdmlzaWJpbGl0aWVzIG9mIGFsbCBvdGhlciBTcGxpdE1hcHMgdG8gZmFsc2VcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc20gPT5cbiAgICAgICAgICBzbS5pZCAhPT0gc3BsaXRNYXBJZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyAyKSBlbHNlIHdoZW4gdGhlIGxheWVyIGlzIHZpc2libGUgZ2xvYmFsbHlcbiAgICByZXR1cm4gdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyKG5ld1N0YXRlLCB0b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIFtjYXNlIDJdOiB0b2dnbGUgZ2xvYmFsIGxheWVyIHZpc2liaWxpdHlcbiAgICBjb25zdCBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtpc1Zpc2libGV9KTtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgaXNWaXNpYmxlKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgICBpZHhcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIGluZGV4IG9mIHRoZSBmaWx0ZXIgc3luY2VkIHRvIHRpbWVsaW5lIG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZTogVmlzU3RhdGUpOiBudW1iZXIge1xuICByZXR1cm4gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGlzVmFsaWQgZmxhZyBvZiBhIGxheWVyLlxuICogVXBkYXRlcyBpc1Zpc2libGUgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGlzVmFsaWQuXG4gKiBUcmlnZ2VycyB1cGRhdGUgb2YgZGF0YSBmb3IgdGhlIGxheWVyIGluIG9yZGVyIHRvIGdldCBlcnJvcnMgYWdhaW4gZHVyaW5nIG5leHQgdXBkYXRlIGl0ZXJhdGlvbi5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyU2V0SXNWYWxpZFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJTZXRJc1ZhbGlkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlzVmFsaWR9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IGxheWVyVG9VcGRhdGUgPSBzdGF0ZS5sYXllcnNbaWR4XTtcbiAgaWYgKGxheWVyVG9VcGRhdGUpIHtcbiAgICBsZXQgbmV3TGF5ZXI7XG4gICAgbGV0IG5ld0RhdGEgPSBudWxsO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIFRyaWdnZXIgZGF0YSB1cGRhdGUgaW4gb3JkZXIgdG8gc2hvdyBlcnJvcnMgYWdhaW4gaWYgcHJlc2VudC5cbiAgICAgIGNvbnN0IHtsYXllciwgbGF5ZXJEYXRhfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShsYXllclRvVXBkYXRlLCBzdGF0ZSwgdW5kZWZpbmVkKTtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXI7XG4gICAgICBuZXdEYXRhID0gbGF5ZXJEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IGxheWVyVG9VcGRhdGUudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIG5ld0xheWVyLmlzVmFsaWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7aWR4LCBsYXllcjogbmV3TGF5ZXIsIGxheWVyRGF0YTogbmV3RGF0YX0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBhZGRPclJlbW92ZVRleHRMYWJlbHMobmV3RmllbGRzLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwgPSBERUZBVUxUX1RFWFRfTEFCRUwpIHtcbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSB0ZXh0TGFiZWwubWFwKHRsID0+IHRsLmZpZWxkICYmIHRsLmZpZWxkLm5hbWUpLmZpbHRlcihkID0+IGQpO1xuXG4gIGNvbnN0IGFkZEZpZWxkcyA9IG5ld0ZpZWxkcy5maWx0ZXIoZiA9PiAhY3VycmVudEZpZWxkcy5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgY29uc3QgZGVsZXRlRmllbGRzID0gY3VycmVudEZpZWxkcy5maWx0ZXIoZiA9PiAhbmV3RmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gZikpO1xuXG4gIC8vIGRlbGV0ZVxuICBuZXdUZXh0TGFiZWwgPSBuZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkICYmICFkZWxldGVGaWVsZHMuaW5jbHVkZXModGwuZmllbGQubmFtZSkpO1xuICBuZXdUZXh0TGFiZWwgPSAhbmV3VGV4dExhYmVsLmxlbmd0aCA/IFtkZWZhdWx0VGV4dExhYmVsXSA6IG5ld1RleHRMYWJlbDtcblxuICAvLyBhZGRcbiAgbmV3VGV4dExhYmVsID0gW1xuICAgIC4uLm5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQpLFxuICAgIC4uLmFkZEZpZWxkcy5tYXAoYWYgPT4gKHtcbiAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICBmaWVsZDogYWYsXG4gICAgICBjb2xsaXNpb25FbmFibGVkOiBCb29sZWFuKFxuICAgICAgICB0ZXh0TGFiZWwuZmluZCh0bCA9PiB0bC5jb2xsaXNpb25FbmFibGVkKT8uY29sbGlzaW9uRW5hYmxlZCA/P1xuICAgICAgICAgIGRlZmF1bHRUZXh0TGFiZWwuY29sbGlzaW9uRW5hYmxlZFxuICAgICAgKVxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFtcbiAgICAgIC4uLnRleHRMYWJlbCxcbiAgICAgIHtcbiAgICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgICAgY29sbGlzaW9uRW5hYmxlZDogQm9vbGVhbih0ZXh0TGFiZWxbMF0/LmNvbGxpc2lvbkVuYWJsZWQpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGlmIChpZHggPT09ICdhbGwnICYmIHByb3AgPT09ICdmaWVsZHMnKSB7XG4gICAgbmV3VGV4dExhYmVsID0gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKHZhbHVlLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwpO1xuICB9IGVsc2UgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAodGwgPT4gKHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0pKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgbmV3VGV4dExhYmVsKTtcbiAgfVxuICAvLyB1cGRhdGUgdGV4dCBsYWJlbCBwcm9wIGFuZCB2YWx1ZVxuICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnOiB7dGV4dExhYmVsOiBuZXdUZXh0TGFiZWx9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsYXllckNsYXNzZXMsIGxheWVyLCBzY2hlbWEpIHtcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihsYXllciwgc2NoZW1hKTtcbiAgcmV0dXJuIGxvYWRlZExheWVyXG4gICAgPyB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbG9hZGVkTGF5ZXIsIGxheWVyQ2xhc3Nlcywge1xuICAgICAgICBhbGxvd0VtcHR5Q29sdW1uOiB0cnVlXG4gICAgICB9KVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgY29uZmlnIGRhdGFJZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG9sZExheWVyOiBMYXllcjtcbiAgICBuZXdDb25maWc6IHtcbiAgICAgIGRhdGFJZDogc3RyaW5nO1xuICAgIH07XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWd9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkfSA9IG5ld0NvbmZpZztcblxuICBpZiAoIW9sZExheWVyIHx8ICFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZH0pO1xuXG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyLFxuICAgICAgc3RhdGUuc2NoZW1hXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IG9sZExheWVyVHlwZSA9IG9sZExheWVyLnR5cGU7XG4gICAgICBpZiAob2xkTGF5ZXJUeXBlKSB7XG4gICAgICAgIG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tvbGRMYXllclR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmUgKGUuZy4gbWlzc2luZyBjb2x1bW5zKSwgYnV0IHdlIHN0aWxsIG5lZWQgdG9cbiAgICAvLyByZW1hcCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIG5ldyBkYXRhc2V0IHRvIGF2b2lkIHN0YWxlIGZpZWxkIHJlZmVyZW5jZXNcbiAgICAvLyB0aGF0IHBvaW50IHRvIHJvd3MgYmV5b25kIHRoZSBuZXcgZGF0YXNldCdzIGxlbmd0aFxuICAgIGNvbnN0IG5ld0RhdGFzZXRGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcztcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZDogZmllbGRLZXl9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RmllbGQgPSBuZXdMYXllci5jb25maWdbZmllbGRLZXldO1xuICAgICAgaWYgKGN1cnJlbnRGaWVsZCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkID0gbmV3RGF0YXNldEZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBjdXJyZW50RmllbGQubmFtZSk7XG4gICAgICAgIHJlbWFwcGVkRmllbGRzW2ZpZWxkS2V5XSA9IG1hdGNoZWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoT2JqZWN0LmtleXMocmVtYXBwZWRGaWVsZHMpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhyZW1hcHBlZEZpZWxkcyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIGZpZWxkIHR5cGUgY29tcGF0aWJpbGl0eSDigJQgY2xlYXJzIGZpZWxkcyB3aG9zZSB0eXBlIGlzIGluY29tcGF0aWJsZVxuICAgIC8vIHdpdGggdGhlIGNoYW5uZWwncyBzdXBwb3J0ZWQgZmllbGQgdHlwZXMgKGUuZy4gc3RyaW5nIGZpZWxkIGZvciBhIG51bWVyaWMgc2NhbGUpXG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2tleX0pID0+IHtcbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgaXNWaXNpYmxlOiBvbGRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlXG4gIH0pO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsTGF5ZXJDb25maWcobGF5ZXIsIGRhdGFzZXRzLCBsYXllckNsYXNzZXMpOiBMYXllciB7XG4gIGxldCBuZXdMYXllciA9IGxheWVyO1xuICBpZiAoIU9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGgpIHtcbiAgICAvLyBubyBkYXRhIGlzIGxvYWRlZFxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuICBpZiAoIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAvLyBzZXQgbGF5ZXIgZGF0YUlkXG4gICAgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkOiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF19KTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8vIGZpbmQgZGVmYXV0IGxheWVyIHByb3BzXG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBbXSlcbiAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgLy8gYW4gYXJyYXkgb2YgcG9zc2libGUgcHJvcHMsIHVzZSAxc3Qgb25lXG4gIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuXG4gIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbbGF5ZXIudHlwZV0oe1xuICAgICAgLi4ucHJvcHNbMF0sXG4gICAgICBsYWJlbDogbmV3TGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgICAgZGF0YUlkOiBuZXdMYXllci5jb25maWcuZGF0YUlkLFxuICAgICAgaXNDb25maWdBY3RpdmU6IG5ld0xheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICAgIGlzVmlzaWJsZTogbmV3TGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0eXBlb2YgbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nXG4gICAgPyBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICA6IG5ld0xheWVyO1xufVxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgb2xkSWQgPSBvbGRMYXllci5pZDtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZElkKTtcblxuICBpZiAoIXN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSkge1xuICAgIENvbnNvbGUuZXJyb3IoYCR7bmV3VHlwZX0gaXMgbm90IGEgdmFsaWQgbGF5ZXIgdHlwZWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKHtcbiAgICAvLyBrZWVwIG9sZCBsYXllciBsYWJsZSBhbmQgaXNDb25maWdBY3RpdmVcbiAgICBsYWJlbDogb2xkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGlzQ29uZmlnQWN0aXZlOiBvbGRMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgZGF0YUlkOiBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gIH0pO1xuXG4gIGlmICghb2xkTGF5ZXIudHlwZSkge1xuICAgIC8vIGlmIHNldHRpbmcgbGF5ZXIgdHlwZSBvbiBhbiBlbXB0eSBsYXllclxuICAgIG5ld0xheWVyID0gc2V0SW5pdGlhbExheWVyQ29uZmlnKG5ld0xheWVyLCBzdGF0ZS5kYXRhc2V0cywgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBnZXQgYSBtaW50IGxheWVyLCB3aXRoIG5ldyBpZCBhbmQgdHlwZVxuICAgIC8vIGJlY2F1c2UgZGVjay5nbCB1c2VzIGlkIHRvIG1hdGNoIGJldHdlZW4gbmV3IGFuZCBvbGQgbGF5ZXIuXG4gICAgLy8gSWYgdHlwZSBoYXMgY2hhbmdlZCBidXQgaWQgaXMgdGhlIHNhbWUsIGl0IHdpbGwgYnJlYWtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID1cbiAgICAgIHR5cGVvZiBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhzdGF0ZS5kYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgbmV3TGF5ZXIuYXNzaWduQ29uZmlnVG9MYXllcihcbiAgICAgIG9sZExheWVyLmNvbmZpZyxcbiAgICAgIG9sZExheWVyLnZpc0NvbmZpZ1NldHRpbmdzLFxuICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICBkZWZhdWx0TGF5ZXJQcm9wc1xuICAgICk7XG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICB9XG5cbiAgY29uc3Qge2NsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mb1xuICB9O1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgfHwgb2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHNwbGl0TWFwIGxheWVyIGlkXG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiB7XG4gICAgICAgIGNvbnN0IHtbb2xkSWRdOiBvbGRMYXllck1hcCwgLi4ub3RoZXJMYXllcnN9ID0gc2V0dGluZ3MubGF5ZXJzO1xuICAgICAgICByZXR1cm4gb2xkSWQgaW4gc2V0dGluZ3MubGF5ZXJzXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5vdGhlckxheWVycyxcbiAgICAgICAgICAgICAgICBbbGF5ZXIuaWRdOiBvbGRMYXllck1hcFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzZXR0aW5ncztcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsYXllck9yZGVyIHdpdGggbmV3IGlkXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG9sZExheWVyLmlkLCBuZXdMYXllci5pZClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIGRhdGFzZXQgZmllbGQgb2YgdGhlIHNhbWUgbmFtZS5cbiAqIGBhZGREYXRhVG9NYXBgIGFuZCBgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlYCBvZnRlbiBwYXNzIGB7bmFtZSwgdHlwZX1gXG4gKiBvciBwcm9jZXNzb3IgZmllbGRzIHdob3NlIHZhbHVlQWNjZXNzb3IgaXMgbm90IGJvdW5kIHRvIHRoZSBLZXBsZXJUYWJsZSwgd2hpY2hcbiAqIGxlYXZlcyBzdHJva2VDb2xvckRvbWFpbiBhdCBgWzAsIDFdYCAoa2VwbGVyLmdsICMzMDYxKS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0KFxuICBuZXdDb25maWc6IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uWyduZXdDb25maWcnXSxcbiAgZGF0YXNldDogS2VwbGVyVGFibGUgfCB1bmRlZmluZWQsXG4gIHZpc3VhbENoYW5uZWw6IExheWVyWyd2aXN1YWxDaGFubmVscyddW3N0cmluZ10gfCB1bmRlZmluZWRcbikge1xuICBpZiAoIWRhdGFzZXQgfHwgIXZpc3VhbENoYW5uZWwpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIGNvbnN0IGluY29taW5nID0gbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdO1xuICBpZiAoIWluY29taW5nIHx8IHR5cGVvZiBpbmNvbWluZyAhPT0gJ29iamVjdCcgfHwgIWluY29taW5nLm5hbWUpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIGNvbnN0IGZvdW5kID0gZGF0YXNldC5maWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBpbmNvbWluZy5uYW1lKTtcbiAgaWYgKCFmb3VuZCkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdDb25maWcsXG4gICAgW3Zpc3VhbENoYW5uZWwuZmllbGRdOiBmb3VuZFxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB2aXN1YWwgY2hhbm5lbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VmlzQ29uZmlnLCBjaGFubmVsfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW29sZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBjb25zdCBuZXdDb25maWcgPSByZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQoXG4gICAgYWN0aW9uLm5ld0NvbmZpZyxcbiAgICBkYXRhc2V0LFxuICAgIG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdXG4gICk7XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKTtcbiAgaWYgKG5ld1Zpc0NvbmZpZykgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsKTtcblxuICAvLyBjYWxsaW5nIHVwZGF0ZSBhbmltYXRpb24gZG9tYWluIGZpcnN0IHRvIG1lcmdlIGFsbCBsYXllciBhbmltYXRpb24gZG9tYWluXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4oc3RhdGUpO1xuXG4gIGNvbnN0IHZpc3VhbENoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgaWYgKHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSkge1xuICAgIC8vIGlmIGNvbG9yIGZpZWxkIGNoYW5nZWQsIHNldCBjdXN0b21CcmVha3MgdG8gZmFsc2VcbiAgICBuZXdMYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICBsYXllcnM6IHVwZGF0ZWRTdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gdXBkYXRlZFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHVwZGF0ZWRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcblxuICBpZiAoXG4gICAgdmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiZcbiAgICBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbD8uc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsICYmXG4gICAgIW5ld1Zpc0NvbmZpZ1xuICApIHtcbiAgICAvLyB3aGVuIHN3aXRjaGluZyB0byBjdXN0b21PcmRpbmFsIHNjYWxlLCBjcmVhdGUgYSBjdXN0b21QYWxldHRlIGluIGNvbG9yVUkgd2l0aCB1cGRhdGVkIGNvbG9yRG9tYWluXG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSh7XG4gICAgICBzY2FsZTogU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCxcbiAgICAgIGZpZWxkOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0sXG4gICAgICBvcmRpbmFsRG9tYWluOiBsYXllci5jb25maWdbbGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0uZG9tYWluXSxcbiAgICAgIHJhbmdlOiBsYXllci5jb25maWcudmlzQ29uZmlnW3Zpc3VhbENoYW5uZWwucmFuZ2VdLFxuICAgICAgY29sb3JCcmVha3M6IG51bGxcbiAgICB9KTtcbiAgICAvLyB1cGRhdGUgY29sb3JSYW5nZSB3aXRoIG5ldyBjdXN0b21QYWxldHRlXG4gICAgbGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIHNob3dDb2xvckNoYXJ0OiB0cnVlLFxuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IHRydWVcbiAgICAgIH0sXG4gICAgICBjdXN0b21QYWxldHRlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSh1cGRhdGVkU3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld1Zpc0NvbmZpZyk7XG5cbiAgY29uc3QgbmV3VmlzQ29uZmlnID0ge1xuICAgIC4uLm9sZExheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgLi4uYWN0aW9uLm5ld1Zpc0NvbmZpZ1xuICB9O1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe3Zpc0NvbmZpZzogbmV3VmlzQ29uZmlnfSk7XG5cbiAgLy8gSmVua3MgYnJlYWtzIGRlcGVuZCBvbiB0aGUgbnVtYmVyIG9mIGNvbG9ycy4gUmVjYWxjdWxhdGUgdGhlIGRvbWFpbiB3aGVuXG4gIC8vIHRoZSBjb2xvciByYW5nZSBvZiBhIEplbmtzIGNoYW5uZWwgY2hhbmdlcy5cbiAgaWYgKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gICAgaWYgKGRhdGFzZXQpIHtcbiAgICAgIE9iamVjdC5rZXlzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxLZXkgPT4ge1xuICAgICAgICBjb25zdCBjaGFubmVsID0gbmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbEtleV07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGFubmVsPy5zY2FsZSAmJlxuICAgICAgICAgIG5ld0xheWVyLmNvbmZpZ1tjaGFubmVsLnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuamVua3MgJiZcbiAgICAgICAgICBjaGFubmVsLnJhbmdlICYmXG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFjdGlvbi5uZXdWaXNDb25maWcsIGNoYW5uZWwucmFuZ2UpXG4gICAgICAgICkge1xuICAgICAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsS2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIC8vIEV4Y2x1c2l2ZSBiaXRtYXAgZWRpdGluZzogd2hlbiBlZGl0Qm91bmRzIGlzIHR1cm5lZCBvbiBmb3Igb25lIGJpdG1hcCBsYXllcixcbiAgLy8gdHVybiBpdCBvZmYgZm9yIGFsbCBvdGhlciBiaXRtYXAgbGF5ZXJzXG4gIGlmIChuZXdMYXllci50eXBlID09PSAnYml0bWFwJyAmJiBhY3Rpb24ubmV3VmlzQ29uZmlnLmVkaXRCb3VuZHMgPT09IHRydWUpIHtcbiAgICBuZXh0U3RhdGUgPSB7XG4gICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICBsYXllcnM6IG5leHRTdGF0ZS5sYXllcnMubWFwKChsLCBpKSA9PiB7XG4gICAgICAgIGlmIChpICE9PSBpZHggJiYgbC50eXBlID09PSAnYml0bWFwJyAmJiBsLmNvbmZpZy52aXNDb25maWcuZWRpdEJvdW5kcykge1xuICAgICAgICAgIHJldHVybiBsLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIHZpc0NvbmZpZzogey4uLmwuY29uZmlnLnZpc0NvbmZpZywgZWRpdEJvdW5kczogZmFsc2V9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IG5leHRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5leHRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllcjogbmV3TGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvIGEgc3BlY2lmaWVkIHZhbHVlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIgPSA8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHt2YWx1ZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBTID0+IHtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGN1cnJlbnRUaW1lXG4gICAgfVxuICB9O1xuICAvLyB1cGRhdGUgYW5pbWF0aW9uIGNvbmZpZyBmb3IgZWFjaCBsYXllclxuICByZXR1cm4gc3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjdSwgbCkgPT4ge1xuICAgIGlmIChsLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCAmJiBsLnR5cGUgIT09ICd0cmlwJykge1xuICAgICAgcmV0dXJuIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcihhY2N1LCB7b2xkTGF5ZXI6IGwsIHByb3A6ICdjdXJyZW50VGltZScsIGN1cnJlbnRUaW1lfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1O1xuICB9LCBuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIGFjdGlvbik7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBhbmltYXRpb24gd2luZG93XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge2lkLCBhbmltYXRpb25XaW5kb3d9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGlkKTtcblxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgYW5pbWF0aW9uV2luZG93XG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgY29uc3QgbmV3U3luY1RpbWVsaW5lTW9kZSA9IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpO1xuXG4gIHJldHVybiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge2lkLCBtb2RlOiBuZXdTeW5jVGltZWxpbmVNb2RlfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmaWx0ZXJJZCwgbmV3RmlsdGVyfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIFNlcmlhbGl6ZSB0aGUgZmlsdGVycyB0byBvbmx5IGNvbXBhcmUgdGhlIHNhdmVkIHByb3BlcnRpZXNcbiAgY29uc3Qgc2VyaWFsaXplZE9sZEZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihvbGRGaWx0ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3RmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG5ld0ZpbHRlciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3RmlsdGVyIHx8IGlzRXF1YWwoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcikpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgYW55IGNoYW5nZXMgdG8gdGhlIGZpbHRlciwgYXBwbHkgdGhlbVxuICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKTtcbiAgZGVsZXRlIGNoYW5nZWRbJ2lkJ107IC8vIGlkIHNob3VsZCBub3QgYmUgY2hhbmdlZFxuXG4gIGNvbnN0IGZpbHRlckluZGV4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJbmRleCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoXG4gICAgc3RhdGUsXG4gICAgc2V0RmlsdGVyKGZpbHRlckluZGV4LCBPYmplY3Qua2V5cyhjaGFuZ2VkKSwgT2JqZWN0LnZhbHVlcyhjaGFuZ2VkKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHgsIHZhbHVlSW5kZXggPSAwfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoYWN0aW9uLnZhbHVlKSB8fCBhY3Rpb24ucHJvcC5sZW5ndGggIT09IGFjdGlvbi52YWx1ZS5sZW5ndGgpXG4gICkge1xuICAgIENvbnNvbGUuZXJyb3IoJ0V4cGVjdGluZyB2YWx1ZSB0byBiZSBhbiBhcnJheSBvZiB0aGUgc2FtZSBsZW5ndGgsIHNpbmNlIHByb3AgaXMgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gY29udmVydCBwcm9wIGFuZCB2YWx1ZSB0byBhcnJheVxuICBjb25zdCBwcm9wcyA9IHRvQXJyYXkoYWN0aW9uLnByb3ApO1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSA/IHRvQXJyYXkoYWN0aW9uLnZhbHVlKSA6IFthY3Rpb24udmFsdWVdO1xuXG4gIGxldCBuZXdGaWx0ZXIgPSBvbGRGaWx0ZXI7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNbaV07XG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IHBhc3NpbmcgaW4gbmFtZSBhcyBhbiBhcnJheSBpbnRvIF91cGRhdGVGaWx0ZXJQcm9wLCBzbyB3ZSBjYWxsIGl0IG11bHRpcGxlIHRpbWVzIHdpdGggZWFjaCBuYW1lXG4gICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZXJlIGFzIHRvIHdoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZFxuICAgIGxldCByZXM7XG4gICAgaWYgKHByb3AgPT09ICduYW1lJyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgcmVzID0gdmFsdWUucmVkdWNlKChhY2N1LCB2KSA9PiB7XG4gICAgICAgIHJldHVybiBfdXBkYXRlRmlsdGVyUHJvcChhY2N1LCBuZXdGaWx0ZXIsIHByb3AsIHYsIHZhbHVlSW5kZXgpO1xuICAgICAgfSwgbmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBfdXBkYXRlRmlsdGVyUHJvcChuZXdTdGF0ZSwgbmV3RmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgfVxuICAgIG5ld0ZpbHRlciA9IHJlcy5maWx0ZXI7XG4gICAgbmV3U3RhdGUgPSByZXMuc3RhdGU7XG4gICAgZGF0YXNldElkc1RvRmlsdGVyID0gZGF0YXNldElkc1RvRmlsdGVyLmNvbmNhdChyZXMuZGF0YXNldElkc1RvRmlsdGVyKTtcbiAgfVxuXG4gIGNvbnN0IGVubGFyZ2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCk7XG5cbiAgaWYgKGVubGFyZ2VkRmlsdGVyICYmIGVubGFyZ2VkRmlsdGVyLmlkICE9PSBuZXdGaWx0ZXIuaWQpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgZW5sYXJnZWQgZmlsdGVyXG4gICAgbmV3RmlsdGVyLnZpZXcgPSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xuICB9XG5cbiAgLy8gc2F2ZSBuZXcgZmlsdGVycyB0byBuZXdTdGF0ZVxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBuZXdGaWx0ZXIsIG5ld1N0YXRlKTtcblxuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICB1bmlxKGRhdGFzZXRJZHNUb0ZpbHRlciksXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcblxuICAvLyBuZWVkIHRvIHVwZGF0ZSBmaWx0ZXJQbG90IGFmdGVyIGZpbHRlciBEYXRhc2V0IGZvciBwbG90IHRvIHVwZGF0ZSBvbiBmaWx0ZXJlZCByZXN1bHRcbiAgY29uc3QgZmlsdGVyV2l0aFBMb3QgPSB1cGRhdGVGaWx0ZXJQbG90KG5ld1N0YXRlLmRhdGFzZXRzLCBuZXdTdGF0ZS5maWx0ZXJzW2lkeF0pO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIGZpbHRlcldpdGhQTG90LCBuZXdTdGF0ZSk7XG5cbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIC8vIElmIHRpbWUgcmFuZ2UgZmlsdGVyIHZhbHVlIHdhcyB1cGRhdGVkLCBhZGp1c3QgYW5pbWF0aW9uIGNvbmZpZ1xuICBpZiAobmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgcHJvcHMuaW5jbHVkZXMoJ3ZhbHVlJykpIHtcbiAgICBuZXdTdGF0ZSA9IGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGFjdGlvbi5pZHgpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIGRhdGFzZXRzKSB7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG4gIGlmIChmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdKSB7XG4gICAgLy8gaWYgZGF0YUlkIGFscmVhZHkgZXhpc3RcbiAgICBuZXdGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpO1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IG5ld0ZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0VmFsdWVbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICBuZXdGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dFZhbHVlLCBuZXdGaWx0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykge1xuICBjb25zdCBkYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuXG4gIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZUluZGV4ID09PSAwKSB7XG4gICAgLy8gaWYgcmVtb3ZlIHRoZSBvbmx5IGRhdGFJZCwgY3JlYXRlIGFuIGVtcHR5IGZpbHRlciBpbnN0ZWFkO1xuICAgIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtpZDogZmlsdGVyLmlkfSk7XG4gIH1cblxuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgW1xuICAgICdkYXRhSWQnLFxuICAgICduYW1lJyxcbiAgICAnZmllbGRJZHgnLFxuICAgICdncHVDaGFubmVsJyxcbiAgICAnZW5kTmFtZScsXG4gICAgJ2VuZEZpZWxkSWR4JyxcbiAgICAnZW5kTWFwcGVkVmFsdWUnLFxuICAgICdncHVFbmRDaGFubmVsJ1xuICBdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyW3Byb3BdKSkge1xuICAgICAgY29uc3QgbmV4dFZhbCA9IGZpbHRlcltwcm9wXS5zbGljZSgpO1xuICAgICAgbmV4dFZhbC5zcGxpY2UodmFsdWVJbmRleCwgMSk7XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCBuZXh0VmFsLCBmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlRmllbGREb21haW4gZm9yIHRoZSByZW1haW5pbmcgZmllbGRzXG4gIGNvbnN0IGRvbWFpblN0ZXBzID0gbWVyZ2VGaWx0ZXJEb21haW4oZmlsdGVyLCBkYXRhc2V0cyk7XG5cbiAgY29uc3QgbmV4dEZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgLy8gdmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4oZG9tYWluU3RlcHMgPyB7ZG9tYWluOiBkb21haW5TdGVwcz8uZG9tYWluLCBzdGVwOiBkb21haW5TdGVwcz8uc3RlcH0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBuZXh0VmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5leHRGaWx0ZXIudmFsdWUsIG5leHRGaWx0ZXIpO1xuICByZXR1cm4ge1xuICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgdmFsdWU6IG5leHRWYWx1ZVxuICB9O1xufVxuXG4vKiogKlxuICogVXBkYXRlcyBhIHNpbmdsZSBwcm9wZXJ0eSBvZiBhIGZpbHRlclxuICovXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyUHJvcChzdGF0ZSwgZmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCwgZGF0YXNldElkcz8pIHtcbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgc3dpdGNoIChwcm9wKSB7XG4gICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgaWYgd2UgdXBkYXRlIGZpbHRlckRhdGFJZCwgd2UgbmVlZCB0byBjb25zaWRlciB0d28gY2FzZXM6XG4gICAgLy8gMS4gZGF0YUlkIGlzIGVtcHR5OiBjcmVhdGUgYSBkZWZhdWx0IGZpbHRlclxuICAgIC8vIDIuIEFkZCBhIG5ldyBkYXRhc2V0IGlkXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5kYXRhSWQ6IHtcbiAgICAgIGNvbnN0IG9sZERhdGFJZCA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGZpbHRlciA9IF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgc3RhdGUuZGF0YXNldHMpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdW5pcShbLi4ub2xkRGF0YUlkLCAuLi5maWx0ZXIuZGF0YUlkXSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5uYW1lOiB7XG4gICAgICAvLyB3ZSBhcmUgc3VwcG9ydGluZyB0aGUgY3VycmVudCBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBmaWx0ZXIgbmFtZSB3aWxsIG9ubHkgdXBkYXRlIGZpbHRlciBuYW1lIGJ1dCBpdCB3b24ndCBoYXZlIHNpZGUgZWZmZWN0c1xuICAgICAgLy8gd2UgYXJlIGdvbm5hIHVzZSBwYWlyIG9mIGRhdGFzZXRzIGFuZCBmaWVsZElkeCB0byB1cGRhdGUgdGhlIGZpbHRlclxuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXgsXG4gICAgICAgIHttZXJnZURvbWFpbjogdmFsdWVJbmRleCA+IDB9XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgaWYgKGZpbHRlci5ncHUpIHtcbiAgICAgICAgICBmaWx0ZXIgPSBzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgICAgZmlsdGVyID0gYXNzaWduR3B1Q2hhbm5lbChmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG4gICAgICAgIC8vIHJlbW92ZSBmaWx0ZXIgUGxvdCBhdCBkYXRhc2V0SWQsIHNvIGl0IHdpbGwgYmUgcmVjYWxjdWxhdGVkXG4gICAgICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhc2V0SWQpO1xuXG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgLy8gb25seSBmaWx0ZXIgdGhlIGN1cnJlbnQgZGF0YXNldFxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5lbmROYW1lOiB7XG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXhcbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBmaWx0ZXIgPSBzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIGZpbHRlciA9IGZpbHRlci5ncHVcbiAgICAgICAgICA/IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKVxuICAgICAgICAgIDogey4uLmZpbHRlciwgZ3B1Q2hhbm5lbDogdW5kZWZpbmVkLCBncHVFbmRDaGFubmVsOiB1bmRlZmluZWR9O1xuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmxheWVySWQ6IHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgZGF0YXNldElkL3MgaWYgd2UgaGF2ZSBhZGRlZC9yZW1vdmVkIGxheWVyc1xuICAgICAgLy8gLSBjaGVjayBmb3IgbGF5ZXJJZCBjaGFuZ2VzIChYT1Igd29ya3MgYmVjYXVzZSBvZiBzdHJpbmcgdmFsdWVzKVxuICAgICAgLy8gaWYgbm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBsYXllcklkcywgZG9uJ3QgZG8gYW55IGZpbHRlcmluZ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbGF5ZXJJZERpZmZlcmVuY2UgPSB4b3IodmFsdWUsIGZpbHRlci5sYXllcklkKTtcblxuICAgICAgY29uc3QgbGF5ZXJEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICBsYXllcklkRGlmZmVyZW5jZVxuICAgICAgICAgIC5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICAvLyBvbmx5IGZpbHRlciBkYXRhc2V0c0lkc1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gbGF5ZXJEYXRhSWRzO1xuXG4gICAgICAvLyBVcGRhdGUgbmV3RmlsdGVyIGRhdGFJZHNcbiAgICAgIGNvbnN0IG5ld0RhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIHZhbHVlXG4gICAgICAgICAgPy5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgbGF5ZXJJZDogdmFsdWUsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkc1xuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCB2YWx1ZSwgZmlsdGVyKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHtmaWx0ZXIsIGRhdGFzZXRJZHMsIGRhdGFzZXRJZHNUb0ZpbHRlciwgc3RhdGV9O1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclBsb3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIG5ld1Byb3B9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5maWx0ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzWyR7aWR4fV0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIG5ld1Byb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gJ3Bsb3RUeXBlJykge1xuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKG5ld1Byb3AucGxvdFR5cGUpKShuZXdGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3lBeGlzJykge1xuICAgICAgY29uc3QgY2hhcnRUeXBlID0gbmV3UHJvcC55QXhpcyA/IFBMT1RfVFlQRVMubGluZUNoYXJ0IDogUExPVF9UWVBFUy5oaXN0b2dyYW07XG5cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyh7dHlwZTogY2hhcnRUeXBlfSkpKG1lcmdlXyhuZXdQcm9wKShuZXdGaWx0ZXIpKTtcbiAgICB9XG4gIH1cblxuICBuZXdGaWx0ZXIgPSB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXIpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgIWFjdGlvbi5kYXRhSWRcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBpZDogYWN0aW9uLmlkfSldXG4gICAgICB9O1xuXG4vKipcbiAqIENyZWF0ZSBvciB1cGRhdGUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgZGF0YUlkLCBmaWVsZCwgdmFsdWV9ID0gYWN0aW9uO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbEluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBpZCk7XG4gIGxldCBmaWx0ZXJJbmRleCA9IG9yaWdpbmFsSW5kZXg7XG4gIGlmICghaWQgJiYgIWRhdGFJZCkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuICBpZiAob3JpZ2luYWxJbmRleCA8IDAgJiYgZGF0YUlkKSB7XG4gICAgbmV3U3RhdGUgPSBhZGRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkfSk7XG4gICAgaWYgKG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoICE9PSBzdGF0ZS5maWx0ZXJzLmxlbmd0aCArIDEpIHtcbiAgICAgIC8vIE5vIG5ldyBmaWx0ZXIgd2FzIGFkZGVkXG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIC8vIEhlcmUgd2UgYXJlIGFzc3VtaW5nIHRoYXQgdGhlIGZpbHRlciB3YXMgYWRkZWQgYXQgdGhlIGVuZFxuICAgIGZpbHRlckluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5sZW5ndGggLSAxO1xuICAgIG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdID0ge1xuICAgICAgLi4ubmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0sXG4gICAgICAuLi4oaWQgPyB7aWR9IDogbnVsbClcbiAgICB9O1xuICB9XG5cbiAgLy8gTm8gbmVlZCB0byB1cGRhdGUgdGhpcyBpZiBpdCdzIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXJcbiAgLy8gRmlyc3Qgd2UgbWFrZSBzdXJlIGFsbCB0aGUgZGF0YUlkcyB0aGF0IGZpZWxkcyByZWZlciB0byBhcmUgdXBkYXRlZFxuICBpZiAob3JpZ2luYWxJbmRleCA+PSAwICYmIGRhdGFJZCkge1xuICAgIC8vIElmIHRoZSBkYXRhSWQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggb25lIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShkYXRhSWQpID8gZGF0YUlkIDogW2RhdGFJZF0pLnJlZHVjZSgoYWNjdSwgZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ2RhdGFJZCcsXG4gICAgICAgIHZhbHVlOiBkLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSBmaWVsZHNcbiAgaWYgKGZpZWxkKSB7XG4gICAgLy8gSWYgdGhlIGZpZWxkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIGZpZWxkIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShmaWVsZCkgPyBmaWVsZCA6IFtmaWVsZF0pLnJlZHVjZSgoYWNjdSwgZiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ25hbWUnLFxuICAgICAgICB2YWx1ZTogZixcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgdmFsdWUgc2VwYXJhdGVseVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySW5kZXgsIHByb3A6ICd2YWx1ZScsIHZhbHVlfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBsYXllciBjb2xvciBwYWxldHRlIHVpIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b2xkTGF5ZXIsIHByb3AsIG5ld0NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9sZFZpeENvbmZpZyA9IG9sZExheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGlmIChvbGRWaXhDb25maWcgIT09IG5ld1Zpc0NvbmZpZykge1xuICAgIHJldHVybiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3VmlzQ29uZmlnOiB7XG4gICAgICAgIFtwcm9wXTogbmV3VmlzQ29uZmlnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICB9O1xufTtcblxuLyoqXG4gKiBTdGFydCBhbmQgZW5kIGZpbHRlciBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgaXNBbmltYXRpbmc6ICFmLmlzQW5pbWF0aW5nfSA6IGYpKVxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWc6IEFuaW1hdGlvbkNvbmZpZyB8IEZpbHRlckFuaW1hdGlvbkNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gJ2RhdGFJZCcgaW4gY29uZmlnICYmICdhbmltYXRpb25XaW5kb3cnIGluIGNvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcbiAgaWYgKGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBGaW5kIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb25cbiAgICAvLyBBc3N1bWluZyB0aGVyZSdzIG9ubHkgb25lIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb24sIHNlZSBzZXRGaWx0ZXJWaWV3VXBkYXRlclxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+ICFpc1NpZGVGaWx0ZXIoZikpO1xuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IHsuLi5maWx0ZXIsIC4uLmNvbmZpZ307XG4gICAgcmV0dXJuIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihzdGF0ZSwgYXBwbHlGaWx0ZXJDb25maWcoZmlsdGVyLmlkLCBuZXdGaWx0ZXIpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBpc0FuaW1hdGluZzogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ1xuICB9XG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGhpZGVDb250cm9sOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmhpZGVDb250cm9sXG4gIH1cbn0pO1xuXG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBzcGVlZDogYWN0aW9uLnNwZWVkfSA6IGYpKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGFuaW1hdGlvbiBzcGVlZCB3aXRoIHRoZSB2ZXJ0aWNhbCBzcGVlZCBzbGlkZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3NwZWVkfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBzcGVlZFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclZpZXdVcGRhdGVyQWN0aW9uXG4pID0+IHtcbiAgY29uc3Qge3ZpZXcsIGlkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyA9IHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PlxuICAgICAgaSA9PT0gaWR4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIDogc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGVcbiAgICAgICAgICB9XG4gICAgICAgIDogZlxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1thY3Rpb24uaWR4XTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZ2V0KGZpbHRlciwgWyd2YWx1ZScsICdwcm9wZXJ0aWVzJywgJ2lzVmlzaWJsZSddKTtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICdlbmFibGVkJyxcbiAgICB2YWx1ZTogIWlzVmlzaWJsZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQsIHtcbiAgICAgIGlzVmlzaWJsZTogIWlzVmlzaWJsZVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZWRpdG9yJ10sIG5ld0VkaXRvciwgbmV3U3RhdGUpO1xuXG4gIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFJZCwgdW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQgbmV3TGF5ZXI7XG4gIGxldCBuZXdMYXllckRhdGE7XG4gIGlmIChhY3Rpb24uY29uZmlnKSB7XG4gICAgbmV3TGF5ZXIgPSBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGFjdGlvbi5jb25maWcpO1xuICAgIGlmICghbmV3TGF5ZXIpIHtcbiAgICAgIENvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbGF5ZXIgZnJvbSBjb25maWcsIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGNvbmZpZyBpcyBub3QgYmUgaW4gY29ycmVjdCBmb3JtYXQnLFxuICAgICAgICBhY3Rpb24uY29uZmlnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICAgIG5ld0xheWVyID0gcmVzdWx0LmxheWVyO1xuICAgIG5ld0xheWVyRGF0YSA9IHJlc3VsdC5sYXllckRhdGE7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IGxheWVyIHdpdGggYSBzcGVjaWZpYyBkYXRhc2V0IG9yIGEgZGVmYXVsdCBvbmVcbiAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IGFjdGlvbi5kYXRhc2V0SWQgPz8gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpWzBdO1xuICAgIG5ld0xheWVyID0gbmV3IExheWVyKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgICAgZGF0YUlkOiBkZWZhdWx0RGF0YXNldFxuICAgIH0pO1xuICAgIG5ld0xheWVyRGF0YSA9IHt9O1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgbmV3TGF5ZXJdLFxuICAgIGxheWVyRGF0YTogWy4uLnN0YXRlLmxheWVyRGF0YSwgbmV3TGF5ZXJEYXRhXSxcbiAgICAvLyBhZGQgbmV3IGxheWVyIGF0IHRoZSB0b3BcbiAgICBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWQsIC4uLnN0YXRlLmxheWVyT3JkZXJdLFxuICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVyKVxuICB9O1xuXG4gIGlmIChuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIHJlbW92ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyVXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgIC8vIGludmFsaWQgaW5kZXhcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGxheWVyIHdpdGggaW52YWxpZCBpZHxpZHggJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGNsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcbiAgY29uc3QgbGF5ZXJUb1JlbW92ZSA9IGxheWVyc1tpZHhdO1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IGZpbHRlck91dEJ5SWQobGF5ZXJUb1JlbW92ZS5pZCkobGF5ZXJzKSxcbiAgICBsYXllckRhdGE6IHJlbW92ZUVsZW1lbnRBdEluZGV4KGlkeCkobGF5ZXJEYXRhKSxcbiAgICBsYXllck9yZGVyOiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJPcmRlciwgbGF5ZXJUb1JlbW92ZS5pZCksXG4gICAgY2xpY2tlZDogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm8sXG4gICAgc3BsaXRNYXBzOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllclRvUmVtb3ZlKVxuICAgIC8vIFRPRE86IHVwZGF0ZSBmaWx0ZXJzLCBjcmVhdGUgaGVscGVyIHRvIHJlbW92ZSBsYXllciBmb3JtIGZpbHRlciAocmVtb3ZlIGxheWVyaWQgYW5kIGRhdGFpZCkgaWYgbWFwcGVkXG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG59XG5cbi8qKlxuICogUmVvcmRlciBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllck9yZGVyOiBvcmRlclxufSk7XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldE5ld0xheWVyR3JvdXAoYWN0aW9uKTtcbiAgbGV0IG5ld0xheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgaWYgKGFjdGlvbi5sYXllck9yZGVyKSB7XG4gICAgYWN0aW9uLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllck9yZGVyOiBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJHcm91cClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZ3JvdXAgYW5kIGFsbCBsYXllcnMgd2l0aGluIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cFRvUmVtb3ZlID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwVG9SZW1vdmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBsYXllcklkc1RvUmVtb3ZlID0gZ2V0RmxhdExheWVyT3JkZXIobGF5ZXJHcm91cFRvUmVtb3ZlLmxheWVyT3JkZXIpO1xuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGxheWVySWRzVG9SZW1vdmUuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBuZXdTdGF0ZSA9IHJlbW92ZUxheWVyVXBkYXRlcihuZXdTdGF0ZSwge2lkOiBsYXllcklkfSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBUb1JlbW92ZSk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYSBsYXllciBncm91cCAobGFiZWwsIHZpc2liaWxpdHksIGxheWVyIG1lbWJlcnNoaXApXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBvcHRpb25zfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgaWYgKG9wdGlvbnMubGF5ZXJPcmRlcikge1xuICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSBbLi4ubGF5ZXJHcm91cC5sYXllck9yZGVyLCAuLi5uZXdTdGF0ZS5sYXllck9yZGVyXTtcbiAgICBvcHRpb25zLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cCA9IHtcbiAgICAuLi5sYXllckdyb3VwLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcblxuICBpZiAobmV3TGF5ZXJHcm91cC5pc1Zpc2libGUgIT09IGxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgY29uc3QgbGF5ZXJJZHMgPSBnZXRGbGF0TGF5ZXJPcmRlcihuZXdMYXllckdyb3VwLmxheWVyT3JkZXIpO1xuICAgIG5ld1N0YXRlID0gbmV3U3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjLCBsYXllcikgPT4ge1xuICAgICAgaWYgKGxheWVySWRzLmluY2x1ZGVzKGxheWVyLmlkKSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKGFjYywge1xuICAgICAgICAgIG9sZExheWVyOiBsYXllcixcbiAgICAgICAgICBuZXdDb25maWc6IHtpc1Zpc2libGU6IG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cCk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBsYXllciB0byBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gIGlmICghbGF5ZXJHcm91cCB8fCAhbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAobGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmQoZW50cnkgPT4gZW50cnkgPT09IGxheWVySWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGZyb20gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXBPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdMYXllckdyb3VwT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBTd2FwIGxheWVyIG9yZGVyIGVudHJpZXMgYmV0d2VlbiByb290IGFuZCBncm91cHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3Qgc3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Td2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtvcmlnaW5MYXllcklkLCBkZXN0aW5hdGlvbkxheWVySWQsIG9yaWdpbkxheWVyR3JvdXBJZCwgZGVzdGluYXRpb25MYXllckdyb3VwSWR9ID0gYWN0aW9uO1xuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkICYmIG9yaWdpbkluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlNb3ZlKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0aW5hdGlvbkluZGV4KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBsZXQgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gbmV3TGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBmYWxzZVxuICAgICAgKTtcbiAgICAgIG5ld0xheWVyT3JkZXIuc3BsaWNlKGRlc3RpbmF0aW9uSW5kZXggPT09IC0xID8gMCA6IGRlc3RpbmF0aW9uSW5kZXgsIDAsIG9yaWdpbkxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllck9yZGVyID0gWy4uLm5ld0xheWVyT3JkZXIsIG9yaWdpbkxheWVySWRdO1xuICAgIH1cbiAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBpZiAob3JpZ2luTGF5ZXJHcm91cElkID09PSBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlc3RJbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgLy8gQ3Jvc3MtZ3JvdXAgbW92ZTogcmVtb3ZlIGZyb20gb3JpZ2luLCB0aGVuIGFkZCB0byBkZXN0aW5hdGlvblxuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgbGV0IG5ld1N0YXRlID0gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG5cbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBvcmlnaW5MYXllcklkKTtcbiAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggIT09IC0xICYmIGRlc3RJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICAgIGxheWVyT3JkZXI6IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICByZXR1cm4gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIGR1cGxpY2F0ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCAhc3RhdGUubGF5ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyICR7aWR4fSBub3QgZm91bmQgaW4gbGF5ZXJPcmRlcmApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gbGF5ZXJzW2lkeF07XG5cbiAgY29uc3Qgb3JpZ2luYWxMYXllck9yZGVySWR4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcbiAgbGV0IG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9YDtcbiAgbGV0IHBvc3RmaXggPSAwO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gIHdoaWxlIChsYXllcnMuZmluZChsID0+IGwuY29uZmlnLmxhYmVsID09PSBuZXdMYWJlbCkpIHtcbiAgICBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfSAkeysrcG9zdGZpeH1gO1xuICB9XG5cbiAgLy8gY29sbGVjdCBsYXllciBjb25maWcgZnJvbSBvcmlnaW5hbFxuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9yaWdpbmFsLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIC8vIGFzc2lnbiBuZXcgaWQgYW5kIGxhYmVsIHRvIGNvcGllZCBsYXllclxuICBpZiAoIWxvYWRlZExheWVyPy5jb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbG9hZGVkTGF5ZXIuY29uZmlnLmxhYmVsID0gbmV3TGFiZWw7XG4gIGxvYWRlZExheWVyLmlkID0gZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcblxuICAvLyBhZGQgbGF5ZXIgdG8gc3RhdGVcbiAgbGV0IG5leHRTdGF0ZSA9IGFkZExheWVyVXBkYXRlcihzdGF0ZSwge2NvbmZpZzogbG9hZGVkTGF5ZXJ9KTtcbiAgLy8gcmV0cmlldmUgbmV3bHkgY3JlYXRlZCBsYXllclxuICBjb25zdCBuZXdMYXllciA9IG5leHRTdGF0ZS5sYXllcnNbbmV4dFN0YXRlLmxheWVycy5sZW5ndGggLSAxXTtcblxuICAvLyBDaGVjayBpZiB0aGUgb3JpZ2luYWwgbGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXBcbiAgY29uc3QgcGFyZW50R3JvdXAgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG5cbiAgaWYgKHBhcmVudEdyb3VwKSB7XG4gICAgLy8gTGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXAgLSByZW1vdmUgdGhlIHByZXBlbmRlZCBpZCBmcm9tIHJvb3QgYW5kIGluc2VydCBpbnRvIHRoZSBncm91cFxuICAgIGNvbnN0IGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkID0gbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSk7XG4gICAgY29uc3QgaWR4SW5Hcm91cCA9IHBhcmVudEdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGUgPT4gZSA9PT0gb3JpZ2luYWwuaWQpO1xuICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KHBhcmVudEdyb3VwLmxheWVyT3JkZXIsIGlkeEluR3JvdXAsIG5ld0xheWVyLmlkKTtcbiAgICBjb25zdCB1cGRhdGVkR3JvdXAgPSB7Li4ucGFyZW50R3JvdXAsIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn07XG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQsIHVwZGF0ZWRHcm91cCk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIGF0IHJvb3QgbGV2ZWwgLSB1c2Ugb3JpZ2luYWwgaW5kZXgtYmFzZWQgaW5zZXJ0aW9uXG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KFxuICAgICAgbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSwgbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoKSxcbiAgICAgIG9yaWdpbmFsTGF5ZXJPcmRlcklkeCxcbiAgICAgIG5ld0xheWVyLmlkXG4gICAgKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oYENhbid0IGFkZCBtb3JlIHRoYW4gb25lICR7TElHSFRfQU5EX1NIQURPV19FRkZFQ1QubmFtZX0gZWZmZWN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0ID0gY3JlYXRlRWZmZWN0KGFjdGlvbi5jb25maWcpO1xuXG4gIC8vIGNvbGxhcHNlIGNvbmZpZ3VyYXRvcnMgZm9yIG90aGVyIGVmZmVjdHNcbiAgc3RhdGUuZWZmZWN0cy5mb3JFYWNoKGVmZmVjdCA9PiBlZmZlY3Quc2V0UHJvcHMoe2lzQ29uZmlnQWN0aXZlOiBmYWxzZX0pKTtcblxuICBjb25zdCBlZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHMsIG5ld0VmZmVjdF07XG4gIGNvbnN0IGVmZmVjdE9yZGVyID0gZml4RWZmZWN0T3JkZXIoZWZmZWN0cywgW25ld0VmZmVjdC5pZCwgLi4uc3RhdGUuZWZmZWN0T3JkZXJdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlcn0gPSBzdGF0ZTtcbiAgY29uc3QgZWZmZWN0VG9SZW1vdmUgPSBlZmZlY3RzW2lkeF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmaXhlZCBpbiB0c1xuICAgIGVmZmVjdHM6IGZpbHRlck91dEJ5SWQoZWZmZWN0VG9SZW1vdmUuaWQpKGVmZmVjdHMpLFxuICAgIGVmZmVjdE9yZGVyOiBlZmZlY3RPcmRlci5maWx0ZXIoZWZmZWN0SWQgPT4gZWZmZWN0SWQgIT09IGVmZmVjdFRvUmVtb3ZlLmlkKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW9yZGVyIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVmZmVjdE9yZGVyOiBmaXhFZmZlY3RPcmRlcihzdGF0ZS5lZmZlY3RzLCBbLi4ub3JkZXJdKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZWZmZWN0T3JkZXIgPSBzdGF0ZS5lZmZlY3RPcmRlcjtcbiAgaWYgKHByb3BzLmlkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuaWQgIT09IGlkKSB7XG4gICAgY29uc3QgaWR4MiA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gcHJvcHMuaWQpO1xuICAgIGlmIChpZHgyID49IDApIHtcbiAgICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggZXhpc3RpbmcgZWZmZWN0IGlkICR7aWR9YCk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZWZmZWN0T3JkZXIgPSBlZmZlY3RPcmRlci5tYXAoZWZmZWN0T3JkZXJJZCA9PlxuICAgICAgZWZmZWN0T3JkZXJJZCA9PT0gaWQgPyAocHJvcHMuaWQgYXMgc3RyaW5nKSA6IGVmZmVjdE9yZGVySWRcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZWZmZWN0ID0gc3RhdGUuZWZmZWN0c1tpZHhdO1xuICBjb25zdCBuZXh0UGFyYW1zID0gcHJvcHMucGFyYW1ldGVycztcbiAgLy8gQSB0aW1lc3RhbXAtb25seSBuby1vcCBzdGlsbCB1c2VkIHRvIGFsbG9jYXRlIGEgbmV3IHZpc1N0YXRlIChzZXRQcm9wc1xuICAvLyBtdXRhdGVzIGluIHBsYWNlKS4gVGhhdCByZXRyaWdnZXJlZCBuZXN0ZWQgcmVhY3QtcmVkdXggY29ubmVjdCBzdWJzY3JpYmVyc1xuICAvLyB3aGlsZSBkcmFnZ2luZyB0aGUgTGlnaHQgJiBTaGFkb3cgZGF5LXRpbWUgc2xpZGVyIHVudGlsIFJlYWN0IHRocmV3XG4gIC8vIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWRcIi5cbiAgaWYgKFxuICAgIG5leHRQYXJhbXMgJiZcbiAgICBPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoID09PSAxICYmXG4gICAgT2JqZWN0LmtleXMobmV4dFBhcmFtcykubGVuZ3RoID09PSAxICYmXG4gICAgbmV4dFBhcmFtcy50aW1lc3RhbXAgIT0gbnVsbCAmJlxuICAgIG5leHRQYXJhbXMudGltZXN0YW1wID09PSBlZmZlY3QucGFyYW1ldGVycy50aW1lc3RhbXBcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzXTtcbiAgbmV3RWZmZWN0c1tpZHhdLnNldFByb3BzKHByb3BzKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8vIEFOTk9UQVRJT04gVVBEQVRFUlNcblxuZnVuY3Rpb24gbWFrZU5ld0Fubm90YXRpb24oY29uZmlnPzogQW5ub3RhdGlvblByb3BzUGFydGlhbCk6IEFubm90YXRpb24ge1xuICBjb25zdCBraW5kID0gY29uZmlnPy5raW5kID8/IElOSVRJQUxfQU5OT1RBVElPTl9LSU5EO1xuICBjb25zdCBwcm92aWRlZEFuZ2xlID0gTnVtYmVyLmlzRmluaXRlKChjb25maWcgYXMgYW55KT8uYW5nbGUpID8gKGNvbmZpZyBhcyBhbnkpLmFuZ2xlIDogdW5kZWZpbmVkO1xuICBjb25zdCBkZXJpdmVkRnJvbUFuZ2xlID1cbiAgICBwcm92aWRlZEFuZ2xlICE9IG51bGwgPyB0ZXh0UGxhY2VtZW50RnJvbUFuZ2xlKHByb3ZpZGVkQW5nbGUpIDogdW5kZWZpbmVkO1xuICBjb25zdCB0ZXh0U2lkZSA9XG4gICAgY29uZmlnPy50ZXh0U2lkZSA/P1xuICAgIGRlcml2ZWRGcm9tQW5nbGU/LnNpZGUgPz9cbiAgICAoa2luZCA9PT0gQW5ub3RhdGlvbktpbmQuVEVYVCA/IHVuZGVmaW5lZCA6IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUpO1xuICBjb25zdCB0ZXh0VmVydGljYWxQb3NpdGlvbiA9XG4gICAgY29uZmlnPy50ZXh0VmVydGljYWxQb3NpdGlvbiA/P1xuICAgIGRlcml2ZWRGcm9tQW5nbGU/LnZlcnRpY2FsID8/XG4gICAgKGtpbmQgPT09IEFubm90YXRpb25LaW5kLlRFWFQgPyB1bmRlZmluZWQgOiBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTik7XG4gIGNvbnN0IGJhc2UgPSB7XG4gICAgaWQ6IGNvbmZpZz8uaWQgPz8gZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAga2luZCxcbiAgICBpc1Zpc2libGU6IGNvbmZpZz8uaXNWaXNpYmxlID8/IHRydWUsXG4gICAgYXV0b1NpemU6IGNvbmZpZz8uYXV0b1NpemUgPz8gdHJ1ZSxcbiAgICBhdXRvU2l6ZVk6IGNvbmZpZz8uYXV0b1NpemVZID8/IHRydWUsXG4gICAgYW5jaG9yUG9pbnQ6IGNvbmZpZz8uYW5jaG9yUG9pbnQgPz8gKFswLCAwXSBhcyBbbnVtYmVyLCBudW1iZXJdKSxcbiAgICBsYWJlbDogY29uZmlnPy5sYWJlbCA/PyAnTmV3IEFubm90YXRpb24nLFxuICAgIGxpbmVDb2xvcjogY29uZmlnPy5saW5lQ29sb3IgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gICAgbGluZVdpZHRoOiBjb25maWc/LmxpbmVXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgICB0ZXh0V2lkdGg6IGNvbmZpZz8udGV4dFdpZHRoID8/IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICAgIHRleHRIZWlnaHQ6IGNvbmZpZz8udGV4dEhlaWdodCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gICAgdGV4dFZlcnRpY2FsQWxpZ246IGNvbmZpZz8udGV4dFZlcnRpY2FsQWxpZ24gPz8gKCdib3R0b20nIGFzIGNvbnN0KSxcbiAgICAuLi4odGV4dFNpZGUgPyB7dGV4dFNpZGV9IDoge30pLFxuICAgIC4uLih0ZXh0VmVydGljYWxQb3NpdGlvbiA/IHt0ZXh0VmVydGljYWxQb3NpdGlvbn0gOiB7fSksXG4gICAgbWFwSW5kZXg6IGNvbmZpZz8ubWFwSW5kZXhcbiAgfTtcblxuICBjb25zdCBkZWZhdWx0QW5nbGUgPVxuICAgIHRleHRTaWRlICYmIHRleHRWZXJ0aWNhbFBvc2l0aW9uXG4gICAgICA/IEFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UW2Ake3RleHRTaWRlfS0ke3RleHRWZXJ0aWNhbFBvc2l0aW9ufWBdXG4gICAgICA6IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRTtcblxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlBPSU5UOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuUE9JTlQsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkFSUk9XOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQVJST1csXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkNJUkNMRTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkNJUkNMRSxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlLFxuICAgICAgICByYWRpdXNJbk1ldGVyczogKGNvbmZpZyBhcyBhbnkpPy5yYWRpdXNJbk1ldGVycyA/PyAxMDAwXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuVEVYVDpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuVEVYVFxuICAgICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKGFjdGlvbi5jb25maWcpO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiB0cnVlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IHN0YXRlLmFubm90YXRpb25zLmZpbHRlcihhID0+IGEuaWQgIT09IGlkKSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgPT09IGlkID8gbnVsbCA6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OlxuICAgICAgc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgPT09IGlkID8gZmFsc2UgOiBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgY29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmFubm90YXRpb25zLmZpbmRJbmRleChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDApIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGFubm90YXRpb24gd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHByZXYgPSBzdGF0ZS5hbm5vdGF0aW9uc1tpZHhdO1xuICBsZXQgbmV4dEFubm90YXRpb246IEFubm90YXRpb247XG5cbiAgaWYgKGNvbmZpZy5raW5kICYmIGNvbmZpZy5raW5kICE9PSBwcmV2LmtpbmQpIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb25Qcm9wc1BhcnRpYWwpO1xuICB9IGVsc2Uge1xuICAgIG5leHRBbm5vdGF0aW9uID0gey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvbjtcbiAgfVxuXG4gIGNvbnN0IG5ld0Fubm90YXRpb25zID0gWy4uLnN0YXRlLmFubm90YXRpb25zXTtcbiAgbmV3QW5ub3RhdGlvbnNbaWR4XSA9IG5leHRBbm5vdGF0aW9uO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBuZXdBbm5vdGF0aW9uc1xuICB9O1xufTtcblxuLyoqXG4gKiBEdXBsaWNhdGUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBvcmlnaW5hbCA9IHN0YXRlLmFubm90YXRpb25zLmZpbmQoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmICghb3JpZ2luYWwpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgZHVwbGljYXRlIGFubm90YXRpb24gd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0Fubm90YXRpb24gPSB7XG4gICAgLi4uY2xvbmVEZWVwKG9yaWdpbmFsKSxcbiAgICBpZDogZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAgbGFiZWw6IGBDb3B5IG9mICR7b3JpZ2luYWwubGFiZWx9YFxuICB9O1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBTZXQgc2VsZWN0ZWQgYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBpc0VkaXRpbmdUZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGlkID09PSBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCAmJlxuICAgIChpc0VkaXRpbmdUZXh0ID8/IGZhbHNlKSA9PT0gc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IGlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBpc0VkaXRpbmdUZXh0ID8/IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGRhdGFzZXQgYW5kIGFsbCBsYXllcnMsIGZpbHRlcnMsIHRvb2x0aXAgY29uZmlncyB0aGF0IGJhc2VkIG9uIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGF0YXNldFVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgLy8gZXh0cmFjdCBkYXRhc2V0IGtleVxuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgcHJlc2VudFxuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGF0YXNldHM6IHtbZGF0YXNldEtleV06IGRhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBsYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0S2V5KS5tYXAobCA9PiBsLmlkKTtcblxuICAvLyByZW1vdmUgbGF5ZXJzIGFuZCBkYXRhc2V0c1xuICBsZXQgbmV3U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHNcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGZpbHRlcnNcbiAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgbmV3U3RhdGUuZmlsdGVycykge1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YXNldEtleSk7XG4gICAgaWYgKHZhbHVlSW5kZXggPj0gMCAmJiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIG9ubHkgcmVtb3ZlIG9uZSBzeW5jZWQgZGF0YXNldCBmcm9tIHRoZSBmaWx0ZXJcbiAgICAgIGZpbHRlcnMucHVzaChfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlSW5kZXggPCAwKSB7XG4gICAgICAvLyBsZWF2ZSB0aGUgZmlsdGVyIGFzIGlzXG4gICAgICBmaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcobmV3U3RhdGUsIHtkYXRhSWQ6IGRhdGFzZXRLZXl9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhzdGF0ZSwge2RhdGFJZH0pIHtcbiAgbGV0IHtpbnRlcmFjdGlvbkNvbmZpZ30gPSBzdGF0ZTtcbiAgY29uc3Qge3Rvb2x0aXB9ID0gaW50ZXJhY3Rpb25Db25maWc7XG4gIGlmICh0b29sdGlwKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0b29sdGlwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7W2RhdGFJZF06IGZpZWxkcywgLi4uZmllbGRzVG9TaG93fSA9IGNvbmZpZy5maWVsZHNUb1Nob3c7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHsuLi50b29sdGlwLCBjb25maWc6IHsuLi5jb25maWcsIGZpZWxkc1RvU2hvd319XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7Li4uc3RhdGUsIGludGVyYWN0aW9uQ29uZmlnfTtcbn1cbi8qKlxuICogdXBkYXRlIGxheWVyIGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyQmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiB1cGRhdGUgb3ZlcmxheSBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgb3ZlcmxheUJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RGF0YXNldFRhYmxlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRpbmdEYXRhc2V0OiBhY3Rpb24uZGF0YUlkXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBjdXN0b20gY29sb3IgZm9yIGRhdGFzZXRzIGFuZCBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2NvbG9yOiBhY3Rpb24ubmV3Q29sb3J9fSk7XG59O1xuXG4vKipcbiAqIHJlc2V0IHZpc1N0YXRlIHRvIGluaXRpYWwgU3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZXNldE1hcENvbmZpZ1VwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gIC4uLnN0YXRlLmluaXRpYWxTdGF0ZSxcbiAgaW5pdGlhbFN0YXRlOiBzdGF0ZS5pbml0aWFsU3RhdGVcbn0pO1xuXG4vKipcbiAqIFByb3BhZ2F0ZSBgdmlzU3RhdGVgIHJlZHVjZXIgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uLiBDdXJyZW50IGNvbmZpZyB3aWxsIGJlIG92ZXJyaWRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Y29uZmlnID0ge30sIG9wdGlvbnMgPSB7fX1cbiAgfToge1xuICAgIHR5cGU/OiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVDRUlWRV9NQVBfQ09ORklHO1xuICAgIHBheWxvYWQ6IFJlY2VpdmVNYXBDb25maWdQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghY29uZmlnLnZpc1N0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2tlZXBFeGlzdGluZ0NvbmZpZ30gPSBvcHRpb25zO1xuXG4gIC8vIHJlc2V0IGNvbmZpZyBpZiBrZWVwRXhpc3RpbmdDb25maWcgaXMgZmFsc3lcbiAgbGV0IG1lcmdlZFN0YXRlID0gIWtlZXBFeGlzdGluZ0NvbmZpZyA/IHJlc2V0TWFwQ29uZmlnVXBkYXRlcihzdGF0ZSkgOiBzdGF0ZTtcbiAgZm9yIChjb25zdCBtZXJnZXIgb2Ygc3RhdGUubWVyZ2Vycykge1xuICAgIGlmIChpc1ZhbGlkTWVyZ2VyKG1lcmdlcikgJiYgaGFzUHJvcHNUb01lcmdlKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3ApKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlci5tZXJnZShcbiAgICAgICAgbWVyZ2VkU3RhdGUsXG4gICAgICAgIGdldFByb3BWYWx1ZVRvTWVyZ2VyKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3AsIG1lcmdlci50b01lcmdlUHJvcCksXG4gICAgICAgIC8vIGZyb21Db25maWdcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVySG92ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBob3ZlckluZm86IHtcbiAgICAvLyBkZWNrLmdsIGluZm8gaXMgbXV0YWJsZVxuICAgIC4uLmFjdGlvbi5pbmZvLFxuICAgIC4uLihOdW1iZXIuaXNGaW5pdGUoYWN0aW9uLm1hcEluZGV4KSA/IHttYXBJbmRleDogYWN0aW9uLm1hcEluZGV4fSA6IHt9KVxuICB9XG59KTtcblxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcblxuICBjb25zdCBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAuLi57W2NvbmZpZy5pZF06IGNvbmZpZ31cbiAgfTtcblxuICAvLyBEb24ndCBlbmFibGUgdG9vbHRpcCBhbmQgYnJ1c2ggYXQgdGhlIHNhbWUgdGltZVxuICAvLyBidXQgY29vcmRpbmF0ZXMgY2FuIGJlIHNob3duIGF0IGFsbCB0aW1lXG4gIGNvbnN0IGNvbnRyYWRpY3QgPSBbJ2JydXNoJywgJ3Rvb2x0aXAnXTtcblxuICBpZiAoXG4gICAgY29udHJhZGljdC5pbmNsdWRlcyhjb25maWcuaWQpICYmXG4gICAgY29uZmlnLmVuYWJsZWQgJiZcbiAgICAhc3RhdGUuaW50ZXJhY3Rpb25Db25maWdbY29uZmlnLmlkXS5lbmFibGVkXG4gICkge1xuICAgIC8vIG9ubHkgZW5hYmxlIG9uZSBpbnRlcmFjdGlvbiBhdCBhIHRpbWVcbiAgICBjb250cmFkaWN0LmZvckVhY2goayA9PiB7XG4gICAgICBpZiAoayAhPT0gY29uZmlnLmlkKSB7XG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnW2tdID0gey4uLmludGVyYWN0aW9uQ29uZmlnW2tdLCBlbmFibGVkOiBmYWxzZX07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIGlmIChjb25maWcuaWQgPT09ICdnZW9jb2RlcicgJiYgIWNvbmZpZy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIHJlbW92ZURhdGFzZXRVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkOiAnZ2VvY29kZXJfZGF0YXNldCd9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGNsaWNrIGV2ZW50IHdpdGggY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbW91c2VQb3M6IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgcGlubmVkOiBzdGF0ZS5tb3VzZVBvcy5waW5uZWQgPyBudWxsIDogY2xvbmVEZWVwKHN0YXRlLm1vdXNlUG9zKVxuICAgICAgfVxuICAgIDogc3RhdGUubW91c2VQb3MsXG4gIGNsaWNrZWQ6IGFjdGlvbi5pbmZvICYmIGFjdGlvbi5pbmZvLnBpY2tlZCA/IGFjdGlvbi5pbmZvIDogbnVsbFxufSk7XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgY2xpY2sgZXZlbnQsIHVuc2VsZWN0IGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbWFwQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25NYXBDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBudWxsXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIG1vdmUgZXZlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtb3VzZU1vdmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtldnR9OiBWaXNTdGF0ZUFjdGlvbnMuT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChPYmplY3QudmFsdWVzKHN0YXRlLmludGVyYWN0aW9uQ29uZmlnKS5zb21lKGNvbmZpZyA9PiBjb25maWcuZW5hYmxlZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBtb3VzZVBvczoge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LnBvaW50KSA/IHttb3VzZVBvc2l0aW9uOiBbLi4uZXZ0LnBvaW50XX0gOiB7fSksXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5sbmdMYXQpID8ge2Nvb3JkaW5hdGU6IFsuLi5ldnQubG5nTGF0XX0gOiB7fSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBmb3IgYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICBzdGF0ZS5zcGxpdE1hcHMgJiYgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA9PT0gMFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgLy8gbWF5YmUgd2Ugc2hvdWxkIHVzZSBhbiBhcnJheSB0byBzdG9yZSBzdGF0ZSBmb3IgYSBzaW5nbGUgbWFwIGFzIHdlbGxcbiAgICAgICAgLy8gaWYgY3VycmVudCBtYXBzIGxlbmd0aCBpcyBlcXVhbCB0byAwIGl0IG1lYW5zIHRoYXQgd2UgYXJlIGFib3V0IHRvIHNwbGl0IHRoZSB2aWV3XG4gICAgICAgIHNwbGl0TWFwczogY29tcHV0ZVNwbGl0TWFwTGF5ZXJzKHN0YXRlLmxheWVycywge2R1cGxpY2F0ZTogZmFsc2V9KVxuICAgICAgfVxuICAgIDogY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgoc3RhdGUsIGFjdGlvbik7XG5cbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bWFwSW5kZXgsIGxheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtzcGxpdE1hcHN9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoKHNtLCBpKSA9PlxuICAgICAgaSA9PT0gbWFwSW5kZXhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0sXG4gICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLmxheWVycyxcbiAgICAgICAgICAgICAgLy8gaWYgbGF5ZXJJZCBub3QgaW4gbGF5ZXJzLCBzZXQgaXQgdG8gdmlzaWJsZVxuICAgICAgICAgICAgICBbbGF5ZXJJZF06ICFzcGxpdE1hcHNbaV0ubGF5ZXJzW2xheWVySWRdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNtXG4gICAgKVxuICB9O1xufTtcblxuZnVuY3Rpb24gaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGE/OiBQcm90b0RhdGFzZXRbJ2RhdGEnXSB8IG51bGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgZGF0YT8ucm93cz8ubGVuZ3RoIHx8IGRhdGE/LmNvbHM/Lmxlbmd0aCB8fCAoZGF0YSBhcyB7YXJyb3dUYWJsZT86IHVua25vd259KT8uYXJyb3dUYWJsZVxuICApO1xufVxuXG5mdW5jdGlvbiBuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQ6IFByb3RvRGF0YXNldCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGRhdGFzZXQuaW5mbz8udHlwZSA9PT0gRGF0YXNldFR5cGUuRVhURVJOQUxMWV9IT1NURUQgJiZcbiAgICB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlID09PSAnc3RyaW5nJyAmJlxuICAgICFoYXNUYWJ1bGFyRGF0YXNldERhdGEoZGF0YXNldC5kYXRhKVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldChkYXRhc2V0OiBQcm90b0RhdGFzZXQpOiBQcm9taXNlPFByb3RvRGF0YXNldD4ge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuICBjb25zdCBsb2FkZWQgPSBhd2FpdCBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoe1xuICAgIHNvdXJjZTogZGF0YXNldC5tZXRhZGF0YT8uc291cmNlIGFzIHN0cmluZyxcbiAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChkYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICBzaXplOiB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc2l6ZSA9PT0gJ251bWJlcicgPyBkYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgYnlwYXNzQ2FjaGU6IGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyhkYXRhc2V0Lm1ldGFkYXRhKSA+IDBcbiAgfSk7XG4gIGlmICghbG9hZGVkLmRhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGRhdGEgbG9hZGVkIGZyb20gJHtkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2V9YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIGRhdGE6IGxvYWRlZC5kYXRhLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgZXRhZzogbG9hZGVkLmV0YWcsXG4gICAgICBsYXN0TW9kaWZpZWQ6IGxvYWRlZC5sYXN0TW9kaWZpZWQsXG4gICAgICAuLi4odHlwZW9mIGxvYWRlZC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiBsb2FkZWQuc2l6ZX0gOiB7fSksXG4gICAgICBsYXN0RmV0Y2hlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnXG4gICAgfVxuICB9O1xufVxuXG5jb25zdCBIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoXG4gIGh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0LFxuICAnSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG5jb25zdCBGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKGFzeW5jIChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufSwgJ0ZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSycpO1xuXG5mdW5jdGlvbiBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgZGF0YXNldHM6IERhdGFzZXRzKSB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBjcmVhdGVOZXdEYXRhRW50cnkoZGF0YXNldCwgZGF0YXNldHMpO1xuICB9XG4gIHJldHVybiBIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyhkYXRhc2V0KS5jaGFpbihoeWRyYXRlZCA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeShoeWRyYXRlZCwgZGF0YXNldHMpO1xuICAgIHJldHVybiAoXG4gICAgICB0YXNrIHx8XG4gICAgICBGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0soJ0ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldCBkdWUgdG8gZGF0YSB2ZXJpZmljYXRpb24gZXJyb3JzJylcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldDogRGF0YXNldHNbc3RyaW5nXSwgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gIHJldHVybiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgLi4ucGF0Y2hcbiAgICB9XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlKHtcbiAgYXJnOiBtZXRhZGF0YSxcbiAgb25Qcm9ncmVzc1xufToge1xuICBhcmc6IHtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG4gICAgc2l6ZT86IG51bWJlcjtcbiAgICBldGFnPzogc3RyaW5nO1xuICAgIGxhc3RNb2RpZmllZD86IHN0cmluZztcbiAgfTtcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiB7bG9hZGVkOiBudW1iZXI7IHRvdGFsPzogbnVtYmVyOyBwZXJjZW50OiBudW1iZXJ9KSA9PiB2b2lkO1xufSkge1xuICAvLyBGZXRjaCBvbmx5LiBEbyBub3QgbXV0YXRlIHRoZSBSZWR1eCB0YWJsZSBoZXJlOiBwcm9ncmVzcyBldmVudHMgY29weSBpdCwgYW5kXG4gIC8vIHRoZSBzdWNjZXNzIHVwZGF0ZXIgYXBwbGllcyB0aGUgc25hcHNob3QgdG8gd2hhdGV2ZXIgaW5zdGFuY2UgaXMgaW4gdGhlIHN0b3JlLlxuICByZXR1cm4gbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHsuLi5tZXRhZGF0YSwgb25Qcm9ncmVzcywgYnlwYXNzQ2FjaGU6IHRydWV9KTtcbn1cblxuY29uc3QgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlV2l0aFByb2dyZXNzKFxuICByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlLFxuICAnUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG4vKipcbiAqIFJlLWZldGNoIGFuIGV4dGVybmFsbHkgaG9zdGVkIGRhdGFzZXQgYW5kIHJlcGxhY2UgaXRzIHRhYmxlIGNvbnRlbnRzIGluIHBsYWNlLlxuICogTGF5ZXJzIGFuZCBmaWx0ZXJzIGFyZSBrZXB0IHdoZW4gZmllbGQgbmFtZXMgbWF0Y2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoXG4gICAgIWRhdGFzZXQgfHxcbiAgICBkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEIHx8XG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzID09PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RGF0YXNldCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICByZWZyZXNoU3RhdHVzOiAnbG9hZGluZycsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBuZXh0RGF0YXNldFxuICAgICAgfVxuICAgIH0sXG4gICAgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soe1xuICAgICAgYXJnOiB7XG4gICAgICAgIHNvdXJjZTogbmV4dERhdGFzZXQubWV0YWRhdGEuc291cmNlIGFzIHN0cmluZyxcbiAgICAgICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQobmV4dERhdGFzZXQubWV0YWRhdGEpLFxuICAgICAgICBzaXplOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA9PT0gJ251bWJlcicgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgICAgICBldGFnOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA9PT0gJ3N0cmluZycgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnIDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6XG4gICAgICAgICAgdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+XG4gICAgICAgIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MoZGF0YUlkLCBNYXRoLnJvdW5kKChwcm9ncmVzcz8ucGVyY2VudCA/PyAwKSAqIDEwMCkpXG4gICAgfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gcmVmcmVzaERhdGFzZXRTdWNjZXNzKGRhdGFJZCwgcmVzdWx0KSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+IHJlZnJlc2hEYXRhc2V0RXJyb3IoZGF0YUlkLCBlcnJvcilcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVjb3JkIGRvd25sb2FkIHByb2dyZXNzIGZvciBhbiBpbi1mbGlnaHQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBwZXJjZW50fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQgfHwgZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHBlcmNlbnQpXG4gICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocGVyY2VudCkpKVxuICAgIDogMDtcbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hQcm9ncmVzcyA9PT0gbmV4dFBlcmNlbnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge3JlZnJlc2hQcm9ncmVzczogbmV4dFBlcmNlbnR9KVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZmllbGROYW1lc0VxdWFsKGN1cnJlbnQ6IHtuYW1lOiBzdHJpbmd9W10sIGluY29taW5nPzoge25hbWU6IHN0cmluZ31bXSB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCFpbmNvbWluZz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBpbmNvbWluZy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQuZXZlcnkoKGZpZWxkLCBpKSA9PiBmaWVsZC5uYW1lID09PSBpbmNvbWluZ1tpXS5uYW1lKTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgcmVtb3RlIHNuYXBzaG90IGNoYW5nZXMgY29sdW1uIG5hbWVzLCBvbGQgbGF5ZXIgZmllbGRJZHggLyBmaWx0ZXIgbmFtZXNcbiAqIGNhbiBwb2ludCBhdCB0aGUgd3JvbmcgY29sdW1uLiBSZS1iaW5kIGJ5IG5hbWUgYW5kIGRyb3AgY29uZmlncyB0aGF0IG5vIGxvbmdlciBmaXQuXG4gKi9cbmZ1bmN0aW9uIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBuZXh0TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IGRyb3BwZWRMYXllcnM6IExheWVyW10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgbmV4dExheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVib3VuZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3NlcywgbGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gICAgaWYgKHJlYm91bmQ/LmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgbmV4dExheWVycy5wdXNoKHJlYm91bmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcm9wcGVkTGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5leHRMYXllck9yZGVyID0gc3RhdGUubGF5ZXJPcmRlcjtcbiAgbGV0IG5leHRTcGxpdE1hcHMgPSBzdGF0ZS5zcGxpdE1hcHM7XG4gIGRyb3BwZWRMYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbmV4dExheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV4dExheWVyT3JkZXIsIGxheWVyLmlkKTtcbiAgICBuZXh0U3BsaXRNYXBzID0gcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKG5leHRTcGxpdE1hcHMsIGxheWVyKTtcbiAgfSk7XG5cbiAgY29uc3QgbmV4dExheWVyRGF0YSA9IG5leHRMYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBjb25zdCBvbGRJZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KG9sZExheWVyID0+IG9sZExheWVyLmlkID09PSBsYXllci5pZCk7XG4gICAgcmV0dXJuIG9sZElkeCA+PSAwID8gc3RhdGUubGF5ZXJEYXRhW29sZElkeF0gOiB7fTtcbiAgfSk7XG5cbiAgY29uc3QgZmlsdGVyc0ZvckRhdGFzZXQgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcbiAgY29uc3Qgb3RoZXJGaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+ICF0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhcbiAgICB7Li4uc3RhdGUsIGRhdGFzZXRzLCBsYXllcnM6IG5leHRMYXllcnN9LFxuICAgIGZpbHRlcnNGb3JEYXRhc2V0XG4gICk7XG5cbiAgY29uc3QgbmV4dEZpbHRlcnMgPSBbLi4ub3RoZXJGaWx0ZXJzLCAuLi52YWxpZGF0ZWRdO1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgbmV4dEZpbHRlcnMsXG4gICAgbmV4dExheWVyc1xuICApO1xuXG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICAgIGxheWVyczogbmV4dExheWVycyxcbiAgICBsYXllckRhdGE6IG5leHRMYXllckRhdGEsXG4gICAgbGF5ZXJPcmRlcjogbmV4dExheWVyT3JkZXIsXG4gICAgc3BsaXRNYXBzOiBuZXh0U3BsaXRNYXBzLFxuICAgIGZpbHRlcnM6IG5leHRGaWx0ZXJzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbi8qKlxuICogQXBwbHkgYSBmaW5pc2hlZCByZW1vdGUgcmVmcmVzaDoga2VlcCBsYXllcnMsIHJlLXJ1biBmaWx0ZXJzIGFuZCBsYXllciBkYXRhLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcmVzdWx0fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG1ldGFkYXRhUGF0Y2ggPSB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkLFxuICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgLy8gQWx3YXlzIHdyaXRlIHZhbGlkYXRvcnMuIEEgMjAwIHRoYXQgb21pdHMgdGhlbSBtdXN0IG5vdCBrZWVwIHRoZSBwcmV2aW91c1xuICAgIC8vIEVUYWcgb3IgYSBsYXRlciAzMDQgY2FuIHNraXAgYSBib2R5IHdlIG5vIGxvbmdlciBoYXZlLlxuICAgIGV0YWc6IHJlc3VsdC5ldGFnLFxuICAgIGxhc3RNb2RpZmllZDogcmVzdWx0Lmxhc3RNb2RpZmllZCxcbiAgICAuLi4odHlwZW9mIHJlc3VsdC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiByZXN1bHQuc2l6ZX0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBzY2hlbWFVbmNoYW5nZWQgPSBmaWVsZE5hbWVzRXF1YWwoZGF0YXNldC5maWVsZHMsIHJlc3VsdC5kYXRhPy5maWVsZHMpO1xuXG4gIC8vIEFwcGx5IHRoZSBzbmFwc2hvdCB0byB0aGUgdGFibGUgY3VycmVudGx5IGluIHRoZSBzdG9yZS4gUHJvZ3Jlc3MgbWF5IGhhdmVcbiAgLy8gY29waWVkIGl0IG9mZiB0aGUgb2JqZWN0IHRoYXQgc3RhcnRlZCB0aGUgZmV0Y2g7IHRoZSB0YXNrIG5ldmVyIG11dGF0ZXMgaXQuXG4gIGlmICghcmVzdWx0Lm5vdE1vZGlmaWVkICYmIHJlc3VsdC5kYXRhKSB7XG4gICAgLy8gS2VwbGVyVGFibGUudXBkYXRlIGlzIGFzeW5jIHNvIER1Y2tEQiBjYW4gYXdhaXQgQXJyb3cgY29udmVyc2lvbi4gVGhlXG4gICAgLy8gQ1NWL0dlb0pTT04gcGF0aCAoYW5kIEtlcGxlclRhYmxlLmltcG9ydERhdGEpIHJ1biBzeW5jaHJvbm91c2x5IGJlZm9yZVxuICAgIC8vIHRoZSBmaXJzdCBhd2FpdCwgc28gdGhlIHN0b3JlIHRhYmxlIGlzIHVwZGF0ZWQgYmVmb3JlIHdlIGNvcHkgaXQgYmVsb3cuXG4gICAgdm9pZCBkYXRhc2V0LnVwZGF0ZShyZXN1bHQuZGF0YSk7XG4gIH1cblxuICBjb25zdCByZWZyZXNoZWQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCBtZXRhZGF0YVBhdGNoKTtcbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IHJlZnJlc2hlZFxuICB9O1xuXG4gIGlmIChyZXN1bHQubm90TW9kaWZpZWQgfHwgIXJlc3VsdC5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHNcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFzY2hlbWFVbmNoYW5nZWQpIHtcbiAgICByZXR1cm4gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKHN0YXRlLCBkYXRhSWQsIGRhdGFzZXRzKTtcbiAgfVxuXG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuZnVuY3Rpb24gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoc3RhdGU6IFZpc1N0YXRlLCBkYXRhSWQ6IHN0cmluZyk6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuZnVuY3Rpb24gaXNEYXRhc2V0Um93TGlzdChcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdXG4pOiByb3dzIGlzIFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocm93cykgfHwgIXJvd3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93cyk7XG4gIH1cbiAgLy8gQSBzaW5nbGUgY29sdW1uLW9yZGVyZWQgcm93IGlzIGFuIGFycmF5IG9mIHByaW1pdGl2ZXM7IGEgbGlzdCBvZiByb3dzIGlzXG4gIC8vIGFuIGFycmF5IG9mIGFycmF5cyBvciBhbiBhcnJheSBvZiBmaWVsZC1uYW1lIHJlY29yZHMuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3NbMF0pIHx8IGlzUGxhaW5PYmplY3Qocm93c1swXSk7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXlSb3cocm93OiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdywgZmllbGRzOiBGaWVsZFtdKTogYW55W10gfCBudWxsIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocm93KSkge1xuICAgIHJldHVybiByb3cubGVuZ3RoID09PSBmaWVsZHMubGVuZ3RoID8gcm93IDogbnVsbDtcbiAgfVxuICBpZiAoaXNQbGFpbk9iamVjdChyb3cpKSB7XG4gICAgY29uc3QgcmVjb3JkID0gcm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiBmaWVsZHMubWFwKGZpZWxkID0+XG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVjb3JkLCBmaWVsZC5uYW1lKSA/IHJlY29yZFtmaWVsZC5uYW1lXSA6IG51bGxcbiAgICApO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhc2V0Um93cyhcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdLFxuICBmaWVsZHM6IEZpZWxkW11cbik6IGFueVtdW10gfCBudWxsIHtcbiAgaWYgKCFmaWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbGlzdCA9IGlzRGF0YXNldFJvd0xpc3Qocm93cykgPyByb3dzIDogW3Jvd3NdO1xuICBpZiAoIWxpc3QubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZDogYW55W11bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcnJheVJvdyA9IHRvQXJyYXlSb3cobGlzdFtpXSwgZmllbGRzKTtcbiAgICBpZiAoIWFycmF5Um93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbm9ybWFsaXplZC5wdXNoKGFycmF5Um93KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBBcHBlbmQgb3IgdXBzZXJ0IHJvd3Mgb24gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LiBLZWVwcyBsYXllcnMgYW5kIHJlLXJ1bnMgZmlsdGVycy5cbiAqIEFycm93L0R1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkIChJTlNFUlQgLyBjb25jYXQgbm90IGltcGxlbWVudGVkKS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb0RhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd3MsIG9wdGlvbnN9OiBWaXNTdGF0ZUFjdGlvbnMuQWRkVG9EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZURhdGFzZXRSb3dzKHJvd3MsIGRhdGFzZXQuZmllbGRzKTtcbiAgaWYgKCFub3JtYWxpemVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgYXBwbGllZCA9IG9wdGlvbnM/LnVwc2VydEJ5XG4gICAgPyBkYXRhc2V0LnVwc2VydFJvd3Mobm9ybWFsaXplZCwgb3B0aW9ucy51cHNlcnRCeSlcbiAgICA6IGRhdGFzZXQuYXBwZW5kUm93cyhub3JtYWxpemVkKTtcbiAgaWYgKCFhcHBsaWVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIERlbGV0ZSByb3dzIGJ5IGluZGV4IG9yIGJ5IGZpZWxkIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgZGF0YXNldC5cbiAqIEtlZXBzIGxheWVycy4gQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd0luZGV4ZXMsIGJ5RmllbGR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBpbmRleGVzID0gYnlGaWVsZFxuICAgID8gZGF0YXNldC5maW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMoYnlGaWVsZC5maWVsZCwgdG9BcnJheShieUZpZWxkLnZhbHVlcykpXG4gICAgOiB0b0FycmF5KHJvd0luZGV4ZXMgPz8gW10pO1xuICBpZiAoIWluZGV4ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghZGF0YXNldC5yZW1vdmVSb3dzKGluZGV4ZXMpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIFJlY29yZCBhIGZhaWxlZCByZW1vdGUgZGF0YXNldCByZWZyZXNoIHdpdGhvdXQgZHJvcHBpbmcgZXhpc3Rpbmcgcm93cy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBlcnJvcn06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgICAgIHJlZnJlc2hTdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIHJlZnJlc2hFcnJvcjogZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSxcbiAgICAgICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgICAgIH0pXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpc0RhdGFVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGRhdGFzZXRzIGNhbiBiZSBhIHNpbmdsZSBkYXRhIGVudHJpZXMgb3IgYW4gYXJyYXkgb2YgbXVsdGlwbGUgZGF0YSBlbnRyaWVzXG4gIGNvbnN0IHtjb25maWcsIG9wdGlvbnN9ID0gYWN0aW9uO1xuXG4gIC8vIGFwcGx5IGNvbmZpZyBpZiBwYXNzZWQgZnJvbSBhY3Rpb25cbiAgLy8gVE9ETzogd2UgZG9uJ3QgaGFuZGxlIGFzeW5jIG1lcmdlcnMgaGVyZSB5ZXRcbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IGNvbmZpZ1xuICAgID8gcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtcbiAgICAgICAgcGF5bG9hZDoge2NvbmZpZywgb3B0aW9uc31cbiAgICAgIH0pXG4gICAgOiBzdGF0ZTtcblxuICBjb25zdCBkYXRhc2V0cyA9IHRvQXJyYXkoYWN0aW9uLmRhdGFzZXRzKTtcbiAgaWYgKCFkYXRhc2V0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdXBkYXRlZFN0YXRlO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlRGF0YXNldFRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG5cbiAgZGF0YXNldHMuZm9yRWFjaCgoe2luZm8gPSB7fSwgLi4ucmVzdH0sIGRhdGFzZXRJbmRleCkgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKHtpbmZvLCAuLi5yZXN0fSwgc3RhdGUuZGF0YXNldHMpO1xuICAgIGlmICh0YXNrKSB7XG4gICAgICBjcmVhdGVEYXRhc2V0VGFza3MucHVzaCh0YXNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldCBkdWUgdG8gZGF0YSB2ZXJpZmljYXRpb24gZXJyb3JzYCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWZhaWxlZC0ke2RhdGFzZXRJbmRleH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGRhdGFzZXRzQWxsU2V0dGxlZFRhc2sgPSBjcmVhdGVEYXRhc2V0VGFza3MubGVuZ3RoXG4gICAgPyBUYXNrLmFsbFNldHRsZWQoY3JlYXRlRGF0YXNldFRhc2tzKS5tYXAocmVzdWx0cyA9PlxuICAgICAgICBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzcyh7cmVzdWx0cywgYWRkVG9NYXBPcHRpb25zOiBvcHRpb25zfSlcbiAgICAgIClcbiAgICA6IG51bGw7XG5cbiAgaWYgKGRhdGFzZXRzQWxsU2V0dGxlZFRhc2spIHtcbiAgICB1cGRhdGVkU3RhdGUgPSBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IDEsIHR5cGU6ICcnfSkpO1xuICB9XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgW1xuICAgIC4uLihkYXRhc2V0c0FsbFNldHRsZWRUYXNrID8gW2RhdGFzZXRzQWxsU2V0dGxlZFRhc2tdIDogW10pLFxuICAgIC4uLm5vdGlmaWNhdGlvblRhc2tzXG4gIF0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFBheWxvYWRBY3Rpb248Q3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkPlxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7cmVzdWx0cywgYWRkVG9NYXBPcHRpb25zfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBub3RpZmljYXRpb25UYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gcmVzdWx0cy5yZWR1Y2UoKGFjY3UsIHJlc3VsdCwgaWR4KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBbZGF0YXNldC5pZF06IGRhdGFzZXR9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IGVycm9yIG5vdGlmaWNhdGlvbiBvbiBVSVxuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0soKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBEYXRhc2V0IGVycm9yOiBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQ6XG4gICAgICAgICAgICAgICR7cmVzdWx0LnJlYXNvbiB8fCAocmVzdWx0IGFzIGFueSkudmFsdWV9YCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWNyZWF0ZS1mYWlsZWQtJHtpZHh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG4gIH0sIHt9IGFzIERhdGFzZXRzKTtcbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGUsIG5ld0RhdGFFbnRyaWVzKVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBsYXllck1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+IG0ud2FpdEZvckxheWVyRGF0YSk7XG4gIGNvbnN0IGRhdGFzZXRNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiAhbGF5ZXJNZXJnZXJzLmluY2x1ZGVzKG0pKTtcblxuICBjb25zdCBuZXdEYXRhSWRzID0gT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpO1xuICBjb25zdCBwb3N0TWVyZ2VyUGF5bG9hZCA9IHtcbiAgICBuZXdEYXRhSWRzLFxuICAgIG9wdGlvbnM6IGFkZFRvTWFwT3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkU3RhdGUgPSBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgbWVyZ2VyczogZGF0YXNldE1lcmdlcnMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogLTF9KSksXG4gICAgbm90aWZpY2F0aW9uVGFza3NcbiAgKTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1lcmdlcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG1lcmdlcnM6IE1lcmdlcjxhbnk+W107XG4gICAgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHttZXJnZXJzLCBwb3N0TWVyZ2VyUGF5bG9hZH0gPSBhY3Rpb247XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IG1lcmdlU3RhdGVSZXN1bHQgPSBtZXJnZVN0YXRlRnJvbU1lcmdlcnMoXG4gICAgc3RhdGUsXG4gICAge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICAuLi5zdGF0ZS5pbml0aWFsU3RhdGVcbiAgICB9LFxuICAgIG1lcmdlcnMsXG4gICAgLy8gbmV3RGF0YUlkcyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICApO1xuXG4gIC8vIGlmIGFsbCBtZXJnZWQsIGtpY2t1cCBwb3N0IG1lcmdlIHByb2Nlc3NcbiAgLy8gaWYgbm90IHdhaXRcbiAgcmV0dXJuIG1lcmdlU3RhdGVSZXN1bHQuYWxsTWVyZ2VkXG4gICAgPyBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkKVxuICAgIDogbWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZTtcbn1cblxuLyoqIFJlYWRzIGBvcHRpb25zLmxheWVyVmlzQ29uZmlnYCBmcm9tIGFkZC1kYXRhLXRvLW1hcCAoc2VlIGBBZGREYXRhVG9NYXBPcHRpb25zYCkuICovXG5mdW5jdGlvbiBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhcbiAgb3B0aW9uczogUG9zdE1lcmdlclBheWxvYWRbJ29wdGlvbnMnXSB8IHVuZGVmaW5lZFxuKTogUGFydGlhbDxMYXllclZpc0NvbmZpZz4gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wdGlvbnMgfHwgISgnbGF5ZXJWaXNDb25maWcnIGluIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBwYXRjaCA9IChvcHRpb25zIGFzIHtsYXllclZpc0NvbmZpZz86IHVua25vd259KS5sYXllclZpc0NvbmZpZztcbiAgaWYgKHBhdGNoID09IG51bGwgfHwgdHlwZW9mIHBhdGNoICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhdGNoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHBhdGNoIGFzIFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+O1xufVxuXG4vKipcbiAqIFBvbHlnb24gZmlsdGVycyBmb3IgdGhlc2UgbGF5ZXJzIHVzZSBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlIGZyb21cbiAqIGNhbGN1bGF0ZUxheWVyRGF0YS4gT3RoZXIgdHlwZXMgKGxhdC9sbmcgcG9pbnRzLCBIMywgYXJjcykgY2FuIGZpbHRlclxuICogZnJvbSBjb2x1bW5zIG9uIHRoZSBmaXJzdCBwYXNzIGFuZCBtdXN0IG5vdCBiZSByZWNhbGN1bGF0ZWQgaGVyZS5cbiAqL1xuZnVuY3Rpb24gcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGxheWVyLnR5cGUgPT09IExBWUVSX1RZUEVTLmdlb2pzb24gfHwgbGF5ZXIuY29uZmlnPy5jb2x1bW5Nb2RlID09PSAnZ2VvanNvbic7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmZ1bmN0aW9uIHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VkU3RhdGU6IFZpc1N0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtuZXdEYXRhSWRzLCBvcHRpb25zLCBsYXllck1lcmdlcnN9ID0gcG9zdE1lcmdlclBheWxvYWQ7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBtZXJnZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+XG4gICAgZi5kYXRhSWQuZmluZChmRGF0YUlkID0+IG5ld0RhdGFJZHMuaW5jbHVkZXMoZkRhdGFJZCkpXG4gICk7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJlZDogc3RyaW5nW10gPSB1bmlxKFxuICAgIG5ld0ZpbHRlcnMucmVkdWNlKChhY2N1LCBmKSA9PiBbLi4uYWNjdSwgLi4uZi5kYXRhSWRdLCBbXSBhcyBzdHJpbmdbXSlcbiAgKTtcbiAgY29uc3QgZGF0YUVtcHR5ID0gbmV3RGF0YUlkcy5sZW5ndGggPCAxO1xuXG4gIGxldCBuZXdMYXllcnMgPSAhZGF0YUVtcHR5XG4gICAgPyBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gbmV3RGF0YUlkcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGlkKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtpZF06IG1lcmdlZFN0YXRlLmRhdGFzZXRzW2lkXVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZClcbiAgICApO1xuICAgIC8vIGEgbGF5ZXIgYWxyZWFkeSBpbiBhIHBhbmVsIHdhcyBtZXJnZWQgZnJvbSBzcGxpdCBtYXBzLCB3aGljaCBkZWNpZGUgdGhlIHBhbmVscyBzaG93aW5nIGl0XG4gICAgY29uc3QgbGF5ZXJzTm90SW5TcGxpdE1hcHMgPSBuZXdMYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiAhbWVyZ2VkU3RhdGUuc3BsaXRNYXBzLnNvbWUoc20gPT4gbC5pZCBpbiBzbS5sYXllcnMpXG4gICAgKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHtcbiAgICAgIC4uLm1lcmdlZFN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKG1lcmdlZFN0YXRlLnNwbGl0TWFwcywgbGF5ZXJzTm90SW5TcGxpdE1hcHMpXG4gICAgfTtcbiAgfVxuXG4gIG1lcmdlZFN0YXRlID0gbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzKFxuICAgIG1lcmdlZFN0YXRlLFxuICAgIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKG9wdGlvbnMpLFxuICAgIG5ld0RhdGFJZHNcbiAgKTtcblxuICAvLyBpZiBubyB0b29sdGlwcyBtZXJnZWQgYWRkIGRlZmF1bHQgdG9vbHRpcHNcbiAgbmV3RGF0YUlkcy5mb3JFYWNoKGRhdGFJZCA9PiB7XG4gICAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IG1lcmdlZFN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIC8vIGxvYWRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIGZhbHNlIGFuZCB3ZSBkb24ndCB3YW50IHRvIHJ1biBhZGREZWZhdWx0VG9vbHRpcHMgd2hlbiB0b29sdGlwRmllbGRzIGlzIGVtcHR5XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucz8uYXV0b0NyZWF0ZVRvb2x0aXBzICE9PSBmYWxzZSAmJlxuICAgICAgKCFBcnJheS5pc0FycmF5KHRvb2x0aXBGaWVsZHMpIHx8ICF0b29sdGlwRmllbGRzLmxlbmd0aClcbiAgICApIHtcbiAgICAgIC8vIGFkZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgdHJ1ZVxuICAgICAgbWVyZ2VkU3RhdGUgPSBhZGREZWZhdWx0VG9vbHRpcHMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzW2RhdGFJZF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdXBkYXRlZERhdGFzZXRzID0gZGF0YUVtcHR5XG4gICAgPyBPYmplY3Qua2V5cyhtZXJnZWRTdGF0ZS5kYXRhc2V0cylcbiAgICA6IHVuaXEoT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpLmNvbmNhdChkYXRhc2V0RmlsdGVyZWQpKTtcblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG1lcmdlZFN0YXRlLCB1cGRhdGVkRGF0YXNldHMsIHVuZGVmaW5lZCk7XG5cbiAgLy8gUG9seWdvbiBwZXItbGF5ZXIgaW5kZXhlcyBuZWVkIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUsIHdoaWNoIGFyZSBvbmx5XG4gIC8vIHBvcHVsYXRlZCBieSB0aGUgbGF5ZXItZGF0YSBwYXNzIGFib3ZlLiBTa2lwIGRhdGFzZXRzIHdob3NlIHRhcmdldGVkIGxheWVyc1xuICAvLyBhbHJlYWR5IGZpbHRlcmVkIGZyb20gY29sdW1ucyAoZS5nLiBsYXQvbG5nIHBvaW50cykuXG4gIGNvbnN0IHBvbHlnb25GaWx0ZXJzID0gdXBkYXRlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKFxuICAgIGYgPT4gZi50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiBmLmVuYWJsZWQgIT09IGZhbHNlXG4gICk7XG4gIGNvbnN0IHBvbHlnb25NZXRhRGF0YUlkcyA9IHVuaXEoXG4gICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgbGF5ZXIgPT5cbiAgICAgICAgICBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyKSAmJlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJzLnNvbWUoZiA9PiBmLmxheWVySWQ/LmluY2x1ZGVzKGxheWVyLmlkKSlcbiAgICAgIClcbiAgICAgIC5tYXAobGF5ZXIgPT4gbGF5ZXIuY29uZmlnLmRhdGFJZClcbiAgICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpICYmIHVwZGF0ZWREYXRhc2V0cy5pbmNsdWRlcyhpZCkpXG4gICk7XG4gIGlmIChwb2x5Z29uTWV0YURhdGFJZHMubGVuZ3RoKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKFxuICAgICAge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICAgIGRhdGFzZXRzOiBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgICAgICAgIHBvbHlnb25NZXRhRGF0YUlkcyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZGF0YXNldHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmZpbHRlcnMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgICApXG4gICAgICB9LFxuICAgICAgcG9seWdvbk1ldGFEYXRhSWRzXG4gICAgKTtcbiAgfVxuXG4gIC8vIHJlZ2lzdGVyIGxheWVyIGFuaW1hdGlvbiBkb21haW4sXG4gIC8vIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGxheWVyIGRhdGEgaXMgY2FsY3VsYXRlZFxuICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4odXBkYXRlZFN0YXRlKTtcblxuICAvLyB0cnkgdG8gcHJvY2VzcyBsYXllck1lcmdlcnMgYWZ0ZXIgZGF0YXNldCtkYXRhc2V0TWVyZ2Vyc1xuICB1cGRhdGVkU3RhdGUgPVxuICAgIGxheWVyTWVyZ2VycyAmJiBsYXllck1lcmdlcnMubGVuZ3RoID4gMFxuICAgICAgPyBhcHBseU1lcmdlcnNVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwge1xuICAgICAgICAgIG1lcmdlcnM6IGxheWVyTWVyZ2VycyxcbiAgICAgICAgICBwb3N0TWVyZ2VyUGF5bG9hZDogey4uLnBvc3RNZXJnZXJQYXlsb2FkLCBsYXllck1lcmdlcnM6IFtdfVxuICAgICAgICB9KVxuICAgICAgOiB1cGRhdGVkU3RhdGU7XG5cbiAgLy8gY2VudGVyIHRoZSBtYXAgb25jZSB0aGUgZGF0YXNldCBpcyBjcmVhdGVkXG4gIGlmIChuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5jZW50ZXJNYXApIHtcbiAgICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKG5ld0xheWVycyk7XG4gICAgaWYgKGJvdW5kcykge1xuICAgICAgY29uc3QgcGFkZGluZyA9IG9wdGlvbnM/LnBhZGRpbmc7XG4gICAgICBjb25zdCBmaXRCb3VuZHNUYXNrID0gQUNUSU9OX1RBU0tfRklUX0JPVU5EUygpLm1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmaXRNYXBCb3VuZHMoYm91bmRzLCBwYWRkaW5nKTtcbiAgICAgIH0pO1xuICAgICAgdXBkYXRlZFN0YXRlID0gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBmaXRCb3VuZHNUYXNrKTtcbiAgICB9XG4gIH1cblxuICAvLyBuZWVkIHRvIGNlbnRlciBtYXAgaGVyZSBpZiB3ZSBoYXZlIG5ldyBsYXllcnNcbiAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbn1cblxuLyoqXG4gKiBSZW5hbWUgYW4gZXhpc3RpbmcgZGF0YXNldCBpbiBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7bGFiZWw6IGFjdGlvbi5sYWJlbH19KTtcbn1cblxuY29uc3QgQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyA9IFsnbGFiZWwnLCAnY29sb3InLCAnbWV0YWRhdGEnXTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgcHJvcGVydGllcyBiZWZvcmUgdXBkYXRpbmcgdGhlIGRhdGFzZXQuXG4gKiBNYWtlcyBzdXJlIGVhY2ggcHJvcGVydHkgaXMgaW4gdGhlIGFsbG93ZWQgbGlzdFxuICogTWFrZXMgc3VyZSBjb2xvciB2YWx1ZSBpcyBSR0JcbiAqIFBlcmZvcm1zIGRlZXAgbWVyZ2Ugd2hlbiB1cGRhdGluZyBtZXRhZGF0YVxuICovXG5jb25zdCB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyA9IChwcm9wcywgZGF0YXNldCkgPT4ge1xuICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzKS5yZWR1Y2UoKGFjYywgZW50cnkpID0+IHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBlbnRyeTtcbiAgICAvLyBpcyBpdCBhbGxvd2VkID9cbiAgICBpZiAoIUFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBhcmUgYWRkaW5nIGEgY29sb3IgYnV0IGl0IGlzIG5vdCBSR0Igd2UgZG9uJ3QgYWNjZXB0IHRoZSB2YWx1ZVxuICAgIC8vIGluIHRoZSBmdXR1cmUgYXMgd2UgYWRkIG1vcmUgcHJvcHMgd2Ugc2hvdWxkIGNoYW5nZSB0aGlzIGlmIGludG8gYSBzd2l0Y2hcbiAgICBpZiAoa2V5ID09PSAnY29sb3InICYmICFpc1JnYkNvbG9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBkbyB3ZSBuZWVkIGRlZXAgbWVyZ2UgP1xuICAgIHJldHVybiB7Li4uYWNjLCBba2V5XTogaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyBkZWVwbWVyZ2UoZGF0YXNldFtrZXldIHx8IHt9LCB2YWx1ZSkgOiB2YWx1ZX07XG4gIH0sIHt9KTtcblxuICByZXR1cm4gdmFsaWRhdGVkUHJvcHM7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBEYXRhc2V0IHByb3BzIChsYWJlbCwgY29sb3IsIG1ldGEpLiBEbyBub3QgdXNlIHRvIHVwZGF0ZSBkYXRhIG9yIGFueSByZWxhdGVkIHByb3BlcnRpZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgcHJvcHN9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGNvbnN0IGV4aXN0aW5nID0gZGF0YXNldHNbZGF0YUlkXTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzKHByb3BzLCBleGlzdGluZyk7XG4gICAgLy8gIHZhbGlkYXRlIHByb3BzOiBqdXN0IGNvbG9yIGZvciBub3dcbiAgICAvLyAgd2Ugb25seSBhbGxvdyBsYWJlbCwgY29sb3IgYW5kIG1ldGEgdG8gYmUgdXBkYXRlZFxuICAgIC8vIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogUmUtdmFsaWRhdGUgYSBsaXZlIGxheWVyIGFnYWluc3QgYSB0YWJsZSB3aG9zZSBzY2hlbWEganVzdCBjaGFuZ2VkLlxuICpcbiAqIFRoZSBsYXllcidzIGNvbHVtbnMgLyB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgLyB0ZXh0LWxhYmVsIGZpZWxkcyBhcmUgZmlyc3RcbiAqIHJlbWFwcGVkIHRvIHRoZWlyIG5ldyBuYW1lcyAodmlhIGByZW5hbWVzYCkgc28gdGhlIGxheWVyIGZvbGxvd3MgYSByZW5hbWVcbiAqIGluc3RlYWQgb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZCwgdGhlbiByZS12YWxpZGF0ZWQgd2l0aFxuICogYHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhYCDigJQgdGhlIHNhbWUgc2VyaWFsaXplICsgdmFsaWRhdGUgcGF0aCB1c2VkXG4gKiB3aGVuIGEgc2F2ZWQgY29uZmlnIGlzIGxvYWRlZCBhZ2FpbnN0IG5ldyBkYXRhLiBSZXR1cm5zIGBudWxsYCB3aGVuIGFcbiAqIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lICh0aGUgbGF5ZXIgY2FuIG5vIGxvbmdlciBiZSBidWlsdCkuXG4gKi9cbmZ1bmN0aW9uIHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShcbiAgbGF5ZXI6IExheWVyLFxuICByZW5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBuZXdUYWJsZTogS2VwbGVyVGFibGUsXG4gIHN0YXRlOiBWaXNTdGF0ZVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3QgY29uZmlnUGF0Y2g6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCBjb2x1bW5zXG4gIGNvbnN0IGNvbHVtbnNQYXRjaDogUmVjb3JkPHN0cmluZywge3ZhbHVlOiBzdHJpbmcgfCBudWxsOyBmaWVsZElkeDogbnVtYmVyfT4gPSB7fTtcbiAgbGV0IGNvbHVtbnNDaGFuZ2VkID0gZmFsc2U7XG4gIE9iamVjdC5lbnRyaWVzKGxheWVyLmNvbmZpZy5jb2x1bW5zIHx8IHt9KS5mb3JFYWNoKChbY2tleSwgY29sXSkgPT4ge1xuICAgIGlmIChjb2w/LnZhbHVlICYmIHJlbmFtZXNbY29sLnZhbHVlXSkge1xuICAgICAgY29sdW1uc1BhdGNoW2NrZXldID0gey4uLmNvbCwgdmFsdWU6IHJlbmFtZXNbY29sLnZhbHVlXX07XG4gICAgICBjb2x1bW5zQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9KTtcbiAgaWYgKGNvbHVtbnNDaGFuZ2VkKSB7XG4gICAgY29uZmlnUGF0Y2guY29sdW1ucyA9IHsuLi5sYXllci5jb25maWcuY29sdW1ucywgLi4uY29sdW1uc1BhdGNofTtcbiAgfVxuXG4gIC8vIGZvbGxvdyByZW5hbWVkIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAoY29sb3JGaWVsZCwgc2l6ZUZpZWxkLCAuLi4pXG4gIE9iamVjdC52YWx1ZXMobGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZH0pID0+IHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IGxheWVyLmNvbmZpZ1tmaWVsZF07XG4gICAgaWYgKGZpZWxkQ29uZmlnPy5uYW1lICYmIHJlbmFtZXNbZmllbGRDb25maWcubmFtZV0pIHtcbiAgICAgIGNvbmZpZ1BhdGNoW2ZpZWxkXSA9IHsuLi5maWVsZENvbmZpZywgbmFtZTogcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXX07XG4gICAgfVxuICB9KTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCB0ZXh0LWxhYmVsIGZpZWxkc1xuICBpZiAobGF5ZXIuY29uZmlnLnRleHRMYWJlbD8ubGVuZ3RoKSB7XG4gICAgY29uc3QgdGV4dExhYmVsID0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbC5tYXAodGwgPT5cbiAgICAgIHRsLmZpZWxkICYmIHJlbmFtZXNbdGwuZmllbGQubmFtZV1cbiAgICAgICAgPyB7Li4udGwsIGZpZWxkOiB7Li4udGwuZmllbGQsIG5hbWU6IHJlbmFtZXNbdGwuZmllbGQubmFtZV19fVxuICAgICAgICA6IHRsXG4gICAgKTtcbiAgICBpZiAodGV4dExhYmVsLnNvbWUoKHRsLCBpKSA9PiB0bCAhPT0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbFtpXSkpIHtcbiAgICAgIGNvbmZpZ1BhdGNoLnRleHRMYWJlbCA9IHRleHRMYWJlbDtcbiAgICB9XG4gIH1cblxuICAvLyBzaGFsbG93LWNvcHkgdGhlIGxheWVyIHNvIHdlIG5ldmVyIG11dGF0ZSByZWR1eCBzdGF0ZTsgdGhlIGNvcHkga2VlcHMgdGhlXG4gIC8vIHByb3RvdHlwZSBtZXRob2RzIChgdmlzdWFsQ2hhbm5lbHNgIGdldHRlciwgYGlzVmFsaWRUb1NhdmVgKSBzbyBpdFxuICAvLyBzZXJpYWxpemVzIGV4YWN0bHkgbGlrZSBhIGxpdmUgbGF5ZXIuXG4gIGNvbnN0IGxheWVyQ29weSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobGF5ZXIpKSwgbGF5ZXIpO1xuICBpZiAoT2JqZWN0LmtleXMoY29uZmlnUGF0Y2gpLmxlbmd0aCkge1xuICAgIGxheWVyQ29weS5jb25maWcgPSB7Li4ubGF5ZXIuY29uZmlnLCAuLi5jb25maWdQYXRjaH07XG4gIH1cblxuICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICBuZXdUYWJsZSxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgbGF5ZXJDb3B5LFxuICAgIHN0YXRlLnNjaGVtYVxuICApO1xuXG4gIHJldHVybiB2YWxpZGF0ZWQgJiYgdmFsaWRhdGVkLmhhc0FsbENvbHVtbnMoKSA/IHZhbGlkYXRlZCA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGFuIGV4aXN0aW5nIGRhdGFzZXQncyBzY2hlbWEgKGNvbHVtbnMvZmllbGRzKSBpbiBwbGFjZSBhbmQgcmVjb25jaWxlXG4gKiBldmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlZCB0aGUgb2xkIGNvbHVtbnM6IGZpbHRlcnMsIGxheWVycywgdG9vbHRpcCBmaWVsZHMsXG4gKiBwaW5uZWQgY29sdW1ucyBhbmQgc29ydCBzdGF0ZS4gVGhlIGRhdGFzZXQga2VlcHMgaXRzIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhLlxuICpcbiAqIGBhY3Rpb24uZGF0YWAgaXMgdGhlIHNhbWUgc2hhcGUgYEtlcGxlclRhYmxlLmltcG9ydERhdGFgIGFjY2VwdHMgKGB7Y29scyxcbiAqIGZpZWxkcywgYXJyb3dUYWJsZX1gIHdoZW4gcmVwbGFjaW5nIGNvbHVtbnMpLiBgYWN0aW9uLnJlbmFtZXNgIGlzIGFuIG9wdGlvbmFsXG4gKiBvbGQg4oaSIG5ldyBjb2x1bW4tbmFtZSBtYXAgc28gbGF5ZXJzL2ZpbHRlcnMvdG9vbHRpcHMgZm9sbG93IGEgcmVuYW1lIGluc3RlYWRcbiAqIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQuXG4gKlxuICogUmVjb25jaWxpYXRpb24gaXMgbmFtZS1iYXNlZCDigJQgdGhlIHNhbWUgd2F5IGtlcGxlci5nbCBsb2FkcyBhIHNhdmVkIGNvbmZpZ1xuICogYWdhaW5zdCBjaGFuZ2VkIGRhdGEuIEEgbGF5ZXIgd2hvc2UgcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgaXMgcmVtb3ZlZDsgYVxuICogZmlsdGVyIG9uIGEgZ29uZSBjb2x1bW4gaXMgZHJvcHBlZCAob3IgdGhlIGRhdGFzZXQgaXMgc3BsaWNlZCBvdXQgb2YgYSBzeW5jZWRcbiAqIGZpbHRlcik7IHRvb2x0aXAgZmllbGRzIGFyZSByZW1hcHBlZCAvIGRyb3BwZWQuXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIGRhdGEsIHJlbmFtZXMgPSB7fX0gPSBhY3Rpb247XG4gIGNvbnN0IGV4aXN0aW5nID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFleGlzdGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIDEuIHJlYnVpbGQgdGhlIHRhYmxlIHNjaGVtYSBpbiBwbGFjZSAoc2FtZSBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YSlcbiAgY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHt9KTtcbiAgbmV3VGFibGUudXBkYXRlU2NoZW1hKGRhdGEpO1xuXG4gIC8vIFRoZSBkYXRhIGNvbnRhaW5lciBpcyByZWJ1aWx0IHVuc29ydGVkIGFuZCB1bmZpbHRlcmVkOyByZXNldCB0aGUgdGFibGUnc1xuICAvLyB2aWV3IHN0YXRlIHRoYXQgaW5kZXhlcyBpbnRvIHRoZSBvbGQgY29udGFpbmVyLlxuICBuZXdUYWJsZS5maWx0ZXJlZElkeENQVSA9IG5ld1RhYmxlLmFsbEluZGV4ZXM7XG4gIG5ld1RhYmxlLmZpbHRlclJlY29yZENQVSA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydENvbHVtbiA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydE9yZGVyID0gbnVsbDtcbiAgbmV3VGFibGUucGlubmVkQ29sdW1ucyA9IChleGlzdGluZy5waW5uZWRDb2x1bW5zIHx8IFtdKVxuICAgIC5tYXAobmFtZSA9PiByZW5hbWVzW25hbWVdID8/IG5hbWUpXG4gICAgLmZpbHRlcihuYW1lID0+IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5hbWUpID4gLTEpO1xuXG4gIGNvbnN0IG5ld0ZpZWxkc0J5TmFtZSA9IG5ldyBTZXQobmV3VGFibGUuZmllbGRzLm1hcChmID0+IGYubmFtZSkpO1xuICBjb25zdCBuZXdEYXRhc2V0cyA9IHsuLi5zdGF0ZS5kYXRhc2V0cywgW2RhdGFJZF06IG5ld1RhYmxlfTtcblxuICAvLyAyLiByZWNvbmNpbGUgZmlsdGVyc1xuICBsZXQgbmV3RmlsdGVycyA9IHN0YXRlLmZpbHRlcnNcbiAgICAubWFwKGZpbHRlciA9PiB7XG4gICAgICBjb25zdCB2aSA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhSWQpO1xuICAgICAgaWYgKHZpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROYW1lID0gZmlsdGVyLm5hbWVbdmldO1xuICAgICAgY29uc3QgbmV3TmFtZSA9IHJlbmFtZXNbb2xkTmFtZV0gPz8gb2xkTmFtZTtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gbmV3VGFibGUuZ2V0Q29sdW1uRmllbGRJZHgobmV3TmFtZSk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA9PT0gLTEpIHtcbiAgICAgICAgLy8gY29sdW1uIGlzIGdvbmU6IGRyb3AgYSBzaW5nbGUtZGF0YXNldCBmaWx0ZXIsIHNwbGljZSBpdCBvdXQgb2YgYSBzeW5jZWQgb25lXG4gICAgICAgIHJldHVybiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZpLCBuZXdEYXRhc2V0cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbHVtbiBwcmVzZW50IChwb3NzaWJseSByZW5hbWVkKTogcmUtcmVzb2x2ZSBuYW1lL2ZpZWxkSWR4L2RvbWFpblxuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShmaWx0ZXIsIG5ld0RhdGFzZXRzLCBkYXRhSWQsIG5ld05hbWUsIHZpLCB7XG4gICAgICAgIG1lcmdlRG9tYWluOiB2aSA+IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCF1cGRhdGVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBicnVzaCBmaWx0ZXJzIGNhcnJ5IGEgc2Vjb25kIHktYXhpcyBmaWVsZDsgZm9sbG93IGEgcmVuYW1lIHRoZXJlIHRvb1xuICAgICAgY29uc3QgeUF4aXMgPVxuICAgICAgICB1cGRhdGVkLnlBeGlzPy5uYW1lICYmXG4gICAgICAgIChyZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV1cbiAgICAgICAgICA/IHsuLi51cGRhdGVkLnlBeGlzLCBuYW1lOiByZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV19XG4gICAgICAgICAgOiBuZXdGaWVsZHNCeU5hbWUuaGFzKHVwZGF0ZWQueUF4aXMubmFtZSlcbiAgICAgICAgICA/IHVwZGF0ZWQueUF4aXNcbiAgICAgICAgICA6IG51bGwpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi51cGRhdGVkLFxuICAgICAgICB5QXhpcyxcbiAgICAgICAgLy8gY2xhbXAgdGhlIHVzZXIncyBwcmV2aW91cyBzZWxlY3Rpb24gaW50byB0aGUgbmV3IGRvbWFpbiBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHJlc2V0dGluZyBpdCB0byB0aGUgZnVsbCByYW5nZVxuICAgICAgICB2YWx1ZTogYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihmaWx0ZXIudmFsdWUsIHVwZGF0ZWQpXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKSBhcyBGaWx0ZXJbXTtcblxuICAvLyByZWFzc2lnbiBHUFUgY2hhbm5lbHMgbm93IHRoYXQgdGhlIGZpbHRlciBsaXN0IGlzIHNldHRsZWRcbiAgbmV3RmlsdGVycyA9IG5ld0ZpbHRlcnMubWFwKGZpbHRlciA9PlxuICAgIGZpbHRlci5ncHUgPyBhc3NpZ25HcHVDaGFubmVsKHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBuZXdGaWx0ZXJzKSwgbmV3RmlsdGVycykgOiBmaWx0ZXJcbiAgKTtcblxuICAvLyAzLiByZWJ1aWxkIHRoZSB0YWJsZSdzIGZpbHRlciBzdGF0ZSAoZ3B1RmlsdGVyIC8gZmlsdGVyUmVjb3JkIC8gZmlsdGVyZWRJbmRleClcbiAgbmV3VGFibGUuZmlsdGVyVGFibGUoXG4gICAgbmV3RmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhSWQpLFxuICAgIHt9XG4gICk7XG5cbiAgLy8gNC4gcmVjb25jaWxlIGxheWVyc1xuICBjb25zdCBsYXllcnNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gc3RhdGUubGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH1cbiAgICBjb25zdCByZWNvbmNpbGVkID0gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKGxheWVyLCByZW5hbWVzLCBuZXdUYWJsZSwgc3RhdGUpO1xuICAgIGlmIChyZWNvbmNpbGVkKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlZDtcbiAgICB9XG4gICAgbGF5ZXJzVG9SZW1vdmUucHVzaChsYXllci5pZCk7XG4gICAgcmV0dXJuIGxheWVyOyAvLyBwbGFjZWhvbGRlciwgZHJvcHBlZCB2aWEgcmVtb3ZlTGF5ZXJVcGRhdGVyIGJlbG93XG4gIH0pO1xuXG4gIC8vIDUuIHJlY29uY2lsZSB0b29sdGlwIGZpZWxkc1RvU2hvd1xuICBsZXQgaW50ZXJhY3Rpb25Db25maWcgPSBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZztcbiAgY29uc3QgdG9vbHRpcCA9IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwO1xuICBjb25zdCBmaWVsZHNUb1Nob3cgPSB0b29sdGlwPy5jb25maWc/LmZpZWxkc1RvU2hvdz8uW2RhdGFJZF07XG4gIGlmIChmaWVsZHNUb1Nob3cpIHtcbiAgICBjb25zdCBuZXh0RmllbGRzVG9TaG93ID0gZmllbGRzVG9TaG93LmZsYXRNYXAoZiA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gcmVuYW1lc1tmLm5hbWVdID8/IGYubmFtZTtcbiAgICAgIHJldHVybiBuZXdGaWVsZHNCeU5hbWUuaGFzKG5hbWUpID8gW3suLi5mLCBuYW1lfV0gOiBbXTtcbiAgICB9KTtcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi50b29sdGlwLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAuLi50b29sdGlwLmNvbmZpZyxcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHsuLi50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csIFtkYXRhSWRdOiBuZXh0RmllbGRzVG9TaG93fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG5ld0RhdGFzZXRzLFxuICAgIGZpbHRlcnM6IG5ld0ZpbHRlcnMsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICAvLyA2LiBkcm9wIGxheWVycyB0aGF0IGxvc3QgdGhlaXIgcmVxdWlyZWQgY29sdW1uc1xuICBuZXh0U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIG5leHRTdGF0ZSk7XG5cbiAgLy8gNy4gcmVjb21wdXRlIGxheWVyIGRvbWFpbnMgKyBkYXRhIGZvciB0aGUgdXBkYXRlZCBkYXRhc2V0XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIGRhdGFJZCk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgY29tcGFuaW9uRmlsZXMgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgY29uc3QgZmlsZXNUb0xvYWQgPSBnZXRGaWxlc1RvUGFyc2UoY29tcGFuaW9uRmlsZXMpO1xuICBpZiAoIWZpbGVzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBmaWxlc1RvTG9hZC5yZWR1Y2UoXG4gICAgKGFjY3UsIGYsIGkpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmLCBpKSkoYWNjdSksXG4gICAge31cbiAgKTtcblxuICBjb25zdCBmaWxlTG9hZGluZyA9IHtcbiAgICBmaWxlQ2FjaGU6IFtdLFxuICAgIGZpbGVzVG9Mb2FkLFxuICAgIGNvbXBhbmlvbkZpbGVzLFxuICAgIG9uRmluaXNoXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gbWVyZ2VfKHtmaWxlTG9hZGluZ1Byb2dyZXNzLCBmaWxlTG9hZGluZ30pKHN0YXRlKTtcblxuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ0RvbmUnfVxuICB9KTtcblxuICAvLyBzYXZlIHByb2Nlc3NlZCBmaWxlIHRvIGZpbGVDYWNoZVxuICBjb25zdCBzdGF0ZVdpdGhDYWNoZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZUNhY2hlfSkpKHN0YXRlV2l0aFByb2dyZXNzKTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufVxuXG4vLyB3aXRoVGFzazxUPihzdGF0ZTogVCwgdGFzazogYW55KTogVFxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlVXBkYXRlcihzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBbZmlsZSwgLi4ucmVtYWluaW5nRmlsZXNUb0xvYWRdID0gZmlsZXNUb0xvYWQ7XG5cbiAgLy8gc2F2ZSBmaWxlc1RvTG9hZCB0byBzdGF0ZVxuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVzVG9Mb2FkOiByZW1haW5pbmdGaWxlc1RvTG9hZH0pKShzdGF0ZSk7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMCwgbWVzc2FnZTogJ2xvYWRpbmcuLi4nfVxuICB9KTtcblxuICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgZmlsZSxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgbG9hZGVycyxcbiAgICAgIGxvYWRPcHRpb25zLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nID8gbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmNvbXBhbmlvbkZpbGVzIDogdW5kZWZpbmVkXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhcbiAgZmlsZSxcbiAgZmlsZUNhY2hlLFxuICBsb2FkZXJzOiBMb2FkZXJbXSA9IFtdLFxuICBsb2FkT3B0aW9ucyA9IHt9LFxuICBjb21wYW5pb25GaWxlcz86IEZpbGVbXVxuKSB7XG4gIHJldHVybiBMT0FEX0ZJTEVfVEFTSyh7ZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzLCBsb2FkT3B0aW9ucywgY29tcGFuaW9uRmlsZXN9KS5iaW1hcChcbiAgICAvLyBwcmV0dGllciBpZ25vcmVcbiAgICAvLyBzdWNjZXNzXG4gICAgZ2VuID0+XG4gICAgICBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICBvbkZpbmlzaDogcmVzdWx0ID0+XG4gICAgICAgICAgcHJvY2Vzc0ZpbGVDb250ZW50KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVDYWNoZVxuICAgICAgICAgIH0pXG4gICAgICB9KSxcblxuICAgIC8vIGVycm9yXG4gICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlLm5hbWUsIGVycilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29udGVudCwgZmlsZUNhY2hlfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdwcm9jZXNzaW5nLi4uJ31cbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIFBST0NFU1NfRklMRV9EQVRBKHtjb250ZW50LCBmaWxlQ2FjaGV9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSwgZmlsZUNhY2hlOiByZXN1bHR9KSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoY29udGVudC5maWxlTmFtZSwgZXJyKVxuICAgIClcbiAgKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJvZ3Jlc3MocHJldlByb2dyZXNzID0ge30sIHByb2dyZXNzKSB7XG4gIC8vIFRoaXMgaGFwcGVucyB3aGVuIHJlY2VpdmluZyBxdWVyeSBtZXRhZGF0YSBvciBvdGhlciBjYXNlcyB3ZSBkb24ndFxuICAvLyBoYXZlIGFuIHVwZGF0ZSBmb3IgdGhlIHVzZXIuXG4gIGlmICghcHJvZ3Jlc3MgfHwgIXByb2dyZXNzLnBlcmNlbnQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBlcmNlbnQ6IHByb2dyZXNzLnBlcmNlbnRcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIGNhbGxlZCB3aXRoIHBheWxvYWQgPSBBc3luY0dlbmVyYXRvcjw/Pz8+XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbmV4dEZpbGVCYXRjaFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtnZW4sIGZpbGVOYW1lLCBwcm9ncmVzcywgYWNjdW11bGF0ZWQsIG9uRmluaXNofVxuICB9OiBWaXNTdGF0ZUFjdGlvbnMuTmV4dEZpbGVCYXRjaFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiBwYXJzZVByb2dyZXNzKHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NbZmlsZU5hbWVdLCBwcm9ncmVzcylcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHN0YXRlV2l0aFByb2dyZXNzLCBbXG4gICAgLi4uKGdldEFwcGxpY2F0aW9uQ29uZmlnKCkudXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmcgJiZcbiAgICBmaWxlTmFtZS5lbmRzV2l0aCgnYXJyb3cnKSAmJlxuICAgIGFjY3VtdWxhdGVkPy5kYXRhPy5sZW5ndGggPiAwXG4gICAgICA/IFtcbiAgICAgICAgICAvLyBTa2lwIGNvbXBhY3Rpb24gd2hpbGUgYmF0Y2hlcyBhcmUgc3RpbGwgYXJyaXZpbmcuIFRoZSBjb21wbGV0ZWRcbiAgICAgICAgICAvLyBmaWxlIGlzIGNvbXBhY3RlZCBvbmNlIGluIHByb2Nlc3NGaWxlQ29udGVudC5cbiAgICAgICAgICBQUk9DRVNTX0ZJTEVfREFUQSh7XG4gICAgICAgICAgICBjb250ZW50OiB7Li4uYWNjdW11bGF0ZWQsIHNraXBBcnJvd0NvbXBhY3Q6IHRydWV9LFxuICAgICAgICAgICAgZmlsZUNhY2hlOiBbXVxuICAgICAgICAgIH0pLmJpbWFwKFxuICAgICAgICAgICAgcmVzdWx0ID0+IGxvYWRGaWxlc1N1Y2Nlc3MocmVzdWx0KSxcbiAgICAgICAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIDogW10pLFxuICAgIFVOV1JBUF9UQVNLKGdlbi5uZXh0KCkpLmJpbWFwKFxuICAgICAgKHt2YWx1ZSwgZG9uZX0pID0+IHtcbiAgICAgICAgcmV0dXJuIGRvbmVcbiAgICAgICAgICA/IG9uRmluaXNoKGFjY3VtdWxhdGVkKVxuICAgICAgICAgIDogbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgICAgICAgIGdlbixcbiAgICAgICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgICAgIHByb2dyZXNzOiB2YWx1ZS5wcm9ncmVzcyxcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZWQ6IHZhbHVlLFxuICAgICAgICAgICAgICBvbkZpbmlzaFxuICAgICAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgIClcbiAgXSk7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbG9hZGluZyBmaWxlIGVycm9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzRXJyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXJyb3IsIGZpbGVOYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc0VyclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gdXBkYXRlIHVpIHdpdGggZXJyb3IgbWVzc2FnZVxuICBDb25zb2xlLndhcm4oZXJyb3IpO1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlc1RvTG9hZCwgb25GaW5pc2gsIGZpbGVDYWNoZX0gPSBzdGF0ZS5maWxlTG9hZGluZztcblxuICBjb25zdCBuZXh0U3RhdGUgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7ZXJyb3J9XG4gIH0pO1xuXG4gIC8vIGtpY2sgb2ZmIG5leHQgZmlsZSBvciBmaW5pc2hcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIG5leHRTdGF0ZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59O1xuXG4vKipcbiAqIFdoZW4gc2VsZWN0IGRhdGFzZXQgZm9yIGV4cG9ydCwgYXBwbHkgY3B1IGZpbHRlciB0byBzZWxlY3RlZCBkYXRhc2V0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYXBwbHlDUFVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlDUFVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFwcGx5IGNwdUZpbHRlclxuICBjb25zdCBkYXRhSWRzID0gdG9BcnJheShkYXRhSWQpO1xuXG4gIHJldHVybiBkYXRhSWRzLnJlZHVjZSgoYWNjdSwgaWQpID0+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+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgaXNMb2FkaW5nU3RhdHM6IGZhbHNlfSA6IGZcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcbiAgcmV0dXJuIHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHZpc2libGU6ICFzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGVkaXRvciBza2V0Y2ggZmVhdHVyZXMgaW50byBhIEdlb0pTT04gZGF0YXNldC9sYXllciBhbmQgY2xlYXIgdGhlIHNrZXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBfYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmVhdHVyZXMgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXM7XG4gIGlmICghZmVhdHVyZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGRhdGE7XG4gIHRyeSB7XG4gICAgZGF0YSA9IHByb2Nlc3NHZW9qc29uKGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbihmZWF0dXJlcykpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBjb252ZXJ0IGRyYXduIGdlb21ldHJ5IHRvIGEgbGF5ZXI6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdjb252ZXJ0LWVkaXRvci1mZWF0dXJlcydcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFyZWRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCBsYWJlbElkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTApICsgMTA7XG5cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKGNsZWFyZWRTdGF0ZSwge1xuICAgIGRhdGFzZXRzOiB7XG4gICAgICBpbmZvOiB7XG4gICAgICAgIGlkOiBgZHJhd24tZ2VvbWV0cnktJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYERyYXduIEdlb21ldHJ5ICR7bGFiZWxJZH1gXG4gICAgICB9LFxuICAgICAgZGF0YVxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICAgICAgY2VudGVyTWFwOiBmYWxzZSxcbiAgICAgIGF1dG9DcmVhdGVMYXllcnM6IHRydWVcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIENvcHkgaW4tbWVtb3J5IHJvd3MgKG9yIGxvYWRlZCB2ZWN0b3ItdGlsZSBmZWF0dXJlcykgaW5zaWRlIHRoZSBzZWxlY3RlZFxuICogRHJhdyBvbiBNYXAgcG9seWdvbiBpbnRvIGEgbmV3IGRhdGFzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5FeHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmZWF0dXJlID0gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBjb25zdCBkYXRhSWQgPSBsYXllcj8uY29uZmlnLmRhdGFJZDtcbiAgbGV0IGRhdGFzZXQgPSBkYXRhSWQgPyBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIDogbnVsbDtcblxuICBpZiAoIWxheWVyIHx8ICFkYXRhc2V0IHx8ICFkYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBHUFUgcmFuZ2UvdGltZSBmaWx0ZXJzIGFyZSBub3QgcmVmbGVjdGVkIGluIGZpbHRlcmVkSW5kZXg7IGV2YWx1YXRlIHRoZW0gb24gQ1BVXG4gIC8vIHRoZSBzYW1lIHdheSBleHBvcnQgZGF0YSBkb2VzLCB0aGVuIGNsaXAgdGhlIHJlc3VsdCB0byB0aGUgZHJhd2luZy5cbiAgaWYgKCFpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpKSB7XG4gICAgc3RhdGUgPSBmaWx0ZXJEYXRhc2V0Q1BVKHN0YXRlLCBkYXRhSWQpO1xuICAgIGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICAgIGlmICghZGF0YXNldCkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfVxuXG4gIGxldCBleHRyYWN0ZWQ7XG4gIHRyeSB7XG4gICAgZXh0cmFjdGVkID0gZXh0cmFjdFJvd3NJbnNpZGVGZWF0dXJlKHtsYXllciwgZGF0YXNldCwgZmVhdHVyZX0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBleHRyYWN0IGRhdGE6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaWYgKCFleHRyYWN0ZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoIWV4dHJhY3RlZC5yb3dDb3VudCkge1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyKGxheWVyKVxuICAgICAgICAgICAgICA/ICdObyBsb2FkZWQgdmVjdG9yIHRpbGUgZmVhdHVyZXMgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJ1xuICAgICAgICAgICAgICA6ICdObyByb3dzIGZvdW5kIGluc2lkZSB0aGUgc2VsZWN0ZWQgZHJhd2luZycsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUtZW1wdHknXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID1cbiAgICAgIGV4dHJhY3RlZC5raW5kID09PSAnZ2VvanNvbidcbiAgICAgICAgPyBwcm9jZXNzR2VvanNvbih7XG4gICAgICAgICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICAgICAgZmVhdHVyZXM6IGV4dHJhY3RlZC5mZWF0dXJlc1xuICAgICAgICAgIH0pXG4gICAgICAgIDoge2ZpZWxkczogZXh0cmFjdGVkLmZpZWxkcywgcm93czogZXh0cmFjdGVkLnJvd3N9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBleHRyYWN0IGRhdGE6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKHN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBleHRyYWN0LSR7Z2VuZXJhdGVIYXNoSWQoNil9YCxcbiAgICAgICAgbGFiZWw6IGBFeHRyYWN0ZWQgJHtkYXRhc2V0LmxhYmVsfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIFdNUyBmZWF0dXJlIGluZm8gYW5kIHBpbiB0b29sdGlwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3bXNGZWF0dXJlSW5mb1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLldNU0ZlYXR1cmVJbmZvQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlSW5mbywgY29vcmRpbmF0ZX0gPSBhY3Rpb247XG4gIGlmICghbGF5ZXIpIHtcbiAgICBjb25zb2xlLndhcm4oYFdNUyBmZWF0dXJlIGluZm8gbGF5ZXIgZG9lc24ndCBleGlzdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIGNsaWNrZWQgb2JqZWN0IHNpbWlsYXIgdG8gbGF5ZXJDbGlja1VwZGF0ZXIgdG8gcGluIHRoZSB0b29sdGlwXG4gIGNvbnN0IGNsaWNrZWQgPSBmZWF0dXJlSW5mb1xuICAgID8ge1xuICAgICAgICBwaWNrZWQ6IHRydWUsXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgIHdtc0ZlYXR1cmVJbmZvOiBmZWF0dXJlSW5mb1xuICAgICAgICB9LFxuICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlIHx8IFswLCAwXSxcbiAgICAgICAgbGF5ZXI6IHtcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgaWR4OiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXIuaWQpLFxuICAgICAgICAgICAgaWQ6IGxheWVyLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZFxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHg6IGZpbHRlcklkeCwgZW5hYmxlID0gZmFsc2V9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG5cbiAgLy8gaWYgd2UgZW5hYmxlIHN5bmMgd2UgYXJlIGdvaW5nIHRvIG1lcmdlIGZpbHRlciBhbmQgYW5pbWF0aW9uQ29uZmlnIGRvbWFpbnMgYW5kIHN0b3JlIGludG8gZmlsdGVyLmRvbWFpblxuICBpZiAoZW5hYmxlKSB7XG4gICAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKG5ld1N0YXRlLmxheWVycyk7XG4gICAgLy8gaWYgbm8gYW5pbWF0YWJsZUxheWVycyBhcmUgcHJlc2VudCB3ZSBzaW1wbHkgcmV0dXJuXG4gICAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKGFuaW1hdGFibGVMYXllcnMpO1xuICAgIGNvbnN0IGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciA9IEJvb2xlYW4oaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGgpO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhbZmlsdGVyLmRvbWFpbiwgbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbl0pO1xuXG4gICAgLy8gd2Ugb25seSB1cGRhdGUgYW5pbWF0aW9uV2luZG93IGlmIHdlIGhhdmUgaW50ZXJ2YWwgYmFzZWQgYW5pbWF0aW9uIGxheWVycyB3aXRoIGRlZmluZWQgaW50ZXJ2YWxzIGFuZCB0aGUgY3VycmVudCBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvdyBpcyBub3QgaW50ZXJ2YWxcbiAgICBpZiAoaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyKSB7XG4gICAgICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCkge1xuICAgICAgICBuZXdTdGF0ZSA9IHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgICBpZDogZmlsdGVyLmlkLFxuICAgICAgICAgIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgICAgLy8gYWRqdXN0IHRpbWUgZmlsdGVyIGludGVydmFsXG4gICAgICBuZXdGaWx0ZXIgPSBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwobmV3U3RhdGUsIG5ld0ZpbHRlcik7XG5cbiAgICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gYWRqdXN0IHZhbHVlIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oXG4gICAgICBuZXdGaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgID8gW25ld0ZpbHRlckRvbWFpblswXSwgbmV3RmlsdGVyRG9tYWluWzBdXVxuICAgICAgICA6IG5ld0ZpbHRlckRvbWFpbixcbiAgICAgIHsuLi5uZXdGaWx0ZXIsIGRvbWFpbjogbmV3RmlsdGVyRG9tYWlufVxuICAgICk7XG5cbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0ge1xuICAgICAgLi4uKG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXIpLFxuICAgICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IHRydWVcbiAgICB9O1xuXG4gICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgfTtcblxuICAgIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gc2V0IHRoZSBhbmltYXRpb24gY29uZmlnIHZhbHVlIHRvIG1hdGNoIGZpbHRlciB2YWx1ZVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICB2YWx1ZTogbmV3RmlsdGVyLnZhbHVlW25ld0ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGRvbWFpbiBhbmQgc3RlcFxuICBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiBmYWxzZVxuICB9O1xuXG4gIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIC8vIHJlc2V0IHN5bmMgdGltZWxpbmUgbW9kZVxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZFxuICB9KTtcblxuICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIC8vIHJlc2V0IGZpbHRlciB2YWx1ZVxuICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV3RmlsdGVyLmRvbWFpbiwgbmV3RmlsdGVyKTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gIH0pO1xuXG4gIC8vIHJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvXG4gIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgdmFsdWU6IG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW4/LlswXSA/PyBudWxsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLnNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlQWN0aW9uXG4pIHtcbiAgY29uc3Qge2lkOiBmaWx0ZXJJZCwgbW9kZTogc3luY1RpbWVsaW5lTW9kZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPT09IC0xKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBpZiAoIXZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyLCBzeW5jVGltZWxpbmVNb2RlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY1RpbWVsaW5lTW9kZVxuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIHJldHVybiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBmaWx0ZXJJZHgpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSBvZiB0aGUgbG9hZGluZyBpbmRpY2F0b3IuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIHZpc1N0YXRlXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGF5bG9hZCB3aXRoIGNoYW5nZSBvZiBudW1iZXIgb2YgYWN0aXZlIGxvYWRpbmcgYWN0aW9ucy5cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3BheWxvYWQ6IHtjaGFuZ2V9fToge3BheWxvYWQ6IFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkfVxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQge2xvYWRpbmdJbmRpY2F0b3JWYWx1ZX0gPSBzdGF0ZTtcbiAgaWYgKCFsb2FkaW5nSW5kaWNhdG9yVmFsdWUpIHtcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWUgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IE1hdGgubWF4KGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSArIGNoYW5nZSwgMClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgbGF5ZXJUaW1lSW50ZXJ2YWwgPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVEW2ludGVydmFsSW5kZXhdO1xuICAgIGludGVydmFsID0gTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbFtsYXllclRpbWVJbnRlcnZhbF07XG4gIH1cblxuICBpZiAoIWludGVydmFsKSB7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIC8vIGFkanVzdCBmaWx0ZXJcbiAgY29uc3QgdGltZUZvcm1hdCA9IGdldERlZmF1bHRUaW1lRm9ybWF0KGludGVydmFsKTtcbiAgY29uc3QgdXBkYXRlZFBsb3RUeXBlID0gey4uLmZpbHRlci5wbG90VHlwZSwgaW50ZXJ2YWwsIHRpbWVGb3JtYXR9O1xuICBjb25zdCBuZXdGaWx0ZXIgPSB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUoZmlsdGVyLCB1cGRhdGVkUGxvdFR5cGUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3coc3RhdGUsIG5ld0ZpbHRlcik7XG59XG5cbi8vIEZpbmQgZGF0YUlkIGZyb20gYSBzYXZlZCB2aXNTdGF0ZSBwcm9wZXJ0eTpcbi8vIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zLCBsYXllckJsZW5kaW5nLCBvdmVybGF5QmxlbmRpbmcsIHNwbGl0TWFwcywgYW5pbWF0aW9uQ29uZmlnLCBlZGl0b3Jcbi8vIHJlcGxhY2UgaXQgd2l0aCBhbm90aGVyIGRhdGFJZFxuZnVuY3Rpb24gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHZhbHVlOiBhbnksIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCByZXBsYWNlZCA9IHZhbHVlXG4gICAgICAubWFwKHYgPT4gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHYsIGRhdGFJZCwgZGF0YUlkVG9SZXBsYWNlKSlcbiAgICAgIC5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUuZGF0YUlkID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIG90aGVyc1xuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgfTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLmRhdGFJZCkgJiYgdmFsdWUuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAvLyBmaWx0ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IHZhbHVlLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9SZXBsYWNlIDogZCkpXG4gICAgfTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5jb25maWc/LmRhdGFJZCAmJiB2YWx1ZS5jb25maWc/LmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gbGF5ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4udmFsdWUuY29uZmlnLFxuICAgICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgZGF0YUlkKSkge1xuICAgIC8vIGZvciB2YWx1ZSBzYXZlZCBhcyB7W2RhdGFJZF06IHsuLi59fVxuICAgIHJldHVybiB7W2RhdGFJZFRvUmVwbGFjZV06IHZhbHVlW2RhdGFJZF19O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEZpbmQgZGF0YXNldElkcyBkZXJpdmVkIGEgc2F2ZWQgdmlzU3RhdGUgUHJvcGVydHk7XG5mdW5jdGlvbiBmaW5kQ2hpbGREYXRhc2V0SWRzKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IGNoaWxkRGF0YUlkcyA9IHZhbHVlLm1hcChmaW5kQ2hpbGREYXRhc2V0SWRzKS5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gY2hpbGREYXRhSWRzLmxlbmd0aCA/IGNoaWxkRGF0YUlkcyA6IG51bGw7XG4gIH1cblxuICAvLyBjaGlsZCBkYXRhIGlkIHVzdWFsbHkgc3RvcmVzIGluIHRoZSBkZXJpdmVkIGRhdGFzZXQgaW5mb1xuICByZXR1cm4gdmFsdWU/Lm5ld0RhdGFzZXQ/LmluZm8uaWQgfHwgbnVsbDtcbn1cblxuLy8gbW92ZWQgdW5tZXJnZWQgbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnNcbmZ1bmN0aW9uIG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHByb3BWYWx1ZXMsIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSkge1xuICAvLyByZW1vdmUgcHJvcCB2YWx1ZSBmcm9tIHN0YXRlXG4gIC8vIFRPRE86IHNob3VsZCB3ZSBhZGQgcmVtb3ZlIHVwZGF0ZXIgdG8gbWVyZ2VyIGFzIHdlbGw/XG4gIGlmICghcHJvcFZhbHVlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBzdGF0ZVJlbW92ZWQgPVxuICAgIHByb3AgPT09ICdsYXllcnMnXG4gICAgICA/IHByb3BWYWx1ZXMucmVkdWNlKChhY2N1LCBwcm9wVmFsdWUpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWQ6IHByb3BWYWx1ZS5pZH0pLCBzdGF0ZSlcbiAgICAgIDogQXJyYXkuaXNBcnJheShzdGF0ZVtwcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIFtwcm9wXTogc3RhdGVbcHJvcF0uZmlsdGVyKHAgPT4gIXByb3BWYWx1ZXMuZmluZChwcm9wVmFsdWUgPT4gcC5pZCA9PT0gcHJvcFZhbHVlLmlkKSlcbiAgICAgICAgfVxuICAgICAgOiAvLyBpZiBub3QgYXJyYXksIHdlIHdvbid0IHJlbW92ZSBpdCwgcmVtb3ZlIGRhdGFzZXQgc2hvdWxkIGhhbmRsZSBpdFxuICAgICAgICBzdGF0ZTtcblxuICAvLyBtb3ZlIHRvIHN0YXRlVG9CZU1lcmdlZFxuICBjb25zdCB0b0JlTWVyZ2VkID0ge1xuICAgIFt0b01lcmdlUHJvcF06IHNhdmVVbm1lcmdlZFxuICAgICAgPyAvLyBjYWxsIG1lcmdlIHNhdmVVbm1lcmdlZCBtZXRob2RcbiAgICAgICAgc2F2ZVVubWVyZ2VkKHN0YXRlUmVtb3ZlZCwgcHJvcFZhbHVlcylcbiAgICAgIDogLy8gaWYgdG9NZXJnZVByb3AgaXMgYXJhYXksIGFwcGVuZCB0byBpdFxuICAgICAgQXJyYXkuaXNBcnJheShzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyBbLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSwgLi4ucHJvcFZhbHVlc11cbiAgICAgIDogLy8gc2F2ZSBwcm9wVmFsdWVzIHRvIHRvTWVyZ2VcbiAgICAgIGlzT2JqZWN0KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLFxuICAgICAgICAgIC4uLnByb3BWYWx1ZXNcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZVJlbW92ZWQsXG4gICAgLi4udG9CZU1lcmdlZFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRGF0YXNldEFuZERlcHM8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgcmV0dXJuIGNvbXBvc2VfPFQ+KFtcbiAgICBhcHBseV8ocmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSwge2RhdGFJZCwgZGF0YUlkVG9Vc2V9KSxcbiAgICBhcHBseV8ocmVtb3ZlRGF0YXNldFVwZGF0ZXIsIHtkYXRhSWR9KVxuICBdKShzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcmVwbGFjZURhdGFzZXRBbmREZXBzKHN0YXRlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgLy8gbWFrZSBhIGNvcHkgb2YgbGF5ZXJPcmRlciwgYmVjYXVzZSBsYXllciBpZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdCBieSBjYWxsaW5nIHJlbW92ZUxheWVyVXBkYXRlclxuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgLy8gcHJlc2VydmUgZGF0YXNldCBvcmRlclxuICBuZXh0U3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIgPSBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cykubWFwKGQgPT5cbiAgICBkID09PSBkYXRhSWQgPyBkYXRhSWRUb1VzZSA6IGRcbiAgKTtcblxuICAvLyBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgaWYgKG5leHRTdGF0ZS5sYXllclRvQmVNZXJnZWQ/Lmxlbmd0aCkge1xuICAgIC8vIGNvcHkgc3BsaXQgbWFwcyB0byBiZSBtZXJnZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZXNldCBpbiByZW1vdmUgbGF5ZXIuXG4gICAgLy8gS2VlcCB0aGUgb25lcyBvZiBhIGRhdGFzZXQgcmVwbGFjZWQgYSBtb21lbnQgZWFybGllciBhbmQgbm90IG1lcmdlZCBiYWNrIHlldDpcbiAgICAvLyBpdHMgbGF5ZXJzIGFyZSBubyBsb25nZXIgaW4gdGhlIGN1cnJlbnQgc3BsaXQgbWFwcy5cbiAgICBuZXh0U3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCA9IGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4KFxuICAgICAgc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCxcbiAgICAgIHNlcmlhbGl6ZWRTdGF0ZT8uc3BsaXRNYXBzID8/IFtdXG4gICAgKTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIC8vIE9ubHkgd2hlbiB0aGlzIGRhdGFzZXQgaGFkIGl0ZW1zIG9mIGl0cyBvd24gdG8gcGFyay4gVGhlIHRvQmVNZXJnZWQgbGlzdFxuICAgICAgICAvLyBjYW4gc3RpbGwgaG9sZCBhbm90aGVyIGRhdGFzZXQncyBpdGVtcywgcmVwbGFjZWQgYSBtb21lbnQgZWFybGllciBhbmRcbiAgICAgICAgLy8gbm90IG1lcmdlZCBiYWNrIHlldDsgb3ZlcndyaXRpbmcgdGhlIG9yZGVyIHRoZXkgd2VyZSBwYXJrZWQgd2l0aCB3b3VsZFxuICAgICAgICAvLyBtZXJnZSB0aGVtIGJhY2sgaW4gcmV2ZXJzZS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcGxhY2VkSXRlbSAmJlxuICAgICAgICAgIG1lcmdlck9wdGlvbnMudG9NZXJnZVByb3AgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcF0/Lmxlbmd0aCAmJlxuICAgICAgICAgIHByZXNlcnZlT3JkZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVtwcmVzZXJ2ZU9yZGVyXSA9IHByb3BWYWx1ZS5tYXAoaXRlbSA9PiBpdGVtLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXBsYWNlZFN0YXRlO1xuICAgIH0sXG4gICAgc3RhdGVcbiAgKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShcbiAgc3RhdGUsXG4gIHJlcGxhY2VkSXRlbSxcbiAge3Byb3AsIHRvTWVyZ2VQcm9wLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZH1cbikge1xuICAvLyBwcm9wIGlzIGRlcGVuZHMgb24gdGhlIGRhdGFzZXQgdG8gYmUgcmVwbGFjZWRcbiAgLy8gcmVtb3ZlIHByb3AgZnJvbSBzdGF0ZSwgYW5kIG1vdmUgaXQgdG8gdG9CZU1lcmdlZFxuICBsZXQgbmV4dFN0YXRlID0gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcmVwbGFjZWRJdGVtLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pO1xuICBjb25zdCBjaGlsZERhdGFJZHMgPSBnZXRDaGlsZERhdGFzZXRJZHM/LihyZXBsYWNlZEl0ZW0pIHx8IGZpbmRDaGlsZERhdGFzZXRJZHMocmVwbGFjZWRJdGVtKTtcblxuICBpZiAoY2hpbGREYXRhSWRzKSB7XG4gICAgbmV4dFN0YXRlID0gdG9BcnJheShjaGlsZERhdGFJZHMpLnJlZHVjZSgoYWNjdSwgY2hpbGREYXRhSWQpID0+IHtcbiAgICAgIC8vIHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSBjaGlsZCBkYXRhc2V0IGlkLFxuICAgICAgLy8gYnV0IHN0aWxsIG5lZWQgdG8gbW92ZSBvdXQgb2Ygc3RhdGUgYW5kIG1lcmdlIGJhY2sgaW5cbiAgICAgIHJldHVybiByZXBsYWNlRGF0YXNldEFuZERlcHMoYWNjdSwgY2hpbGREYXRhSWQsIGNoaWxkRGF0YUlkKTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxnQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sSUFBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVEsS0FBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsS0FBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVUsSUFBQSxHQUFBUixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVcsTUFBQSxHQUFBQyx1QkFBQSxDQUFBWixPQUFBO0FBV0EsSUFBQWEsUUFBQSxHQUFBYixPQUFBO0FBZ0NBLElBQUFjLE1BQUEsR0FBQWQsT0FBQTtBQXFDQSxJQUFBZSxZQUFBLEdBQUFmLE9BQUE7QUFFQSxJQUFBZ0IsVUFBQSxHQUFBaEIsT0FBQTtBQW1DQSxJQUFBaUIsT0FBQSxHQUFBakIsT0FBQTtBQUNBLElBQUFrQixnQkFBQSxHQUFBbEIsT0FBQTtBQVVBLElBQUFtQixjQUFBLEdBQUFuQixPQUFBO0FBQ0EsSUFBQW9CLGVBQUEsR0FBQXBCLE9BQUE7QUFVQSxJQUFBcUIsUUFBQSxHQUFBbkIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNB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
5493
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl9pbnRlcmFjdGlvblV0aWxzIiwiX2xheWVyVXRpbHMiLCJfZWZmZWN0cyIsIl9kYXRhVXRpbHMiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiYSIsInUiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJleHBvcnRzIiwidG9vbHRpcCIsImlkIiwibGFiZWwiLCJlbmFibGVkIiwiY29uZmlnIiwiZmllbGRzVG9TaG93IiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkNPTVBBUkVfVFlQRVMiLCJBQlNPTFVURSIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiY2hhcnRzIiwiY2hhcnRzVG9CZU1lcmdlZCIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbnNUb0JlTWVyZ2VkIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiVGFzayIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIm1hcCIsImx5ciIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJpc1Zpc2libGUiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImlzRXF1YWwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsIl90ZXh0TGFiZWwkZmluZCRjb2xsaSIsIl90ZXh0TGFiZWwkZmluZCIsImNvbGxpc2lvbkVuYWJsZWQiLCJCb29sZWFuIiwidXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlIiwic3BsaWNlIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyIiwiX29sZExheWVyJGdldERlZmF1bHRMIiwiX29sZExheWVyJGdldERlZmF1bHRMMiIsImdldERlZmF1bHRMYXllckNvbmZpZyIsIl90ZXh0TGFiZWwkIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm5ld1R5cGUiLCJvbGRJZCIsIkNvbnNvbGUiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsInJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldCIsInZpc3VhbENoYW5uZWwiLCJpbmNvbWluZyIsIl90eXBlb2YyIiwiZm91bmQiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJjaGFubmVsS2V5IiwiamVua3MiLCJlZGl0Qm91bmRzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTYiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwiX3JlZjQiLCJyZWR1Y2UiLCJhY2N1Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJzZXRGaWx0ZXJVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlciIsIl9yZWY1IiwiYW5pbWF0aW9uV2luZG93IiwibmV3RmlsdGVyIiwic3dhcF8iLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwic2V0RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsInRvQXJyYXkiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsInYiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ1bmlxIiwiZmlsdGVyV2l0aFBMb3QiLCJ1cGRhdGVGaWx0ZXJQbG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiZ2V0RGVmYXVsdEZpbHRlciIsInJlbW92ZUZpbHRlclBsb3QiLCJfaSIsIl9hcnIiLCJuZXh0VmFsIiwiZG9tYWluU3RlcHMiLCJtZXJnZUZpbHRlckRvbWFpbiIsIm5leHRGaWx0ZXIiLCJzdGVwIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImRhdGFzZXRJZHMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsIm9sZERhdGFJZCIsImRhdGFzZXRJZCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsInNldEZpbHRlckdwdU1vZGUiLCJhc3NpZ25HcHVDaGFubmVsIiwiZW5kTmFtZSIsIl9hcHBseVRpbWVGaWx0ZXJFbmRGaSIsImFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSIsImdwdUNoYW5uZWwiLCJncHVFbmRDaGFubmVsIiwibGF5ZXJJZERpZmZlcmVuY2UiLCJ4b3IiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwic2V0RmlsdGVyUGxvdFVwZGF0ZXIiLCJfcmVmNiIsIm5ld1Byb3AiLCJwaWNrXyIsIm1lcmdlXyIsInBsb3RUeXBlIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJpc1NpZGVGaWx0ZXIiLCJhcHBseUZpbHRlckNvbmZpZyIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsInJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMiLCJjaGFydCIsImlzTGF5ZXJDaGFydENvbmZpZyIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwiZ2V0TmV3TGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVySWRzVG9SZW1vdmUiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImFycmF5TW92ZSIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJnZW5lcmF0ZUhhc2hJZCIsIkxBWUVSX0lEX0xFTkdUSCIsInBhcmVudEdyb3VwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJhcnJheUluc2VydCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiZWZmZWN0IiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwibmV3RWZmZWN0IiwiY3JlYXRlRWZmZWN0Iiwic2V0UHJvcHMiLCJmaXhFZmZlY3RPcmRlciIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtZXJnZUNoYXJ0Q29uZmlnIiwiZGlzcGxheSIsImNoYXJ0RGlzcGxheSIsImF4aXNGaWVsZElmUHJlc2VudCIsImF4aXMiLCJmaWVsZE5hbWVzIiwiX2F4aXMkZmllbGQiLCJkcm9wTWlzc2luZ0NoYXJ0RmllbGRzIiwiU2V0IiwieEF4aXMiLCJncm91cEJ5Iiwic2hvdWxkUmVtb3ZlIiwicmVtb3ZlZCIsInJlbW92ZWRJZHMiLCJmaWx0ZXJJZHMiLCJmbGF0TWFwIiwiX2NoYXJ0JGNyb3NzRmlsdGVyIiwiY3Jvc3NGaWx0ZXIiLCJyZWR1Y2VSaWdodCIsImFkZENoYXJ0VXBkYXRlciIsIl9yZWYxMyIsIl9jaGFydCRkaXNwbGF5JGlzQ29uZiIsIl9jaGFydCRkaXNwbGF5IiwiZXhpc3RpbmciLCJ1cGRhdGVDaGFydFVwZGF0ZXIiLCJfcmVmMTQiLCJfbmV4dCRjcm9zc0ZpbHRlcjIiLCJfcHJldiRjcm9zc0ZpbHRlciIsIl9wcmV2JGNyb3NzRmlsdGVyMiIsIl9uZXh0JGNyb3NzRmlsdGVyMyIsImRhdGFJZENoYW5nZWQiLCJsYXllcklkQ2hhbmdlZCIsIl9uZXh0JGNyb3NzRmlsdGVyIiwib3duZWRGaWx0ZXJJZHMiLCJyZW1vdmVDaGFydFVwZGF0ZXIiLCJfcmVmMTUiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9yZWYxNiIsIl9jb25maWckdGV4dFNpZGUiLCJfcmVmMTciLCJfY29uZmlnJHRleHRWZXJ0aWNhbFAiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYXJtTGVuZ3RoMiIsIl9hcm1MZW5ndGgzIiwiX3JhZGl1c0luTWV0ZXJzIiwia2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwicHJvdmlkZWRBbmdsZSIsImFuZ2xlIiwiZGVyaXZlZEZyb21BbmdsZSIsInRleHRQbGFjZW1lbnRGcm9tQW5nbGUiLCJ0ZXh0U2lkZSIsIkFubm90YXRpb25LaW5kIiwiVEVYVCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJ0ZXh0VmVydGljYWxQb3NpdGlvbiIsInZlcnRpY2FsIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04iLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImxpbmVDb2xvciIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwibGluZVdpZHRoIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJ0ZXh0V2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCIsInRleHRIZWlnaHQiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQiLCJ0ZXh0VmVydGljYWxBbGlnbiIsImRlZmF1bHRBbmdsZSIsIkFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFIiwiUE9JTlQiLCJhcm1MZW5ndGgiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIkFSUk9XIiwiQ0lSQ0xFIiwicmFkaXVzSW5NZXRlcnMiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxOCIsInVwZGF0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE5IiwibmV4dEFubm90YXRpb24iLCJuZXdBbm5vdGF0aW9ucyIsImR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjIwIiwiY2xvbmVEZWVwIiwic2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMSIsImlzRWRpdGluZ1RleHQiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJfc3RhdGUkZGF0YXNldHMiLCJuZXdEYXRhc2V0cyIsImxheWVyc1RvUmVtb3ZlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluZGV4T2YiLCJyZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnIiwiX3JlZjIyIiwiX2ludGVyYWN0aW9uQ29uZmlnIiwiX2NvbmZpZyRmaWVsZHNUb1Nob3ciLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyIiwidXBkYXRlRGF0YXNldFByb3BzVXBkYXRlciIsIm5ld0NvbG9yIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMjMiLCJfcmVmMjMkcGF5bG9hZCIsInBheWxvYWQiLCJfcmVmMjMkcGF5bG9hZCRjb25maWciLCJfcmVmMjMkcGF5bG9hZCRvcHRpb24iLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsImlzVmFsaWRNZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYyNCIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjI1IiwiaGFzVGFidWxhckRhdGFzZXREYXRhIiwiZGF0YSIsIl9kYXRhJHJvd3MiLCJfZGF0YSRjb2xzIiwicm93cyIsImNvbHMiLCJhcnJvd1RhYmxlIiwibmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZSIsIl9kYXRhc2V0JGluZm8iLCJfZGF0YXNldCRtZXRhZGF0YSIsIkRhdGFzZXRUeXBlIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJfZGF0YXNldCRtZXRhZGF0YTciLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTgiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYWJydXB0IiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwiZm9ybWF0IiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2UiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJfcmVmMjYiLCJfY2FsbGVlIiwibWVzc2FnZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJfeDIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwiY2hhaW4iLCJoeWRyYXRlZCIsInRhc2siLCJwYXRjaERhdGFzZXRNZXRhZGF0YSIsInBhdGNoIiwiY29weVRhYmxlQW5kVXBkYXRlIiwicmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl94MyIsIl9yZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX2NhbGxlZTMiLCJfcmVmMjciLCJvblByb2dyZXNzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiYXJnIiwiUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyIsInJlZnJlc2hEYXRhc2V0VXBkYXRlciIsIl9yZWYyOCIsIl9kYXRhc2V0JG1ldGFkYXRhMiIsIl9kYXRhc2V0JG1ldGFkYXRhMyIsIm5leHREYXRhc2V0IiwicmVmcmVzaEVycm9yIiwicmVmcmVzaFByb2dyZXNzIiwid2l0aFRhc2siLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50IiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsIk1hdGgiLCJyb3VuZCIsInBlcmNlbnQiLCJiaW1hcCIsInJlZnJlc2hEYXRhc2V0U3VjY2VzcyIsInJlZnJlc2hEYXRhc2V0RXJyb3IiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlciIsIl9yZWYyOSIsIl9kYXRhc2V0JG1ldGFkYXRhNCIsIl9kYXRhc2V0JG1ldGFkYXRhNSIsIm5leHRQZXJjZW50IiwibWF4IiwibWluIiwiZmllbGROYW1lc0VxdWFsIiwiY3VycmVudCIsImV2ZXJ5IiwicmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlIiwibmV4dExheWVycyIsImRyb3BwZWRMYXllcnMiLCJyZWJvdW5kIiwibmV4dExheWVyT3JkZXIiLCJuZXh0U3BsaXRNYXBzIiwibmV4dExheWVyRGF0YSIsIm9sZElkeCIsImZpbHRlcnNGb3JEYXRhc2V0Iiwib3RoZXJGaWx0ZXJzIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJuZXh0RmlsdGVycyIsInJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfcmVmMzAiLCJfcmVzdWx0JGRhdGEiLCJtZXRhZGF0YVBhdGNoIiwic2NoZW1hVW5jaGFuZ2VkIiwibm90TW9kaWZpZWQiLCJ1cGRhdGUiLCJyZWZyZXNoZWQiLCJyZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSIsImlzRGF0YXNldFJvd0xpc3QiLCJpc1BsYWluT2JqZWN0IiwidG9BcnJheVJvdyIsInJvdyIsInJlY29yZCIsIm5vcm1hbGl6ZURhdGFzZXRSb3dzIiwibGlzdCIsIm5vcm1hbGl6ZWQiLCJhcnJheVJvdyIsImFkZFRvRGF0YXNldFVwZGF0ZXIiLCJfcmVmMzEiLCJhcHBsaWVkIiwidXBzZXJ0QnkiLCJ1cHNlcnRSb3dzIiwiYXBwZW5kUm93cyIsInJlbW92ZUZyb21EYXRhc2V0VXBkYXRlciIsIl9yZWYzMiIsInJvd0luZGV4ZXMiLCJieUZpZWxkIiwiaW5kZXhlcyIsImZpbmRSb3dJbmRleGVzQnlGaWVsZFZhbHVlcyIsInJlbW92ZVJvd3MiLCJyZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlciIsIl9yZWYzMyIsInVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwiY3JlYXRlRGF0YXNldFRhc2tzIiwibm90aWZpY2F0aW9uVGFza3MiLCJfcmVmMzQiLCJkYXRhc2V0SW5kZXgiLCJfcmVmMzQkaW5mbyIsInJlc3QiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsImRhdGFzZXRzQWxsU2V0dGxlZFRhc2siLCJhbGxTZXR0bGVkIiwicmVzdWx0cyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwiYWRkVG9NYXBPcHRpb25zIiwic2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIiLCJwYXlsb2FkXyIsImNoYW5nZSIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiQUNUSU9OX1RBU0siLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zIiwibGF5ZXJWaXNDb25maWciLCJwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhIiwiX2xheWVyJGNvbmZpZyIsIkxBWUVSX1RZUEVTIiwiZ2VvanNvbiIsImNvbHVtbk1vZGUiLCJmRGF0YUlkIiwiZGF0YXNldEZpbHRlcmVkIiwiZGF0YUVtcHR5IiwibmV3TGF5ZXJzIiwiYXV0b0NyZWF0ZUxheWVycyIsImFkZERlZmF1bHRMYXllcnMiLCJsYXllcnNOb3RJblNwbGl0TWFwcyIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJwb2x5Z29uRmlsdGVycyIsInBvbHlnb24iLCJwb2x5Z29uTWV0YURhdGFJZHMiLCJfZiRsYXllcklkIiwiY2VudGVyTWFwIiwiYm91bmRzIiwiZmluZE1hcEJvdW5kcyIsInBhZGRpbmciLCJmaXRCb3VuZHNUYXNrIiwiZml0TWFwQm91bmRzIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheTIiLCJpc1JnYkNvbG9yIiwiZGVlcG1lcmdlIiwicmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hIiwicmVuYW1lcyIsIm5ld1RhYmxlIiwiX2xheWVyJGNvbmZpZyR0ZXh0TGFiIiwiY29uZmlnUGF0Y2giLCJjb2x1bW5zUGF0Y2giLCJjb2x1bW5zQ2hhbmdlZCIsImNvbHVtbnMiLCJfcmVmMzUiLCJfcmVmMzYiLCJja2V5IiwiY29sIiwiX3JlZjM3IiwiZmllbGRDb25maWciLCJsYXllckNvcHkiLCJhc3NpZ24iLCJjcmVhdGUiLCJnZXRQcm90b3R5cGVPZiIsImhhc0FsbENvbHVtbnMiLCJ1cGRhdGVEYXRhc2V0VXBkYXRlciIsIl9pbnRlcmFjdGlvbkNvbmZpZzIiLCJfdG9vbHRpcCRjb25maWciLCJfYWN0aW9uJHJlbmFtZXMiLCJ1cGRhdGVTY2hlbWEiLCJmaWx0ZXJlZElkeENQVSIsImFsbEluZGV4ZXMiLCJmaWx0ZXJSZWNvcmRDUFUiLCJzb3J0Q29sdW1uIiwic29ydE9yZGVyIiwicGlubmVkQ29sdW1ucyIsIl9yZW5hbWVzJG5hbWUiLCJnZXRDb2x1bW5GaWVsZElkeCIsIm5ld0ZpZWxkc0J5TmFtZSIsIl9yZW5hbWVzJG9sZE5hbWUiLCJfdXBkYXRlZCR5QXhpcyIsInZpIiwib2xkTmFtZSIsIm5ld05hbWUiLCJmaWVsZElkeCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZTIiLCJ1cGRhdGVkIiwiZmlsdGVyVGFibGUiLCJyZWNvbmNpbGVkIiwibmV4dEZpZWxkc1RvU2hvdyIsIl9yZW5hbWVzJGYkbmFtZSIsIl9zdGF0ZSRzcGxpdE1hcHMkaW5kZSIsImluZGV4VG9SZXRyaWV2ZSIsIm1hcExheWVycyIsImxvYWRGaWxlc1VwZGF0ZXIiLCJmaWxlcyIsIl9hY3Rpb24kb25GaW5pc2giLCJvbkZpbmlzaCIsImxvYWRGaWxlc1N1Y2Nlc3MiLCJjb21wYW5pb25GaWxlcyIsImZpbGVzVG9Mb2FkIiwiZ2V0RmlsZXNUb1BhcnNlIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsIl9zdGF0ZSRmaWxlTG9hZGluZyIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheTIiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiTE9BRF9GSUxFX1RBU0siLCJnZW4iLCJuZXh0RmlsZUJhdGNoIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiY29udGVudCIsImxvYWRGaWxlc0VyciIsInByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQyIiwiUFJPQ0VTU19GSUxFX0RBVEEiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiX3JlZjM4IiwiX2FjY3VtdWxhdGVkJGRhdGEiLCJfcmVmMzgkcGF5bG9hZCIsImFjY3VtdWxhdGVkIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJ1c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIlVOV1JBUF9UQVNLIiwiX3JlZjM5IiwibG9hZEZpbGVzRXJyVXBkYXRlciIsIl9yZWY0MCIsIl9zdGF0ZSRmaWxlTG9hZGluZzIiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmNDEiLCJkYXRhSWRzIiwiZmlsdGVyRGF0YXNldENQVSIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJmaW5kRmllbGRzVG9TaG93IiwibWVyZ2VkIiwiX3JlZjQzIiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlVGltZURvbWFpbnMiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJtZXJnZWRUaW1lU3RlcHMiLCJzb3J0IiwiQkFTRV9TUEVFRCIsIkZQUyIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsImlzSW5SYW5nZSIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjQ0Iiwic2tldGNoZXNFbmFibGVkIiwiZW5hYmxlRHJhd09uTWFwU2tldGNoZXMiLCJEUkFXX1BPSU5UIiwiRFJBV19MSU5FU1RSSU5HIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjQ1IiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWY0NSRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImJib3giLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjQ2IiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsIm5leHRGZWF0dXJlIiwibWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMiLCJuZXh0RWRpdG9yIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWY0NyIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWY0OCIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsInNrZXRjaEZlYXR1cmUiLCJ0b1NrZXRjaEZlYXR1cmUiLCJzdGF0ZVdpdGhvdXRGaWx0ZXIiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlciIsInZpc2libGVMYXllcklkcyIsImFsbExheWVySWRzIiwic29ydFRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0OSIsImNvbHVtbiIsInNvcnRNb2RlIiwiY3VycmVudE1vZGUiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwic29ydGVkIiwic29ydERhdGFzZXRCeUNvbHVtbiIsInBpblRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY1MCIsInBpblRhYmxlQ29sdW1ucyIsImNvcHlUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNTEiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInBhcnNlRmllbGRWYWx1ZSIsInZhbHVlQXQiLCJqb2luIiwiY29weSIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjUyIiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnMiIsImNvbG9yRmllbGQiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjUzIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJjb2xsZWN0Q29sdW1uVmFsdWVzIiwiZ2V0Q29sdW1uU3RhdGlzdGljcyIsImZpZWxkVHlwZSIsIkxPQURfQ09MVU1OX1NUQVRTX1RBU0siLCJsb2FkQ29sdW1uU3RhdHNVcGRhdGVyIiwiX3JlZjU0IiwiZmllbGROYW1lIiwiZmllbGROYW1lc1RvTG9hZCIsImZpZWxkc1RvTG9hZCIsImlzTG9hZGluZ1N0YXRzIiwidGFza3MiLCJfcmVmNTUiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzIiwibG9hZENvbHVtblN0YXRzRXJyb3IiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlciIsIl9yZWY1NiIsIm5ld0ZpbHRlclByb3BzIiwiY29sdW1uU3RhdHMiLCJsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIiLCJfcmVmNTciLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsImNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyIiwiX2FjdGlvbiIsInByb2Nlc3NHZW9qc29uIiwiZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uIiwiY2xlYXJlZFN0YXRlIiwibGFiZWxJZCIsImZsb29yIiwicmFuZG9tIiwiZXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNTgiLCJpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIiLCJleHRyYWN0ZWQiLCJleHRyYWN0Um93c0luc2lkZUZlYXR1cmUiLCJyb3dDb3VudCIsInNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjU5IiwidXBkYXRlcyIsImNoZWNrVGltZUNvbmZpZ0FyZ3MiLCJhbGxvd2VkIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY2MCIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXIiLCJfbGF5ZXIkZmlsdGVyZWRJdGVtQ28iLCJldmVudCIsImRlY2tnbExheWVySWQiLCJjb3VudCIsImZpbHRlcmVkSXRlbUNvdW50Iiwid21zRmVhdHVyZUluZm9VcGRhdGVyIiwiZmVhdHVyZUluZm8iLCJjb25zb2xlIiwib2JqZWN0Iiwid21zRmVhdHVyZUluZm8iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28yIiwiX2FjdGlvbiRlbmFibGUiLCJpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIm5ld0ZpbHRlckRvbWFpbiIsIkFOSU1BVElPTl9XSU5ET1ciLCJpbnRlcnZhbCIsImFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbCIsIm5ld0ZpbHRlclZhbHVlIiwic3luY1RpbWVsaW5lTW9kZSIsIlNZTkNfVElNRUxJTkVfTU9ERVMiLCJlbmQiLCJ2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlIiwiX3JlZjYxIiwidGltZWxpbmVWYWx1ZSIsImdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyIiwic25hcFRvTWFya3MiLCJmcmVlIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsIlRJTUVfSU5URVJWQUxTX09SREVSRUQiLCJsYXllclRpbWVJbnRlcnZhbCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsInVwZGF0ZWRQbG90VHlwZSIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImlzT2JqZWN0IiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNjMiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiY29tcG9zZV8iLCJhcHBseV8iLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiX3NlcmlhbGl6ZWRTdGF0ZSRzcGxpIiwiY29tYmluZVNwbGl0TWFwc0J5SW5kZXgiLCJwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQiLCJwcmV2aW91c09yZGVyIiwiaWRzIiwicGFya2VkIiwicGFya2VkSWRzIiwia25vd24iLCJvcmRlcmVkIiwiX3JlZjY0IiwiYWNjdVN0YXRlIiwiX3JlZjY1IiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIyIiwibWVyZ2VyT3B0aW9ucyIsInBhcmtlZEVsc2V3aGVyZSIsInJlcGxhY2VkSXRlbSIsInJlcGxhY2VQcm9wVmFsdWVJblN0YXRlIiwiX3JlZjY2IiwiY2hpbGREYXRhSWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7YmJveH0gZnJvbSAnQHR1cmYvYmJveCc7XG5pbXBvcnQgdHlwZSB7QWxsR2VvSlNPTn0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgY29weSBmcm9tICdjb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2Nsb25lRGVlcCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2dldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9pc0VxdWFsJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgeG9yIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3hvcic7XG5pbXBvcnQgVGFzaywge2Rpc2FibGVTdGFja0NhcHR1cmluZywgd2l0aFRhc2t9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuaW1wb3J0IHR5cGUge1Rhc2tEZXNjcmlwdG9yfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIFRhc2tzXG5pbXBvcnQge1xuICBERUxBWV9UQVNLLFxuICBBQ1RJT05fVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWcsXG4gIFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkLFxuICBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzLFxuICBsb2FkQ29sdW1uU3RhdHNFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRTdWNjZXNzLFxuICByZWZyZXNoRGF0YXNldEVycm9yLFxuICByZWZyZXNoRGF0YXNldFByb2dyZXNzXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbi8vIFV0aWxzXG5pbXBvcnQge1xuICBGSUxURVJfVVBEQVRFUl9QUk9QUyxcbiAgYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCxcbiAgc25hcFRvTWFya3MsXG4gIGFwcGx5RmlsdGVyRmllbGROYW1lLFxuICBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIGFycmF5SW5zZXJ0LFxuICBjb21iaW5lU3BsaXRNYXBzQnlJbmRleCxcbiAgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzLFxuICBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluLFxuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uLFxuICBleHRyYWN0Um93c0luc2lkZUZlYXR1cmUsXG4gIGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcixcbiAgbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMsXG4gIHRvU2tldGNoRmVhdHVyZSxcbiAgZmVhdHVyZVRvRmlsdGVyVmFsdWUsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIGdlbmVyYXRlUG9seWdvbkZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlcixcbiAgZ2V0RmlsdGVySWRJbkZlYXR1cmUsXG4gIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcixcbiAgaXNJblJhbmdlLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZ2JDb2xvcixcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICByZW1vdmVMYXllckZyb21TcGxpdE1hcHMsXG4gIHNldCxcbiAgdXBkYXRlRmlsdGVyUGxvdCxcbiAgcmVtb3ZlRmlsdGVyUGxvdCxcbiAgaXNMYXllckFuaW1hdGFibGUsXG4gIGlzU2lkZUZpbHRlcixcbiAgZ2V0QXBwbGljYXRpb25Db25maWcsXG4gIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheSwgYXJyYXlNb3ZlfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZQUyxcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIERJU1RBTkNFX0ZPR19UWVBFLFxuICBTVVJGQUNFX0ZPR19UWVBFLFxuICBNQVhfREVGQVVMVF9UT09MVElQUyxcbiAgUExPVF9UWVBFUyxcbiAgU09SVF9PUkRFUixcbiAgU1lOQ19USU1FTElORV9NT0RFUyxcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIFNDQUxFX1RZUEVTLFxuICBJTklUSUFMX0FOTk9UQVRJT05fS0lORCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTixcbiAgQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlQsXG4gIHRleHRQbGFjZW1lbnRGcm9tQW5nbGUsXG4gIEFubm90YXRpb25LaW5kLFxuICBEYXRhc2V0VHlwZSxcbiAgZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zLFxuICBnZXRSZW1vdGVTb3VyY2VGb3JtYXRcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMQVlFUl9JRF9MRU5HVEgsIExheWVyLCBMYXllckNsYXNzZXN9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIGFwcGx5XyxcbiAgY29tcG9zZV8sXG4gIGZpbHRlck91dEJ5SWQsXG4gIG1lcmdlXyxcbiAgcGF5bG9hZF8sXG4gIHBpY2tfLFxuICByZW1vdmVFbGVtZW50QXRJbmRleCxcbiAgc3dhcF9cbn0gZnJvbSAnLi9jb21wb3Nlci1oZWxwZXJzJztcbmltcG9ydCB7aXNWYWxpZE1lcmdlciwgbWVyZ2VTdGF0ZUZyb21NZXJnZXJzfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7XG4gIFZJU19TVEFURV9NRVJHRVJTLFxuICBjcmVhdGVMYXllckZyb21Db25maWcsXG4gIGlzU2F2ZWRMYXllckNvbmZpZ1YxLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtnZXRGaWxlc1RvUGFyc2UsIGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCwgcHJvY2Vzc0dlb2pzb259IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5cbmltcG9ydCB7XG4gIEZpbHRlcixcbiAgRmVhdHVyZSxcbiAgSW50ZXJhY3Rpb25Db25maWcsXG4gIEFuaW1hdGlvbkNvbmZpZyxcbiAgRmlsdGVyQW5pbWF0aW9uQ29uZmlnLFxuICBFZGl0b3IsXG4gIEZpZWxkLFxuICBMYXllclZpc0NvbmZpZyxcbiAgVGltZVJhbmdlRmlsdGVyLFxuICBBbm5vdGF0aW9uLFxuICBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsLFxuICBQcm90b0RhdGFzZXQsXG4gIENoYXJ0Q29uZmlnLFxuICBMYXllckNoYXJ0Q29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtMb2FkZXJ9IGZyb20gJ0Bsb2FkZXJzLmdsL2xvYWRlci11dGlscyc7XG5cbmltcG9ydCB7XG4gIERhdGFzZXRzLFxuICBLZXBsZXJUYWJsZSxcbiAgRmlsdGVyUHJvcHMsXG4gIGFzc2lnbkdwdUNoYW5uZWwsXG4gIGNvcHlUYWJsZUFuZFVwZGF0ZSxcbiAgY3JlYXRlTmV3RGF0YUVudHJ5LFxuICBwaW5UYWJsZUNvbHVtbnMsXG4gIHNldEZpbHRlckdwdU1vZGUsXG4gIHNvcnREYXRhc2V0QnlDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge2ZpbmRGaWVsZHNUb1Nob3d9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgY2FsY3VsYXRlTGF5ZXJEYXRhLFxuICBmaW5kRGVmYXVsdExheWVyLFxuICBnZXRMYXllck9yZGVyRnJvbUxheWVycyxcbiAgbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzLFxuICBnZXROZXdMYXllckdyb3VwLFxuICBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIsXG4gIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcixcbiAgZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyLFxuICBmaW5kUGFyZW50R3JvdXBGb3JMYXllcixcbiAgZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkLFxuICB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyLFxuICBnZXRGbGF0TGF5ZXJPcmRlcixcbiAgcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXJcbn0gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGZpeEVmZmVjdE9yZGVyLFxuICBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyxcbiAgZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyxcbiAgbWVyZ2VUaW1lRG9tYWlucyxcbiAgYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyxcbiAgdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlLFxuICBnZXREZWZhdWx0VGltZUZvcm1hdCxcbiAgTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCxcbiAgVElNRV9JTlRFUlZBTFNfT1JERVJFRCxcbiAgbWVyZ2VGaWx0ZXJEb21haW4sXG4gIGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSxcbiAgY29sbGVjdENvbHVtblZhbHVlcyxcbiAgZ2V0Q29sdW1uU3RhdGlzdGljc1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtQYXlsb2FkQWN0aW9ufSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuaW1wb3J0IHtmaW5kTWFwQm91bmRzfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuXG4vLyBkaXNhYmxlIHN0YWNrIGNhcHR1cmUgZm9yIHdpdGhUYXNrIGNhbGxzIHRoYXQgaGFwcGVuIG91dHNpZGUgc3RyaWN0IHJlZHVjZXIgY29udGV4dFxuZGlzYWJsZVN0YWNrQ2FwdHVyaW5nKCk7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB2aXNTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKlxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7dmlzU3RhdGVVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdmlzU3RhdGU6IHZpc1N0YXRlVXBkYXRlcnMuZW5sYXJnZUZpbHRlclVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHN0YXRlLmtlcGxlckdsLmZvby52aXNTdGF0ZSxcbiAqICAgICAgICAgICAgICAge2lkeDogMH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZzogSW50ZXJhY3Rpb25Db25maWcgPSB7XG4gIHRvb2x0aXA6IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLnRvb2x0aXAnLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgY29uZmlnOiB7XG4gICAgICBmaWVsZHNUb1Nob3c6IHt9LFxuICAgICAgY29tcGFyZU1vZGU6IGZhbHNlLFxuICAgICAgY29tcGFyZVR5cGU6IENPTVBBUkVfVFlQRVMuQUJTT0xVVEVcbiAgICB9XG4gIH0sXG4gIGdlb2NvZGVyOiB7XG4gICAgaWQ6ICdnZW9jb2RlcicsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZ2VvY29kZXInLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsLFxuICAgIGNvbmZpZzoge1xuICAgICAgbGltaXRTZWFyY2g6IGZhbHNlXG4gICAgfVxuICB9LFxuICBicnVzaDoge1xuICAgIGlkOiAnYnJ1c2gnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmJydXNoJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBjb25maWc6IHtcbiAgICAgIC8vIHNpemUgaXMgaW4ga21cbiAgICAgIHNpemU6IDAuNVxuICAgIH1cbiAgfSxcbiAgY29vcmRpbmF0ZToge1xuICAgIGlkOiAnY29vcmRpbmF0ZScsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuY29vcmRpbmF0ZScsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGxcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRzogQW5pbWF0aW9uQ29uZmlnID0ge1xuICBkb21haW46IG51bGwsXG4gIGN1cnJlbnRUaW1lOiBudWxsLFxuICBzcGVlZDogMSxcbiAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICB0aW1lU3RlcHM6IG51bGwsXG4gIHRpbWVGb3JtYXQ6IG51bGwsXG4gIHRpbWV6b25lOiBudWxsLFxuICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbCxcbiAgaGlkZUNvbnRyb2w6IGZhbHNlLFxuICBkdXJhdGlvbjogbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRURJVE9SOiBFZGl0b3IgPSB7XG4gIG1vZGU6IEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04sXG4gIGZlYXR1cmVzOiBbXSxcbiAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICB2aXNpYmxlOiB0cnVlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX1ZJU19TVEFURTogVmlzU3RhdGUgPSB7XG4gIC8vIG1hcCBpbmZvXG4gIG1hcEluZm86IHtcbiAgICB0aXRsZTogJycsXG4gICAgZGVzY3JpcHRpb246ICcnXG4gIH0sXG4gIC8vIGxheWVyc1xuICBsYXllcnM6IFtdLFxuICBsYXllckRhdGE6IFtdLFxuICBsYXllclRvQmVNZXJnZWQ6IFtdLFxuICBsYXllck9yZGVyOiBbXSxcbiAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGwsXG5cbiAgLy8gZmlsdGVyc1xuICBmaWx0ZXJzOiBbXSxcbiAgZmlsdGVyVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYSBjb2xsZWN0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRcbiAgZGF0YXNldHM6IHt9LFxuICBlZGl0aW5nRGF0YXNldDogdW5kZWZpbmVkLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICAvLyBjaGFydHMgKGVuYWJsZWQgYnkgZGVmYXVsdDsgZ2F0ZWQgYnkgZW5hYmxlQ2hhcnRzUGFuZWwpXG4gIGNoYXJ0czogW10sXG4gIGNoYXJ0c1RvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGFubm90YXRpb25zXG4gIGFubm90YXRpb25zOiBbXSxcbiAgYW5ub3RhdGlvbnNUb0JlTWVyZ2VkOiBbXSxcbiAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG51bGwsXG4gIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZSxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHt9LFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBvdmVybGF5QmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG4gIG1heERlZmF1bHRUb29sdGlwczogTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG4gIGlzTWVyZ2luZ0RhdGFzZXRzOiB7fSxcbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgLy8gZm9yIGxvYWRpbmcgZGF0YXNldHNcbiAgbG9hZGluZ0luZGljYXRvclZhbHVlOiAwLFxuXG4gIGxvYWRlcnM6IFtdLFxuICBsb2FkT3B0aW9uczoge30sXG5cbiAgLy8gdmlzU3RhdGVNZXJnZXJzXG4gIG1lcmdlcnM6IFZJU19TVEFURV9NRVJHRVJTLFxuXG4gIC8vIGtlcGxlciBzY2hlbWFzXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFcbn07XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19GSVRfQk9VTkRTID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfRklUX0JPVU5EUydcbik7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTidcbik7XG5cbnR5cGUgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZSA9IHtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllckRhdGE6IGFueVtdO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgd2l0aCB1cGRhdGVkIGxheWVyIGFuZCBsYXllckRhdGFcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGE8UyBleHRlbmRzIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGU+KFxuICBzdGF0ZTogUyxcbiAge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH06IHtsYXllckRhdGE/OiBhbnk7IGxheWVyOiBMYXllcjsgaWR4OiBudW1iZXJ9XG4pOiBTIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAoKGx5ciwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyIDogbHlyKSksXG4gICAgbGF5ZXJEYXRhOiBsYXllckRhdGFcbiAgICAgID8gc3RhdGUubGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyRGF0YSA6IGQpKVxuICAgICAgOiBzdGF0ZS5sYXllckRhdGFcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2U8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgbGF5ZXI6IExheWVyKTogUyB7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgPyBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgICAgIDogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIG9iamVjdHMgKG9yIGFycmF5cykgYW5kIHJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggb25seSB0aGVcbiAqIHByb3BlcnRpZXMgdGhhdCBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIHBpY2tDaGFuZ2VkUHJvcHM8VD4ocHJldjogVCwgbmV4dDogVCk6IFBhcnRpYWw8VD4ge1xuICBjb25zdCBjaGFuZ2VkUHJvcHM6IFBhcnRpYWw8VD4gPSB7fTtcbiAgY29uc3QgcGlja1Byb3BzT2YgPSBvYmogPT4ge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZWRQcm9wcywga2V5KSAmJlxuICAgICAgICAhaXNFcXVhbChwcmV2W2tleV0sIG5leHRba2V5XSlcbiAgICAgICkge1xuICAgICAgICBjaGFuZ2VkUHJvcHNba2V5XSA9IG5leHRba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcGlja1Byb3BzT2YocHJldik7XG4gIHBpY2tQcm9wc09mKG5leHQpO1xuICByZXR1cm4gY2hhbmdlZFByb3BzO1xufVxuXG5jb25zdCBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTID0gWydmaWVsZCcsICdzY2FsZScsICdkb21haW4nLCAnYWdncmVnYXRpb24nXTtcblxuLyoqXG4gKiBBcHBseSBsYXllciBjb25maWdcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHksIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlMYXllckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVySWQsIG5ld0xheWVyQ29uZmlnLCBsYXllckluZGV4fSA9IGFjdGlvbjtcbiAgLy8gU2F2ZWQgY29uZmlncyBoYXZlIGEgdmlzdWFsQ2hhbm5lbHMgc2libGluZzsgcGFyc2VkL2VkaXRvciBKU09OIGZvbGRzIHRob3NlXG4gIC8vIGZpZWxkcyBpbnRvIGNvbmZpZy4gUmUtcGFyc2luZyB0aGUgbGF0dGVyIGRyb3BzIGNvbG9yRmllbGQgYW5kIHJlc2V0cyB0aGUgc2NhbGUuXG4gIGNvbnN0IG5ld1BhcnNlZExheWVyID0gaXNTYXZlZExheWVyQ29uZmlnVjEobmV3TGF5ZXJDb25maWcpXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbmV3TGF5ZXJDb25maWcpXG4gICAgOiBuZXdMYXllckNvbmZpZztcbiAgY29uc3Qgb2xkTGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICBpZiAoIW9sZExheWVyIHx8ICFuZXdQYXJzZWRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXJJbmRleCAhPT0gbnVsbCAmJiBsYXllckluZGV4ICE9PSB1bmRlZmluZWQgJiYgc3RhdGUubGF5ZXJzW2xheWVySW5kZXhdICE9PSBvbGRMYXllcikge1xuICAgIC8vIGxheWVySW5kZXggaXMgcHJvdmlkZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdGNoIHRoZSBvbGRMYXllclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbbmV3UGFyc2VkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGlzIHZhbGlkIGFuZCBjb252ZXJ0IGl0IHRvIExheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIG5ld1BhcnNlZExheWVyLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICBpZiAoIW5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChuZXdMYXllci50eXBlICYmIG5ld0xheWVyLnR5cGUgIT09IG9sZExheWVyLnR5cGUpIHtcbiAgICBjb25zdCBvbGRMYXllckluZGV4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICAgIGlmIChvbGRMYXllckluZGV4ID49IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIobmV4dFN0YXRlLCBsYXllclR5cGVDaGFuZ2Uob2xkTGF5ZXIsIG5ld0xheWVyLnR5cGUpKTtcbiAgICAgIC8vIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIgY2hhbmdlcyB0aGUgaWQgb2YgdGhlIGxheWVyLCBzbyB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgbmV3IGlkXG4gICAgICAvLyBidXQgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIGxheWVyIHdhcyBub3QgcmVtb3ZlZFxuICAgICAgaWYgKG5leHRTdGF0ZS5sYXllcnMubGVuZ3RoID09PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVySWQgPSBuZXh0U3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdLmlkO1xuICAgICAgICBuZXh0U3RhdGUgPSBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgYXBwbHlMYXllckNvbmZpZyhuZXdMYXllcklkLCB7Li4ubmV3TGF5ZXJDb25maWcsIGlkOiBuZXdMYXllcklkfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIC8vIHNlcmlhbGl6ZUxheWVyKCkgbWlnaHQgcmV0dXJuIG51bGwgaWYgdGhlIG9sZCBsYXllciBpcyBub3QgdmFsaWQsXG4gIC8vIHdlIHNob3VsZCBzdGlsbCBhcHBseSB0aGUgY2hhbmdlcyBpbiB0aGF0IGNhc2VcbiAgY29uc3Qgc2VyaWFsaXplZE9sZExheWVyID0gc2VyaWFsaXplTGF5ZXIob2xkTGF5ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3TGF5ZXIgPSBzZXJpYWxpemVMYXllcihuZXdMYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHNlcmlhbGl6ZWRPbGRMYXllciwgc2VyaWFsaXplZE5ld0xheWVyKSkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRMYXllci5jb25maWcsIHNlcmlhbGl6ZWROZXdMYXllci5jb25maWcpO1xuXG4gICAgaWYgKCd2aXNDb25maWcnIGluIGNoYW5nZWQpIHtcbiAgICAgIGlmIChjaGFuZ2VkLnZpc0NvbmZpZykge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBjaGFuZ2VkLnZpc0NvbmZpZylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjaGFuZ2VkLnZpc0NvbmZpZztcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvbGRMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsTmFtZSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbE5hbWVdO1xuICAgICAgY29uc3QgY2hhbm5lbFByb3BOYW1lcyA9IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMubWFwKHByb3AgPT4gY2hhbm5lbFtwcm9wXSk7XG4gICAgICBpZiAoY2hhbm5lbFByb3BOYW1lcy5zb21lKHByb3AgPT4gcHJvcCBpbiBjaGFuZ2VkKSkge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UoXG4gICAgICAgICAgICBvbGRMYXllcixcbiAgICAgICAgICAgIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBjaGFubmVsUHJvcE5hbWVzKSxcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgY2hhbm5lbFByb3BOYW1lcykge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VkW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoY2hhbmdlZCkubGVuZ3RoID4gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBwaWNrKG5ld0xheWVyLmNvbmZpZywgT2JqZWN0LmtleXMoY2hhbmdlZCkpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVsYXllclZpc2liaWx0eShzdGF0ZTogVmlzU3RhdGUsIG5ld0xheWVyOiBMYXllciwgaXNWaXNpYmxlPzogYm9vbGVhbik6IFZpc1N0YXRlIHtcbiAgbGV0IG5ld1N0YXRlID0gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZShzdGF0ZSwgbmV3TGF5ZXIpO1xuICBjb25zdCBmaWx0ZXJJbmRleCA9IGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZSk7XG4gIGlmIChpc0xheWVyQW5pbWF0YWJsZShuZXdMYXllcikgJiYgZmlsdGVySW5kZXggIT09IC0xKSB7XG4gICAgLy8gaWYgbGF5ZXIgaXMgZ29pbmcgdG8gYmUgdmlzaWJsZSB3ZSBzeW5jIHdpdGggZmlsdGVyIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgb3RoZXIgYW5pbWF0YWJsZSBsYXllcnMgZXhpc3RzIGFuZCBhcmUgdmlzaWJsZVxuICAgIG5ld1N0YXRlID0gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICBlbmFibGU6IGlzVmlzaWJsZSA/IGlzVmlzaWJsZSA6IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycykubGVuZ3RoID4gMFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdDb25maWcpO1xuICBpZiAoXG4gICAgdHlwZW9mIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkID09PSAnc3RyaW5nJyAmJlxuICAgIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkICE9PSBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gICkge1xuICAgIGNvbnN0IHtkYXRhSWQsIC4uLnJlc3RDb25maWd9ID0gYWN0aW9uLm5ld0NvbmZpZztcbiAgICBjb25zdCBzdGF0ZVdpdGhEYXRhSWQgPSBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3Q29uZmlnOiB7ZGF0YUlkfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRMYXllciA9IHN0YXRlV2l0aERhdGFJZC5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgICByZXR1cm4gbmV4dExheWVyICYmIE9iamVjdC5rZXlzKHJlc3RDb25maWcpLmxlbmd0aFxuICAgICAgPyBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGVXaXRoRGF0YUlkLCB7b2xkTGF5ZXI6IG5leHRMYXllciwgbmV3Q29uZmlnOiByZXN0Q29uZmlnfSlcbiAgICAgIDogc3RhdGVXaXRoRGF0YUlkO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoYWN0aW9uLm5ld0NvbmZpZyk7XG5cbiAgbGV0IGxheWVyRGF0YTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuXG4gICAgY29uc3QgdXBkYXRlTGF5ZXJEYXRhUmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICBuZXdMYXllciA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllcjtcbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGFjdGlvbi5uZXdDb25maWcuaXNWaXNpYmxlKTtcbiAgfVxuXG4gIGlmICgnY29sdW1ucycgaW4gYWN0aW9uLm5ld0NvbmZpZyAmJiBuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICAvLyBUT0RPOiBTaGFuLCBtYWtlIHRoZSBhbmltYXRpb24gY29uZmlnIGZ1bmN0aW9uIG1vcmUgcm9idXN0XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgIGxheWVyOiBuZXdMYXllcixcbiAgICBsYXllckRhdGEsXG4gICAgaWR4XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFjdGlvbik6IFMge1xuICBjb25zdCB7b2xkTGF5ZXIsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBhbmltYXRpb246IHtcbiAgICAgIC4uLm9sZExheWVyLmNvbmZpZy5hbmltYXRpb24sXG4gICAgICBbcHJvcF06IHZhbHVlXG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaWR4XSk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWRcbiAqIGhhbmRsZXMgdHdvIGNhc2VzOlxuICogMSkgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGxvY2FsIFNwbGl0TWFwIGxheWVyICh2aXNTdGF0ZS5zcGxpdE1hcC5sYXllcnMpXG4gKiAyKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgZ2xvYmFsIGxheWVyICh2aXNTdGF0ZS5sYXllcnMpXG5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChkID0+IGQuaWQgPT09IGxheWVySWQpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAoc3BsaXRNYXBJZCkge1xuICAgIC8vIFtjYXNlIDFdOiB0b2dnbGUgbG9jYWwgbGF5ZXIgdmlzaWJpbGl0eSBmb3IgZWFjaCBTcGxpdE1hcFxuICAgIGNvbnN0IG1hcEluZGV4ID0gbmV3U3RhdGUuc3BsaXRNYXBzLmZpbmRJbmRleChzbSA9PiBzbS5pZCA9PT0gc3BsaXRNYXBJZCk7XG4gICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgLy8gMSkgaWYgdGhlIGxheWVyIGlzIGludmlzaWJsZSBnbG9iYWxseVxuICAgICAgLy8gLT4gc2V0IGdsb2JhbCB2aXNpYmlsaXR5IHRvIHRydWVcbiAgICAgIG5ld1N0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKG5ld1N0YXRlLCBsYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogdHJ1ZX0pKTtcblxuICAgICAgLy8gLT4gc2V0IGxvY2FsIHZpc2liaWxpdHkgdG8gdHJ1ZSBhbmQgdGhlIGxvY2FsIHZpc2liaWxpdGllcyBvZiBhbGwgb3RoZXIgU3BsaXRNYXBzIHRvIGZhbHNlXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNtID0+XG4gICAgICAgICAgc20uaWQgIT09IHNwbGl0TWFwSWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gMikgZWxzZSB3aGVuIHRoZSBsYXllciBpcyB2aXNpYmxlIGdsb2JhbGx5XG4gICAgcmV0dXJuIHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlcihuZXdTdGF0ZSwgdG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBbY2FzZSAyXTogdG9nZ2xlIGdsb2JhbCBsYXllciB2aXNpYmlsaXR5XG4gICAgY29uc3QgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7aXNWaXNpYmxlfSk7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuXG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGlzVmlzaWJsZSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgICAgaWR4XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBpbmRleCBvZiB0aGUgZmlsdGVyIHN5bmNlZCB0byB0aW1lbGluZSBvciAtMVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGU6IFZpc1N0YXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyBpc1ZhbGlkIGZsYWcgb2YgYSBsYXllci5cbiAqIFVwZGF0ZXMgaXNWaXNpYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBpc1ZhbGlkLlxuICogVHJpZ2dlcnMgdXBkYXRlIG9mIGRhdGEgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBnZXQgZXJyb3JzIGFnYWluIGR1cmluZyBuZXh0IHVwZGF0ZSBpdGVyYXRpb24uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclNldElzVmFsaWRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyU2V0SXNWYWxpZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpc1ZhbGlkfSA9IGFjdGlvbjtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBsYXllclRvVXBkYXRlID0gc3RhdGUubGF5ZXJzW2lkeF07XG4gIGlmIChsYXllclRvVXBkYXRlKSB7XG4gICAgbGV0IG5ld0xheWVyO1xuICAgIGxldCBuZXdEYXRhID0gbnVsbDtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBUcmlnZ2VyIGRhdGEgdXBkYXRlIGluIG9yZGVyIHRvIHNob3cgZXJyb3JzIGFnYWluIGlmIHByZXNlbnQuXG4gICAgICBjb25zdCB7bGF5ZXIsIGxheWVyRGF0YX0gPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJUb1VwZGF0ZSwgc3RhdGUsIHVuZGVmaW5lZCk7XG4gICAgICBuZXdMYXllciA9IGxheWVyO1xuICAgICAgbmV3RGF0YSA9IGxheWVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSBsYXllclRvVXBkYXRlLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBuZXdMYXllci5pc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2lkeCwgbGF5ZXI6IG5ld0xheWVyLCBsYXllckRhdGE6IG5ld0RhdGF9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKG5ld0ZpZWxkcywgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsID0gREVGQVVMVF9URVhUX0xBQkVMKSB7XG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBjb25zdCBjdXJyZW50RmllbGRzID0gdGV4dExhYmVsLm1hcCh0bCA9PiB0bC5maWVsZCAmJiB0bC5maWVsZC5uYW1lKS5maWx0ZXIoZCA9PiBkKTtcblxuICBjb25zdCBhZGRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKGYgPT4gIWN1cnJlbnRGaWVsZHMuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGNvbnN0IGRlbGV0ZUZpZWxkcyA9IGN1cnJlbnRGaWVsZHMuZmlsdGVyKGYgPT4gIW5ld0ZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGYpKTtcblxuICAvLyBkZWxldGVcbiAgbmV3VGV4dExhYmVsID0gbmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCAmJiAhZGVsZXRlRmllbGRzLmluY2x1ZGVzKHRsLmZpZWxkLm5hbWUpKTtcbiAgbmV3VGV4dExhYmVsID0gIW5ld1RleHRMYWJlbC5sZW5ndGggPyBbZGVmYXVsdFRleHRMYWJlbF0gOiBuZXdUZXh0TGFiZWw7XG5cbiAgLy8gYWRkXG4gIG5ld1RleHRMYWJlbCA9IFtcbiAgICAuLi5uZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkKSxcbiAgICAuLi5hZGRGaWVsZHMubWFwKGFmID0+ICh7XG4gICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgZmllbGQ6IGFmLFxuICAgICAgY29sbGlzaW9uRW5hYmxlZDogQm9vbGVhbihcbiAgICAgICAgdGV4dExhYmVsLmZpbmQodGwgPT4gdGwuY29sbGlzaW9uRW5hYmxlZCk/LmNvbGxpc2lvbkVuYWJsZWQgPz9cbiAgICAgICAgICBkZWZhdWx0VGV4dExhYmVsLmNvbGxpc2lvbkVuYWJsZWRcbiAgICAgIClcbiAgICB9KSlcbiAgXTtcblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgdGV4dExhYmVsKSB7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRleHRMYWJlbFtpZHhdLCBwcm9wKSkge1xuICAgIHJldHVybiB0ZXh0TGFiZWw7XG4gIH1cblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgaWYgKHByb3AgPT09ICdmaWVsZCcgJiYgdmFsdWUgPT09IG51bGwgJiYgdGV4dExhYmVsLmxlbmd0aCA+IDEpIHtcbiAgICAvLyByZW1vdmUgbGFiZWwgd2hlbiBmaWVsZCB2YWx1ZSBpcyBzZXQgdG8gbnVsbFxuICAgIG5ld1RleHRMYWJlbC5zcGxpY2UoaWR4LCAxKTtcbiAgfSBlbHNlIGlmIChwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCgodGwsIGkpID0+IChpID09PSBpZHggPyB7Li4udGwsIFtwcm9wXTogdmFsdWV9IDogdGwpKTtcbiAgfVxuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlkeCwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCB7dGV4dExhYmVsfSA9IG9sZExheWVyLmNvbmZpZztcblxuICAvLyB3aGVuIGFkZGluZyBhIG5ldyBlbXB0eSB0ZXh0IGxhYmVsLFxuICAvLyByZWx5IG9uIHRoZSBsYXllcidzIGRlZmF1bHQgY29uZmlnLCBvciB1c2UgdGhlIGNvbnN0YW50IERFRkFVTFRfVEVYVF9MQUJFTFxuICBjb25zdCBkZWZhdWx0VGV4dExhYmVsID1cbiAgICBvbGRMYXllci5nZXREZWZhdWx0TGF5ZXJDb25maWcoe2RhdGFJZDogJyd9KT8udGV4dExhYmVsPy5bMF0gPz8gREVGQVVMVF9URVhUX0xBQkVMO1xuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcbiAgaWYgKCF0ZXh0TGFiZWxbaWR4XSAmJiBpZHggPT09IHRleHRMYWJlbC5sZW5ndGgpIHtcbiAgICAvLyBpZiBpZHggaXMgc2V0IHRvIGxlbmd0aCwgYWRkIGVtcHR5IHRleHQgbGFiZWxcbiAgICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgICAuLi50ZXh0TGFiZWwsXG4gICAgICB7XG4gICAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICAgIGNvbGxpc2lvbkVuYWJsZWQ6IEJvb2xlYW4odGV4dExhYmVsWzBdPy5jb2xsaXNpb25FbmFibGVkKVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wID09PSAnZmllbGRzJykge1xuICAgIG5ld1RleHRMYWJlbCA9IGFkZE9yUmVtb3ZlVGV4dExhYmVscyh2YWx1ZSwgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsKTtcbiAgfSBlbHNlIGlmIChpZHggPT09ICdhbGwnICYmIHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKHRsID0+ICh7Li4udGwsIFtwcm9wXTogdmFsdWV9KSk7XG4gIH0gZWxzZSB7XG4gICAgbmV3VGV4dExhYmVsID0gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIG5ld1RleHRMYWJlbCk7XG4gIH1cbiAgLy8gdXBkYXRlIHRleHQgbGFiZWwgcHJvcCBhbmQgdmFsdWVcbiAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZzoge3RleHRMYWJlbDogbmV3VGV4dExhYmVsfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgbGF5ZXJDbGFzc2VzLCBsYXllciwgc2NoZW1hKSB7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIobGF5ZXIsIHNjaGVtYSk7XG4gIHJldHVybiBsb2FkZWRMYXllclxuICAgID8gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxvYWRlZExheWVyLCBsYXllckNsYXNzZXMsIHtcbiAgICAgICAgYWxsb3dFbXB0eUNvbHVtbjogdHJ1ZVxuICAgICAgfSlcbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGNvbmZpZyBkYXRhSWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBvbGRMYXllcjogTGF5ZXI7XG4gICAgbmV3Q29uZmlnOiB7XG4gICAgICBkYXRhSWQ6IHN0cmluZztcbiAgICB9O1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdDb25maWc7XG5cbiAgaWYgKCFvbGRMYXllciB8fCAhc3RhdGUuZGF0YXNldHNbZGF0YUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWR9KTtcblxuICAvLyB0aGlzIG1heSBoYXBwZW4gd2hlbiBhIGxheWVyIGlzIG5ldyAodHlwZTogbnVsbCBhbmQgbm8gY29sdW1ucykgYnV0IGl0J3Mgbm90IHJlYWR5IHRvIGJlIHNhdmVkXG4gIGlmIChuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICAgIHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0sXG4gICAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgICBuZXdMYXllcixcbiAgICAgIHN0YXRlLnNjaGVtYVxuICAgICk7XG4gICAgLy8gaWYgY2FudCB2YWxpZGF0ZSBpdCB3aXRoIGRhdGEgY3JlYXRlIGEgbmV3IG9uZVxuICAgIGlmICghdmFsaWRhdGVkKSB7XG4gICAgICBjb25zdCBvbGRMYXllclR5cGUgPSBvbGRMYXllci50eXBlO1xuICAgICAgaWYgKG9sZExheWVyVHlwZSkge1xuICAgICAgICBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbb2xkTGF5ZXJUeXBlXSh7ZGF0YUlkLCBpZDogb2xkTGF5ZXIuaWR9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSB2YWxpZGF0ZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlIChlLmcuIG1pc3NpbmcgY29sdW1ucyksIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvXG4gICAgLy8gcmVtYXAgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBuZXcgZGF0YXNldCB0byBhdm9pZCBzdGFsZSBmaWVsZCByZWZlcmVuY2VzXG4gICAgLy8gdGhhdCBwb2ludCB0byByb3dzIGJleW9uZCB0aGUgbmV3IGRhdGFzZXQncyBsZW5ndGhcbiAgICBjb25zdCBuZXdEYXRhc2V0RmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHM7XG4gICAgY29uc3QgcmVtYXBwZWRGaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQ6IGZpZWxkS2V5fSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEZpZWxkID0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkS2V5XTtcbiAgICAgIGlmIChjdXJyZW50RmllbGQpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZCA9IG5ld0RhdGFzZXRGaWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gY3VycmVudEZpZWxkLm5hbWUpO1xuICAgICAgICByZW1hcHBlZEZpZWxkc1tmaWVsZEtleV0gPSBtYXRjaGVkIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKE9iamVjdC5rZXlzKHJlbWFwcGVkRmllbGRzKS5sZW5ndGgpIHtcbiAgICAgIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcocmVtYXBwZWRGaWVsZHMpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBmaWVsZCB0eXBlIGNvbXBhdGliaWxpdHkg4oCUIGNsZWFycyBmaWVsZHMgd2hvc2UgdHlwZSBpcyBpbmNvbXBhdGlibGVcbiAgICAvLyB3aXRoIHRoZSBjaGFubmVsJ3Mgc3VwcG9ydGVkIGZpZWxkIHR5cGVzIChlLmcuIHN0cmluZyBmaWVsZCBmb3IgYSBudW1lcmljIHNjYWxlKVxuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtrZXl9KSA9PiB7XG4gICAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGlzVmlzaWJsZTogb2xkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZVxuICB9KTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5pdGlhbExheWVyQ29uZmlnKGxheWVyLCBkYXRhc2V0cywgbGF5ZXJDbGFzc2VzKTogTGF5ZXIge1xuICBsZXQgbmV3TGF5ZXIgPSBsYXllcjtcbiAgaWYgKCFPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoKSB7XG4gICAgLy8gbm8gZGF0YSBpcyBsb2FkZWRcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cbiAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgLy8gc2V0IGxheWVyIGRhdGFJZFxuICAgIG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogT2JqZWN0LmtleXMoZGF0YXNldHMpWzBdfSk7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvLyBmaW5kIGRlZmF1dCBsYXllciBwcm9wc1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgW10pXG4gICAgICA6IHtwcm9wczogW119O1xuXG4gIC8vIGFuIGFycmF5IG9mIHBvc3NpYmxlIHByb3BzLCB1c2UgMXN0IG9uZVxuICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcblxuICBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW2xheWVyLnR5cGVdKHtcbiAgICAgIC4uLnByb3BzWzBdLFxuICAgICAgbGFiZWw6IG5ld0xheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgIGRhdGFJZDogbmV3TGF5ZXIuY29uZmlnLmRhdGFJZCxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBuZXdMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgICBpc1Zpc2libGU6IG5ld0xheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgOiBuZXdMYXllcjtcbn1cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSh7XG4gICAgLy8ga2VlcCBvbGQgbGF5ZXIgbGFibGUgYW5kIGlzQ29uZmlnQWN0aXZlXG4gICAgbGFiZWw6IG9sZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogb2xkTGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgIGRhdGFJZDogb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICB9KTtcblxuICBpZiAoIW9sZExheWVyLnR5cGUpIHtcbiAgICAvLyBpZiBzZXR0aW5nIGxheWVyIHR5cGUgb24gYW4gZW1wdHkgbGF5ZXJcbiAgICBuZXdMYXllciA9IHNldEluaXRpYWxMYXllckNvbmZpZyhuZXdMYXllciwgc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAgIC8vIElmIHR5cGUgaGFzIGNoYW5nZWQgYnV0IGlkIGlzIHRoZSBzYW1lLCBpdCB3aWxsIGJyZWFrXG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9XG4gICAgICB0eXBlb2Ygc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoc3RhdGUuZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIG5ld0xheWVyLmFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgICBvbGRMYXllci5jb25maWcsXG4gICAgICBvbGRMYXllci52aXNDb25maWdTZXR0aW5ncyxcbiAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgZGVmYXVsdExheWVyUHJvcHNcbiAgICApO1xuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBvbGRMYXllci5pZCwgbmV3TGF5ZXIuaWQpXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIEJpbmQgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBkYXRhc2V0IGZpZWxkIG9mIHRoZSBzYW1lIG5hbWUuXG4gKiBgYWRkRGF0YVRvTWFwYCBhbmQgYGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZWAgb2Z0ZW4gcGFzcyBge25hbWUsIHR5cGV9YFxuICogb3IgcHJvY2Vzc29yIGZpZWxkcyB3aG9zZSB2YWx1ZUFjY2Vzc29yIGlzIG5vdCBib3VuZCB0byB0aGUgS2VwbGVyVGFibGUsIHdoaWNoXG4gKiBsZWF2ZXMgc3Ryb2tlQ29sb3JEb21haW4gYXQgYFswLCAxXWAgKGtlcGxlci5nbCAjMzA2MSkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldChcbiAgbmV3Q29uZmlnOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblsnbmV3Q29uZmlnJ10sXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlIHwgdW5kZWZpbmVkLFxuICB2aXN1YWxDaGFubmVsOiBMYXllclsndmlzdWFsQ2hhbm5lbHMnXVtzdHJpbmddIHwgdW5kZWZpbmVkXG4pIHtcbiAgaWYgKCFkYXRhc2V0IHx8ICF2aXN1YWxDaGFubmVsKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBpbmNvbWluZyA9IG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXTtcbiAgaWYgKCFpbmNvbWluZyB8fCB0eXBlb2YgaW5jb21pbmcgIT09ICdvYmplY3QnIHx8ICFpbmNvbWluZy5uYW1lKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBmb3VuZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gaW5jb21pbmcubmFtZSk7XG4gIGlmICghZm91bmQpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4ubmV3Q29uZmlnLFxuICAgIFt2aXN1YWxDaGFubmVsLmZpZWxkXTogZm91bmRcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdmlzdWFsIGNoYW5uZWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgY29uc3QgbmV3Q29uZmlnID0gcmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0KFxuICAgIGFjdGlvbi5uZXdDb25maWcsXG4gICAgZGF0YXNldCxcbiAgICBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXVxuICApO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZyk7XG4gIGlmIChuZXdWaXNDb25maWcpIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKTtcblxuICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCk7XG5cbiAgLy8gY2FsbGluZyB1cGRhdGUgYW5pbWF0aW9uIGRvbWFpbiBmaXJzdCB0byBtZXJnZSBhbGwgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHN0YXRlKTtcblxuICBjb25zdCB2aXN1YWxDaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gIGlmICh2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJiBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0pIHtcbiAgICAvLyBpZiBjb2xvciBmaWVsZCBjaGFuZ2VkLCBzZXQgY3VzdG9tQnJlYWtzIHRvIGZhbHNlXG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgbGF5ZXJzOiB1cGRhdGVkU3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG9sZExheWVyRGF0YSA9IHVwZGF0ZWRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCB1cGRhdGVkU3RhdGUsIG9sZExheWVyRGF0YSk7XG5cbiAgaWYgKFxuICAgIHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmXG4gICAgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWw/LnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCAmJlxuICAgICFuZXdWaXNDb25maWdcbiAgKSB7XG4gICAgLy8gd2hlbiBzd2l0Y2hpbmcgdG8gY3VzdG9tT3JkaW5hbCBzY2FsZSwgY3JlYXRlIGEgY3VzdG9tUGFsZXR0ZSBpbiBjb2xvclVJIHdpdGggdXBkYXRlZCBjb2xvckRvbWFpblxuICAgIGNvbnN0IGN1c3RvbVBhbGV0dGUgPSBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUoe1xuICAgICAgc2NhbGU6IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwsXG4gICAgICBmaWVsZDogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdLFxuICAgICAgb3JkaW5hbERvbWFpbjogbGF5ZXIuY29uZmlnW2xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdLmRvbWFpbl0sXG4gICAgICByYW5nZTogbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1t2aXN1YWxDaGFubmVsLnJhbmdlXSxcbiAgICAgIGNvbG9yQnJlYWtzOiBudWxsXG4gICAgfSk7XG4gICAgLy8gdXBkYXRlIGNvbG9yUmFuZ2Ugd2l0aCBuZXcgY3VzdG9tUGFsZXR0ZVxuICAgIGxheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBzaG93Q29sb3JDaGFydDogdHJ1ZSxcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiB0cnVlXG4gICAgICB9LFxuICAgICAgY3VzdG9tUGFsZXR0ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEodXBkYXRlZFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGB2aXNDb25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdWaXNDb25maWcpO1xuXG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IHtcbiAgICAuLi5vbGRMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIC4uLmFjdGlvbi5uZXdWaXNDb25maWdcbiAgfTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHt2aXNDb25maWc6IG5ld1Zpc0NvbmZpZ30pO1xuXG4gIC8vIEplbmtzIGJyZWFrcyBkZXBlbmQgb24gdGhlIG51bWJlciBvZiBjb2xvcnMuIFJlY2FsY3VsYXRlIHRoZSBkb21haW4gd2hlblxuICAvLyB0aGUgY29sb3IgcmFuZ2Ugb2YgYSBKZW5rcyBjaGFubmVsIGNoYW5nZXMuXG4gIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW29sZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICBPYmplY3Qua2V5cyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsS2V5ID0+IHtcbiAgICAgICAgY29uc3QgY2hhbm5lbCA9IG5ld0xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxLZXldO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hhbm5lbD8uc2NhbGUgJiZcbiAgICAgICAgICBuZXdMYXllci5jb25maWdbY2hhbm5lbC5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmplbmtzICYmXG4gICAgICAgICAgY2hhbm5lbC5yYW5nZSAmJlxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhY3Rpb24ubmV3VmlzQ29uZmlnLCBjaGFubmVsLnJhbmdlKVxuICAgICAgICApIHtcbiAgICAgICAgICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbEtleSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICAvLyBFeGNsdXNpdmUgYml0bWFwIGVkaXRpbmc6IHdoZW4gZWRpdEJvdW5kcyBpcyB0dXJuZWQgb24gZm9yIG9uZSBiaXRtYXAgbGF5ZXIsXG4gIC8vIHR1cm4gaXQgb2ZmIGZvciBhbGwgb3RoZXIgYml0bWFwIGxheWVyc1xuICBpZiAobmV3TGF5ZXIudHlwZSA9PT0gJ2JpdG1hcCcgJiYgYWN0aW9uLm5ld1Zpc0NvbmZpZy5lZGl0Qm91bmRzID09PSB0cnVlKSB7XG4gICAgbmV4dFN0YXRlID0ge1xuICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgbGF5ZXJzOiBuZXh0U3RhdGUubGF5ZXJzLm1hcCgobCwgaSkgPT4ge1xuICAgICAgICBpZiAoaSAhPT0gaWR4ICYmIGwudHlwZSA9PT0gJ2JpdG1hcCcgJiYgbC5jb25maWcudmlzQ29uZmlnLmVkaXRCb3VuZHMpIHtcbiAgICAgICAgICByZXR1cm4gbC51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICB2aXNDb25maWc6IHsuLi5sLmNvbmZpZy52aXNDb25maWcsIGVkaXRCb3VuZHM6IGZhbHNlfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBuZXh0U3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXh0U3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXI6IG5ld0xheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBSZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0byBhIHNwZWNpZmllZCB2YWx1ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyID0gPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7dmFsdWV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogUyA9PiB7XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlO1xuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBjdXJyZW50VGltZVxuICAgIH1cbiAgfTtcbiAgLy8gdXBkYXRlIGFuaW1hdGlvbiBjb25maWcgZm9yIGVhY2ggbGF5ZXJcbiAgcmV0dXJuIHN0YXRlLmxheWVycy5yZWR1Y2UoKGFjY3UsIGwpID0+IHtcbiAgICBpZiAobC5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgJiYgbC50eXBlICE9PSAndHJpcCcpIHtcbiAgICAgIHJldHVybiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIoYWNjdSwge29sZExheWVyOiBsLCBwcm9wOiAnY3VycmVudFRpbWUnLCBjdXJyZW50VGltZX0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdTtcbiAgfSwgbmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCBhY3Rpb24pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvd1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHtpZCwgYW5pbWF0aW9uV2luZG93fTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBpZCk7XG5cbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIGFuaW1hdGlvbldpbmRvd1xuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIGNvbnN0IG5ld1N5bmNUaW1lbGluZU1vZGUgPSBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKTtcblxuICByZXR1cm4gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtpZCwgbW9kZTogbmV3U3luY1RpbWVsaW5lTW9kZX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmlsdGVySWQsIG5ld0ZpbHRlcn0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBTZXJpYWxpemUgdGhlIGZpbHRlcnMgdG8gb25seSBjb21wYXJlIHRoZSBzYXZlZCBwcm9wZXJ0aWVzXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIob2xkRmlsdGVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0ZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihuZXdGaWx0ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0ZpbHRlciB8fCBpc0VxdWFsKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGFueSBjaGFuZ2VzIHRvIHRoZSBmaWx0ZXIsIGFwcGx5IHRoZW1cbiAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcik7XG4gIGRlbGV0ZSBjaGFuZ2VkWydpZCddOyAvLyBpZCBzaG91bGQgbm90IGJlIGNoYW5nZWRcblxuICBjb25zdCBmaWx0ZXJJbmRleCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKFxuICAgIHN0YXRlLFxuICAgIHNldEZpbHRlcihmaWx0ZXJJbmRleCwgT2JqZWN0LmtleXMoY2hhbmdlZCksIE9iamVjdC52YWx1ZXMoY2hhbmdlZCkpXG4gICk7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlclVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCB7aWR4LCB2YWx1ZUluZGV4ID0gMH0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApICYmXG4gICAgKCFBcnJheS5pc0FycmF5KGFjdGlvbi52YWx1ZSkgfHwgYWN0aW9uLnByb3AubGVuZ3RoICE9PSBhY3Rpb24udmFsdWUubGVuZ3RoKVxuICApIHtcbiAgICBDb25zb2xlLmVycm9yKCdFeHBlY3RpbmcgdmFsdWUgdG8gYmUgYW4gYXJyYXkgb2YgdGhlIHNhbWUgbGVuZ3RoLCBzaW5jZSBwcm9wIGlzIGFuIGFycmF5Jyk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGNvbnZlcnQgcHJvcCBhbmQgdmFsdWUgdG8gYXJyYXlcbiAgY29uc3QgcHJvcHMgPSB0b0FycmF5KGFjdGlvbi5wcm9wKTtcbiAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgPyB0b0FycmF5KGFjdGlvbi52YWx1ZSkgOiBbYWN0aW9uLnZhbHVlXTtcblxuICBsZXQgbmV3RmlsdGVyID0gb2xkRmlsdGVyO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcHJvcCA9IHByb3BzW2ldO1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuICAgIC8vIFdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBwYXNzaW5nIGluIG5hbWUgYXMgYW4gYXJyYXkgaW50byBfdXBkYXRlRmlsdGVyUHJvcCwgc28gd2UgY2FsbCBpdCBtdWx0aXBsZSB0aW1lcyB3aXRoIGVhY2ggbmFtZVxuICAgIC8vIFNlZSB0aGUgY29tbWVudCBpbiB0aGVyZSBhcyB0byB3aGF0IHNob3VsZCBiZSBhZGRyZXNzZWRcbiAgICBsZXQgcmVzO1xuICAgIGlmIChwcm9wID09PSAnbmFtZScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIHJlcyA9IHZhbHVlLnJlZHVjZSgoYWNjdSwgdikgPT4ge1xuICAgICAgICByZXR1cm4gX3VwZGF0ZUZpbHRlclByb3AoYWNjdSwgbmV3RmlsdGVyLCBwcm9wLCB2LCB2YWx1ZUluZGV4KTtcbiAgICAgIH0sIG5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gX3VwZGF0ZUZpbHRlclByb3AobmV3U3RhdGUsIG5ld0ZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgpO1xuICAgIH1cbiAgICBuZXdGaWx0ZXIgPSByZXMuZmlsdGVyO1xuICAgIG5ld1N0YXRlID0gcmVzLnN0YXRlO1xuICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGRhdGFzZXRJZHNUb0ZpbHRlci5jb25jYXQocmVzLmRhdGFzZXRJZHNUb0ZpbHRlcik7XG4gIH1cblxuICBjb25zdCBlbmxhcmdlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYudmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQpO1xuXG4gIGlmIChlbmxhcmdlZEZpbHRlciAmJiBlbmxhcmdlZEZpbHRlci5pZCAhPT0gbmV3RmlsdGVyLmlkKSB7XG4gICAgLy8gdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGVubGFyZ2VkIGZpbHRlclxuICAgIG5ld0ZpbHRlci52aWV3ID0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcbiAgfVxuXG4gIC8vIHNhdmUgbmV3IGZpbHRlcnMgdG8gbmV3U3RhdGVcbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgbmV3RmlsdGVyLCBuZXdTdGF0ZSk7XG5cbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgdW5pcShkYXRhc2V0SWRzVG9GaWx0ZXIpLFxuICAgIG5ld1N0YXRlLmRhdGFzZXRzLFxuICAgIG5ld1N0YXRlLmZpbHRlcnMsXG4gICAgbmV3U3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG5cbiAgLy8gbmVlZCB0byB1cGRhdGUgZmlsdGVyUGxvdCBhZnRlciBmaWx0ZXIgRGF0YXNldCBmb3IgcGxvdCB0byB1cGRhdGUgb24gZmlsdGVyZWQgcmVzdWx0XG4gIGNvbnN0IGZpbHRlcldpdGhQTG90ID0gdXBkYXRlRmlsdGVyUGxvdChuZXdTdGF0ZS5kYXRhc2V0cywgbmV3U3RhdGUuZmlsdGVyc1tpZHhdKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBmaWx0ZXJXaXRoUExvdCwgbmV3U3RhdGUpO1xuXG4gIC8vIGRhdGFJZCBpcyBhbiBhcnJheVxuICAvLyBwYXNzIG9ubHkgdGhlIGRhdGFzZXQgd2UgbmVlZCB0byB1cGRhdGVcbiAgbmV3U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFzZXRJZHNUb0ZpbHRlciwgbmV3RmlsdGVyKTtcblxuICAvLyBJZiB0aW1lIHJhbmdlIGZpbHRlciB2YWx1ZSB3YXMgdXBkYXRlZCwgYWRqdXN0IGFuaW1hdGlvbiBjb25maWdcbiAgaWYgKG5ld0ZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmIHByb3BzLmluY2x1ZGVzKCd2YWx1ZScpKSB7XG4gICAgbmV3U3RhdGUgPSBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBhY3Rpb24uaWR4KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBkYXRhc2V0cykge1xuICBsZXQgbmV3RmlsdGVyID0gZmlsdGVyO1xuICBpZiAoZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XSkge1xuICAgIC8vIGlmIGRhdGFJZCBhbHJlYWR5IGV4aXN0XG4gICAgbmV3RmlsdGVyID0gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKTtcbiAgfVxuICBpZiAodmFsdWUpIHtcbiAgICBjb25zdCBuZXh0VmFsdWUgPSBuZXdGaWx0ZXIuZGF0YUlkLnNsaWNlKCk7XG4gICAgbmV4dFZhbHVlW3ZhbHVlSW5kZXhdID0gdmFsdWU7XG4gICAgbmV3RmlsdGVyID0gc2V0KFsnZGF0YUlkJ10sIG5leHRWYWx1ZSwgbmV3RmlsdGVyKTtcbiAgfVxuICByZXR1cm4gbmV3RmlsdGVyO1xufVxuXG5mdW5jdGlvbiBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpIHtcbiAgY29uc3QgZGF0YUlkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcblxuICBpZiAoZmlsdGVyLmRhdGFJZC5sZW5ndGggPT09IDEgJiYgdmFsdWVJbmRleCA9PT0gMCkge1xuICAgIC8vIGlmIHJlbW92ZSB0aGUgb25seSBkYXRhSWQsIGNyZWF0ZSBhbiBlbXB0eSBmaWx0ZXIgaW5zdGVhZDtcbiAgICByZXR1cm4gZ2V0RGVmYXVsdEZpbHRlcih7aWQ6IGZpbHRlci5pZH0pO1xuICB9XG5cbiAgaWYgKGRhdGFJZCkge1xuICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhSWQpO1xuICB9XG5cbiAgZm9yIChjb25zdCBwcm9wIG9mIFtcbiAgICAnZGF0YUlkJyxcbiAgICAnbmFtZScsXG4gICAgJ2ZpZWxkSWR4JyxcbiAgICAnZ3B1Q2hhbm5lbCcsXG4gICAgJ2VuZE5hbWUnLFxuICAgICdlbmRGaWVsZElkeCcsXG4gICAgJ2VuZE1hcHBlZFZhbHVlJyxcbiAgICAnZ3B1RW5kQ2hhbm5lbCdcbiAgXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltwcm9wXSkpIHtcbiAgICAgIGNvbnN0IG5leHRWYWwgPSBmaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgIG5leHRWYWwuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dFZhbCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZUZpZWxkRG9tYWluIGZvciB0aGUgcmVtYWluaW5nIGZpZWxkc1xuICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC8vIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHM/LmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHM/LnN0ZXB9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXh0RmlsdGVyLnZhbHVlLCBuZXh0RmlsdGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgfTtcbn1cblxuLyoqICpcbiAqIFVwZGF0ZXMgYSBzaW5nbGUgcHJvcGVydHkgb2YgYSBmaWx0ZXJcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlclByb3Aoc3RhdGUsIGZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgsIGRhdGFzZXRJZHM/KSB7XG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocHJvcCkge1xuICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGlmIHdlIHVwZGF0ZSBmaWx0ZXJEYXRhSWQsIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIGNhc2VzOlxuICAgIC8vIDEuIGRhdGFJZCBpcyBlbXB0eTogY3JlYXRlIGEgZGVmYXVsdCBmaWx0ZXJcbiAgICAvLyAyLiBBZGQgYSBuZXcgZGF0YXNldCBpZFxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZGF0YUlkOiB7XG4gICAgICBjb25zdCBvbGREYXRhSWQgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBmaWx0ZXIgPSBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVuaXEoWy4uLm9sZERhdGFJZCwgLi4uZmlsdGVyLmRhdGFJZF0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubmFtZToge1xuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IHZhbHVlSW5kZXggPiAwfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZW5kTmFtZToge1xuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICBmaWx0ZXIgPSBmaWx0ZXIuZ3B1XG4gICAgICAgICAgPyBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycylcbiAgICAgICAgICA6IHsuLi5maWx0ZXIsIGdwdUNoYW5uZWw6IHVuZGVmaW5lZCwgZ3B1RW5kQ2hhbm5lbDogdW5kZWZpbmVkfTtcbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5sYXllcklkOiB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSBvbmx5IGRhdGFzZXRJZC9zIGlmIHdlIGhhdmUgYWRkZWQvcmVtb3ZlZCBsYXllcnNcbiAgICAgIC8vIC0gY2hlY2sgZm9yIGxheWVySWQgY2hhbmdlcyAoWE9SIHdvcmtzIGJlY2F1c2Ugb2Ygc3RyaW5nIHZhbHVlcylcbiAgICAgIC8vIGlmIG5vIGRpZmZlcmVuY2VzIGJldHdlZW4gbGF5ZXJJZHMsIGRvbid0IGRvIGFueSBmaWx0ZXJpbmdcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGxheWVySWREaWZmZXJlbmNlID0geG9yKHZhbHVlLCBmaWx0ZXIubGF5ZXJJZCk7XG5cbiAgICAgIGNvbnN0IGxheWVyRGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgbGF5ZXJJZERpZmZlcmVuY2VcbiAgICAgICAgICAubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgLy8gb25seSBmaWx0ZXIgZGF0YXNldHNJZHNcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGxheWVyRGF0YUlkcztcblxuICAgICAgLy8gVXBkYXRlIG5ld0ZpbHRlciBkYXRhSWRzXG4gICAgICBjb25zdCBuZXdEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICB2YWx1ZVxuICAgICAgICAgID8ubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgZmlsdGVyID0ge1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGxheWVySWQ6IHZhbHVlLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZHNcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgdmFsdWUsIGZpbHRlcik7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB7ZmlsdGVyLCBkYXRhc2V0SWRzLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIHN0YXRlfTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJQbG90VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBuZXdQcm9wfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclBsb3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUuZmlsdGVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVyc1ske2lkeH1dIGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGZvciAoY29uc3QgcHJvcCBpbiBuZXdQcm9wKSB7XG4gICAgaWYgKHByb3AgPT09ICdwbG90VHlwZScpIHtcbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyhuZXdQcm9wLnBsb3RUeXBlKSkobmV3RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgPT09ICd5QXhpcycpIHtcbiAgICAgIGNvbnN0IGNoYXJ0VHlwZSA9IG5ld1Byb3AueUF4aXMgPyBQTE9UX1RZUEVTLmxpbmVDaGFydCA6IFBMT1RfVFlQRVMuaGlzdG9ncmFtO1xuXG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8oe3R5cGU6IGNoYXJ0VHlwZX0pKShtZXJnZV8obmV3UHJvcCkobmV3RmlsdGVyKSk7XG4gICAgfVxuICB9XG5cbiAgbmV3RmlsdGVyID0gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVyKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gaWR4ID8gbmV3RmlsdGVyIDogZikpXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gICFhY3Rpb24uZGF0YUlkXG4gICAgPyBzdGF0ZVxuICAgIDoge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIGdldERlZmF1bHRGaWx0ZXIoe2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgaWQ6IGFjdGlvbi5pZH0pXVxuICAgICAgfTtcblxuLyoqXG4gKiBDcmVhdGUgb3IgdXBkYXRlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIGRhdGFJZCwgZmllbGQsIHZhbHVlfSA9IGFjdGlvbjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWxJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gaWQpO1xuICBsZXQgZmlsdGVySW5kZXggPSBvcmlnaW5hbEluZGV4O1xuICBpZiAoIWlkICYmICFkYXRhSWQpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cbiAgaWYgKG9yaWdpbmFsSW5kZXggPCAwICYmIGRhdGFJZCkge1xuICAgIG5ld1N0YXRlID0gYWRkRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZH0pO1xuICAgIGlmIChuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAhPT0gc3RhdGUuZmlsdGVycy5sZW5ndGggKyAxKSB7XG4gICAgICAvLyBObyBuZXcgZmlsdGVyIHdhcyBhZGRlZFxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICAvLyBIZXJlIHdlIGFyZSBhc3N1bWluZyB0aGF0IHRoZSBmaWx0ZXIgd2FzIGFkZGVkIGF0IHRoZSBlbmRcbiAgICBmaWx0ZXJJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoIC0gMTtcbiAgICBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdLFxuICAgICAgLi4uKGlkID8ge2lkfSA6IG51bGwpXG4gICAgfTtcbiAgfVxuXG4gIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHRoaXMgaWYgaXQncyBhIG5ld2x5IGNyZWF0ZWQgZmlsdGVyXG4gIC8vIEZpcnN0IHdlIG1ha2Ugc3VyZSBhbGwgdGhlIGRhdGFJZHMgdGhhdCBmaWVsZHMgcmVmZXIgdG8gYXJlIHVwZGF0ZWRcbiAgaWYgKG9yaWdpbmFsSW5kZXggPj0gMCAmJiBkYXRhSWQpIHtcbiAgICAvLyBJZiB0aGUgZGF0YUlkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIG9uZSBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZGF0YUlkKSA/IGRhdGFJZCA6IFtkYXRhSWRdKS5yZWR1Y2UoKGFjY3UsIGQsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICdkYXRhSWQnLFxuICAgICAgICB2YWx1ZTogZCxcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgZmllbGRzXG4gIGlmIChmaWVsZCkge1xuICAgIC8vIElmIHRoZSBmaWVsZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBmaWVsZCBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZmllbGQpID8gZmllbGQgOiBbZmllbGRdKS5yZWR1Y2UoKGFjY3UsIGYsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICduYW1lJyxcbiAgICAgICAgdmFsdWU6IGYsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIHZhbHVlIHNlcGFyYXRlbHlcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlckluZGV4LCBwcm9wOiAndmFsdWUnLCB2YWx1ZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBTZXQgbGF5ZXIgY29sb3IgcGFsZXR0ZSB1aSBzdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29sZExheWVyLCBwcm9wLCBuZXdDb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBvbGRWaXhDb25maWcgPSBvbGRMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29sb3JVSShwcm9wLCBuZXdDb25maWcpO1xuICBjb25zdCBuZXdWaXNDb25maWcgPSBuZXdMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBpZiAob2xkVml4Q29uZmlnICE9PSBuZXdWaXNDb25maWcpIHtcbiAgICByZXR1cm4gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld1Zpc0NvbmZpZzoge1xuICAgICAgICBbcHJvcF06IG5ld1Zpc0NvbmZpZ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgfTtcbn07XG5cbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIGlzQW5pbWF0aW5nOiAhZi5pc0FuaW1hdGluZ30gOiBmKSlcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnOiBBbmltYXRpb25Db25maWcgfCBGaWx0ZXJBbmltYXRpb25Db25maWcpOiBib29sZWFuIHtcbiAgcmV0dXJuICdkYXRhSWQnIGluIGNvbmZpZyAmJiAnYW5pbWF0aW9uV2luZG93JyBpbiBjb25maWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbmltYXRpb25Db25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG4gIGlmIChpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWcpKSB7XG4gICAgLy8gRmluZCBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uXG4gICAgLy8gQXNzdW1pbmcgdGhlcmUncyBvbmx5IG9uZSBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uLCBzZWUgc2V0RmlsdGVyVmlld1VwZGF0ZXJcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiAhaXNTaWRlRmlsdGVyKGYpKTtcbiAgICBpZiAoIWZpbHRlcikge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICBjb25zdCBuZXdGaWx0ZXIgPSB7Li4uZmlsdGVyLCAuLi5jb25maWd9O1xuICAgIHJldHVybiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoc3RhdGUsIGFwcGx5RmlsdGVyQ29uZmlnKGZpbHRlci5pZCwgbmV3RmlsdGVyKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uY29uZmlnXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaXNBbmltYXRpbmc6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaXNBbmltYXRpbmdcbiAgfVxufSk7XG5cbi8qKlxuICogSGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBoaWRlQ29udHJvbDogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5oaWRlQ29udHJvbFxuICB9XG59KTtcblxuLyoqXG4gKiBDaGFuZ2UgZmlsdGVyIGFuaW1hdGlvbiBzcGVlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgc3BlZWQ6IGFjdGlvbi5zcGVlZH0gOiBmKSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBhbmltYXRpb24gc3BlZWQgd2l0aCB0aGUgdmVydGljYWwgc3BlZWQgc2xpZGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtzcGVlZH06IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgc3BlZWRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJWaWV3VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJWaWV3VXBkYXRlckFjdGlvblxuKSA9PiB7XG4gIGNvbnN0IHt2aWV3LCBpZHh9ID0gYWN0aW9uO1xuICBjb25zdCBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXcgPSB2aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZDtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT5cbiAgICAgIGkgPT09IGlkeFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3XG4gICAgICAgICAgfVxuICAgICAgICA6IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlXG4gICAgICAgICAgfVxuICAgICAgICA6IGZcbiAgICApXG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZXMgZmlsdGVyIGZlYXR1cmUgdmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbYWN0aW9uLmlkeF07XG4gIGNvbnN0IGlzVmlzaWJsZSA9IGdldChmaWx0ZXIsIFsndmFsdWUnLCAncHJvcGVydGllcycsICdpc1Zpc2libGUnXSk7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAnZW5hYmxlZCcsXG4gICAgdmFsdWU6ICFpc1Zpc2libGVcbiAgfSk7XG5cbiAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZpbHRlci52YWx1ZSwgZmlsdGVyLmlkLCB7XG4gICAgICBpc1Zpc2libGU6ICFpc1Zpc2libGVcbiAgICB9KVxuICB9KTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZCwgaWR9ID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBbXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZSgwLCBpZHgpLFxuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoaWR4ICsgMSwgc3RhdGUuZmlsdGVycy5sZW5ndGgpXG4gIF07XG5cbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoZGF0YUlkLCBzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVycywgc3RhdGUubGF5ZXJzKTtcbiAgY29uc3QgbmV3RWRpdG9yID1cbiAgICBnZXRGaWx0ZXJJZEluRmVhdHVyZShzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlKSA9PT0gaWRcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZS5lZGl0b3I7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycyddLCBuZXdGaWx0ZXJzLCBzdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2VkaXRvciddLCBuZXdFZGl0b3IsIG5ld1N0YXRlKTtcblxuICByZXR1cm4gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhSWQsIHVuZGVmaW5lZCk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IG5ld0xheWVyO1xuICBsZXQgbmV3TGF5ZXJEYXRhO1xuICBpZiAoYWN0aW9uLmNvbmZpZykge1xuICAgIG5ld0xheWVyID0gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlLCBhY3Rpb24uY29uZmlnKTtcbiAgICBpZiAoIW5ld0xheWVyKSB7XG4gICAgICBDb25zb2xlLndhcm4oXG4gICAgICAgICdGYWlsZWQgdG8gY3JlYXRlIGxheWVyIGZyb20gY29uZmlnLCBpdCB1c3VhbGx5IG1lYW5zIHRoZSBjb25maWcgaXMgbm90IGJlIGluIGNvcnJlY3QgZm9ybWF0JyxcbiAgICAgICAgYWN0aW9uLmNvbmZpZ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlKTtcbiAgICBuZXdMYXllciA9IHJlc3VsdC5sYXllcjtcbiAgICBuZXdMYXllckRhdGEgPSByZXN1bHQubGF5ZXJEYXRhO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBsYXllciB3aXRoIGEgc3BlY2lmaWMgZGF0YXNldCBvciBhIGRlZmF1bHQgb25lXG4gICAgY29uc3QgZGVmYXVsdERhdGFzZXQgPSBhY3Rpb24uZGF0YXNldElkID8/IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKVswXTtcbiAgICBuZXdMYXllciA9IG5ldyBMYXllcih7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRhdGFJZDogZGVmYXVsdERhdGFzZXRcbiAgICB9KTtcbiAgICBuZXdMYXllckRhdGEgPSB7fTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIG5ld0xheWVyXSxcbiAgICBsYXllckRhdGE6IFsuLi5zdGF0ZS5sYXllckRhdGEsIG5ld0xheWVyRGF0YV0sXG4gICAgLy8gYWRkIG5ldyBsYXllciBhdCB0aGUgdG9wXG4gICAgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkLCAuLi5zdGF0ZS5sYXllck9yZGVyXSxcbiAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcilcbiAgfTtcblxuICBpZiAobmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiByZW1vdmUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMYXllclVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAvLyBpbnZhbGlkIGluZGV4XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBsYXllciB3aXRoIGludmFsaWQgaWR8aWR4ICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVycywgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG4gIGNvbnN0IGxheWVyVG9SZW1vdmUgPSBsYXllcnNbaWR4XTtcbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBmaWx0ZXJPdXRCeUlkKGxheWVyVG9SZW1vdmUuaWQpKGxheWVycyksXG4gICAgbGF5ZXJEYXRhOiByZW1vdmVFbGVtZW50QXRJbmRleChpZHgpKGxheWVyRGF0YSksXG4gICAgbGF5ZXJPcmRlcjogcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyT3JkZXIsIGxheWVyVG9SZW1vdmUuaWQpLFxuICAgIGNsaWNrZWQ6IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvLFxuICAgIHNwbGl0TWFwczogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXJUb1JlbW92ZSlcbiAgICAvLyBUT0RPOiB1cGRhdGUgZmlsdGVycywgY3JlYXRlIGhlbHBlciB0byByZW1vdmUgbGF5ZXIgZm9ybSBmaWx0ZXIgKHJlbW92ZSBsYXllcmlkIGFuZCBkYXRhaWQpIGlmIG1hcHBlZFxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4oXG4gICAgcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhcbiAgICAgIG5ld1N0YXRlLFxuICAgICAgY2hhcnQgPT4gaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0KSAmJiBjaGFydC5sYXllcklkID09PSBsYXllclRvUmVtb3ZlLmlkXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIFJlb3JkZXIgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJPcmRlcjogb3JkZXJcbn0pO1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXROZXdMYXllckdyb3VwKGFjdGlvbik7XG4gIGxldCBuZXdMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIGlmIChhY3Rpb24ubGF5ZXJPcmRlcikge1xuICAgIGFjdGlvbi5sYXllck9yZGVyLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgICBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVySWQgYXMgc3RyaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVyR3JvdXApXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGdyb3VwIGFuZCBhbGwgbGF5ZXJzIHdpdGhpbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXBUb1JlbW92ZSA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cFRvUmVtb3ZlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbGF5ZXJJZHNUb1JlbW92ZSA9IGdldEZsYXRMYXllck9yZGVyKGxheWVyR3JvdXBUb1JlbW92ZS5sYXllck9yZGVyKTtcbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBsYXllcklkc1RvUmVtb3ZlLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+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+IGV4aXN0aW5nLmlkID09PSBjaGFydC5pZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHM6IFtcbiAgICAgIC4uLihzdGF0ZS5jaGFydHMgfHwgW10pLm1hcChleGlzdGluZyA9PiAoe1xuICAgICAgICAuLi5leGlzdGluZyxcbiAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgIC4uLmV4aXN0aW5nLmRpc3BsYXksXG4gICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pKSxcbiAgICAgIHtcbiAgICAgICAgLi4uY2hhcnQsXG4gICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAuLi5jaGFydC5kaXNwbGF5LFxuICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBjaGFydC5kaXNwbGF5Py5pc0NvbmZpZ0FjdGl2ZSA/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+IGEuaWQgIT09IGlkKSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgPT09IGlkID8gbnVsbCA6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OlxuICAgICAgc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgPT09IGlkID8gZmFsc2UgOiBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgY29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmFubm90YXRpb25zLmZpbmRJbmRleChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDApIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGFubm90YXRpb24gd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHByZXYgPSBzdGF0ZS5hbm5vdGF0aW9uc1tpZHhdO1xuICBsZXQgbmV4dEFubm90YXRpb246IEFubm90YXRpb247XG5cbiAgaWYgKGNvbmZpZy5raW5kICYmIGNvbmZpZy5raW5kICE9PSBwcmV2LmtpbmQpIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb25Qcm9wc1BhcnRpYWwpO1xuICB9IGVsc2Uge1xuICAgIG5leHRBbm5vdGF0aW9uID0gey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvbjtcbiAgfVxuXG4gIGNvbnN0IG5ld0Fubm90YXRpb25zID0gWy4uLnN0YXRlLmFubm90YXRpb25zXTtcbiAgbmV3QW5ub3RhdGlvbnNbaWR4XSA9IG5leHRBbm5vdGF0aW9uO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBuZXdBbm5vdGF0aW9uc1xuICB9O1xufTtcblxuLyoqXG4gKiBEdXBsaWNhdGUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBvcmlnaW5hbCA9IHN0YXRlLmFubm90YXRpb25zLmZpbmQoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmICghb3JpZ2luYWwpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgZHVwbGljYXRlIGFubm90YXRpb24gd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0Fubm90YXRpb24gPSB7XG4gICAgLi4uY2xvbmVEZWVwKG9yaWdpbmFsKSxcbiAgICBpZDogZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAgbGFiZWw6IGBDb3B5IG9mICR7b3JpZ2luYWwubGFiZWx9YFxuICB9O1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBTZXQgc2VsZWN0ZWQgYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBpc0VkaXRpbmdUZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGlkID09PSBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCAmJlxuICAgIChpc0VkaXRpbmdUZXh0ID8/IGZhbHNlKSA9PT0gc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IGlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBpc0VkaXRpbmdUZXh0ID8/IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGRhdGFzZXQgYW5kIGFsbCBsYXllcnMsIGZpbHRlcnMsIHRvb2x0aXAgY29uZmlncyB0aGF0IGJhc2VkIG9uIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGF0YXNldFVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgLy8gZXh0cmFjdCBkYXRhc2V0IGtleVxuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgcHJlc2VudFxuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGF0YXNldHM6IHtbZGF0YXNldEtleV06IGRhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBsYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0S2V5KS5tYXAobCA9PiBsLmlkKTtcblxuICAvLyByZW1vdmUgbGF5ZXJzIGFuZCBkYXRhc2V0c1xuICBsZXQgbmV3U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHNcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGZpbHRlcnNcbiAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgbmV3U3RhdGUuZmlsdGVycykge1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YXNldEtleSk7XG4gICAgaWYgKHZhbHVlSW5kZXggPj0gMCAmJiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIG9ubHkgcmVtb3ZlIG9uZSBzeW5jZWQgZGF0YXNldCBmcm9tIHRoZSBmaWx0ZXJcbiAgICAgIGZpbHRlcnMucHVzaChfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlSW5kZXggPCAwKSB7XG4gICAgICAvLyBsZWF2ZSB0aGUgZmlsdGVyIGFzIGlzXG4gICAgICBmaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMoXG4gICAgcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhuZXdTdGF0ZSwge2RhdGFJZDogZGF0YXNldEtleX0pLFxuICAgIGNoYXJ0ID0+IHtcbiAgICAgIGlmIChjaGFydC5kYXRhSWQgPT09IGRhdGFzZXRLZXkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0KSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJzVG9SZW1vdmUuaW5jbHVkZXMoY2hhcnQubGF5ZXJJZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKHN0YXRlLCB7ZGF0YUlkfSkge1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtbZGF0YUlkXTogZmllbGRzLCAuLi5maWVsZHNUb1Nob3d9ID0gY29uZmlnLmZpZWxkc1RvU2hvdztcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9O1xufVxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIHVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBvdmVybGF5QmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdGluZ0RhdGFzZXQ6IGFjdGlvbi5kYXRhSWRcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGN1c3RvbSBjb2xvciBmb3IgZGF0YXNldHMgYW5kIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRDb2xvclVwZGF0ZXJcbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7Y29sb3I6IGFjdGlvbi5uZXdDb2xvcn19KTtcbn07XG5cbi8qKlxuICogcmVzZXQgdmlzU3RhdGUgdG8gaW5pdGlhbCBTdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2V0TWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnID8gcmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBoYXNQcm9wc1RvTWVyZ2UoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCkpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKFxuICAgICAgICBtZXJnZWRTdGF0ZSxcbiAgICAgICAgZ2V0UHJvcFZhbHVlVG9NZXJnZXIoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCwgbWVyZ2VyLnRvTWVyZ2VQcm9wKSxcbiAgICAgICAgLy8gZnJvbUNvbmZpZ1xuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJIb3ZlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckhvdmVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGhvdmVySW5mbzoge1xuICAgIC8vIGRlY2suZ2wgaW5mbyBpcyBtdXRhYmxlXG4gICAgLi4uYWN0aW9uLmluZm8sXG4gICAgLi4uKE51bWJlci5pc0Zpbml0ZShhY3Rpb24ubWFwSW5kZXgpID8ge21hcEluZGV4OiBhY3Rpb24ubWFwSW5kZXh9IDoge30pXG4gIH1cbn0pO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogVXBkYXRlIGBpbnRlcmFjdGlvbkNvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgIC4uLntbY29uZmlnLmlkXTogY29uZmlnfVxuICB9O1xuXG4gIC8vIERvbid0IGVuYWJsZSB0b29sdGlwIGFuZCBicnVzaCBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIGJ1dCBjb29yZGluYXRlcyBjYW4gYmUgc2hvd24gYXQgYWxsIHRpbWVcbiAgY29uc3QgY29udHJhZGljdCA9IFsnYnJ1c2gnLCAndG9vbHRpcCddO1xuXG4gIGlmIChcbiAgICBjb250cmFkaWN0LmluY2x1ZGVzKGNvbmZpZy5pZCkgJiZcbiAgICBjb25maWcuZW5hYmxlZCAmJlxuICAgICFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1tjb25maWcuaWRdLmVuYWJsZWRcbiAgKSB7XG4gICAgLy8gb25seSBlbmFibGUgb25lIGludGVyYWN0aW9uIGF0IGEgdGltZVxuICAgIGNvbnRyYWRpY3QuZm9yRWFjaChrID0+IHtcbiAgICAgIGlmIChrICE9PSBjb25maWcuaWQpIHtcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdba10gPSB7Li4uaW50ZXJhY3Rpb25Db25maWdba10sIGVuYWJsZWQ6IGZhbHNlfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJyAmJiAhY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gcmVtb3ZlRGF0YXNldFVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWQ6ICdnZW9jb2Rlcl9kYXRhc2V0J30pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtb3VzZVBvczogc3RhdGUuaW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICBwaW5uZWQ6IHN0YXRlLm1vdXNlUG9zLnBpbm5lZCA/IG51bGwgOiBjbG9uZURlZXAoc3RhdGUubW91c2VQb3MpXG4gICAgICB9XG4gICAgOiBzdGF0ZS5tb3VzZVBvcyxcbiAgY2xpY2tlZDogYWN0aW9uLmluZm8gJiYgYWN0aW9uLmluZm8ucGlja2VkID8gYWN0aW9uLmluZm8gOiBudWxsXG59KTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBjbGljayBldmVudCwgdW5zZWxlY3QgY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Pbk1hcENsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1vdXNlTW92ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2V2dH06IFZpc1N0YXRlQWN0aW9ucy5Pbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQucG9pbnQpID8ge21vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdfSA6IHt9KSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LmxuZ0xhdCkgPyB7Y29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGZvciBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzLCB7ZHVwbGljYXRlOiBmYWxzZX0pXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttYXBJbmRleCwgbGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3NwbGl0TWFwc30gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcCgoc20sIGkpID0+XG4gICAgICBpID09PSBtYXBJbmRleFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXSxcbiAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0ubGF5ZXJzLFxuICAgICAgICAgICAgICAvLyBpZiBsYXllcklkIG5vdCBpbiBsYXllcnMsIHNldCBpdCB0byB2aXNpYmxlXG4gICAgICAgICAgICAgIFtsYXllcklkXTogIXNwbGl0TWFwc1tpXS5sYXllcnNbbGF5ZXJJZF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc21cbiAgICApXG4gIH07XG59O1xuXG5mdW5jdGlvbiBoYXNUYWJ1bGFyRGF0YXNldERhdGEoZGF0YT86IFByb3RvRGF0YXNldFsnZGF0YSddIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBkYXRhPy5yb3dzPy5sZW5ndGggfHwgZGF0YT8uY29scz8ubGVuZ3RoIHx8IChkYXRhIGFzIHthcnJvd1RhYmxlPzogdW5rbm93bn0pPy5hcnJvd1RhYmxlXG4gICk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldDogUHJvdG9EYXRhc2V0KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZGF0YXNldC5pbmZvPy50eXBlID09PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCAmJlxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgPT09ICdzdHJpbmcnICYmXG4gICAgIWhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhc2V0LmRhdGEpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0KGRhdGFzZXQ6IFByb3RvRGF0YXNldCk6IFByb21pc2U8UHJvdG9EYXRhc2V0PiB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBkYXRhc2V0O1xuICB9XG4gIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCh7XG4gICAgc291cmNlOiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgYXMgc3RyaW5nLFxuICAgIGZvcm1hdDogZ2V0UmVtb3RlU291cmNlRm9ybWF0KGRhdGFzZXQubWV0YWRhdGEpLFxuICAgIHNpemU6IHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zaXplID09PSAnbnVtYmVyJyA/IGRhdGFzZXQubWV0YWRhdGEuc2l6ZSA6IHVuZGVmaW5lZCxcbiAgICBieXBhc3NDYWNoZTogZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zKGRhdGFzZXQubWV0YWRhdGEpID4gMFxuICB9KTtcbiAgaWYgKCFsb2FkZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YSBsb2FkZWQgZnJvbSAke2RhdGFzZXQubWV0YWRhdGE/LnNvdXJjZX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmRhdGFzZXQsXG4gICAgZGF0YTogbG9hZGVkLmRhdGEsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICBldGFnOiBsb2FkZWQuZXRhZyxcbiAgICAgIGxhc3RNb2RpZmllZDogbG9hZGVkLmxhc3RNb2RpZmllZCxcbiAgICAgIC4uLih0eXBlb2YgbG9hZGVkLnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IGxvYWRlZC5zaXplfSA6IHt9KSxcbiAgICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgICByZWZyZXNoU3RhdHVzOiAnaWRsZSdcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZShcbiAgaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQsXG4gICdIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbmNvbnN0IEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoYXN5bmMgKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59LCAnRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2soZGF0YXNldDogUHJvdG9EYXRhc2V0LCBkYXRhc2V0czogRGF0YXNldHMpIHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld0RhdGFFbnRyeShkYXRhc2V0LCBkYXRhc2V0cyk7XG4gIH1cbiAgcmV0dXJuIEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKGRhdGFzZXQpLmNoYWluKGh5ZHJhdGVkID0+IHtcbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5KGh5ZHJhdGVkLCBkYXRhc2V0cyk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRhc2sgfHxcbiAgICAgIEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSygnRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnMnKVxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0OiBEYXRhc2V0c1tzdHJpbmddLCBwYXRjaDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgcmV0dXJuIGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICAuLi5wYXRjaFxuICAgIH1cbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUoe1xuICBhcmc6IG1ldGFkYXRhLFxuICBvblByb2dyZXNzXG59OiB7XG4gIGFyZzoge1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIGZvcm1hdD86IHN0cmluZztcbiAgICBzaXplPzogbnVtYmVyO1xuICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgbGFzdE1vZGlmaWVkPzogc3RyaW5nO1xuICB9O1xuICBvblByb2dyZXNzOiAocHJvZ3Jlc3M6IHtsb2FkZWQ6IG51bWJlcjsgdG90YWw/OiBudW1iZXI7IHBlcmNlbnQ6IG51bWJlcn0pID0+IHZvaWQ7XG59KSB7XG4gIC8vIEZldGNoIG9ubHkuIERvIG5vdCBtdXRhdGUgdGhlIFJlZHV4IHRhYmxlIGhlcmU6IHByb2dyZXNzIGV2ZW50cyBjb3B5IGl0LCBhbmRcbiAgLy8gdGhlIHN1Y2Nlc3MgdXBkYXRlciBhcHBsaWVzIHRoZSBzbmFwc2hvdCB0byB3aGF0ZXZlciBpbnN0YW5jZSBpcyBpbiB0aGUgc3RvcmUuXG4gIHJldHVybiBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoey4uLm1ldGFkYXRhLCBvblByb2dyZXNzLCBieXBhc3NDYWNoZTogdHJ1ZX0pO1xufVxuXG5jb25zdCBSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MoXG4gIHJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUsXG4gICdSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbi8qKlxuICogUmUtZmV0Y2ggYW4gZXh0ZXJuYWxseSBob3N0ZWQgZGF0YXNldCBhbmQgcmVwbGFjZSBpdHMgdGFibGUgY29udGVudHMgaW4gcGxhY2UuXG4gKiBMYXllcnMgYW5kIGZpbHRlcnMgYXJlIGtlcHQgd2hlbiBmaWVsZCBuYW1lcyBtYXRjaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmIChcbiAgICAhZGF0YXNldCB8fFxuICAgIGRhdGFzZXQudHlwZSAhPT0gRGF0YXNldFR5cGUuRVhURVJOQUxMWV9IT1NURUQgfHxcbiAgICB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hTdGF0dXMgPT09ICdsb2FkaW5nJykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHREYXRhc2V0ID0gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge1xuICAgIHJlZnJlc2hTdGF0dXM6ICdsb2FkaW5nJyxcbiAgICByZWZyZXNoRXJyb3I6IHVuZGVmaW5lZCxcbiAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IG5leHREYXRhc2V0XG4gICAgICB9XG4gICAgfSxcbiAgICBSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyh7XG4gICAgICBhcmc6IHtcbiAgICAgICAgc291cmNlOiBuZXh0RGF0YXNldC5tZXRhZGF0YS5zb3VyY2UgYXMgc3RyaW5nLFxuICAgICAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChuZXh0RGF0YXNldC5tZXRhZGF0YSksXG4gICAgICAgIHNpemU6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplID09PSAnbnVtYmVyJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgICAgIGV0YWc6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnID09PSAnc3RyaW5nJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLmV0YWcgOiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3RNb2RpZmllZDpcbiAgICAgICAgICB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5sYXN0TW9kaWZpZWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT5cbiAgICAgICAgcmVmcmVzaERhdGFzZXRQcm9ncmVzcyhkYXRhSWQsIE1hdGgucm91bmQoKHByb2dyZXNzPy5wZXJjZW50ID8/IDApICogMTAwKSlcbiAgICB9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiByZWZyZXNoRGF0YXNldFN1Y2Nlc3MoZGF0YUlkLCByZXN1bHQpLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gcmVmcmVzaERhdGFzZXRFcnJvcihkYXRhSWQsIGVycm9yKVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZWNvcmQgZG93bmxvYWQgcHJvZ3Jlc3MgZm9yIGFuIGluLWZsaWdodCByZW1vdGUgZGF0YXNldCByZWZyZXNoLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHBlcmNlbnR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCB8fCBkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzICE9PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dFBlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUocGVyY2VudClcbiAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChwZXJjZW50KSkpXG4gICAgOiAwO1xuICBpZiAoZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFByb2dyZXNzID09PSBuZXh0UGVyY2VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7cmVmcmVzaFByb2dyZXNzOiBuZXh0UGVyY2VudH0pXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBmaWVsZE5hbWVzRXF1YWwoY3VycmVudDoge25hbWU6IHN0cmluZ31bXSwgaW5jb21pbmc/OiB7bmFtZTogc3RyaW5nfVtdIHwgbnVsbCk6IGJvb2xlYW4ge1xuICBpZiAoIWluY29taW5nPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoY3VycmVudC5sZW5ndGggIT09IGluY29taW5nLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gY3VycmVudC5ldmVyeSgoZmllbGQsIGkpID0+IGZpZWxkLm5hbWUgPT09IGluY29taW5nW2ldLm5hbWUpO1xufVxuXG4vKipcbiAqIFdoZW4gYSByZW1vdGUgc25hcHNob3QgY2hhbmdlcyBjb2x1bW4gbmFtZXMsIG9sZCBsYXllciBmaWVsZElkeCAvIGZpbHRlciBuYW1lc1xuICogY2FuIHBvaW50IGF0IHRoZSB3cm9uZyBjb2x1bW4uIFJlLWJpbmQgYnkgbmFtZSBhbmQgZHJvcCBjb25maWdzIHRoYXQgbm8gbG9uZ2VyIGZpdC5cbiAqL1xuZnVuY3Rpb24gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhc2V0czogVmlzU3RhdGVbJ2RhdGFzZXRzJ11cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IG5leHRMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZHJvcHBlZExheWVyczogTGF5ZXJbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCAhPT0gZGF0YUlkKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWJvdW5kID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzLCBsYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgICBpZiAocmVib3VuZD8uaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gocmVib3VuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyb3BwZWRMYXllcnMucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICBsZXQgbmV4dExheWVyT3JkZXIgPSBzdGF0ZS5sYXllck9yZGVyO1xuICBsZXQgbmV4dFNwbGl0TWFwcyA9IHN0YXRlLnNwbGl0TWFwcztcbiAgZHJvcHBlZExheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBuZXh0TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXh0TGF5ZXJPcmRlciwgbGF5ZXIuaWQpO1xuICAgIG5leHRTcGxpdE1hcHMgPSByZW1vdmVMYXllckZyb21TcGxpdE1hcHMobmV4dFNwbGl0TWFwcywgbGF5ZXIpO1xuICB9KTtcblxuICBjb25zdCBuZXh0TGF5ZXJEYXRhID0gbmV4dExheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGNvbnN0IG9sZElkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgob2xkTGF5ZXIgPT4gb2xkTGF5ZXIuaWQgPT09IGxheWVyLmlkKTtcbiAgICByZXR1cm4gb2xkSWR4ID49IDAgPyBzdGF0ZS5sYXllckRhdGFbb2xkSWR4XSA6IHt9O1xuICB9KTtcblxuICBjb25zdCBmaWx0ZXJzRm9yRGF0YXNldCA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiB0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuICBjb25zdCBvdGhlckZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gIXRvQXJyYXkoZmlsdGVyLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgdXBkYXRlZERhdGFzZXRzfSA9IHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzKFxuICAgIHsuLi5zdGF0ZSwgZGF0YXNldHMsIGxheWVyczogbmV4dExheWVyc30sXG4gICAgZmlsdGVyc0ZvckRhdGFzZXRcbiAgKTtcblxuICBjb25zdCBuZXh0RmlsdGVycyA9IFsuLi5vdGhlckZpbHRlcnMsIC4uLnZhbGlkYXRlZF07XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIFtkYXRhSWRdLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICBuZXh0RmlsdGVycyxcbiAgICBuZXh0TGF5ZXJzXG4gICk7XG5cbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHMsXG4gICAgbGF5ZXJzOiBuZXh0TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV4dExheWVyRGF0YSxcbiAgICBsYXllck9yZGVyOiBuZXh0TGF5ZXJPcmRlcixcbiAgICBzcGxpdE1hcHM6IG5leHRTcGxpdE1hcHMsXG4gICAgZmlsdGVyczogbmV4dEZpbHRlcnNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuLyoqXG4gKiBBcHBseSBhIGZpbmlzaGVkIHJlbW90ZSByZWZyZXNoOiBrZWVwIGxheWVycywgcmUtcnVuIGZpbHRlcnMgYW5kIGxheWVyIGRhdGEuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByZXN1bHR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbWV0YWRhdGFQYXRjaCA9IHtcbiAgICByZWZyZXNoU3RhdHVzOiAnaWRsZScsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWQsXG4gICAgbGFzdEZldGNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAvLyBBbHdheXMgd3JpdGUgdmFsaWRhdG9ycy4gQSAyMDAgdGhhdCBvbWl0cyB0aGVtIG11c3Qgbm90IGtlZXAgdGhlIHByZXZpb3VzXG4gICAgLy8gRVRhZyBvciBhIGxhdGVyIDMwNCBjYW4gc2tpcCBhIGJvZHkgd2Ugbm8gbG9uZ2VyIGhhdmUuXG4gICAgZXRhZzogcmVzdWx0LmV0YWcsXG4gICAgbGFzdE1vZGlmaWVkOiByZXN1bHQubGFzdE1vZGlmaWVkLFxuICAgIC4uLih0eXBlb2YgcmVzdWx0LnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IHJlc3VsdC5zaXplfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IHNjaGVtYVVuY2hhbmdlZCA9IGZpZWxkTmFtZXNFcXVhbChkYXRhc2V0LmZpZWxkcywgcmVzdWx0LmRhdGE/LmZpZWxkcyk7XG5cbiAgLy8gQXBwbHkgdGhlIHNuYXBzaG90IHRvIHRoZSB0YWJsZSBjdXJyZW50bHkgaW4gdGhlIHN0b3JlLiBQcm9ncmVzcyBtYXkgaGF2ZVxuICAvLyBjb3BpZWQgaXQgb2ZmIHRoZSBvYmplY3QgdGhhdCBzdGFydGVkIHRoZSBmZXRjaDsgdGhlIHRhc2sgbmV2ZXIgbXV0YXRlcyBpdC5cbiAgaWYgKCFyZXN1bHQubm90TW9kaWZpZWQgJiYgcmVzdWx0LmRhdGEpIHtcbiAgICAvLyBLZXBsZXJUYWJsZS51cGRhdGUgaXMgYXN5bmMgc28gRHVja0RCIGNhbiBhd2FpdCBBcnJvdyBjb252ZXJzaW9uLiBUaGVcbiAgICAvLyBDU1YvR2VvSlNPTiBwYXRoIChhbmQgS2VwbGVyVGFibGUuaW1wb3J0RGF0YSkgcnVuIHN5bmNocm9ub3VzbHkgYmVmb3JlXG4gICAgLy8gdGhlIGZpcnN0IGF3YWl0LCBzbyB0aGUgc3RvcmUgdGFibGUgaXMgdXBkYXRlZCBiZWZvcmUgd2UgY29weSBpdCBiZWxvdy5cbiAgICB2b2lkIGRhdGFzZXQudXBkYXRlKHJlc3VsdC5kYXRhKTtcbiAgfVxuXG4gIGNvbnN0IHJlZnJlc2hlZCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIG1ldGFkYXRhUGF0Y2gpO1xuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogcmVmcmVzaGVkXG4gIH07XG5cbiAgaWYgKHJlc3VsdC5ub3RNb2RpZmllZCB8fCAhcmVzdWx0LmRhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0c1xuICAgIH07XG4gIH1cblxuICBpZiAoIXNjaGVtYVVuY2hhbmdlZCkge1xuICAgIHJldHVybiByZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2Uoc3RhdGUsIGRhdGFJZCwgZGF0YXNldHMpO1xuICB9XG5cbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG5mdW5jdGlvbiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YShzdGF0ZTogVmlzU3RhdGUsIGRhdGFJZDogc3RyaW5nKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0c1xuICB9O1xuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBbZGF0YUlkXSwgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufVxuXG5mdW5jdGlvbiBpc0RhdGFzZXRSb3dMaXN0KFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W11cbik6IHJvd3MgaXMgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyb3dzKSB8fCAhcm93cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzKTtcbiAgfVxuICAvLyBBIHNpbmdsZSBjb2x1bW4tb3JkZXJlZCByb3cgaXMgYW4gYXJyYXkgb2YgcHJpbWl0aXZlczsgYSBsaXN0IG9mIHJvd3MgaXNcbiAgLy8gYW4gYXJyYXkgb2YgYXJyYXlzIG9yIGFuIGFycmF5IG9mIGZpZWxkLW5hbWUgcmVjb3Jkcy5cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93c1swXSkgfHwgaXNQbGFpbk9iamVjdChyb3dzWzBdKTtcbn1cblxuZnVuY3Rpb24gdG9BcnJheVJvdyhyb3c6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93LCBmaWVsZHM6IEZpZWxkW10pOiBhbnlbXSB8IG51bGwge1xuICBpZiAoQXJyYXkuaXNBcnJheShyb3cpKSB7XG4gICAgcmV0dXJuIHJvdy5sZW5ndGggPT09IGZpZWxkcy5sZW5ndGggPyByb3cgOiBudWxsO1xuICB9XG4gIGlmIChpc1BsYWluT2JqZWN0KHJvdykpIHtcbiAgICBjb25zdCByZWNvcmQgPSByb3cgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWNvcmQsIGZpZWxkLm5hbWUpID8gcmVjb3JkW2ZpZWxkLm5hbWVdIDogbnVsbFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGFzZXRSb3dzKFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10sXG4gIGZpZWxkczogRmllbGRbXVxuKTogYW55W11bXSB8IG51bGwge1xuICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBsaXN0ID0gaXNEYXRhc2V0Um93TGlzdChyb3dzKSA/IHJvd3MgOiBbcm93c107XG4gIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkOiBhbnlbXVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFycmF5Um93ID0gdG9BcnJheVJvdyhsaXN0W2ldLCBmaWVsZHMpO1xuICAgIGlmICghYXJyYXlSb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBub3JtYWxpemVkLnB1c2goYXJyYXlSb3cpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIEFwcGVuZCBvciB1cHNlcnQgcm93cyBvbiBhbiBleGlzdGluZyBpbi1tZW1vcnkgcm93IGRhdGFzZXQuIEtlZXBzIGxheWVycyBhbmQgcmUtcnVucyBmaWx0ZXJzLlxuICogQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQgKElOU0VSVCAvIGNvbmNhdCBub3QgaW1wbGVtZW50ZWQpLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93cywgb3B0aW9uc306IFZpc1N0YXRlQWN0aW9ucy5BZGRUb0RhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplRGF0YXNldFJvd3Mocm93cywgZGF0YXNldC5maWVsZHMpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBhcHBsaWVkID0gb3B0aW9ucz8udXBzZXJ0QnlcbiAgICA/IGRhdGFzZXQudXBzZXJ0Um93cyhub3JtYWxpemVkLCBvcHRpb25zLnVwc2VydEJ5KVxuICAgIDogZGF0YXNldC5hcHBlbmRSb3dzKG5vcm1hbGl6ZWQpO1xuICBpZiAoIWFwcGxpZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogRGVsZXRlIHJvd3MgYnkgaW5kZXggb3IgYnkgZmllbGQgdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LlxuICogS2VlcHMgbGF5ZXJzLiBBcnJvdy9EdWNrREIgdGFibGVzIHdhcm4gYW5kIGFyZSBsZWZ0IHVuY2hhbmdlZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93SW5kZXhlcywgYnlGaWVsZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ZXMgPSBieUZpZWxkXG4gICAgPyBkYXRhc2V0LmZpbmRSb3dJbmRleGVzQnlGaWVsZFZhbHVlcyhieUZpZWxkLmZpZWxkLCB0b0FycmF5KGJ5RmllbGQudmFsdWVzKSlcbiAgICA6IHRvQXJyYXkocm93SW5kZXhlcyA/PyBbXSk7XG4gIGlmICghaW5kZXhlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFkYXRhc2V0LnJlbW92ZVJvd3MoaW5kZXhlcykpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogUmVjb3JkIGEgZmFpbGVkIHJlbW90ZSBkYXRhc2V0IHJlZnJlc2ggd2l0aG91dCBkcm9wcGluZyBleGlzdGluZyByb3dzLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGVycm9yfTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IHtcbiAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgW2RhdGFJZF06IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICAgICAgcmVmcmVzaFN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgcmVmcmVzaEVycm9yOiBlcnJvcj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpLFxuICAgICAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZFxuICAgICAgfSlcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gZGF0YXNldHMgY2FuIGJlIGEgc2luZ2xlIGRhdGEgZW50cmllcyBvciBhbiBhcnJheSBvZiBtdWx0aXBsZSBkYXRhIGVudHJpZXNcbiAgY29uc3Qge2NvbmZpZywgb3B0aW9uc30gPSBhY3Rpb247XG5cbiAgLy8gYXBwbHkgY29uZmlnIGlmIHBhc3NlZCBmcm9tIGFjdGlvblxuICAvLyBUT0RPOiB3ZSBkb24ndCBoYW5kbGUgYXN5bmMgbWVyZ2VycyBoZXJlIHlldFxuICBsZXQgdXBkYXRlZFN0YXRlID0gY29uZmlnXG4gICAgPyByZWNlaXZlTWFwQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkOiB7Y29uZmlnLCBvcHRpb25zfVxuICAgICAgfSlcbiAgICA6IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGFzZXRzID0gdG9BcnJheShhY3Rpb24uZGF0YXNldHMpO1xuICBpZiAoIWRhdGFzZXRzLmxlbmd0aCkge1xuICAgIHJldHVybiB1cGRhdGVkU3RhdGU7XG4gIH1cblxuICBjb25zdCBjcmVhdGVEYXRhc2V0VGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2soe2luZm8sIC4uLnJlc3R9LCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIGNyZWF0ZURhdGFzZXRUYXNrcy5wdXNoKHRhc2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnNgLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtZmFpbGVkLSR7ZGF0YXNldEluZGV4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZGF0YXNldHNBbGxTZXR0bGVkVGFzayA9IGNyZWF0ZURhdGFzZXRUYXNrcy5sZW5ndGhcbiAgICA/IFRhc2suYWxsU2V0dGxlZChjcmVhdGVEYXRhc2V0VGFza3MpLm1hcChyZXN1bHRzID0+XG4gICAgICAgIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzKHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnN9KVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoZGF0YXNldHNBbGxTZXR0bGVkVGFzaykge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogMSwgdHlwZTogJyd9KSk7XG4gIH1cblxuICByZXR1cm4gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBbXG4gICAgLi4uKGRhdGFzZXRzQWxsU2V0dGxlZFRhc2sgPyBbZGF0YXNldHNBbGxTZXR0bGVkVGFza10gOiBbXSksXG4gICAgLi4ubm90aWZpY2F0aW9uVGFza3NcbiAgXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQ+XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSByZXN1bHRzLnJlZHVjZSgoYWNjdSwgcmVzdWx0LCBpZHgpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtkYXRhc2V0LmlkXTogZGF0YXNldH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNob3cgZXJyb3Igbm90aWZpY2F0aW9uIG9uIFVJXG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYERhdGFzZXQgZXJyb3I6IEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldDpcbiAgICAgICAgICAgICAgJHtyZXN1bHQucmVhc29uIHx8IChyZXN1bHQgYXMgYW55KS52YWx1ZX1gLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtY3JlYXRlLWZhaWxlZC0ke2lkeH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cbiAgfSwge30gYXMgRGF0YXNldHMpO1xuICAvLyBzYXZlIG5ldyBkYXRhc2V0IGVudHJ5IHRvIHN0YXRlXG4gIGNvbnN0IG1lcmdlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZSwgbmV3RGF0YUVudHJpZXMpXG4gIH07XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IGxheWVyTWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gbS53YWl0Rm9yTGF5ZXJEYXRhKTtcbiAgY29uc3QgZGF0YXNldE1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+ICFsYXllck1lcmdlcnMuaW5jbHVkZXMobSkpO1xuXG4gIGNvbnN0IG5ld0RhdGFJZHMgPSBPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcyk7XG4gIGNvbnN0IHBvc3RNZXJnZXJQYXlsb2FkID0ge1xuICAgIG5ld0RhdGFJZHMsXG4gICAgb3B0aW9uczogYWRkVG9NYXBPcHRpb25zLFxuICAgIGxheWVyTWVyZ2Vyc1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZWRTdGF0ZSA9IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIobWVyZ2VkU3RhdGUsIHtcbiAgICBtZXJnZXJzOiBkYXRhc2V0TWVyZ2VycyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAtMX0pKSxcbiAgICBub3RpZmljYXRpb25UYXNrc1xuICApO1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWVyZ2Vyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgbWVyZ2VyczogTWVyZ2VyPGFueT5bXTtcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge21lcmdlcnMsIHBvc3RNZXJnZXJQYXlsb2FkfSA9IGFjdGlvbjtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbWVyZ2VTdGF0ZVJlc3VsdCA9IG1lcmdlU3RhdGVGcm9tTWVyZ2VycyhcbiAgICBzdGF0ZSxcbiAgICB7XG4gICAgICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgICAgIC4uLnN0YXRlLmluaXRpYWxTdGF0ZVxuICAgIH0sXG4gICAgbWVyZ2VycyxcbiAgICAvLyBuZXdEYXRhSWRzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gICk7XG5cbiAgLy8gaWYgYWxsIG1lcmdlZCwga2lja3VwIHBvc3QgbWVyZ2UgcHJvY2Vzc1xuICAvLyBpZiBub3Qgd2FpdFxuICByZXR1cm4gbWVyZ2VTdGF0ZVJlc3VsdC5hbGxNZXJnZWRcbiAgICA/IHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQpXG4gICAgOiBtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlO1xufVxuXG4vKiogUmVhZHMgYG9wdGlvbnMubGF5ZXJWaXNDb25maWdgIGZyb20gYWRkLWRhdGEtdG8tbWFwIChzZWUgYEFkZERhdGFUb01hcE9wdGlvbnNgKS4gKi9cbmZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKFxuICBvcHRpb25zOiBQb3N0TWVyZ2VyUGF5bG9hZFsnb3B0aW9ucyddIHwgdW5kZWZpbmVkXG4pOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghb3B0aW9ucyB8fCAhKCdsYXllclZpc0NvbmZpZycgaW4gb3B0aW9ucykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHBhdGNoID0gKG9wdGlvbnMgYXMge2xheWVyVmlzQ29uZmlnPzogdW5rbm93bn0pLmxheWVyVmlzQ29uZmlnO1xuICBpZiAocGF0Y2ggPT0gbnVsbCB8fCB0eXBlb2YgcGF0Y2ggIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGF0Y2gpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcGF0Y2ggYXMgUGFydGlhbDxMYXllclZpc0NvbmZpZz47XG59XG5cbi8qKlxuICogUG9seWdvbiBmaWx0ZXJzIGZvciB0aGVzZSBsYXllcnMgdXNlIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUgZnJvbVxuICogY2FsY3VsYXRlTGF5ZXJEYXRhLiBPdGhlciB0eXBlcyAobGF0L2xuZyBwb2ludHMsIEgzLCBhcmNzKSBjYW4gZmlsdGVyXG4gKiBmcm9tIGNvbHVtbnMgb24gdGhlIGZpcnN0IHBhc3MgYW5kIG11c3Qgbm90IGJlIHJlY2FsY3VsYXRlZCBoZXJlLlxuICovXG5mdW5jdGlvbiBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXIudHlwZSA9PT0gTEFZRVJfVFlQRVMuZ2VvanNvbiB8fCBsYXllci5jb25maWc/LmNvbHVtbk1vZGUgPT09ICdnZW9qc29uJztcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZnVuY3Rpb24gcG9zdE1lcmdlVXBkYXRlcihtZXJnZWRTdGF0ZTogVmlzU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZCk6IFZpc1N0YXRlIHtcbiAgY29uc3Qge25ld0RhdGFJZHMsIG9wdGlvbnMsIGxheWVyTWVyZ2Vyc30gPSBwb3N0TWVyZ2VyUGF5bG9hZDtcbiAgY29uc3QgbmV3RmlsdGVycyA9IG1lcmdlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKGYgPT5cbiAgICBmLmRhdGFJZC5maW5kKGZEYXRhSWQgPT4gbmV3RGF0YUlkcy5pbmNsdWRlcyhmRGF0YUlkKSlcbiAgKTtcbiAgY29uc3QgZGF0YXNldEZpbHRlcmVkOiBzdHJpbmdbXSA9IHVuaXEoXG4gICAgbmV3RmlsdGVycy5yZWR1Y2UoKGFjY3UsIGYpID0+IFsuLi5hY2N1LCAuLi5mLmRhdGFJZF0sIFtdIGFzIHN0cmluZ1tdKVxuICApO1xuICBjb25zdCBkYXRhRW1wdHkgPSBuZXdEYXRhSWRzLmxlbmd0aCA8IDE7XG5cbiAgbGV0IG5ld0xheWVycyA9ICFkYXRhRW1wdHlcbiAgICA/IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpKVxuICAgIDogW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSBuZXdEYXRhSWRzLnJlZHVjZShcbiAgICAoYWNjdSwgaWQpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2lkXTogbWVyZ2VkU3RhdGUuZGF0YXNldHNbaWRdXG4gICAgfSksXG4gICAge31cbiAgKTtcblxuICBpZiAoIW5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmF1dG9DcmVhdGVMYXllcnMgIT09IGZhbHNlKSB7XG4gICAgLy8gbm8gbGF5ZXIgbWVyZ2VkLCBmaW5kIGRlZmF1bHRzXG4gICAgY29uc3QgcmVzdWx0ID0gYWRkRGVmYXVsdExheWVycyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXMpO1xuICAgIG1lcmdlZFN0YXRlID0gcmVzdWx0LnN0YXRlO1xuICAgIG5ld0xheWVycyA9IHJlc3VsdC5uZXdMYXllcnM7XG4gIH1cblxuICBpZiAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIC8vIGlmIG1hcCBpcyBzcGxpdCwgYWRkIG5ldyBsYXllcnMgdG8gc3BsaXRNYXBzXG4gICAgbmV3TGF5ZXJzID0gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKVxuICAgICk7XG4gICAgLy8gYSBsYXllciBhbHJlYWR5IGluIGEgcGFuZWwgd2FzIG1lcmdlZCBmcm9tIHNwbGl0IG1hcHMsIHdoaWNoIGRlY2lkZSB0aGUgcGFuZWxzIHNob3dpbmcgaXRcbiAgICBjb25zdCBsYXllcnNOb3RJblNwbGl0TWFwcyA9IG5ld0xheWVycy5maWx0ZXIoXG4gICAgICBsID0+ICFtZXJnZWRTdGF0ZS5zcGxpdE1hcHMuc29tZShzbSA9PiBsLmlkIGluIHNtLmxheWVycylcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBsYXllcnNOb3RJblNwbGl0TWFwcylcbiAgICB9O1xuICB9XG5cbiAgbWVyZ2VkU3RhdGUgPSBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gICAgbWVyZ2VkU3RhdGUsXG4gICAgbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMob3B0aW9ucyksXG4gICAgbmV3RGF0YUlkc1xuICApO1xuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBuZXdEYXRhSWRzLmZvckVhY2goZGF0YUlkID0+IHtcbiAgICBjb25zdCB0b29sdGlwRmllbGRzID0gbWVyZ2VkU3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgLy8gbG9hZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgZmFsc2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gcnVuIGFkZERlZmF1bHRUb29sdGlwcyB3aGVuIHRvb2x0aXBGaWVsZHMgaXMgZW1wdHlcbiAgICBpZiAoXG4gICAgICBvcHRpb25zPy5hdXRvQ3JlYXRlVG9vbHRpcHMgIT09IGZhbHNlICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKVxuICAgICkge1xuICAgICAgLy8gYWRkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyB0cnVlXG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhRW1wdHlcbiAgICA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKVxuICAgIDogdW5pcShPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuY29uY2F0KGRhdGFzZXRGaWx0ZXJlZCkpO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobWVyZ2VkU3RhdGUsIHVwZGF0ZWREYXRhc2V0cywgdW5kZWZpbmVkKTtcblxuICAvLyBQb2x5Z29uIHBlci1sYXllciBpbmRleGVzIG5lZWQgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSwgd2hpY2ggYXJlIG9ubHlcbiAgLy8gcG9wdWxhdGVkIGJ5IHRoZSBsYXllci1kYXRhIHBhc3MgYWJvdmUuIFNraXAgZGF0YXNldHMgd2hvc2UgdGFyZ2V0ZWQgbGF5ZXJzXG4gIC8vIGFscmVhZHkgZmlsdGVyZWQgZnJvbSBjb2x1bW5zIChlLmcuIGxhdC9sbmcgcG9pbnRzKS5cbiAgY29uc3QgcG9seWdvbkZpbHRlcnMgPSB1cGRhdGVkU3RhdGUuZmlsdGVycy5maWx0ZXIoXG4gICAgZiA9PiBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmIGYuZW5hYmxlZCAhPT0gZmFsc2VcbiAgKTtcbiAgY29uc3QgcG9seWdvbk1ldGFEYXRhSWRzID0gdW5pcShcbiAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICBsYXllciA9PlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXIpICYmXG4gICAgICAgICAgcG9seWdvbkZpbHRlcnMuc29tZShmID0+IGYubGF5ZXJJZD8uaW5jbHVkZXMobGF5ZXIuaWQpKVxuICAgICAgKVxuICAgICAgLm1hcChsYXllciA9PiBsYXllci5jb25maWcuZGF0YUlkKVxuICAgICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkgJiYgdXBkYXRlZERhdGFzZXRzLmluY2x1ZGVzKGlkKSlcbiAgKTtcbiAgaWYgKHBvbHlnb25NZXRhRGF0YUlkcy5sZW5ndGgpIHtcbiAgICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEoXG4gICAgICB7XG4gICAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgICAgZGF0YXNldHM6IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgICAgICAgcG9seWdvbk1ldGFEYXRhSWRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZmlsdGVycyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBwb2x5Z29uTWV0YURhdGFJZHNcbiAgICApO1xuICB9XG5cbiAgLy8gcmVnaXN0ZXIgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpbixcbiAgLy8gbmVlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgbGF5ZXIgZGF0YSBpcyBjYWxjdWxhdGVkXG4gIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbih1cGRhdGVkU3RhdGUpO1xuXG4gIC8vIHRyeSB0byBwcm9jZXNzIGxheWVyTWVyZ2VycyBhZnRlciBkYXRhc2V0K2RhdGFzZXRNZXJnZXJzXG4gIHVwZGF0ZWRTdGF0ZSA9XG4gICAgbGF5ZXJNZXJnZXJzICYmIGxheWVyTWVyZ2Vycy5sZW5ndGggPiAwXG4gICAgICA/IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIodXBkYXRlZFN0YXRlLCB7XG4gICAgICAgICAgbWVyZ2VyczogbGF5ZXJNZXJnZXJzLFxuICAgICAgICAgIHBvc3RNZXJnZXJQYXlsb2FkOiB7Li4ucG9zdE1lcmdlclBheWxvYWQsIGxheWVyTWVyZ2VyczogW119XG4gICAgICAgIH0pXG4gICAgICA6IHVwZGF0ZWRTdGF0ZTtcblxuICAvLyBjZW50ZXIgdGhlIG1hcCBvbmNlIHRoZSBkYXRhc2V0IGlzIGNyZWF0ZWRcbiAgaWYgKG5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmNlbnRlck1hcCkge1xuICAgIGNvbnN0IGJvdW5kcyA9IGZpbmRNYXBCb3VuZHMobmV3TGF5ZXJzKTtcbiAgICBpZiAoYm91bmRzKSB7XG4gICAgICBjb25zdCBwYWRkaW5nID0gb3B0aW9ucz8ucGFkZGluZztcbiAgICAgIGNvbnN0IGZpdEJvdW5kc1Rhc2sgPSBBQ1RJT05fVEFTS19GSVRfQk9VTkRTKCkubWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpdE1hcEJvdW5kcyhib3VuZHMsIHBhZGRpbmcpO1xuICAgICAgfSk7XG4gICAgICB1cGRhdGVkU3RhdGUgPSB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIGZpdEJvdW5kc1Rhc2spO1xuICAgIH1cbiAgfVxuXG4gIC8vIG5lZWQgdG8gY2VudGVyIG1hcCBoZXJlIGlmIHdlIGhhdmUgbmV3IGxheWVyc1xuICByZXR1cm4gdXBkYXRlZFN0YXRlO1xufVxuXG4vKipcbiAqIFJlbmFtZSBhbiBleGlzdGluZyBkYXRhc2V0IGluIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW5hbWVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtsYWJlbDogYWN0aW9uLmxhYmVsfX0pO1xufVxuXG5jb25zdCBBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTID0gWydsYWJlbCcsICdjb2xvcicsICdtZXRhZGF0YSddO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBwcm9wZXJ0aWVzIGJlZm9yZSB1cGRhdGluZyB0aGUgZGF0YXNldC5cbiAqIE1ha2VzIHN1cmUgZWFjaCBwcm9wZXJ0eSBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0XG4gKiBNYWtlcyBzdXJlIGNvbG9yIHZhbHVlIGlzIFJHQlxuICogUGVyZm9ybXMgZGVlcCBtZXJnZSB3aGVuIHVwZGF0aW5nIG1ldGFkYXRhXG4gKi9cbmNvbnN0IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzID0gKHByb3BzLCBkYXRhc2V0KSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gT2JqZWN0LmVudHJpZXMocHJvcHMpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVudHJ5O1xuICAgIC8vIGlzIGl0IGFsbG93ZWQgP1xuICAgIGlmICghQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFyZSBhZGRpbmcgYSBjb2xvciBidXQgaXQgaXMgbm90IFJHQiB3ZSBkb24ndCBhY2NlcHQgdGhlIHZhbHVlXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSBhcyB3ZSBhZGQgbW9yZSBwcm9wcyB3ZSBzaG91bGQgY2hhbmdlIHRoaXMgaWYgaW50byBhIHN3aXRjaFxuICAgIGlmIChrZXkgPT09ICdjb2xvcicgJiYgIWlzUmdiQ29sb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGRvIHdlIG5lZWQgZGVlcCBtZXJnZSA/XG4gICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IGRlZXBtZXJnZShkYXRhc2V0W2tleV0gfHwge30sIHZhbHVlKSA6IHZhbHVlfTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB2YWxpZGF0ZWRQcm9wcztcbn07XG5cbi8qKlxuICogVXBkYXRlIERhdGFzZXQgcHJvcHMgKGxhYmVsLCBjb2xvciwgbWV0YSkuIERvIG5vdCB1c2UgdG8gdXBkYXRlIGRhdGEgb3IgYW55IHJlbGF0ZWQgcHJvcGVydGllc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFByb3BzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBwcm9wc30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMocHJvcHMsIGV4aXN0aW5nKTtcbiAgICAvLyAgdmFsaWRhdGUgcHJvcHM6IGp1c3QgY29sb3IgZm9yIG5vd1xuICAgIC8vICB3ZSBvbmx5IGFsbG93IGxhYmVsLCBjb2xvciBhbmQgbWV0YSB0byBiZSB1cGRhdGVkXG4gICAgLy8gY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBSZS12YWxpZGF0ZSBhIGxpdmUgbGF5ZXIgYWdhaW5zdCBhIHRhYmxlIHdob3NlIHNjaGVtYSBqdXN0IGNoYW5nZWQuXG4gKlxuICogVGhlIGxheWVyJ3MgY29sdW1ucyAvIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAvIHRleHQtbGFiZWwgZmllbGRzIGFyZSBmaXJzdFxuICogcmVtYXBwZWQgdG8gdGhlaXIgbmV3IG5hbWVzICh2aWEgYHJlbmFtZXNgKSBzbyB0aGUgbGF5ZXIgZm9sbG93cyBhIHJlbmFtZVxuICogaW5zdGVhZCBvZiB0cmVhdGluZyB0aGUgb2xkIGNvbHVtbiBhcyByZW1vdmVkLCB0aGVuIHJlLXZhbGlkYXRlZCB3aXRoXG4gKiBgdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGFgIOKAlCB0aGUgc2FtZSBzZXJpYWxpemUgKyB2YWxpZGF0ZSBwYXRoIHVzZWRcbiAqIHdoZW4gYSBzYXZlZCBjb25maWcgaXMgbG9hZGVkIGFnYWluc3QgbmV3IGRhdGEuIFJldHVybnMgYG51bGxgIHdoZW4gYVxuICogcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgKHRoZSBsYXllciBjYW4gbm8gbG9uZ2VyIGJlIGJ1aWx0KS5cbiAqL1xuZnVuY3Rpb24gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKFxuICBsYXllcjogTGF5ZXIsXG4gIHJlbmFtZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG5ld1RhYmxlOiBLZXBsZXJUYWJsZSxcbiAgc3RhdGU6IFZpc1N0YXRlXG4pOiBMYXllciB8IG51bGwge1xuICBjb25zdCBjb25maWdQYXRjaDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIC8vIGZvbGxvdyByZW5hbWVkIGNvbHVtbnNcbiAgY29uc3QgY29sdW1uc1BhdGNoOiBSZWNvcmQ8c3RyaW5nLCB7dmFsdWU6IHN0cmluZyB8IG51bGw7IGZpZWxkSWR4OiBudW1iZXJ9PiA9IHt9O1xuICBsZXQgY29sdW1uc0NoYW5nZWQgPSBmYWxzZTtcbiAgT2JqZWN0LmVudHJpZXMobGF5ZXIuY29uZmlnLmNvbHVtbnMgfHwge30pLmZvckVhY2goKFtja2V5LCBjb2xdKSA9PiB7XG4gICAgaWYgKGNvbD8udmFsdWUgJiYgcmVuYW1lc1tjb2wudmFsdWVdKSB7XG4gICAgICBjb2x1bW5zUGF0Y2hbY2tleV0gPSB7Li4uY29sLCB2YWx1ZTogcmVuYW1lc1tjb2wudmFsdWVdfTtcbiAgICAgIGNvbHVtbnNDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBpZiAoY29sdW1uc0NoYW5nZWQpIHtcbiAgICBjb25maWdQYXRjaC5jb2x1bW5zID0gey4uLmxheWVyLmNvbmZpZy5jb2x1bW5zLCAuLi5jb2x1bW5zUGF0Y2h9O1xuICB9XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgdmlzdWFsLWNoYW5uZWwgZmllbGRzIChjb2xvckZpZWxkLCBzaXplRmllbGQsIC4uLilcbiAgT2JqZWN0LnZhbHVlcyhsYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkfSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gbGF5ZXIuY29uZmlnW2ZpZWxkXTtcbiAgICBpZiAoZmllbGRDb25maWc/Lm5hbWUgJiYgcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXSkge1xuICAgICAgY29uZmlnUGF0Y2hbZmllbGRdID0gey4uLmZpZWxkQ29uZmlnLCBuYW1lOiByZW5hbWVzW2ZpZWxkQ29uZmlnLm5hbWVdfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGZvbGxvdyByZW5hbWVkIHRleHQtbGFiZWwgZmllbGRzXG4gIGlmIChsYXllci5jb25maWcudGV4dExhYmVsPy5sZW5ndGgpIHtcbiAgICBjb25zdCB0ZXh0TGFiZWwgPSBsYXllci5jb25maWcudGV4dExhYmVsLm1hcCh0bCA9PlxuICAgICAgdGwuZmllbGQgJiYgcmVuYW1lc1t0bC5maWVsZC5uYW1lXVxuICAgICAgICA/IHsuLi50bCwgZmllbGQ6IHsuLi50bC5maWVsZCwgbmFtZTogcmVuYW1lc1t0bC5maWVsZC5uYW1lXX19XG4gICAgICAgIDogdGxcbiAgICApO1xuICAgIGlmICh0ZXh0TGFiZWwuc29tZSgodGwsIGkpID0+IHRsICE9PSBsYXllci5jb25maWcudGV4dExhYmVsW2ldKSkge1xuICAgICAgY29uZmlnUGF0Y2gudGV4dExhYmVsID0gdGV4dExhYmVsO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNoYWxsb3ctY29weSB0aGUgbGF5ZXIgc28gd2UgbmV2ZXIgbXV0YXRlIHJlZHV4IHN0YXRlOyB0aGUgY29weSBrZWVwcyB0aGVcbiAgLy8gcHJvdG90eXBlIG1ldGhvZHMgKGB2aXN1YWxDaGFubmVsc2AgZ2V0dGVyLCBgaXNWYWxpZFRvU2F2ZWApIHNvIGl0XG4gIC8vIHNlcmlhbGl6ZXMgZXhhY3RseSBsaWtlIGEgbGl2ZSBsYXllci5cbiAgY29uc3QgbGF5ZXJDb3B5ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihsYXllcikpLCBsYXllcik7XG4gIGlmIChPYmplY3Qua2V5cyhjb25maWdQYXRjaCkubGVuZ3RoKSB7XG4gICAgbGF5ZXJDb3B5LmNvbmZpZyA9IHsuLi5sYXllci5jb25maWcsIC4uLmNvbmZpZ1BhdGNofTtcbiAgfVxuXG4gIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgIG5ld1RhYmxlLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBsYXllckNvcHksXG4gICAgc3RhdGUuc2NoZW1hXG4gICk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZCAmJiB2YWxpZGF0ZWQuaGFzQWxsQ29sdW1ucygpID8gdmFsaWRhdGVkIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYW4gZXhpc3RpbmcgZGF0YXNldCdzIHNjaGVtYSAoY29sdW1ucy9maWVsZHMpIGluIHBsYWNlIGFuZCByZWNvbmNpbGVcbiAqIGV2ZXJ5dGhpbmcgdGhhdCByZWZlcmVuY2VkIHRoZSBvbGQgY29sdW1uczogZmlsdGVycywgbGF5ZXJzLCB0b29sdGlwIGZpZWxkcyxcbiAqIHBpbm5lZCBjb2x1bW5zIGFuZCBzb3J0IHN0YXRlLiBUaGUgZGF0YXNldCBrZWVwcyBpdHMgaWQvbGFiZWwvY29sb3IvbWV0YWRhdGEuXG4gKlxuICogYGFjdGlvbi5kYXRhYCBpcyB0aGUgc2FtZSBzaGFwZSBgS2VwbGVyVGFibGUuaW1wb3J0RGF0YWAgYWNjZXB0cyAoYHtjb2xzLFxuICogZmllbGRzLCBhcnJvd1RhYmxlfWAgd2hlbiByZXBsYWNpbmcgY29sdW1ucykuIGBhY3Rpb24ucmVuYW1lc2AgaXMgYW4gb3B0aW9uYWxcbiAqIG9sZCDihpIgbmV3IGNvbHVtbi1uYW1lIG1hcCBzbyBsYXllcnMvZmlsdGVycy90b29sdGlwcyBmb2xsb3cgYSByZW5hbWUgaW5zdGVhZFxuICogb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZC5cbiAqXG4gKiBSZWNvbmNpbGlhdGlvbiBpcyBuYW1lLWJhc2VkIOKAlCB0aGUgc2FtZSB3YXkga2VwbGVyLmdsIGxvYWRzIGEgc2F2ZWQgY29uZmlnXG4gKiBhZ2FpbnN0IGNoYW5nZWQgZGF0YS4gQSBsYXllciB3aG9zZSByZXF1aXJlZCBjb2x1bW4gaXMgZ29uZSBpcyByZW1vdmVkOyBhXG4gKiBmaWx0ZXIgb24gYSBnb25lIGNvbHVtbiBpcyBkcm9wcGVkIChvciB0aGUgZGF0YXNldCBpcyBzcGxpY2VkIG91dCBvZiBhIHN5bmNlZFxuICogZmlsdGVyKTsgdG9vbHRpcCBmaWVsZHMgYXJlIHJlbWFwcGVkIC8gZHJvcHBlZC5cbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgZGF0YSwgcmVuYW1lcyA9IHt9fSA9IGFjdGlvbjtcbiAgY29uc3QgZXhpc3RpbmcgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gMS4gcmVidWlsZCB0aGUgdGFibGUgc2NoZW1hIGluIHBsYWNlIChzYW1lIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhKVxuICBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywge30pO1xuICBuZXdUYWJsZS51cGRhdGVTY2hlbWEoZGF0YSk7XG5cbiAgLy8gVGhlIGRhdGEgY29udGFpbmVyIGlzIHJlYnVpbHQgdW5zb3J0ZWQgYW5kIHVuZmlsdGVyZWQ7IHJlc2V0IHRoZSB0YWJsZSdzXG4gIC8vIHZpZXcgc3RhdGUgdGhhdCBpbmRleGVzIGludG8gdGhlIG9sZCBjb250YWluZXIuXG4gIG5ld1RhYmxlLmZpbHRlcmVkSWR4Q1BVID0gbmV3VGFibGUuYWxsSW5kZXhlcztcbiAgbmV3VGFibGUuZmlsdGVyUmVjb3JkQ1BVID0gdW5kZWZpbmVkO1xuICBuZXdUYWJsZS5zb3J0Q29sdW1uID0gdW5kZWZpbmVkO1xuICBuZXdUYWJsZS5zb3J0T3JkZXIgPSBudWxsO1xuICBuZXdUYWJsZS5waW5uZWRDb2x1bW5zID0gKGV4aXN0aW5nLnBpbm5lZENvbHVtbnMgfHwgW10pXG4gICAgLm1hcChuYW1lID0+IHJlbmFtZXNbbmFtZV0gPz8gbmFtZSlcbiAgICAuZmlsdGVyKG5hbWUgPT4gbmV3VGFibGUuZ2V0Q29sdW1uRmllbGRJZHgobmFtZSkgPiAtMSk7XG5cbiAgY29uc3QgbmV3RmllbGRzQnlOYW1lID0gbmV3IFNldChuZXdUYWJsZS5maWVsZHMubWFwKGYgPT4gZi5uYW1lKSk7XG4gIGNvbnN0IG5ld0RhdGFzZXRzID0gey4uLnN0YXRlLmRhdGFzZXRzLCBbZGF0YUlkXTogbmV3VGFibGV9O1xuXG4gIC8vIDIuIHJlY29uY2lsZSBmaWx0ZXJzXG4gIGxldCBuZXdGaWx0ZXJzID0gc3RhdGUuZmlsdGVyc1xuICAgIC5tYXAoZmlsdGVyID0+IHtcbiAgICAgIGNvbnN0IHZpID0gZmlsdGVyLmRhdGFJZC5pbmRleE9mKGRhdGFJZCk7XG4gICAgICBpZiAodmkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9sZE5hbWUgPSBmaWx0ZXIubmFtZVt2aV07XG4gICAgICBjb25zdCBuZXdOYW1lID0gcmVuYW1lc1tvbGROYW1lXSA/PyBvbGROYW1lO1xuICAgICAgY29uc3QgZmllbGRJZHggPSBuZXdUYWJsZS5nZXRDb2x1bW5GaWVsZElkeChuZXdOYW1lKTtcblxuICAgICAgaWYgKGZpZWxkSWR4ID09PSAtMSkge1xuICAgICAgICAvLyBjb2x1bW4gaXMgZ29uZTogZHJvcCBhIHNpbmdsZS1kYXRhc2V0IGZpbHRlciwgc3BsaWNlIGl0IG91dCBvZiBhIHN5bmNlZCBvbmVcbiAgICAgICAgcmV0dXJuIGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmksIG5ld0RhdGFzZXRzKTtcbiAgICAgIH1cblxuICAgICAgLy8gY29sdW1uIHByZXNlbnQgKHBvc3NpYmx5IHJlbmFtZWQpOiByZS1yZXNvbHZlIG5hbWUvZmllbGRJZHgvZG9tYWluXG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkfSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKGZpbHRlciwgbmV3RGF0YXNldHMsIGRhdGFJZCwgbmV3TmFtZSwgdmksIHtcbiAgICAgICAgbWVyZ2VEb21haW46IHZpID4gMFxuICAgICAgfSk7XG4gICAgICBpZiAoIXVwZGF0ZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIGJydXNoIGZpbHRlcnMgY2FycnkgYSBzZWNvbmQgeS1heGlzIGZpZWxkOyBmb2xsb3cgYSByZW5hbWUgdGhlcmUgdG9vXG4gICAgICBjb25zdCB5QXhpcyA9XG4gICAgICAgIHVwZGF0ZWQueUF4aXM/Lm5hbWUgJiZcbiAgICAgICAgKHJlbmFtZXNbdXBkYXRlZC55QXhpcy5uYW1lXVxuICAgICAgICAgID8gey4uLnVwZGF0ZWQueUF4aXMsIG5hbWU6IHJlbmFtZXNbdXBkYXRlZC55QXhpcy5uYW1lXX1cbiAgICAgICAgICA6IG5ld0ZpZWxkc0J5TmFtZS5oYXModXBkYXRlZC55QXhpcy5uYW1lKVxuICAgICAgICAgID8gdXBkYXRlZC55QXhpc1xuICAgICAgICAgIDogbnVsbCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnVwZGF0ZWQsXG4gICAgICAgIHlBeGlzLFxuICAgICAgICAvLyBjbGFtcCB0aGUgdXNlcidzIHByZXZpb3VzIHNlbGVjdGlvbiBpbnRvIHRoZSBuZXcgZG9tYWluIGluc3RlYWQgb2ZcbiAgICAgICAgLy8gcmVzZXR0aW5nIGl0IHRvIHRoZSBmdWxsIHJhbmdlXG4gICAgICAgIHZhbHVlOiBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKGZpbHRlci52YWx1ZSwgdXBkYXRlZClcbiAgICAgIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIEZpbHRlcltdO1xuXG4gIC8vIHJlYXNzaWduIEdQVSBjaGFubmVscyBub3cgdGhhdCB0aGUgZmlsdGVyIGxpc3QgaXMgc2V0dGxlZFxuICBuZXdGaWx0ZXJzID0gbmV3RmlsdGVycy5tYXAoZmlsdGVyID0+XG4gICAgZmlsdGVyLmdwdSA/IGFzc2lnbkdwdUNoYW5uZWwoc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIG5ld0ZpbHRlcnMpLCBuZXdGaWx0ZXJzKSA6IGZpbHRlclxuICApO1xuXG4gIC8vIDMuIHJlYnVpbGQgdGhlIHRhYmxlJ3MgZmlsdGVyIHN0YXRlIChncHVGaWx0ZXIgLyBmaWx0ZXJSZWNvcmQgLyBmaWx0ZXJlZEluZGV4KVxuICBuZXdUYWJsZS5maWx0ZXJUYWJsZShcbiAgICBuZXdGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFJZCksXG4gICAge31cbiAgKTtcblxuICAvLyA0LiByZWNvbmNpbGUgbGF5ZXJzXG4gIGNvbnN0IGxheWVyc1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBuZXdMYXllcnMgPSBzdGF0ZS5sYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCAhPT0gZGF0YUlkKSB7XG4gICAgICByZXR1cm4gbGF5ZXI7XG4gICAgfVxuICAgIGNvbnN0IHJlY29uY2lsZWQgPSByZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEobGF5ZXIsIHJlbmFtZXMsIG5ld1RhYmxlLCBzdGF0ZSk7XG4gICAgaWYgKHJlY29uY2lsZWQpIHtcbiAgICAgIHJldHVybiByZWNvbmNpbGVkO1xuICAgIH1cbiAgICBsYXllcnNUb1JlbW92ZS5wdXNoKGxheWVyLmlkKTtcbiAgICByZXR1cm4gbGF5ZXI7IC8vIHBsYWNlaG9sZGVyLCBkcm9wcGVkIHZpYSByZW1vdmVMYXllclVwZGF0ZXIgYmVsb3dcbiAgfSk7XG5cbiAgLy8gNS4gcmVjb25jaWxlIHRvb2x0aXAgZmllbGRzVG9TaG93XG4gIGxldCBpbnRlcmFjdGlvbkNvbmZpZyA9IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnO1xuICBjb25zdCB0b29sdGlwID0gaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA7XG4gIGNvbnN0IGZpZWxkc1RvU2hvdyA9IHRvb2x0aXA/LmNvbmZpZz8uZmllbGRzVG9TaG93Py5bZGF0YUlkXTtcbiAgaWYgKGZpZWxkc1RvU2hvdykge1xuICAgIGNvbnN0IG5leHRGaWVsZHNUb1Nob3cgPSBmaWVsZHNUb1Nob3cuZmxhdE1hcChmID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSByZW5hbWVzW2YubmFtZV0gPz8gZi5uYW1lO1xuICAgICAgcmV0dXJuIG5ld0ZpZWxkc0J5TmFtZS5oYXMobmFtZSkgPyBbey4uLmYsIG5hbWV9XSA6IFtdO1xuICAgIH0pO1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC4uLnRvb2x0aXAsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIC4uLnRvb2x0aXAuY29uZmlnLFxuICAgICAgICAgIGZpZWxkc1RvU2hvdzogey4uLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdywgW2RhdGFJZF06IG5leHRGaWVsZHNUb1Nob3d9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHMsXG4gICAgZmlsdGVyczogbmV3RmlsdGVycyxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIC8vIDYuIGRyb3AgbGF5ZXJzIHRoYXQgbG9zdCB0aGVpciByZXF1aXJlZCBjb2x1bW5zXG4gIG5leHRTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwgbmV4dFN0YXRlKTtcblxuICAvLyA3LiByZWNvbXB1dGUgbGF5ZXIgZG9tYWlucyArIGRhdGEgZm9yIHRoZSB1cGRhdGVkIGRhdGFzZXRcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgZGF0YUlkKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgc3BlY2lmaWMgbWFwIGNsb3NpbmcgaWNvblxuICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2xvc2UgdGhlIHNlbGVjdGVkIG1hcFxuICogYW5kIHdpbGwgbWVyZ2UgdGhlIHJlbWFpbmluZyBvbmUgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlXG4gKiBUT0RPOiBpIHRoaW5rIGluIHRoZSBmdXR1cmUgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBtZXJnZSBtYXAgbGF5ZXJzIHdpdGggZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgYHZpc1N0YXRlYFxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBhY3Rpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VTcGVjaWZpY01hcEF0SW5kZXg8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIC8vIHJldHJpZXZlIGxheWVycyBtZXRhIGRhdGEgZnJvbSB0aGUgcmVtYWluaW5nIG1hcCB0aGF0IHdlIG5lZWQgdG8ga2VlcFxuICBjb25zdCBpbmRleFRvUmV0cmlldmUgPSAxIC0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG1hcExheWVycyA9IHN0YXRlLnNwbGl0TWFwc1tpbmRleFRvUmV0cmlldmVdPy5sYXllcnM7XG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG5cbiAgLy8gdXBkYXRlIGxheWVyIHZpc2liaWxpdHlcbiAgY29uc3QgbmV3TGF5ZXJzID0gbGF5ZXJzLm1hcChsYXllciA9PlxuICAgIG1hcExheWVycyAmJiAhbWFwTGF5ZXJzW2xheWVyLmlkXSAmJiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBpdCBzaG91bGQgYmUgaW5WaXNpYmxlXG4gICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiBsYXllclxuICApO1xuXG4gIC8vIGRlbGV0ZSBtYXBcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBzcGxpdE1hcHM6IFtdXG4gIH07XG59XG5cbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtmaWxlcywgb25GaW5pc2ggPSBsb2FkRmlsZXNTdWNjZXNzfSA9IGFjdGlvbjtcbiAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBjb21wYW5pb25GaWxlcyA9IEFycmF5LmZyb20oZmlsZXMpO1xuICBjb25zdCBmaWxlc1RvTG9hZCA9IGdldEZpbGVzVG9QYXJzZShjb21wYW5pb25GaWxlcyk7XG4gIGlmICghZmlsZXNUb0xvYWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IGZpbGVzVG9Mb2FkLnJlZHVjZShcbiAgICAoYWNjdSwgZiwgaSkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGYsIGkpKShhY2N1KSxcbiAgICB7fVxuICApO1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nID0ge1xuICAgIGZpbGVDYWNoZTogW10sXG4gICAgZmlsZXNUb0xvYWQsXG4gICAgY29tcGFuaW9uRmlsZXMsXG4gICAgb25GaW5pc2hcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBtZXJnZV8oe2ZpbGVMb2FkaW5nUHJvZ3Jlc3MsIGZpbGVMb2FkaW5nfSkoc3RhdGUpO1xuXG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFN1Y2Vzc2Z1bGx5IGxvYWRlZCBvbmUgZmlsZSwgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVOYW1lLCBmaWxlQ2FjaGV9ID0gYWN0aW9uO1xuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNofSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhDYWNoZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59XG5cbi8vIHdpdGhUYXNrPFQ+KHN0YXRlOiBULCB0YXNrOiBhbnkpOiBUXG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTmV4dEZpbGVVcGRhdGVyKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWR9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IFtmaWxlLCAuLi5yZW1haW5pbmdGaWxlc1RvTG9hZF0gPSBmaWxlc1RvTG9hZDtcblxuICAvLyBzYXZlIGZpbGVzVG9Mb2FkIHRvIHN0YXRlXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZXNUb0xvYWQ6IHJlbWFpbmluZ0ZpbGVzVG9Mb2FkfSkpKHN0YXRlKTtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAwLCBtZXNzYWdlOiAnbG9hZGluZy4uLid9XG4gIH0pO1xuXG4gIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICBmaWxlLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICBsb2FkZXJzLFxuICAgICAgbG9hZE9wdGlvbnMsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgPyBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuY29tcGFuaW9uRmlsZXMgOiB1bmRlZmluZWRcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9hZEZpbGVUYXNrKFxuICBmaWxlLFxuICBmaWxlQ2FjaGUsXG4gIGxvYWRlcnM6IExvYWRlcltdID0gW10sXG4gIGxvYWRPcHRpb25zID0ge30sXG4gIGNvbXBhbmlvbkZpbGVzPzogRmlsZVtdXG4pIHtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnMsIGxvYWRPcHRpb25zLCBjb21wYW5pb25GaWxlc30pLmJpbWFwKFxuICAgIC8vIHByZXR0aWVyIGlnbm9yZVxuICAgIC8vIHN1Y2Nlc3NcbiAgICBnZW4gPT5cbiAgICAgIG5leHRGaWxlQmF0Y2goe1xuICAgICAgICBnZW4sXG4gICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIG9uRmluaXNoOiByZXN1bHQgPT5cbiAgICAgICAgICBwcm9jZXNzRmlsZUNvbnRlbnQoe1xuICAgICAgICAgICAgY29udGVudDogcmVzdWx0LFxuICAgICAgICAgICAgZmlsZUNhY2hlXG4gICAgICAgICAgfSlcbiAgICAgIH0pLFxuXG4gICAgLy8gZXJyb3JcbiAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGUubmFtZSwgZXJyKVxuICApO1xufVxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Qcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb250ZW50LCBmaWxlQ2FjaGV9ID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ3Byb2Nlc3NpbmcuLi4nfVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQsIGZpbGVDYWNoZX0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IGxvYWRGaWxlU3RlcFN1Y2Nlc3Moe2ZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLCBmaWxlQ2FjaGU6IHJlc3VsdH0pLFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0Vycihjb250ZW50LmZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICApO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9ncmVzcyhwcmV2UHJvZ3Jlc3MgPSB7fSwgcHJvZ3Jlc3MpIHtcbiAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gcmVjZWl2aW5nIHF1ZXJ5IG1ldGFkYXRhIG9yIG90aGVyIGNhc2VzIHdlIGRvbid0XG4gIC8vIGhhdmUgYW4gdXBkYXRlIGZvciB0aGUgdXNlci5cbiAgaWYgKCFwcm9ncmVzcyB8fCAhcHJvZ3Jlc3MucGVyY2VudCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGVyY2VudDogcHJvZ3Jlc3MucGVyY2VudFxuICB9O1xufVxuXG4vKipcbiAqIGdldHMgY2FsbGVkIHdpdGggcGF5bG9hZCA9IEFzeW5jR2VuZXJhdG9yPD8/Pz5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBuZXh0RmlsZUJhdGNoVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2dlbiwgZmlsZU5hbWUsIHByb2dyZXNzLCBhY2N1bXVsYXRlZCwgb25GaW5pc2h9XG4gIH06IFZpc1N0YXRlQWN0aW9ucy5OZXh0RmlsZUJhdGNoVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHBhcnNlUHJvZ3Jlc3Moc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1tmaWxlTmFtZV0sIHByb2dyZXNzKVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soc3RhdGVXaXRoUHJvZ3Jlc3MsIFtcbiAgICAuLi4oZ2V0QXBwbGljYXRpb25Db25maWcoKS51c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyAmJlxuICAgIGZpbGVOYW1lLmVuZHNXaXRoKCdhcnJvdycpICYmXG4gICAgYWNjdW11bGF0ZWQ/LmRhdGE/Lmxlbmd0aCA+IDBcbiAgICAgID8gW1xuICAgICAgICAgIC8vIFNraXAgY29tcGFjdGlvbiB3aGlsZSBiYXRjaGVzIGFyZSBzdGlsbCBhcnJpdmluZy4gVGhlIGNvbXBsZXRlZFxuICAgICAgICAgIC8vIGZpbGUgaXMgY29tcGFjdGVkIG9uY2UgaW4gcHJvY2Vzc0ZpbGVDb250ZW50LlxuICAgICAgICAgIFBST0NFU1NfRklMRV9EQVRBKHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHsuLi5hY2N1bXVsYXRlZCwgc2tpcEFycm93Q29tcGFjdDogdHJ1ZX0sXG4gICAgICAgICAgICBmaWxlQ2FjaGU6IFtdXG4gICAgICAgICAgfSkuYmltYXAoXG4gICAgICAgICAgICByZXN1bHQgPT4gbG9hZEZpbGVzU3VjY2VzcyhyZXN1bHQpLFxuICAgICAgICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgOiBbXSksXG4gICAgVU5XUkFQX1RBU0soZ2VuLm5leHQoKSkuYmltYXAoXG4gICAgICAoe3ZhbHVlLCBkb25lfSkgPT4ge1xuICAgICAgICByZXR1cm4gZG9uZVxuICAgICAgICAgID8gb25GaW5pc2goYWNjdW11bGF0ZWQpXG4gICAgICAgICAgOiBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgICAgICAgZ2VuLFxuICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHZhbHVlLnByb2dyZXNzLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlZDogdmFsdWUsXG4gICAgICAgICAgICAgIG9uRmluaXNoXG4gICAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICBdKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZmlsZU5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyB1cGRhdGUgdWkgd2l0aCBlcnJvciBtZXNzYWdlXG4gIENvbnNvbGUud2FybihlcnJvcik7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaCwgZmlsZUNhY2hlfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtlcnJvcn1cbiAgfSk7XG5cbiAgLy8ga2ljayBvZmYgbmV4dCBmaWxlIG9yIGZpbmlzaFxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgbmV4dFN0YXRlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn07XG5cbi8qKlxuICogV2hlbiBzZWxlY3QgZGF0YXNldCBmb3IgZXhwb3J0LCBhcHBseSBjcHUgZmlsdGVyIHRvIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseUNQVUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5BcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcEluZm9VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldE1hcEluZm9VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwSW5mbzoge1xuICAgIC4uLnN0YXRlLm1hcEluZm8sXG4gICAgLi4uYWN0aW9uLmluZm9cbiAgfVxufSk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgQWxsIGxheWVyIGRvbWFpbiBhbmQgbGF5ZXIgZGF0YSBvZiBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdExheWVycyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhc2V0czogRGF0YXNldHNcbik6IHtzdGF0ZTogVmlzU3RhdGU7IG5ld0xheWVyczogTGF5ZXJbXX0ge1xuICBjb25zdCBlbXB0eTogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkZWZhdWx0TGF5ZXJzID0gT2JqZWN0LnZhbHVlcyhkYXRhc2V0cykucmVkdWNlKChhY2N1OiBMYXllcltdLCBkYXRhc2V0KSA9PiB7XG4gICAgY29uc3QgZm91bmRMYXllcnMgPSBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIGZvdW5kTGF5ZXJzICYmIGZvdW5kTGF5ZXJzLmxlbmd0aCA/IGFjY3UuY29uY2F0KGZvdW5kTGF5ZXJzKSA6IGFjY3U7XG4gIH0sIGVtcHR5KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgLi4uZGVmYXVsdExheWVyc10sXG4gICAgICBsYXllck9yZGVyOiBbXG4gICAgICAgIC8vIHB1dCBuZXcgbGF5ZXJzIG9uIHRvcCBvZiBvbGQgb25lcyBpbiByZXZlcnNlXG4gICAgICAgIC4uLmdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGRlZmF1bHRMYXllcnMpLFxuICAgICAgICAuLi5zdGF0ZS5sYXllck9yZGVyXG4gICAgICBdXG4gICAgfSxcbiAgICBuZXdMYXllcnM6IGRlZmF1bHRMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkZWZhdWx0IHRvb2x0aXBzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRUb29sdGlwcyhzdGF0ZSwgZGF0YXNldCkge1xuICBjb25zdCB0b29sdGlwRmllbGRzID0gZmluZEZpZWxkc1RvU2hvdyh7XG4gICAgLi4uZGF0YXNldCxcbiAgICBtYXhEZWZhdWx0VG9vbHRpcHM6IHN0YXRlLm1heERlZmF1bHRUb29sdGlwc1xuICB9KTtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAuLi50b29sdGlwRmllbGRzXG4gIH07XG5cbiAgcmV0dXJuIHNldChbJ2ludGVyYWN0aW9uQ29uZmlnJywgJ3Rvb2x0aXAnLCAnY29uZmlnJywgJ2ZpZWxkc1RvU2hvdyddLCBtZXJnZWQsIHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSB7XG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lIHx8IGBVbnRpdGxlZCBGaWxlICR7aW5kZXh9YDtcbiAgcmV0dXJuIHtcbiAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAvLyBwZXJjZW50IG9mIGN1cnJlbnQgZmlsZVxuICAgICAgcGVyY2VudDogMCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZmlsZU5hbWUsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7ZmlsZU5hbWUsIHByb2dyZXNzfSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBwaWNrXygnZmlsZUxvYWRpbmdQcm9ncmVzcycpKHBpY2tfKGZpbGVOYW1lKShtZXJnZV8ocHJvZ3Jlc3MpKSkoc3RhdGUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGxheWVyIGRvbWFpbnMgZm9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGE8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGRhdGFJZDogc3RyaW5nIHwgc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXI/OiBGaWx0ZXJcbik6IFMge1xuICBjb25zdCBkYXRhSWRzID0gdHlwZW9mIGRhdGFJZCA9PT0gJ3N0cmluZycgPyBbZGF0YUlkXSA6IGRhdGFJZDtcbiAgY29uc3QgbmV3TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IG5ld0xheWVyRGF0YTogYW55W10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaCgob2xkTGF5ZXIsIGkpID0+IHtcbiAgICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCAmJiBkYXRhSWRzLmluY2x1ZGVzKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAvLyBObyBuZWVkIHRvIHJlY2FsY3VsYXRlIGxheWVyIGRvbWFpbiBpZiBmaWx0ZXIgaGFzIGZpeGVkIGRvbWFpblxuICAgICAgY29uc3QgbmV3TGF5ZXIgPVxuICAgICAgICB1cGRhdGVkRmlsdGVyICYmIHVwZGF0ZWRGaWx0ZXIuZml4ZWREb21haW5cbiAgICAgICAgICA/IG9sZExheWVyXG4gICAgICAgICAgOiBvbGRMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cywgdXBkYXRlZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpXSk7XG5cbiAgICAgIG5ld0xheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKGxheWVyRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVycy5wdXNoKG9sZExheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKHN0YXRlLmxheWVyRGF0YVtpXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllckRhdGE6IG5ld0xheWVyRGF0YVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTKTogUyB7XG4gIC8vIG1lcmdlIGFsbCBhbmltYXRhYmxlIGxheWVyIGRvbWFpbiBhbmQgdXBkYXRlIGdsb2JhbCBjb25maWdcbiAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgICAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICAgICAgICB0aW1lU3RlcHM6IG51bGwsXG4gICAgICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyRG9tYWlucyA9IGFuaW1hdGFibGVMYXllcnMubWFwKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uLmRvbWFpbiB8fCBbXSk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbWVyZ2VkRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhsYXllckRvbWFpbnMpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihtZXJnZWREb21haW4pO1xuXG4gIC8vIG1lcmdlIHRpbWVTdGVwc1xuICBsZXQgbWVyZ2VkVGltZVN0ZXBzOiBudW1iZXJbXSB8IG51bGwgPSB1bmlxPG51bWJlcj4oXG4gICAgYW5pbWF0YWJsZUxheWVycy5yZWR1Y2UoKGFjY3UsIGxheWVyKSA9PiB7XG4gICAgICBhY2N1LnB1c2goLi4uKGxheWVyLmNvbmZpZy5hbmltYXRpb24udGltZVN0ZXBzIHx8IFtdKSk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9LCBbXSlcbiAgKS5zb3J0KCk7XG5cbiAgbWVyZ2VkVGltZVN0ZXBzID0gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCA/IG1lcmdlZFRpbWVTdGVwcyA6IG51bGw7XG5cbiAgLy8gVE9ETzogYmV0dGVyIGhhbmRsaW5nIG9mIGR1cmF0aW9uIGNhbGN1bGF0aW9uXG4gIGNvbnN0IGR1cmF0aW9uID0gbWVyZ2VkVGltZVN0ZXBzXG4gICAgPyAoQkFTRV9TUEVFRCAqICgxMDAwIC8gRlBTKSkgLyBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoIC8gKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5zcGVlZCB8fCAxKVxuICAgIDogbnVsbDtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBkb21haW46IG1lcmdlZERvbWFpbixcbiAgICAgIGRlZmF1bHRUaW1lRm9ybWF0LFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lU3RlcHM6IG1lcmdlZFRpbWVTdGVwc1xuICAgIH1cbiAgfTtcblxuICAvLyByZXNldCBjdXJyZW50VGltZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gIGNvbnN0IHN5bmNlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnM/LmZpbmQoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSBhc1xuICAgIHwgVGltZVJhbmdlRmlsdGVyXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgLy8gaWYgc3luY2VkIGZpbHRlciBleGlzdCB3ZWUgbmVlZCB0byBtZXJnZSBhbmltYXRpb25Db25maWcgYW5kIGZpbHRlciBkb21haW5zXG4gIC8vIGFuZCB2YWxpZGF0ZSB0aGUgY3VycmVudCB0aW1lIGFnYWluc3QgdGhlIG5ldyBtZXJnZWQgZG9tYWluXG4gIGNvbnN0IG5ld0FuaW1hdGlvbkRvbWFpbiA9IHN5bmNlZEZpbHRlclxuICAgID8gbWVyZ2VUaW1lRG9tYWlucyhbbWVyZ2VkRG9tYWluLCBzeW5jZWRGaWx0ZXIuZG9tYWluXSlcbiAgICA6IG1lcmdlZERvbWFpbjtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBpc0luUmFuZ2Uoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lLCBuZXdBbmltYXRpb25Eb21haW4pXG4gICAgPyBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWVcbiAgICA6IG5ld0FuaW1hdGlvbkRvbWFpblswXTtcblxuICBpZiAoY3VycmVudFRpbWUgIT09IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSkge1xuICAgIC8vIGlmIGN1cnJlbnRUaW1lIGNoYW5nZWQsIG5lZWQgdG8gY2FsbCBhbmltYXRpb25UaW1lVXBkYXRlciB0byByZSBjYWxsIGZvcm1hdExheWVyRGF0YVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5leHRTdGF0ZSwge3ZhbHVlOiBjdXJyZW50VGltZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZWRpdG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0RWRpdG9yTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc2tldGNoZXNFbmFibGVkID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcztcbiAgaWYgKFxuICAgICFza2V0Y2hlc0VuYWJsZWQgJiZcbiAgICAobW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfUE9JTlQgfHwgbW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfTElORVNUUklORylcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIG1vZGUsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG59O1xuXG4vLyBjb25zdCBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSA9IChmZWF0dXJlKSA9PiAoey4uLmZlYXR1cmUsIGlkOiBmZWF0dXJlLmlkfSk7XG4vKipcbiAqIFVwZGF0ZSBlZGl0b3IgZmVhdHVyZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGZWF0dXJlc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmVzID0gW119OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmVhdHVyZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGxhc3RGZWF0dXJlID0gZmVhdHVyZXMubGVuZ3RoICYmIGZlYXR1cmVzW2ZlYXR1cmVzLmxlbmd0aCAtIDFdO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgLy8gb25seSBzYXZlIG5vbmUgZmlsdGVyIGZlYXR1cmVzIHRvIGVkaXRvclxuICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzLmZpbHRlcihmID0+ICFnZXRGaWx0ZXJJZEluRmVhdHVyZShmKSksXG4gICAgICBtb2RlOlxuICAgICAgICBsYXN0RmVhdHVyZSAmJiBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5pc0Nsb3NlZFxuICAgICAgICAgID8gbGFzdEZlYXR1cmUucHJvcGVydGllcz8uc2hhcGUgPT09ICdSZWN0YW5nbGUnXG4gICAgICAgICAgICA/IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgICAgICAgICA6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgICAgICAgOiBzdGF0ZS5lZGl0b3IubW9kZVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBleGlzdGluZyBmZWF0dXJlXG4gIGNvbnN0IHtzZWxlY3RlZEZlYXR1cmV9ID0gc3RhdGUuZWRpdG9yO1xuXG4gIC8vIElmIG5vIGZlYXR1cmUgaXMgc2VsZWN0ZWQgd2UgY2FuIHNpbXBseSByZXR1cm4gc2luY2Ugbm8gb3BlcmF0aW9uc1xuICBpZiAoIXNlbGVjdGVkRmVhdHVyZSkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGNoZWNrIGlmIHRoZSBmZWF0dXJlIGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlLmlkKTtcblxuICAvLyBpZiBmZWF0dXJlIGlzIHBhcnQgb2YgYSBmaWx0ZXJcbiAgY29uc3QgZmlsdGVySWQgPSBmZWF0dXJlICYmIGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQgJiYgZmVhdHVyZSkge1xuICAgIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pO1xuICAgIGNvbnN0IGZlYXR1cmVWYWx1ZSA9IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZlYXR1cmUsIGZpbHRlcklkKTtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmaWwgPT4gZmlsLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogZmVhdHVyZVZhbHVlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlOiBWaXNTdGF0ZSwgZmVhdHVyZT86IEZlYXR1cmUgfCBudWxsKTogRmVhdHVyZSB8IG51bGwge1xuICBpZiAoIWZlYXR1cmU/LmlkKSB7XG4gICAgcmV0dXJuIGZlYXR1cmUgfHwgbnVsbDtcbiAgfVxuICBpZiAoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IGZlYXR1cmUuaWQpIHtcbiAgICByZXR1cm4gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgfVxuICBjb25zdCBmcm9tRWRpdG9yID0gc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmZWF0dXJlLmlkKTtcbiAgaWYgKGZyb21FZGl0b3IpIHtcbiAgICByZXR1cm4gZnJvbUVkaXRvcjtcbiAgfVxuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgaWYgKGZpbHRlcj8udmFsdWUpIHtcbiAgICAgIHJldHVybiBmaWx0ZXIudmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmZWF0dXJlO1xufVxuXG4vKipcbiAqIFNldCB1c2VyLWZhY2luZyBHZW9KU09OIHByb3BlcnRpZXMgb24gYSBza2V0Y2ggb3IgcG9seWdvbi1maWx0ZXIgZmVhdHVyZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHByb3BlcnRpZXN9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZSA9IGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlLCBmZWF0dXJlKTtcbiAgaWYgKCFzb3VyY2U/LmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dEZlYXR1cmUgPSBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyhzb3VyY2UsIHByb3BlcnRpZXMpO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKG5leHRGZWF0dXJlKTtcbiAgY29uc3QgbmV4dEVkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IGZpbHRlcklkXG4gICAgICA/IHN0YXRlLmVkaXRvci5mZWF0dXJlc1xuICAgICAgOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMubWFwKGl0ZW0gPT4gKGl0ZW0uaWQgPT09IG5leHRGZWF0dXJlLmlkID8gbmV4dEZlYXR1cmUgOiBpdGVtKSksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOlxuICAgICAgc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IG5leHRGZWF0dXJlLmlkXG4gICAgICAgID8gbmV4dEZlYXR1cmVcbiAgICAgICAgOiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV4dEVkaXRvclxuICB9O1xuXG4gIGlmICghZmlsdGVySWQpIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPCAwKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKG5leHRGZWF0dXJlLCBmaWx0ZXJJZClcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IHNlbGVjdGVkIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHNlbGVjdGlvbkNvbnRleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gIGxldCBzZWxlY3RlZEZlYXR1cmUgPSBmZWF0dXJlO1xuICBpZiAoZmVhdHVyZT8ucHJvcGVydGllcykge1xuICAgIHNlbGVjdGVkRmVhdHVyZSA9IHtcbiAgICAgIC4uLmZlYXR1cmUsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgYmJveDogYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTilcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmUsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBEZWxldGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIGZpbHRlcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZX06IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuXG4gICAgLy8gTGFzdCBsYXllciByZW1vdmVkOiB0dXJuIHRoZSBmaWx0ZXIgcG9seWdvbiBiYWNrIGludG8gYSBza2V0Y2hcbiAgICBpZiAoIW5ld0xheWVySWQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBza2V0Y2hGZWF0dXJlID0gdG9Ta2V0Y2hGZWF0dXJlKGZlYXR1cmUpO1xuICAgICAgY29uc3Qgc3RhdGVXaXRob3V0RmlsdGVyID0gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIuZWRpdG9yLmZlYXR1cmVzLCBza2V0Y2hGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IHNrZXRjaEZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBjcmVhdGUgdGhlIHBvbHlnb24gZmlsdGVyLCBjcmVhdGUgaXRcbiAgICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gICAgLy8gYWRkIGZlYXR1cmUsIHJlbW92ZSBmZWF0dXJlIGZyb20gZWlkdG9yXG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgICAgZWRpdG9yOiB7XG4gICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IG5ld0xheWVySWRcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbHkgcG9seWdvbiBmaWx0ZXIgdG8gYWxsIHZpc2libGUgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmZWF0dXJlfSA9IHBheWxvYWQ7XG5cbiAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgY29uc3QgbmV3U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdmlzaWJsZUxheWVySWRzID0gZ2V0KHBheWxvYWQsICd2aXNpYmxlTGF5ZXJJZHMnKTtcbiAgY29uc3QgYWxsTGF5ZXJJZHMgPSBBcnJheS5pc0FycmF5KHZpc2libGVMYXllcklkcylcbiAgICA/IHZpc2libGVMYXllcklkc1xuICAgIDogc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmlzVmlzaWJsZSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IGFsbExheWVySWRzXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICAvLyB1cGRhdGUgY29sb3JGaWVsZCBkaXNwbGF5Rm9ybWF0XG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyczogbmV3U3RhdGUubGF5ZXJzLm1hcChsYXllciA9PlxuICAgICAgbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkPy5uYW1lICYmIGxheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIGNvbG9yRmllbGQ6IHtcbiAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxudHlwZSBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCA9IHtcbiAgZGF0YXNldDogVmlzU3RhdGVbJ2RhdGFzZXRzJ11bc3RyaW5nXTtcbiAgZmllbGQ6IEZpZWxkO1xufTtcblxuZnVuY3Rpb24gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHM/OiBGaWx0ZXJQcm9wcyB8IG51bGwpOiB1bmtub3duW10gfCB1bmRlZmluZWQge1xuICBpZiAoZmlsdGVyUHJvcHMgJiYgJ21hcHBlZFZhbHVlJyBpbiBmaWx0ZXJQcm9wcyAmJiBBcnJheS5pc0FycmF5KGZpbHRlclByb3BzLm1hcHBlZFZhbHVlKSkge1xuICAgIHJldHVybiBmaWx0ZXJQcm9wcy5tYXBwZWRWYWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB5aWVsZEZvclBhaW50KCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCAwKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyh7ZGF0YXNldCwgZmllbGR9OiBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCkge1xuICAvLyBZaWVsZCBzbyB0aGUgZGF0YSB0YWJsZSBhbmQgcGVyLWNvbHVtbiBsb2FkaW5nIHNwaW5uZXJzIGNhbiBwYWludCBmaXJzdC5cbiAgYXdhaXQgeWllbGRGb3JQYWludCgpO1xuICBjb25zdCBmaWx0ZXJQcm9wcyA9IGZpZWxkLmZpbHRlclByb3BzIHx8IGRhdGFzZXQuZ2V0Q29sdW1uRmlsdGVyUHJvcHMoZmllbGQubmFtZSk7XG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHMpO1xuICBjb25zdCB2YWx1ZXMgPSBtYXBwZWRWYWx1ZSA/PyBjb2xsZWN0Q29sdW1uVmFsdWVzKGRhdGFzZXQuZGF0YUNvbnRhaW5lciwgZmllbGQuZmllbGRJZHgpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRDb2x1bW5TdGF0aXN0aWNzKHtcbiAgICB2YWx1ZXMsXG4gICAgZmllbGRUeXBlOiBmaWVsZC50eXBlXG4gIH0pO1xuXG4gIHJldHVybiB7cmVzdWx0LCBmaWx0ZXJQcm9wc307XG59XG5cbmNvbnN0IExPQURfQ09MVU1OX1NUQVRTX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKFxuICByZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MsXG4gICdMT0FEX0NPTFVNTl9TVEFUU19UQVNLJ1xuKTtcblxuLyoqXG4gKiBTdGFydCBsb2FkaW5nIGNvbHVtbiBzdGF0aXN0aWNzIGZvciBvbmUgb3IgbW9yZSBmaWVsZHMuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWVsZE5hbWVzVG9Mb2FkID0gdG9BcnJheShmaWVsZE5hbWUpO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGRzVG9Mb2FkID0gZGF0YXNldD8uZmllbGRzLmZpbHRlcihmID0+IGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGRzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmaWVsZCA9PlxuICAgIGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZmllbGQubmFtZSkgPyB7Li4uZmllbGQsIGlzTG9hZGluZ1N0YXRzOiB0cnVlfSA6IGZpZWxkXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG5cbiAgY29uc3QgdGFza3MgPSBmaWVsZHNUb0xvYWQubWFwKGYgPT5cbiAgICBMT0FEX0NPTFVNTl9TVEFUU19UQVNLKHtkYXRhc2V0OiBuZXdEYXRhc2V0LCBmaWVsZDogZn0pLmJpbWFwKFxuICAgICAgKHtyZXN1bHQsIGZpbHRlclByb3BzfSkgPT4gbG9hZENvbHVtblN0YXRzU3VjY2VzcyhuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIHJlc3VsdCwgZmlsdGVyUHJvcHMpLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gbG9hZENvbHVtblN0YXRzRXJyb3IobmV3RGF0YXNldC5pZCwgZi5uYW1lLCBlcnJvcilcbiAgICApXG4gICk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIHJldHVybiB3aXRoVGFzayhuZXh0U3RhdGUsIHRhc2tzKTtcbn1cblxuLyoqXG4gKiBQZXJzaXN0IGxvYWRlZCBjb2x1bW4gc3RhdGlzdGljcyBvbiB0aGUgZmllbGQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3Jlc3VsdCwgZmlsdGVyUHJvcHMsIGRhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXJQcm9wcyA9IHtcbiAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICBjb2x1bW5TdGF0czogcmVzdWx0XG4gIH07XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmID0+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgZmlsdGVyUHJvcHM6IG5ld0ZpbHRlclByb3BzLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogQ2xlYXIgbG9hZGluZyBmbGFnIHdoZW4gY29sdW1uIHN0YXRpc3RpY3MgZmFpbC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgQ29uc29sZS5lcnJvcihlcnJvcik7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgdmlzaWJsZTogIXN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgZWRpdG9yIHNrZXRjaCBmZWF0dXJlcyBpbnRvIGEgR2VvSlNPTiBkYXRhc2V0L2xheWVyIGFuZCBjbGVhciB0aGUgc2tldGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9hY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmZWF0dXJlcyA9IHN0YXRlLmVkaXRvci5mZWF0dXJlcztcbiAgaWYgKCFmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID0gcHJvY2Vzc0dlb2pzb24oZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNvbnZlcnQgZHJhd24gZ2VvbWV0cnkgdG8gYSBsYXllcjogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2NvbnZlcnQtZWRpdG9yLWZlYXR1cmVzJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2xlYXJlZFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxhYmVsSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5MCkgKyAxMDtcblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoY2xlYXJlZFN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBkcmF3bi1nZW9tZXRyeS0ke2dlbmVyYXRlSGFzaElkKDYpfWAsXG4gICAgICAgIGxhYmVsOiBgRHJhd24gR2VvbWV0cnkgJHtsYWJlbElkfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQ29weSBpbi1tZW1vcnkgcm93cyAob3IgbG9hZGVkIHZlY3Rvci10aWxlIGZlYXR1cmVzKSBpbnNpZGUgdGhlIHNlbGVjdGVkXG4gKiBEcmF3IG9uIE1hcCBwb2x5Z29uIGludG8gYSBuZXcgZGF0YXNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRhRnJvbUZlYXR1cmVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLkV4dHJhY3REYXRhRnJvbUZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZlYXR1cmUgPSBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gIGNvbnN0IGRhdGFJZCA9IGxheWVyPy5jb25maWcuZGF0YUlkO1xuICBsZXQgZGF0YXNldCA9IGRhdGFJZCA/IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0gOiBudWxsO1xuXG4gIGlmICghbGF5ZXIgfHwgIWRhdGFzZXQgfHwgIWRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIEdQVSByYW5nZS90aW1lIGZpbHRlcnMgYXJlIG5vdCByZWZsZWN0ZWQgaW4gZmlsdGVyZWRJbmRleDsgZXZhbHVhdGUgdGhlbSBvbiBDUFVcbiAgLy8gdGhlIHNhbWUgd2F5IGV4cG9ydCBkYXRhIGRvZXMsIHRoZW4gY2xpcCB0aGUgcmVzdWx0IHRvIHRoZSBkcmF3aW5nLlxuICBpZiAoIWlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcihsYXllcikpIHtcbiAgICBzdGF0ZSA9IGZpbHRlckRhdGFzZXRDUFUoc3RhdGUsIGRhdGFJZCk7XG4gICAgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gICAgaWYgKCFkYXRhc2V0KSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG5cbiAgbGV0IGV4dHJhY3RlZDtcbiAgdHJ5IHtcbiAgICBleHRyYWN0ZWQgPSBleHRyYWN0Um93c0luc2lkZUZlYXR1cmUoe2xheWVyLCBkYXRhc2V0LCBmZWF0dXJlfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpZiAoIWV4dHJhY3RlZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmICghZXh0cmFjdGVkLnJvd0NvdW50KSB7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpXG4gICAgICAgICAgICAgID8gJ05vIGxvYWRlZCB2ZWN0b3IgdGlsZSBmZWF0dXJlcyBmb3VuZCBpbnNpZGUgdGhlIHNlbGVjdGVkIGRyYXdpbmcnXG4gICAgICAgICAgICAgIDogJ05vIHJvd3MgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJyxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZS1lbXB0eSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGxldCBkYXRhO1xuICB0cnkge1xuICAgIGRhdGEgPVxuICAgICAgZXh0cmFjdGVkLmtpbmQgPT09ICdnZW9qc29uJ1xuICAgICAgICA/IHByb2Nlc3NHZW9qc29uKHtcbiAgICAgICAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgICAgICBmZWF0dXJlczogZXh0cmFjdGVkLmZlYXR1cmVzXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB7ZmllbGRzOiBleHRyYWN0ZWQuZmllbGRzLCByb3dzOiBleHRyYWN0ZWQucm93c307XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBkYXRhc2V0czoge1xuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogYGV4dHJhY3QtJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYEV4dHJhY3RlZCAke2RhdGFzZXQubGFiZWx9YFxuICAgICAgfSxcbiAgICAgIGRhdGFcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlXG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2V2ZW50LCBsYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IHtpZDogZGVja2dsTGF5ZXJJZCwgY291bnR9ID0gZXZlbnQ7XG4gIGlmICghbGF5ZXIpIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyRmlsdGVyZWRJdGVtcyBsYXllciBkb2VzbnQgZXhpc3RzYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllci5maWx0ZXJlZEl0ZW1Db3VudD8uW2RlY2tnbExheWVySWRdID09PSBjb3VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxheWVyLmZpbHRlcmVkSXRlbUNvdW50ID0ge1xuICAgIC4uLmxheWVyLmZpbHRlcmVkSXRlbUNvdW50LFxuICAgIFtkZWNrZ2xMYXllcklkXTogY291bnRcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3dhcF8obGF5ZXIpKHN0YXRlLmxheWVycylcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgV01TIGZlYXR1cmUgaW5mbyBhbmQgcGluIHRvb2x0aXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdtc0ZlYXR1cmVJbmZvVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuV01TRmVhdHVyZUluZm9BY3Rpb25cbik6IFMge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmVJbmZvLCBjb29yZGluYXRlfSA9IGFjdGlvbjtcbiAgaWYgKCFsYXllcikge1xuICAgIGNvbnNvbGUud2FybihgV01TIGZlYXR1cmUgaW5mbyBsYXllciBkb2Vzbid0IGV4aXN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgY2xpY2tlZCBvYmplY3Qgc2ltaWxhciB0byBsYXllckNsaWNrVXBkYXRlciB0byBwaW4gdGhlIHRvb2x0aXBcbiAgY29uc3QgY2xpY2tlZCA9IGZlYXR1cmVJbmZvXG4gICAgPyB7XG4gICAgICAgIHBpY2tlZDogdHJ1ZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgd21zRmVhdHVyZUluZm86IGZlYXR1cmVJbmZvXG4gICAgICAgIH0sXG4gICAgICAgIGNvb3JkaW5hdGU6IGNvb3JkaW5hdGUgfHwgWzAsIDBdLFxuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpZHg6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllci5pZCksXG4gICAgICAgICAgICBpZDogbGF5ZXIuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKVxuICB9O1xufTtcblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBsYXllclRpbWVJbnRlcnZhbCA9IFRJTUVfSU5URVJWQUxTX09SREVSRURbaW50ZXJ2YWxJbmRleF07XG4gICAgaW50ZXJ2YWwgPSBMYXllclRvRmlsdGVyVGltZUludGVydmFsW2xheWVyVGltZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgcmVwbGFjZWQgPSB2YWx1ZVxuICAgICAgLm1hcCh2ID0+IGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2LCBkYXRhSWQsIGRhdGFJZFRvUmVwbGFjZSkpXG4gICAgICAuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBvdGhlcnNcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhSWQpICYmIHZhbHVlLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgLy8gZmlsdGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiB2YWx1ZS5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvUmVwbGFjZSA6IGQpKVxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUuY29uZmlnPy5kYXRhSWQgJiYgdmFsdWUuY29uZmlnPy5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnZhbHVlLmNvbmZpZyxcbiAgICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGRhdGFJZCkpIHtcbiAgICAvLyBmb3IgdmFsdWUgc2F2ZWQgYXMge1tkYXRhSWRdOiB7Li4ufX1cbiAgICByZXR1cm4ge1tkYXRhSWRUb1JlcGxhY2VdOiB2YWx1ZVtkYXRhSWRdfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBGaW5kIGRhdGFzZXRJZHMgZGVyaXZlZCBhIHNhdmVkIHZpc1N0YXRlIFByb3BlcnR5O1xuZnVuY3Rpb24gZmluZENoaWxkRGF0YXNldElkcyh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCBjaGlsZERhdGFJZHMgPSB2YWx1ZS5tYXAoZmluZENoaWxkRGF0YXNldElkcykuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIGNoaWxkRGF0YUlkcy5sZW5ndGggPyBjaGlsZERhdGFJZHMgOiBudWxsO1xuICB9XG5cbiAgLy8gY2hpbGQgZGF0YSBpZCB1c3VhbGx5IHN0b3JlcyBpbiB0aGUgZGVyaXZlZCBkYXRhc2V0IGluZm9cbiAgcmV0dXJuIHZhbHVlPy5uZXdEYXRhc2V0Py5pbmZvLmlkIHx8IG51bGw7XG59XG5cbi8vIG1vdmVkIHVubWVyZ2VkIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zXG5mdW5jdGlvbiBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCBwcm9wVmFsdWVzLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pIHtcbiAgLy8gcmVtb3ZlIHByb3AgdmFsdWUgZnJvbSBzdGF0ZVxuICAvLyBUT0RPOiBzaG91bGQgd2UgYWRkIHJlbW92ZSB1cGRhdGVyIHRvIG1lcmdlciBhcyB3ZWxsP1xuICBpZiAoIXByb3BWYWx1ZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgc3RhdGVSZW1vdmVkID1cbiAgICBwcm9wID09PSAnbGF5ZXJzJ1xuICAgICAgPyBwcm9wVmFsdWVzLnJlZHVjZSgoYWNjdSwgcHJvcFZhbHVlKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkOiBwcm9wVmFsdWUuaWR9KSwgc3RhdGUpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoc3RhdGVbcHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBbcHJvcF06IHN0YXRlW3Byb3BdLmZpbHRlcihwID0+ICFwcm9wVmFsdWVzLmZpbmQocHJvcFZhbHVlID0+IHAuaWQgPT09IHByb3BWYWx1ZS5pZCkpXG4gICAgICAgIH1cbiAgICAgIDogLy8gaWYgbm90IGFycmF5LCB3ZSB3b24ndCByZW1vdmUgaXQsIHJlbW92ZSBkYXRhc2V0IHNob3VsZCBoYW5kbGUgaXRcbiAgICAgICAgc3RhdGU7XG5cbiAgLy8gbW92ZSB0byBzdGF0ZVRvQmVNZXJnZWRcbiAgY29uc3QgdG9CZU1lcmdlZCA9IHtcbiAgICBbdG9NZXJnZVByb3BdOiBzYXZlVW5tZXJnZWRcbiAgICAgID8gLy8gY2FsbCBtZXJnZSBzYXZlVW5tZXJnZWQgbWV0aG9kXG4gICAgICAgIHNhdmVVbm1lcmdlZChzdGF0ZVJlbW92ZWQsIHByb3BWYWx1ZXMpXG4gICAgICA6IC8vIGlmIHRvTWVyZ2VQcm9wIGlzIGFyYWF5LCBhcHBlbmQgdG8gaXRcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8gWy4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sIC4uLnByb3BWYWx1ZXNdXG4gICAgICA6IC8vIHNhdmUgcHJvcFZhbHVlcyB0byB0b01lcmdlXG4gICAgICBpc09iamVjdChzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSxcbiAgICAgICAgICAuLi5wcm9wVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGVSZW1vdmVkLFxuICAgIC4uLnRvQmVNZXJnZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZURhdGFzZXRBbmREZXBzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIHJldHVybiBjb21wb3NlXzxUPihbXG4gICAgYXBwbHlfKHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUsIHtkYXRhSWQsIGRhdGFJZFRvVXNlfSksXG4gICAgYXBwbHlfKHJlbW92ZURhdGFzZXRVcGRhdGVyLCB7ZGF0YUlkfSlcbiAgXSkoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2U8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhzdGF0ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gIC8vIG1ha2UgYSBjb3B5IG9mIGxheWVyT3JkZXIsIGJlY2F1c2UgbGF5ZXIgaWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgYnkgY2FsbGluZyByZW1vdmVMYXllclVwZGF0ZXJcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIC8vIHByZXNlcnZlIGRhdGFzZXQgb3JkZXJcbiAgbmV4dFN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyID0gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpLm1hcChkID0+XG4gICAgZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkXG4gICk7XG5cbiAgLy8gcHJlc2VydmVMYXllck9yZGVyXG4gIGlmIChuZXh0U3RhdGUubGF5ZXJUb0JlTWVyZ2VkPy5sZW5ndGgpIHtcbiAgICAvLyBjb3B5IHNwbGl0IG1hcHMgdG8gYmUgbWVyZ2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzZXQgaW4gcmVtb3ZlIGxheWVyLlxuICAgIC8vIEtlZXAgdGhlIG9uZXMgb2YgYSBkYXRhc2V0IHJlcGxhY2VkIGEgbW9tZW50IGVhcmxpZXIgYW5kIG5vdCBtZXJnZWQgYmFjayB5ZXQ6XG4gICAgLy8gaXRzIGxheWVycyBhcmUgbm8gbG9uZ2VyIGluIHRoZSBjdXJyZW50IHNwbGl0IG1hcHMuXG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQgPSBjb21iaW5lU3BsaXRNYXBzQnlJbmRleChcbiAgICAgIHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQsXG4gICAgICBzZXJpYWxpemVkU3RhdGU/LnNwbGl0TWFwcyA/PyBbXVxuICAgICk7XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogVGhlIG9yZGVyIHRvIHByZXNlcnZlIGZvciB0aGUgaXRlbXMgdGhhdCB3aWxsIGJlIG1lcmdlZCBiYWNrLlxuICpcbiAqIGBpZHNgIGNvbWVzIGZyb20gdGhlIHNlcmlhbGl6ZWQgc3RhdGUsIHNvIGl0IGxpc3RzIGV2ZXJ5dGhpbmcgYnV0IHRoZSBpdGVtc1xuICogYW5vdGhlciBkYXRhc2V0J3MgcmVwbGFjZW1lbnQgcGFya2VkIGEgbW9tZW50IGFnbzogYW4gYXBwIHJlZnJlc2hpbmcgc2V2ZXJhbFxuICogZGF0YXNldHMgaW4gYSByb3cgcHJlcGFyZXMgdGhlIHNlY29uZCByZXBsYWNlbWVudCBiZWZvcmUgdGhlIGZpcnN0IG9uZSdzXG4gKiBpdGVtcyBoYXZlIG1lcmdlZCBiYWNrLiBXcml0aW5nIGBpZHNgIGFzIGl0IGlzIHdvdWxkIGRyb3AgdGhvc2UsIGFuZFxuICogYGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXJgIHB1dHMgYW4gaXRlbSBpdCBjYW5ub3QgcGxhY2UgYXQgdGhlIGZyb250IOKAlFxuICogc28gdGhleSB3b3VsZCBjb21lIGJhY2sgcmV2ZXJzZWQuIFdoZXJlIHRoZXkgYmVsb25nIGlzIHdoYXQgdGhlIG9yZGVyIHdyaXR0ZW5cbiAqIHdoZW4gdGhleSB3ZXJlIHBhcmtlZCBhbHJlYWR5IHNheXMsIHNvIHRoYXQgb3JkZXIgaXMga2VwdCBmb3IgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZChcbiAgcHJldmlvdXNPcmRlcjogc3RyaW5nW10gPSBbXSxcbiAgaWRzOiBzdHJpbmdbXSxcbiAgcGFya2VkOiB7aWQ/OiBzdHJpbmd9W11cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGFya2VkSWRzID0gcGFya2VkXG4gICAgLm1hcChpdGVtID0+IGl0ZW0/LmlkKVxuICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpICYmICFpZHMuaW5jbHVkZXMoaWQgYXMgc3RyaW5nKSk7XG5cbiAgaWYgKCFwYXJrZWRJZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGlkcztcbiAgfVxuXG4gIGNvbnN0IGtub3duID0gbmV3IFNldChbLi4uaWRzLCAuLi5wYXJrZWRJZHNdKTtcbiAgY29uc3Qgb3JkZXJlZCA9IChwcmV2aW91c09yZGVyIHx8IFtdKS5maWx0ZXIoaWQgPT4ga25vd24uaGFzKGlkKSk7XG4gIGNvbnN0IHJlc3QgPSBbLi4uaWRzLCAuLi5wYXJrZWRJZHNdLmZpbHRlcihpZCA9PiAhb3JkZXJlZC5pbmNsdWRlcyhpZCkpO1xuXG4gIHJldHVybiBbLi4ub3JkZXJlZCwgLi4ucmVzdF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXJnZXJPcHRpb25zID0ge1xuICAgICAgICAgIHByb3A6IHByb3BzW2ldLFxuICAgICAgICAgIHRvTWVyZ2VQcm9wOiB0b01lcmdlUHJvcHNbaV0sXG4gICAgICAgICAgZ2V0Q2hpbGREYXRhc2V0SWRzLFxuICAgICAgICAgIHNhdmVVbm1lcmdlZFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFdoYXQgYW5vdGhlciBkYXRhc2V0J3MgcmVwbGFjZW1lbnQgcGFya2VkIGEgbW9tZW50IGFnbyBhbmQgaGFzIG5vdFxuICAgICAgICAvLyBtZXJnZWQgYmFjayB5ZXQsIHJlYWQgYmVmb3JlIHRoaXMgb25lIHBhcmtzIGFueXRoaW5nIG9mIGl0cyBvd24uXG4gICAgICAgIGNvbnN0IHBhcmtlZEVsc2V3aGVyZSA9XG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRvQXJyYXkocmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXSA/PyBbXSlcbiAgICAgICAgICAgIDogW107XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICAvLyBPbmx5IHdoZW4gdGhpcyBkYXRhc2V0IGhhZCBpdGVtcyBvZiBpdHMgb3duIHRvIHBhcmsuIFRoZSB0b0JlTWVyZ2VkIGxpc3RcbiAgICAgICAgLy8gY2FuIHN0aWxsIGhvbGQgYW5vdGhlciBkYXRhc2V0J3MgaXRlbXMsIHJlcGxhY2VkIGEgbW9tZW50IGVhcmxpZXIgYW5kXG4gICAgICAgIC8vIG5vdCBtZXJnZWQgYmFjayB5ZXQ7IG92ZXJ3cml0aW5nIHRoZSBvcmRlciB0aGV5IHdlcmUgcGFya2VkIHdpdGggd291bGRcbiAgICAgICAgLy8gbWVyZ2UgdGhlbSBiYWNrIGluIHJldmVyc2UuXG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXBsYWNlZEl0ZW0gJiZcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQoXG4gICAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdLFxuICAgICAgICAgICAgcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpLFxuICAgICAgICAgICAgcGFya2VkRWxzZXdoZXJlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXBsYWNlZFN0YXRlO1xuICAgIH0sXG4gICAgc3RhdGVcbiAgKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShcbiAgc3RhdGUsXG4gIHJlcGxhY2VkSXRlbSxcbiAge3Byb3AsIHRvTWVyZ2VQcm9wLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZH1cbikge1xuICAvLyBwcm9wIGlzIGRlcGVuZHMgb24gdGhlIGRhdGFzZXQgdG8gYmUgcmVwbGFjZWRcbiAgLy8gcmVtb3ZlIHByb3AgZnJvbSBzdGF0ZSwgYW5kIG1vdmUgaXQgdG8gdG9CZU1lcmdlZFxuICBsZXQgbmV4dFN0YXRlID0gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcmVwbGFjZWRJdGVtLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pO1xuICBjb25zdCBjaGlsZERhdGFJZHMgPSBnZXRDaGlsZERhdGFzZXRJZHM/LihyZXBsYWNlZEl0ZW0pIHx8IGZpbmRDaGlsZERhdGFzZXRJZHMocmVwbGFjZWRJdGVtKTtcblxuICBpZiAoY2hpbGREYXRhSWRzKSB7XG4gICAgbmV4dFN0YXRlID0gdG9BcnJheShjaGlsZERhdGFJZHMpLnJlZHVjZSgoYWNjdSwgY2hpbGREYXRhSWQpID0+IHtcbiAgICAgIC8vIHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSBjaGlsZCBkYXRhc2V0IGlkLFxuICAgICAgLy8gYnV0IHN0aWxsIG5lZWQgdG8gbW92ZSBvdXQgb2Ygc3RhdGUgYW5kIG1lcmdlIGJhY2sgaW5cbiAgICAgIHJldHVybiByZXBsYWNlRGF0YXNldEFuZERlcHMoYWNjdSwgY2hpbGREYXRhSWQsIGNoaWxkRGF0YUlkKTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsZ0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLElBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQU4sc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFTLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFVLElBQUEsR0FBQVIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFXLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQVosT0FBQTtBQVdBLElBQUFhLFFBQUEsR0FBQWIsT0FBQTtBQWdDQSxJQUFBYyxNQUFBLEdBQUFkLE9BQUE7QUFxQ0EsSUFBQWUsWUFBQSxHQUFBZixPQUFBO0FBRUEsSUFBQWdCLFVBQUEsR0FBQWhCLE9BQUE7QUFtQ0EsSUFBQWlCLE9BQUEsR0FBQWpCLE9BQUE7QUFDQSxJQUFBa0IsZ0JBQUEsR0FBQWxCLE9BQUE7QUFVQSxJQUFBbUIsY0FBQSxHQUFBbkIsT0FBQTtBQUNBLElBQUFvQixlQUFBLEdBQUFwQixPQUFBO0FBV0EsSUFBQXFCLFFBQUEsR0FBQW5CLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBc0IsV0FBQSxHQUFBdEIsT0FBQTtBQW9CQSxJQUFBdUIsTUFBQSxHQUFBdkIsT0FBQTtBQVdBLElBQUF3QixpQkFBQSxHQUFBeEIsT0FBQTtBQUNBLElBQUF5QixXQUFBLEdBQUF6QixPQUFBO0FBZ0NBLElBQUEwQixRQUFBLEdBQUExQixPQUFBO0FBR0EsSUFBQTJCLFVBQUEsR0FBQTNCLE9BQUE7QUFBMkMsSUFBQTRCLFNBQUE7RUFBQUMsVUFBQTtBQUFBLFNBQUFqQix3QkFBQWtCLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFwQix1QkFBQSxZQUFBQSx3QkFBQWtCLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxtQkFBQVQsQ0FBQSxpQkFBQUEsQ0FBQSxnQkFBQVUsUUFBQSxDQUFBVixDQUFBLDBCQUFBQSxDQUFBLFNBQUFRLENBQUEsTUFBQUYsQ0FBQSxHQUFBTCxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRyxDQUFBLENBQUFLLEdBQUEsQ0FBQVgsQ0FBQSxVQUFBTSxDQUFBLENBQUFNLEdBQUEsQ0FBQVosQ0FBQSxHQUFBTSxDQUFBLENBQUFPLEdBQUEsQ0FBQWIsQ0FBQSxFQUFBUSxDQUFBLGNBQUFNLEVBQUEsSUFBQWQsQ0FBQSxnQkFBQWMsRUFBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsRUFBQSxPQUFBUCxDQUFBLElBQUFELENBQUEsR0FBQVcsTUFBQSxDQUFBQyxjQUFBLEtBQUFELE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQW5CLENBQUEsRUFBQWMsRUFBQSxPQUFBUCxDQUFBLENBQUFLLEdBQUEsSUFBQUwsQ0FBQSxDQUFBTSxHQUFBLElBQUFQLENBQUEsQ0FBQUUsQ0FBQSxFQUFBTSxFQUFBLEVBQUFQLENBQUEsSUFBQUMsQ0FBQSxDQUFBTSxFQUFBLElBQUFkLENBQUEsQ0FBQWMsRUFBQSxXQUFBTixDQUFBLEtBQUFSLENBQUEsRUFBQUMsQ0FBQTtBQUFBLFNBQUFtQixlQUFBbkIsQ0FBQSxRQUFBTSxDQUFBLEdBQUFjLFlBQUEsQ0FBQXBCLENBQUEsZ0NBQUFTLFFBQUEsQ0FBQUgsQ0FBQSxJQUFBQSxDQUFBLEdBQUFBLENBQUE7QUFBQSxTQUFBYyxhQUFBcEIsQ0FBQSxFQUFBRSxDQUFBLG9CQUFBTyxRQUFBLENBQUFULENBQUEsTUFBQUEsQ0FBQSxTQUFBQSxDQUFBLE1BQUFELENBQUEsR0FBQUMsQ0FBQSxDQUFBcUIsTUFBQSxDQUFBQyxXQUFBLGtCQUFBdkIsQ0FBQSxRQUFBTyxDQUFBLEdBQUFQLENBQUEsQ0FBQWdCLElBQUEsQ0FBQWYsQ0FBQSxFQUFBRSxDQUFBLGdDQUFBTyxRQUFBLENBQUFILENBQUEsVUFBQUEsQ0FBQSxZQUFBaUIsU0FBQSx5RUFBQXJCLENBQUEsR0FBQXNCLE1BQUEsR0FBQUMsTUFBQSxFQUFBekIsQ0FBQTtBQUFBLFNBQUEwQiwyQkFBQXhCLENBQUEsRUFBQUgsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBcUIsTUFBQSxJQUFBbkIsQ0FBQSxDQUFBbUIsTUFBQSxDQUFBTSxRQUFBLEtBQUF6QixDQUFBLHFCQUFBRixDQUFBLFFBQUE0QixLQUFBLENBQUFDLE9BQUEsQ0FBQTNCLENBQUEsTUFBQUYsQ0FBQSxHQUFBOEIsMkJBQUEsQ0FBQTVCLENBQUEsTUFBQUgsQ0FBQSxJQUFBRyxDQUFBLHVCQUFBQSxDQUFBLENBQUE2QixNQUFBLElBQUEvQixDQUFBLEtBQUFFLENBQUEsR0FBQUYsQ0FBQSxPQUFBZ0MsRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUE5QixDQUFBLFdBQUFBLEVBQUEsV0FBQTZCLEVBQUEsSUFBQTlCLENBQUEsQ0FBQTZCLE1BQUEsS0FBQUksSUFBQSxXQUFBQSxJQUFBLE1BQUFDLEtBQUEsRUFBQWxDLENBQUEsQ0FBQThCLEVBQUEsVUFBQWpDLENBQUEsV0FBQUEsRUFBQUcsQ0FBQSxVQUFBQSxDQUFBLEtBQUFLLENBQUEsRUFBQTBCLENBQUEsZ0JBQUFWLFNBQUEsaUpBQUFsQixDQUFBLEVBQUFnQyxDQUFBLE9BQUFDLENBQUEsZ0JBQUFKLENBQUEsV0FBQUEsRUFBQSxJQUFBbEMsQ0FBQSxHQUFBQSxDQUFBLENBQUFlLElBQUEsQ0FBQWIsQ0FBQSxNQUFBQyxDQUFBLFdBQUFBLEVBQUEsUUFBQUQsQ0FBQSxHQUFBRixDQUFBLENBQUF1QyxJQUFBLFdBQUFGLENBQUEsR0FBQW5DLENBQUEsQ0FBQWlDLElBQUEsRUFBQWpDLENBQUEsS0FBQUgsQ0FBQSxXQUFBQSxFQUFBRyxDQUFBLElBQUFvQyxDQUFBLE9BQUFqQyxDQUFBLEdBQUFILENBQUEsS0FBQUssQ0FBQSxXQUFBQSxFQUFBLFVBQUE4QixDQUFBLFlBQUFyQyxDQUFBLGNBQUFBLENBQUEsOEJBQUFzQyxDQUFBLFFBQUFqQyxDQUFBO0FBQUEsU0FBQXlCLDRCQUFBNUIsQ0FBQSxFQUFBbUMsQ0FBQSxRQUFBbkMsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBc0MsaUJBQUEsQ0FBQXRDLENBQUEsRUFBQW1DLENBQUEsT0FBQXJDLENBQUEsTUFBQXlDLFFBQUEsQ0FBQTFCLElBQUEsQ0FBQWIsQ0FBQSxFQUFBd0MsS0FBQSw2QkFBQTFDLENBQUEsSUFBQUUsQ0FBQSxDQUFBeUMsV0FBQSxLQUFBM0MsQ0FBQSxHQUFBRSxDQUFBLENBQUF5QyxXQUFBLENBQUFDLElBQUEsYUFBQTVDLENBQUEsY0FBQUEsQ0FBQSxHQUFBNEIsS0FBQSxDQUFBaUIsSUFBQSxDQUFBM0MsQ0FBQSxvQkFBQUYsQ0FBQSwrQ0FBQThDLElBQUEsQ0FBQTlDLENBQUEsSUFBQXdDLGlCQUFBLENBQUF0QyxDQUFBLEVBQUFtQyxDQUFBO0FBQUEsU0FBQUcsa0JBQUF0QyxDQUFBLEVBQUFtQyxDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBbkMsQ0FBQSxDQUFBNkIsTUFBQSxNQUFBTSxDQUFBLEdBQUFuQyxDQUFBLENBQUE2QixNQUFBLFlBQUFoQyxDQUFBLE1BQUFJLENBQUEsR0FBQXlCLEtBQUEsQ0FBQVMsQ0FBQSxHQUFBdEMsQ0FBQSxHQUFBc0MsQ0FBQSxFQUFBdEMsQ0FBQSxJQUFBSSxDQUFBLENBQUFKLENBQUEsSUFBQUcsQ0FBQSxDQUFBSCxDQUFBLFVBQUFJLENBQUE7QUFBQSxTQUFBNEMsUUFBQWhELENBQUEsRUFBQUcsQ0FBQSxRQUFBRixDQUFBLEdBQUFnQixNQUFBLENBQUFnQyxJQUFBLENBQUFqRCxDQUFBLE9BQUFpQixNQUFBLENBQUFpQyxxQkFBQSxRQUFBNUMsQ0FBQSxHQUFBVyxNQUFBLENBQUFpQyxxQkFBQSxDQUFBbEQsQ0FBQSxHQUFBRyxDQUFBLEtBQUFHLENBQUEsR0FBQUEsQ0FBQSxDQUFBNkMsTUFBQSxXQUFBaEQsQ0FBQSxXQUFBYyxNQUFBLENBQUFFLHdCQUFBLENBQUFuQixDQUFBLEVBQUFHLENBQUEsRUFBQWlELFVBQUEsT0FBQW5ELENBQUEsQ0FBQW9ELElBQUEsQ0FBQUMsS0FBQSxDQUFBckQsQ0FBQSxFQUFBSyxDQUFBLFlBQUFMLENBQUE7QUFBQSxTQUFBc0QsY0FBQXZELENBQUEsYUFBQUcsQ0FBQSxNQUFBQSxDQUFBLEdBQUFxRCxTQUFBLENBQUF4QixNQUFBLEVBQUE3QixDQUFBLFVBQUFGLENBQUEsV0FBQXVELFNBQUEsQ0FBQXJELENBQUEsSUFBQXFELFNBQUEsQ0FBQXJELENBQUEsUUFBQUEsQ0FBQSxPQUFBNkMsT0FBQSxDQUFBL0IsTUFBQSxDQUFBaEIsQ0FBQSxPQUFBd0QsT0FBQSxXQUFBdEQsQ0FBQSxRQUFBdUQsZ0JBQUEsYUFBQTFELENBQUEsRUFBQUcsQ0FBQSxFQUFBRixDQUFBLENBQUFFLENBQUEsU0FBQWMsTUFBQSxDQUFBMEMseUJBQUEsR0FBQTFDLE1BQUEsQ0FBQTJDLGdCQUFBLENBQUE1RCxDQUFBLEVBQUFpQixNQUFBLENBQUEwQyx5QkFBQSxDQUFBMUQsQ0FBQSxLQUFBK0MsT0FBQSxDQUFBL0IsTUFBQSxDQUFBaEIsQ0FBQSxHQUFBd0QsT0FBQSxXQUFBdEQsQ0FBQSxJQUFBYyxNQUFBLENBQUFDLGNBQUEsQ0FBQWxCLENBQUEsRUFBQUcsQ0FBQSxFQUFBYyxNQUFBLENBQUFFLHdCQUFBLENBQUFsQixDQUFBLEVBQUFFLENBQUEsaUJBQUFILENBQUEsSUE5TjNDO0FBQ0E7QUFlQTtBQVFBO0FBZ0NBO0FBdUNBO0FBaUlBO0FBQ0EsSUFBQTZELDRCQUFxQixFQUFDLENBQUM7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNQyxnQkFBZ0IsR0FBRyxJQUFJO0FBQzdCOztBQUVPLElBQU1DLHdCQUEyQyxHQUFBQyxPQUFBLENBQUFELHdCQUFBLEdBQUc7RUFDekRFLE9BQU8sRUFBRTtJQUNQQyxFQUFFLEVBQUUsU0FBUztJQUNiQyxLQUFLLEVBQUUsc0JBQXNCO0lBQzdCQyxPQUFPLEVBQUUsSUFBSTtJQUNiQyxNQUFNLEVBQUU7TUFDTkMsWUFBWSxFQUFFLENBQUMsQ0FBQztNQUNoQkMsV0FBVyxFQUFFLEtBQUs7TUFDbEJDLFdBQVcsRUFBRUMsd0JBQWEsQ0FBQ0M7SUFDN0I7RUFDRixDQUFDO0VBQ0RDLFFBQVEsRUFBRTtJQUNSVCxFQUFFLEVBQUUsVUFBVTtJQUNkQyxLQUFLLEVBQUUsdUJBQXVCO0lBQzlCQyxPQUFPLEVBQUUsS0FBSztJQUNkUSxRQUFRLEVBQUUsSUFBSTtJQUNkUCxNQUFNLEVBQUU7TUFDTlEsV0FBVyxFQUFFO0lBQ2Y7RUFDRixDQUFDO0VBQ0RDLEtBQUssRUFBRTtJQUNMWixFQUFFLEVBQUUsT0FBTztJQUNYQyxLQUFLLEVBQUUsb0JBQW9CO0lBQzNCQyxPQUFPLEVBQUUsS0FBSztJQUNkQyxNQUFNLEVBQUU7TUFDTjtNQUNBVSxJQUFJLEVBQUU7SUFDUjtFQUNGLENBQUM7RUFDREMsVUFBVSxFQUFFO0lBQ1ZkLEVBQUUsRUFBRSxZQUFZO0lBQ2hCQyxLQUFLLEVBQUUseUJBQXlCO0lBQ2hDQyxPQUFPLEVBQUUsS0FBSztJQUNkUSxRQUFRLEVBQUU7RUFDWjtBQUNGLENBQUM7QUFFTSxJQUFNSyx3QkFBeUMsR0FBQWpCLE9BQUEsQ0FBQWlCLHdCQUFBLEdBQUc7RUFDdkRDLE1BQU0sRUFBRSxJQUFJO0VBQ1pDLFdBQVcsRUFBRSxJQUFJO0VBQ2pCQyxLQUFLLEVBQUUsQ0FBQztFQUNSQyxXQUFXLEVBQUUsS0FBSztFQUNsQkMsU0FBUyxFQUFFLElBQUk7RUFDZkMsVUFBVSxFQUFFLElBQUk7RUFDaEJDLFFBQVEsRUFBRSxJQUFJO0VBQ2RDLGlCQUFpQixFQUFFLElBQUk7RUFDdkJDLFdBQVcsRUFBRSxLQUFLO0VBQ2xCQyxRQUFRLEVBQUU7QUFDWixDQUFDO0FBRU0sSUFBTUMsY0FBc0IsR0FBQTVCLE9BQUEsQ0FBQTRCLGNBQUEsR0FBRztFQUNwQ0MsSUFBSSxFQUFFQyx1QkFBWSxDQUFDQyxZQUFZO0VBQy9CQyxRQUFRLEVBQUUsRUFBRTtFQUNaQyxlQUFlLEVBQUUsSUFBSTtFQUNyQkMsT0FBTyxFQUFFO0FBQ1gsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxpQkFBMkIsR0FBQW5DLE9BQUEsQ0FBQW1DLGlCQUFBLEdBQUc7RUFDekM7RUFDQUMsT0FBTyxFQUFFO0lBQ1BDLEtBQUssRUFBRSxFQUFFO0lBQ1RDLFdBQVcsRUFBRTtFQUNmLENBQUM7RUFDRDtFQUNBQyxNQUFNLEVBQUUsRUFBRTtFQUNWQyxTQUFTLEVBQUUsRUFBRTtFQUNiQyxlQUFlLEVBQUUsRUFBRTtFQUNuQkMsVUFBVSxFQUFFLEVBQUU7RUFDZEMsb0JBQW9CLEVBQUUsSUFBSTtFQUUxQjtFQUNBQyxPQUFPLEVBQUUsRUFBRTtFQUNYQyxnQkFBZ0IsRUFBRSxFQUFFO0VBRXBCO0VBQ0FDLFFBQVEsRUFBRSxDQUFDLENBQUM7RUFDWkMsY0FBYyxFQUFFQyxTQUFTO0VBRXpCO0VBQ0FDLE9BQU8sRUFBRSxFQUFFO0VBQ1hDLFdBQVcsRUFBRSxFQUFFO0VBRWY7RUFDQUMsTUFBTSxFQUFFLEVBQUU7RUFDVkMsZ0JBQWdCLEVBQUUsRUFBRTtFQUVwQjtFQUNBQyxXQUFXLEVBQUUsRUFBRTtFQUNmQyxxQkFBcUIsRUFBRSxFQUFFO0VBQ3pCQyxvQkFBb0IsRUFBRSxJQUFJO0VBQzFCQyx1QkFBdUIsRUFBRSxLQUFLO0VBRTlCQyxpQkFBaUIsRUFBRTFELHdCQUF3QjtFQUMzQzJELHFCQUFxQixFQUFFLENBQUMsQ0FBQztFQUV6QkMsYUFBYSxFQUFFLFFBQVE7RUFDdkJDLGVBQWUsRUFBRSxRQUFRO0VBQ3pCQyxTQUFTLEVBQUViLFNBQVM7RUFDcEJjLE9BQU8sRUFBRWQsU0FBUztFQUNsQmUsUUFBUSxFQUFFLENBQUMsQ0FBQztFQUNaQyxrQkFBa0IsRUFBRUMsK0JBQW9CO0VBRXhDO0VBQ0FDLFNBQVMsRUFBRTtJQUNUO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0VBQUEsQ0FDRDtFQUNEQyxtQkFBbUIsRUFBRSxFQUFFO0VBQ3ZCQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7RUFDckI7RUFDQUMsWUFBWSxFQUFFQyxvQkFBWTtFQUUxQjtFQUNBO0VBQ0FDLGVBQWUsRUFBRXRELHdCQUF3QjtFQUV6Q3VELE1BQU0sRUFBRTVDLGNBQWM7RUFFdEI2QyxXQUFXLEVBQUUsS0FBSztFQUNsQkMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0VBQ3ZCO0VBQ0FDLHFCQUFxQixFQUFFLENBQUM7RUFFeEJDLE9BQU8sRUFBRSxFQUFFO0VBQ1hDLFdBQVcsRUFBRSxDQUFDLENBQUM7RUFFZjtFQUNBQyxPQUFPLEVBQUVDLGlDQUFpQjtFQUUxQjtFQUNBQyxNQUFNLEVBQUVDO0FBQ1YsQ0FBQztBQUVNLElBQU1DLHNCQUFzQixHQUFBbEYsT0FBQSxDQUFBa0Ysc0JBQUEsR0FBR0MsaUJBQUksQ0FBQ0MsWUFBWSxDQUNyRCxVQUFDQyxDQUFDLEVBQUVDLEVBQUU7RUFBQSxPQUFLQSxFQUFFLENBQUMsQ0FBQztBQUFBLEdBRWYsd0JBQ0YsQ0FBQztBQUVNLElBQU1DLDRCQUE0QixHQUFBdkYsT0FBQSxDQUFBdUYsNEJBQUEsR0FBR0osaUJBQUksQ0FBQ0MsWUFBWSxDQUMzRCxVQUFDQyxDQUFDLEVBQUVDLEVBQUU7RUFBQSxPQUFLQSxFQUFFLENBQUMsQ0FBQztBQUFBLEdBRWYsOEJBQ0YsQ0FBQztBQU9EO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0UsMkJBQTJCQSxDQUN6Q0MsS0FBUSxFQUFBQyxJQUFBLEVBRUw7RUFBQSxJQURGbEQsU0FBUyxHQUFBa0QsSUFBQSxDQUFUbEQsU0FBUztJQUFFbUQsS0FBSyxHQUFBRCxJQUFBLENBQUxDLEtBQUs7SUFBRUMsR0FBRyxHQUFBRixJQUFBLENBQUhFLEdBQUc7RUFFdEIsT0FBQXJHLGFBQUEsQ0FBQUEsYUFBQSxLQUNLa0csS0FBSztJQUNSbEQsTUFBTSxFQUFFa0QsS0FBSyxDQUFDbEQsTUFBTSxDQUFDc0QsR0FBRyxDQUFDLFVBQUNDLEdBQUcsRUFBRXZKLENBQUM7TUFBQSxPQUFNQSxDQUFDLEtBQUtxSixHQUFHLEdBQUdELEtBQUssR0FBR0csR0FBRztJQUFBLENBQUMsQ0FBQztJQUMvRHRELFNBQVMsRUFBRUEsU0FBUyxHQUNoQmlELEtBQUssQ0FBQ2pELFNBQVMsQ0FBQ3FELEdBQUcsQ0FBQyxVQUFDRSxDQUFDLEVBQUV4SixDQUFDO01BQUEsT0FBTUEsQ0FBQyxLQUFLcUosR0FBRyxHQUFHcEQsU0FBUyxHQUFHdUQsQ0FBQztJQUFBLENBQUMsQ0FBQyxHQUMxRE4sS0FBSyxDQUFDakQ7RUFBUztBQUV2QjtBQUVPLFNBQVN3RCxrQ0FBa0NBLENBQXFCUCxLQUFRLEVBQUVFLEtBQVksRUFBSztFQUNoRyxJQUFJTSxRQUFRLEdBQUdSLEtBQUs7RUFDcEIsSUFBSUEsS0FBSyxDQUFDdkIsU0FBUyxDQUFDbEcsTUFBTSxFQUFFO0lBQzFCaUksUUFBUSxHQUFBMUcsYUFBQSxDQUFBQSxhQUFBLEtBQ0hrRyxLQUFLO01BQ1J2QixTQUFTLEVBQUV5QixLQUFLLENBQUN0RixNQUFNLENBQUM2RixTQUFTLEdBQzdCLElBQUFDLDZCQUFzQixFQUFDVixLQUFLLENBQUN2QixTQUFTLEVBQUV5QixLQUFLLENBQUMsR0FDOUMsSUFBQVMsK0JBQXdCLEVBQUNYLEtBQUssQ0FBQ3ZCLFNBQVMsRUFBRXlCLEtBQUs7SUFBQyxFQUNyRDtFQUNIO0VBRUEsSUFBSUEsS0FBSyxDQUFDdEYsTUFBTSxDQUFDZ0csU0FBUyxDQUFDakcsT0FBTyxFQUFFO0lBQ2xDNkYsUUFBUSxHQUFHSyxxQkFBcUIsQ0FBQ0wsUUFBUSxDQUFDO0VBQzVDO0VBRUEsT0FBT0EsUUFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNNLGdCQUFnQkEsQ0FBSUMsSUFBTyxFQUFFaEksSUFBTyxFQUFjO0VBQ3pELElBQU1pSSxZQUF3QixHQUFHLENBQUMsQ0FBQztFQUNuQyxJQUFNQyxXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBR0MsR0FBRyxFQUFJO0lBQ3pCMUosTUFBTSxDQUFDZ0MsSUFBSSxDQUFDMEgsR0FBRyxDQUFDLENBQUNsSCxPQUFPLENBQUMsVUFBQW1ILEdBQUcsRUFBSTtNQUM5QixJQUNFLENBQUMzSixNQUFNLENBQUM0SixTQUFTLENBQUM5SixjQUFjLENBQUNDLElBQUksQ0FBQ3lKLFlBQVksRUFBRUcsR0FBRyxDQUFDLElBQ3hELENBQUMsSUFBQUUsbUJBQU8sRUFBQ04sSUFBSSxDQUFDSSxHQUFHLENBQUMsRUFBRXBJLElBQUksQ0FBQ29JLEdBQUcsQ0FBQyxDQUFDLEVBQzlCO1FBQ0FILFlBQVksQ0FBQ0csR0FBRyxDQUFDLEdBQUdwSSxJQUFJLENBQUNvSSxHQUFHLENBQUM7TUFDL0I7SUFDRixDQUFDLENBQUM7RUFDSixDQUFDO0VBQ0RGLFdBQVcsQ0FBQ0YsSUFBSSxDQUFDO0VBQ2pCRSxXQUFXLENBQUNsSSxJQUFJLENBQUM7RUFDakIsT0FBT2lJLFlBQVk7QUFDckI7QUFFQSxJQUFNTSx5QkFBeUIsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQzs7QUFFN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsdUJBQXVCQSxDQUNyQ3ZCLEtBQWUsRUFDZndCLE1BQXFELEVBQzNDO0VBQUEsSUFBQUMsZUFBQTtFQUNWLElBQU9DLFVBQVUsR0FBZ0NGLE1BQU0sQ0FBaERFLFVBQVU7SUFBRUMsY0FBYyxHQUFnQkgsTUFBTSxDQUFwQ0csY0FBYztJQUFFQyxVQUFVLEdBQUlKLE1BQU0sQ0FBcEJJLFVBQVU7RUFDN0M7RUFDQTtFQUNBLElBQU1DLGNBQWMsR0FBRyxJQUFBQyxvQ0FBb0IsRUFBQ0gsY0FBYyxDQUFDLEdBQ3ZELElBQUFJLGdDQUFnQixFQUFDL0IsS0FBSyxDQUFDVCxNQUFNLEVBQUVvQyxjQUFjLENBQUMsR0FDOUNBLGNBQWM7RUFDbEIsSUFBTUssUUFBUSxHQUFHaEMsS0FBSyxDQUFDbEQsTUFBTSxDQUFDbUYsSUFBSSxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN6SCxFQUFFLEtBQUtpSCxVQUFVO0VBQUEsRUFBQztFQUM1RCxJQUFJLENBQUNNLFFBQVEsSUFBSSxDQUFDSCxjQUFjLEVBQUU7SUFDaEMsT0FBTzdCLEtBQUs7RUFDZDtFQUNBLElBQUk0QixVQUFVLEtBQUssSUFBSSxJQUFJQSxVQUFVLEtBQUtyRSxTQUFTLElBQUl5QyxLQUFLLENBQUNsRCxNQUFNLENBQUM4RSxVQUFVLENBQUMsS0FBS0ksUUFBUSxFQUFFO0lBQzVGO0lBQ0EsT0FBT2hDLEtBQUs7RUFDZDtFQUNBLElBQU1tQyxPQUFPLEdBQUduQyxLQUFLLENBQUMzQyxRQUFRLENBQUN3RSxjQUFjLENBQUNqSCxNQUFNLENBQUN3SCxNQUFNLENBQUM7RUFDNUQsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPbkMsS0FBSztFQUNkO0VBQ0E7RUFDQSxJQUFNcUMsUUFBUSxHQUFHLElBQUFDLHFDQUFxQixFQUFDSCxPQUFPLEVBQUVOLGNBQWMsRUFBRTdCLEtBQUssQ0FBQ3BCLFlBQVksQ0FBQztFQUNuRixJQUFJLENBQUN5RCxRQUFRLEVBQUU7SUFDYixPQUFPckMsS0FBSztFQUNkO0VBRUEsSUFBSXVDLFNBQVMsR0FBR3ZDLEtBQUs7RUFFckIsSUFBSXFDLFFBQVEsQ0FBQ0csSUFBSSxJQUFJSCxRQUFRLENBQUNHLElBQUksS0FBS1IsUUFBUSxDQUFDUSxJQUFJLEVBQUU7SUFDcEQsSUFBTUMsYUFBYSxHQUFHekMsS0FBSyxDQUFDbEQsTUFBTSxDQUFDNEYsU0FBUyxDQUFDLFVBQUFSLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUN6SCxFQUFFLEtBQUtpSCxVQUFVO0lBQUEsRUFBQztJQUN0RSxJQUFJZSxhQUFhLElBQUksQ0FBQyxFQUFFO01BQ3RCRixTQUFTLEdBQUdJLHNCQUFzQixDQUFDSixTQUFTLEVBQUUsSUFBQUssd0JBQWUsRUFBQ1osUUFBUSxFQUFFSyxRQUFRLENBQUNHLElBQUksQ0FBQyxDQUFDO01BQ3ZGO01BQ0E7TUFDQSxJQUFJRCxTQUFTLENBQUN6RixNQUFNLENBQUN2RSxNQUFNLEtBQUt5SCxLQUFLLENBQUNsRCxNQUFNLENBQUN2RSxNQUFNLEVBQUU7UUFDbkQsSUFBTXNLLFVBQVUsR0FBR04sU0FBUyxDQUFDekYsTUFBTSxDQUFDMkYsYUFBYSxDQUFDLENBQUNoSSxFQUFFO1FBQ3JEOEgsU0FBUyxHQUFHaEIsdUJBQXVCLENBQ2pDZ0IsU0FBUyxFQUNULElBQUFPLHlCQUFnQixFQUFDRCxVQUFVLEVBQUEvSSxhQUFBLENBQUFBLGFBQUEsS0FBTTZILGNBQWM7VUFBRWxILEVBQUUsRUFBRW9JO1FBQVUsRUFBQyxDQUNsRSxDQUFDO01BQ0g7SUFDRjtJQUNBLE9BQU9OLFNBQVM7RUFDbEI7O0VBRUE7RUFDQTtFQUNBLElBQU1RLGtCQUFrQixJQUFBdEIsZUFBQSxHQUFHLElBQUF1Qiw4QkFBYyxFQUFDaEIsUUFBUSxFQUFFaEMsS0FBSyxDQUFDVCxNQUFNLENBQUMsY0FBQWtDLGVBQUEsY0FBQUEsZUFBQSxHQUFJO0lBQUM3RyxNQUFNLEVBQUUsQ0FBQztFQUFDLENBQUM7RUFDakYsSUFBTXFJLGtCQUFrQixHQUFHLElBQUFELDhCQUFjLEVBQUNYLFFBQVEsRUFBRXJDLEtBQUssQ0FBQ1QsTUFBTSxDQUFDO0VBQ2pFLElBQUksQ0FBQzBELGtCQUFrQixFQUFFO0lBQ3ZCLE9BQU9qRCxLQUFLO0VBQ2Q7RUFDQSxJQUFJLENBQUMsSUFBQXFCLG1CQUFPLEVBQUMwQixrQkFBa0IsRUFBRUUsa0JBQWtCLENBQUMsRUFBRTtJQUNwRCxJQUFNQyxPQUFPLEdBQUdwQyxnQkFBZ0IsQ0FBQ2lDLGtCQUFrQixDQUFDbkksTUFBTSxFQUFFcUksa0JBQWtCLENBQUNySSxNQUFNLENBQUM7SUFFdEYsSUFBSSxXQUFXLElBQUlzSSxPQUFPLEVBQUU7TUFDMUIsSUFBSUEsT0FBTyxDQUFDQyxTQUFTLEVBQUU7UUFDckJaLFNBQVMsR0FBR2EsMkJBQTJCLENBQ3JDYixTQUFTLEVBQ1QsSUFBQWMsNkJBQW9CLEVBQUNyQixRQUFRLEVBQUVrQixPQUFPLENBQUNDLFNBQVMsQ0FDbEQsQ0FBQztNQUNIO01BQ0EsT0FBT0QsT0FBTyxDQUFDQyxTQUFTO0lBQzFCO0lBRUEzTCxNQUFNLENBQUNnQyxJQUFJLENBQUN3SSxRQUFRLENBQUNzQixjQUFjLENBQUMsQ0FBQ3RKLE9BQU8sQ0FBQyxVQUFBdUosV0FBVyxFQUFJO01BQzFELElBQU1DLE9BQU8sR0FBR3hCLFFBQVEsQ0FBQ3NCLGNBQWMsQ0FBQ0MsV0FBVyxDQUFDO01BQ3BELElBQU1FLGdCQUFnQixHQUFHbkMseUJBQXlCLENBQUNsQixHQUFHLENBQUMsVUFBQXNELElBQUk7UUFBQSxPQUFJRixPQUFPLENBQUNFLElBQUksQ0FBQztNQUFBLEVBQUM7TUFDN0UsSUFBSUQsZ0JBQWdCLENBQUNFLElBQUksQ0FBQyxVQUFBRCxJQUFJO1FBQUEsT0FBSUEsSUFBSSxJQUFJUixPQUFPO01BQUEsRUFBQyxFQUFFO1FBQ2xEWCxTQUFTLEdBQUdxQiwrQkFBK0IsQ0FDekNyQixTQUFTLEVBQ1QsSUFBQXNCLHVDQUE4QixFQUM1QjdCLFFBQVEsRUFDUixJQUFBOEIsZ0JBQUksRUFBQ3pCLFFBQVEsQ0FBQ3pILE1BQU0sRUFBRTZJLGdCQUFnQixDQUFDLEVBQ3ZDRixXQUNGLENBQ0YsQ0FBQztRQUFDLElBQUFRLFNBQUEsR0FBQTdMLDBCQUFBLENBQ2lCdUwsZ0JBQWdCO1VBQUFPLEtBQUE7UUFBQTtVQUFuQyxLQUFBRCxTQUFBLENBQUFyTCxDQUFBLE1BQUFzTCxLQUFBLEdBQUFELFNBQUEsQ0FBQXBOLENBQUEsSUFBQWdDLElBQUEsR0FBcUM7WUFBQSxJQUExQitLLElBQUksR0FBQU0sS0FBQSxDQUFBcEwsS0FBQTtZQUNiLE9BQU9zSyxPQUFPLENBQUNRLElBQUksQ0FBQztVQUN0QjtRQUFDLFNBQUFPLEdBQUE7VUFBQUYsU0FBQSxDQUFBeE4sQ0FBQSxDQUFBME4sR0FBQTtRQUFBO1VBQUFGLFNBQUEsQ0FBQWhOLENBQUE7UUFBQTtNQUNIO0lBQ0YsQ0FBQyxDQUFDO0lBRUYsSUFBSVMsTUFBTSxDQUFDZ0MsSUFBSSxDQUFDMEosT0FBTyxDQUFDLENBQUMzSyxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ25DZ0ssU0FBUyxHQUFHMkIsd0JBQXdCLENBQ2xDM0IsU0FBUyxFQUNULElBQUE0QiwwQkFBaUIsRUFBQ25DLFFBQVEsRUFBRSxJQUFBOEIsZ0JBQUksRUFBQ3pCLFFBQVEsQ0FBQ3pILE1BQU0sRUFBRXBELE1BQU0sQ0FBQ2dDLElBQUksQ0FBQzBKLE9BQU8sQ0FBQyxDQUFDLENBQ3pFLENBQUM7SUFDSDtFQUNGO0VBRUEsT0FBT1gsU0FBUztBQUNsQjtBQUVBLFNBQVM2QixvQkFBb0JBLENBQUNwRSxLQUFlLEVBQUVxQyxRQUFlLEVBQUU1QixTQUFtQixFQUFZO0VBQzdGLElBQUlELFFBQVEsR0FBR0Qsa0NBQWtDLENBQUNQLEtBQUssRUFBRXFDLFFBQVEsQ0FBQztFQUNsRSxJQUFNZ0MsV0FBVyxHQUFHQyx3QkFBd0IsQ0FBQ3RFLEtBQUssQ0FBQztFQUNuRCxJQUFJLElBQUF1RSx3QkFBaUIsRUFBQ2xDLFFBQVEsQ0FBQyxJQUFJZ0MsV0FBVyxLQUFLLENBQUMsQ0FBQyxFQUFFO0lBQ3JEO0lBQ0E3RCxRQUFRLEdBQUdnRSxzQ0FBc0MsQ0FBQ2hFLFFBQVEsRUFBRTtNQUMxREwsR0FBRyxFQUFFa0UsV0FBVztNQUNoQkksTUFBTSxFQUFFaEUsU0FBUyxHQUFHQSxTQUFTLEdBQUcsSUFBQWlFLGlDQUEwQixFQUFDMUUsS0FBSyxDQUFDbEQsTUFBTSxDQUFDLENBQUN2RSxNQUFNLEdBQUc7SUFDcEYsQ0FBQyxDQUFDO0VBQ0o7RUFDQSxPQUFPaUksUUFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTMEQsd0JBQXdCQSxDQUN0Q2xFLEtBQWUsRUFDZndCLE1BQXNELEVBQzVDO0VBQ1YsSUFBT1EsUUFBUSxHQUFJUixNQUFNLENBQWxCUSxRQUFRO0VBQ2YsSUFBTTdCLEdBQUcsR0FBR0gsS0FBSyxDQUFDbEQsTUFBTSxDQUFDNEYsU0FBUyxDQUFDLFVBQUFSLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN6SCxFQUFFLEtBQUt1SCxRQUFRLENBQUN2SCxFQUFFO0VBQUEsRUFBQztFQUM3RCxJQUFNa0ssS0FBSyxHQUFHbk4sTUFBTSxDQUFDZ0MsSUFBSSxDQUFDZ0ksTUFBTSxDQUFDb0QsU0FBUyxDQUFDO0VBQzNDLElBQ0UsT0FBT3BELE1BQU0sQ0FBQ29ELFNBQVMsQ0FBQ3hDLE1BQU0sS0FBSyxRQUFRLElBQzNDWixNQUFNLENBQUNvRCxTQUFTLENBQUN4QyxNQUFNLEtBQUtKLFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQ3dILE1BQU0sRUFDbEQ7SUFDQSxJQUFBeUMsaUJBQUEsR0FBZ0NyRCxNQUFNLENBQUNvRCxTQUFTO01BQXpDeEMsTUFBTSxHQUFBeUMsaUJBQUEsQ0FBTnpDLE1BQU07TUFBSzBDLFVBQVUsT0FBQUMseUJBQUEsYUFBQUYsaUJBQUEsRUFBQXhPLFNBQUE7SUFDNUIsSUFBTTJPLGVBQWUsR0FBR0Msd0JBQXdCLENBQUNqRixLQUFLLEVBQUU7TUFDdERnQyxRQUFRLEVBQVJBLFFBQVE7TUFDUjRDLFNBQVMsRUFBRTtRQUFDeEMsTUFBTSxFQUFOQTtNQUFNO0lBQ3BCLENBQUMsQ0FBQztJQUNGLElBQU04QyxTQUFTLEdBQUdGLGVBQWUsQ0FBQ2xJLE1BQU0sQ0FBQ21GLElBQUksQ0FBQyxVQUFBQyxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDekgsRUFBRSxLQUFLdUgsUUFBUSxDQUFDdkgsRUFBRTtJQUFBLEVBQUM7SUFDeEUsT0FBT3lLLFNBQVMsSUFBSTFOLE1BQU0sQ0FBQ2dDLElBQUksQ0FBQ3NMLFVBQVUsQ0FBQyxDQUFDdk0sTUFBTSxHQUM5QzJMLHdCQUF3QixDQUFDYyxlQUFlLEVBQUU7TUFBQ2hELFFBQVEsRUFBRWtELFNBQVM7TUFBRU4sU0FBUyxFQUFFRTtJQUFVLENBQUMsQ0FBQyxHQUN2RkUsZUFBZTtFQUNyQjtFQUVBLElBQUkzQyxRQUFRLEdBQUdMLFFBQVEsQ0FBQ21ELGlCQUFpQixDQUFDM0QsTUFBTSxDQUFDb0QsU0FBUyxDQUFDO0VBRTNELElBQUk3SCxTQUFTO0VBRWIsSUFBSXNGLFFBQVEsQ0FBQytDLHdCQUF3QixDQUFDVCxLQUFLLENBQUMsRUFBRTtJQUM1QyxJQUFNVSxZQUFZLEdBQUdyRixLQUFLLENBQUNqRCxTQUFTLENBQUNvRCxHQUFHLENBQUM7SUFFekMsSUFBTW1GLHFCQUFxQixHQUFHLElBQUFDLDhCQUFrQixFQUFDbEQsUUFBUSxFQUFFckMsS0FBSyxFQUFFcUYsWUFBWSxDQUFDO0lBQy9FaEQsUUFBUSxHQUFHaUQscUJBQXFCLENBQUNwRixLQUFLO0lBQ3RDbkQsU0FBUyxHQUFHdUkscUJBQXFCLENBQUN2SSxTQUFTO0VBQzdDO0VBRUEsSUFBSXlELFFBQVEsR0FBR1IsS0FBSztFQUNwQixJQUFJLFdBQVcsSUFBSXdCLE1BQU0sQ0FBQ29ELFNBQVMsRUFBRTtJQUNuQ3BFLFFBQVEsR0FBRzRELG9CQUFvQixDQUFDNUQsUUFBUSxFQUFFNkIsUUFBUSxFQUFFYixNQUFNLENBQUNvRCxTQUFTLENBQUNuRSxTQUFTLENBQUM7RUFDakY7RUFFQSxJQUFJLFNBQVMsSUFBSWUsTUFBTSxDQUFDb0QsU0FBUyxJQUFJdkMsUUFBUSxDQUFDekgsTUFBTSxDQUFDZ0csU0FBUyxDQUFDakcsT0FBTyxFQUFFO0lBQ3RFO0lBQ0E2RixRQUFRLEdBQUdLLHFCQUFxQixDQUFDTCxRQUFRLENBQUM7RUFDNUM7RUFFQSxPQUFPVCwyQkFBMkIsQ0FBQ1MsUUFBUSxFQUFFO0lBQzNDTixLQUFLLEVBQUVtQyxRQUFRO0lBQ2Z0RixTQUFTLEVBQVRBLFNBQVM7SUFDVG9ELEdBQUcsRUFBSEE7RUFDRixDQUFDLENBQUM7QUFDSjtBQUVPLFNBQVNxRiwyQkFBMkJBLENBQXFCeEYsS0FBUSxFQUFFd0IsTUFBTSxFQUFLO0VBQ25GLElBQU9RLFFBQVEsR0FBaUJSLE1BQU0sQ0FBL0JRLFFBQVE7SUFBRTBCLElBQUksR0FBV2xDLE1BQU0sQ0FBckJrQyxJQUFJO0lBQUU5SyxLQUFLLEdBQUk0SSxNQUFNLENBQWY1SSxLQUFLO0VBQzVCLElBQU11SCxHQUFHLEdBQUdILEtBQUssQ0FBQ2xELE1BQU0sQ0FBQzRGLFNBQVMsQ0FBQyxVQUFBUixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDekgsRUFBRSxLQUFLdUgsUUFBUSxDQUFDdkgsRUFBRTtFQUFBLEVBQUM7RUFFN0QsSUFBTTRILFFBQVEsR0FBR0wsUUFBUSxDQUFDbUQsaUJBQWlCLENBQUM7SUFDMUN2RSxTQUFTLEVBQUE5RyxhQUFBLENBQUFBLGFBQUEsS0FDSmtJLFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQ2dHLFNBQVMsV0FBQTNHLGdCQUFBLGlCQUMzQnlKLElBQUksRUFBRzlLLEtBQUs7RUFFakIsQ0FBQyxDQUFDO0VBRUYsSUFBQTZNLG1CQUFBLEdBQTJCLElBQUFGLDhCQUFrQixFQUFDbEQsUUFBUSxFQUFFckMsS0FBSyxFQUFFQSxLQUFLLENBQUNqRCxTQUFTLENBQUNvRCxHQUFHLENBQUMsQ0FBQztJQUE3RXBELFNBQVMsR0FBQTBJLG1CQUFBLENBQVQxSSxTQUFTO0lBQUVtRCxLQUFLLEdBQUF1RixtQkFBQSxDQUFMdkYsS0FBSztFQUV2QixPQUFPSCwyQkFBMkIsQ0FBQ0MsS0FBSyxFQUFFO0lBQUNqRCxTQUFTLEVBQVRBLFNBQVM7SUFBRW1ELEtBQUssRUFBTEEsS0FBSztJQUFFQyxHQUFHLEVBQUhBO0VBQUcsQ0FBQyxDQUFDO0FBQ3BFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVN1Riw0QkFBNEJBLENBQzFDMUYsS0FBZSxFQUNmd0IsTUFBMEQsRUFDaEQ7RUFDVixJQUFPbUUsT0FBTyxHQUEyQm5FLE1BQU0sQ0FBeENtRSxPQUFPO0lBQUVsRixTQUFTLEdBQWdCZSxNQUFNLENBQS9CZixTQUFTO0lBQUVtRixVQUFVLEdBQUlwRSxNQUFNLENBQXBCb0UsVUFBVTtFQUNyQyxJQUFNMUYsS0FBSyxHQUFHRixLQUFLLENBQUNsRCxNQUFNLENBQUNtRixJQUFJLENBQUMsVUFBQTNCLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUM3RixFQUFFLEtBQUtrTCxPQUFPO0VBQUEsRUFBQztFQUV0RCxJQUFJLENBQUN6RixLQUFLLEVBQUU7SUFDVixPQUFPRixLQUFLO0VBQ2Q7RUFFQSxJQUFJUSxRQUFRLEdBQUdSLEtBQUs7RUFFcEIsSUFBSTRGLFVBQVUsRUFBRTtJQUNkO0lBQ0EsSUFBTUMsUUFBUSxHQUFHckYsUUFBUSxDQUFDL0IsU0FBUyxDQUFDaUUsU0FBUyxDQUFDLFVBQUFvRCxFQUFFO01BQUEsT0FBSUEsRUFBRSxDQUFDckwsRUFBRSxLQUFLbUwsVUFBVTtJQUFBLEVBQUM7SUFDekUsSUFBSW5GLFNBQVMsRUFBRTtNQUNiO01BQ0E7TUFDQUQsUUFBUSxHQUFHMEQsd0JBQXdCLENBQUMxRCxRQUFRLEVBQUUsSUFBQTJELDBCQUFpQixFQUFDakUsS0FBSyxFQUFFO1FBQUNPLFNBQVMsRUFBRTtNQUFJLENBQUMsQ0FBQyxDQUFDOztNQUUxRjtNQUNBLE9BQUEzRyxhQUFBLENBQUFBLGFBQUEsS0FDSzBHLFFBQVE7UUFDWC9CLFNBQVMsRUFBRStCLFFBQVEsQ0FBQy9CLFNBQVMsQ0FBQzJCLEdBQUcsQ0FBQyxVQUFBMEYsRUFBRTtVQUFBLE9BQ2xDQSxFQUFFLENBQUNyTCxFQUFFLEtBQUttTCxVQUFVLEdBQUE5TCxhQUFBLENBQUFBLGFBQUEsS0FFWGdNLEVBQUU7WUFDTGhKLE1BQU0sRUFBQWhELGFBQUEsQ0FBQUEsYUFBQSxLQUNEZ00sRUFBRSxDQUFDaEosTUFBTSxXQUFBN0MsZ0JBQUEsaUJBQ1gwTCxPQUFPLEVBQUcsS0FBSztVQUNqQixLQUFBN0wsYUFBQSxDQUFBQSxhQUFBLEtBR0VnTSxFQUFFO1lBQ0xoSixNQUFNLEVBQUFoRCxhQUFBLENBQUFBLGFBQUEsS0FDRGdNLEVBQUUsQ0FBQ2hKLE1BQU0sV0FBQTdDLGdCQUFBLGlCQUNYMEwsT0FBTyxFQUFHLElBQUk7VUFDaEIsRUFDRjtRQUFBLENBQ1A7TUFBQztJQUVMO0lBQ0E7SUFDQSxPQUFPSSx3QkFBd0IsQ0FBQ3ZGLFFBQVEsRUFBRSxJQUFBd0YsMEJBQWlCLEVBQUNILFFBQVEsRUFBRUYsT0FBTyxDQUFDLENBQUM7RUFDakYsQ0FBQyxNQUFNO0lBQ0w7SUFDQSxJQUFNdEQsUUFBUSxHQUFHbkMsS0FBSyxDQUFDaUYsaUJBQWlCLENBQUM7TUFBQzFFLFNBQVMsRUFBVEE7SUFBUyxDQUFDLENBQUM7SUFDckQsSUFBTU4sR0FBRyxHQUFHSyxRQUFRLENBQUMxRCxNQUFNLENBQUM0RixTQUFTLENBQUMsVUFBQVIsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ3pILEVBQUUsS0FBS2tMLE9BQU87SUFBQSxFQUFDO0lBRTVEbkYsUUFBUSxHQUFHNEQsb0JBQW9CLENBQUM1RCxRQUFRLEVBQUU2QixRQUFRLEVBQUU1QixTQUFTLENBQUM7SUFDOUQsT0FBT1YsMkJBQTJCLENBQUNTLFFBQVEsRUFBRTtNQUMzQ04sS0FBSyxFQUFFbUMsUUFBUTtNQUNmbEMsR0FBRyxFQUFIQTtJQUNGLENBQUMsQ0FBQztFQUNKO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNtRSx3QkFBd0JBLENBQUN0RSxLQUFlLEVBQVU7RUFDekQsT0FBT0EsS0FBSyxDQUFDN0MsT0FBTyxDQUFDdUYsU0FBUyxDQUFDLFVBQUEzTCxDQUFDO0lBQUEsT0FBS0EsQ0FBQyxDQUFxQmtQLHVCQUF1QjtFQUFBLEVBQUM7QUFDckY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxzQkFBc0JBLENBQ3BDbEcsS0FBZSxFQUNmd0IsTUFBb0QsRUFDMUM7RUFDVixJQUFPUSxRQUFRLEdBQWFSLE1BQU0sQ0FBM0JRLFFBQVE7SUFBRW1FLE9BQU8sR0FBSTNFLE1BQU0sQ0FBakIyRSxPQUFPO0VBRXhCLElBQU1oRyxHQUFHLEdBQUdILEtBQUssQ0FBQ2xELE1BQU0sQ0FBQzRGLFNBQVMsQ0FBQyxVQUFBUixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDekgsRUFBRSxLQUFLdUgsUUFBUSxDQUFDdkgsRUFBRTtFQUFBLEVBQUM7RUFDN0QsSUFBTTJMLGFBQWEsR0FBR3BHLEtBQUssQ0FBQ2xELE1BQU0sQ0FBQ3FELEdBQUcsQ0FBQztFQUN2QyxJQUFJaUcsYUFBYSxFQUFFO0lBQ2pCLElBQUkvRCxRQUFRO0lBQ1osSUFBSWdFLE9BQU8sR0FBRyxJQUFJO0lBRWxCLElBQUlGLE9BQU8sRUFBRTtNQUNYO01BQ0EsSUFBQUcsb0JBQUEsR0FBMkIsSUFBQWYsOEJBQWtCLEVBQUNhLGFBQWEsRUFBRXBHLEtBQUssRUFBRXpDLFNBQVMsQ0FBQztRQUF2RTJDLEtBQUssR0FBQW9HLG9CQUFBLENBQUxwRyxLQUFLO1FBQUVuRCxTQUFTLEdBQUF1SixvQkFBQSxDQUFUdkosU0FBUztNQUN2QnNGLFFBQVEsR0FBR25DLEtBQUs7TUFDaEJtRyxPQUFPLEdBQUd0SixTQUFTO0lBQ3JCLENBQUMsTUFBTTtNQUNMc0YsUUFBUSxHQUFHK0QsYUFBYSxDQUFDakIsaUJBQWlCLENBQUM7UUFDekMxRSxTQUFTLEVBQUU7TUFDYixDQUFDLENBQUM7TUFDRjRCLFFBQVEsQ0FBQzhELE9BQU8sR0FBRyxLQUFLO0lBQzFCO0lBRUEsT0FBT3BHLDJCQUEyQixDQUFDQyxLQUFLLEVBQUU7TUFBQ0csR0FBRyxFQUFIQSxHQUFHO01BQUVELEtBQUssRUFBRW1DLFFBQVE7TUFBRXRGLFNBQVMsRUFBRXNKO0lBQU8sQ0FBQyxDQUFDO0VBQ3ZGO0VBRUEsT0FBT3JHLEtBQUs7QUFDZDtBQUVBLFNBQVN1RyxxQkFBcUJBLENBQUNDLFNBQVMsRUFBRUMsU0FBUyxFQUF5QztFQUFBLElBQXZDQyxnQkFBZ0IsR0FBQTNNLFNBQUEsQ0FBQXhCLE1BQUEsUUFBQXdCLFNBQUEsUUFBQXdELFNBQUEsR0FBQXhELFNBQUEsTUFBRzRNLDZCQUFrQjtFQUN4RixJQUFJQyxZQUFZLEdBQUdILFNBQVMsQ0FBQ3ZOLEtBQUssQ0FBQyxDQUFDO0VBRXBDLElBQU0yTixhQUFhLEdBQUdKLFNBQVMsQ0FBQ3JHLEdBQUcsQ0FBQyxVQUFBMEcsRUFBRTtJQUFBLE9BQUlBLEVBQUUsQ0FBQ0MsS0FBSyxJQUFJRCxFQUFFLENBQUNDLEtBQUssQ0FBQzNOLElBQUk7RUFBQSxFQUFDLENBQUNNLE1BQU0sQ0FBQyxVQUFBNEcsQ0FBQztJQUFBLE9BQUlBLENBQUM7RUFBQSxFQUFDO0VBRW5GLElBQU0wRyxTQUFTLEdBQUdSLFNBQVMsQ0FBQzlNLE1BQU0sQ0FBQyxVQUFBM0MsQ0FBQztJQUFBLE9BQUksQ0FBQzhQLGFBQWEsQ0FBQ0ksUUFBUSxDQUFDbFEsQ0FBQyxDQUFDcUMsSUFBSSxDQUFDO0VBQUEsRUFBQztFQUN4RSxJQUFNOE4sWUFBWSxHQUFHTCxhQUFhLENBQUNuTixNQUFNLENBQUMsVUFBQTNDLENBQUM7SUFBQSxPQUFJLENBQUN5UCxTQUFTLENBQUN2RSxJQUFJLENBQUMsVUFBQWtGLEVBQUU7TUFBQSxPQUFJQSxFQUFFLENBQUMvTixJQUFJLEtBQUtyQyxDQUFDO0lBQUEsRUFBQztFQUFBLEVBQUM7O0VBRXBGO0VBQ0E2UCxZQUFZLEdBQUdBLFlBQVksQ0FBQ2xOLE1BQU0sQ0FBQyxVQUFBb04sRUFBRTtJQUFBLE9BQUlBLEVBQUUsQ0FBQ0MsS0FBSyxJQUFJLENBQUNHLFlBQVksQ0FBQ0QsUUFBUSxDQUFDSCxFQUFFLENBQUNDLEtBQUssQ0FBQzNOLElBQUksQ0FBQztFQUFBLEVBQUM7RUFDM0Z3TixZQUFZLEdBQUcsQ0FBQ0EsWUFBWSxDQUFDck8sTUFBTSxHQUFHLENBQUNtTyxnQkFBZ0IsQ0FBQyxHQUFHRSxZQUFZOztFQUV2RTtFQUNBQSxZQUFZLE1BQUFRLE1BQUEsS0FBQUMsbUJBQUEsYUFDUFQsWUFBWSxDQUFDbE4sTUFBTSxDQUFDLFVBQUFvTixFQUFFO0lBQUEsT0FBSUEsRUFBRSxDQUFDQyxLQUFLO0VBQUEsRUFBQyxPQUFBTSxtQkFBQSxhQUNuQ0wsU0FBUyxDQUFDNUcsR0FBRyxDQUFDLFVBQUFrSCxFQUFFO0lBQUEsSUFBQUMscUJBQUEsRUFBQUMsZUFBQTtJQUFBLE9BQUExTixhQUFBLENBQUFBLGFBQUEsS0FDZDRNLGdCQUFnQjtNQUNuQkssS0FBSyxFQUFFTyxFQUFFO01BQ1RHLGdCQUFnQixFQUFFQyxPQUFPLEVBQUFILHFCQUFBLElBQUFDLGVBQUEsR0FDdkJmLFNBQVMsQ0FBQ3hFLElBQUksQ0FBQyxVQUFBNkUsRUFBRTtRQUFBLE9BQUlBLEVBQUUsQ0FBQ1csZ0JBQWdCO01BQUEsRUFBQyxjQUFBRCxlQUFBLHVCQUF6Q0EsZUFBQSxDQUEyQ0MsZ0JBQWdCLGNBQUFGLHFCQUFBLGNBQUFBLHFCQUFBLEdBQ3pEYixnQkFBZ0IsQ0FBQ2UsZ0JBQ3JCO0lBQUM7RUFBQSxDQUNELENBQUMsRUFDSjtFQUVELE9BQU9iLFlBQVk7QUFDckI7QUFFQSxTQUFTZSwyQkFBMkJBLENBQUN4SCxHQUFHLEVBQUV1RCxJQUFJLEVBQUU5SyxLQUFLLEVBQUU2TixTQUFTLEVBQUU7RUFDaEUsSUFBSSxDQUFDalAsTUFBTSxDQUFDNEosU0FBUyxDQUFDOUosY0FBYyxDQUFDQyxJQUFJLENBQUNrUCxTQUFTLENBQUN0RyxHQUFHLENBQUMsRUFBRXVELElBQUksQ0FBQyxFQUFFO0lBQy9ELE9BQU8rQyxTQUFTO0VBQ2xCO0VBRUEsSUFBSUcsWUFBWSxHQUFHSCxTQUFTLENBQUN2TixLQUFLLENBQUMsQ0FBQztFQUVwQyxJQUFJd0ssSUFBSSxLQUFLLE9BQU8sSUFBSTlLLEtBQUssS0FBSyxJQUFJLElBQUk2TixTQUFTLENBQUNsTyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQzlEO0lBQ0FxTyxZQUFZLENBQUNnQixNQUFNLENBQUN6SCxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQzdCLENBQUMsTUFBTSxJQUFJdUQsSUFBSSxFQUFFO0lBQ2ZrRCxZQUFZLEdBQUdILFNBQVMsQ0FBQ3JHLEdBQUcsQ0FBQyxVQUFDMEcsRUFBRSxFQUFFaFEsQ0FBQztNQUFBLE9BQU1BLENBQUMsS0FBS3FKLEdBQUcsR0FBQXJHLGFBQUEsQ0FBQUEsYUFBQSxLQUFPZ04sRUFBRSxXQUFBN00sZ0JBQUEsaUJBQUd5SixJQUFJLEVBQUc5SyxLQUFLLEtBQUlrTyxFQUFFO0lBQUEsQ0FBQyxDQUFDO0VBQ3BGO0VBRUEsT0FBT0YsWUFBWTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2lCLDJCQUEyQkEsQ0FDekM3SCxLQUFlLEVBQ2Z3QixNQUF5RCxFQUMvQztFQUFBLElBQUFzRyxxQkFBQSxFQUFBQyxzQkFBQTtFQUNWLElBQU8vRixRQUFRLEdBQXNCUixNQUFNLENBQXBDUSxRQUFRO0lBQUU3QixHQUFHLEdBQWlCcUIsTUFBTSxDQUExQnJCLEdBQUc7SUFBRXVELElBQUksR0FBV2xDLE1BQU0sQ0FBckJrQyxJQUFJO0lBQUU5SyxLQUFLLEdBQUk0SSxNQUFNLENBQWY1SSxLQUFLO0VBQ2pDLElBQU82TixTQUFTLEdBQUl6RSxRQUFRLENBQUNwSCxNQUFNLENBQTVCNkwsU0FBUzs7RUFFaEI7RUFDQTtFQUNBLElBQU1DLGdCQUFnQixJQUFBb0IscUJBQUEsSUFBQUMsc0JBQUEsR0FDcEIvRixRQUFRLENBQUNnRyxxQkFBcUIsQ0FBQztJQUFDNUYsTUFBTSxFQUFFO0VBQUUsQ0FBQyxDQUFDLGNBQUEyRixzQkFBQSxnQkFBQUEsc0JBQUEsR0FBNUNBLHNCQUFBLENBQThDdEIsU0FBUyxjQUFBc0Isc0JBQUEsdUJBQXZEQSxzQkFBQSxDQUEwRCxDQUFDLENBQUMsY0FBQUQscUJBQUEsY0FBQUEscUJBQUEsR0FBSW5CLDZCQUFrQjtFQUVwRixJQUFJQyxZQUFZLEdBQUdILFNBQVMsQ0FBQ3ZOLEtBQUssQ0FBQyxDQUFDO0VBQ3BDLElBQUksQ0FBQ3VOLFNBQVMsQ0FBQ3RHLEdBQUcsQ0FBQyxJQUFJQSxHQUFHLEtBQUtzRyxTQUFTLENBQUNsTyxNQUFNLEVBQUU7SUFBQSxJQUFBMFAsV0FBQTtJQUMvQztJQUNBckIsWUFBWSxNQUFBUSxNQUFBLEtBQUFDLG1CQUFBLGFBQ1BaLFNBQVMsSUFBQTNNLGFBQUEsQ0FBQUEsYUFBQSxLQUVQNE0sZ0JBQWdCO01BQ25CZSxnQkFBZ0IsRUFBRUMsT0FBTyxFQUFBTyxXQUFBLEdBQUN4QixTQUFTLENBQUMsQ0FBQyxDQUFDLGNBQUF3QixXQUFBLHVCQUFaQSxXQUFBLENBQWNSLGdCQUFnQjtJQUFDLElBRTVEO0VBQ0g7RUFFQSxJQUFJdEgsR0FBRyxLQUFLLEtBQUssSUFBSXVELElBQUksS0FBSyxRQUFRLEVBQUU7SUFDdENrRCxZQUFZLEdBQUdMLHFCQUFxQixDQUFDM04sS0FBSyxFQUFFNk4sU0FBUyxFQUFFQyxnQkFBZ0IsQ0FBQztFQUMxRSxDQUFDLE1BQU0sSUFBSXZHLEdBQUcsS0FBSyxLQUFLLElBQUl1RCxJQUFJLEVBQUU7SUFDaENrRCxZQUFZLEdBQUdILFNBQVMsQ0FBQ3JHLEdBQUcsQ0FBQyxVQUFBMEcsRUFBRTtNQUFBLE9BQUFoTixhQUFBLENBQUFBLGFBQUEsS0FBU2dOLEVBQUUsV0FBQTdNLGdCQUFBLGlCQUFHeUosSUFBSSxFQUFHOUssS0FBSztJQUFBLENBQUUsQ0FBQztFQUM5RCxDQUFDLE1BQU07SUFDTGdPLFlBQVksR0FBR2UsMkJBQTJCLENBQUN4SCxHQUFHLEVBQUV1RCxJQUFJLEVBQUU5SyxLQUFLLEVBQUVnTyxZQUFZLENBQUM7RUFDNUU7RUFDQTtFQUNBLE9BQU8xQyx3QkFBd0IsQ0FBQ2xFLEtBQUssRUFBRTtJQUNyQ2dDLFFBQVEsRUFBUkEsUUFBUTtJQUNSNEMsU0FBUyxFQUFFO01BQUM2QixTQUFTLEVBQUVHO0lBQVk7RUFDckMsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxTQUFTc0IsNkJBQTZCQSxDQUFDL0YsT0FBTyxFQUFFdkQsWUFBWSxFQUFFc0IsS0FBSyxFQUFFWCxNQUFNLEVBQUU7RUFDM0UsSUFBTTRJLFdBQVcsR0FBRyxJQUFBbkYsOEJBQWMsRUFBQzlDLEtBQUssRUFBRVgsTUFBTSxDQUFDO0VBQ2pELE9BQU80SSxXQUFXLEdBQ2QsSUFBQTdGLHFDQUFxQixFQUFDSCxPQUFPLEVBQUVnRyxXQUFXLEVBQUV2SixZQUFZLEVBQUU7SUFDeER3SixnQkFBZ0IsRUFBRTtFQUNwQixDQUFDLENBQUMsR0FDRixJQUFJO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNuRCx3QkFBd0JBLENBQ3RDakYsS0FBZSxFQUNmd0IsTUFLQyxFQUNTO0VBQ1YsSUFBT1EsUUFBUSxHQUFlUixNQUFNLENBQTdCUSxRQUFRO0lBQUU0QyxTQUFTLEdBQUlwRCxNQUFNLENBQW5Cb0QsU0FBUztFQUMxQixJQUFPeEMsTUFBTSxHQUFJd0MsU0FBUyxDQUFuQnhDLE1BQU07RUFFYixJQUFJLENBQUNKLFFBQVEsSUFBSSxDQUFDaEMsS0FBSyxDQUFDM0MsUUFBUSxDQUFDK0UsTUFBTSxDQUFDLEVBQUU7SUFDeEMsT0FBT3BDLEtBQUs7RUFDZDtFQUNBLElBQU1HLEdBQUcsR0FBR0gsS0FBSyxDQUFDbEQsTUFBTSxDQUFDNEYsU0FBUyxDQUFDLFVBQUFSLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN6SCxFQUFFLEtBQUt1SCxRQUFRLENBQUN2SCxFQUFFO0VBQUEsRUFBQztFQUU3RCxJQUFJNEgsUUFBUSxHQUFHTCxRQUFRLENBQUNtRCxpQkFBaUIsQ0FBQztJQUFDL0MsTUFBTSxFQUFOQTtFQUFNLENBQUMsQ0FBQzs7RUFFbkQ7RUFDQSxJQUFJQyxRQUFRLENBQUNnRyxhQUFhLENBQUMsQ0FBQyxFQUFFO0lBQzVCLElBQU1DLFNBQVMsR0FBR0osNkJBQTZCLENBQzdDbEksS0FBSyxDQUFDM0MsUUFBUSxDQUFDK0UsTUFBTSxDQUFDLEVBQ3RCcEMsS0FBSyxDQUFDcEIsWUFBWSxFQUNsQnlELFFBQVEsRUFDUnJDLEtBQUssQ0FBQ1QsTUFDUixDQUFDO0lBQ0Q7SUFDQSxJQUFJLENBQUMrSSxTQUFTLEVBQUU7TUFDZCxJQUFNQyxZQUFZLEdBQUd2RyxRQUFRLENBQUNRLElBQUk7TUFDbEMsSUFBSStGLFlBQVksRUFBRTtRQUNoQmxHLFFBQVEsR0FBRyxJQUFJckMsS0FBSyxDQUFDcEIsWUFBWSxDQUFDMkosWUFBWSxDQUFDLENBQUM7VUFBQ25HLE1BQU0sRUFBTkEsTUFBTTtVQUFFM0gsRUFBRSxFQUFFdUgsUUFBUSxDQUFDdkg7UUFBRSxDQUFDLENBQUM7TUFDNUU7SUFDRixDQUFDLE1BQU07TUFDTDRILFFBQVEsR0FBR2lHLFNBQVM7SUFDdEI7RUFDRixDQUFDLE1BQU07SUFDTDtJQUNBO0lBQ0E7SUFDQSxJQUFNRSxnQkFBZ0IsR0FBR3hJLEtBQUssQ0FBQzNDLFFBQVEsQ0FBQytFLE1BQU0sQ0FBQyxDQUFDcUcsTUFBTTtJQUN0RCxJQUFNQyxjQUFtQyxHQUFHLENBQUMsQ0FBQztJQUM5Q2xSLE1BQU0sQ0FBQ21SLE1BQU0sQ0FBQ3RHLFFBQVEsQ0FBQ2lCLGNBQWMsQ0FBQyxDQUFDdEosT0FBTyxDQUFDLFVBQUE0TyxLQUFBLEVBQXVCO01BQUEsSUFBZEMsUUFBUSxHQUFBRCxLQUFBLENBQWY3QixLQUFLO01BQ3BELElBQU0rQixZQUFZLEdBQUd6RyxRQUFRLENBQUN6SCxNQUFNLENBQUNpTyxRQUFRLENBQUM7TUFDOUMsSUFBSUMsWUFBWSxFQUFFO1FBQ2hCLElBQU1DLE9BQU8sR0FBR1AsZ0JBQWdCLENBQUN2RyxJQUFJLENBQUMsVUFBQWxMLENBQUM7VUFBQSxPQUFJQSxDQUFDLENBQUNxQyxJQUFJLEtBQUswUCxZQUFZLENBQUMxUCxJQUFJO1FBQUEsRUFBQztRQUN4RXNQLGNBQWMsQ0FBQ0csUUFBUSxDQUFDLEdBQUdFLE9BQU8sSUFBSSxJQUFJO01BQzVDO0lBQ0YsQ0FBQyxDQUFDO0lBQ0YsSUFBSXZSLE1BQU0sQ0FBQ2dDLElBQUksQ0FBQ2tQLGNBQWMsQ0FBQyxDQUFDblEsTUFBTSxFQUFFO01BQ3RDOEosUUFBUSxHQUFHQSxRQUFRLENBQUM4QyxpQkFBaUIsQ0FBQ3VELGNBQWMsQ0FBQztJQUN2RDtJQUNBO0lBQ0E7SUFDQWxSLE1BQU0sQ0FBQ21SLE1BQU0sQ0FBQ3RHLFFBQVEsQ0FBQ2lCLGNBQWMsQ0FBQyxDQUFDdEosT0FBTyxDQUFDLFVBQUFnUCxLQUFBLEVBQVc7TUFBQSxJQUFUN0gsR0FBRyxHQUFBNkgsS0FBQSxDQUFIN0gsR0FBRztNQUNsRGtCLFFBQVEsQ0FBQzRHLHFCQUFxQixDQUFDOUgsR0FBRyxDQUFDO0lBQ3JDLENBQUMsQ0FBQztFQUNKO0VBRUFrQixRQUFRLEdBQUdBLFFBQVEsQ0FBQzhDLGlCQUFpQixDQUFDO0lBQ3BDMUUsU0FBUyxFQUFFdUIsUUFBUSxDQUFDcEgsTUFBTSxDQUFDNkYsU0FBUztJQUNwQ3lJLGNBQWMsRUFBRTtFQUNsQixDQUFDLENBQUM7RUFFRjdHLFFBQVEsQ0FBQzhHLGlCQUFpQixDQUFDbkosS0FBSyxDQUFDM0MsUUFBUSxDQUFDO0VBQzFDLElBQUErTCxvQkFBQSxHQUEyQixJQUFBN0QsOEJBQWtCLEVBQUNsRCxRQUFRLEVBQUVyQyxLQUFLLEVBQUV6QyxTQUFTLENBQUM7SUFBbEVSLFNBQVMsR0FBQXFNLG9CQUFBLENBQVRyTSxTQUFTO0lBQUVtRCxLQUFLLEdBQUFrSixvQkFBQSxDQUFMbEosS0FBSztFQUV2QixPQUFPSCwyQkFBMkIsQ0FBQ0MsS0FBSyxFQUFFO0lBQUNqRCxTQUFTLEVBQVRBLFNBQVM7SUFBRW1ELEtBQUssRUFBTEEsS0FBSztJQUFFQyxHQUFHLEVBQUhBO0VBQUcsQ0FBQyxDQUFDO0FBQ3BFO0FBRU8sU0FBU2tKLHFCQUFxQkEsQ0FBQ25KLEtBQUssRUFBRTdDLFFBQVEsRUFBRXVCLFlBQVksRUFBUztFQUMxRSxJQUFJeUQsUUFBUSxHQUFHbkMsS0FBSztFQUNwQixJQUFJLENBQUMxSSxNQUFNLENBQUNnQyxJQUFJLENBQUM2RCxRQUFRLENBQUMsQ0FBQzlFLE1BQU0sRUFBRTtJQUNqQztJQUNBLE9BQU8ySCxLQUFLO0VBQ2Q7RUFDQSxJQUFJLENBQUNBLEtBQUssQ0FBQ3RGLE1BQU0sQ0FBQ3dILE1BQU0sRUFBRTtJQUN4QjtJQUNBQyxRQUFRLEdBQUduQyxLQUFLLENBQUNpRixpQkFBaUIsQ0FBQztNQUFDL0MsTUFBTSxFQUFFNUssTUFBTSxDQUFDZ0MsSUFBSSxDQUFDNkQsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUFDLENBQUMsQ0FBQztFQUN4RTtFQUNBLElBQU04RSxPQUFPLEdBQUc5RSxRQUFRLENBQUNnRixRQUFRLENBQUN6SCxNQUFNLENBQUN3SCxNQUFNLENBQUM7RUFDaEQsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPakMsS0FBSztFQUNkOztFQUVBO0VBQ0EsSUFBTW9KLE1BQU0sR0FDVixPQUFPMUssWUFBWSxDQUFDeUQsUUFBUSxDQUFDRyxJQUFJLENBQUMsQ0FBQytHLHFCQUFxQixLQUFLLFVBQVUsR0FDbkUzSyxZQUFZLENBQUN5RCxRQUFRLENBQUNHLElBQUksQ0FBQyxDQUFDK0cscUJBQXFCLENBQUNwSCxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQzlEO0lBQUN3QyxLQUFLLEVBQUU7RUFBRSxDQUFDOztFQUVqQjtFQUNBLElBQU1BLEtBQUssR0FBR3ZNLEtBQUssQ0FBQ0MsT0FBTyxDQUFDaVIsTUFBTSxDQUFDLEdBQUdBLE1BQU0sR0FBR0EsTUFBTSxDQUFDM0UsS0FBSyxJQUFJLEVBQUU7RUFFakUsSUFBSUEsS0FBSyxDQUFDcE0sTUFBTSxFQUFFO0lBQ2hCOEosUUFBUSxHQUFHLElBQUl6RCxZQUFZLENBQUNzQixLQUFLLENBQUNzQyxJQUFJLENBQUMsQ0FBQTFJLGFBQUEsQ0FBQUEsYUFBQSxLQUNsQzZLLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDWGpLLEtBQUssRUFBRTJILFFBQVEsQ0FBQ3pILE1BQU0sQ0FBQ0YsS0FBSztNQUM1QjBILE1BQU0sRUFBRUMsUUFBUSxDQUFDekgsTUFBTSxDQUFDd0gsTUFBTTtNQUM5QjhHLGNBQWMsRUFBRTdHLFFBQVEsQ0FBQ3pILE1BQU0sQ0FBQ3NPLGNBQWM7TUFDOUN6SSxTQUFTLEVBQUU0QixRQUFRLENBQUN6SCxNQUFNLENBQUM2RjtJQUFTLEVBQ3JDLENBQUM7RUFDSjtFQUNBLE9BQU8sT0FBTzRCLFFBQVEsQ0FBQ2dILHFCQUFxQixLQUFLLFVBQVUsR0FDdkRoSCxRQUFRLENBQUNnSCxxQkFBcUIsQ0FBQ2xILE9BQU8sQ0FBQyxHQUN2Q0UsUUFBUTtBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNNLHNCQUFzQkEsQ0FDcEMzQyxLQUFlLEVBQ2Z3QixNQUFvRCxFQUMxQztFQUNWLElBQU9RLFFBQVEsR0FBYVIsTUFBTSxDQUEzQlEsUUFBUTtJQUFFd0gsT0FBTyxHQUFJaEksTUFBTSxDQUFqQmdJLE9BQU87RUFDeEIsSUFBSSxDQUFDeEgsUUFBUSxFQUFFO0lBQ2IsT0FBT2hDLEtBQUs7RUFDZDtFQUNBLElBQU15SixLQUFLLEdBQUd6SCxRQUFRLENBQUN2SCxFQUFFO0VBQ3pCLElBQU0wRixHQUFHLEdBQUdILEtBQUssQ0FBQ2xELE1BQU0sQ0FBQzRGLFNBQVMsQ0FBQyxVQUFBUixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDekgsRUFBRSxLQUFLZ1AsS0FBSztFQUFBLEVBQUM7RUFFdkQsSUFBSSxDQUFDekosS0FBSyxDQUFDcEIsWUFBWSxDQUFDNEssT0FBTyxDQUFDLEVBQUU7SUFDaENFLGVBQU8sQ0FBQ0MsS0FBSyxJQUFBdkMsTUFBQSxDQUFJb0MsT0FBTywrQkFBNEIsQ0FBQztJQUNyRCxPQUFPeEosS0FBSztFQUNkO0VBQ0EsSUFBSXFDLFFBQVEsR0FBRyxJQUFJckMsS0FBSyxDQUFDcEIsWUFBWSxDQUFDNEssT0FBTyxDQUFDLENBQUM7SUFDN0M7SUFDQTlPLEtBQUssRUFBRXNILFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQ0YsS0FBSztJQUM1QndPLGNBQWMsRUFBRWxILFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQ3NPLGNBQWM7SUFDOUM5RyxNQUFNLEVBQUVKLFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQ3dIO0VBQzFCLENBQUMsQ0FBQztFQUVGLElBQUksQ0FBQ0osUUFBUSxDQUFDUSxJQUFJLEVBQUU7SUFDbEI7SUFDQUgsUUFBUSxHQUFHZ0gscUJBQXFCLENBQUNoSCxRQUFRLEVBQUVyQyxLQUFLLENBQUMzQyxRQUFRLEVBQUUyQyxLQUFLLENBQUNwQixZQUFZLENBQUM7RUFDaEYsQ0FBQyxNQUFNO0lBQ0w7SUFDQTtJQUNBOztJQUVBLElBQU1nTCxpQkFBaUIsR0FDckIsT0FBTzVKLEtBQUssQ0FBQ3BCLFlBQVksQ0FBQzRLLE9BQU8sQ0FBQyxDQUFDRCxxQkFBcUIsS0FBSyxVQUFVLEdBQ25FdkosS0FBSyxDQUFDcEIsWUFBWSxDQUFDNEssT0FBTyxDQUFDLENBQUNELHFCQUFxQixDQUFDdkosS0FBSyxDQUFDM0MsUUFBUSxDQUFDZ0YsUUFBUSxDQUFDekgsTUFBTSxDQUFDd0gsTUFBTSxDQUFDLENBQUMsR0FDekYsSUFBSTtJQUVWQyxRQUFRLENBQUN3SCxtQkFBbUIsQ0FDMUI3SCxRQUFRLENBQUNwSCxNQUFNLEVBQ2ZvSCxRQUFRLENBQUM4SCxpQkFBaUIsRUFDMUI5SixLQUFLLENBQUMzQyxRQUFRLEVBQ2R1TSxpQkFDRixDQUFDO0lBQ0R2SCxRQUFRLENBQUM4RyxpQkFBaUIsQ0FBQ25KLEtBQUssQ0FBQzNDLFFBQVEsQ0FBQztFQUM1QztFQUVBLElBQU9nQixPQUFPLEdBQWUyQixLQUFLLENBQTNCM0IsT0FBTztJQUFFRCxTQUFTLEdBQUk0QixLQUFLLENBQWxCNUIsU0FBUztFQUV6QixJQUFJb0MsUUFBUSxHQUFBMUcsYUFBQSxDQUFBQSxhQUFBLEtBQ1BrRyxLQUFLO0lBQ1IzQixPQUFPLEVBQUUyRCxRQUFRLENBQUMrSCxjQUFjLENBQUMxTCxPQUFPLENBQUMsR0FBR2QsU0FBUyxHQUFHYyxPQUFPO0lBQy9ERCxTQUFTLEVBQUU0RCxRQUFRLENBQUMrSCxjQUFjLENBQUMzTCxTQUFTLENBQUMsR0FBR2IsU0FBUyxHQUFHYTtFQUFTLEVBQ3RFO0VBRUQsSUFBQTRMLG9CQUFBLEdBQTJCLElBQUF6RSw4QkFBa0IsRUFBQ2xELFFBQVEsRUFBRTdCLFFBQVEsQ0FBQztJQUExRHpELFNBQVMsR0FBQWlOLG9CQUFBLENBQVRqTixTQUFTO0lBQUVtRCxLQUFLLEdBQUE4SixvQkFBQSxDQUFMOUosS0FBSztFQUN2Qk0sUUFBUSxHQUFHVCwyQkFBMkIsQ0FBQ1MsUUFBUSxFQUFFO0lBQUN6RCxTQUFTLEVBQVRBLFNBQVM7SUFBRW1ELEtBQUssRUFBTEEsS0FBSztJQUFFQyxHQUFHLEVBQUhBO0VBQUcsQ0FBQyxDQUFDO0VBRXpFLElBQUlELEtBQUssQ0FBQ3RGLE1BQU0sQ0FBQ2dHLFNBQVMsQ0FBQ2pHLE9BQU8sSUFBSXFILFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQ2dHLFNBQVMsQ0FBQ2pHLE9BQU8sRUFBRTtJQUN2RTZGLFFBQVEsR0FBR0sscUJBQXFCLENBQUNMLFFBQVEsQ0FBQztFQUM1Qzs7RUFFQTtFQUNBLElBQUlSLEtBQUssQ0FBQ3ZCLFNBQVMsQ0FBQ2xHLE1BQU0sRUFBRTtJQUMxQmlJLFFBQVEsR0FBQTFHLGFBQUEsQ0FBQUEsYUFBQSxLQUNIMEcsUUFBUTtNQUNYL0IsU0FBUyxFQUFFK0IsUUFBUSxDQUFDL0IsU0FBUyxDQUFDMkIsR0FBRyxDQUFDLFVBQUE2SixRQUFRLEVBQUk7UUFDNUMsSUFBQUMsZ0JBQUEsR0FBK0NELFFBQVEsQ0FBQ25OLE1BQU07VUFBOUNxTixXQUFXLEdBQUFELGdCQUFBLENBQW5CVCxLQUFLO1VBQW1CVyxXQUFXLE9BQUFyRix5QkFBQSxhQUFBbUYsZ0JBQUEsR0FBbkNULEtBQUssRUFBQXJKLEdBQUEsQ0FBQXpJLGNBQUE7UUFDYixPQUFPOFIsS0FBSyxJQUFJUSxRQUFRLENBQUNuTixNQUFNLEdBQUFoRCxhQUFBLENBQUFBLGFBQUEsS0FFdEJtUSxRQUFRO1VBQ1huTixNQUFNLEVBQUFoRCxhQUFBLENBQUFBLGFBQUEsS0FDRHNRLFdBQVcsV0FBQW5RLGdCQUFBLGlCQUNiaUcsS0FBSyxDQUFDekYsRUFBRSxFQUFHMFAsV0FBVztRQUN4QixLQUVIRixRQUFRO01BQ2QsQ0FBQztJQUFDLEVBQ0g7RUFDSDs7RUFFQTtFQUNBekosUUFBUSxHQUFBMUcsYUFBQSxDQUFBQSxhQUFBLEtBQ0gwRyxRQUFRO0lBQ1h2RCxVQUFVLEVBQUUsSUFBQW9OLHlDQUE2QixFQUFDN0osUUFBUSxDQUFDdkQsVUFBVSxFQUFFK0UsUUFBUSxDQUFDdkgsRUFBRSxFQUFFNEgsUUFBUSxDQUFDNUgsRUFBRTtFQUFDLEVBQ3pGO0VBRUQsT0FBTytGLFFBQVE7QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzhKLG9DQUFvQ0EsQ0FDM0MxRixTQUFtRixFQUNuRnpDLE9BQWdDLEVBQ2hDb0ksYUFBMEQsRUFDMUQ7RUFDQSxJQUFJLENBQUNwSSxPQUFPLElBQUksQ0FBQ29JLGFBQWEsRUFBRTtJQUM5QixPQUFPM0YsU0FBUztFQUNsQjtFQUNBLElBQU00RixRQUFRLEdBQUc1RixTQUFTLENBQUMyRixhQUFhLENBQUN4RCxLQUFLLENBQUM7RUFDL0MsSUFBSSxDQUFDeUQsUUFBUSxJQUFJLElBQUFDLFFBQUEsYUFBT0QsUUFBUSxNQUFLLFFBQVEsSUFBSSxDQUFDQSxRQUFRLENBQUNwUixJQUFJLEVBQUU7SUFDL0QsT0FBT3dMLFNBQVM7RUFDbEI7RUFDQSxJQUFNOEYsS0FBSyxHQUFHdkksT0FBTyxDQUFDc0csTUFBTSxDQUFDeEcsSUFBSSxDQUFDLFVBQUFrRixFQUFFO0lBQUEsT0FBSUEsRUFBRSxDQUFDL04sSUFBSSxLQUFLb1IsUUFBUSxDQUFDcFIsSUFBSTtFQUFBLEVBQUM7RUFDbEUsSUFBSSxDQUFDc1IsS0FBSyxFQUFFO0lBQ1YsT0FBTzlGLFNBQVM7RUFDbEI7RUFDQSxPQUFBOUssYUFBQSxDQUFBQSxhQUFBLEtBQ0s4SyxTQUFTLFdBQUEzSyxnQkFBQSxpQkFDWHNRLGFBQWEsQ0FBQ3hELEtBQUssRUFBRzJELEtBQUs7QUFFaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzlHLCtCQUErQkEsQ0FDN0M1RCxLQUFlLEVBQ2Z3QixNQUFtRSxFQUN6RDtFQUNWLElBQU9RLFFBQVEsR0FBMkJSLE1BQU0sQ0FBekNRLFFBQVE7SUFBRTJJLFlBQVksR0FBYW5KLE1BQU0sQ0FBL0JtSixZQUFZO0lBQUVuSCxPQUFPLEdBQUloQyxNQUFNLENBQWpCZ0MsT0FBTztFQUN0QyxJQUFJLENBQUN4QixRQUFRLENBQUNwSCxNQUFNLENBQUN3SCxNQUFNLEVBQUU7SUFDM0IsT0FBT3BDLEtBQUs7RUFDZDtFQUVBLElBQU1tQyxPQUFPLEdBQUduQyxLQUFLLENBQUMzQyxRQUFRLENBQUMyRSxRQUFRLENBQUNwSCxNQUFNLENBQUN3SCxNQUFNLENBQUM7RUFDdEQsSUFBTXdDLFNBQVMsR0FBRzBGLG9DQUFvQyxDQUNwRDlJLE1BQU0sQ0FBQ29ELFNBQVMsRUFDaEJ6QyxPQUFPLEVBQ1BILFFBQVEsQ0FBQ3NCLGNBQWMsQ0FBQ0UsT0FBTyxDQUNqQyxDQUFDO0VBRUQsSUFBTXJELEdBQUcsR0FBR0gsS0FBSyxDQUFDbEQsTUFBTSxDQUFDNEYsU0FBUyxDQUFDLFVBQUFSLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN6SCxFQUFFLEtBQUt1SCxRQUFRLENBQUN2SCxFQUFFO0VBQUEsRUFBQztFQUM3RCxJQUFJNEgsUUFBUSxHQUFHTCxRQUFRLENBQUNtRCxpQkFBaUIsQ0FBQ1AsU0FBUyxDQUFDO0VBQ3BELElBQUkrRixZQUFZLEVBQUV0SSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ3VJLG9CQUFvQixDQUFDRCxZQUFZLENBQUM7RUFFeEV0SSxRQUFRLENBQUN3SSx3QkFBd0IsQ0FBQzFJLE9BQU8sRUFBRXFCLE9BQU8sQ0FBQzs7RUFFbkQ7RUFDQSxJQUFJc0gsWUFBWSxHQUFHaksscUJBQXFCLENBQUNiLEtBQUssQ0FBQztFQUUvQyxJQUFNdUssYUFBYSxHQUFHdkksUUFBUSxDQUFDc0IsY0FBYyxDQUFDRSxPQUFPLENBQUM7RUFDdEQsSUFBSSxDQUFBK0csYUFBYSxhQUFiQSxhQUFhLHVCQUFiQSxhQUFhLENBQUVRLGdCQUFnQixNQUFLQyx5QkFBYyxDQUFDQyxLQUFLLElBQUlyRyxTQUFTLENBQUMyRixhQUFhLENBQUN4RCxLQUFLLENBQUMsRUFBRTtJQUM5RjtJQUNBMUUsUUFBUSxDQUFDNkksa0JBQWtCLENBQUNYLGFBQWEsQ0FBQ1ksS0FBSyxFQUFFO01BQy9DQyxnQkFBZ0IsRUFBQXRSLGFBQUEsQ0FBQUEsYUFBQSxLQUNYdUksUUFBUSxDQUFDekgsTUFBTSxDQUFDeVEsT0FBTyxDQUFDZCxhQUFhLENBQUNZLEtBQUssQ0FBQyxDQUFDQyxnQkFBZ0I7UUFDaEVFLFlBQVksRUFBRTtNQUFLO0lBRXZCLENBQUMsQ0FBQztJQUVGUixZQUFZLEdBQUFoUixhQUFBLENBQUFBLGFBQUEsS0FDUGdSLFlBQVk7TUFDZmhPLE1BQU0sRUFBRWdPLFlBQVksQ0FBQ2hPLE1BQU0sQ0FBQ3NELEdBQUcsQ0FBQyxVQUFBOEIsQ0FBQztRQUFBLE9BQUtBLENBQUMsQ0FBQ3pILEVBQUUsS0FBS3VILFFBQVEsQ0FBQ3ZILEVBQUUsR0FBRzRILFFBQVEsR0FBR0gsQ0FBQztNQUFBLENBQUM7SUFBQyxFQUM1RTtFQUNIO0VBRUEsSUFBTW1ELFlBQVksR0FBR3lGLFlBQVksQ0FBQy9OLFNBQVMsQ0FBQ29ELEdBQUcsQ0FBQztFQUNoRCxJQUFBb0wsb0JBQUEsR0FBMkIsSUFBQWhHLDhCQUFrQixFQUFDbEQsUUFBUSxFQUFFeUksWUFBWSxFQUFFekYsWUFBWSxDQUFDO0lBQTVFdEksU0FBUyxHQUFBd08sb0JBQUEsQ0FBVHhPLFNBQVM7SUFBRW1ELEtBQUssR0FBQXFMLG9CQUFBLENBQUxyTCxLQUFLO0VBRXZCLElBQ0UsQ0FBQXFLLGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUFFUSxnQkFBZ0IsTUFBS0MseUJBQWMsQ0FBQ0MsS0FBSyxJQUN4RHJHLFNBQVMsQ0FBQzJGLGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUFFaUIsS0FBSyxDQUFDLEtBQUtDLHNCQUFXLENBQUNDLGFBQWEsSUFDN0QsQ0FBQ2YsWUFBWSxFQUNiO0lBQ0E7SUFDQSxJQUFNZ0IsYUFBYSxHQUFHLElBQUFDLHFDQUE4QixFQUFDO01BQ25ESixLQUFLLEVBQUVDLHNCQUFXLENBQUNDLGFBQWE7TUFDaEMzRSxLQUFLLEVBQUU3RyxLQUFLLENBQUN0RixNQUFNLENBQUMyUCxhQUFhLENBQUN4RCxLQUFLLENBQUM7TUFDeEM4RSxhQUFhLEVBQUUzTCxLQUFLLENBQUN0RixNQUFNLENBQUNzRixLQUFLLENBQUNvRCxjQUFjLENBQUNFLE9BQU8sQ0FBQyxDQUFDL0gsTUFBTSxDQUFDO01BQ2pFMFAsS0FBSyxFQUFFakwsS0FBSyxDQUFDdEYsTUFBTSxDQUFDdUksU0FBUyxDQUFDb0gsYUFBYSxDQUFDWSxLQUFLLENBQUM7TUFDbERXLFdBQVcsRUFBRTtJQUNmLENBQUMsQ0FBQztJQUNGO0lBQ0E1TCxLQUFLLENBQUNnTCxrQkFBa0IsQ0FBQ1gsYUFBYSxDQUFDWSxLQUFLLEVBQUU7TUFDNUNZLGNBQWMsRUFBRSxJQUFJO01BQ3BCWCxnQkFBZ0IsRUFBQXRSLGFBQUEsQ0FBQUEsYUFBQSxLQUNYb0csS0FBSyxDQUFDdEYsTUFBTSxDQUFDeVEsT0FBTyxDQUFDZCxhQUFhLENBQUNZLEtBQUssQ0FBQyxDQUFDQyxnQkFBZ0I7UUFDN0RFLFlBQVksRUFBRTtNQUFJLEVBQ25CO01BQ0RLLGFBQWEsRUFBYkE7SUFDRixDQUFDLENBQUM7RUFDSjtFQUNBLE9BQU81TCwyQkFBMkIsQ0FBQytLLFlBQVksRUFBRTtJQUFDL04sU0FBUyxFQUFUQSxTQUFTO0lBQUVtRCxLQUFLLEVBQUxBLEtBQUs7SUFBRUMsR0FBRyxFQUFIQTtFQUFHLENBQUMsQ0FBQztBQUMzRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2lELDJCQUEyQkEsQ0FDekNwRCxLQUFlLEVBQ2Z3QixNQUF5RCxFQUMvQztFQUNWLElBQU9RLFFBQVEsR0FBSVIsTUFBTSxDQUFsQlEsUUFBUTtFQUNmLElBQU03QixHQUFHLEdBQUdILEtBQUssQ0FBQ2xELE1BQU0sQ0FBQzRGLFNBQVMsQ0FBQyxVQUFBUixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDekgsRUFBRSxLQUFLdUgsUUFBUSxDQUFDdkgsRUFBRTtFQUFBLEVBQUM7RUFDN0QsSUFBTWtLLEtBQUssR0FBR25OLE1BQU0sQ0FBQ2dDLElBQUksQ0FBQ2dJLE1BQU0sQ0FBQ21KLFlBQVksQ0FBQztFQUU5QyxJQUFNQSxZQUFZLEdBQUE3USxhQUFBLENBQUFBLGFBQUEsS0FDYmtJLFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQ3VJLFNBQVMsR0FDekIzQixNQUFNLENBQUNtSixZQUFZLENBQ3ZCO0VBRUQsSUFBTXRJLFFBQVEsR0FBR0wsUUFBUSxDQUFDbUQsaUJBQWlCLENBQUM7SUFBQ2hDLFNBQVMsRUFBRXdIO0VBQVksQ0FBQyxDQUFDOztFQUV0RTtFQUNBO0VBQ0EsSUFBSTNJLFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQ3dILE1BQU0sRUFBRTtJQUMxQixJQUFNRCxPQUFPLEdBQUduQyxLQUFLLENBQUMzQyxRQUFRLENBQUMyRSxRQUFRLENBQUNwSCxNQUFNLENBQUN3SCxNQUFNLENBQUM7SUFDdEQsSUFBSUQsT0FBTyxFQUFFO01BQ1gzSyxNQUFNLENBQUNnQyxJQUFJLENBQUM2SSxRQUFRLENBQUNpQixjQUFjLENBQUMsQ0FBQ3RKLE9BQU8sQ0FBQyxVQUFBZ1MsVUFBVSxFQUFJO1FBQ3pELElBQU14SSxPQUFPLEdBQUduQixRQUFRLENBQUNpQixjQUFjLENBQUMwSSxVQUFVLENBQUM7UUFDbkQsSUFDRXhJLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUVnSSxLQUFLLElBQ2RuSixRQUFRLENBQUN6SCxNQUFNLENBQUM0SSxPQUFPLENBQUNnSSxLQUFLLENBQUMsS0FBS0Msc0JBQVcsQ0FBQ1EsS0FBSyxJQUNwRHpJLE9BQU8sQ0FBQzJILEtBQUssSUFDYjNULE1BQU0sQ0FBQzRKLFNBQVMsQ0FBQzlKLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDaUssTUFBTSxDQUFDbUosWUFBWSxFQUFFbkgsT0FBTyxDQUFDMkgsS0FBSyxDQUFDLEVBQ3hFO1VBQ0E5SSxRQUFRLENBQUN3SSx3QkFBd0IsQ0FBQzFJLE9BQU8sRUFBRTZKLFVBQVUsQ0FBQztRQUN4RDtNQUNGLENBQUMsQ0FBQztJQUNKO0VBQ0Y7RUFFQSxJQUFJekosU0FBUyxHQUFHdkMsS0FBSzs7RUFFckI7RUFDQTtFQUNBLElBQUlxQyxRQUFRLENBQUNHLElBQUksS0FBSyxRQUFRLElBQUloQixNQUFNLENBQUNtSixZQUFZLENBQUN1QixVQUFVLEtBQUssSUFBSSxFQUFFO0lBQ3pFM0osU0FBUyxHQUFBekksYUFBQSxDQUFBQSxhQUFBLEtBQ0p5SSxTQUFTO01BQ1p6RixNQUFNLEVBQUV5RixTQUFTLENBQUN6RixNQUFNLENBQUNzRCxHQUFHLENBQUMsVUFBQzhCLENBQUMsRUFBRXBMLENBQUMsRUFBSztRQUNyQyxJQUFJQSxDQUFDLEtBQUtxSixHQUFHLElBQUkrQixDQUFDLENBQUNNLElBQUksS0FBSyxRQUFRLElBQUlOLENBQUMsQ0FBQ3RILE1BQU0sQ0FBQ3VJLFNBQVMsQ0FBQytJLFVBQVUsRUFBRTtVQUNyRSxPQUFPaEssQ0FBQyxDQUFDaUQsaUJBQWlCLENBQUM7WUFDekJoQyxTQUFTLEVBQUFySixhQUFBLENBQUFBLGFBQUEsS0FBTW9JLENBQUMsQ0FBQ3RILE1BQU0sQ0FBQ3VJLFNBQVM7Y0FBRStJLFVBQVUsRUFBRTtZQUFLO1VBQ3RELENBQUMsQ0FBQztRQUNKO1FBQ0EsT0FBT2hLLENBQUM7TUFDVixDQUFDO0lBQUMsRUFDSDtFQUNIO0VBRUEsSUFBSUcsUUFBUSxDQUFDK0Msd0JBQXdCLENBQUNULEtBQUssQ0FBQyxFQUFFO0lBQzVDLElBQU1VLFlBQVksR0FBRzlDLFNBQVMsQ0FBQ3hGLFNBQVMsQ0FBQ29ELEdBQUcsQ0FBQztJQUM3QyxJQUFBZ00sb0JBQUEsR0FBMkIsSUFBQTVHLDhCQUFrQixFQUFDbEQsUUFBUSxFQUFFRSxTQUFTLEVBQUU4QyxZQUFZLENBQUM7TUFBekV0SSxTQUFTLEdBQUFvUCxvQkFBQSxDQUFUcFAsU0FBUztNQUFFbUQsS0FBSyxHQUFBaU0sb0JBQUEsQ0FBTGpNLEtBQUs7SUFDdkIsT0FBT0gsMkJBQTJCLENBQUN3QyxTQUFTLEVBQUU7TUFBQ3hGLFNBQVMsRUFBVEEsU0FBUztNQUFFbUQsS0FBSyxFQUFMQSxLQUFLO01BQUVDLEdBQUcsRUFBSEE7SUFBRyxDQUFDLENBQUM7RUFDeEU7RUFFQSxPQUFPSiwyQkFBMkIsQ0FBQ3dDLFNBQVMsRUFBRTtJQUFDckMsS0FBSyxFQUFFbUMsUUFBUTtJQUFFbEMsR0FBRyxFQUFIQTtFQUFHLENBQUMsQ0FBQztBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNaU0sNEJBQTRCLEdBQUE3UixPQUFBLENBQUE2Uiw0QkFBQSxHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDcE0sS0FBUSxFQUFBcU0sS0FBQSxFQUVGO0VBQUEsSUFETHpULEtBQUssR0FBQXlULEtBQUEsQ0FBTHpULEtBQUs7RUFFTixJQUFNOEMsV0FBVyxHQUFHdEQsS0FBSyxDQUFDQyxPQUFPLENBQUNPLEtBQUssQ0FBQyxHQUFHQSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUdBLEtBQUs7RUFDM0QsSUFBTTJKLFNBQVMsR0FBQXpJLGFBQUEsQ0FBQUEsYUFBQSxLQUNWa0csS0FBSztJQUNSbEIsZUFBZSxFQUFBaEYsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZrRyxLQUFLLENBQUNsQixlQUFlO01BQ3hCcEQsV0FBVyxFQUFYQTtJQUFXO0VBQ1osRUFDRjtFQUNEO0VBQ0EsT0FBT3NFLEtBQUssQ0FBQ2xELE1BQU0sQ0FBQ3dQLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUVySyxDQUFDLEVBQUs7SUFDdEMsSUFBSUEsQ0FBQyxDQUFDdEgsTUFBTSxDQUFDZ0csU0FBUyxDQUFDakcsT0FBTyxJQUFJdUgsQ0FBQyxDQUFDTSxJQUFJLEtBQUssTUFBTSxFQUFFO01BQ25ELE9BQU9nRCwyQkFBMkIsQ0FBQytHLElBQUksRUFBRTtRQUFDdkssUUFBUSxFQUFFRSxDQUFDO1FBQUV3QixJQUFJLEVBQUUsYUFBYTtRQUFFaEksV0FBVyxFQUFYQTtNQUFXLENBQUMsQ0FBQztJQUMzRjtJQUNBLE9BQU82USxJQUFJO0VBQ2IsQ0FBQyxFQUFFaEssU0FBUyxDQUFDO0FBQ2YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2lLLDZCQUE2QkEsQ0FDM0N4TSxLQUFlLEVBQ2Z3QixNQUEyRCxFQUNqRDtFQUNWLE9BQU9pTCxnQkFBZ0IsQ0FBQ3pNLEtBQUssRUFBRXdCLE1BQU0sQ0FBQztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2tMLCtCQUErQkEsQ0FDN0MxTSxLQUFRLEVBQUEyTSxLQUFBLEVBRUw7RUFBQSxJQURGbFMsRUFBRSxHQUFBa1MsS0FBQSxDQUFGbFMsRUFBRTtJQUFFbVMsZUFBZSxHQUFBRCxLQUFBLENBQWZDLGVBQWU7RUFFcEIsSUFBTWxULE1BQU0sR0FBR3NHLEtBQUssQ0FBQzdDLE9BQU8sQ0FBQzhFLElBQUksQ0FBQyxVQUFBbEwsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQzBELEVBQUUsS0FBS0EsRUFBRTtFQUFBLEVBQUM7RUFFbkQsSUFBSSxDQUFDZixNQUFNLEVBQUU7SUFDWCxPQUFPc0csS0FBSztFQUNkO0VBRUEsSUFBTTZNLFNBQVMsR0FBQS9TLGFBQUEsQ0FBQUEsYUFBQSxLQUNWSixNQUFNO0lBQ1RrVCxlQUFlLEVBQWZBO0VBQWUsRUFDaEI7RUFFRCxJQUFNcE0sUUFBUSxHQUFBMUcsYUFBQSxDQUFBQSxhQUFBLEtBQ1RrRyxLQUFLO0lBQ1I3QyxPQUFPLEVBQUUsSUFBQTJQLHNCQUFLLEVBQVNELFNBQVMsQ0FBQyxDQUFDN00sS0FBSyxDQUFDN0MsT0FBTztFQUFDLEVBQ2pEO0VBRUQsSUFBTTRQLG1CQUFtQixHQUFHQyxvQkFBb0IsQ0FBQ0gsU0FBNEIsQ0FBQztFQUU5RSxPQUFPSSxnQ0FBZ0MsQ0FBQ3pNLFFBQVEsRUFBRTtJQUFDL0YsRUFBRSxFQUFGQSxFQUFFO0lBQUUyQixJQUFJLEVBQUUyUTtFQUFtQixDQUFDLENBQUM7QUFDcEY7QUFFTyxTQUFTRyx3QkFBd0JBLENBQ3RDbE4sS0FBZSxFQUNmd0IsTUFBc0QsRUFDNUM7RUFBQSxJQUFBMkwsZ0JBQUE7RUFDVixJQUFPQyxRQUFRLEdBQWU1TCxNQUFNLENBQTdCNEwsUUFBUTtJQUFFUCxTQUFTLEdBQUlyTCxNQUFNLENBQW5CcUwsU0FBUztFQUMxQixJQUFNUSxTQUFTLEdBQUdyTixLQUFLLENBQUM3QyxPQUFPLENBQUM4RSxJQUFJLENBQUMsVUFBQWxMLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUMwRCxFQUFFLEtBQUsyUyxRQUFRO0VBQUEsRUFBQztFQUM1RCxJQUFJLENBQUNDLFNBQVMsRUFBRTtJQUNkLE9BQU9yTixLQUFLO0VBQ2Q7O0VBRUE7RUFDQSxJQUFNc04sbUJBQW1CLElBQUFILGdCQUFBLEdBQUcsSUFBQUksK0JBQWUsRUFBQ0YsU0FBUyxFQUFFck4sS0FBSyxDQUFDVCxNQUFNLENBQUMsY0FBQTROLGdCQUFBLGNBQUFBLGdCQUFBLEdBQUk7SUFBQ3ZTLE1BQU0sRUFBRSxDQUFDO0VBQUMsQ0FBQztFQUNwRixJQUFNNFMsbUJBQW1CLEdBQUcsSUFBQUQsK0JBQWUsRUFBQ1YsU0FBUyxFQUFFN00sS0FBSyxDQUFDVCxNQUFNLENBQUM7RUFDcEUsSUFBSSxDQUFDaU8sbUJBQW1CLElBQUksSUFBQW5NLG1CQUFPLEVBQUNpTSxtQkFBbUIsRUFBRUUsbUJBQW1CLENBQUMsRUFBRTtJQUM3RSxPQUFPeE4sS0FBSztFQUNkOztFQUVBO0VBQ0EsSUFBTWtELE9BQU8sR0FBR3BDLGdCQUFnQixDQUFDd00sbUJBQW1CLEVBQUVFLG1CQUFtQixDQUFDO0VBQzFFLE9BQU90SyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs7RUFFdEIsSUFBTW1CLFdBQVcsR0FBR3JFLEtBQUssQ0FBQzdDLE9BQU8sQ0FBQ3VGLFNBQVMsQ0FBQyxVQUFBM0wsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQzBELEVBQUUsS0FBSzJTLFFBQVE7RUFBQSxFQUFDO0VBQ25FLElBQUkvSSxXQUFXLEdBQUcsQ0FBQyxFQUFFO0lBQ25CLE9BQU9yRSxLQUFLO0VBQ2Q7RUFDQSxPQUFPeU0sZ0JBQWdCLENBQ3JCek0sS0FBSyxFQUNMLElBQUF5TixrQkFBUyxFQUFDcEosV0FBVyxFQUFFN00sTUFBTSxDQUFDZ0MsSUFBSSxDQUFDMEosT0FBTyxDQUFDLEVBQUUxTCxNQUFNLENBQUNtUixNQUFNLENBQUN6RixPQUFPLENBQUMsQ0FDckUsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTdUosZ0JBQWdCQSxDQUM5QnpNLEtBQVEsRUFDUndCLE1BQThDLEVBQzNDO0VBQ0gsSUFBT3JCLEdBQUcsR0FBb0JxQixNQUFNLENBQTdCckIsR0FBRztJQUFBdU4sa0JBQUEsR0FBb0JsTSxNQUFNLENBQXhCbU0sVUFBVTtJQUFWQSxVQUFVLEdBQUFELGtCQUFBLGNBQUcsQ0FBQyxHQUFBQSxrQkFBQTtFQUMxQixJQUFNTCxTQUFTLEdBQUdyTixLQUFLLENBQUM3QyxPQUFPLENBQUNnRCxHQUFHLENBQUM7RUFDcEMsSUFBSSxDQUFDa04sU0FBUyxFQUFFO0lBQ2QzRCxlQUFPLENBQUNDLEtBQUssWUFBQXZDLE1BQUEsQ0FBWWpILEdBQUcsa0JBQWUsQ0FBQztJQUM1QyxPQUFPSCxLQUFLO0VBQ2Q7RUFDQSxJQUNFNUgsS0FBSyxDQUFDQyxPQUFPLENBQUNtSixNQUFNLENBQUNrQyxJQUFJLENBQUMsS0FDekIsQ0FBQ3RMLEtBQUssQ0FBQ0MsT0FBTyxDQUFDbUosTUFBTSxDQUFDNUksS0FBSyxDQUFDLElBQUk0SSxNQUFNLENBQUNrQyxJQUFJLENBQUNuTCxNQUFNLEtBQUtpSixNQUFNLENBQUM1SSxLQUFLLENBQUNMLE1BQU0sQ0FBQyxFQUM1RTtJQUNBbVIsZUFBTyxDQUFDQyxLQUFLLENBQUMsMkVBQTJFLENBQUM7SUFDMUYsT0FBTzNKLEtBQUs7RUFDZDtFQUNBO0VBQ0EsSUFBTTJFLEtBQUssR0FBRyxJQUFBaUosb0JBQU8sRUFBQ3BNLE1BQU0sQ0FBQ2tDLElBQUksQ0FBQztFQUNsQyxJQUFNaUYsTUFBTSxHQUFHdlEsS0FBSyxDQUFDQyxPQUFPLENBQUNtSixNQUFNLENBQUNrQyxJQUFJLENBQUMsR0FBRyxJQUFBa0ssb0JBQU8sRUFBQ3BNLE1BQU0sQ0FBQzVJLEtBQUssQ0FBQyxHQUFHLENBQUM0SSxNQUFNLENBQUM1SSxLQUFLLENBQUM7RUFFbEYsSUFBSWlVLFNBQVMsR0FBR1EsU0FBUztFQUN6QixJQUFJN00sUUFBUSxHQUFHUixLQUFLO0VBRXBCLElBQUk2TixrQkFBNEIsR0FBRyxFQUFFO0VBQUMsSUFBQUMsS0FBQSxZQUFBQSxNQUFBLEVBQ0M7SUFDckMsSUFBTXBLLElBQUksR0FBR2lCLEtBQUssQ0FBQzdOLENBQUMsQ0FBQztJQUNyQixJQUFNOEIsS0FBSyxHQUFHK1AsTUFBTSxDQUFDN1IsQ0FBQyxDQUFDO0lBQ3ZCO0lBQ0E7SUFDQSxJQUFJaVgsR0FBRztJQUNQLElBQUlySyxJQUFJLEtBQUssTUFBTSxJQUFJdEwsS0FBSyxDQUFDQyxPQUFPLENBQUNPLEtBQUssQ0FBQyxFQUFFO01BQzNDO01BQ0FtVixHQUFHLEdBQUduVixLQUFLLENBQUMwVCxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFeUIsQ0FBQyxFQUFLO1FBQzlCLE9BQU9DLGlCQUFpQixDQUFDMUIsSUFBSSxFQUFFTSxTQUFTLEVBQUVuSixJQUFJLEVBQUVzSyxDQUFDLEVBQUVMLFVBQVUsQ0FBQztNQUNoRSxDQUFDLEVBQUVuTixRQUFRLENBQUM7SUFDZCxDQUFDLE1BQU07TUFDTHVOLEdBQUcsR0FBR0UsaUJBQWlCLENBQUN6TixRQUFRLEVBQUVxTSxTQUFTLEVBQUVuSixJQUFJLEVBQUU5SyxLQUFLLEVBQUUrVSxVQUFVLENBQUM7SUFDdkU7SUFDQWQsU0FBUyxHQUFHa0IsR0FBRyxDQUFDclUsTUFBTTtJQUN0QjhHLFFBQVEsR0FBR3VOLEdBQUcsQ0FBQy9OLEtBQUs7SUFDcEI2TixrQkFBa0IsR0FBR0Esa0JBQWtCLENBQUN6RyxNQUFNLENBQUMyRyxHQUFHLENBQUNGLGtCQUFrQixDQUFDO0VBQ3hFLENBQUM7RUFqQkQsS0FBSyxJQUFJL1csQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHNk4sS0FBSyxDQUFDcE0sTUFBTSxFQUFFekIsQ0FBQyxFQUFFO0lBQUFnWCxLQUFBO0VBQUE7RUFtQnJDLElBQU1JLGNBQWMsR0FBR2xPLEtBQUssQ0FBQzdDLE9BQU8sQ0FBQzhFLElBQUksQ0FBQyxVQUFBbEwsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ29YLElBQUksS0FBS0MsNEJBQWlCLENBQUNDLFFBQVE7RUFBQSxFQUFDO0VBRXJGLElBQUlILGNBQWMsSUFBSUEsY0FBYyxDQUFDelQsRUFBRSxLQUFLb1MsU0FBUyxDQUFDcFMsRUFBRSxFQUFFO0lBQ3hEO0lBQ0FvUyxTQUFTLENBQUNzQixJQUFJLEdBQUdDLDRCQUFpQixDQUFDRSxJQUFJO0VBQ3pDOztFQUVBO0VBQ0E5TixRQUFRLEdBQUcsSUFBQXBKLFVBQUcsRUFBQyxDQUFDLFNBQVMsRUFBRStJLEdBQUcsQ0FBQyxFQUFFME0sU0FBUyxFQUFFck0sUUFBUSxDQUFDOztFQUVyRDtFQUNBLElBQU0rTixnQkFBZ0IsR0FBRyxJQUFBQyw2QkFBc0IsRUFDN0MsSUFBQUMsZ0JBQUksRUFBQ1osa0JBQWtCLENBQUMsRUFDeEJyTixRQUFRLENBQUNuRCxRQUFRLEVBQ2pCbUQsUUFBUSxDQUFDckQsT0FBTyxFQUNoQnFELFFBQVEsQ0FBQzFELE1BQ1gsQ0FBQztFQUVEMEQsUUFBUSxHQUFHLElBQUFwSixVQUFHLEVBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRW1YLGdCQUFnQixFQUFFL04sUUFBUSxDQUFDOztFQUV4RDtFQUNBLElBQU1rTyxjQUFjLEdBQUcsSUFBQUMsdUJBQWdCLEVBQUNuTyxRQUFRLENBQUNuRCxRQUFRLEVBQUVtRCxRQUFRLENBQUNyRCxPQUFPLENBQUNnRCxHQUFHLENBQUMsQ0FBQztFQUVqRkssUUFBUSxHQUFHLElBQUFwSixVQUFHLEVBQUMsQ0FBQyxTQUFTLEVBQUUrSSxHQUFHLENBQUMsRUFBRXVPLGNBQWMsRUFBRWxPLFFBQVEsQ0FBQzs7RUFFMUQ7RUFDQTtFQUNBQSxRQUFRLEdBQUdvTyx3QkFBd0IsQ0FBQ3BPLFFBQVEsRUFBRXFOLGtCQUFrQixFQUFFaEIsU0FBUyxDQUFDOztFQUU1RTtFQUNBLElBQUlBLFNBQVMsQ0FBQ3JLLElBQUksS0FBS3FNLHVCQUFZLENBQUNDLFNBQVMsSUFBSW5LLEtBQUssQ0FBQ3NDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtJQUN4RXpHLFFBQVEsR0FBR3VPLCtCQUErQixDQUFDdk8sUUFBUSxFQUFFZ0IsTUFBTSxDQUFDckIsR0FBRyxDQUFDO0VBQ2xFO0VBRUEsT0FBT0ssUUFBUTtBQUNqQjtBQUVBLFNBQVN3TywrQkFBK0JBLENBQUN0VixNQUFNLEVBQUVpVSxVQUFVLEVBQUUvVSxLQUFLLEVBQUV5RSxRQUFRLEVBQUU7RUFDNUUsSUFBSXdQLFNBQVMsR0FBR25ULE1BQU07RUFDdEIsSUFBSUEsTUFBTSxDQUFDMEksTUFBTSxDQUFDdUwsVUFBVSxDQUFDLEVBQUU7SUFDN0I7SUFDQWQsU0FBUyxHQUFHb0MsK0JBQStCLENBQUN2VixNQUFNLEVBQUVpVSxVQUFVLEVBQUV0USxRQUFRLENBQUM7RUFDM0U7RUFDQSxJQUFJekUsS0FBSyxFQUFFO0lBQ1QsSUFBTXNXLFNBQVMsR0FBR3JDLFNBQVMsQ0FBQ3pLLE1BQU0sQ0FBQ2xKLEtBQUssQ0FBQyxDQUFDO0lBQzFDZ1csU0FBUyxDQUFDdkIsVUFBVSxDQUFDLEdBQUcvVSxLQUFLO0lBQzdCaVUsU0FBUyxHQUFHLElBQUF6VixVQUFHLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRThYLFNBQVMsRUFBRXJDLFNBQVMsQ0FBQztFQUNuRDtFQUNBLE9BQU9BLFNBQVM7QUFDbEI7QUFFQSxTQUFTb0MsK0JBQStCQSxDQUFDdlYsTUFBTSxFQUFFaVUsVUFBVSxFQUFFdFEsUUFBUSxFQUFFO0VBQ3JFLElBQU0rRSxNQUFNLEdBQUcxSSxNQUFNLENBQUMwSSxNQUFNLENBQUN1TCxVQUFVLENBQUM7RUFFeEMsSUFBSWpVLE1BQU0sQ0FBQzBJLE1BQU0sQ0FBQzdKLE1BQU0sS0FBSyxDQUFDLElBQUlvVixVQUFVLEtBQUssQ0FBQyxFQUFFO0lBQ2xEO0lBQ0EsT0FBTyxJQUFBd0IsdUJBQWdCLEVBQUM7TUFBQzFVLEVBQUUsRUFBRWYsTUFBTSxDQUFDZTtJQUFFLENBQUMsQ0FBQztFQUMxQztFQUVBLElBQUkySCxNQUFNLEVBQUU7SUFDVjFJLE1BQU0sR0FBRyxJQUFBMFYsdUJBQWdCLEVBQUMxVixNQUFNLEVBQUUwSSxNQUFNLENBQUM7RUFDM0M7RUFFQSxTQUFBaU4sRUFBQSxNQUFBQyxJQUFBLEdBQW1CLENBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLFlBQVksRUFDWixTQUFTLEVBQ1QsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixlQUFlLENBQ2hCLEVBQUFELEVBQUEsR0FBQUMsSUFBQSxDQUFBL1csTUFBQSxFQUFBOFcsRUFBQSxJQUFFO0lBVEUsSUFBTTNMLElBQUksR0FBQTRMLElBQUEsQ0FBQUQsRUFBQTtJQVViLElBQUlqWCxLQUFLLENBQUNDLE9BQU8sQ0FBQ3FCLE1BQU0sQ0FBQ2dLLElBQUksQ0FBQyxDQUFDLEVBQUU7TUFDL0IsSUFBTTZMLE9BQU8sR0FBRzdWLE1BQU0sQ0FBQ2dLLElBQUksQ0FBQyxDQUFDeEssS0FBSyxDQUFDLENBQUM7TUFDcENxVyxPQUFPLENBQUMzSCxNQUFNLENBQUMrRixVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQzdCalUsTUFBTSxHQUFHLElBQUF0QyxVQUFHLEVBQUMsQ0FBQ3NNLElBQUksQ0FBQyxFQUFFNkwsT0FBTyxFQUFFN1YsTUFBTSxDQUFDO0lBQ3ZDO0VBQ0Y7O0VBRUE7RUFDQSxJQUFNOFYsV0FBVyxHQUFHLElBQUFDLHdCQUFpQixFQUFDL1YsTUFBTSxFQUFFMkQsUUFBUSxDQUFDO0VBRXZELElBQU1xUyxVQUFVLEdBQUE1VixhQUFBLENBQUFBLGFBQUEsS0FDWEosTUFBTSxHQUVMOFYsV0FBVyxHQUFHO0lBQUMvVCxNQUFNLEVBQUUrVCxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRS9ULE1BQU07SUFBRWtVLElBQUksRUFBRUgsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUVHO0VBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUM5RTtFQUVELElBQU1ULFNBQVMsR0FBRyxJQUFBVSxnQ0FBeUIsRUFBQ0YsVUFBVSxDQUFDOVcsS0FBSyxFQUFFOFcsVUFBVSxDQUFDO0VBQ3pFLE9BQUE1VixhQUFBLENBQUFBLGFBQUEsS0FDSzRWLFVBQVU7SUFDYjlXLEtBQUssRUFBRXNXO0VBQVM7QUFFcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBU2pCLGlCQUFpQkEsQ0FBQ2pPLEtBQUssRUFBRXRHLE1BQU0sRUFBRWdLLElBQUksRUFBRTlLLEtBQUssRUFBRStVLFVBQVUsRUFBRWtDLFVBQVcsRUFBRTtFQUM5RSxJQUFJaEMsa0JBQTRCLEdBQUcsRUFBRTtFQUNyQyxRQUFRbkssSUFBSTtJQUNWO0lBQ0E7SUFDQTtJQUNBLEtBQUtvTSwyQkFBb0IsQ0FBQzFOLE1BQU07TUFBRTtRQUNoQyxJQUFNMk4sU0FBUyxPQUFBMUksbUJBQUEsYUFBTzNOLE1BQU0sQ0FBQzBJLE1BQU0sQ0FBQztRQUNwQzFJLE1BQU0sR0FBR3NWLCtCQUErQixDQUFDdFYsTUFBTSxFQUFFaVUsVUFBVSxFQUFFL1UsS0FBSyxFQUFFb0gsS0FBSyxDQUFDM0MsUUFBUSxDQUFDO1FBQ25Gd1Esa0JBQWtCLEdBQUcsSUFBQVksZ0JBQUksS0FBQXJILE1BQUEsS0FBQUMsbUJBQUEsYUFBSzBJLFNBQVMsT0FBQTFJLG1CQUFBLGFBQUszTixNQUFNLENBQUMwSSxNQUFNLEVBQUMsQ0FBQztRQUMzRDtNQUNGO0lBQ0EsS0FBSzBOLDJCQUFvQixDQUFDMVcsSUFBSTtNQUFFO1FBQzlCO1FBQ0E7UUFDQTtRQUNBLElBQU00VyxTQUFTLEdBQUd0VyxNQUFNLENBQUMwSSxNQUFNLENBQUN1TCxVQUFVLENBQUM7UUFDM0MsSUFBQXNDLHFCQUFBLEdBQXFELElBQUFDLDJCQUFvQixFQUN2RXhXLE1BQU0sRUFDTnNHLEtBQUssQ0FBQzNDLFFBQVEsRUFDZDJTLFNBQVMsRUFDVHBYLEtBQUssRUFDTCtVLFVBQVUsRUFDVjtZQUFDd0MsV0FBVyxFQUFFeEMsVUFBVSxHQUFHO1VBQUMsQ0FDOUIsQ0FBQztVQVBjeUMsYUFBYSxHQUFBSCxxQkFBQSxDQUFyQnZXLE1BQU07VUFBMEIyVyxVQUFVLEdBQUFKLHFCQUFBLENBQW5COU4sT0FBTztRQVFyQyxJQUFJaU8sYUFBYSxFQUFFO1VBQ2pCMVcsTUFBTSxHQUFHMFcsYUFBYTtVQUN0QixJQUFJMVcsTUFBTSxDQUFDNFcsR0FBRyxFQUFFO1lBQ2Q1VyxNQUFNLEdBQUcsSUFBQTZXLHVCQUFnQixFQUFDN1csTUFBTSxFQUFFc0csS0FBSyxDQUFDN0MsT0FBTyxDQUFDO1lBQ2hEekQsTUFBTSxHQUFHLElBQUE4Vyx1QkFBZ0IsRUFBQzlXLE1BQU0sRUFBRXNHLEtBQUssQ0FBQzdDLE9BQU8sQ0FBQztVQUNsRDtVQUNBNkMsS0FBSyxHQUFHLElBQUE1SSxVQUFHLEVBQUMsQ0FBQyxVQUFVLEVBQUU0WSxTQUFTLENBQUMsRUFBRUssVUFBVSxFQUFFclEsS0FBSyxDQUFDO1VBQ3ZEO1VBQ0F0RyxNQUFNLEdBQUcsSUFBQTBWLHVCQUFnQixFQUFDMVYsTUFBTSxFQUFFc1csU0FBUyxDQUFDO1VBRTVDbkMsa0JBQWtCLEdBQUd1QyxhQUFhLENBQUNoTyxNQUFNO1FBQzNDO1FBQ0E7UUFDQTtNQUNGO0lBRUEsS0FBSzBOLDJCQUFvQixDQUFDVyxPQUFPO01BQUU7UUFDakMsSUFBTVQsVUFBUyxHQUFHdFcsTUFBTSxDQUFDMEksTUFBTSxDQUFDdUwsVUFBVSxDQUFDO1FBQzNDLElBQUErQyxxQkFBQSxHQUFxRCxJQUFBQyxrQ0FBMkIsRUFDOUVqWCxNQUFNLEVBQ05zRyxLQUFLLENBQUMzQyxRQUFRLEVBQ2QyUyxVQUFTLEVBQ1RwWCxLQUFLLEVBQ0wrVSxVQUNGLENBQUM7VUFOY3lDLGNBQWEsR0FBQU0scUJBQUEsQ0FBckJoWCxNQUFNO1VBQTBCMlcsV0FBVSxHQUFBSyxxQkFBQSxDQUFuQnZPLE9BQU87UUFPckMsSUFBSWlPLGNBQWEsRUFBRTtVQUNqQjFXLE1BQU0sR0FBRzBXLGNBQWE7VUFDdEIxVyxNQUFNLEdBQUcsSUFBQTZXLHVCQUFnQixFQUFDN1csTUFBTSxFQUFFc0csS0FBSyxDQUFDN0MsT0FBTyxDQUFDO1VBQ2hEekQsTUFBTSxHQUFHQSxNQUFNLENBQUM0VyxHQUFHLEdBQ2YsSUFBQUUsdUJBQWdCLEVBQUM5VyxNQUFNLEVBQUVzRyxLQUFLLENBQUM3QyxPQUFPLENBQUMsR0FBQXJELGFBQUEsQ0FBQUEsYUFBQSxLQUNuQ0osTUFBTTtZQUFFa1gsVUFBVSxFQUFFclQsU0FBUztZQUFFc1QsYUFBYSxFQUFFdFQ7VUFBUyxFQUFDO1VBQ2hFeUMsS0FBSyxHQUFHLElBQUE1SSxVQUFHLEVBQUMsQ0FBQyxVQUFVLEVBQUU0WSxVQUFTLENBQUMsRUFBRUssV0FBVSxFQUFFclEsS0FBSyxDQUFDO1VBQ3ZEdEcsTUFBTSxHQUFHLElBQUEwVix1QkFBZ0IsRUFBQzFWLE1BQU0sRUFBRXNXLFVBQVMsQ0FBQztVQUM1Q25DLGtCQUFrQixHQUFHdUMsY0FBYSxDQUFDaE8sTUFBTTtRQUMzQztRQUNBO01BQ0Y7SUFFQSxLQUFLME4sMkJBQW9CLENBQUNuSyxPQUFPO01BQUU7UUFDakM7UUFDQTtRQUNBO1FBQ0E7UUFDQSxJQUFNbUwsaUJBQWlCLEdBQUcsSUFBQUMsZUFBRyxFQUFDblksS0FBSyxFQUFFYyxNQUFNLENBQUNpTSxPQUFPLENBQUM7UUFFcEQsSUFBTXFMLFlBQVksR0FBRyxJQUFBdkMsZ0JBQUksRUFDdkJxQyxpQkFBaUIsQ0FDZDFRLEdBQUcsQ0FBQyxVQUFBNlEsR0FBRztVQUFBLE9BQ04sSUFBQTlaLGVBQUcsRUFDRDZJLEtBQUssQ0FBQ2xELE1BQU0sQ0FBQ21GLElBQUksQ0FBQyxVQUFBQyxDQUFDO1lBQUEsT0FBSUEsQ0FBQyxDQUFDekgsRUFBRSxLQUFLd1csR0FBRztVQUFBLEVBQUMsRUFDcEMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUNyQixDQUFDO1FBQUEsQ0FDSCxDQUFDLENBQ0F2WCxNQUFNLENBQUMsVUFBQTRHLENBQUM7VUFBQSxPQUFJQSxDQUFDO1FBQUEsRUFDbEIsQ0FBQzs7UUFFRDtRQUNBdU4sa0JBQWtCLEdBQUdtRCxZQUFZOztRQUVqQztRQUNBLElBQU1FLFVBQVUsR0FBRyxJQUFBekMsZ0JBQUksRUFDckI3VixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FDRHdILEdBQUcsQ0FBQyxVQUFBNlEsR0FBRztVQUFBLE9BQ1AsSUFBQTlaLGVBQUcsRUFDRDZJLEtBQUssQ0FBQ2xELE1BQU0sQ0FBQ21GLElBQUksQ0FBQyxVQUFBQyxDQUFDO1lBQUEsT0FBSUEsQ0FBQyxDQUFDekgsRUFBRSxLQUFLd1csR0FBRztVQUFBLEVBQUMsRUFDcEMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUNyQixDQUFDO1FBQUEsQ0FDSCxDQUFDLENBQ0F2WCxNQUFNLENBQUMsVUFBQTRHLENBQUM7VUFBQSxPQUFJQSxDQUFDO1FBQUEsRUFDbEIsQ0FBQztRQUVENUcsTUFBTSxHQUFBSSxhQUFBLENBQUFBLGFBQUEsS0FDREosTUFBTTtVQUNUaU0sT0FBTyxFQUFFL00sS0FBSztVQUNkd0osTUFBTSxFQUFFOE87UUFBVSxFQUNuQjtRQUNEO01BQ0Y7SUFFQTtNQUNFeFgsTUFBTSxHQUFHLElBQUF0QyxVQUFHLEVBQUMsQ0FBQ3NNLElBQUksQ0FBQyxFQUFFOUssS0FBSyxFQUFFYyxNQUFNLENBQUM7TUFDbkNtVSxrQkFBa0IsT0FBQXhHLG1CQUFBLGFBQU8zTixNQUFNLENBQUMwSSxNQUFNLENBQUM7TUFDdkM7RUFDSjtFQUVBLE9BQU87SUFBQzFJLE1BQU0sRUFBTkEsTUFBTTtJQUFFbVcsVUFBVSxFQUFWQSxVQUFVO0lBQUVoQyxrQkFBa0IsRUFBbEJBLGtCQUFrQjtJQUFFN04sS0FBSyxFQUFMQTtFQUFLLENBQUM7QUFDeEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTW1SLG9CQUFvQixHQUFBNVcsT0FBQSxDQUFBNFcsb0JBQUEsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQm5SLEtBQWUsRUFBQW9SLEtBQUEsRUFFRjtFQUFBLElBRFpqUixHQUFHLEdBQUFpUixLQUFBLENBQUhqUixHQUFHO0lBQUVrUixPQUFPLEdBQUFELEtBQUEsQ0FBUEMsT0FBTztFQUViLElBQUksQ0FBQ3JSLEtBQUssQ0FBQzdDLE9BQU8sQ0FBQ2dELEdBQUcsQ0FBQyxFQUFFO0lBQ3ZCdUosZUFBTyxDQUFDQyxLQUFLLFlBQUF2QyxNQUFBLENBQVlqSCxHQUFHLG1CQUFnQixDQUFDO0lBQzdDLE9BQU9ILEtBQUs7RUFDZDtFQUNBLElBQUk2TSxTQUFTLEdBQUc3TSxLQUFLLENBQUM3QyxPQUFPLENBQUNnRCxHQUFHLENBQUM7RUFFbEMsS0FBSyxJQUFNdUQsSUFBSSxJQUFJMk4sT0FBTyxFQUFFO0lBQzFCLElBQUkzTixJQUFJLEtBQUssVUFBVSxFQUFFO01BQ3ZCbUosU0FBUyxHQUFHLElBQUF5RSxzQkFBSyxFQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUFDLHVCQUFNLEVBQUNGLE9BQU8sQ0FBQ0csUUFBUSxDQUFDLENBQUMsQ0FBQzNFLFNBQVMsQ0FBQztJQUNwRSxDQUFDLE1BQU0sSUFBSW5KLElBQUksS0FBSyxPQUFPLEVBQUU7TUFDM0IsSUFBTStOLFNBQVMsR0FBR0osT0FBTyxDQUFDSyxLQUFLLEdBQUdDLHFCQUFVLENBQUNDLFNBQVMsR0FBR0QscUJBQVUsQ0FBQ0UsU0FBUztNQUU3RWhGLFNBQVMsR0FBRyxJQUFBeUUsc0JBQUssRUFBQyxVQUFVLENBQUMsQ0FBQyxJQUFBQyx1QkFBTSxFQUFDO1FBQUMvTyxJQUFJLEVBQUVpUDtNQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBQUYsdUJBQU0sRUFBQ0YsT0FBTyxDQUFDLENBQUN4RSxTQUFTLENBQUMsQ0FBQztJQUN0RjtFQUNGO0VBRUFBLFNBQVMsR0FBRyxJQUFBOEIsdUJBQWdCLEVBQUMzTyxLQUFLLENBQUMzQyxRQUFRLEVBQUV3UCxTQUFTLENBQUM7RUFFdkQsT0FBQS9TLGFBQUEsQ0FBQUEsYUFBQSxLQUNLa0csS0FBSztJQUNSN0MsT0FBTyxFQUFFNkMsS0FBSyxDQUFDN0MsT0FBTyxDQUFDaUQsR0FBRyxDQUFDLFVBQUNySixDQUFDLEVBQUVELENBQUM7TUFBQSxPQUFNQSxDQUFDLEtBQUtxSixHQUFHLEdBQUcwTSxTQUFTLEdBQUc5VixDQUFDO0lBQUEsQ0FBQztFQUFDO0FBRXJFLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0rYSxnQkFBZ0IsR0FBQXZYLE9BQUEsQ0FBQXVYLGdCQUFBLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FDM0I5UixLQUFlLEVBQ2Z3QixNQUE4QztFQUFBLE9BRTlDLENBQUNBLE1BQU0sQ0FBQ1ksTUFBTSxHQUNWcEMsS0FBSyxHQUFBbEcsYUFBQSxDQUFBQSxhQUFBLEtBRUFrRyxLQUFLO0lBQ1I3QyxPQUFPLEtBQUFpSyxNQUFBLEtBQUFDLG1CQUFBLGFBQU1ySCxLQUFLLENBQUM3QyxPQUFPLElBQUUsSUFBQWdTLHVCQUFnQixFQUFDO01BQUMvTSxNQUFNLEVBQUVaLE1BQU0sQ0FBQ1ksTUFBTTtNQUFFM0gsRUFBRSxFQUFFK0csTUFBTSxDQUFDL0c7SUFBRSxDQUFDLENBQUM7RUFBQyxFQUN0RjtBQUFBOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNc1gsMkJBQTJCLEdBQUF4WCxPQUFBLENBQUF3WCwyQkFBQSxHQUFHLFNBQTlCQSwyQkFBMkJBLENBQ3RDL1IsS0FBZSxFQUNmd0IsTUFBeUQsRUFDNUM7RUFDYixJQUFPL0csRUFBRSxHQUEwQitHLE1BQU0sQ0FBbEMvRyxFQUFFO0lBQUUySCxNQUFNLEdBQWtCWixNQUFNLENBQTlCWSxNQUFNO0lBQUUyRSxLQUFLLEdBQVd2RixNQUFNLENBQXRCdUYsS0FBSztJQUFFbk8sS0FBSyxHQUFJNEksTUFBTSxDQUFmNUksS0FBSztFQUUvQixJQUFJNEgsUUFBUSxHQUFHUixLQUFLO0VBQ3BCLElBQU1nUyxhQUFhLEdBQUd4UixRQUFRLENBQUNyRCxPQUFPLENBQUN1RixTQUFTLENBQUMsVUFBQTNMLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUMwRCxFQUFFLEtBQUtBLEVBQUU7RUFBQSxFQUFDO0VBQ2xFLElBQUk0SixXQUFXLEdBQUcyTixhQUFhO0VBQy9CLElBQUksQ0FBQ3ZYLEVBQUUsSUFBSSxDQUFDMkgsTUFBTSxFQUFFO0lBQ2xCLE9BQU81QixRQUFRO0VBQ2pCO0VBQ0EsSUFBSXdSLGFBQWEsR0FBRyxDQUFDLElBQUk1UCxNQUFNLEVBQUU7SUFDL0I1QixRQUFRLEdBQUdzUixnQkFBZ0IsQ0FBQ3RSLFFBQVEsRUFBRTtNQUFDNEIsTUFBTSxFQUFOQTtJQUFNLENBQUMsQ0FBQztJQUMvQyxJQUFJNUIsUUFBUSxDQUFDckQsT0FBTyxDQUFDNUUsTUFBTSxLQUFLeUgsS0FBSyxDQUFDN0MsT0FBTyxDQUFDNUUsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN4RDtNQUNBLE9BQU95SCxLQUFLO0lBQ2Q7SUFDQTtJQUNBcUUsV0FBVyxHQUFHN0QsUUFBUSxDQUFDckQsT0FBTyxDQUFDNUUsTUFBTSxHQUFHLENBQUM7SUFDekNpSSxRQUFRLENBQUNyRCxPQUFPLENBQUNrSCxXQUFXLENBQUMsR0FBQXZLLGFBQUEsQ0FBQUEsYUFBQSxLQUN4QjBHLFFBQVEsQ0FBQ3JELE9BQU8sQ0FBQ2tILFdBQVcsQ0FBQyxHQUM1QjVKLEVBQUUsR0FBRztNQUFDQSxFQUFFLEVBQUZBO0lBQUUsQ0FBQyxHQUFHLElBQUksQ0FDckI7RUFDSDs7RUFFQTtFQUNBO0VBQ0EsSUFBSXVYLGFBQWEsSUFBSSxDQUFDLElBQUk1UCxNQUFNLEVBQUU7SUFDaEM7SUFDQTVCLFFBQVEsR0FBRyxDQUFDcEksS0FBSyxDQUFDQyxPQUFPLENBQUMrSixNQUFNLENBQUMsR0FBR0EsTUFBTSxHQUFHLENBQUNBLE1BQU0sQ0FBQyxFQUFFa0ssTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRWpNLENBQUMsRUFBRTJSLEtBQUssRUFBSztNQUNoRixPQUFPeEYsZ0JBQWdCLENBQUNGLElBQUksRUFBRTtRQUM1QnBNLEdBQUcsRUFBRWtFLFdBQVc7UUFDaEJYLElBQUksRUFBRSxRQUFRO1FBQ2Q5SyxLQUFLLEVBQUUwSCxDQUFDO1FBQ1JxTixVQUFVLEVBQUVzRTtNQUNkLENBQUMsQ0FBQztJQUNKLENBQUMsRUFBRXpSLFFBQVEsQ0FBQztFQUNkO0VBQ0E7RUFDQSxJQUFJdUcsS0FBSyxFQUFFO0lBQ1Q7SUFDQXZHLFFBQVEsR0FBRyxDQUFDcEksS0FBSyxDQUFDQyxPQUFPLENBQUMwTyxLQUFLLENBQUMsR0FBR0EsS0FBSyxHQUFHLENBQUNBLEtBQUssQ0FBQyxFQUFFdUYsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRXhWLENBQUMsRUFBRWtiLEtBQUssRUFBSztNQUM3RSxPQUFPeEYsZ0JBQWdCLENBQUNGLElBQUksRUFBRTtRQUM1QnBNLEdBQUcsRUFBRWtFLFdBQVc7UUFDaEJYLElBQUksRUFBRSxNQUFNO1FBQ1o5SyxLQUFLLEVBQUU3QixDQUFDO1FBQ1I0VyxVQUFVLEVBQUVzRTtNQUNkLENBQUMsQ0FBQztJQUNKLENBQUMsRUFBRXpSLFFBQVEsQ0FBQztFQUNkO0VBQ0E7RUFDQSxJQUFJNUgsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPQSxLQUFLLEtBQUssV0FBVyxFQUFFO0lBQ2xENEgsUUFBUSxHQUFHaU0sZ0JBQWdCLENBQUNqTSxRQUFRLEVBQUU7TUFBQ0wsR0FBRyxFQUFFa0UsV0FBVztNQUFFWCxJQUFJLEVBQUUsT0FBTztNQUFFOUssS0FBSyxFQUFMQTtJQUFLLENBQUMsQ0FBQztFQUNqRjtFQUVBLE9BQU80SCxRQUFRO0FBQ2pCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNMFIseUJBQXlCLEdBQUEzWCxPQUFBLENBQUEyWCx5QkFBQSxHQUFHLFNBQTVCQSx5QkFBeUJBLENBQ3BDbFMsS0FBZSxFQUFBbVMsS0FBQSxFQUVGO0VBQUEsSUFEWm5RLFFBQVEsR0FBQW1RLEtBQUEsQ0FBUm5RLFFBQVE7SUFBRTBCLElBQUksR0FBQXlPLEtBQUEsQ0FBSnpPLElBQUk7SUFBRWtCLFNBQVMsR0FBQXVOLEtBQUEsQ0FBVHZOLFNBQVM7RUFFMUIsSUFBTXdOLFlBQVksR0FBR3BRLFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQ3VJLFNBQVMsQ0FBQ08sSUFBSSxDQUFDO0VBQ3BELElBQU1yQixRQUFRLEdBQUdMLFFBQVEsQ0FBQ2tKLGtCQUFrQixDQUFDeEgsSUFBSSxFQUFFa0IsU0FBUyxDQUFDO0VBQzdELElBQU0rRixZQUFZLEdBQUd0SSxRQUFRLENBQUN6SCxNQUFNLENBQUN1SSxTQUFTLENBQUNPLElBQUksQ0FBQztFQUNwRCxJQUFJME8sWUFBWSxLQUFLekgsWUFBWSxFQUFFO0lBQ2pDLE9BQU92SCwyQkFBMkIsQ0FBQ3BELEtBQUssRUFBRTtNQUN4Q2dDLFFBQVEsRUFBUkEsUUFBUTtNQUNSMkksWUFBWSxNQUFBMVEsZ0JBQUEsaUJBQ1R5SixJQUFJLEVBQUdpSCxZQUFZO0lBRXhCLENBQUMsQ0FBQztFQUNKO0VBQ0EsT0FBQTdRLGFBQUEsQ0FBQUEsYUFBQSxLQUNLa0csS0FBSztJQUNSbEQsTUFBTSxFQUFFa0QsS0FBSyxDQUFDbEQsTUFBTSxDQUFDc0QsR0FBRyxDQUFDLFVBQUE4QixDQUFDO01BQUEsT0FBS0EsQ0FBQyxDQUFDekgsRUFBRSxLQUFLdUgsUUFBUSxDQUFDdkgsRUFBRSxHQUFHNEgsUUFBUSxHQUFHSCxDQUFDO0lBQUEsQ0FBQztFQUFDO0FBRXhFLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1tUSw0QkFBNEIsR0FBQTlYLE9BQUEsQ0FBQThYLDRCQUFBLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FDdkNyUyxLQUFlLEVBQ2Z3QixNQUEwRDtFQUFBLE9BQUExSCxhQUFBLENBQUFBLGFBQUEsS0FFdkRrRyxLQUFLO0lBQ1I3QyxPQUFPLEVBQUU2QyxLQUFLLENBQUM3QyxPQUFPLENBQUNpRCxHQUFHLENBQUMsVUFBQ3JKLENBQUMsRUFBRUQsQ0FBQztNQUFBLE9BQU1BLENBQUMsS0FBSzBLLE1BQU0sQ0FBQ3JCLEdBQUcsR0FBQXJHLGFBQUEsQ0FBQUEsYUFBQSxLQUFPL0MsQ0FBQztRQUFFNkUsV0FBVyxFQUFFLENBQUM3RSxDQUFDLENBQUM2RTtNQUFXLEtBQUk3RSxDQUFDO0lBQUEsQ0FBQztFQUFDO0FBQUEsQ0FDbEc7QUFFSyxTQUFTdWIsdUJBQXVCQSxDQUFDMVgsTUFBK0MsRUFBVztFQUNoRyxPQUFPLFFBQVEsSUFBSUEsTUFBTSxJQUFJLGlCQUFpQixJQUFJQSxNQUFNO0FBQzFEO0FBRU8sU0FBUzJYLHlCQUF5QkEsQ0FDdkN2UyxLQUFlLEVBQ2Z3QixNQUF1RCxFQUM3QztFQUNWLElBQU81RyxNQUFNLEdBQUk0RyxNQUFNLENBQWhCNUcsTUFBTTtFQUNiLElBQUkwWCx1QkFBdUIsQ0FBQzFYLE1BQU0sQ0FBQyxFQUFFO0lBQ25DO0lBQ0E7SUFDQSxJQUFNbEIsTUFBTSxHQUFHc0csS0FBSyxDQUFDN0MsT0FBTyxDQUFDOEUsSUFBSSxDQUFDLFVBQUFsTCxDQUFDO01BQUEsT0FBSSxDQUFDLElBQUF5YixtQkFBWSxFQUFDemIsQ0FBQyxDQUFDO0lBQUEsRUFBQztJQUN4RCxJQUFJLENBQUMyQyxNQUFNLEVBQUU7TUFDWCxPQUFPc0csS0FBSztJQUNkO0lBQ0EsSUFBTTZNLFNBQVMsR0FBQS9TLGFBQUEsQ0FBQUEsYUFBQSxLQUFPSixNQUFNLEdBQUtrQixNQUFNLENBQUM7SUFDeEMsT0FBT3NTLHdCQUF3QixDQUFDbE4sS0FBSyxFQUFFLElBQUF5UywwQkFBaUIsRUFBQy9ZLE1BQU0sQ0FBQ2UsRUFBRSxFQUFFb1MsU0FBUyxDQUFDLENBQUM7RUFDakYsQ0FBQyxNQUFNO0lBQ0wsT0FBQS9TLGFBQUEsQ0FBQUEsYUFBQSxLQUNLa0csS0FBSztNQUNSbEIsZUFBZSxFQUFBaEYsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZrRyxLQUFLLENBQUNsQixlQUFlLEdBQ3JCbEUsTUFBTTtJQUNWO0VBRUw7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU04WCwyQkFBMkIsR0FBQW5ZLE9BQUEsQ0FBQW1ZLDJCQUFBLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FDdEMxUyxLQUFlLEVBRWZ3QixNQUF5RDtFQUFBLE9BQUExSCxhQUFBLENBQUFBLGFBQUEsS0FFdERrRyxLQUFLO0lBQ1JsQixlQUFlLEVBQUFoRixhQUFBLENBQUFBLGFBQUEsS0FDVmtHLEtBQUssQ0FBQ2xCLGVBQWU7TUFDeEJsRCxXQUFXLEVBQUUsQ0FBQ29FLEtBQUssQ0FBQ2xCLGVBQWUsQ0FBQ2xEO0lBQVc7RUFDaEQ7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNK1csa0NBQWtDLEdBQUFwWSxPQUFBLENBQUFvWSxrQ0FBQSxHQUFHLFNBQXJDQSxrQ0FBa0NBLENBQUkzUyxLQUFlO0VBQUEsT0FBQWxHLGFBQUEsQ0FBQUEsYUFBQSxLQUM3RGtHLEtBQUs7SUFDUmxCLGVBQWUsRUFBQWhGLGFBQUEsQ0FBQUEsYUFBQSxLQUNWa0csS0FBSyxDQUFDbEIsZUFBZTtNQUN4QjdDLFdBQVcsRUFBRSxDQUFDK0QsS0FBSyxDQUFDbEIsZUFBZSxDQUFDN0M7SUFBVztFQUNoRDtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0yVyxpQ0FBaUMsR0FBQXJZLE9BQUEsQ0FBQXFZLGlDQUFBLEdBQUcsU0FBcENBLGlDQUFpQ0EsQ0FDNUM1UyxLQUFlLEVBQ2Z3QixNQUErRDtFQUFBLE9BQUExSCxhQUFBLENBQUFBLGFBQUEsS0FFNURrRyxLQUFLO0lBQ1I3QyxPQUFPLEVBQUU2QyxLQUFLLENBQUM3QyxPQUFPLENBQUNpRCxHQUFHLENBQUMsVUFBQ3JKLENBQUMsRUFBRUQsQ0FBQztNQUFBLE9BQU1BLENBQUMsS0FBSzBLLE1BQU0sQ0FBQ3JCLEdBQUcsR0FBQXJHLGFBQUEsQ0FBQUEsYUFBQSxLQUFPL0MsQ0FBQztRQUFFNEUsS0FBSyxFQUFFNkYsTUFBTSxDQUFDN0Y7TUFBSyxLQUFJNUUsQ0FBQztJQUFBLENBQUM7RUFBQztBQUFBLENBQzFGOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU04YixnQ0FBZ0MsR0FBQXRZLE9BQUEsQ0FBQXNZLGdDQUFBLEdBQUcsU0FBbkNBLGdDQUFnQ0EsQ0FDM0M3UyxLQUFlLEVBQUE4UyxLQUFBLEVBRUY7RUFBQSxJQURablgsS0FBSyxHQUFBbVgsS0FBQSxDQUFMblgsS0FBSztFQUVOLE9BQUE3QixhQUFBLENBQUFBLGFBQUEsS0FDS2tHLEtBQUs7SUFDUmxCLGVBQWUsRUFBQWhGLGFBQUEsQ0FBQUEsYUFBQSxLQUNWa0csS0FBSyxDQUFDbEIsZUFBZTtNQUN4Qm5ELEtBQUssRUFBTEE7SUFBSztFQUNOO0FBRUwsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTW9YLG9CQUFvQixHQUFBeFksT0FBQSxDQUFBd1ksb0JBQUEsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQi9TLEtBQWUsRUFDZndCLE1BQWtELEVBQy9DO0VBQ0gsSUFBTzJNLElBQUksR0FBUzNNLE1BQU0sQ0FBbkIyTSxJQUFJO0lBQUVoTyxHQUFHLEdBQUlxQixNQUFNLENBQWJyQixHQUFHO0VBQ2hCLElBQU02UywyQkFBMkIsR0FBRzdFLElBQUksS0FBS0MsNEJBQWlCLENBQUNDLFFBQVE7RUFDdkUsT0FBQXZVLGFBQUEsQ0FBQUEsYUFBQSxLQUNLa0csS0FBSztJQUNSN0MsT0FBTyxFQUFFNkMsS0FBSyxDQUFDN0MsT0FBTyxDQUFDaUQsR0FBRyxDQUFDLFVBQUNySixDQUFDLEVBQUVELENBQUM7TUFBQSxPQUM5QkEsQ0FBQyxLQUFLcUosR0FBRyxHQUFBckcsYUFBQSxDQUFBQSxhQUFBLEtBRUEvQyxDQUFDO1FBQ0pvWCxJQUFJLEVBQUpBO01BQUksS0FFTjZFLDJCQUEyQixHQUFBbFosYUFBQSxDQUFBQSxhQUFBLEtBRXRCL0MsQ0FBQztRQUNKb1gsSUFBSSxFQUFFQyw0QkFBaUIsQ0FBQ0U7TUFBSSxLQUU5QnZYLENBQUM7SUFBQSxDQUNQO0VBQUM7QUFFTCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWtjLDBCQUEwQixHQUFBMVksT0FBQSxDQUFBMFksMEJBQUEsR0FBRyxTQUE3QkEsMEJBQTBCQSxDQUNyQ2pULEtBQWUsRUFDZndCLE1BQXdELEVBQzNDO0VBQ2IsSUFBTTlILE1BQU0sR0FBR3NHLEtBQUssQ0FBQzdDLE9BQU8sQ0FBQ3FFLE1BQU0sQ0FBQ3JCLEdBQUcsQ0FBQztFQUN4QyxJQUFNTSxTQUFTLEdBQUcsSUFBQXRKLGVBQUcsRUFBQ3VDLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7RUFFbkUsSUFBSThHLFFBQVEsR0FBR2lNLGdCQUFnQixDQUFDek0sS0FBSyxFQUFFO0lBQ3JDRyxHQUFHLEVBQUVxQixNQUFNLENBQUNyQixHQUFHO0lBQ2Z1RCxJQUFJLEVBQUUsU0FBUztJQUNmOUssS0FBSyxFQUFFLENBQUM2SDtFQUNWLENBQUMsQ0FBQztFQUVGRCxRQUFRLEdBQUdpTSxnQkFBZ0IsQ0FBQ2pNLFFBQVEsRUFBRTtJQUNwQ0wsR0FBRyxFQUFFcUIsTUFBTSxDQUFDckIsR0FBRztJQUNmdUQsSUFBSSxFQUFFLE9BQU87SUFDYjlLLEtBQUssRUFBRSxJQUFBc2EsMkJBQW9CLEVBQUN4WixNQUFNLENBQUNkLEtBQUssRUFBRWMsTUFBTSxDQUFDZSxFQUFFLEVBQUU7TUFDbkRnRyxTQUFTLEVBQUUsQ0FBQ0E7SUFDZCxDQUFDO0VBQ0gsQ0FBQyxDQUFDO0VBRUYsT0FBT0QsUUFBUTtBQUNqQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNMlMsbUJBQW1CLEdBQUE1WSxPQUFBLENBQUE0WSxtQkFBQSxHQUFHLFNBQXRCQSxtQkFBbUJBLENBQzlCblQsS0FBZSxFQUNmd0IsTUFBaUQsRUFDcEM7RUFDYixJQUFPckIsR0FBRyxHQUFJcUIsTUFBTSxDQUFickIsR0FBRztFQUNWLElBQUFpVCxrQkFBQSxHQUFxQnBULEtBQUssQ0FBQzdDLE9BQU8sQ0FBQ2dELEdBQUcsQ0FBQztJQUFoQ2lDLE1BQU0sR0FBQWdSLGtCQUFBLENBQU5oUixNQUFNO0lBQUUzSCxFQUFFLEdBQUEyWSxrQkFBQSxDQUFGM1ksRUFBRTtFQUVqQixJQUFNNFksVUFBVSxNQUFBak0sTUFBQSxLQUFBQyxtQkFBQSxhQUNYckgsS0FBSyxDQUFDN0MsT0FBTyxDQUFDakUsS0FBSyxDQUFDLENBQUMsRUFBRWlILEdBQUcsQ0FBQyxPQUFBa0gsbUJBQUEsYUFDM0JySCxLQUFLLENBQUM3QyxPQUFPLENBQUNqRSxLQUFLLENBQUNpSCxHQUFHLEdBQUcsQ0FBQyxFQUFFSCxLQUFLLENBQUM3QyxPQUFPLENBQUM1RSxNQUFNLENBQUMsRUFDdEQ7RUFFRCxJQUFNZ1csZ0JBQWdCLEdBQUcsSUFBQUMsNkJBQXNCLEVBQUNwTSxNQUFNLEVBQUVwQyxLQUFLLENBQUMzQyxRQUFRLEVBQUVnVyxVQUFVLEVBQUVyVCxLQUFLLENBQUNsRCxNQUFNLENBQUM7RUFDakcsSUFBTXdXLFNBQVMsR0FDYixJQUFBQywyQkFBb0IsRUFBQ3ZULEtBQUssQ0FBQ2pCLE1BQU0sQ0FBQ3ZDLGVBQWUsQ0FBQyxLQUFLL0IsRUFBRSxHQUFBWCxhQUFBLENBQUFBLGFBQUEsS0FFaERrRyxLQUFLLENBQUNqQixNQUFNO0lBQ2Z2QyxlQUFlLEVBQUU7RUFBSSxLQUV2QndELEtBQUssQ0FBQ2pCLE1BQU07RUFFbEIsSUFBSXlCLFFBQVEsR0FBRyxJQUFBcEosVUFBRyxFQUFDLENBQUMsU0FBUyxDQUFDLEVBQUVpYyxVQUFVLEVBQUVyVCxLQUFLLENBQUM7RUFDbERRLFFBQVEsR0FBRyxJQUFBcEosVUFBRyxFQUFDLENBQUMsVUFBVSxDQUFDLEVBQUVtWCxnQkFBZ0IsRUFBRS9OLFFBQVEsQ0FBQztFQUN4REEsUUFBUSxHQUFHLElBQUFwSixVQUFHLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRWtjLFNBQVMsRUFBRTlTLFFBQVEsQ0FBQztFQUUvQyxPQUFPb08sd0JBQXdCLENBQUNwTyxRQUFRLEVBQUU0QixNQUFNLEVBQUU3RSxTQUFTLENBQUM7QUFDOUQsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWlXLGVBQWUsR0FBQWpaLE9BQUEsQ0FBQWlaLGVBQUEsR0FBRyxTQUFsQkEsZUFBZUEsQ0FDMUJ4VCxLQUFlLEVBQ2Z3QixNQUE2QyxFQUNoQztFQUNiLElBQUlhLFFBQVE7RUFDWixJQUFJb1IsWUFBWTtFQUNoQixJQUFJalMsTUFBTSxDQUFDNUcsTUFBTSxFQUFFO0lBQ2pCeUgsUUFBUSxHQUFHLElBQUFxUixxQ0FBcUIsRUFBQzFULEtBQUssRUFBRXdCLE1BQU0sQ0FBQzVHLE1BQU0sQ0FBQztJQUN0RCxJQUFJLENBQUN5SCxRQUFRLEVBQUU7TUFDYnFILGVBQU8sQ0FBQ2lLLElBQUksQ0FDViw2RkFBNkYsRUFDN0ZuUyxNQUFNLENBQUM1RyxNQUNULENBQUM7TUFDRCxPQUFPb0YsS0FBSztJQUNkO0lBRUEsSUFBTXNKLE1BQU0sR0FBRyxJQUFBL0QsOEJBQWtCLEVBQUNsRCxRQUFRLEVBQUVyQyxLQUFLLENBQUM7SUFDbERxQyxRQUFRLEdBQUdpSCxNQUFNLENBQUNwSixLQUFLO0lBQ3ZCdVQsWUFBWSxHQUFHbkssTUFBTSxDQUFDdk0sU0FBUztFQUNqQyxDQUFDLE1BQU07SUFBQSxJQUFBNlcsaUJBQUE7SUFDTDtJQUNBLElBQU1DLGNBQWMsSUFBQUQsaUJBQUEsR0FBR3BTLE1BQU0sQ0FBQ3dPLFNBQVMsY0FBQTRELGlCQUFBLGNBQUFBLGlCQUFBLEdBQUlwYyxNQUFNLENBQUNnQyxJQUFJLENBQUN3RyxLQUFLLENBQUMzQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekVnRixRQUFRLEdBQUcsSUFBSXlSLGFBQUssQ0FBQztNQUNuQnJULFNBQVMsRUFBRSxJQUFJO01BQ2Z5SSxjQUFjLEVBQUUsSUFBSTtNQUNwQjlHLE1BQU0sRUFBRXlSO0lBQ1YsQ0FBQyxDQUFDO0lBQ0ZKLFlBQVksR0FBRyxDQUFDLENBQUM7RUFDbkI7RUFFQSxJQUFJalQsUUFBUSxHQUFBMUcsYUFBQSxDQUFBQSxhQUFBLEtBQ1BrRyxLQUFLO0lBQ1JsRCxNQUFNLEtBQUFzSyxNQUFBLEtBQUFDLG1CQUFBLGFBQU1ySCxLQUFLLENBQUNsRCxNQUFNLElBQUV1RixRQUFRLEVBQUM7SUFDbkN0RixTQUFTLEtBQUFxSyxNQUFBLEtBQUFDLG1CQUFBLGFBQU1ySCxLQUFLLENBQUNqRCxTQUFTLElBQUUwVyxZQUFZLEVBQUM7SUFDN0M7SUFDQXhXLFVBQVUsR0FBR29GLFFBQVEsQ0FBQzVILEVBQUUsRUFBQTJNLE1BQUEsS0FBQUMsbUJBQUEsYUFBS3JILEtBQUssQ0FBQy9DLFVBQVUsRUFBQztJQUM5Q3dCLFNBQVMsRUFBRSxJQUFBaUMsNkJBQXNCLEVBQUNWLEtBQUssQ0FBQ3ZCLFNBQVMsRUFBRTRELFFBQVE7RUFBQyxFQUM3RDtFQUVELElBQUlBLFFBQVEsQ0FBQ3pILE1BQU0sQ0FBQ2dHLFNBQVMsQ0FBQ2pHLE9BQU8sRUFBRTtJQUNyQzZGLFFBQVEsR0FBR0sscUJBQXFCLENBQUNMLFFBQVEsQ0FBQztFQUM1QztFQUVBLE9BQU9BLFFBQVE7QUFDakIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU3VULGtCQUFrQkEsQ0FDaEMvVCxLQUFRLEVBQUFnVSxLQUFBLEVBRUw7RUFBQSxJQURGdlosRUFBRSxHQUFBdVosS0FBQSxDQUFGdlosRUFBRTtFQUVILElBQU0wRixHQUFHLEdBQUdsSSxNQUFNLENBQUNnYyxRQUFRLENBQUN4WixFQUFFLENBQUM7RUFDM0I7RUFDQXhDLE1BQU0sQ0FBQ3dDLEVBQUUsQ0FBQyxHQUNWdUYsS0FBSyxDQUFDbEQsTUFBTSxDQUFDNEYsU0FBUyxDQUFDLFVBQUFSLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN6SCxFQUFFLEtBQUtBLEVBQUU7RUFBQSxFQUFDO0VBQzVDLElBQUkwRixHQUFHLEdBQUcsQ0FBQyxJQUFJQSxHQUFHLElBQUlILEtBQUssQ0FBQ2xELE1BQU0sQ0FBQ3ZFLE1BQU0sRUFBRTtJQUN6QztJQUNBbVIsZUFBTyxDQUFDaUssSUFBSSw2Q0FBQXZNLE1BQUEsQ0FBNkMzTSxFQUFFLENBQUUsQ0FBQztJQUM5RCxPQUFPdUYsS0FBSztFQUNkO0VBRUEsSUFBT2xELE1BQU0sR0FBK0NrRCxLQUFLLENBQTFEbEQsTUFBTTtJQUFFQyxTQUFTLEdBQW9DaUQsS0FBSyxDQUFsRGpELFNBQVM7SUFBRUUsVUFBVSxHQUF3QitDLEtBQUssQ0FBdkMvQyxVQUFVO0lBQUVvQixPQUFPLEdBQWUyQixLQUFLLENBQTNCM0IsT0FBTztJQUFFRCxTQUFTLEdBQUk0QixLQUFLLENBQWxCNUIsU0FBUztFQUN4RCxJQUFNOFYsYUFBYSxHQUFHcFgsTUFBTSxDQUFDcUQsR0FBRyxDQUFDO0VBQ2pDLElBQU1LLFFBQVEsR0FBQTFHLGFBQUEsQ0FBQUEsYUFBQSxLQUNUa0csS0FBSztJQUNSbEQsTUFBTSxFQUFFLElBQUFxWCw4QkFBYSxFQUFDRCxhQUFhLENBQUN6WixFQUFFLENBQUMsQ0FBQ3FDLE1BQU0sQ0FBQztJQUMvQ0MsU0FBUyxFQUFFLElBQUFxWCxxQ0FBb0IsRUFBQ2pVLEdBQUcsQ0FBQyxDQUFDcEQsU0FBUyxDQUFDO0lBQy9DRSxVQUFVLEVBQUUsSUFBQW9YLHVDQUEyQixFQUFDcFgsVUFBVSxFQUFFaVgsYUFBYSxDQUFDelosRUFBRSxDQUFDO0lBQ3JFNEQsT0FBTyxFQUFFNlYsYUFBYSxDQUFDbkssY0FBYyxDQUFDMUwsT0FBTyxDQUFDLEdBQUdkLFNBQVMsR0FBR2MsT0FBTztJQUNwRUQsU0FBUyxFQUFFOFYsYUFBYSxDQUFDbkssY0FBYyxDQUFDM0wsU0FBUyxDQUFDLEdBQUdiLFNBQVMsR0FBR2EsU0FBUztJQUMxRUssU0FBUyxFQUFFLElBQUFrQywrQkFBd0IsRUFBQ1gsS0FBSyxDQUFDdkIsU0FBUyxFQUFFeVYsYUFBYTtJQUNsRTtFQUFBLEVBQ0Q7RUFFRCxPQUFPclQscUJBQXFCLENBQzFCeVQsc0JBQXNCLENBQ3BCOVQsUUFBUSxFQUNSLFVBQUErVCxLQUFLO0lBQUEsT0FBSUMsa0JBQWtCLENBQUNELEtBQUssQ0FBQyxJQUFJQSxLQUFLLENBQUM1TyxPQUFPLEtBQUt1TyxhQUFhLENBQUN6WixFQUFFO0VBQUEsQ0FDMUUsQ0FDRixDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1nYSxtQkFBbUIsR0FBQWxhLE9BQUEsQ0FBQWthLG1CQUFBLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FDOUJ6VSxLQUFlLEVBQUEwVSxLQUFBO0VBQUEsSUFDZEMsS0FBSyxHQUFBRCxLQUFBLENBQUxDLEtBQUs7RUFBQSxPQUFBN2EsYUFBQSxDQUFBQSxhQUFBLEtBRUhrRyxLQUFLO0lBQ1IvQyxVQUFVLEVBQUUwWDtFQUFLO0FBQUEsQ0FDakI7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLG9CQUFvQixHQUFBcmEsT0FBQSxDQUFBcWEsb0JBQUEsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQjVVLEtBQWUsRUFDZndCLE1BQWtELEVBQ3JDO0VBQ2IsSUFBTXFULFVBQVUsR0FBRyxJQUFBQyw0QkFBZ0IsRUFBQ3RULE1BQU0sQ0FBQztFQUMzQyxJQUFJdVQsYUFBYSxPQUFBMU4sbUJBQUEsYUFBT3JILEtBQUssQ0FBQy9DLFVBQVUsQ0FBQztFQUV6QyxJQUFJdUUsTUFBTSxDQUFDdkUsVUFBVSxFQUFFO0lBQ3JCdUUsTUFBTSxDQUFDdkUsVUFBVSxDQUFDakQsT0FBTyxDQUFDLFVBQUEyTCxPQUFPLEVBQUk7TUFDbkNvUCxhQUFhLEdBQUcsSUFBQVYsdUNBQTJCLEVBQUNVLGFBQWEsRUFBRXBQLE9BQWlCLENBQUM7SUFDL0UsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxPQUFBN0wsYUFBQSxDQUFBQSxhQUFBLEtBQ0trRyxLQUFLO0lBQ1IvQyxVQUFVLEVBQUUsSUFBQStYLHVDQUEyQixFQUFDRCxhQUFhLEVBQUVGLFVBQVU7RUFBQztBQUV0RSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNSSx1QkFBdUIsR0FBQTFhLE9BQUEsQ0FBQTBhLHVCQUFBLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbENqVixLQUFlLEVBQ2Z3QixNQUFxRCxFQUN4QztFQUNiLElBQU8vRyxFQUFFLEdBQUkrRyxNQUFNLENBQVovRyxFQUFFO0VBQ1QsSUFBTXlhLGtCQUFrQixHQUFHLElBQUFDLHVDQUEyQixFQUFDblYsS0FBSyxDQUFDL0MsVUFBVSxFQUFFeEMsRUFBRSxDQUFDO0VBQzVFLElBQUksQ0FBQ3lhLGtCQUFrQixFQUFFO0lBQ3ZCLE9BQU9sVixLQUFLO0VBQ2Q7RUFFQSxJQUFNb1YsZ0JBQWdCLEdBQUcsSUFBQUMsNkJBQWlCLEVBQUNILGtCQUFrQixDQUFDalksVUFBVSxDQUFDO0VBQ3pFLElBQUl1RCxRQUFRLEdBQUExRyxhQUFBLEtBQU9rRyxLQUFLLENBQUM7RUFFekJvVixnQkFBZ0IsQ0FBQ3BiLE9BQU8sQ0FBQyxVQUFBMkwsT0FBTyxFQUFJO0lBQ2xDLElBQU14RixHQUFHLEdBQUdLLFFBQVEsQ0FBQzFELE1BQU0sQ0FBQzRGLFNBQVMsQ0FBQyxVQUFBUixDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDekgsRUFBRSxLQUFLa0wsT0FBTztJQUFBLEVBQUM7SUFDNUQsSUFBSXhGLEdBQUcsSUFBSSxDQUFDLEVBQUU7TUFDWkssUUFBUSxHQUFHdVQsa0JBQWtCLENBQUN2VCxRQUFRLEVBQUU7UUFBQy9GLEVBQUUsRUFBRWtMO01BQU8sQ0FBQyxDQUFDO0lBQ3hEO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBTW9QLGFBQWEsR0FBRyxJQUFBVix1Q0FBMkIsRUFBQzdULFFBQVEsQ0FBQ3ZELFVBQVUsRUFBRWlZLGtCQUFrQixDQUFDO0VBQzFGLE9BQUFwYixhQUFBLENBQUFBLGFBQUEsS0FDSzBHLFFBQVE7SUFDWHZELFVBQVUsRUFBRThYO0VBQWE7QUFFN0IsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTU8sdUJBQXVCLEdBQUEvYSxPQUFBLENBQUErYSx1QkFBQSxHQUFHLFNBQTFCQSx1QkFBdUJBLENBQ2xDdFYsS0FBZSxFQUNmd0IsTUFBcUQsRUFDeEM7RUFDYixJQUFPL0csRUFBRSxHQUFhK0csTUFBTSxDQUFyQi9HLEVBQUU7SUFBRThhLE9BQU8sR0FBSS9ULE1BQU0sQ0FBakIrVCxPQUFPO0VBQ2xCLElBQU1WLFVBQVUsR0FBRyxJQUFBTSx1Q0FBMkIsRUFBQ25WLEtBQUssQ0FBQy9DLFVBQVUsRUFBRXhDLEVBQUUsQ0FBQztFQUNwRSxJQUFJLENBQUNvYSxVQUFVLEVBQUU7SUFDZixPQUFPN1UsS0FBSztFQUNkO0VBRUEsSUFBSVEsUUFBUSxHQUFBMUcsYUFBQSxLQUFPa0csS0FBSyxDQUFDO0VBRXpCLElBQUl1VixPQUFPLENBQUN0WSxVQUFVLEVBQUU7SUFDdEJ1RCxRQUFRLENBQUN2RCxVQUFVLE1BQUFtSyxNQUFBLEtBQUFDLG1CQUFBLGFBQU93TixVQUFVLENBQUM1WCxVQUFVLE9BQUFvSyxtQkFBQSxhQUFLN0csUUFBUSxDQUFDdkQsVUFBVSxFQUFDO0lBQ3hFc1ksT0FBTyxDQUFDdFksVUFBVSxDQUFDakQsT0FBTyxDQUFDLFVBQUEyTCxPQUFPLEVBQUk7TUFDcENuRixRQUFRLENBQUN2RCxVQUFVLEdBQUcsSUFBQW9YLHVDQUEyQixFQUFDN1QsUUFBUSxDQUFDdkQsVUFBVSxFQUFFMEksT0FBaUIsQ0FBQztJQUMzRixDQUFDLENBQUM7RUFDSjtFQUVBLElBQU02UCxhQUFhLEdBQUExYixhQUFBLENBQUFBLGFBQUEsS0FDZCthLFVBQVUsR0FDVlUsT0FBTyxDQUNYO0VBRUQsSUFBSUMsYUFBYSxDQUFDL1UsU0FBUyxLQUFLb1UsVUFBVSxDQUFDcFUsU0FBUyxFQUFFO0lBQ3BELElBQU1nVixRQUFRLEdBQUcsSUFBQUosNkJBQWlCLEVBQUNHLGFBQWEsQ0FBQ3ZZLFVBQVUsQ0FBQztJQUM1RHVELFFBQVEsR0FBR0EsUUFBUSxDQUFDMUQsTUFBTSxDQUFDd1AsTUFBTSxDQUFDLFVBQUNvSixHQUFHLEVBQUV4VixLQUFLLEVBQUs7TUFDaEQsSUFBSXVWLFFBQVEsQ0FBQ3hPLFFBQVEsQ0FBQy9HLEtBQUssQ0FBQ3pGLEVBQUUsQ0FBQyxFQUFFO1FBQy9CLE9BQU95Six3QkFBd0IsQ0FBQ3dSLEdBQUcsRUFBRTtVQUNuQzFULFFBQVEsRUFBRTlCLEtBQUs7VUFDZjBFLFNBQVMsRUFBRTtZQUFDbkUsU0FBUyxFQUFFK1UsYUFBYSxDQUFDL1U7VUFBUztRQUNoRCxDQUFDLENBQUM7TUFDSjtNQUNBLE9BQU9pVixHQUFHO0lBQ1osQ0FBQyxFQUFFbFYsUUFBUSxDQUFDO0VBQ2Q7RUFFQSxJQUFNdVUsYUFBYSxHQUFHLElBQUFZLHdDQUE0QixFQUFDblYsUUFBUSxDQUFDdkQsVUFBVSxFQUFFdVksYUFBYSxDQUFDO0VBQ3RGLE9BQUExYixhQUFBLENBQUFBLGFBQUEsS0FDSzBHLFFBQVE7SUFDWHZELFVBQVUsRUFBRThYO0VBQWE7QUFFN0IsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWEsMkJBQTJCLEdBQUFyYixPQUFBLENBQUFxYiwyQkFBQSxHQUFHLFNBQTlCQSwyQkFBMkJBLENBQ3RDNVYsS0FBZSxFQUNmd0IsTUFBeUQsRUFDNUM7RUFDYixJQUFPcVUsWUFBWSxHQUFhclUsTUFBTSxDQUEvQnFVLFlBQVk7SUFBRWxRLE9BQU8sR0FBSW5FLE1BQU0sQ0FBakJtRSxPQUFPO0VBQzVCLElBQU1rUCxVQUFVLEdBQUcsSUFBQU0sdUNBQTJCLEVBQUNuVixLQUFLLENBQUMvQyxVQUFVLEVBQUU0WSxZQUFZLENBQUM7RUFDOUUsSUFBTTNWLEtBQUssR0FBR0YsS0FBSyxDQUFDbEQsTUFBTSxDQUFDbUYsSUFBSSxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN6SCxFQUFFLEtBQUtrTCxPQUFPO0VBQUEsRUFBQztFQUN0RCxJQUFJLENBQUNrUCxVQUFVLElBQUksQ0FBQzNVLEtBQUssRUFBRTtJQUN6QixPQUFPRixLQUFLO0VBQ2Q7RUFFQSxJQUFJNlUsVUFBVSxDQUFDNVgsVUFBVSxDQUFDZ0YsSUFBSSxDQUFDLFVBQUE2VCxLQUFLO0lBQUEsT0FBSUEsS0FBSyxLQUFLblEsT0FBTztFQUFBLEVBQUMsRUFBRTtJQUMxRCxPQUFPM0YsS0FBSztFQUNkO0VBRUEsSUFBTStWLGtCQUFrQixHQUFHLElBQUFmLHVDQUEyQixFQUFDSCxVQUFVLENBQUM1WCxVQUFVLEVBQUUwSSxPQUFPLENBQUM7RUFDdEYsT0FBTzJQLHVCQUF1QixDQUFDdFYsS0FBSyxFQUFFO0lBQ3BDdkYsRUFBRSxFQUFFb2IsWUFBWTtJQUNoQk4sT0FBTyxFQUFFO01BQUN0WSxVQUFVLEVBQUU4WTtJQUFrQjtFQUMxQyxDQUFDLENBQUM7QUFDSixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxnQ0FBZ0MsR0FBQXpiLE9BQUEsQ0FBQXliLGdDQUFBLEdBQUcsU0FBbkNBLGdDQUFnQ0EsQ0FDM0NoVyxLQUFlLEVBQ2Z3QixNQUE4RCxFQUNqRDtFQUNiLElBQU9xVSxZQUFZLEdBQWFyVSxNQUFNLENBQS9CcVUsWUFBWTtJQUFFbFEsT0FBTyxHQUFJbkUsTUFBTSxDQUFqQm1FLE9BQU87RUFDNUIsSUFBTWtQLFVBQVUsR0FBRyxJQUFBTSx1Q0FBMkIsRUFBQ25WLEtBQUssQ0FBQy9DLFVBQVUsRUFBRTRZLFlBQVksQ0FBQztFQUM5RSxJQUFJLENBQUNoQixVQUFVLEVBQUU7SUFDZixPQUFPN1UsS0FBSztFQUNkO0VBRUEsSUFBTWlXLGtCQUFrQixHQUFHLElBQUE1Qix1Q0FBMkIsRUFBQ1EsVUFBVSxDQUFDNVgsVUFBVSxFQUFFMEksT0FBTyxDQUFDO0VBQ3RGLE9BQU8yUCx1QkFBdUIsQ0FBQ3RWLEtBQUssRUFBRTtJQUNwQ3ZGLEVBQUUsRUFBRW9iLFlBQVk7SUFDaEJOLE9BQU8sRUFBRTtNQUFDdFksVUFBVSxFQUFFZ1o7SUFBa0I7RUFDMUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyw0QkFBNEIsR0FBQTNiLE9BQUEsQ0FBQTJiLDRCQUFBLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FDdkNsVyxLQUFlLEVBQ2Z3QixNQUEwRCxFQUM3QztFQUNiLElBQU8yVSxhQUFhLEdBQXFFM1UsTUFBTSxDQUF4RjJVLGFBQWE7SUFBRUMsa0JBQWtCLEdBQWlENVUsTUFBTSxDQUF6RTRVLGtCQUFrQjtJQUFFQyxrQkFBa0IsR0FBNkI3VSxNQUFNLENBQXJENlUsa0JBQWtCO0lBQUVDLHVCQUF1QixHQUFJOVUsTUFBTSxDQUFqQzhVLHVCQUF1QjtFQUVyRixJQUFJLENBQUNELGtCQUFrQixJQUFJLENBQUNDLHVCQUF1QixFQUFFO0lBQ25ELElBQU1DLFdBQVcsR0FBR3ZXLEtBQUssQ0FBQy9DLFVBQVUsQ0FBQ3lGLFNBQVMsQ0FBQyxVQUFBb1QsS0FBSztNQUFBLE9BQ2xELE9BQU9BLEtBQUssS0FBSyxRQUFRLEdBQUdBLEtBQUssS0FBS0ssYUFBYSxHQUFHTCxLQUFLLENBQUNyYixFQUFFLEtBQUswYixhQUFhO0lBQUEsQ0FDbEYsQ0FBQztJQUNELElBQUlDLGtCQUFrQixJQUFJRyxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUU7TUFDNUMsSUFBTUMsZ0JBQWdCLEdBQUd4VyxLQUFLLENBQUMvQyxVQUFVLENBQUN5RixTQUFTLENBQUMsVUFBQW9ULEtBQUs7UUFBQSxPQUN2RCxPQUFPQSxLQUFLLEtBQUssUUFBUSxHQUFHQSxLQUFLLEtBQUtNLGtCQUFrQixHQUFHTixLQUFLLENBQUNyYixFQUFFLEtBQUsyYixrQkFBa0I7TUFBQSxDQUM1RixDQUFDO01BQ0QsSUFBSUksZ0JBQWdCLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDM0IsSUFBTXpCLGFBQWEsR0FBRyxJQUFBMEIsc0JBQVMsRUFBQ3pXLEtBQUssQ0FBQy9DLFVBQVUsRUFBRXNaLFdBQVcsRUFBRUMsZ0JBQWdCLENBQUM7UUFDaEYsT0FBQTFjLGFBQUEsQ0FBQUEsYUFBQSxLQUFXa0csS0FBSztVQUFFL0MsVUFBVSxFQUFFOFg7UUFBYTtNQUM3QztJQUNGO0VBQ0Y7RUFFQSxJQUFJc0Isa0JBQWtCLElBQUksQ0FBQ0MsdUJBQXVCLEVBQUU7SUFDbEQsSUFBSXZCLGNBQWEsR0FBRyxJQUFBVix1Q0FBMkIsRUFBQ3JVLEtBQUssQ0FBQy9DLFVBQVUsRUFBRWtaLGFBQWEsQ0FBQztJQUNoRixJQUFJQyxrQkFBa0IsRUFBRTtNQUN0QixJQUFNSSxpQkFBZ0IsR0FBR3pCLGNBQWEsQ0FBQ3JTLFNBQVMsQ0FBQyxVQUFBb1QsS0FBSztRQUFBLE9BQ3BELE9BQU9BLEtBQUssS0FBSyxRQUFRLEdBQUdBLEtBQUssS0FBS00sa0JBQWtCLEdBQUcsS0FBSztNQUFBLENBQ2xFLENBQUM7TUFDRHJCLGNBQWEsQ0FBQ25OLE1BQU0sQ0FBQzRPLGlCQUFnQixLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBR0EsaUJBQWdCLEVBQUUsQ0FBQyxFQUFFTCxhQUFhLENBQUM7SUFDeEYsQ0FBQyxNQUFNO01BQ0xwQixjQUFhLE1BQUEzTixNQUFBLEtBQUFDLG1CQUFBLGFBQU8wTixjQUFhLElBQUVvQixhQUFhLEVBQUM7SUFDbkQ7SUFDQSxPQUFBcmMsYUFBQSxDQUFBQSxhQUFBLEtBQVdrRyxLQUFLO01BQUUvQyxVQUFVLEVBQUU4WDtJQUFhO0VBQzdDO0VBRUEsSUFBSXNCLGtCQUFrQixJQUFJQyx1QkFBdUIsRUFBRTtJQUNqRCxJQUFJRCxrQkFBa0IsS0FBS0MsdUJBQXVCLEVBQUU7TUFDbEQsSUFBTXpCLFVBQVUsR0FBRyxJQUFBTSx1Q0FBMkIsRUFBQ25WLEtBQUssQ0FBQy9DLFVBQVUsRUFBRW9aLGtCQUFrQixDQUFDO01BQ3BGLElBQUksQ0FBQ3hCLFVBQVUsRUFBRSxPQUFPN1UsS0FBSztNQUM3QixJQUFNdVcsWUFBVyxHQUFHMUIsVUFBVSxDQUFDNVgsVUFBVSxDQUFDeUYsU0FBUyxDQUFDLFVBQUFvVCxLQUFLO1FBQUEsT0FDdkQsT0FBT0EsS0FBSyxLQUFLLFFBQVEsR0FBR0EsS0FBSyxLQUFLSyxhQUFhLEdBQUdMLEtBQUssQ0FBQ3JiLEVBQUUsS0FBSzBiLGFBQWE7TUFBQSxDQUNsRixDQUFDO01BQ0QsSUFBSUksWUFBVyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU92VyxLQUFLO01BQ3BDLElBQUlvVyxrQkFBa0IsRUFBRTtRQUN0QixJQUFNTSxTQUFTLEdBQUc3QixVQUFVLENBQUM1WCxVQUFVLENBQUN5RixTQUFTLENBQUMsVUFBQW9ULEtBQUs7VUFBQSxPQUNyRCxPQUFPQSxLQUFLLEtBQUssUUFBUSxHQUFHQSxLQUFLLEtBQUtNLGtCQUFrQixHQUFHTixLQUFLLENBQUNyYixFQUFFLEtBQUsyYixrQkFBa0I7UUFBQSxDQUM1RixDQUFDO1FBQ0QsSUFBSU0sU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8xVyxLQUFLO1FBQ2xDLElBQU0rVixrQkFBa0IsR0FBRyxJQUFBVSxzQkFBUyxFQUFDNUIsVUFBVSxDQUFDNVgsVUFBVSxFQUFFc1osWUFBVyxFQUFFRyxTQUFTLENBQUM7UUFDbkYsSUFBTTNCLGVBQWEsR0FBRyxJQUFBWSx3Q0FBNEIsRUFBQzNWLEtBQUssQ0FBQy9DLFVBQVUsRUFBQW5ELGFBQUEsQ0FBQUEsYUFBQSxLQUM5RCthLFVBQVU7VUFDYjVYLFVBQVUsRUFBRThZO1FBQWtCLEVBQy9CLENBQUM7UUFDRixPQUFBamMsYUFBQSxDQUFBQSxhQUFBLEtBQVdrRyxLQUFLO1VBQUUvQyxVQUFVLEVBQUU4WDtRQUFhO01BQzdDO01BQ0EsT0FBTy9VLEtBQUs7SUFDZDs7SUFFQTtJQUNBLElBQU0vQyxVQUFVLEdBQUcsSUFBQW9YLHVDQUEyQixFQUFDclUsS0FBSyxDQUFDL0MsVUFBVSxFQUFFa1osYUFBYSxDQUFDO0lBQy9FLElBQUkzVixRQUFRLEdBQUdvViwyQkFBMkIsQ0FBQTliLGFBQUEsQ0FBQUEsYUFBQSxLQUNwQ2tHLEtBQUs7TUFBRS9DLFVBQVUsRUFBVkE7SUFBVSxJQUNyQjtNQUFDMEksT0FBTyxFQUFFd1EsYUFBYTtNQUFFTixZQUFZLEVBQUVTO0lBQXVCLENBQ2hFLENBQUM7SUFFRCxJQUFJRixrQkFBa0IsRUFBRTtNQUN0QixJQUFNdkIsV0FBVSxHQUFHLElBQUFNLHVDQUEyQixFQUFDM1UsUUFBUSxDQUFDdkQsVUFBVSxFQUFFcVosdUJBQXVCLENBQUM7TUFDNUYsSUFBSSxDQUFDekIsV0FBVSxFQUFFLE9BQU83VSxLQUFLO01BQzdCLElBQU11VyxhQUFXLEdBQUcxQixXQUFVLENBQUM1WCxVQUFVLENBQUN5RixTQUFTLENBQUMsVUFBQW9ULEtBQUs7UUFBQSxPQUFJQSxLQUFLLEtBQUtLLGFBQWE7TUFBQSxFQUFDO01BQ3JGLElBQU1PLFVBQVMsR0FBRzdCLFdBQVUsQ0FBQzVYLFVBQVUsQ0FBQ3lGLFNBQVMsQ0FBQyxVQUFBb1QsS0FBSztRQUFBLE9BQUlBLEtBQUssS0FBS00sa0JBQWtCO01BQUEsRUFBQztNQUN4RixJQUFJRyxhQUFXLEtBQUssQ0FBQyxDQUFDLElBQUlHLFVBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUMxQyxJQUFNWCxtQkFBa0IsR0FBRyxJQUFBVSxzQkFBUyxFQUFDNUIsV0FBVSxDQUFDNVgsVUFBVSxFQUFFc1osYUFBVyxFQUFFRyxVQUFTLENBQUM7UUFDbkZsVyxRQUFRLEdBQUExRyxhQUFBLENBQUFBLGFBQUEsS0FDSDBHLFFBQVE7VUFDWHZELFVBQVUsRUFBRSxJQUFBMFksd0NBQTRCLEVBQUNuVixRQUFRLENBQUN2RCxVQUFVLEVBQUFuRCxhQUFBLENBQUFBLGFBQUEsS0FDdkQrYSxXQUFVO1lBQ2I1WCxVQUFVLEVBQUU4WTtVQUFrQixFQUMvQjtRQUFDLEVBQ0g7TUFDSDtJQUNGO0lBQ0EsT0FBT3ZWLFFBQVE7RUFDakI7RUFFQSxJQUFJLENBQUM2VixrQkFBa0IsSUFBSUMsdUJBQXVCLEVBQUU7SUFDbEQsSUFBTXJaLFdBQVUsR0FBRyxJQUFBb1gsdUNBQTJCLEVBQUNyVSxLQUFLLENBQUMvQyxVQUFVLEVBQUVrWixhQUFhLENBQUM7SUFDL0UsT0FBT1AsMkJBQTJCLENBQUE5YixhQUFBLENBQUFBLGFBQUEsS0FDNUJrRyxLQUFLO01BQUUvQyxVQUFVLEVBQVZBO0lBQVUsSUFDckI7TUFBQzBJLE9BQU8sRUFBRXdRLGFBQWE7TUFBRU4sWUFBWSxFQUFFUztJQUF1QixDQUNoRSxDQUFDO0VBQ0g7RUFFQSxPQUFPdFcsS0FBSztBQUNkLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0yVyxxQkFBcUIsR0FBQXBjLE9BQUEsQ0FBQW9jLHFCQUFBLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FDaEMzVyxLQUFlLEVBQUE0VyxLQUFBLEVBRUY7RUFBQSxJQURabmMsRUFBRSxHQUFBbWMsS0FBQSxDQUFGbmMsRUFBRTtFQUVILElBQU0wRixHQUFHLEdBQUdsSSxNQUFNLENBQUNnYyxRQUFRLENBQUN4WixFQUFFLENBQUM7RUFDM0I7RUFDQXhDLE1BQU0sQ0FBQ3dDLEVBQUUsQ0FBQyxHQUNWdUYsS0FBSyxDQUFDbEQsTUFBTSxDQUFDNEYsU0FBUyxDQUFDLFVBQUFSLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN6SCxFQUFFLEtBQUtBLEVBQUU7RUFBQSxFQUFDO0VBQzVDLElBQUkwRixHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUNILEtBQUssQ0FBQ2xELE1BQU0sQ0FBQ3FELEdBQUcsQ0FBQyxFQUFFO0lBQ2pDdUosZUFBTyxDQUFDaUssSUFBSSxVQUFBdk0sTUFBQSxDQUFVakgsR0FBRyw2QkFBMEIsQ0FBQztJQUNwRCxPQUFPSCxLQUFLO0VBQ2Q7RUFFQSxJQUFPbEQsTUFBTSxHQUFJa0QsS0FBSyxDQUFmbEQsTUFBTTtFQUNiLElBQU0rWixRQUFRLEdBQUcvWixNQUFNLENBQUNxRCxHQUFHLENBQUM7RUFFNUIsSUFBTTJXLHFCQUFxQixHQUFHLElBQUFDLG9DQUF3QixFQUFDL1csS0FBSyxDQUFDL0MsVUFBVSxFQUFFNFosUUFBUSxDQUFDcGMsRUFBRSxDQUFDO0VBQ3JGLElBQUl1YyxRQUFRLGNBQUE1UCxNQUFBLENBQWN5UCxRQUFRLENBQUNqYyxNQUFNLENBQUNGLEtBQUssQ0FBRTtFQUNqRCxJQUFJdWMsT0FBTyxHQUFHLENBQUM7RUFDZjtFQUNBLE9BQU9uYSxNQUFNLENBQUNtRixJQUFJLENBQUMsVUFBQUMsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3RILE1BQU0sQ0FBQ0YsS0FBSyxLQUFLc2MsUUFBUTtFQUFBLEVBQUMsRUFBRTtJQUNwREEsUUFBUSxjQUFBNVAsTUFBQSxDQUFjeVAsUUFBUSxDQUFDamMsTUFBTSxDQUFDRixLQUFLLE9BQUEwTSxNQUFBLENBQUksRUFBRTZQLE9BQU8sQ0FBRTtFQUM1RDs7RUFFQTtFQUNBLElBQU05TyxXQUFXLEdBQUcsSUFBQW5GLDhCQUFjLEVBQUM2VCxRQUFRLEVBQUU3VyxLQUFLLENBQUNULE1BQU0sQ0FBQzs7RUFFMUQ7RUFDQSxJQUFJLEVBQUM0SSxXQUFXLGFBQVhBLFdBQVcsZUFBWEEsV0FBVyxDQUFFdk4sTUFBTSxHQUFFO0lBQ3hCLE9BQU9vRixLQUFLO0VBQ2Q7RUFDQW1JLFdBQVcsQ0FBQ3ZOLE1BQU0sQ0FBQ0YsS0FBSyxHQUFHc2MsUUFBUTtFQUNuQzdPLFdBQVcsQ0FBQzFOLEVBQUUsR0FBRyxJQUFBeWMsMkJBQWMsRUFBQ0MsdUJBQWUsQ0FBQzs7RUFFaEQ7RUFDQSxJQUFJNVUsU0FBUyxHQUFHaVIsZUFBZSxDQUFDeFQsS0FBSyxFQUFFO0lBQUNwRixNQUFNLEVBQUV1TjtFQUFXLENBQUMsQ0FBQztFQUM3RDtFQUNBLElBQU05RixRQUFRLEdBQUdFLFNBQVMsQ0FBQ3pGLE1BQU0sQ0FBQ3lGLFNBQVMsQ0FBQ3pGLE1BQU0sQ0FBQ3ZFLE1BQU0sR0FBRyxDQUFDLENBQUM7O0VBRTlEO0VBQ0EsSUFBTTZlLFdBQVcsR0FBRyxJQUFBQyxtQ0FBdUIsRUFBQ3JYLEtBQUssQ0FBQy9DLFVBQVUsRUFBRTRaLFFBQVEsQ0FBQ3BjLEVBQUUsQ0FBQztFQUUxRSxJQUFJMmMsV0FBVyxFQUFFO0lBQ2Y7SUFDQSxJQUFNRSwwQkFBMEIsR0FBRy9VLFNBQVMsQ0FBQ3RGLFVBQVUsQ0FBQy9ELEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEUsSUFBTXFlLFVBQVUsR0FBR0gsV0FBVyxDQUFDbmEsVUFBVSxDQUFDeUYsU0FBUyxDQUFDLFVBQUFuTSxDQUFDO01BQUEsT0FBSUEsQ0FBQyxLQUFLc2dCLFFBQVEsQ0FBQ3BjLEVBQUU7SUFBQSxFQUFDO0lBQzNFLElBQU1zYixrQkFBa0IsR0FBRyxJQUFBeUIsa0JBQVcsRUFBQ0osV0FBVyxDQUFDbmEsVUFBVSxFQUFFc2EsVUFBVSxFQUFFbFYsUUFBUSxDQUFDNUgsRUFBRSxDQUFDO0lBQ3ZGLElBQU1nZCxZQUFZLEdBQUEzZCxhQUFBLENBQUFBLGFBQUEsS0FBT3NkLFdBQVc7TUFBRW5hLFVBQVUsRUFBRThZO0lBQWtCLEVBQUM7SUFDckUsSUFBTWhCLGFBQWEsR0FBRyxJQUFBWSx3Q0FBNEIsRUFBQzJCLDBCQUEwQixFQUFFRyxZQUFZLENBQUM7SUFDNUZsVixTQUFTLEdBQUdrUyxtQkFBbUIsQ0FBQ2xTLFNBQVMsRUFBRTtNQUFDb1MsS0FBSyxFQUFFSTtJQUFhLENBQUMsQ0FBQztFQUNwRSxDQUFDLE1BQU07SUFDTDtJQUNBLElBQU1BLGVBQWEsR0FBRyxJQUFBeUMsa0JBQVcsRUFDL0JqVixTQUFTLENBQUN0RixVQUFVLENBQUMvRCxLQUFLLENBQUMsQ0FBQyxFQUFFcUosU0FBUyxDQUFDdEYsVUFBVSxDQUFDMUUsTUFBTSxDQUFDLEVBQzFEdWUscUJBQXFCLEVBQ3JCelUsUUFBUSxDQUFDNUgsRUFDWCxDQUFDO0lBQ0Q4SCxTQUFTLEdBQUdrUyxtQkFBbUIsQ0FBQ2xTLFNBQVMsRUFBRTtNQUFDb1MsS0FBSyxFQUFFSTtJQUFhLENBQUMsQ0FBQztFQUNwRTtFQUVBLE9BQU9sVSxxQkFBcUIsQ0FBQzBCLFNBQVMsQ0FBQztBQUN6QyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNbVYsZ0JBQWdCLEdBQUFuZCxPQUFBLENBQUFtZCxnQkFBQSxHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQzNCMVgsS0FBZSxFQUNmd0IsTUFBOEMsRUFDakM7RUFBQSxJQUFBbVcsY0FBQSxFQUFBQyxlQUFBLEVBQUFDLGVBQUE7RUFDYixJQUNFLEVBQUFGLGNBQUEsR0FBQW5XLE1BQU0sQ0FBQzVHLE1BQU0sY0FBQStjLGNBQUEsdUJBQWJBLGNBQUEsQ0FBZW5WLElBQUksTUFBS3NWLGtDQUF1QixDQUFDdFYsSUFBSSxJQUNwRHhDLEtBQUssQ0FBQ3hDLE9BQU8sQ0FBQ21HLElBQUksQ0FBQyxVQUFBb1UsTUFBTTtJQUFBLE9BQUlBLE1BQU0sQ0FBQ3ZWLElBQUksS0FBS3NWLGtDQUF1QixDQUFDdFYsSUFBSTtFQUFBLEVBQUMsRUFDMUU7SUFDQWtILGVBQU8sQ0FBQ2lLLElBQUksNEJBQUF2TSxNQUFBLENBQTRCMFEsa0NBQXVCLENBQUMxZSxJQUFJLFlBQVMsQ0FBQztJQUM5RSxPQUFPNEcsS0FBSztFQUNkO0VBRUEsSUFDRSxFQUFBNFgsZUFBQSxHQUFBcFcsTUFBTSxDQUFDNUcsTUFBTSxjQUFBZ2QsZUFBQSx1QkFBYkEsZUFBQSxDQUFlcFYsSUFBSSxNQUFLd1YsNEJBQWlCLElBQ3pDaFksS0FBSyxDQUFDeEMsT0FBTyxDQUFDbUcsSUFBSSxDQUNoQixVQUFBb1UsTUFBTTtJQUFBLE9BQUlBLE1BQU0sQ0FBQ3ZWLElBQUksS0FBS3dWLDRCQUFpQixJQUFJRCxNQUFNLENBQUN2VixJQUFJLEtBQUt5ViwyQkFBZ0I7RUFBQSxDQUNqRixDQUFDLEVBQ0Q7SUFDQXZPLGVBQU8sQ0FBQ2lLLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQztJQUNsRCxPQUFPM1QsS0FBSztFQUNkO0VBRUEsSUFDRSxFQUFBNlgsZUFBQSxHQUFBclcsTUFBTSxDQUFDNUcsTUFBTSxjQUFBaWQsZUFBQSx1QkFBYkEsZUFBQSxDQUFlclYsSUFBSSxNQUFLeVYsMkJBQWdCLElBQ3hDalksS0FBSyxDQUFDeEMsT0FBTyxDQUFDbUcsSUFBSSxDQUNoQixVQUFBb1UsTUFBTTtJQUFBLE9BQUlBLE1BQU0sQ0FBQ3ZWLElBQUksS0FBS3lWLDJCQUFnQixJQUFJRixNQUFNLENBQUN2VixJQUFJLEtBQUt3Viw0QkFBaUI7RUFBQSxDQUNqRixDQUFDLEVBQ0Q7SUFDQXRPLGVBQU8sQ0FBQ2lLLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQztJQUNsRCxPQUFPM1QsS0FBSztFQUNkO0VBRUEsSUFBTWtZLFNBQVMsR0FBRyxJQUFBQyxxQkFBWSxFQUFDM1csTUFBTSxDQUFDNUcsTUFBTSxDQUFDOztFQUU3QztFQUNBb0YsS0FBSyxDQUFDeEMsT0FBTyxDQUFDeEQsT0FBTyxDQUFDLFVBQUErZCxNQUFNO0lBQUEsT0FBSUEsTUFBTSxDQUFDSyxRQUFRLENBQUM7TUFBQ2xQLGNBQWMsRUFBRTtJQUFLLENBQUMsQ0FBQztFQUFBLEVBQUM7RUFFekUsSUFBTTFMLE9BQU8sTUFBQTRKLE1BQUEsS0FBQUMsbUJBQUEsYUFBT3JILEtBQUssQ0FBQ3hDLE9BQU8sSUFBRTBhLFNBQVMsRUFBQztFQUM3QyxJQUFNemEsV0FBVyxHQUFHLElBQUE0YSxxQkFBYyxFQUFDN2EsT0FBTyxHQUFHMGEsU0FBUyxDQUFDemQsRUFBRSxFQUFBMk0sTUFBQSxLQUFBQyxtQkFBQSxhQUFLckgsS0FBSyxDQUFDdkMsV0FBVyxFQUFDLENBQUM7RUFFakYsT0FBQTNELGFBQUEsQ0FBQUEsYUFBQSxLQUNLa0csS0FBSztJQUNSeEMsT0FBTyxFQUFQQSxPQUFPO0lBQ1BDLFdBQVcsRUFBWEE7RUFBVztBQUVmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU02YSxtQkFBbUIsR0FBQS9kLE9BQUEsQ0FBQStkLG1CQUFBLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FDOUJ0WSxLQUFlLEVBQUF1WSxNQUFBLEVBRUY7RUFBQSxJQURaOWQsRUFBRSxHQUFBOGQsTUFBQSxDQUFGOWQsRUFBRTtFQUVILElBQU0wRixHQUFHLEdBQUdILEtBQUssQ0FBQ3hDLE9BQU8sQ0FBQ2tGLFNBQVMsQ0FBQyxVQUFBUixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDekgsRUFBRSxLQUFLQSxFQUFFO0VBQUEsRUFBQztFQUNyRCxJQUFJMEYsR0FBRyxHQUFHLENBQUMsSUFBSUEsR0FBRyxJQUFJSCxLQUFLLENBQUN4QyxPQUFPLENBQUNqRixNQUFNLEVBQUU7SUFDMUNtUixlQUFPLENBQUNpSyxJQUFJLDBDQUFBdk0sTUFBQSxDQUEwQzNNLEVBQUUsQ0FBRSxDQUFDO0lBQzNELE9BQU91RixLQUFLO0VBQ2Q7RUFFQSxJQUFPeEMsT0FBTyxHQUFpQndDLEtBQUssQ0FBN0J4QyxPQUFPO0lBQUVDLFdBQVcsR0FBSXVDLEtBQUssQ0FBcEJ2QyxXQUFXO0VBQzNCLElBQU0rYSxjQUFjLEdBQUdoYixPQUFPLENBQUMyQyxHQUFHLENBQUM7RUFDbkMsT0FBQXJHLGFBQUEsQ0FBQUEsYUFBQSxLQUNLa0csS0FBSztJQUNSO0lBQ0F4QyxPQUFPLEVBQUUsSUFBQTJXLDhCQUFhLEVBQUNxRSxjQUFjLENBQUMvZCxFQUFFLENBQUMsQ0FBQytDLE9BQU8sQ0FBQztJQUNsREMsV0FBVyxFQUFFQSxXQUFXLENBQUMvRCxNQUFNLENBQUMsVUFBQStlLFFBQVE7TUFBQSxPQUFJQSxRQUFRLEtBQUtELGNBQWMsQ0FBQy9kLEVBQUU7SUFBQTtFQUFDO0FBRS9FLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1pZSxvQkFBb0IsR0FBQW5lLE9BQUEsQ0FBQW1lLG9CQUFBLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FDL0IxWSxLQUFlLEVBQUEyWSxNQUFBO0VBQUEsSUFDZGhFLEtBQUssR0FBQWdFLE1BQUEsQ0FBTGhFLEtBQUs7RUFBQSxPQUFBN2EsYUFBQSxDQUFBQSxhQUFBLEtBRUhrRyxLQUFLO0lBQ1J2QyxXQUFXLEVBQUUsSUFBQTRhLHFCQUFjLEVBQUNyWSxLQUFLLENBQUN4QyxPQUFPLE1BQUE2SixtQkFBQSxhQUFNc04sS0FBSyxDQUFDO0VBQUM7QUFBQSxDQUN0RDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWlFLG1CQUFtQixHQUFBcmUsT0FBQSxDQUFBcWUsbUJBQUEsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUM5QjVZLEtBQWUsRUFBQTZZLE1BQUEsRUFFRjtFQUFBLElBRFpwZSxFQUFFLEdBQUFvZSxNQUFBLENBQUZwZSxFQUFFO0lBQUVrSyxLQUFLLEdBQUFrVSxNQUFBLENBQUxsVSxLQUFLO0VBRVYsSUFBTXhFLEdBQUcsR0FBR0gsS0FBSyxDQUFDeEMsT0FBTyxDQUFDa0YsU0FBUyxDQUFDLFVBQUFSLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN6SCxFQUFFLEtBQUtBLEVBQUU7RUFBQSxFQUFDO0VBQ3JELElBQUkwRixHQUFHLEdBQUcsQ0FBQyxJQUFJQSxHQUFHLElBQUlILEtBQUssQ0FBQ3hDLE9BQU8sQ0FBQ2pGLE1BQU0sRUFBRTtJQUMxQ21SLGVBQU8sQ0FBQ2lLLElBQUksMENBQUF2TSxNQUFBLENBQTBDM00sRUFBRSxDQUFFLENBQUM7SUFDM0QsT0FBT3VGLEtBQUs7RUFDZDtFQUVBLElBQUl2QyxXQUFXLEdBQUd1QyxLQUFLLENBQUN2QyxXQUFXO0VBQ25DLElBQUlrSCxLQUFLLENBQUNsSyxFQUFFLEtBQUs4QyxTQUFTLElBQUlvSCxLQUFLLENBQUNsSyxFQUFFLEtBQUtBLEVBQUUsRUFBRTtJQUM3QyxJQUFNcWUsSUFBSSxHQUFHOVksS0FBSyxDQUFDeEMsT0FBTyxDQUFDa0YsU0FBUyxDQUFDLFVBQUFSLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUN6SCxFQUFFLEtBQUtrSyxLQUFLLENBQUNsSyxFQUFFO0lBQUEsRUFBQztJQUM1RCxJQUFJcWUsSUFBSSxJQUFJLENBQUMsRUFBRTtNQUNicFAsZUFBTyxDQUFDaUssSUFBSSxrREFBQXZNLE1BQUEsQ0FBa0QzTSxFQUFFLENBQUUsQ0FBQztNQUNuRSxPQUFPdUYsS0FBSztJQUNkO0lBRUF2QyxXQUFXLEdBQUdBLFdBQVcsQ0FBQzJDLEdBQUcsQ0FBQyxVQUFBMlksYUFBYTtNQUFBLE9BQ3pDQSxhQUFhLEtBQUt0ZSxFQUFFLEdBQUlrSyxLQUFLLENBQUNsSyxFQUFFLEdBQWNzZSxhQUFhO0lBQUEsQ0FDN0QsQ0FBQztFQUNIO0VBRUEsSUFBTWhCLE1BQU0sR0FBRy9YLEtBQUssQ0FBQ3hDLE9BQU8sQ0FBQzJDLEdBQUcsQ0FBQztFQUNqQyxJQUFNNlksVUFBVSxHQUFHclUsS0FBSyxDQUFDc1UsVUFBVTtFQUNuQztFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQ0VELFVBQVUsSUFDVnhoQixNQUFNLENBQUNnQyxJQUFJLENBQUNtTCxLQUFLLENBQUMsQ0FBQ3BNLE1BQU0sS0FBSyxDQUFDLElBQy9CZixNQUFNLENBQUNnQyxJQUFJLENBQUN3ZixVQUFVLENBQUMsQ0FBQ3pnQixNQUFNLEtBQUssQ0FBQyxJQUNwQ3lnQixVQUFVLENBQUNFLFNBQVMsSUFBSSxJQUFJLElBQzVCRixVQUFVLENBQUNFLFNBQVMsS0FBS25CLE1BQU0sQ0FBQ2tCLFVBQVUsQ0FBQ0MsU0FBUyxFQUNwRDtJQUNBLE9BQU9sWixLQUFLO0VBQ2Q7RUFFQSxJQUFNbVosVUFBVSxPQUFBOVIsbUJBQUEsYUFBT3JILEtBQUssQ0FBQ3hDLE9BQU8sQ0FBQztFQUNyQzJiLFVBQVUsQ0FBQ2haLEdBQUcsQ0FBQyxDQUFDaVksUUFBUSxDQUFDelQsS0FBSyxDQUFDO0VBRS9CLE9BQUE3SyxhQUFBLENBQUFBLGFBQUEsS0FDS2tHLEtBQUs7SUFDUnhDLE9BQU8sRUFBRTJiLFVBQVU7SUFDbkIxYixXQUFXLEVBQVhBO0VBQVc7QUFFZixDQUFDO0FBRUQsU0FBUytXLGtCQUFrQkEsQ0FBQ0QsS0FBa0IsRUFBNkI7RUFDekUsT0FBT0EsS0FBSyxDQUFDL1IsSUFBSSxLQUFLLFlBQVk7QUFDcEM7QUFFQSxTQUFTNFcsZ0JBQWdCQSxDQUFDN0UsS0FBa0IsRUFBRTVQLEtBQTJCLEVBQWU7RUFDdEYsT0FBQTdLLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLEtBQ0t5YSxLQUFLLEdBQ0w1UCxLQUFLO0lBQ1IwVSxPQUFPLEVBQUF2ZixhQUFBLENBQUFBLGFBQUEsS0FDRnlhLEtBQUssQ0FBQzhFLE9BQU8sR0FDWjFVLEtBQUssQ0FBQzBVLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FDeEI7SUFDREMsWUFBWSxFQUFBeGYsYUFBQSxDQUFBQSxhQUFBLEtBQ1B5YSxLQUFLLENBQUMrRSxZQUFZLEdBQ2hCM1UsS0FBSyxDQUFpQjJVLFlBQVksSUFBSSxDQUFDLENBQUM7RUFDOUM7QUFFTDtBQUVBLFNBQVNDLGtCQUFrQkEsQ0FDekJDLElBQW1CLEVBQ25CQyxVQUF1QixFQUNSO0VBQUEsSUFBQUMsV0FBQTtFQUNmLElBQUksRUFBQ0YsSUFBSSxhQUFKQSxJQUFJLGdCQUFBRSxXQUFBLEdBQUpGLElBQUksQ0FBRXpTLEtBQUssY0FBQTJTLFdBQUEsZUFBWEEsV0FBQSxDQUFhdGdCLElBQUksS0FBSXFnQixVQUFVLENBQUN2aUIsR0FBRyxDQUFDc2lCLElBQUksQ0FBQ3pTLEtBQUssQ0FBQzNOLElBQUksQ0FBQyxFQUFFO0lBQ3pELE9BQU9vZ0IsSUFBSTtFQUNiO0VBQ0EsT0FBQTFmLGFBQUEsQ0FBQUEsYUFBQSxLQUFXMGYsSUFBSTtJQUFFelMsS0FBSyxFQUFFLElBQUk7SUFBRW5LLEtBQUssRUFBRTtFQUFJO0FBQzNDO0FBRUEsU0FBUytjLHNCQUFzQkEsQ0FDN0JwRixLQUFrQixFQUNsQnBTLE9BQWdELEVBQ25DO0VBQ2IsSUFBTXNYLFVBQVUsR0FBRyxJQUFJRyxHQUFHLENBQUMsQ0FBQyxDQUFBelgsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVzRyxNQUFNLEtBQUksRUFBRSxFQUFFckksR0FBRyxDQUFDLFVBQUEyRyxLQUFLO0lBQUEsT0FBSUEsS0FBSyxDQUFDM04sSUFBSTtFQUFBLEVBQUMsQ0FBQztFQUM1RSxJQUFNTCxJQUFJLEdBQUd3YixLQU1aO0VBQ0QsT0FBTzZFLGdCQUFnQixDQUFDN0UsS0FBSyxFQUFFO0lBQzdCc0YsS0FBSyxFQUFFTixrQkFBa0IsQ0FBQ3hnQixJQUFJLENBQUM4Z0IsS0FBSyxFQUFFSixVQUFVLENBQUM7SUFDakQvSCxLQUFLLEVBQUU2SCxrQkFBa0IsQ0FBQ3hnQixJQUFJLENBQUMyWSxLQUFLLEVBQUUrSCxVQUFVLENBQUM7SUFDakRELElBQUksRUFBRUQsa0JBQWtCLENBQUN4Z0IsSUFBSSxDQUFDeWdCLElBQUksRUFBRUMsVUFBVSxDQUFDO0lBQy9DSyxPQUFPLEVBQUVQLGtCQUFrQixDQUFDeGdCLElBQUksQ0FBQytnQixPQUFPLEVBQUVMLFVBQVUsQ0FBQztJQUNyRDdnQixLQUFLLEVBQUUyZ0Isa0JBQWtCLENBQUN4Z0IsSUFBSSxDQUFDSCxLQUFLLEVBQUU2Z0IsVUFBVTtFQUNsRCxDQUF5QixDQUFDO0FBQzVCO0FBRUEsU0FBU25GLHNCQUFzQkEsQ0FDN0J0VSxLQUFRLEVBQ1IrWixZQUE2QyxFQUMxQztFQUNILElBQU1yYyxNQUFNLEdBQUdzQyxLQUFLLENBQUN0QyxNQUFNLElBQUksRUFBRTtFQUNqQyxJQUFNc2MsT0FBTyxHQUFHdGMsTUFBTSxDQUFDaEUsTUFBTSxDQUFDcWdCLFlBQVksQ0FBQztFQUMzQyxJQUFJLENBQUNDLE9BQU8sQ0FBQ3poQixNQUFNLEVBQUU7SUFDbkIsT0FBT3lILEtBQUs7RUFDZDtFQUNBLElBQU1pYSxVQUFVLEdBQUcsSUFBSUwsR0FBRyxDQUFDSSxPQUFPLENBQUM1WixHQUFHLENBQUMsVUFBQW1VLEtBQUs7SUFBQSxPQUFJQSxLQUFLLENBQUM5WixFQUFFO0VBQUEsRUFBQyxDQUFDO0VBQzFELElBQU15ZixTQUFTLEdBQUcsSUFBSU4sR0FBRyxDQUN2QkksT0FBTyxDQUFDRyxPQUFPLENBQUMsVUFBQTVGLEtBQUssRUFBSTtJQUFBLElBQUE2RixrQkFBQTtJQUN2QixJQUFNM2YsRUFBRSxJQUFBMmYsa0JBQUEsR0FBRzdGLEtBQUssQ0FBQzhGLFdBQVcsY0FBQUQsa0JBQUEsdUJBQWpCQSxrQkFBQSxDQUFtQmhOLFFBQVE7SUFDdEMsT0FBTzNTLEVBQUUsR0FBRyxDQUFDQSxFQUFFLEtBQUEyTSxNQUFBLENBQUszTSxFQUFFLFlBQUEyTSxNQUFBLENBQVMzTSxFQUFFLFFBQUssR0FBRyxFQUFFO0VBQzdDLENBQUMsQ0FDSCxDQUFDO0VBQ0QsSUFBSThILFNBQW1CLEdBQUF6SSxhQUFBLENBQUFBLGFBQUEsS0FDbEJrRyxLQUFLO0lBQ1J0QyxNQUFNLEVBQUVBLE1BQU0sQ0FBQ2hFLE1BQU0sQ0FBQyxVQUFBNmEsS0FBSztNQUFBLE9BQUksQ0FBQzBGLFVBQVUsQ0FBQy9pQixHQUFHLENBQUNxZCxLQUFLLENBQUM5WixFQUFFLENBQUM7SUFBQTtFQUFDLEVBQzFEO0VBQ0QsSUFBSXlmLFNBQVMsQ0FBQzVlLElBQUksRUFBRTtJQUNsQmlILFNBQVMsR0FBR0EsU0FBUyxDQUFDcEYsT0FBTyxDQUFDbWQsV0FBVyxDQUFDLFVBQUMvTixJQUFJLEVBQUU3UyxNQUFNLEVBQUV5RyxHQUFHLEVBQUs7TUFDL0QsT0FBTytaLFNBQVMsQ0FBQ2hqQixHQUFHLENBQUN3QyxNQUFNLENBQUNlLEVBQUUsQ0FBQyxHQUFHMFksbUJBQW1CLENBQUM1RyxJQUFJLEVBQUU7UUFBQ3BNLEdBQUcsRUFBSEE7TUFBRyxDQUFDLENBQUMsR0FBR29NLElBQUk7SUFDM0UsQ0FBQyxFQUFFaEssU0FBUyxDQUFDO0VBQ2Y7RUFDQSxPQUFPQSxTQUFTO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNZ1ksZUFBZSxHQUFBaGdCLE9BQUEsQ0FBQWdnQixlQUFBLEdBQUcsU0FBbEJBLGVBQWVBLENBQzFCdmEsS0FBZSxFQUFBd2EsTUFBQSxFQUVGO0VBQUEsSUFBQUMscUJBQUEsRUFBQUMsY0FBQTtFQUFBLElBRFpuRyxLQUFLLEdBQUFpRyxNQUFBLENBQUxqRyxLQUFLO0VBRU4sSUFBSSxFQUFDQSxLQUFLLGFBQUxBLEtBQUssZUFBTEEsS0FBSyxDQUFFOVosRUFBRSxHQUFFO0lBQ2QsT0FBT3VGLEtBQUs7RUFDZDtFQUNBLElBQUksQ0FBQ0EsS0FBSyxDQUFDdEMsTUFBTSxJQUFJLEVBQUUsRUFBRWlHLElBQUksQ0FBQyxVQUFBZ1gsUUFBUTtJQUFBLE9BQUlBLFFBQVEsQ0FBQ2xnQixFQUFFLEtBQUs4WixLQUFLLENBQUM5WixFQUFFO0VBQUEsRUFBQyxFQUFFO0lBQ25FLE9BQU91RixLQUFLO0VBQ2Q7RUFDQSxPQUFBbEcsYUFBQSxDQUFBQSxhQUFBLEtBQ0trRyxLQUFLO0lBQ1J0QyxNQUFNLEtBQUEwSixNQUFBLEtBQUFDLG1CQUFBLGFBQ0QsQ0FBQ3JILEtBQUssQ0FBQ3RDLE1BQU0sSUFBSSxFQUFFLEVBQUUwQyxHQUFHLENBQUMsVUFBQXVhLFFBQVE7TUFBQSxPQUFBN2dCLGFBQUEsQ0FBQUEsYUFBQSxLQUMvQjZnQixRQUFRO1FBQ1h0QixPQUFPLEVBQUF2ZixhQUFBLENBQUFBLGFBQUEsS0FDRjZnQixRQUFRLENBQUN0QixPQUFPO1VBQ25CblEsY0FBYyxFQUFFO1FBQUs7TUFDdEI7SUFBQSxDQUNELENBQUMsSUFBQXBQLGFBQUEsQ0FBQUEsYUFBQSxLQUVFeWEsS0FBSztNQUNSOEUsT0FBTyxFQUFBdmYsYUFBQSxDQUFBQSxhQUFBLEtBQ0Z5YSxLQUFLLENBQUM4RSxPQUFPO1FBQ2hCblEsY0FBYyxHQUFBdVIscUJBQUEsSUFBQUMsY0FBQSxHQUFFbkcsS0FBSyxDQUFDOEUsT0FBTyxjQUFBcUIsY0FBQSx1QkFBYkEsY0FBQSxDQUFleFIsY0FBYyxjQUFBdVIscUJBQUEsY0FBQUEscUJBQUEsR0FBSTtNQUFLO0lBQ3ZEO0VBRUo7QUFFTCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNRyxrQkFBa0IsR0FBQXJnQixPQUFBLENBQUFxZ0Isa0JBQUEsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUM3QjVhLEtBQWUsRUFBQTZhLE1BQUEsRUFFRjtFQUFBLElBQUFDLGtCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGtCQUFBLEVBQUFDLGtCQUFBO0VBQUEsSUFEWnhnQixFQUFFLEdBQUFvZ0IsTUFBQSxDQUFGcGdCLEVBQUU7SUFBRWtLLEtBQUssR0FBQWtXLE1BQUEsQ0FBTGxXLEtBQUs7RUFFVixJQUFNeEUsR0FBRyxHQUFHLENBQUNILEtBQUssQ0FBQ3RDLE1BQU0sSUFBSSxFQUFFLEVBQUVnRixTQUFTLENBQUMsVUFBQTZSLEtBQUs7SUFBQSxPQUFJQSxLQUFLLENBQUM5WixFQUFFLEtBQUtBLEVBQUU7RUFBQSxFQUFDO0VBQ3BFLElBQUkwRixHQUFHLEdBQUcsQ0FBQyxFQUFFO0lBQ1gsT0FBT0gsS0FBSztFQUNkO0VBQ0EsSUFBTWUsSUFBSSxHQUFHZixLQUFLLENBQUN0QyxNQUFNLENBQUN5QyxHQUFHLENBQUM7RUFDOUIsSUFBTSthLGFBQWEsR0FBRyxPQUFPdlcsS0FBSyxDQUFDdkMsTUFBTSxLQUFLLFFBQVEsSUFBSXVDLEtBQUssQ0FBQ3ZDLE1BQU0sS0FBS3JCLElBQUksQ0FBQ3FCLE1BQU07RUFDdEYsSUFBTStZLGNBQWMsR0FDbEIzRyxrQkFBa0IsQ0FBQ3pULElBQUksQ0FBQyxJQUN4QixPQUFRNEQsS0FBSyxDQUFzQmdCLE9BQU8sS0FBSyxRQUFRLElBQ3REaEIsS0FBSyxDQUFzQmdCLE9BQU8sS0FBSzVFLElBQUksQ0FBQzRFLE9BQU87RUFDdEQsSUFBSTVNLElBQUksR0FBR3FnQixnQkFBZ0IsQ0FBQ3JZLElBQUksRUFBRTRELEtBQUssQ0FBQztFQUN4QyxJQUFJdVcsYUFBYSxJQUFJQyxjQUFjLEVBQUU7SUFBQSxJQUFBQyxpQkFBQTtJQUNuQyxJQUFNaFosTUFBTSxHQUFHckosSUFBSSxDQUFDcUosTUFBTSxJQUFJN0UsU0FBUztJQUN2Q3hFLElBQUksR0FBRzRnQixzQkFBc0IsQ0FBQzVnQixJQUFJLEVBQUVxSixNQUFNLEdBQUdwQyxLQUFLLENBQUMzQyxRQUFRLENBQUMrRSxNQUFNLENBQUMsR0FBRzdFLFNBQVMsQ0FBQztJQUNoRixLQUFBNmQsaUJBQUEsR0FBSXJpQixJQUFJLENBQUNzaEIsV0FBVyxjQUFBZSxpQkFBQSxlQUFoQkEsaUJBQUEsQ0FBa0J6Z0IsT0FBTyxFQUFFO01BQzdCNUIsSUFBSSxHQUFHcWdCLGdCQUFnQixDQUFDcmdCLElBQUksRUFBRTtRQUM1QnNoQixXQUFXLEVBQUF2Z0IsYUFBQSxDQUFBQSxhQUFBLEtBQU1mLElBQUksQ0FBQ3NoQixXQUFXO1VBQUUxZixPQUFPLEVBQUUsS0FBSztVQUFFL0IsS0FBSyxFQUFFLENBQUMsQ0FBQztVQUFFNmdCLFVBQVUsRUFBRSxDQUFDO1FBQUM7TUFDOUUsQ0FBQyxDQUFDO0lBQ0o7RUFDRjtFQUNBLElBQU0vYixNQUFNLE9BQUEySixtQkFBQSxhQUFPckgsS0FBSyxDQUFDdEMsTUFBTSxDQUFDO0VBQ2hDQSxNQUFNLENBQUN5QyxHQUFHLENBQUMsR0FBR3BILElBQUk7RUFDbEIsSUFBSXdKLFNBQW1CLEdBQUF6SSxhQUFBLENBQUFBLGFBQUEsS0FDbEJrRyxLQUFLO0lBQ1J0QyxNQUFNLEVBQU5BO0VBQU0sRUFDUDtFQUNELElBQU0wUCxRQUFRLEdBQUcsRUFBQTBOLGtCQUFBLEdBQUEvaEIsSUFBSSxDQUFDc2hCLFdBQVcsY0FBQVMsa0JBQUEsdUJBQWhCQSxrQkFBQSxDQUFrQjFOLFFBQVEsT0FBQTJOLGlCQUFBLEdBQUloYSxJQUFJLENBQUNzWixXQUFXLGNBQUFVLGlCQUFBLHVCQUFoQkEsaUJBQUEsQ0FBa0IzTixRQUFRO0VBQ3pFLElBQUksQ0FBQTROLGtCQUFBLEdBQUFqYSxJQUFJLENBQUNzWixXQUFXLGNBQUFXLGtCQUFBLGVBQWhCQSxrQkFBQSxDQUFrQnJnQixPQUFPLElBQUksR0FBQXNnQixrQkFBQSxHQUFDbGlCLElBQUksQ0FBQ3NoQixXQUFXLGNBQUFZLGtCQUFBLGVBQWhCQSxrQkFBQSxDQUFrQnRnQixPQUFPLEtBQUl5UyxRQUFRLEVBQUU7SUFDdkUsSUFBTWlPLGNBQWMsR0FBRyxJQUFJekIsR0FBRyxDQUFDLENBQUN4TSxRQUFRLEtBQUFoRyxNQUFBLENBQUtnRyxRQUFRLFlBQUFoRyxNQUFBLENBQVNnRyxRQUFRLFFBQUssQ0FBQztJQUM1RTdLLFNBQVMsR0FBR0EsU0FBUyxDQUFDcEYsT0FBTyxDQUFDbWQsV0FBVyxDQUFDLFVBQUMvTixJQUFJLEVBQUU3UyxNQUFNLEVBQUV5RyxHQUFHLEVBQUs7TUFDL0QsT0FBT2tiLGNBQWMsQ0FBQ25rQixHQUFHLENBQUN3QyxNQUFNLENBQUNlLEVBQUUsQ0FBQyxHQUFHMFksbUJBQW1CLENBQUM1RyxJQUFJLEVBQUU7UUFBQ3BNLEdBQUcsRUFBSEE7TUFBRyxDQUFDLENBQUMsR0FBR29NLElBQUk7SUFDaEYsQ0FBQyxFQUFFaEssU0FBUyxDQUFDO0VBQ2Y7RUFDQSxPQUFPQSxTQUFTO0FBQ2xCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0rWSxrQkFBa0IsR0FBQS9nQixPQUFBLENBQUErZ0Isa0JBQUEsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUM3QnRiLEtBQWUsRUFBQXViLE1BQUE7RUFBQSxJQUNkOWdCLEVBQUUsR0FBQThnQixNQUFBLENBQUY5Z0IsRUFBRTtFQUFBLE9BQ1U2WixzQkFBc0IsQ0FBQ3RVLEtBQUssRUFBRSxVQUFBdVUsS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQzlaLEVBQUUsS0FBS0EsRUFBRTtFQUFBLEVBQUM7QUFBQTs7QUFFdEU7O0FBRUEsU0FBUytnQixpQkFBaUJBLENBQUM1Z0IsTUFBK0IsRUFBYztFQUFBLElBQUE2Z0IsWUFBQSxFQUFBQyxNQUFBLEVBQUFDLGdCQUFBLEVBQUFDLE1BQUEsRUFBQUMscUJBQUEsRUFBQUMsVUFBQSxFQUFBQyxpQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxtQkFBQSxFQUFBQyxhQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGtCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLFVBQUEsRUFBQUMsV0FBQSxFQUFBQyxXQUFBLEVBQUFDLGVBQUE7RUFDdEUsSUFBTUMsSUFBSSxJQUFBcEIsWUFBQSxHQUFHN2dCLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFaWlCLElBQUksY0FBQXBCLFlBQUEsY0FBQUEsWUFBQSxHQUFJcUIsa0NBQXVCO0VBQ3BELElBQU1DLGFBQWEsR0FBRzlrQixNQUFNLENBQUNnYyxRQUFRLENBQUVyWixNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBVW9pQixLQUFLLENBQUMsR0FBSXBpQixNQUFNLENBQVNvaUIsS0FBSyxHQUFHemYsU0FBUztFQUNqRyxJQUFNMGYsZ0JBQWdCLEdBQ3BCRixhQUFhLElBQUksSUFBSSxHQUFHLElBQUFHLGlDQUFzQixFQUFDSCxhQUFhLENBQUMsR0FBR3hmLFNBQVM7RUFDM0UsSUFBTTRmLFFBQVEsSUFBQXpCLE1BQUEsSUFBQUMsZ0JBQUEsR0FDWi9nQixNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRXVpQixRQUFRLGNBQUF4QixnQkFBQSxjQUFBQSxnQkFBQSxHQUNoQnNCLGdCQUFnQixhQUFoQkEsZ0JBQWdCLHVCQUFoQkEsZ0JBQWdCLENBQUUzTyxJQUFJLGNBQUFvTixNQUFBLGNBQUFBLE1BQUEsR0FDckJtQixJQUFJLEtBQUtPLHlCQUFjLENBQUNDLElBQUksR0FBRzlmLFNBQVMsR0FBRytmLHVDQUE2QjtFQUMzRSxJQUFNQyxvQkFBb0IsSUFBQTNCLE1BQUEsSUFBQUMscUJBQUEsR0FDeEJqaEIsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUUyaUIsb0JBQW9CLGNBQUExQixxQkFBQSxjQUFBQSxxQkFBQSxHQUM1Qm9CLGdCQUFnQixhQUFoQkEsZ0JBQWdCLHVCQUFoQkEsZ0JBQWdCLENBQUVPLFFBQVEsY0FBQTVCLE1BQUEsY0FBQUEsTUFBQSxHQUN6QmlCLElBQUksS0FBS08seUJBQWMsQ0FBQ0MsSUFBSSxHQUFHOWYsU0FBUyxHQUFHa2dCLG9EQUEwQztFQUN4RixJQUFNQyxJQUFJLEdBQUE1akIsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUE7SUFDUlcsRUFBRSxHQUFBcWhCLFVBQUEsR0FBRWxoQixNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRUgsRUFBRSxjQUFBcWhCLFVBQUEsY0FBQUEsVUFBQSxHQUFJLElBQUE1RSwyQkFBYyxFQUFDLENBQUMsQ0FBQztJQUNuQzJGLElBQUksRUFBSkEsSUFBSTtJQUNKcGMsU0FBUyxHQUFBc2IsaUJBQUEsR0FBRW5oQixNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRTZGLFNBQVMsY0FBQXNiLGlCQUFBLGNBQUFBLGlCQUFBLEdBQUksSUFBSTtJQUNwQzRCLFFBQVEsR0FBQTNCLGdCQUFBLEdBQUVwaEIsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUUraUIsUUFBUSxjQUFBM0IsZ0JBQUEsY0FBQUEsZ0JBQUEsR0FBSSxJQUFJO0lBQ2xDNEIsU0FBUyxHQUFBM0IsaUJBQUEsR0FBRXJoQixNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRWdqQixTQUFTLGNBQUEzQixpQkFBQSxjQUFBQSxpQkFBQSxHQUFJLElBQUk7SUFDcEM0QixXQUFXLEdBQUEzQixtQkFBQSxHQUFFdGhCLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFaWpCLFdBQVcsY0FBQTNCLG1CQUFBLGNBQUFBLG1CQUFBLEdBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFzQjtJQUNoRXhoQixLQUFLLEdBQUF5aEIsYUFBQSxHQUFFdmhCLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFRixLQUFLLGNBQUF5aEIsYUFBQSxjQUFBQSxhQUFBLEdBQUksZ0JBQWdCO0lBQ3hDMkIsU0FBUyxHQUFBMUIsaUJBQUEsR0FBRXhoQixNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRWtqQixTQUFTLGNBQUExQixpQkFBQSxjQUFBQSxpQkFBQSxHQUFJMkIsd0NBQTZCO0lBQzdEQyxTQUFTLEdBQUEzQixpQkFBQSxHQUFFemhCLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFb2pCLFNBQVMsY0FBQTNCLGlCQUFBLGNBQUFBLGlCQUFBLEdBQUk0Qix3Q0FBNkI7SUFDN0RDLFNBQVMsR0FBQTVCLGlCQUFBLEdBQUUxaEIsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVzakIsU0FBUyxjQUFBNUIsaUJBQUEsY0FBQUEsaUJBQUEsR0FBSTZCLHdDQUE2QjtJQUM3REMsVUFBVSxHQUFBN0Isa0JBQUEsR0FBRTNoQixNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRXdqQixVQUFVLGNBQUE3QixrQkFBQSxjQUFBQSxrQkFBQSxHQUFJOEIseUNBQThCO0lBQ2hFQyxpQkFBaUIsR0FBQTlCLHFCQUFBLEdBQUU1aEIsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUUwakIsaUJBQWlCLGNBQUE5QixxQkFBQSxjQUFBQSxxQkFBQSxHQUFLO0VBQWtCLEdBQy9EVyxRQUFRLEdBQUc7SUFBQ0EsUUFBUSxFQUFSQTtFQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDMUJJLG9CQUFvQixHQUFHO0lBQUNBLG9CQUFvQixFQUFwQkE7RUFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0RDFYLFFBQVEsRUFBRWpMLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFaUw7RUFBUSxFQUMzQjtFQUVELElBQU0wWSxZQUFZLEdBQ2hCcEIsUUFBUSxJQUFJSSxvQkFBb0IsR0FDNUJpQix3Q0FBNkIsSUFBQXBYLE1BQUEsQ0FBSStWLFFBQVEsT0FBQS9WLE1BQUEsQ0FBSW1XLG9CQUFvQixFQUFHLEdBQ3BFa0IsbUNBQXdCO0VBRTlCLFFBQVE1QixJQUFJO0lBQ1YsS0FBS08seUJBQWMsQ0FBQ3NCLEtBQUs7TUFDdkIsT0FBQTVrQixhQUFBLENBQUFBLGFBQUEsS0FDSzRqQixJQUFJO1FBQ1BiLElBQUksRUFBRU8seUJBQWMsQ0FBQ3NCLEtBQUs7UUFDMUJDLFNBQVMsR0FBQWxDLFVBQUEsR0FBRzdoQixNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBVStqQixTQUFTLGNBQUFsQyxVQUFBLGNBQUFBLFVBQUEsR0FBSW1DLHdDQUE2QjtRQUN0RTVCLEtBQUssRUFBRUQsYUFBYSxhQUFiQSxhQUFhLGNBQWJBLGFBQWEsR0FBSXdCO01BQVk7SUFFeEMsS0FBS25CLHlCQUFjLENBQUN5QixLQUFLO01BQ3ZCLE9BQUEva0IsYUFBQSxDQUFBQSxhQUFBLEtBQ0s0akIsSUFBSTtRQUNQYixJQUFJLEVBQUVPLHlCQUFjLENBQUN5QixLQUFLO1FBQzFCRixTQUFTLEdBQUFqQyxXQUFBLEdBQUc5aEIsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQVUrakIsU0FBUyxjQUFBakMsV0FBQSxjQUFBQSxXQUFBLEdBQUlrQyx3Q0FBNkI7UUFDdEU1QixLQUFLLEVBQUVELGFBQWEsYUFBYkEsYUFBYSxjQUFiQSxhQUFhLEdBQUl3QjtNQUFZO0lBRXhDLEtBQUtuQix5QkFBYyxDQUFDMEIsTUFBTTtNQUN4QixPQUFBaGxCLGFBQUEsQ0FBQUEsYUFBQSxLQUNLNGpCLElBQUk7UUFDUGIsSUFBSSxFQUFFTyx5QkFBYyxDQUFDMEIsTUFBTTtRQUMzQkgsU0FBUyxHQUFBaEMsV0FBQSxHQUFHL2hCLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFVK2pCLFNBQVMsY0FBQWhDLFdBQUEsY0FBQUEsV0FBQSxHQUFJaUMsd0NBQTZCO1FBQ3RFNUIsS0FBSyxFQUFFRCxhQUFhLGFBQWJBLGFBQWEsY0FBYkEsYUFBYSxHQUFJd0IsWUFBWTtRQUNwQ1EsY0FBYyxHQUFBbkMsZUFBQSxHQUFHaGlCLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFVbWtCLGNBQWMsY0FBQW5DLGVBQUEsY0FBQUEsZUFBQSxHQUFJO01BQUk7SUFFM0QsS0FBS1EseUJBQWMsQ0FBQ0MsSUFBSTtJQUN4QjtNQUNFLE9BQUF2akIsYUFBQSxDQUFBQSxhQUFBLEtBQ0s0akIsSUFBSTtRQUNQYixJQUFJLEVBQUVPLHlCQUFjLENBQUNDO01BQUk7RUFFL0I7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTTJCLG9CQUFvQixHQUFBemtCLE9BQUEsQ0FBQXlrQixvQkFBQSxHQUFHLFNBQXZCQSxvQkFBb0JBLENBQy9CaGYsS0FBZSxFQUNmd0IsTUFBa0QsRUFDckM7RUFDYixJQUFNeWQsYUFBYSxHQUFHekQsaUJBQWlCLENBQUNoYSxNQUFNLENBQUM1RyxNQUFNLENBQUM7RUFDdEQsT0FBQWQsYUFBQSxDQUFBQSxhQUFBLEtBQ0trRyxLQUFLO0lBQ1JwQyxXQUFXLEdBQUdxaEIsYUFBYSxFQUFBN1gsTUFBQSxLQUFBQyxtQkFBQSxhQUFLckgsS0FBSyxDQUFDcEMsV0FBVyxFQUFDO0lBQ2xERSxvQkFBb0IsRUFBRW1oQixhQUFhLENBQUN4a0IsRUFBRTtJQUN0Q3NELHVCQUF1QixFQUFFO0VBQUk7QUFFakMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTW1oQix1QkFBdUIsR0FBQTNrQixPQUFBLENBQUEya0IsdUJBQUEsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUNsQ2xmLEtBQWUsRUFBQW1mLE1BQUEsRUFFRjtFQUFBLElBRFoxa0IsRUFBRSxHQUFBMGtCLE1BQUEsQ0FBRjFrQixFQUFFO0VBRUgsT0FBQVgsYUFBQSxDQUFBQSxhQUFBLEtBQ0trRyxLQUFLO0lBQ1JwQyxXQUFXLEVBQUVvQyxLQUFLLENBQUNwQyxXQUFXLENBQUNsRSxNQUFNLENBQUMsVUFBQWIsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQzRCLEVBQUUsS0FBS0EsRUFBRTtJQUFBLEVBQUM7SUFDdkRxRCxvQkFBb0IsRUFBRWtDLEtBQUssQ0FBQ2xDLG9CQUFvQixLQUFLckQsRUFBRSxHQUFHLElBQUksR0FBR3VGLEtBQUssQ0FBQ2xDLG9CQUFvQjtJQUMzRkMsdUJBQXVCLEVBQ3JCaUMsS0FBSyxDQUFDbEMsb0JBQW9CLEtBQUtyRCxFQUFFLEdBQUcsS0FBSyxHQUFHdUYsS0FBSyxDQUFDakM7RUFBdUI7QUFFL0UsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXFoQix1QkFBdUIsR0FBQTdrQixPQUFBLENBQUE2a0IsdUJBQUEsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUNsQ3BmLEtBQWUsRUFBQXFmLE1BQUEsRUFFRjtFQUFBLElBRFo1a0IsRUFBRSxHQUFBNGtCLE1BQUEsQ0FBRjVrQixFQUFFO0lBQUVHLE1BQU0sR0FBQXlrQixNQUFBLENBQU56a0IsTUFBTTtFQUVYLElBQU11RixHQUFHLEdBQUdILEtBQUssQ0FBQ3BDLFdBQVcsQ0FBQzhFLFNBQVMsQ0FBQyxVQUFBN0osQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQzRCLEVBQUUsS0FBS0EsRUFBRTtFQUFBLEVBQUM7RUFDekQsSUFBSTBGLEdBQUcsR0FBRyxDQUFDLEVBQUU7SUFDWHVKLGVBQU8sQ0FBQ2lLLElBQUksOENBQUF2TSxNQUFBLENBQThDM00sRUFBRSxDQUFFLENBQUM7SUFDL0QsT0FBT3VGLEtBQUs7RUFDZDtFQUNBLElBQU1lLElBQUksR0FBR2YsS0FBSyxDQUFDcEMsV0FBVyxDQUFDdUMsR0FBRyxDQUFDO0VBQ25DLElBQUltZixjQUEwQjtFQUU5QixJQUFJMWtCLE1BQU0sQ0FBQ2lpQixJQUFJLElBQUlqaUIsTUFBTSxDQUFDaWlCLElBQUksS0FBSzliLElBQUksQ0FBQzhiLElBQUksRUFBRTtJQUM1Q3lDLGNBQWMsR0FBRzlELGlCQUFpQixDQUFBMWhCLGFBQUEsQ0FBQUEsYUFBQSxLQUFLaUgsSUFBSSxHQUFLbkcsTUFBTSxDQUEyQixDQUFDO0VBQ3BGLENBQUMsTUFBTTtJQUNMMGtCLGNBQWMsR0FBQXhsQixhQUFBLENBQUFBLGFBQUEsS0FBT2lILElBQUksR0FBS25HLE1BQU0sQ0FBZTtFQUNyRDtFQUVBLElBQU0ya0IsY0FBYyxPQUFBbFksbUJBQUEsYUFBT3JILEtBQUssQ0FBQ3BDLFdBQVcsQ0FBQztFQUM3QzJoQixjQUFjLENBQUNwZixHQUFHLENBQUMsR0FBR21mLGNBQWM7RUFDcEMsT0FBQXhsQixhQUFBLENBQUFBLGFBQUEsS0FDS2tHLEtBQUs7SUFDUnBDLFdBQVcsRUFBRTJoQjtFQUFjO0FBRS9CLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLDBCQUEwQixHQUFBamxCLE9BQUEsQ0FBQWlsQiwwQkFBQSxHQUFHLFNBQTdCQSwwQkFBMEJBLENBQ3JDeGYsS0FBZSxFQUFBeWYsTUFBQSxFQUVGO0VBQUEsSUFEWmhsQixFQUFFLEdBQUFnbEIsTUFBQSxDQUFGaGxCLEVBQUU7RUFFSCxJQUFNb2MsUUFBUSxHQUFHN1csS0FBSyxDQUFDcEMsV0FBVyxDQUFDcUUsSUFBSSxDQUFDLFVBQUFwSixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDNEIsRUFBRSxLQUFLQSxFQUFFO0VBQUEsRUFBQztFQUN6RCxJQUFJLENBQUNvYyxRQUFRLEVBQUU7SUFDYm5OLGVBQU8sQ0FBQ2lLLElBQUksaURBQUF2TSxNQUFBLENBQWlEM00sRUFBRSxDQUFFLENBQUM7SUFDbEUsT0FBT3VGLEtBQUs7RUFDZDtFQUNBLElBQU1pZixhQUFhLEdBQUFubEIsYUFBQSxDQUFBQSxhQUFBLEtBQ2QsSUFBQTRsQixxQkFBUyxFQUFDN0ksUUFBUSxDQUFDO0lBQ3RCcGMsRUFBRSxFQUFFLElBQUF5YywyQkFBYyxFQUFDLENBQUMsQ0FBQztJQUNyQnhjLEtBQUssYUFBQTBNLE1BQUEsQ0FBYXlQLFFBQVEsQ0FBQ25jLEtBQUs7RUFBRSxFQUNuQztFQUNELE9BQUFaLGFBQUEsQ0FBQUEsYUFBQSxLQUNLa0csS0FBSztJQUNScEMsV0FBVyxHQUFHcWhCLGFBQWEsRUFBQTdYLE1BQUEsS0FBQUMsbUJBQUEsYUFBS3JILEtBQUssQ0FBQ3BDLFdBQVcsRUFBQztJQUNsREUsb0JBQW9CLEVBQUVtaEIsYUFBYSxDQUFDeGtCLEVBQUU7SUFDdENzRCx1QkFBdUIsRUFBRTtFQUFLO0FBRWxDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU00aEIsNEJBQTRCLEdBQUFwbEIsT0FBQSxDQUFBb2xCLDRCQUFBLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FDdkMzZixLQUFlLEVBQUE0ZixNQUFBLEVBRUY7RUFBQSxJQURabmxCLEVBQUUsR0FBQW1sQixNQUFBLENBQUZubEIsRUFBRTtJQUFFb2xCLGFBQWEsR0FBQUQsTUFBQSxDQUFiQyxhQUFhO0VBRWxCLElBQ0VwbEIsRUFBRSxLQUFLdUYsS0FBSyxDQUFDbEMsb0JBQW9CLElBQ2pDLENBQUMraEIsYUFBYSxhQUFiQSxhQUFhLGNBQWJBLGFBQWEsR0FBSSxLQUFLLE1BQU03ZixLQUFLLENBQUNqQyx1QkFBdUIsRUFDMUQ7SUFDQSxPQUFPaUMsS0FBSztFQUNkO0VBQ0EsT0FBQWxHLGFBQUEsQ0FBQUEsYUFBQSxLQUNLa0csS0FBSztJQUNSbEMsb0JBQW9CLEVBQUVyRCxFQUFFO0lBQ3hCc0QsdUJBQXVCLEVBQUU4aEIsYUFBYSxhQUFiQSxhQUFhLGNBQWJBLGFBQWEsR0FBSTtFQUFLO0FBRW5ELENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLG9CQUFvQkEsQ0FDbEM5ZixLQUFRLEVBQ1J3QixNQUFrRCxFQUMvQztFQUNIO0VBQ0EsSUFBZXVlLFVBQVUsR0FBSXZlLE1BQU0sQ0FBNUJZLE1BQU07RUFDYixJQUFPL0UsUUFBUSxHQUFJMkMsS0FBSyxDQUFqQjNDLFFBQVE7O0VBRWY7RUFDQSxJQUFJLENBQUNBLFFBQVEsQ0FBQzBpQixVQUFVLENBQUMsRUFBRTtJQUN6QixPQUFPL2YsS0FBSztFQUNkO0VBRUEsSUFDRWxELE1BQU0sR0FHSmtELEtBQUssQ0FIUGxELE1BQU07SUFBQWtqQixlQUFBLEdBR0poZ0IsS0FBSyxDQURQM0MsUUFBUTtJQUFpQjhFLE9BQU8sR0FBQTZkLGVBQUEsQ0FBcEJELFVBQVU7SUFBZUUsV0FBVyxPQUFBbGIseUJBQUEsYUFBQWliLGVBQUEsR0FBcENELFVBQVUsRUFBQTNmLEdBQUEsQ0FBQXpJLGNBQUE7RUFHeEIsSUFBTXVvQixjQUFjLEdBQUdwakIsTUFBTSxDQUFDcEQsTUFBTSxDQUFDLFVBQUF3SSxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDdEgsTUFBTSxDQUFDd0gsTUFBTSxLQUFLMmQsVUFBVTtFQUFBLEVBQUMsQ0FBQzNmLEdBQUcsQ0FBQyxVQUFBOEIsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3pILEVBQUU7RUFBQSxFQUFDOztFQUV4RjtFQUNBLElBQUkrRixRQUFRLEdBQUcwZixjQUFjLENBQUM1VCxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFOVIsRUFBRTtJQUFBLE9BQUtzWixrQkFBa0IsQ0FBQ3hILElBQUksRUFBRTtNQUFDOVIsRUFBRSxFQUFGQTtJQUFFLENBQUMsQ0FBQztFQUFBLEdBQUFYLGFBQUEsQ0FBQUEsYUFBQSxLQUM1RWtHLEtBQUs7SUFDUjNDLFFBQVEsRUFBRTRpQjtFQUFXLEVBQ3RCLENBQUM7O0VBRUY7RUFDQSxJQUFNOWlCLE9BQWlCLEdBQUcsRUFBRTtFQUFDLElBQUFnakIsVUFBQSxHQUFBam9CLDBCQUFBLENBQ1JzSSxRQUFRLENBQUNyRCxPQUFPO0lBQUFpakIsTUFBQTtFQUFBO0lBQXJDLEtBQUFELFVBQUEsQ0FBQXpuQixDQUFBLE1BQUEwbkIsTUFBQSxHQUFBRCxVQUFBLENBQUF4cEIsQ0FBQSxJQUFBZ0MsSUFBQSxHQUF1QztNQUFBLElBQTVCZSxNQUFNLEdBQUEwbUIsTUFBQSxDQUFBeG5CLEtBQUE7TUFDZixJQUFNK1UsVUFBVSxHQUFHalUsTUFBTSxDQUFDMEksTUFBTSxDQUFDaWUsT0FBTyxDQUFDTixVQUFVLENBQUM7TUFDcEQsSUFBSXBTLFVBQVUsSUFBSSxDQUFDLElBQUlqVSxNQUFNLENBQUMwSSxNQUFNLENBQUM3SixNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQy9DO1FBQ0E0RSxPQUFPLENBQUN2RCxJQUFJLENBQUNxViwrQkFBK0IsQ0FBQ3ZWLE1BQU0sRUFBRWlVLFVBQVUsRUFBRXRRLFFBQVEsQ0FBQyxDQUFDO01BQzdFLENBQUMsTUFBTSxJQUFJc1EsVUFBVSxHQUFHLENBQUMsRUFBRTtRQUN6QjtRQUNBeFEsT0FBTyxDQUFDdkQsSUFBSSxDQUFDRixNQUFNLENBQUM7TUFDdEI7SUFDRjtFQUFDLFNBQUF1SyxHQUFBO0lBQUFrYyxVQUFBLENBQUE1cEIsQ0FBQSxDQUFBME4sR0FBQTtFQUFBO0lBQUFrYyxVQUFBLENBQUFwcEIsQ0FBQTtFQUFBO0VBRUR5SixRQUFRLEdBQUExRyxhQUFBLENBQUFBLGFBQUEsS0FBTzBHLFFBQVE7SUFBRXJELE9BQU8sRUFBUEE7RUFBTyxFQUFDO0VBRWpDLE9BQU9tWCxzQkFBc0IsQ0FDM0JnTSxrQ0FBa0MsQ0FBQzlmLFFBQVEsRUFBRTtJQUFDNEIsTUFBTSxFQUFFMmQ7RUFBVSxDQUFDLENBQUMsRUFDbEUsVUFBQXhMLEtBQUssRUFBSTtJQUNQLElBQUlBLEtBQUssQ0FBQ25TLE1BQU0sS0FBSzJkLFVBQVUsRUFBRTtNQUMvQixPQUFPLElBQUk7SUFDYjtJQUNBLElBQUl2TCxrQkFBa0IsQ0FBQ0QsS0FBSyxDQUFDLEVBQUU7TUFDN0IsT0FBTzJMLGNBQWMsQ0FBQ2paLFFBQVEsQ0FBQ3NOLEtBQUssQ0FBQzVPLE9BQU8sQ0FBQztJQUMvQztJQUNBLE9BQU8sS0FBSztFQUNkLENBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBUzJhLGtDQUFrQ0EsQ0FBQ3RnQixLQUFLLEVBQUF1Z0IsTUFBQSxFQUFZO0VBQUEsSUFBVG5lLE1BQU0sR0FBQW1lLE1BQUEsQ0FBTm5lLE1BQU07RUFDeEQsSUFBS3BFLGlCQUFpQixHQUFJZ0MsS0FBSyxDQUExQmhDLGlCQUFpQjtFQUN0QixJQUFBd2lCLGtCQUFBLEdBQWtCeGlCLGlCQUFpQjtJQUE1QnhELE9BQU8sR0FBQWdtQixrQkFBQSxDQUFQaG1CLE9BQU87RUFDZCxJQUFJQSxPQUFPLEVBQUU7SUFDWCxJQUFPSSxNQUFNLEdBQUlKLE9BQU8sQ0FBakJJLE1BQU07SUFDYjtJQUNBLElBQUE2bEIsb0JBQUEsR0FBNEM3bEIsTUFBTSxDQUFDQyxZQUFZO01BQTlDNE4sTUFBTSxHQUFBZ1ksb0JBQUEsQ0FBZnJlLE1BQU07TUFBY3ZILFlBQVksT0FBQWtLLHlCQUFBLGFBQUEwYixvQkFBQSxHQUFoQ3JlLE1BQU0sRUFBQWhDLEdBQUEsQ0FBQXpJLGNBQUE7SUFDZHFHLGlCQUFpQixHQUFBbEUsYUFBQSxDQUFBQSxhQUFBLEtBQ1prRSxpQkFBaUI7TUFDcEJ4RCxPQUFPLEVBQUFWLGFBQUEsQ0FBQUEsYUFBQSxLQUFNVSxPQUFPO1FBQUVJLE1BQU0sRUFBQWQsYUFBQSxDQUFBQSxhQUFBLEtBQU1jLE1BQU07VUFBRUMsWUFBWSxFQUFaQTtRQUFZO01BQUM7SUFBQyxFQUN6RDtFQUNIO0VBRUEsT0FBQWYsYUFBQSxDQUFBQSxhQUFBLEtBQVdrRyxLQUFLO0lBQUVoQyxpQkFBaUIsRUFBakJBO0VBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0waUIsMEJBQTBCLEdBQUFubUIsT0FBQSxDQUFBbW1CLDBCQUFBLEdBQUcsU0FBN0JBLDBCQUEwQkEsQ0FDckMxZ0IsS0FBZSxFQUNmd0IsTUFBd0Q7RUFBQSxPQUFBMUgsYUFBQSxDQUFBQSxhQUFBLEtBRXJEa0csS0FBSztJQUNSOUIsYUFBYSxFQUFFc0QsTUFBTSxDQUFDcEY7RUFBSTtBQUFBLENBQzFCOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNdWtCLDRCQUE0QixHQUFBcG1CLE9BQUEsQ0FBQW9tQiw0QkFBQSxHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDM2dCLEtBQWUsRUFDZndCLE1BQTBEO0VBQUEsT0FBQTFILGFBQUEsQ0FBQUEsYUFBQSxLQUV2RGtHLEtBQUs7SUFDUjdCLGVBQWUsRUFBRXFELE1BQU0sQ0FBQ3BGO0VBQUk7QUFBQSxDQUM1Qjs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXdrQix1QkFBdUIsR0FBQXJtQixPQUFBLENBQUFxbUIsdUJBQUEsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUNsQzVnQixLQUFlLEVBQ2Z3QixNQUFxRCxFQUN4QztFQUNiLE9BQUExSCxhQUFBLENBQUFBLGFBQUEsS0FDS2tHLEtBQUs7SUFDUjFDLGNBQWMsRUFBRWtFLE1BQU0sQ0FBQ1k7RUFBTTtBQUVqQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNeWUsdUJBQXVCLEdBQUF0bUIsT0FBQSxDQUFBc21CLHVCQUFBLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbEM3Z0IsS0FBZSxFQUNmd0IsTUFBaUQsRUFDcEM7RUFDYixPQUFPc2YseUJBQXlCLENBQUM5Z0IsS0FBSyxFQUFFO0lBQUNvQyxNQUFNLEVBQUVaLE1BQU0sQ0FBQ1ksTUFBTTtJQUFFdUMsS0FBSyxFQUFFO01BQUNzRyxLQUFLLEVBQUV6SixNQUFNLENBQUN1ZjtJQUFRO0VBQUMsQ0FBQyxDQUFDO0FBQ25HLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLHFCQUFxQixHQUFBem1CLE9BQUEsQ0FBQXltQixxQkFBQSxHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUloaEIsS0FBZTtFQUFBLE9BQUFsRyxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNoRDRDLGlCQUFpQixHQUNqQnNELEtBQUssQ0FBQ2loQixZQUFZO0lBQ3JCQSxZQUFZLEVBQUVqaEIsS0FBSyxDQUFDaWhCO0VBQVk7QUFBQSxDQUNoQzs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsdUJBQXVCLEdBQUEzbUIsT0FBQSxDQUFBMm1CLHVCQUFBLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbENsaEIsS0FBZSxFQUFBbWhCLE1BQUEsRUFPRjtFQUFBLElBQUFDLGNBQUEsR0FBQUQsTUFBQSxDQUxYRSxPQUFPO0lBQUFDLHFCQUFBLEdBQUFGLGNBQUEsQ0FBR3htQixNQUFNO0lBQU5BLE1BQU0sR0FBQTBtQixxQkFBQSxjQUFHLENBQUMsQ0FBQyxHQUFBQSxxQkFBQTtJQUFBQyxxQkFBQSxHQUFBSCxjQUFBLENBQUU3TCxPQUFPO0lBQVBBLE9BQU8sR0FBQWdNLHFCQUFBLGNBQUcsQ0FBQyxDQUFDLEdBQUFBLHFCQUFBO0VBTXJDLElBQUksQ0FBQzNtQixNQUFNLENBQUM0bUIsUUFBUSxFQUFFO0lBQ3BCLE9BQU94aEIsS0FBSztFQUNkO0VBRUEsSUFBT3loQixrQkFBa0IsR0FBSWxNLE9BQU8sQ0FBN0JrTSxrQkFBa0I7O0VBRXpCO0VBQ0EsSUFBSUMsV0FBVyxHQUFHLENBQUNELGtCQUFrQixHQUFHVCxxQkFBcUIsQ0FBQ2hoQixLQUFLLENBQUMsR0FBR0EsS0FBSztFQUFDLElBQUEyaEIsVUFBQSxHQUFBenBCLDBCQUFBLENBQ3hEOEgsS0FBSyxDQUFDWCxPQUFPO0lBQUF1aUIsTUFBQTtFQUFBO0lBQWxDLEtBQUFELFVBQUEsQ0FBQWpwQixDQUFBLE1BQUFrcEIsTUFBQSxHQUFBRCxVQUFBLENBQUFockIsQ0FBQSxJQUFBZ0MsSUFBQSxHQUFvQztNQUFBLElBQXpCa3BCLE1BQU0sR0FBQUQsTUFBQSxDQUFBaHBCLEtBQUE7TUFDZixJQUFJLElBQUFrcEIsNEJBQWEsRUFBQ0QsTUFBTSxDQUFDLElBQUksSUFBQUUsOEJBQWUsRUFBQ25uQixNQUFNLENBQUM0bUIsUUFBUSxFQUFFSyxNQUFNLENBQUNuZSxJQUFJLENBQUMsRUFBRTtRQUMxRWdlLFdBQVcsR0FBR0csTUFBTSxDQUFDRyxLQUFLLENBQ3hCTixXQUFXLEVBQ1gsSUFBQU8sbUNBQW9CLEVBQUNybkIsTUFBTSxDQUFDNG1CLFFBQVEsRUFBRUssTUFBTSxDQUFDbmUsSUFBSSxFQUFFbWUsTUFBTSxDQUFDSyxXQUFXLENBQUM7UUFDdEU7UUFDQSxJQUNGLENBQUM7TUFDSDtJQUNGO0VBQUMsU0FBQWplLEdBQUE7SUFBQTBkLFVBQUEsQ0FBQXByQixDQUFBLENBQUEwTixHQUFBO0VBQUE7SUFBQTBkLFVBQUEsQ0FBQTVxQixDQUFBO0VBQUE7RUFFRCxPQUFPMnFCLFdBQVc7QUFDcEIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTVMsaUJBQWlCLEdBQUE1bkIsT0FBQSxDQUFBNG5CLGlCQUFBLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FDNUJuaUIsS0FBZSxFQUNmd0IsTUFBaUQ7RUFBQSxPQUFBMUgsYUFBQSxDQUFBQSxhQUFBLEtBRTlDa0csS0FBSztJQUNSNUIsU0FBUyxFQUFBdEUsYUFBQSxDQUFBQSxhQUFBLEtBRUowSCxNQUFNLENBQUM0Z0IsSUFBSSxHQUNWbnFCLE1BQU0sQ0FBQ2djLFFBQVEsQ0FBQ3pTLE1BQU0sQ0FBQ3FFLFFBQVEsQ0FBQyxHQUFHO01BQUNBLFFBQVEsRUFBRXJFLE1BQU0sQ0FBQ3FFO0lBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4RTtBQUFBLENBQ0Q7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVN3Yyw4QkFBOEJBLENBQzVDcmlCLEtBQWUsRUFDZndCLE1BQTRELEVBQ2xEO0VBQ1YsSUFBTzVHLE1BQU0sR0FBSTRHLE1BQU0sQ0FBaEI1RyxNQUFNO0VBRWIsSUFBTW9ELGlCQUFpQixHQUFBbEUsYUFBQSxDQUFBQSxhQUFBLEtBQ2xCa0csS0FBSyxDQUFDaEMsaUJBQWlCLE9BQUEvRCxnQkFBQSxpQkFDckJXLE1BQU0sQ0FBQ0gsRUFBRSxFQUFHRyxNQUFNLEVBQ3hCOztFQUVEO0VBQ0E7RUFDQSxJQUFNMG5CLFVBQVUsR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUM7RUFFdkMsSUFDRUEsVUFBVSxDQUFDcmIsUUFBUSxDQUFDck0sTUFBTSxDQUFDSCxFQUFFLENBQUMsSUFDOUJHLE1BQU0sQ0FBQ0QsT0FBTyxJQUNkLENBQUNxRixLQUFLLENBQUNoQyxpQkFBaUIsQ0FBQ3BELE1BQU0sQ0FBQ0gsRUFBRSxDQUFDLENBQUNFLE9BQU8sRUFDM0M7SUFDQTtJQUNBMm5CLFVBQVUsQ0FBQ3RvQixPQUFPLENBQUMsVUFBQXVvQixDQUFDLEVBQUk7TUFDdEIsSUFBSUEsQ0FBQyxLQUFLM25CLE1BQU0sQ0FBQ0gsRUFBRSxFQUFFO1FBQ25CdUQsaUJBQWlCLENBQUN1a0IsQ0FBQyxDQUFDLEdBQUF6b0IsYUFBQSxDQUFBQSxhQUFBLEtBQU9rRSxpQkFBaUIsQ0FBQ3VrQixDQUFDLENBQUM7VUFBRTVuQixPQUFPLEVBQUU7UUFBSyxFQUFDO01BQ2xFO0lBQ0YsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxJQUFNNkYsUUFBUSxHQUFBMUcsYUFBQSxDQUFBQSxhQUFBLEtBQ1RrRyxLQUFLO0lBQ1JoQyxpQkFBaUIsRUFBakJBO0VBQWlCLEVBQ2xCO0VBRUQsSUFBSXBELE1BQU0sQ0FBQ0gsRUFBRSxLQUFLLFVBQVUsSUFBSSxDQUFDRyxNQUFNLENBQUNELE9BQU8sRUFBRTtJQUMvQyxPQUFPbWxCLG9CQUFvQixDQUFDdGYsUUFBUSxFQUFFO01BQUM0QixNQUFNLEVBQUU7SUFBa0IsQ0FBQyxDQUFDO0VBQ3JFO0VBRUEsT0FBTzVCLFFBQVE7QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1naUIsaUJBQWlCLEdBQUFqb0IsT0FBQSxDQUFBaW9CLGlCQUFBLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FDNUJ4aUIsS0FBZSxFQUNmd0IsTUFBaUQ7RUFBQSxPQUFBMUgsYUFBQSxDQUFBQSxhQUFBLEtBRTlDa0csS0FBSztJQUNSMUIsUUFBUSxFQUFFMEIsS0FBSyxDQUFDaEMsaUJBQWlCLENBQUN6QyxVQUFVLENBQUNaLE9BQU8sR0FBQWIsYUFBQSxDQUFBQSxhQUFBLEtBRTNDa0csS0FBSyxDQUFDMUIsUUFBUTtNQUNqQm1rQixNQUFNLEVBQUV6aUIsS0FBSyxDQUFDMUIsUUFBUSxDQUFDbWtCLE1BQU0sR0FBRyxJQUFJLEdBQUcsSUFBQS9DLHFCQUFTLEVBQUMxZixLQUFLLENBQUMxQixRQUFRO0lBQUMsS0FFbEUwQixLQUFLLENBQUMxQixRQUFRO0lBQ2xCRCxPQUFPLEVBQUVtRCxNQUFNLENBQUM0Z0IsSUFBSSxJQUFJNWdCLE1BQU0sQ0FBQzRnQixJQUFJLENBQUNNLE1BQU0sR0FBR2xoQixNQUFNLENBQUM0Z0IsSUFBSSxHQUFHO0VBQUk7QUFBQSxDQUMvRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTU8sZUFBZSxHQUFBcG9CLE9BQUEsQ0FBQW9vQixlQUFBLEdBQUcsU0FBbEJBLGVBQWVBLENBQzFCM2lCLEtBQWUsRUFFZndCLE1BQStDLEVBQ2xDO0VBQ2IsT0FBQTFILGFBQUEsQ0FBQUEsYUFBQSxLQUNLa0csS0FBSztJQUNSM0IsT0FBTyxFQUFFO0VBQUk7QUFFakIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXVrQixnQkFBZ0IsR0FBQXJvQixPQUFBLENBQUFxb0IsZ0JBQUEsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUMzQjVpQixLQUFlLEVBQUE2aUIsTUFBQSxFQUVGO0VBQUEsSUFEWkMsR0FBRyxHQUFBRCxNQUFBLENBQUhDLEdBQUc7RUFFSixJQUFJdHJCLE1BQU0sQ0FBQ21SLE1BQU0sQ0FBQzNJLEtBQUssQ0FBQ2hDLGlCQUFpQixDQUFDLENBQUMyRixJQUFJLENBQUMsVUFBQS9JLE1BQU07SUFBQSxPQUFJQSxNQUFNLENBQUNELE9BQU87RUFBQSxFQUFDLEVBQUU7SUFDekUsT0FBQWIsYUFBQSxDQUFBQSxhQUFBLEtBQ0trRyxLQUFLO01BQ1IxQixRQUFRLEVBQUF4RSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNIa0csS0FBSyxDQUFDMUIsUUFBUSxHQUNibEcsS0FBSyxDQUFDQyxPQUFPLENBQUN5cUIsR0FBRyxDQUFDQyxLQUFLLENBQUMsR0FBRztRQUFDQyxhQUFhLE1BQUEzYixtQkFBQSxhQUFNeWIsR0FBRyxDQUFDQyxLQUFLO01BQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUMvRDNxQixLQUFLLENBQUNDLE9BQU8sQ0FBQ3lxQixHQUFHLENBQUNHLE1BQU0sQ0FBQyxHQUFHO1FBQUMxbkIsVUFBVSxNQUFBOEwsbUJBQUEsYUFBTXliLEdBQUcsQ0FBQ0csTUFBTTtNQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkU7RUFFTDtFQUVBLE9BQU9qakIsS0FBSztBQUNkLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWtqQixxQkFBcUIsR0FBQTNvQixPQUFBLENBQUEyb0IscUJBQUEsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUNoQ2xqQixLQUFlLEVBQ2Z3QixNQUFtRDtFQUFBLE9BRW5EeEIsS0FBSyxDQUFDdkIsU0FBUyxJQUFJdUIsS0FBSyxDQUFDdkIsU0FBUyxDQUFDbEcsTUFBTSxLQUFLLENBQUMsR0FBQXVCLGFBQUEsQ0FBQUEsYUFBQSxLQUV0Q2tHLEtBQUs7SUFDUjtJQUNBO0lBQ0F2QixTQUFTLEVBQUUsSUFBQTBrQiw0QkFBcUIsRUFBQ25qQixLQUFLLENBQUNsRCxNQUFNLEVBQUU7TUFBQ3NtQixTQUFTLEVBQUU7SUFBSyxDQUFDO0VBQUMsS0FFcEVDLHVCQUF1QixDQUFDcmpCLEtBQUssRUFBRXdCLE1BQU0sQ0FBQztBQUFBOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXVFLHdCQUF3QixHQUFBeEwsT0FBQSxDQUFBd0wsd0JBQUEsR0FBRyxTQUEzQkEsd0JBQXdCQSxDQUNuQy9GLEtBQWUsRUFBQXNqQixNQUFBLEVBRUY7RUFBQSxJQURaemQsUUFBUSxHQUFBeWQsTUFBQSxDQUFSemQsUUFBUTtJQUFFRixPQUFPLEdBQUEyZCxNQUFBLENBQVAzZCxPQUFPO0VBRWxCLElBQU9sSCxTQUFTLEdBQUl1QixLQUFLLENBQWxCdkIsU0FBUztFQUVoQixPQUFBM0UsYUFBQSxDQUFBQSxhQUFBLEtBQ0trRyxLQUFLO0lBQ1J2QixTQUFTLEVBQUVBLFNBQVMsQ0FBQzJCLEdBQUcsQ0FBQyxVQUFDMEYsRUFBRSxFQUFFaFAsQ0FBQztNQUFBLE9BQzdCQSxDQUFDLEtBQUsrTyxRQUFRLEdBQUEvTCxhQUFBLENBQUFBLGFBQUEsS0FFTDJFLFNBQVMsQ0FBQzNILENBQUMsQ0FBQztRQUNmZ0csTUFBTSxFQUFBaEQsYUFBQSxDQUFBQSxhQUFBLEtBQ0QyRSxTQUFTLENBQUMzSCxDQUFDLENBQUMsQ0FBQ2dHLE1BQU0sV0FBQTdDLGdCQUFBLGlCQUVyQjBMLE9BQU8sRUFBRyxDQUFDbEgsU0FBUyxDQUFDM0gsQ0FBQyxDQUFDLENBQUNnRyxNQUFNLENBQUM2SSxPQUFPLENBQUM7TUFDekMsS0FFSEcsRUFBRTtJQUFBLENBQ1I7RUFBQztBQUVMLENBQUM7QUFFRCxTQUFTeWQscUJBQXFCQSxDQUFDQyxJQUFrQyxFQUFXO0VBQUEsSUFBQUMsVUFBQSxFQUFBQyxVQUFBO0VBQzFFLE9BQU9oYyxPQUFPLENBQ1osQ0FBQThiLElBQUksYUFBSkEsSUFBSSxnQkFBQUMsVUFBQSxHQUFKRCxJQUFJLENBQUVHLElBQUksY0FBQUYsVUFBQSx1QkFBVkEsVUFBQSxDQUFZbHJCLE1BQU0sTUFBSWlyQixJQUFJLGFBQUpBLElBQUksZ0JBQUFFLFVBQUEsR0FBSkYsSUFBSSxDQUFFSSxJQUFJLGNBQUFGLFVBQUEsdUJBQVZBLFVBQUEsQ0FBWW5yQixNQUFNLE1BQUtpckIsSUFBSSxhQUFKQSxJQUFJLHVCQUFKQSxJQUFJLENBQTZCSyxVQUFVLENBQzFGLENBQUM7QUFDSDtBQUVBLFNBQVNDLDRCQUE0QkEsQ0FBQzNoQixPQUFxQixFQUFXO0VBQUEsSUFBQTRoQixhQUFBLEVBQUFDLGlCQUFBO0VBQ3BFLE9BQ0UsRUFBQUQsYUFBQSxHQUFBNWhCLE9BQU8sQ0FBQ2lnQixJQUFJLGNBQUEyQixhQUFBLHVCQUFaQSxhQUFBLENBQWN2aEIsSUFBSSxNQUFLeWhCLHNCQUFXLENBQUNDLGlCQUFpQixJQUNwRCxTQUFBRixpQkFBQSxHQUFPN2hCLE9BQU8sQ0FBQ2dpQixRQUFRLGNBQUFILGlCQUFBLHVCQUFoQkEsaUJBQUEsQ0FBa0JJLE1BQU0sTUFBSyxRQUFRLElBQzVDLENBQUNiLHFCQUFxQixDQUFDcGhCLE9BQU8sQ0FBQ3FoQixJQUFJLENBQUM7QUFFeEM7QUFBQyxTQUVjYSxtQ0FBbUNBLENBQUFDLEVBQUE7RUFBQSxPQUFBQyxvQ0FBQSxDQUFBMXFCLEtBQUEsT0FBQUUsU0FBQTtBQUFBO0FBQUEsU0FBQXdxQixxQ0FBQTtFQUFBQSxvQ0FBQSxPQUFBQyxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQWxELFNBQUFDLFNBQW1EeGlCLE9BQXFCO0lBQUEsSUFBQXlpQixrQkFBQSxFQUFBQyxrQkFBQTtJQUFBLElBQUFDLE1BQUEsRUFBQUMsa0JBQUE7SUFBQSxPQUFBTixZQUFBLFlBQUFPLElBQUEsVUFBQUMsVUFBQUMsU0FBQTtNQUFBLGtCQUFBQSxTQUFBLENBQUFua0IsSUFBQSxHQUFBbWtCLFNBQUEsQ0FBQW5zQixJQUFBO1FBQUE7VUFBQSxJQUNqRStxQiw0QkFBNEIsQ0FBQzNoQixPQUFPLENBQUM7WUFBQStpQixTQUFBLENBQUFuc0IsSUFBQTtZQUFBO1VBQUE7VUFBQSxPQUFBbXNCLFNBQUEsQ0FBQUMsTUFBQSxXQUNqQ2hqQixPQUFPO1FBQUE7VUFBQStpQixTQUFBLENBQUFuc0IsSUFBQTtVQUFBLE9BRUssSUFBQXFzQix1Q0FBMkIsRUFBQztZQUMvQ2hCLE1BQU0sR0FBQVEsa0JBQUEsR0FBRXppQixPQUFPLENBQUNnaUIsUUFBUSxjQUFBUyxrQkFBQSx1QkFBaEJBLGtCQUFBLENBQWtCUixNQUFnQjtZQUMxQ2lCLE1BQU0sRUFBRSxJQUFBQyxnQ0FBcUIsRUFBQ25qQixPQUFPLENBQUNnaUIsUUFBUSxDQUFDO1lBQy9DN29CLElBQUksRUFBRSxTQUFBdXBCLGtCQUFBLEdBQU8xaUIsT0FBTyxDQUFDZ2lCLFFBQVEsY0FBQVUsa0JBQUEsdUJBQWhCQSxrQkFBQSxDQUFrQnZwQixJQUFJLE1BQUssUUFBUSxHQUFHNkcsT0FBTyxDQUFDZ2lCLFFBQVEsQ0FBQzdvQixJQUFJLEdBQUdpQyxTQUFTO1lBQ3BGZ29CLFdBQVcsRUFBRSxJQUFBQyxzQ0FBMkIsRUFBQ3JqQixPQUFPLENBQUNnaUIsUUFBUSxDQUFDLEdBQUc7VUFDL0QsQ0FBQyxDQUFDO1FBQUE7VUFMSVcsTUFBTSxHQUFBSSxTQUFBLENBQUFPLElBQUE7VUFBQSxJQU1QWCxNQUFNLENBQUN0QixJQUFJO1lBQUEwQixTQUFBLENBQUFuc0IsSUFBQTtZQUFBO1VBQUE7VUFBQSxNQUNSLElBQUkyc0IsS0FBSyx3QkFBQXRlLE1BQUEsRUFBQTJkLGtCQUFBLEdBQXdCNWlCLE9BQU8sQ0FBQ2dpQixRQUFRLGNBQUFZLGtCQUFBLHVCQUFoQkEsa0JBQUEsQ0FBa0JYLE1BQU0sQ0FBRSxDQUFDO1FBQUE7VUFBQSxPQUFBYyxTQUFBLENBQUFDLE1BQUEsV0FBQXJyQixhQUFBLENBQUFBLGFBQUEsS0FHL0RxSSxPQUFPO1lBQ1ZxaEIsSUFBSSxFQUFFc0IsTUFBTSxDQUFDdEIsSUFBSTtZQUNqQlcsUUFBUSxFQUFBcnFCLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLEtBQ0hxSSxPQUFPLENBQUNnaUIsUUFBUTtjQUNuQndCLElBQUksRUFBRWIsTUFBTSxDQUFDYSxJQUFJO2NBQ2pCQyxZQUFZLEVBQUVkLE1BQU0sQ0FBQ2M7WUFBWSxHQUM3QixPQUFPZCxNQUFNLENBQUN4cEIsSUFBSSxLQUFLLFFBQVEsR0FBRztjQUFDQSxJQUFJLEVBQUV3cEIsTUFBTSxDQUFDeHBCO1lBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztjQUM5RHVxQixhQUFhLEVBQUVDLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FDekJDLGFBQWEsRUFBRTtZQUFNO1VBQ3RCO1FBQUE7UUFBQTtVQUFBLE9BQUFkLFNBQUEsQ0FBQWUsSUFBQTtNQUFBO0lBQUEsR0FBQXRCLFFBQUE7RUFBQSxDQUVKO0VBQUEsT0FBQUosb0NBQUEsQ0FBQTFxQixLQUFBLE9BQUFFLFNBQUE7QUFBQTtBQUVELElBQU1tc0Isc0NBQXNDLEdBQUd4bUIsaUJBQUksQ0FBQ3ltQixXQUFXLENBQzdEOUIsbUNBQW1DLEVBQ25DLHdDQUNGLENBQUM7QUFFRCxJQUFNK0Isd0JBQXdCLEdBQUcxbUIsaUJBQUksQ0FBQ3ltQixXQUFXO0VBQUEsSUFBQUUsTUFBQSxPQUFBN0Isa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFDLFNBQUE0QixRQUFPQyxPQUFlO0lBQUEsT0FBQTlCLFlBQUEsWUFBQU8sSUFBQSxVQUFBd0IsU0FBQUMsUUFBQTtNQUFBLGtCQUFBQSxRQUFBLENBQUExbEIsSUFBQSxHQUFBMGxCLFFBQUEsQ0FBQTF0QixJQUFBO1FBQUE7VUFBQSxNQUNoRSxJQUFJMnNCLEtBQUssQ0FBQ2EsT0FBTyxDQUFDO1FBQUE7UUFBQTtVQUFBLE9BQUFFLFFBQUEsQ0FBQVIsSUFBQTtNQUFBO0lBQUEsR0FBQUssT0FBQTtFQUFBLENBQ3pCO0VBQUEsaUJBQUFJLEdBQUE7SUFBQSxPQUFBTCxNQUFBLENBQUF4c0IsS0FBQSxPQUFBRSxTQUFBO0VBQUE7QUFBQSxLQUFFLDBCQUEwQixDQUFDO0FBRTlCLFNBQVM0c0Isc0JBQXNCQSxDQUFDeGtCLE9BQXFCLEVBQUU5RSxRQUFrQixFQUFFO0VBQ3pFLElBQUksQ0FBQ3ltQiw0QkFBNEIsQ0FBQzNoQixPQUFPLENBQUMsRUFBRTtJQUMxQyxPQUFPLElBQUF5a0IseUJBQWtCLEVBQUN6a0IsT0FBTyxFQUFFOUUsUUFBUSxDQUFDO0VBQzlDO0VBQ0EsT0FBTzZvQixzQ0FBc0MsQ0FBQy9qQixPQUFPLENBQUMsQ0FBQzBrQixLQUFLLENBQUMsVUFBQUMsUUFBUSxFQUFJO0lBQ3ZFLElBQU1DLElBQUksR0FBRyxJQUFBSCx5QkFBa0IsRUFBQ0UsUUFBUSxFQUFFenBCLFFBQVEsQ0FBQztJQUNuRCxPQUNFMHBCLElBQUksSUFDSlgsd0JBQXdCLENBQUMsZ0VBQWdFLENBQUM7RUFFOUYsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxTQUFTWSxvQkFBb0JBLENBQUM3a0IsT0FBeUIsRUFBRThrQixLQUE4QixFQUFFO0VBQ3ZGLE9BQU8sSUFBQUMseUJBQWtCLEVBQUMva0IsT0FBTyxFQUFFO0lBQ2pDZ2lCLFFBQVEsRUFBQXJxQixhQUFBLENBQUFBLGFBQUEsS0FDSHFJLE9BQU8sQ0FBQ2dpQixRQUFRLEdBQ2hCOEMsS0FBSztFQUVaLENBQUMsQ0FBQztBQUNKO0FBQUMsU0FFY0UsNEJBQTRCQSxDQUFBQyxHQUFBO0VBQUEsT0FBQUMsNkJBQUEsQ0FBQXh0QixLQUFBLE9BQUFFLFNBQUE7QUFBQTtBQUFBLFNBQUFzdEIsOEJBQUE7RUFBQUEsNkJBQUEsT0FBQTdDLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBM0MsU0FBQTRDLFNBQUFDLE1BQUE7SUFBQSxJQUFBcEQsUUFBQSxFQUFBcUQsVUFBQTtJQUFBLE9BQUEvQyxZQUFBLFlBQUFPLElBQUEsVUFBQXlDLFVBQUFDLFNBQUE7TUFBQSxrQkFBQUEsU0FBQSxDQUFBM21CLElBQUEsR0FBQTJtQixTQUFBLENBQUEzdUIsSUFBQTtRQUFBO1VBQ09vckIsUUFBUSxHQUFBb0QsTUFBQSxDQUFiSSxHQUFHLEVBQ0hILFVBQVUsR0FBQUQsTUFBQSxDQUFWQyxVQUFVO1VBQUEsT0FBQUUsU0FBQSxDQUFBdkMsTUFBQSxXQWFILElBQUFDLHVDQUEyQixFQUFBdHJCLGFBQUEsQ0FBQUEsYUFBQSxLQUFLcXFCLFFBQVE7WUFBRXFELFVBQVUsRUFBVkEsVUFBVTtZQUFFakMsV0FBVyxFQUFFO1VBQUksRUFBQyxDQUFDO1FBQUE7UUFBQTtVQUFBLE9BQUFtQyxTQUFBLENBQUF6QixJQUFBO01BQUE7SUFBQSxHQUFBcUIsUUFBQTtFQUFBLENBQ2pGO0VBQUEsT0FBQUQsNkJBQUEsQ0FBQXh0QixLQUFBLE9BQUFFLFNBQUE7QUFBQTtBQUVELElBQU02dEIsc0NBQXNDLEdBQUdsb0IsaUJBQUksQ0FBQ21vQix1QkFBdUIsQ0FDekVWLDRCQUE0QixFQUM1Qix3Q0FDRixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNXLHFCQUFxQkEsQ0FDbkM5bkIsS0FBZSxFQUFBK25CLE1BQUEsRUFFTDtFQUFBLElBQUFDLGtCQUFBLEVBQUFDLGtCQUFBO0VBQUEsSUFEVDdsQixNQUFNLEdBQUEybEIsTUFBQSxDQUFOM2xCLE1BQU07RUFFUCxJQUFNRCxPQUFPLEdBQUduQyxLQUFLLENBQUMzQyxRQUFRLENBQUMrRSxNQUFNLENBQUM7RUFDdEMsSUFDRSxDQUFDRCxPQUFPLElBQ1JBLE9BQU8sQ0FBQ0ssSUFBSSxLQUFLeWhCLHNCQUFXLENBQUNDLGlCQUFpQixJQUM5QyxTQUFBOEQsa0JBQUEsR0FBTzdsQixPQUFPLENBQUNnaUIsUUFBUSxjQUFBNkQsa0JBQUEsdUJBQWhCQSxrQkFBQSxDQUFrQjVELE1BQU0sTUFBSyxRQUFRLEVBQzVDO0lBQ0EsT0FBT3BrQixLQUFLO0VBQ2Q7RUFDQSxJQUFJLEVBQUFpb0Isa0JBQUEsR0FBQTlsQixPQUFPLENBQUNnaUIsUUFBUSxjQUFBOEQsa0JBQUEsdUJBQWhCQSxrQkFBQSxDQUFrQmpDLGFBQWEsTUFBSyxTQUFTLEVBQUU7SUFDakQsT0FBT2htQixLQUFLO0VBQ2Q7RUFFQSxJQUFNa29CLFdBQVcsR0FBR2xCLG9CQUFvQixDQUFDN2tCLE9BQU8sRUFBRTtJQUNoRDZqQixhQUFhLEVBQUUsU0FBUztJQUN4Qm1DLFlBQVksRUFBRTVxQixTQUFTO0lBQ3ZCNnFCLGVBQWUsRUFBRTdxQjtFQUNuQixDQUFDLENBQUM7RUFFRixPQUFPLElBQUE4cUIsZUFBUSxFQUFBdnVCLGFBQUEsQ0FBQUEsYUFBQSxLQUVSa0csS0FBSztJQUNSM0MsUUFBUSxFQUFBdkQsYUFBQSxDQUFBQSxhQUFBLEtBQ0hrRyxLQUFLLENBQUMzQyxRQUFRLFdBQUFwRCxnQkFBQSxpQkFDaEJtSSxNQUFNLEVBQUc4bEIsV0FBVztFQUN0QixJQUVITixzQ0FBc0MsQ0FBQztJQUNyQ0QsR0FBRyxFQUFFO01BQ0h2RCxNQUFNLEVBQUU4RCxXQUFXLENBQUMvRCxRQUFRLENBQUNDLE1BQWdCO01BQzdDaUIsTUFBTSxFQUFFLElBQUFDLGdDQUFxQixFQUFDNEMsV0FBVyxDQUFDL0QsUUFBUSxDQUFDO01BQ25EN29CLElBQUksRUFBRSxPQUFPNHNCLFdBQVcsQ0FBQy9ELFFBQVEsQ0FBQzdvQixJQUFJLEtBQUssUUFBUSxHQUFHNHNCLFdBQVcsQ0FBQy9ELFFBQVEsQ0FBQzdvQixJQUFJLEdBQUdpQyxTQUFTO01BQzNGb29CLElBQUksRUFBRSxPQUFPdUMsV0FBVyxDQUFDL0QsUUFBUSxDQUFDd0IsSUFBSSxLQUFLLFFBQVEsR0FBR3VDLFdBQVcsQ0FBQy9ELFFBQVEsQ0FBQ3dCLElBQUksR0FBR3BvQixTQUFTO01BQzNGcW9CLFlBQVksRUFDVixPQUFPc0MsV0FBVyxDQUFDL0QsUUFBUSxDQUFDeUIsWUFBWSxLQUFLLFFBQVEsR0FDakRzQyxXQUFXLENBQUMvRCxRQUFRLENBQUN5QixZQUFZLEdBQ2pDcm9CO0lBQ1IsQ0FBQztJQUNEaXFCLFVBQVUsRUFBRSxTQUFaQSxVQUFVQSxDQUFFYyxRQUFRO01BQUEsSUFBQUMsaUJBQUE7TUFBQSxPQUNsQixJQUFBQywrQkFBc0IsRUFBQ3BtQixNQUFNLEVBQUVxbUIsSUFBSSxDQUFDQyxLQUFLLENBQUMsRUFBQUgsaUJBQUEsR0FBQ0QsUUFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUVLLE9BQU8sY0FBQUosaUJBQUEsY0FBQUEsaUJBQUEsR0FBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFBQTtFQUM5RSxDQUFDLENBQUMsQ0FBQ0ssS0FBSyxDQUNOLFVBQUF0ZixNQUFNO0lBQUEsT0FBSSxJQUFBdWYsOEJBQXFCLEVBQUN6bUIsTUFBTSxFQUFFa0gsTUFBTSxDQUFDO0VBQUEsR0FDL0MsVUFBQ0ssS0FBWTtJQUFBLE9BQUssSUFBQW1mLDRCQUFtQixFQUFDMW1CLE1BQU0sRUFBRXVILEtBQUssQ0FBQztFQUFBLENBQ3RELENBQ0YsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTb2YsNkJBQTZCQSxDQUMzQy9vQixLQUFlLEVBQUFncEIsTUFBQSxFQUVMO0VBQUEsSUFBQUMsa0JBQUEsRUFBQUMsa0JBQUE7RUFBQSxJQURUOW1CLE1BQU0sR0FBQTRtQixNQUFBLENBQU41bUIsTUFBTTtJQUFFdW1CLE9BQU8sR0FBQUssTUFBQSxDQUFQTCxPQUFPO0VBRWhCLElBQU14bUIsT0FBTyxHQUFHbkMsS0FBSyxDQUFDM0MsUUFBUSxDQUFDK0UsTUFBTSxDQUFDO0VBQ3RDLElBQUksQ0FBQ0QsT0FBTyxJQUFJLEVBQUE4bUIsa0JBQUEsR0FBQTltQixPQUFPLENBQUNnaUIsUUFBUSxjQUFBOEUsa0JBQUEsdUJBQWhCQSxrQkFBQSxDQUFrQmpELGFBQWEsTUFBSyxTQUFTLEVBQUU7SUFDN0QsT0FBT2htQixLQUFLO0VBQ2Q7RUFDQSxJQUFNbXBCLFdBQVcsR0FBR2x4QixNQUFNLENBQUNnYyxRQUFRLENBQUMwVSxPQUFPLENBQUMsR0FDeENGLElBQUksQ0FBQ1csR0FBRyxDQUFDLENBQUMsRUFBRVgsSUFBSSxDQUFDWSxHQUFHLENBQUMsR0FBRyxFQUFFWixJQUFJLENBQUNDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUMvQyxDQUFDO0VBQ0wsSUFBSSxFQUFBTyxrQkFBQSxHQUFBL21CLE9BQU8sQ0FBQ2dpQixRQUFRLGNBQUErRSxrQkFBQSx1QkFBaEJBLGtCQUFBLENBQWtCZCxlQUFlLE1BQUtlLFdBQVcsRUFBRTtJQUNyRCxPQUFPbnBCLEtBQUs7RUFDZDtFQUNBLE9BQUFsRyxhQUFBLENBQUFBLGFBQUEsS0FDS2tHLEtBQUs7SUFDUjNDLFFBQVEsRUFBQXZELGFBQUEsQ0FBQUEsYUFBQSxLQUNIa0csS0FBSyxDQUFDM0MsUUFBUSxXQUFBcEQsZ0JBQUEsaUJBQ2hCbUksTUFBTSxFQUFHNGtCLG9CQUFvQixDQUFDN2tCLE9BQU8sRUFBRTtNQUFDaW1CLGVBQWUsRUFBRWU7SUFBVyxDQUFDLENBQUM7RUFDeEU7QUFFTDtBQUVBLFNBQVNHLGVBQWVBLENBQUNDLE9BQXlCLEVBQUUvZSxRQUFrQyxFQUFXO0VBQy9GLElBQUksRUFBQ0EsUUFBUSxhQUFSQSxRQUFRLGVBQVJBLFFBQVEsQ0FBRWpTLE1BQU0sR0FBRTtJQUNyQixPQUFPLElBQUk7RUFDYjtFQUNBLElBQUlneEIsT0FBTyxDQUFDaHhCLE1BQU0sS0FBS2lTLFFBQVEsQ0FBQ2pTLE1BQU0sRUFBRTtJQUN0QyxPQUFPLEtBQUs7RUFDZDtFQUNBLE9BQU9neEIsT0FBTyxDQUFDQyxLQUFLLENBQUMsVUFBQ3ppQixLQUFLLEVBQUVqUSxDQUFDO0lBQUEsT0FBS2lRLEtBQUssQ0FBQzNOLElBQUksS0FBS29SLFFBQVEsQ0FBQzFULENBQUMsQ0FBQyxDQUFDc0MsSUFBSTtFQUFBLEVBQUM7QUFDckU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTcXdCLHVDQUF1Q0EsQ0FDOUN6cEIsS0FBZSxFQUNmb0MsTUFBYyxFQUNkL0UsUUFBOEIsRUFDcEI7RUFDVixJQUFNOEUsT0FBTyxHQUFHOUUsUUFBUSxDQUFDK0UsTUFBTSxDQUFDO0VBQ2hDLElBQU1zbkIsVUFBbUIsR0FBRyxFQUFFO0VBQzlCLElBQU1DLGFBQXNCLEdBQUcsRUFBRTtFQUVqQzNwQixLQUFLLENBQUNsRCxNQUFNLENBQUM5QyxPQUFPLENBQUMsVUFBQWtHLEtBQUssRUFBSTtJQUM1QixJQUFJQSxLQUFLLENBQUN0RixNQUFNLENBQUN3SCxNQUFNLEtBQUtBLE1BQU0sRUFBRTtNQUNsQ3NuQixVQUFVLENBQUM5dkIsSUFBSSxDQUFDc0csS0FBSyxDQUFDO01BQ3RCO0lBQ0Y7SUFDQSxJQUFNMHBCLE9BQU8sR0FBRzFoQiw2QkFBNkIsQ0FBQy9GLE9BQU8sRUFBRW5DLEtBQUssQ0FBQ3BCLFlBQVksRUFBRXNCLEtBQUssRUFBRUYsS0FBSyxDQUFDVCxNQUFNLENBQUM7SUFDL0YsSUFBSXFxQixPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFFdmhCLGFBQWEsQ0FBQyxDQUFDLEVBQUU7TUFDNUJxaEIsVUFBVSxDQUFDOXZCLElBQUksQ0FBQ2d3QixPQUFPLENBQUM7SUFDMUIsQ0FBQyxNQUFNO01BQ0xELGFBQWEsQ0FBQy92QixJQUFJLENBQUNzRyxLQUFLLENBQUM7SUFDM0I7RUFDRixDQUFDLENBQUM7RUFFRixJQUFJMnBCLGNBQWMsR0FBRzdwQixLQUFLLENBQUMvQyxVQUFVO0VBQ3JDLElBQUk2c0IsYUFBYSxHQUFHOXBCLEtBQUssQ0FBQ3ZCLFNBQVM7RUFDbkNrckIsYUFBYSxDQUFDM3ZCLE9BQU8sQ0FBQyxVQUFBa0csS0FBSyxFQUFJO0lBQzdCMnBCLGNBQWMsR0FBRyxJQUFBeFYsdUNBQTJCLEVBQUN3VixjQUFjLEVBQUUzcEIsS0FBSyxDQUFDekYsRUFBRSxDQUFDO0lBQ3RFcXZCLGFBQWEsR0FBRyxJQUFBbnBCLCtCQUF3QixFQUFDbXBCLGFBQWEsRUFBRTVwQixLQUFLLENBQUM7RUFDaEUsQ0FBQyxDQUFDO0VBRUYsSUFBTTZwQixhQUFhLEdBQUdMLFVBQVUsQ0FBQ3RwQixHQUFHLENBQUMsVUFBQUYsS0FBSyxFQUFJO0lBQzVDLElBQU04cEIsTUFBTSxHQUFHaHFCLEtBQUssQ0FBQ2xELE1BQU0sQ0FBQzRGLFNBQVMsQ0FBQyxVQUFBVixRQUFRO01BQUEsT0FBSUEsUUFBUSxDQUFDdkgsRUFBRSxLQUFLeUYsS0FBSyxDQUFDekYsRUFBRTtJQUFBLEVBQUM7SUFDM0UsT0FBT3V2QixNQUFNLElBQUksQ0FBQyxHQUFHaHFCLEtBQUssQ0FBQ2pELFNBQVMsQ0FBQ2l0QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkQsQ0FBQyxDQUFDO0VBRUYsSUFBTUMsaUJBQWlCLEdBQUdqcUIsS0FBSyxDQUFDN0MsT0FBTyxDQUFDekQsTUFBTSxDQUFDLFVBQUFBLE1BQU07SUFBQSxPQUFJLElBQUFrVSxvQkFBTyxFQUFDbFUsTUFBTSxDQUFDMEksTUFBTSxDQUFDLENBQUM2RSxRQUFRLENBQUM3RSxNQUFNLENBQUM7RUFBQSxFQUFDO0VBQ2pHLElBQU04bkIsWUFBWSxHQUFHbHFCLEtBQUssQ0FBQzdDLE9BQU8sQ0FBQ3pELE1BQU0sQ0FBQyxVQUFBQSxNQUFNO0lBQUEsT0FBSSxDQUFDLElBQUFrVSxvQkFBTyxFQUFDbFUsTUFBTSxDQUFDMEksTUFBTSxDQUFDLENBQUM2RSxRQUFRLENBQUM3RSxNQUFNLENBQUM7RUFBQSxFQUFDO0VBRTdGLElBQUErbkIscUJBQUEsR0FBcUMsSUFBQUMsb0NBQTZCLEVBQUF0d0IsYUFBQSxDQUFBQSxhQUFBLEtBQzVEa0csS0FBSztNQUFFM0MsUUFBUSxFQUFSQSxRQUFRO01BQUVQLE1BQU0sRUFBRTRzQjtJQUFVLElBQ3ZDTyxpQkFDRixDQUFDO0lBSE0zaEIsU0FBUyxHQUFBNmhCLHFCQUFBLENBQVQ3aEIsU0FBUztJQUFFK2hCLGVBQWUsR0FBQUYscUJBQUEsQ0FBZkUsZUFBZTtFQUtqQyxJQUFNQyxXQUFXLE1BQUFsakIsTUFBQSxLQUFBQyxtQkFBQSxhQUFPNmlCLFlBQVksT0FBQTdpQixtQkFBQSxhQUFLaUIsU0FBUyxFQUFDO0VBQ25ELElBQU1pRyxnQkFBZ0IsR0FBRyxJQUFBQyw2QkFBc0IsRUFDN0MsQ0FBQ3BNLE1BQU0sQ0FBQyxFQUNSaW9CLGVBQWUsRUFDZkMsV0FBVyxFQUNYWixVQUNGLENBQUM7RUFFRCxJQUFJbm5CLFNBQW1CLEdBQUF6SSxhQUFBLENBQUFBLGFBQUEsS0FDbEJrRyxLQUFLO0lBQ1IzQyxRQUFRLEVBQUVrUixnQkFBZ0I7SUFDMUJ6UixNQUFNLEVBQUU0c0IsVUFBVTtJQUNsQjNzQixTQUFTLEVBQUVndEIsYUFBYTtJQUN4QjlzQixVQUFVLEVBQUU0c0IsY0FBYztJQUMxQnByQixTQUFTLEVBQUVxckIsYUFBYTtJQUN4QjNzQixPQUFPLEVBQUVtdEI7RUFBVyxFQUNyQjtFQUNEL25CLFNBQVMsR0FBR3FNLHdCQUF3QixDQUFDck0sU0FBUyxFQUFFLENBQUNILE1BQU0sQ0FBQyxFQUFFN0UsU0FBUyxDQUFDO0VBQ3BFLE9BQU9zRCxxQkFBcUIsQ0FBQzBCLFNBQVMsQ0FBQztBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2dvQiw0QkFBNEJBLENBQzFDdnFCLEtBQWUsRUFBQXdxQixNQUFBLEVBRUw7RUFBQSxJQUFBQyxZQUFBO0VBQUEsSUFEVHJvQixNQUFNLEdBQUFvb0IsTUFBQSxDQUFOcG9CLE1BQU07SUFBRWtILE1BQU0sR0FBQWtoQixNQUFBLENBQU5saEIsTUFBTTtFQUVmLElBQU1uSCxPQUFPLEdBQUduQyxLQUFLLENBQUMzQyxRQUFRLENBQUMrRSxNQUFNLENBQUM7RUFDdEMsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPbkMsS0FBSztFQUNkO0VBRUEsSUFBTTBxQixhQUFhLEdBQUE1d0IsYUFBQTtJQUNqQmtzQixhQUFhLEVBQUUsTUFBTTtJQUNyQm1DLFlBQVksRUFBRTVxQixTQUFTO0lBQ3ZCNnFCLGVBQWUsRUFBRTdxQixTQUFTO0lBQzFCc29CLGFBQWEsRUFBRUMsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztJQUN6QjtJQUNBO0lBQ0FKLElBQUksRUFBRXJjLE1BQU0sQ0FBQ3FjLElBQUk7SUFDakJDLFlBQVksRUFBRXRjLE1BQU0sQ0FBQ3NjO0VBQVksR0FDN0IsT0FBT3RjLE1BQU0sQ0FBQ2hPLElBQUksS0FBSyxRQUFRLEdBQUc7SUFBQ0EsSUFBSSxFQUFFZ08sTUFBTSxDQUFDaE87RUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQy9EO0VBRUQsSUFBTXF2QixlQUFlLEdBQUdyQixlQUFlLENBQUNubkIsT0FBTyxDQUFDc0csTUFBTSxHQUFBZ2lCLFlBQUEsR0FBRW5oQixNQUFNLENBQUNrYSxJQUFJLGNBQUFpSCxZQUFBLHVCQUFYQSxZQUFBLENBQWFoaUIsTUFBTSxDQUFDOztFQUU1RTtFQUNBO0VBQ0EsSUFBSSxDQUFDYSxNQUFNLENBQUNzaEIsV0FBVyxJQUFJdGhCLE1BQU0sQ0FBQ2thLElBQUksRUFBRTtJQUN0QztJQUNBO0lBQ0E7SUFDQSxLQUFLcmhCLE9BQU8sQ0FBQzBvQixNQUFNLENBQUN2aEIsTUFBTSxDQUFDa2EsSUFBSSxDQUFDO0VBQ2xDO0VBRUEsSUFBTXNILFNBQVMsR0FBRzlELG9CQUFvQixDQUFDN2tCLE9BQU8sRUFBRXVvQixhQUFhLENBQUM7RUFDOUQsSUFBTXJ0QixRQUFRLEdBQUF2RCxhQUFBLENBQUFBLGFBQUEsS0FDVGtHLEtBQUssQ0FBQzNDLFFBQVEsV0FBQXBELGdCQUFBLGlCQUNoQm1JLE1BQU0sRUFBRzBvQixTQUFTLEVBQ3BCO0VBRUQsSUFBSXhoQixNQUFNLENBQUNzaEIsV0FBVyxJQUFJLENBQUN0aEIsTUFBTSxDQUFDa2EsSUFBSSxFQUFFO0lBQ3RDLE9BQUExcEIsYUFBQSxDQUFBQSxhQUFBLEtBQ0trRyxLQUFLO01BQ1IzQyxRQUFRLEVBQVJBO0lBQVE7RUFFWjtFQUVBLElBQUksQ0FBQ3N0QixlQUFlLEVBQUU7SUFDcEIsT0FBT2xCLHVDQUF1QyxDQUFDenBCLEtBQUssRUFBRW9DLE1BQU0sRUFBRS9FLFFBQVEsQ0FBQztFQUN6RTtFQUVBLE9BQU8wdEIsMEJBQTBCLENBQUFqeEIsYUFBQSxDQUFBQSxhQUFBLEtBQUtrRyxLQUFLO0lBQUUzQyxRQUFRLEVBQVJBO0VBQVEsSUFBRytFLE1BQU0sQ0FBQztBQUNqRTtBQUVBLFNBQVMyb0IsMEJBQTBCQSxDQUFDL3FCLEtBQWUsRUFBRW9DLE1BQWMsRUFBWTtFQUM3RSxJQUFNbU0sZ0JBQWdCLEdBQUcsSUFBQUMsNkJBQXNCLEVBQzdDLENBQUNwTSxNQUFNLENBQUMsRUFDUnBDLEtBQUssQ0FBQzNDLFFBQVEsRUFDZDJDLEtBQUssQ0FBQzdDLE9BQU8sRUFDYjZDLEtBQUssQ0FBQ2xELE1BQ1IsQ0FBQztFQUNELElBQUl5RixTQUFtQixHQUFBekksYUFBQSxDQUFBQSxhQUFBLEtBQ2xCa0csS0FBSztJQUNSM0MsUUFBUSxFQUFFa1I7RUFBZ0IsRUFDM0I7RUFDRGhNLFNBQVMsR0FBR3FNLHdCQUF3QixDQUFDck0sU0FBUyxFQUFFLENBQUNILE1BQU0sQ0FBQyxFQUFFN0UsU0FBUyxDQUFDO0VBQ3BFLE9BQU9zRCxxQkFBcUIsQ0FBQzBCLFNBQVMsQ0FBQztBQUN6QztBQUVBLFNBQVN5b0IsZ0JBQWdCQSxDQUN2QnJILElBQStELEVBQ3pCO0VBQ3RDLElBQUksQ0FBQ3ZyQixLQUFLLENBQUNDLE9BQU8sQ0FBQ3NyQixJQUFJLENBQUMsSUFBSSxDQUFDQSxJQUFJLENBQUNwckIsTUFBTSxFQUFFO0lBQ3hDLE9BQU9ILEtBQUssQ0FBQ0MsT0FBTyxDQUFDc3JCLElBQUksQ0FBQztFQUM1QjtFQUNBO0VBQ0E7RUFDQSxPQUFPdnJCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDc3JCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUFzSCxvQkFBYSxFQUFDdEgsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0FBRUEsU0FBU3VILFVBQVVBLENBQUNDLEdBQStCLEVBQUUxaUIsTUFBZSxFQUFnQjtFQUNsRixJQUFJclEsS0FBSyxDQUFDQyxPQUFPLENBQUM4eUIsR0FBRyxDQUFDLEVBQUU7SUFDdEIsT0FBT0EsR0FBRyxDQUFDNXlCLE1BQU0sS0FBS2tRLE1BQU0sQ0FBQ2xRLE1BQU0sR0FBRzR5QixHQUFHLEdBQUcsSUFBSTtFQUNsRDtFQUNBLElBQUksSUFBQUYsb0JBQWEsRUFBQ0UsR0FBRyxDQUFDLEVBQUU7SUFDdEIsSUFBTUMsTUFBTSxHQUFHRCxHQUE4QjtJQUM3QyxPQUFPMWlCLE1BQU0sQ0FBQ3JJLEdBQUcsQ0FBQyxVQUFBMkcsS0FBSztNQUFBLE9BQ3JCdlAsTUFBTSxDQUFDNEosU0FBUyxDQUFDOUosY0FBYyxDQUFDQyxJQUFJLENBQUM2ekIsTUFBTSxFQUFFcmtCLEtBQUssQ0FBQzNOLElBQUksQ0FBQyxHQUFHZ3lCLE1BQU0sQ0FBQ3JrQixLQUFLLENBQUMzTixJQUFJLENBQUMsR0FBRyxJQUFJO0lBQUEsQ0FDdEYsQ0FBQztFQUNIO0VBQ0EsT0FBTyxJQUFJO0FBQ2I7QUFFQSxTQUFTaXlCLG9CQUFvQkEsQ0FDM0IxSCxJQUErRCxFQUMvRGxiLE1BQWUsRUFDQztFQUNoQixJQUFJLENBQUNBLE1BQU0sQ0FBQ2xRLE1BQU0sRUFBRTtJQUNsQixPQUFPLElBQUk7RUFDYjtFQUNBLElBQU0reUIsSUFBSSxHQUFHTixnQkFBZ0IsQ0FBQ3JILElBQUksQ0FBQyxHQUFHQSxJQUFJLEdBQUcsQ0FBQ0EsSUFBSSxDQUFDO0VBQ25ELElBQUksQ0FBQzJILElBQUksQ0FBQy95QixNQUFNLEVBQUU7SUFDaEIsT0FBTyxJQUFJO0VBQ2I7RUFDQSxJQUFNZ3pCLFVBQW1CLEdBQUcsRUFBRTtFQUM5QixLQUFLLElBQUl6MEIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHdzBCLElBQUksQ0FBQy95QixNQUFNLEVBQUV6QixDQUFDLEVBQUUsRUFBRTtJQUNwQyxJQUFNMDBCLFFBQVEsR0FBR04sVUFBVSxDQUFDSSxJQUFJLENBQUN4MEIsQ0FBQyxDQUFDLEVBQUUyUixNQUFNLENBQUM7SUFDNUMsSUFBSSxDQUFDK2lCLFFBQVEsRUFBRTtNQUNiLE9BQU8sSUFBSTtJQUNiO0lBQ0FELFVBQVUsQ0FBQzN4QixJQUFJLENBQUM0eEIsUUFBUSxDQUFDO0VBQzNCO0VBQ0EsT0FBT0QsVUFBVTtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRSxtQkFBbUJBLENBQ2pDenJCLEtBQWUsRUFBQTByQixNQUFBLEVBRUw7RUFBQSxJQURUdHBCLE1BQU0sR0FBQXNwQixNQUFBLENBQU50cEIsTUFBTTtJQUFFdWhCLElBQUksR0FBQStILE1BQUEsQ0FBSi9ILElBQUk7SUFBRXBPLE9BQU8sR0FBQW1XLE1BQUEsQ0FBUG5XLE9BQU87RUFFdEIsSUFBTXBULE9BQU8sR0FBR25DLEtBQUssQ0FBQzNDLFFBQVEsQ0FBQytFLE1BQU0sQ0FBQztFQUN0QyxJQUFJLENBQUNELE9BQU8sRUFBRTtJQUNaLE9BQU9uQyxLQUFLO0VBQ2Q7RUFFQSxJQUFNdXJCLFVBQVUsR0FBR0Ysb0JBQW9CLENBQUMxSCxJQUFJLEVBQUV4aEIsT0FBTyxDQUFDc0csTUFBTSxDQUFDO0VBQzdELElBQUksQ0FBQzhpQixVQUFVLEVBQUU7SUFDZixPQUFPdnJCLEtBQUs7RUFDZDtFQUVBLElBQU0yckIsT0FBTyxHQUFHcFcsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRXFXLFFBQVEsR0FDN0J6cEIsT0FBTyxDQUFDMHBCLFVBQVUsQ0FBQ04sVUFBVSxFQUFFaFcsT0FBTyxDQUFDcVcsUUFBUSxDQUFDLEdBQ2hEenBCLE9BQU8sQ0FBQzJwQixVQUFVLENBQUNQLFVBQVUsQ0FBQztFQUNsQyxJQUFJLENBQUNJLE9BQU8sRUFBRTtJQUNaLE9BQU8zckIsS0FBSztFQUNkO0VBRUEsSUFBTTNDLFFBQVEsR0FBQXZELGFBQUEsQ0FBQUEsYUFBQSxLQUNUa0csS0FBSyxDQUFDM0MsUUFBUSxXQUFBcEQsZ0JBQUEsaUJBQ2hCbUksTUFBTSxFQUFHLElBQUE4a0IseUJBQWtCLEVBQUMva0IsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQzFDO0VBQ0QsT0FBTzRvQiwwQkFBMEIsQ0FBQWp4QixhQUFBLENBQUFBLGFBQUEsS0FBS2tHLEtBQUs7SUFBRTNDLFFBQVEsRUFBUkE7RUFBUSxJQUFHK0UsTUFBTSxDQUFDO0FBQ2pFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMycEIsd0JBQXdCQSxDQUN0Qy9yQixLQUFlLEVBQUFnc0IsTUFBQSxFQUVMO0VBQUEsSUFEVDVwQixNQUFNLEdBQUE0cEIsTUFBQSxDQUFONXBCLE1BQU07SUFBRTZwQixVQUFVLEdBQUFELE1BQUEsQ0FBVkMsVUFBVTtJQUFFQyxPQUFPLEdBQUFGLE1BQUEsQ0FBUEUsT0FBTztFQUU1QixJQUFNL3BCLE9BQU8sR0FBR25DLEtBQUssQ0FBQzNDLFFBQVEsQ0FBQytFLE1BQU0sQ0FBQztFQUN0QyxJQUFJLENBQUNELE9BQU8sRUFBRTtJQUNaLE9BQU9uQyxLQUFLO0VBQ2Q7RUFFQSxJQUFNbXNCLE9BQU8sR0FBR0QsT0FBTyxHQUNuQi9wQixPQUFPLENBQUNpcUIsMkJBQTJCLENBQUNGLE9BQU8sQ0FBQ25sQixLQUFLLEVBQUUsSUFBQTZHLG9CQUFPLEVBQUNzZSxPQUFPLENBQUN2akIsTUFBTSxDQUFDLENBQUMsR0FDM0UsSUFBQWlGLG9CQUFPLEVBQUNxZSxVQUFVLGFBQVZBLFVBQVUsY0FBVkEsVUFBVSxHQUFJLEVBQUUsQ0FBQztFQUM3QixJQUFJLENBQUNFLE9BQU8sQ0FBQzV6QixNQUFNLEVBQUU7SUFDbkIsT0FBT3lILEtBQUs7RUFDZDtFQUNBLElBQUksQ0FBQ21DLE9BQU8sQ0FBQ2txQixVQUFVLENBQUNGLE9BQU8sQ0FBQyxFQUFFO0lBQ2hDLE9BQU9uc0IsS0FBSztFQUNkO0VBRUEsSUFBTTNDLFFBQVEsR0FBQXZELGFBQUEsQ0FBQUEsYUFBQSxLQUNUa0csS0FBSyxDQUFDM0MsUUFBUSxXQUFBcEQsZ0JBQUEsaUJBQ2hCbUksTUFBTSxFQUFHLElBQUE4a0IseUJBQWtCLEVBQUMva0IsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQzFDO0VBQ0QsT0FBTzRvQiwwQkFBMEIsQ0FBQWp4QixhQUFBLENBQUFBLGFBQUEsS0FBS2tHLEtBQUs7SUFBRTNDLFFBQVEsRUFBUkE7RUFBUSxJQUFHK0UsTUFBTSxDQUFDO0FBQ2pFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTa3FCLDBCQUEwQkEsQ0FDeEN0c0IsS0FBZSxFQUFBdXNCLE1BQUEsRUFFTDtFQUFBLElBRFRucUIsTUFBTSxHQUFBbXFCLE1BQUEsQ0FBTm5xQixNQUFNO0lBQUV1SCxLQUFLLEdBQUE0aUIsTUFBQSxDQUFMNWlCLEtBQUs7RUFFZCxJQUFNeEgsT0FBTyxHQUFHbkMsS0FBSyxDQUFDM0MsUUFBUSxDQUFDK0UsTUFBTSxDQUFDO0VBQ3RDLElBQUksQ0FBQ0QsT0FBTyxFQUFFO0lBQ1osT0FBT25DLEtBQUs7RUFDZDtFQUVBLElBQU11QyxTQUFTLEdBQUF6SSxhQUFBLENBQUFBLGFBQUEsS0FDVmtHLEtBQUs7SUFDUjNDLFFBQVEsRUFBQXZELGFBQUEsQ0FBQUEsYUFBQSxLQUNIa0csS0FBSyxDQUFDM0MsUUFBUSxXQUFBcEQsZ0JBQUEsaUJBQ2hCbUksTUFBTSxFQUFHNGtCLG9CQUFvQixDQUFDN2tCLE9BQU8sRUFBRTtNQUN0QzZqQixhQUFhLEVBQUUsT0FBTztNQUN0Qm1DLFlBQVksRUFBRSxDQUFBeGUsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUU0YyxPQUFPLEtBQUl2dUIsTUFBTSxDQUFDMlIsS0FBSyxDQUFDO01BQzdDeWUsZUFBZSxFQUFFN3FCO0lBQ25CLENBQUMsQ0FBQztFQUNILEVBQ0Y7RUFFRCxPQUFPZ0YsU0FBUztBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNaXFCLG9CQUFvQixHQUFBanlCLE9BQUEsQ0FBQWl5QixvQkFBQSxHQUFHLFNBQXZCQSxvQkFBb0JBLENBQy9CeHNCLEtBQWUsRUFDZndCLE1BQWtELEVBQ3JDO0VBQ2I7RUFDQSxJQUFPNUcsTUFBTSxHQUFhNEcsTUFBTSxDQUF6QjVHLE1BQU07SUFBRTJhLE9BQU8sR0FBSS9ULE1BQU0sQ0FBakIrVCxPQUFPOztFQUV0QjtFQUNBO0VBQ0EsSUFBSXpLLFlBQVksR0FBR2xRLE1BQU0sR0FDckJzbUIsdUJBQXVCLENBQUNsaEIsS0FBSyxFQUFFO0lBQzdCcWhCLE9BQU8sRUFBRTtNQUFDem1CLE1BQU0sRUFBTkEsTUFBTTtNQUFFMmEsT0FBTyxFQUFQQTtJQUFPO0VBQzNCLENBQUMsQ0FBQyxHQUNGdlYsS0FBSztFQUVULElBQU0zQyxRQUFRLEdBQUcsSUFBQXVRLG9CQUFPLEVBQUNwTSxNQUFNLENBQUNuRSxRQUFRLENBQUM7RUFDekMsSUFBSSxDQUFDQSxRQUFRLENBQUM5RSxNQUFNLEVBQUU7SUFDcEIsT0FBT3VTLFlBQVk7RUFDckI7RUFFQSxJQUFNMmhCLGtCQUFvQyxHQUFHLEVBQUU7RUFDL0MsSUFBTUMsaUJBQW1DLEdBQUcsRUFBRTtFQUU5Q3J2QixRQUFRLENBQUNyRCxPQUFPLENBQUMsVUFBQTJ5QixNQUFBLEVBQXVCQyxZQUFZLEVBQUs7SUFBQSxJQUFBQyxXQUFBLEdBQUFGLE1BQUEsQ0FBdEN2SyxJQUFJO01BQUpBLElBQUksR0FBQXlLLFdBQUEsY0FBRyxDQUFDLENBQUMsR0FBQUEsV0FBQTtNQUFLQyxJQUFJLE9BQUEvbkIseUJBQUEsYUFBQTRuQixNQUFBLEVBQUFyMkIsVUFBQTtJQUNuQyxJQUFNeXdCLElBQUksR0FBR0osc0JBQXNCLENBQUE3c0IsYUFBQTtNQUFFc29CLElBQUksRUFBSkE7SUFBSSxHQUFLMEssSUFBSSxHQUFHOXNCLEtBQUssQ0FBQzNDLFFBQVEsQ0FBQztJQUNwRSxJQUFJMHBCLElBQUksRUFBRTtNQUNSMEYsa0JBQWtCLENBQUM3eUIsSUFBSSxDQUFDbXRCLElBQUksQ0FBQztJQUMvQixDQUFDLE1BQU07TUFDTDJGLGlCQUFpQixDQUFDOXlCLElBQUksQ0FDcEJrRyw0QkFBNEIsQ0FBQyxDQUFDLENBQUNNLEdBQUcsQ0FBQztRQUFBLE9BQ2pDLElBQUEyc0Isd0JBQWUsRUFDYixJQUFBQyx3QkFBaUIsRUFBQztVQUNoQnpHLE9BQU8sa0VBQWtFO1VBQ3pFOXJCLEVBQUUsb0JBQUEyTSxNQUFBLENBQW9Cd2xCLFlBQVk7UUFDcEMsQ0FBQyxDQUNILENBQUM7TUFBQSxDQUNILENBQ0YsQ0FBQztJQUNIO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBTUssc0JBQXNCLEdBQUdSLGtCQUFrQixDQUFDbDBCLE1BQU0sR0FDcERtSCxpQkFBSSxDQUFDd3RCLFVBQVUsQ0FBQ1Qsa0JBQWtCLENBQUMsQ0FBQ3JzQixHQUFHLENBQUMsVUFBQStzQixPQUFPO0lBQUEsT0FDN0MsSUFBQUMsZ0NBQXVCLEVBQUM7TUFBQ0QsT0FBTyxFQUFQQSxPQUFPO01BQUVFLGVBQWUsRUFBRTlYO0lBQU8sQ0FBQyxDQUFDO0VBQUEsQ0FDOUQsQ0FBQyxHQUNELElBQUk7RUFFUixJQUFJMFgsc0JBQXNCLEVBQUU7SUFDMUJuaUIsWUFBWSxHQUFHd2lCLDBCQUEwQixDQUFDeGlCLFlBQVksRUFBRSxJQUFBeWlCLHlCQUFRLEVBQUM7TUFBQ0MsTUFBTSxFQUFFLENBQUM7TUFBRWhyQixJQUFJLEVBQUU7SUFBRSxDQUFDLENBQUMsQ0FBQztFQUMxRjtFQUVBLE9BQU8sSUFBQTZsQixlQUFRLEVBQUN2ZCxZQUFZLEtBQUExRCxNQUFBLEtBQUFDLG1CQUFBLGFBQ3RCNGxCLHNCQUFzQixHQUFHLENBQUNBLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxHQUN2RFAsaUJBQWlCLENBQ3JCLENBQUM7QUFDSixDQUFDO0FBRU0sSUFBTWUsOEJBQThCLEdBQUFsekIsT0FBQSxDQUFBa3pCLDhCQUFBLEdBQUcsU0FBakNBLDhCQUE4QkEsQ0FDekN6dEIsS0FBZSxFQUNmd0IsTUFBcUQsRUFDeEM7RUFDYixJQUFBa3NCLGVBQUEsR0FBbUNsc0IsTUFBTSxDQUFDNmYsT0FBTztJQUExQzhMLE9BQU8sR0FBQU8sZUFBQSxDQUFQUCxPQUFPO0lBQUVFLGVBQWUsR0FBQUssZUFBQSxDQUFmTCxlQUFlO0VBQy9CLElBQU1YLGlCQUFtQyxHQUFHLEVBQUU7RUFFOUMsSUFBTWlCLGNBQWMsR0FBR1IsT0FBTyxDQUFDN2dCLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUVqRCxNQUFNLEVBQUVuSixHQUFHLEVBQUs7SUFDM0QsSUFBSW1KLE1BQU0sQ0FBQ3NrQixNQUFNLEtBQUssV0FBVyxFQUFFO01BQ2pDLElBQU16ckIsT0FBTyxHQUFHbUgsTUFBTSxDQUFDMVEsS0FBSztNQUM1QixPQUFBa0IsYUFBQSxDQUFBQSxhQUFBLEtBQVd5UyxJQUFJLFdBQUF0UyxnQkFBQSxpQkFBR2tJLE9BQU8sQ0FBQzFILEVBQUUsRUFBRzBILE9BQU87SUFDeEMsQ0FBQyxNQUFNO01BQ0w7TUFDQXVxQixpQkFBaUIsQ0FBQzl5QixJQUFJLENBQ3BCLElBQUFpMEIsa0JBQVcsRUFBQyxDQUFDLENBQUN6dEIsR0FBRyxDQUFDO1FBQUEsT0FDaEIsSUFBQTJzQix3QkFBZSxFQUNiLElBQUFDLHdCQUFpQixFQUFDO1VBQ2hCekcsT0FBTyxtRUFBQW5mLE1BQUEsQ0FDTGtDLE1BQU0sQ0FBQ3drQixNQUFNLElBQUt4a0IsTUFBTSxDQUFTMVEsS0FBSyxDQUFFO1VBQzFDNkIsRUFBRSwyQkFBQTJNLE1BQUEsQ0FBMkJqSCxHQUFHO1FBQ2xDLENBQUMsQ0FDSCxDQUFDO01BQUEsQ0FDSCxDQUNGLENBQUM7TUFDRCxPQUFPb00sSUFBSTtJQUNiO0VBQ0YsQ0FBQyxFQUFFLENBQUMsQ0FBYSxDQUFDO0VBQ2xCO0VBQ0EsSUFBTW1WLFdBQVcsR0FBQTVuQixhQUFBLENBQUFBLGFBQUEsS0FDWmtHLEtBQUs7SUFDUjNDLFFBQVEsRUFBRSxJQUFBMHdCLG9DQUFvQixFQUFDL3RCLEtBQUssRUFBRTJ0QixjQUFjO0VBQUMsRUFDdEQ7O0VBRUQ7RUFDQSxJQUFNSyxZQUFZLEdBQUdodUIsS0FBSyxDQUFDWCxPQUFPLENBQUMzRixNQUFNLENBQUMsVUFBQXUwQixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDQyxnQkFBZ0I7RUFBQSxFQUFDO0VBQ2xFLElBQU1DLGNBQWMsR0FBR251QixLQUFLLENBQUNYLE9BQU8sQ0FBQzNGLE1BQU0sQ0FBQyxVQUFBdTBCLENBQUM7SUFBQSxPQUFJLENBQUNELFlBQVksQ0FBQy9tQixRQUFRLENBQUNnbkIsQ0FBQyxDQUFDO0VBQUEsRUFBQztFQUUzRSxJQUFNL2MsVUFBVSxHQUFHMVosTUFBTSxDQUFDZ0MsSUFBSSxDQUFDbTBCLGNBQWMsQ0FBQztFQUM5QyxJQUFNUyxpQkFBaUIsR0FBRztJQUN4QmxkLFVBQVUsRUFBVkEsVUFBVTtJQUNWcUUsT0FBTyxFQUFFOFgsZUFBZTtJQUN4QlcsWUFBWSxFQUFaQTtFQUNGLENBQUM7RUFFRCxJQUFNbGpCLFlBQVksR0FBR3VqQixtQkFBbUIsQ0FBQzNNLFdBQVcsRUFBRTtJQUNwRHJpQixPQUFPLEVBQUU4dUIsY0FBYztJQUN2QkMsaUJBQWlCLEVBQWpCQTtFQUNGLENBQUMsQ0FBQztFQUVGLE9BQU8sSUFBQS9GLGVBQVEsRUFDYmlGLDBCQUEwQixDQUFDeGlCLFlBQVksRUFBRSxJQUFBeWlCLHlCQUFRLEVBQUM7SUFBQ0MsTUFBTSxFQUFFLENBQUM7RUFBQyxDQUFDLENBQUMsQ0FBQyxFQUNoRWQsaUJBQ0YsQ0FBQztBQUNILENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ08sU0FBUzJCLG1CQUFtQkEsQ0FDakNydUIsS0FBZSxFQUNmd0IsTUFHQyxFQUNTO0VBQ1YsSUFBT25DLE9BQU8sR0FBdUJtQyxNQUFNLENBQXBDbkMsT0FBTztJQUFFK3VCLGlCQUFpQixHQUFJNXNCLE1BQU0sQ0FBM0I0c0IsaUJBQWlCOztFQUVqQztFQUNBLElBQU1FLGdCQUFnQixHQUFHLElBQUFDLG9DQUFxQixFQUM1Q3Z1QixLQUFLLEVBQUFsRyxhQUFBLENBQUFBLGFBQUEsS0FFQTRDLGlCQUFpQixHQUNqQnNELEtBQUssQ0FBQ2loQixZQUFZLEdBRXZCNWhCLE9BQU87RUFDUDtFQUNBK3VCLGlCQUNGLENBQUM7O0VBRUQ7RUFDQTtFQUNBLE9BQU9FLGdCQUFnQixDQUFDRSxTQUFTLEdBQzdCQyxnQkFBZ0IsQ0FBQ0gsZ0JBQWdCLENBQUM1TSxXQUFXLEVBQUUwTSxpQkFBaUIsQ0FBQyxHQUNqRUUsZ0JBQWdCLENBQUM1TSxXQUFXO0FBQ2xDOztBQUVBO0FBQ0EsU0FBU2dOLGdDQUFnQ0EsQ0FDdkNuWixPQUFpRCxFQUNaO0VBQ3JDLElBQUksQ0FBQ0EsT0FBTyxJQUFJLEVBQUUsZ0JBQWdCLElBQUlBLE9BQU8sQ0FBQyxFQUFFO0lBQzlDLE9BQU9oWSxTQUFTO0VBQ2xCO0VBQ0EsSUFBTTBwQixLQUFLLEdBQUkxUixPQUFPLENBQWdDb1osY0FBYztFQUNwRSxJQUFJMUgsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFBeGMsUUFBQSxhQUFPd2MsS0FBSyxNQUFLLFFBQVEsSUFBSTd1QixLQUFLLENBQUNDLE9BQU8sQ0FBQzR1QixLQUFLLENBQUMsRUFBRTtJQUN0RSxPQUFPMXBCLFNBQVM7RUFDbEI7RUFDQSxPQUFPMHBCLEtBQUs7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzJILCtCQUErQkEsQ0FBQzF1QixLQUFZLEVBQVc7RUFBQSxJQUFBMnVCLGFBQUE7RUFDOUQsT0FBTzN1QixLQUFLLENBQUNzQyxJQUFJLEtBQUtzc0Isc0JBQVcsQ0FBQ0MsT0FBTyxJQUFJLEVBQUFGLGFBQUEsR0FBQTN1QixLQUFLLENBQUN0RixNQUFNLGNBQUFpMEIsYUFBQSx1QkFBWkEsYUFBQSxDQUFjRyxVQUFVLE1BQUssU0FBUztBQUNyRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTUCxnQkFBZ0JBLENBQUMvTSxXQUFxQixFQUFFME0saUJBQW9DLEVBQVk7RUFDL0YsSUFBT2xkLFVBQVUsR0FBMkJrZCxpQkFBaUIsQ0FBdERsZCxVQUFVO0lBQUVxRSxPQUFPLEdBQWtCNlksaUJBQWlCLENBQTFDN1ksT0FBTztJQUFFeVksWUFBWSxHQUFJSSxpQkFBaUIsQ0FBakNKLFlBQVk7RUFDeEMsSUFBTTNhLFVBQVUsR0FBR3FPLFdBQVcsQ0FBQ3ZrQixPQUFPLENBQUN6RCxNQUFNLENBQUMsVUFBQTNDLENBQUM7SUFBQSxPQUM3Q0EsQ0FBQyxDQUFDcUwsTUFBTSxDQUFDSCxJQUFJLENBQUMsVUFBQWd0QixPQUFPO01BQUEsT0FBSS9kLFVBQVUsQ0FBQ2pLLFFBQVEsQ0FBQ2dvQixPQUFPLENBQUM7SUFBQSxFQUFDO0VBQUEsQ0FDeEQsQ0FBQztFQUNELElBQU1DLGVBQXlCLEdBQUcsSUFBQXpnQixnQkFBSSxFQUNwQzRFLFVBQVUsQ0FBQy9HLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUV4VixDQUFDO0lBQUEsVUFBQXFRLE1BQUEsS0FBQUMsbUJBQUEsYUFBU2tGLElBQUksT0FBQWxGLG1CQUFBLGFBQUt0USxDQUFDLENBQUNxTCxNQUFNO0VBQUEsQ0FBQyxFQUFFLEVBQWMsQ0FDdkUsQ0FBQztFQUNELElBQU0rc0IsU0FBUyxHQUFHamUsVUFBVSxDQUFDM1ksTUFBTSxHQUFHLENBQUM7RUFFdkMsSUFBSTYyQixTQUFTLEdBQUcsQ0FBQ0QsU0FBUyxHQUN0QnpOLFdBQVcsQ0FBQzVrQixNQUFNLENBQUNwRCxNQUFNLENBQUMsVUFBQXdJLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN0SCxNQUFNLENBQUN3SCxNQUFNLElBQUk4TyxVQUFVLENBQUNqSyxRQUFRLENBQUMvRSxDQUFDLENBQUN0SCxNQUFNLENBQUN3SCxNQUFNLENBQUM7RUFBQSxFQUFDLEdBQ3ZGLEVBQUU7RUFFTixJQUFNdXJCLGNBQWMsR0FBR3pjLFVBQVUsQ0FBQzVFLE1BQU0sQ0FDdEMsVUFBQ0MsSUFBSSxFQUFFOVIsRUFBRTtJQUFBLE9BQUFYLGFBQUEsQ0FBQUEsYUFBQSxLQUNKeVMsSUFBSSxXQUFBdFMsZ0JBQUEsaUJBQ05RLEVBQUUsRUFBR2luQixXQUFXLENBQUNya0IsUUFBUSxDQUFDNUMsRUFBRSxDQUFDO0VBQUEsQ0FDOUIsRUFDRixDQUFDLENBQ0gsQ0FBQztFQUVELElBQUksQ0FBQzIwQixTQUFTLENBQUM3MkIsTUFBTSxJQUFJLENBQUNnZCxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUU4WixnQkFBZ0IsS0FBSyxLQUFLLEVBQUU7SUFDbkU7SUFDQSxJQUFNL2xCLE1BQU0sR0FBR2dtQixnQkFBZ0IsQ0FBQzVOLFdBQVcsRUFBRWlNLGNBQWMsQ0FBQztJQUM1RGpNLFdBQVcsR0FBR3BZLE1BQU0sQ0FBQ3RKLEtBQUs7SUFDMUJvdkIsU0FBUyxHQUFHOWxCLE1BQU0sQ0FBQzhsQixTQUFTO0VBQzlCO0VBRUEsSUFBSTFOLFdBQVcsQ0FBQ2pqQixTQUFTLENBQUNsRyxNQUFNLEVBQUU7SUFDaEM7SUFDQTYyQixTQUFTLEdBQUcxTixXQUFXLENBQUM1a0IsTUFBTSxDQUFDcEQsTUFBTSxDQUNuQyxVQUFBd0ksQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ3RILE1BQU0sQ0FBQ3dILE1BQU0sSUFBSThPLFVBQVUsQ0FBQ2pLLFFBQVEsQ0FBQy9FLENBQUMsQ0FBQ3RILE1BQU0sQ0FBQ3dILE1BQU0sQ0FBQztJQUFBLENBQzlELENBQUM7SUFDRDtJQUNBLElBQU1tdEIsb0JBQW9CLEdBQUdILFNBQVMsQ0FBQzExQixNQUFNLENBQzNDLFVBQUF3SSxDQUFDO01BQUEsT0FBSSxDQUFDd2YsV0FBVyxDQUFDampCLFNBQVMsQ0FBQ2tGLElBQUksQ0FBQyxVQUFBbUMsRUFBRTtRQUFBLE9BQUk1RCxDQUFDLENBQUN6SCxFQUFFLElBQUlxTCxFQUFFLENBQUNoSixNQUFNO01BQUEsRUFBQztJQUFBLENBQzNELENBQUM7SUFDRDRrQixXQUFXLEdBQUE1bkIsYUFBQSxDQUFBQSxhQUFBLEtBQ040bkIsV0FBVztNQUNkampCLFNBQVMsRUFBRSxJQUFBaUMsNkJBQXNCLEVBQUNnaEIsV0FBVyxDQUFDampCLFNBQVMsRUFBRTh3QixvQkFBb0I7SUFBQyxFQUMvRTtFQUNIO0VBRUE3TixXQUFXLEdBQUcsSUFBQThOLDZDQUFpQyxFQUM3QzlOLFdBQVcsRUFDWGdOLGdDQUFnQyxDQUFDblosT0FBTyxDQUFDLEVBQ3pDckUsVUFDRixDQUFDOztFQUVEO0VBQ0FBLFVBQVUsQ0FBQ2xYLE9BQU8sQ0FBQyxVQUFBb0ksTUFBTSxFQUFJO0lBQzNCLElBQU1xdEIsYUFBYSxHQUFHL04sV0FBVyxDQUFDMWpCLGlCQUFpQixDQUFDeEQsT0FBTyxDQUFDSSxNQUFNLENBQUNDLFlBQVksQ0FBQ3VILE1BQU0sQ0FBQztJQUN2RjtJQUNBLElBQ0UsQ0FBQW1ULE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFbWEsa0JBQWtCLE1BQUssS0FBSyxLQUNwQyxDQUFDdDNCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDbzNCLGFBQWEsQ0FBQyxJQUFJLENBQUNBLGFBQWEsQ0FBQ2wzQixNQUFNLENBQUMsRUFDeEQ7TUFDQTtNQUNBbXBCLFdBQVcsR0FBR2lPLGtCQUFrQixDQUFDak8sV0FBVyxFQUFFaU0sY0FBYyxDQUFDdnJCLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZFO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBTWlvQixlQUFlLEdBQUc4RSxTQUFTLEdBQzdCMzNCLE1BQU0sQ0FBQ2dDLElBQUksQ0FBQ2tvQixXQUFXLENBQUNya0IsUUFBUSxDQUFDLEdBQ2pDLElBQUFvUixnQkFBSSxFQUFDalgsTUFBTSxDQUFDZ0MsSUFBSSxDQUFDbTBCLGNBQWMsQ0FBQyxDQUFDdm1CLE1BQU0sQ0FBQzhuQixlQUFlLENBQUMsQ0FBQztFQUU3RCxJQUFJcGtCLFlBQVksR0FBRzhELHdCQUF3QixDQUFDOFMsV0FBVyxFQUFFMkksZUFBZSxFQUFFOXNCLFNBQVMsQ0FBQzs7RUFFcEY7RUFDQTtFQUNBO0VBQ0EsSUFBTXF5QixjQUFjLEdBQUc5a0IsWUFBWSxDQUFDM04sT0FBTyxDQUFDekQsTUFBTSxDQUNoRCxVQUFBM0MsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3lMLElBQUksS0FBS3FNLHVCQUFZLENBQUNnaEIsT0FBTyxJQUFJOTRCLENBQUMsQ0FBQzRELE9BQU8sS0FBSyxLQUFLO0VBQUEsQ0FDN0QsQ0FBQztFQUNELElBQU1tMUIsa0JBQWtCLEdBQUcsSUFBQXJoQixnQkFBSSxFQUM3QjNELFlBQVksQ0FBQ2hPLE1BQU0sQ0FDaEJwRCxNQUFNLENBQ0wsVUFBQXdHLEtBQUs7SUFBQSxPQUNIMHVCLCtCQUErQixDQUFDMXVCLEtBQUssQ0FBQyxJQUN0QzB2QixjQUFjLENBQUNqc0IsSUFBSSxDQUFDLFVBQUE1TSxDQUFDO01BQUEsSUFBQWc1QixVQUFBO01BQUEsUUFBQUEsVUFBQSxHQUFJaDVCLENBQUMsQ0FBQzRPLE9BQU8sY0FBQW9xQixVQUFBLHVCQUFUQSxVQUFBLENBQVc5b0IsUUFBUSxDQUFDL0csS0FBSyxDQUFDekYsRUFBRSxDQUFDO0lBQUEsRUFBQztFQUFBLENBQzNELENBQUMsQ0FDQTJGLEdBQUcsQ0FBQyxVQUFBRixLQUFLO0lBQUEsT0FBSUEsS0FBSyxDQUFDdEYsTUFBTSxDQUFDd0gsTUFBTTtFQUFBLEVBQUMsQ0FDakMxSSxNQUFNLENBQUMsVUFBQ2UsRUFBRTtJQUFBLE9BQW1CaU4sT0FBTyxDQUFDak4sRUFBRSxDQUFDLElBQUk0dkIsZUFBZSxDQUFDcGpCLFFBQVEsQ0FBQ3hNLEVBQUUsQ0FBQztFQUFBLEVBQzdFLENBQUM7RUFDRCxJQUFJcTFCLGtCQUFrQixDQUFDdjNCLE1BQU0sRUFBRTtJQUM3QnVTLFlBQVksR0FBRzhELHdCQUF3QixDQUFBOVUsYUFBQSxDQUFBQSxhQUFBLEtBRWhDZ1IsWUFBWTtNQUNmek4sUUFBUSxFQUFFLElBQUFtUiw2QkFBc0IsRUFDOUJzaEIsa0JBQWtCLEVBQ2xCaGxCLFlBQVksQ0FBQ3pOLFFBQVEsRUFDckJ5TixZQUFZLENBQUMzTixPQUFPLEVBQ3BCMk4sWUFBWSxDQUFDaE8sTUFDZjtJQUFDLElBRUhnekIsa0JBQ0YsQ0FBQztFQUNIOztFQUVBO0VBQ0E7RUFDQWhsQixZQUFZLEdBQUdqSyxxQkFBcUIsQ0FBQ2lLLFlBQVksQ0FBQzs7RUFFbEQ7RUFDQUEsWUFBWSxHQUNWa2pCLFlBQVksSUFBSUEsWUFBWSxDQUFDejFCLE1BQU0sR0FBRyxDQUFDLEdBQ25DODFCLG1CQUFtQixDQUFDdmpCLFlBQVksRUFBRTtJQUNoQ3pMLE9BQU8sRUFBRTJ1QixZQUFZO0lBQ3JCSSxpQkFBaUIsRUFBQXQwQixhQUFBLENBQUFBLGFBQUEsS0FBTXMwQixpQkFBaUI7TUFBRUosWUFBWSxFQUFFO0lBQUU7RUFDNUQsQ0FBQyxDQUFDLEdBQ0ZsakIsWUFBWTs7RUFFbEI7RUFDQSxJQUFJc2tCLFNBQVMsQ0FBQzcyQixNQUFNLElBQUksQ0FBQ2dkLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRXlhLFNBQVMsRUFBRTtJQUNqRCxJQUFNQyxNQUFNLEdBQUcsSUFBQUMsd0JBQWEsRUFBQ2QsU0FBUyxDQUFDO0lBQ3ZDLElBQUlhLE1BQU0sRUFBRTtNQUNWLElBQU1FLE9BQU8sR0FBRzVhLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFNGEsT0FBTztNQUNoQyxJQUFNQyxhQUFhLEdBQUczd0Isc0JBQXNCLENBQUMsQ0FBQyxDQUFDVyxHQUFHLENBQUMsWUFBTTtRQUN2RCxPQUFPLElBQUFpd0Isa0JBQVksRUFBQ0osTUFBTSxFQUFFRSxPQUFPLENBQUM7TUFDdEMsQ0FBQyxDQUFDO01BQ0ZybEIsWUFBWSxHQUFHLElBQUF1ZCxlQUFRLEVBQUN2ZCxZQUFZLEVBQUVzbEIsYUFBYSxDQUFDO0lBQ3REO0VBQ0Y7O0VBRUE7RUFDQSxPQUFPdGxCLFlBQVk7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVN3bEIsb0JBQW9CQSxDQUNsQ3R3QixLQUFlLEVBQ2Z3QixNQUFrRCxFQUN4QztFQUNWLE9BQU9zZix5QkFBeUIsQ0FBQzlnQixLQUFLLEVBQUU7SUFBQ29DLE1BQU0sRUFBRVosTUFBTSxDQUFDWSxNQUFNO0lBQUV1QyxLQUFLLEVBQUU7TUFBQ2pLLEtBQUssRUFBRThHLE1BQU0sQ0FBQzlHO0lBQUs7RUFBQyxDQUFDLENBQUM7QUFDaEc7QUFFQSxJQUFNNjFCLDRCQUE0QixHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUM7O0FBRW5FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLDBCQUEwQixHQUFHLFNBQTdCQSwwQkFBMEJBLENBQUk3ckIsS0FBSyxFQUFFeEMsT0FBTyxFQUFLO0VBQ3JELElBQU1zdUIsY0FBYyxHQUFHajVCLE1BQU0sQ0FBQ2s1QixPQUFPLENBQUMvckIsS0FBSyxDQUFDLENBQUMySCxNQUFNLENBQUMsVUFBQ29KLEdBQUcsRUFBRUksS0FBSyxFQUFLO0lBQ2xFLElBQUE2YSxNQUFBLE9BQUFDLGVBQUEsYUFBcUI5YSxLQUFLO01BQW5CM1UsR0FBRyxHQUFBd3ZCLE1BQUE7TUFBRS8zQixLQUFLLEdBQUErM0IsTUFBQTtJQUNqQjtJQUNBLElBQUksQ0FBQ0osNEJBQTRCLENBQUN0cEIsUUFBUSxDQUFDOUYsR0FBRyxDQUFDLEVBQUU7TUFDL0MsT0FBT3VVLEdBQUc7SUFDWjs7SUFFQTtJQUNBO0lBQ0EsSUFBSXZVLEdBQUcsS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFBMHZCLGlCQUFVLEVBQUNqNEIsS0FBSyxDQUFDLEVBQUU7TUFDekMsT0FBTzhjLEdBQUc7SUFDWjs7SUFFQTtJQUNBLE9BQUE1YixhQUFBLENBQUFBLGFBQUEsS0FBVzRiLEdBQUcsV0FBQXpiLGdCQUFBLGlCQUFHa0gsR0FBRyxFQUFHLElBQUE4cEIsb0JBQWEsRUFBQ3J5QixLQUFLLENBQUMsR0FBRyxJQUFBazRCLHFCQUFTLEVBQUMzdUIsT0FBTyxDQUFDaEIsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUV2SSxLQUFLLENBQUMsR0FBR0EsS0FBSztFQUM1RixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFFTixPQUFPNjNCLGNBQWM7QUFDdkIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzNQLHlCQUF5QkEsQ0FDdkM5Z0IsS0FBZSxFQUNmd0IsTUFBdUQsRUFDN0M7RUFDVixJQUFPWSxNQUFNLEdBQVdaLE1BQU0sQ0FBdkJZLE1BQU07SUFBRXVDLEtBQUssR0FBSW5ELE1BQU0sQ0FBZm1ELEtBQUs7RUFDcEIsSUFBT3RILFFBQVEsR0FBSTJDLEtBQUssQ0FBakIzQyxRQUFRO0VBQ2YsSUFBTXNkLFFBQVEsR0FBR3RkLFFBQVEsQ0FBQytFLE1BQU0sQ0FBQztFQUVqQyxJQUFJdVksUUFBUSxFQUFFO0lBQ1osSUFBTThWLGNBQWMsR0FBR0QsMEJBQTBCLENBQUM3ckIsS0FBSyxFQUFFZ1csUUFBUSxDQUFDO0lBQ2xFO0lBQ0E7SUFDQTtJQUNBLE9BQUE3Z0IsYUFBQSxDQUFBQSxhQUFBLEtBQ0trRyxLQUFLO01BQ1IzQyxRQUFRLEVBQUF2RCxhQUFBLENBQUFBLGFBQUEsS0FDSHVELFFBQVEsV0FBQXBELGdCQUFBLGlCQUNWbUksTUFBTSxFQUFHLElBQUE4a0IseUJBQWtCLEVBQUN2TSxRQUFRLEVBQUU4VixjQUFjLENBQUM7SUFDdkQ7RUFFTDtFQUVBLE9BQU96d0IsS0FBSztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyt3QiwyQkFBMkJBLENBQ2xDN3dCLEtBQVksRUFDWjh3QixPQUErQixFQUMvQkMsUUFBcUIsRUFDckJqeEIsS0FBZSxFQUNEO0VBQUEsSUFBQWt4QixxQkFBQTtFQUNkLElBQU1DLFdBQWdDLEdBQUcsQ0FBQyxDQUFDOztFQUUzQztFQUNBLElBQU1DLFlBQXNFLEdBQUcsQ0FBQyxDQUFDO0VBQ2pGLElBQUlDLGNBQWMsR0FBRyxLQUFLO0VBQzFCNzVCLE1BQU0sQ0FBQ2s1QixPQUFPLENBQUN4d0IsS0FBSyxDQUFDdEYsTUFBTSxDQUFDMDJCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDdDNCLE9BQU8sQ0FBQyxVQUFBdTNCLE1BQUEsRUFBaUI7SUFBQSxJQUFBQyxNQUFBLE9BQUFaLGVBQUEsYUFBQVcsTUFBQTtNQUFmRSxJQUFJLEdBQUFELE1BQUE7TUFBRUUsR0FBRyxHQUFBRixNQUFBO0lBQzVELElBQUlFLEdBQUcsYUFBSEEsR0FBRyxlQUFIQSxHQUFHLENBQUU5NEIsS0FBSyxJQUFJbzRCLE9BQU8sQ0FBQ1UsR0FBRyxDQUFDOTRCLEtBQUssQ0FBQyxFQUFFO01BQ3BDdzRCLFlBQVksQ0FBQ0ssSUFBSSxDQUFDLEdBQUEzM0IsYUFBQSxDQUFBQSxhQUFBLEtBQU80M0IsR0FBRztRQUFFOTRCLEtBQUssRUFBRW80QixPQUFPLENBQUNVLEdBQUcsQ0FBQzk0QixLQUFLO01BQUMsRUFBQztNQUN4RHk0QixjQUFjLEdBQUcsSUFBSTtJQUN2QjtFQUNGLENBQUMsQ0FBQztFQUNGLElBQUlBLGNBQWMsRUFBRTtJQUNsQkYsV0FBVyxDQUFDRyxPQUFPLEdBQUF4M0IsYUFBQSxDQUFBQSxhQUFBLEtBQU9vRyxLQUFLLENBQUN0RixNQUFNLENBQUMwMkIsT0FBTyxHQUFLRixZQUFZLENBQUM7RUFDbEU7O0VBRUE7RUFDQTU1QixNQUFNLENBQUNtUixNQUFNLENBQUN6SSxLQUFLLENBQUNvRCxjQUFjLENBQUMsQ0FBQ3RKLE9BQU8sQ0FBQyxVQUFBMjNCLE1BQUEsRUFBYTtJQUFBLElBQVg1cUIsS0FBSyxHQUFBNHFCLE1BQUEsQ0FBTDVxQixLQUFLO0lBQ2pELElBQU02cUIsV0FBVyxHQUFHMXhCLEtBQUssQ0FBQ3RGLE1BQU0sQ0FBQ21NLEtBQUssQ0FBQztJQUN2QyxJQUFJNnFCLFdBQVcsYUFBWEEsV0FBVyxlQUFYQSxXQUFXLENBQUV4NEIsSUFBSSxJQUFJNDNCLE9BQU8sQ0FBQ1ksV0FBVyxDQUFDeDRCLElBQUksQ0FBQyxFQUFFO01BQ2xEKzNCLFdBQVcsQ0FBQ3BxQixLQUFLLENBQUMsR0FBQWpOLGFBQUEsQ0FBQUEsYUFBQSxLQUFPODNCLFdBQVc7UUFBRXg0QixJQUFJLEVBQUU0M0IsT0FBTyxDQUFDWSxXQUFXLENBQUN4NEIsSUFBSTtNQUFDLEVBQUM7SUFDeEU7RUFDRixDQUFDLENBQUM7O0VBRUY7RUFDQSxLQUFBODNCLHFCQUFBLEdBQUloeEIsS0FBSyxDQUFDdEYsTUFBTSxDQUFDNkwsU0FBUyxjQUFBeXFCLHFCQUFBLGVBQXRCQSxxQkFBQSxDQUF3QjM0QixNQUFNLEVBQUU7SUFDbEMsSUFBTWtPLFNBQVMsR0FBR3ZHLEtBQUssQ0FBQ3RGLE1BQU0sQ0FBQzZMLFNBQVMsQ0FBQ3JHLEdBQUcsQ0FBQyxVQUFBMEcsRUFBRTtNQUFBLE9BQzdDQSxFQUFFLENBQUNDLEtBQUssSUFBSWlxQixPQUFPLENBQUNscUIsRUFBRSxDQUFDQyxLQUFLLENBQUMzTixJQUFJLENBQUMsR0FBQVUsYUFBQSxDQUFBQSxhQUFBLEtBQzFCZ04sRUFBRTtRQUFFQyxLQUFLLEVBQUFqTixhQUFBLENBQUFBLGFBQUEsS0FBTWdOLEVBQUUsQ0FBQ0MsS0FBSztVQUFFM04sSUFBSSxFQUFFNDNCLE9BQU8sQ0FBQ2xxQixFQUFFLENBQUNDLEtBQUssQ0FBQzNOLElBQUk7UUFBQztNQUFDLEtBQzFEME4sRUFBRTtJQUFBLENBQ1IsQ0FBQztJQUNELElBQUlMLFNBQVMsQ0FBQzlDLElBQUksQ0FBQyxVQUFDbUQsRUFBRSxFQUFFaFEsQ0FBQztNQUFBLE9BQUtnUSxFQUFFLEtBQUs1RyxLQUFLLENBQUN0RixNQUFNLENBQUM2TCxTQUFTLENBQUMzUCxDQUFDLENBQUM7SUFBQSxFQUFDLEVBQUU7TUFDL0RxNkIsV0FBVyxDQUFDMXFCLFNBQVMsR0FBR0EsU0FBUztJQUNuQztFQUNGOztFQUVBO0VBQ0E7RUFDQTtFQUNBLElBQU1vckIsU0FBUyxHQUFHcjZCLE1BQU0sQ0FBQ3M2QixNQUFNLENBQUN0NkIsTUFBTSxDQUFDdTZCLE1BQU0sQ0FBQ3Y2QixNQUFNLENBQUN3NkIsY0FBYyxDQUFDOXhCLEtBQUssQ0FBQyxDQUFDLEVBQUVBLEtBQUssQ0FBQztFQUNuRixJQUFJMUksTUFBTSxDQUFDZ0MsSUFBSSxDQUFDMjNCLFdBQVcsQ0FBQyxDQUFDNTRCLE1BQU0sRUFBRTtJQUNuQ3M1QixTQUFTLENBQUNqM0IsTUFBTSxHQUFBZCxhQUFBLENBQUFBLGFBQUEsS0FBT29HLEtBQUssQ0FBQ3RGLE1BQU0sR0FBS3UyQixXQUFXLENBQUM7RUFDdEQ7RUFFQSxJQUFNN29CLFNBQVMsR0FBR0osNkJBQTZCLENBQzdDK29CLFFBQVEsRUFDUmp4QixLQUFLLENBQUNwQixZQUFZLEVBQ2xCaXpCLFNBQVMsRUFDVDd4QixLQUFLLENBQUNULE1BQ1IsQ0FBQztFQUVELE9BQU8rSSxTQUFTLElBQUlBLFNBQVMsQ0FBQzJwQixhQUFhLENBQUMsQ0FBQyxHQUFHM3BCLFNBQVMsR0FBRyxJQUFJO0FBQ2xFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVM0cEIsb0JBQW9CQSxDQUNsQ2x5QixLQUFlLEVBQ2Z3QixNQUFrRCxFQUN4QztFQUFBLElBQUEyd0IsbUJBQUEsRUFBQUMsZUFBQTtFQUNWLElBQU9od0IsTUFBTSxHQUF3QlosTUFBTSxDQUFwQ1ksTUFBTTtJQUFFb2hCLElBQUksR0FBa0JoaUIsTUFBTSxDQUE1QmdpQixJQUFJO0lBQUE2TyxlQUFBLEdBQWtCN3dCLE1BQU0sQ0FBdEJ3dkIsT0FBTztJQUFQQSxPQUFPLEdBQUFxQixlQUFBLGNBQUcsQ0FBQyxDQUFDLEdBQUFBLGVBQUE7RUFDakMsSUFBTTFYLFFBQVEsR0FBRzNhLEtBQUssQ0FBQzNDLFFBQVEsQ0FBQytFLE1BQU0sQ0FBQztFQUN2QyxJQUFJLENBQUN1WSxRQUFRLEVBQUU7SUFDYixPQUFPM2EsS0FBSztFQUNkOztFQUVBO0VBQ0EsSUFBTWl4QixRQUFRLEdBQUcsSUFBQS9KLHlCQUFrQixFQUFDdk0sUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ2pEc1csUUFBUSxDQUFDcUIsWUFBWSxDQUFDOU8sSUFBSSxDQUFDOztFQUUzQjtFQUNBO0VBQ0F5TixRQUFRLENBQUNzQixjQUFjLEdBQUd0QixRQUFRLENBQUN1QixVQUFVO0VBQzdDdkIsUUFBUSxDQUFDd0IsZUFBZSxHQUFHbDFCLFNBQVM7RUFDcEMwekIsUUFBUSxDQUFDeUIsVUFBVSxHQUFHbjFCLFNBQVM7RUFDL0IwekIsUUFBUSxDQUFDMEIsU0FBUyxHQUFHLElBQUk7RUFDekIxQixRQUFRLENBQUMyQixhQUFhLEdBQUcsQ0FBQ2pZLFFBQVEsQ0FBQ2lZLGFBQWEsSUFBSSxFQUFFLEVBQ25EeHlCLEdBQUcsQ0FBQyxVQUFBaEgsSUFBSTtJQUFBLElBQUF5NUIsYUFBQTtJQUFBLFFBQUFBLGFBQUEsR0FBSTdCLE9BQU8sQ0FBQzUzQixJQUFJLENBQUMsY0FBQXk1QixhQUFBLGNBQUFBLGFBQUEsR0FBSXo1QixJQUFJO0VBQUEsRUFBQyxDQUNsQ00sTUFBTSxDQUFDLFVBQUFOLElBQUk7SUFBQSxPQUFJNjNCLFFBQVEsQ0FBQzZCLGlCQUFpQixDQUFDMTVCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUFBLEVBQUM7RUFFeEQsSUFBTTI1QixlQUFlLEdBQUcsSUFBSW5aLEdBQUcsQ0FBQ3FYLFFBQVEsQ0FBQ3hvQixNQUFNLENBQUNySSxHQUFHLENBQUMsVUFBQXJKLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNxQyxJQUFJO0VBQUEsRUFBQyxDQUFDO0VBQ2pFLElBQU02bUIsV0FBVyxHQUFBbm1CLGFBQUEsQ0FBQUEsYUFBQSxLQUFPa0csS0FBSyxDQUFDM0MsUUFBUSxXQUFBcEQsZ0JBQUEsaUJBQUdtSSxNQUFNLEVBQUc2dUIsUUFBUSxFQUFDOztFQUUzRDtFQUNBLElBQUk1ZCxVQUFVLEdBQUdyVCxLQUFLLENBQUM3QyxPQUFPLENBQzNCaUQsR0FBRyxDQUFDLFVBQUExRyxNQUFNLEVBQUk7SUFBQSxJQUFBczVCLGdCQUFBLEVBQUFDLGNBQUE7SUFDYixJQUFNQyxFQUFFLEdBQUd4NUIsTUFBTSxDQUFDMEksTUFBTSxDQUFDaWUsT0FBTyxDQUFDamUsTUFBTSxDQUFDO0lBQ3hDLElBQUk4d0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO01BQ2IsT0FBT3g1QixNQUFNO0lBQ2Y7SUFFQSxJQUFNeTVCLE9BQU8sR0FBR3o1QixNQUFNLENBQUNOLElBQUksQ0FBQzg1QixFQUFFLENBQUM7SUFDL0IsSUFBTUUsT0FBTyxJQUFBSixnQkFBQSxHQUFHaEMsT0FBTyxDQUFDbUMsT0FBTyxDQUFDLGNBQUFILGdCQUFBLGNBQUFBLGdCQUFBLEdBQUlHLE9BQU87SUFDM0MsSUFBTUUsUUFBUSxHQUFHcEMsUUFBUSxDQUFDNkIsaUJBQWlCLENBQUNNLE9BQU8sQ0FBQztJQUVwRCxJQUFJQyxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUU7TUFDbkI7TUFDQSxPQUFPMzVCLE1BQU0sQ0FBQzBJLE1BQU0sQ0FBQzdKLE1BQU0sS0FBSyxDQUFDLEdBQzdCLElBQUksR0FDSjBXLCtCQUErQixDQUFDdlYsTUFBTSxFQUFFdzVCLEVBQUUsRUFBRWpULFdBQVcsQ0FBQztJQUM5RDs7SUFFQTtJQUNBLElBQUFxVCxzQkFBQSxHQUEwQixJQUFBcGpCLDJCQUFvQixFQUFDeFcsTUFBTSxFQUFFdW1CLFdBQVcsRUFBRTdkLE1BQU0sRUFBRWd4QixPQUFPLEVBQUVGLEVBQUUsRUFBRTtRQUN2Ri9pQixXQUFXLEVBQUUraUIsRUFBRSxHQUFHO01BQ3BCLENBQUMsQ0FBQztNQUZhSyxPQUFPLEdBQUFELHNCQUFBLENBQWY1NUIsTUFBTTtJQUdiLElBQUksQ0FBQzY1QixPQUFPLEVBQUU7TUFDWixPQUFPLElBQUk7SUFDYjs7SUFFQTtJQUNBLElBQU03aEIsS0FBSyxHQUNULEVBQUF1aEIsY0FBQSxHQUFBTSxPQUFPLENBQUM3aEIsS0FBSyxjQUFBdWhCLGNBQUEsdUJBQWJBLGNBQUEsQ0FBZTc1QixJQUFJLE1BQ2xCNDNCLE9BQU8sQ0FBQ3VDLE9BQU8sQ0FBQzdoQixLQUFLLENBQUN0WSxJQUFJLENBQUMsR0FBQVUsYUFBQSxDQUFBQSxhQUFBLEtBQ3BCeTVCLE9BQU8sQ0FBQzdoQixLQUFLO01BQUV0WSxJQUFJLEVBQUU0M0IsT0FBTyxDQUFDdUMsT0FBTyxDQUFDN2hCLEtBQUssQ0FBQ3RZLElBQUk7SUFBQyxLQUNwRDI1QixlQUFlLENBQUM3N0IsR0FBRyxDQUFDcThCLE9BQU8sQ0FBQzdoQixLQUFLLENBQUN0WSxJQUFJLENBQUMsR0FDdkNtNkIsT0FBTyxDQUFDN2hCLEtBQUssR0FDYixJQUFJLENBQUM7SUFFWCxPQUFBNVgsYUFBQSxDQUFBQSxhQUFBLEtBQ0t5NUIsT0FBTztNQUNWN2hCLEtBQUssRUFBTEEsS0FBSztNQUNMO01BQ0E7TUFDQTlZLEtBQUssRUFBRSxJQUFBZ1gsZ0NBQXlCLEVBQUNsVyxNQUFNLENBQUNkLEtBQUssRUFBRTI2QixPQUFPO0lBQUM7RUFFM0QsQ0FBQyxDQUFDLENBQ0Q3NUIsTUFBTSxDQUFDZ08sT0FBTyxDQUFhOztFQUU5QjtFQUNBMkwsVUFBVSxHQUFHQSxVQUFVLENBQUNqVCxHQUFHLENBQUMsVUFBQTFHLE1BQU07SUFBQSxPQUNoQ0EsTUFBTSxDQUFDNFcsR0FBRyxHQUFHLElBQUFFLHVCQUFnQixFQUFDLElBQUFELHVCQUFnQixFQUFDN1csTUFBTSxFQUFFMlosVUFBVSxDQUFDLEVBQUVBLFVBQVUsQ0FBQyxHQUFHM1osTUFBTTtFQUFBLENBQzFGLENBQUM7O0VBRUQ7RUFDQXUzQixRQUFRLENBQUN1QyxXQUFXLENBQ2xCbmdCLFVBQVUsRUFDVnJULEtBQUssQ0FBQ2xELE1BQU0sQ0FBQ3BELE1BQU0sQ0FBQyxVQUFBd0ksQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3RILE1BQU0sQ0FBQ3dILE1BQU0sS0FBS0EsTUFBTTtFQUFBLEVBQUMsRUFDcEQsQ0FBQyxDQUNILENBQUM7O0VBRUQ7RUFDQSxJQUFNOGQsY0FBd0IsR0FBRyxFQUFFO0VBQ25DLElBQU1rUCxTQUFTLEdBQUdwdkIsS0FBSyxDQUFDbEQsTUFBTSxDQUFDc0QsR0FBRyxDQUFDLFVBQUFGLEtBQUssRUFBSTtJQUMxQyxJQUFJQSxLQUFLLENBQUN0RixNQUFNLENBQUN3SCxNQUFNLEtBQUtBLE1BQU0sRUFBRTtNQUNsQyxPQUFPbEMsS0FBSztJQUNkO0lBQ0EsSUFBTXV6QixVQUFVLEdBQUcxQywyQkFBMkIsQ0FBQzd3QixLQUFLLEVBQUU4d0IsT0FBTyxFQUFFQyxRQUFRLEVBQUVqeEIsS0FBSyxDQUFDO0lBQy9FLElBQUl5ekIsVUFBVSxFQUFFO01BQ2QsT0FBT0EsVUFBVTtJQUNuQjtJQUNBdlQsY0FBYyxDQUFDdG1CLElBQUksQ0FBQ3NHLEtBQUssQ0FBQ3pGLEVBQUUsQ0FBQztJQUM3QixPQUFPeUYsS0FBSyxDQUFDLENBQUM7RUFDaEIsQ0FBQyxDQUFDOztFQUVGO0VBQ0EsSUFBSWxDLGlCQUFpQixHQUFHZ0MsS0FBSyxDQUFDaEMsaUJBQWlCO0VBQy9DLElBQU14RCxPQUFPLElBQUEyM0IsbUJBQUEsR0FBR24wQixpQkFBaUIsY0FBQW0wQixtQkFBQSx1QkFBakJBLG1CQUFBLENBQW1CMzNCLE9BQU87RUFDMUMsSUFBTUssWUFBWSxHQUFHTCxPQUFPLGFBQVBBLE9BQU8sZ0JBQUE0M0IsZUFBQSxHQUFQNTNCLE9BQU8sQ0FBRUksTUFBTSxjQUFBdzNCLGVBQUEsZ0JBQUFBLGVBQUEsR0FBZkEsZUFBQSxDQUFpQnYzQixZQUFZLGNBQUF1M0IsZUFBQSx1QkFBN0JBLGVBQUEsQ0FBZ0Nod0IsTUFBTSxDQUFDO0VBQzVELElBQUl2SCxZQUFZLEVBQUU7SUFDaEIsSUFBTTY0QixnQkFBZ0IsR0FBRzc0QixZQUFZLENBQUNzZixPQUFPLENBQUMsVUFBQXBqQixDQUFDLEVBQUk7TUFBQSxJQUFBNDhCLGVBQUE7TUFDakQsSUFBTXY2QixJQUFJLElBQUF1NkIsZUFBQSxHQUFHM0MsT0FBTyxDQUFDajZCLENBQUMsQ0FBQ3FDLElBQUksQ0FBQyxjQUFBdTZCLGVBQUEsY0FBQUEsZUFBQSxHQUFJNThCLENBQUMsQ0FBQ3FDLElBQUk7TUFDdEMsT0FBTzI1QixlQUFlLENBQUM3N0IsR0FBRyxDQUFDa0MsSUFBSSxDQUFDLEdBQUcsQ0FBQVUsYUFBQSxDQUFBQSxhQUFBLEtBQUsvQyxDQUFDO1FBQUVxQyxJQUFJLEVBQUpBO01BQUksR0FBRSxHQUFHLEVBQUU7SUFDeEQsQ0FBQyxDQUFDO0lBQ0Y0RSxpQkFBaUIsR0FBQWxFLGFBQUEsQ0FBQUEsYUFBQSxLQUNaa0UsaUJBQWlCO01BQ3BCeEQsT0FBTyxFQUFBVixhQUFBLENBQUFBLGFBQUEsS0FDRlUsT0FBTztRQUNWSSxNQUFNLEVBQUFkLGFBQUEsQ0FBQUEsYUFBQSxLQUNEVSxPQUFPLENBQUNJLE1BQU07VUFDakJDLFlBQVksRUFBQWYsYUFBQSxDQUFBQSxhQUFBLEtBQU1VLE9BQU8sQ0FBQ0ksTUFBTSxDQUFDQyxZQUFZLFdBQUFaLGdCQUFBLGlCQUFHbUksTUFBTSxFQUFHc3hCLGdCQUFnQjtRQUFDO01BQzNFO0lBQ0YsRUFDRjtFQUNIO0VBRUEsSUFBSW54QixTQUFTLEdBQUF6SSxhQUFBLENBQUFBLGFBQUEsS0FDUmtHLEtBQUs7SUFDUjNDLFFBQVEsRUFBRTRpQixXQUFXO0lBQ3JCOWlCLE9BQU8sRUFBRWtXLFVBQVU7SUFDbkJ2VyxNQUFNLEVBQUVzeUIsU0FBUztJQUNqQnB4QixpQkFBaUIsRUFBakJBO0VBQWlCLEVBQ2xCOztFQUVEO0VBQ0F1RSxTQUFTLEdBQUcyZCxjQUFjLENBQUM1VCxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFOVIsRUFBRTtJQUFBLE9BQUtzWixrQkFBa0IsQ0FBQ3hILElBQUksRUFBRTtNQUFDOVIsRUFBRSxFQUFGQTtJQUFFLENBQUMsQ0FBQztFQUFBLEdBQUU4SCxTQUFTLENBQUM7O0VBRTFGO0VBQ0FBLFNBQVMsR0FBR3FNLHdCQUF3QixDQUFDck0sU0FBUyxFQUFFSCxNQUFNLENBQUM7RUFFdkQsT0FBT0csU0FBUztBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTOGdCLHVCQUF1QkEsQ0FDckNyakIsS0FBUSxFQUNSd0IsTUFBbUQsRUFDaEQ7RUFBQSxJQUFBb3lCLHFCQUFBO0VBQ0g7RUFDQSxJQUFNQyxlQUFlLEdBQUcsQ0FBQyxHQUFHcnlCLE1BQU0sQ0FBQzZmLE9BQU87RUFDMUMsSUFBTXlTLFNBQVMsSUFBQUYscUJBQUEsR0FBRzV6QixLQUFLLENBQUN2QixTQUFTLENBQUNvMUIsZUFBZSxDQUFDLGNBQUFELHFCQUFBLHVCQUFoQ0EscUJBQUEsQ0FBa0M5MkIsTUFBTTtFQUMxRCxJQUFPQSxNQUFNLEdBQUlrRCxLQUFLLENBQWZsRCxNQUFNOztFQUViO0VBQ0EsSUFBTXN5QixTQUFTLEdBQUd0eUIsTUFBTSxDQUFDc0QsR0FBRyxDQUFDLFVBQUFGLEtBQUs7SUFBQSxPQUNoQzR6QixTQUFTLElBQUksQ0FBQ0EsU0FBUyxDQUFDNXpCLEtBQUssQ0FBQ3pGLEVBQUUsQ0FBQyxJQUFJeUYsS0FBSyxDQUFDdEYsTUFBTSxDQUFDNkYsU0FBUyxHQUN2RFAsS0FBSyxDQUFDaUYsaUJBQWlCLENBQUM7TUFDdEI7TUFDQTFFLFNBQVMsRUFBRTtJQUNiLENBQUMsQ0FBQyxHQUNGUCxLQUFLO0VBQUEsQ0FDWCxDQUFDOztFQUVEO0VBQ0EsT0FBQXBHLGFBQUEsQ0FBQUEsYUFBQSxLQUNLa0csS0FBSztJQUNSbEQsTUFBTSxFQUFFc3lCLFNBQVM7SUFDakIzd0IsU0FBUyxFQUFFO0VBQUU7QUFFakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1zMUIsZ0JBQWdCLEdBQUF4NUIsT0FBQSxDQUFBdzVCLGdCQUFBLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FDM0IvekIsS0FBZSxFQUNmd0IsTUFBOEMsRUFDakM7RUFDYixJQUFPd3lCLEtBQUssR0FBaUN4eUIsTUFBTSxDQUE1Q3d5QixLQUFLO0lBQUFDLGdCQUFBLEdBQWlDenlCLE1BQU0sQ0FBckMweUIsUUFBUTtJQUFSQSxRQUFRLEdBQUFELGdCQUFBLGNBQUdFLHlCQUFnQixHQUFBRixnQkFBQTtFQUN6QyxJQUFJLENBQUNELEtBQUssQ0FBQ3o3QixNQUFNLEVBQUU7SUFDakIsT0FBT3lILEtBQUs7RUFDZDtFQUVBLElBQU1vMEIsY0FBYyxHQUFHaDhCLEtBQUssQ0FBQ2lCLElBQUksQ0FBQzI2QixLQUFLLENBQUM7RUFDeEMsSUFBTUssV0FBVyxHQUFHLElBQUFDLDJCQUFlLEVBQUNGLGNBQWMsQ0FBQztFQUNuRCxJQUFJLENBQUNDLFdBQVcsQ0FBQzk3QixNQUFNLEVBQUU7SUFDdkIsT0FBT3lILEtBQUs7RUFDZDtFQUVBLElBQU1mLG1CQUFtQixHQUFHbzFCLFdBQVcsQ0FBQy9uQixNQUFNLENBQzVDLFVBQUNDLElBQUksRUFBRXhWLENBQUMsRUFBRUQsQ0FBQztJQUFBLE9BQUssSUFBQXlhLHVCQUFNLEVBQUNnakIsMEJBQTBCLENBQUN4OUIsQ0FBQyxFQUFFRCxDQUFDLENBQUMsQ0FBQyxDQUFDeVYsSUFBSSxDQUFDO0VBQUEsR0FDOUQsQ0FBQyxDQUNILENBQUM7RUFFRCxJQUFNdk4sV0FBVyxHQUFHO0lBQ2xCdzFCLFNBQVMsRUFBRSxFQUFFO0lBQ2JILFdBQVcsRUFBWEEsV0FBVztJQUNYRCxjQUFjLEVBQWRBLGNBQWM7SUFDZEYsUUFBUSxFQUFSQTtFQUNGLENBQUM7RUFFRCxJQUFNM3hCLFNBQVMsR0FBRyxJQUFBZ1AsdUJBQU0sRUFBQztJQUFDdFMsbUJBQW1CLEVBQW5CQSxtQkFBbUI7SUFBRUQsV0FBVyxFQUFYQTtFQUFXLENBQUMsQ0FBQyxDQUFDZ0IsS0FBSyxDQUFDO0VBRW5FLE9BQU95MEIsbUJBQW1CLENBQUNseUIsU0FBUyxDQUFDO0FBQ3ZDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNteUIsMEJBQTBCQSxDQUN4QzEwQixLQUFlLEVBQ2Z3QixNQUFpRCxFQUN2QztFQUNWLElBQUksQ0FBQ3hCLEtBQUssQ0FBQ2hCLFdBQVcsRUFBRTtJQUN0QixPQUFPZ0IsS0FBSztFQUNkO0VBQ0EsSUFBTzIwQixRQUFRLEdBQWVuekIsTUFBTSxDQUE3Qm16QixRQUFRO0lBQUVILFNBQVMsR0FBSWh6QixNQUFNLENBQW5CZ3pCLFNBQVM7RUFDMUIsSUFBQUksa0JBQUEsR0FBZ0M1MEIsS0FBSyxDQUFDaEIsV0FBVztJQUExQ3ExQixXQUFXLEdBQUFPLGtCQUFBLENBQVhQLFdBQVc7SUFBRUgsUUFBUSxHQUFBVSxrQkFBQSxDQUFSVixRQUFRO0VBQzVCLElBQU1XLGlCQUFpQixHQUFHQyxnQ0FBZ0MsQ0FBQzkwQixLQUFLLEVBQUU7SUFDaEUyMEIsUUFBUSxFQUFSQSxRQUFRO0lBQ1JyTSxRQUFRLEVBQUU7TUFBQ0ssT0FBTyxFQUFFLENBQUM7TUFBRXBDLE9BQU8sRUFBRTtJQUFNO0VBQ3hDLENBQUMsQ0FBQzs7RUFFRjtFQUNBLElBQU13TyxjQUFjLEdBQUcsSUFBQXpqQixzQkFBSyxFQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUFDLHVCQUFNLEVBQUM7SUFBQ2lqQixTQUFTLEVBQVRBO0VBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ssaUJBQWlCLENBQUM7RUFFbkYsT0FBTyxJQUFBeE0sZUFBUSxFQUNiME0sY0FBYyxFQUNkLElBQUFDLGlCQUFVLEVBQUMsR0FBRyxDQUFDLENBQUM1MEIsR0FBRyxDQUFDaTBCLFdBQVcsQ0FBQzk3QixNQUFNLEdBQUcwOEIscUJBQVksR0FBRztJQUFBLE9BQU1mLFFBQVEsQ0FBQ00sU0FBUyxDQUFDO0VBQUEsRUFDbkYsQ0FBQztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxtQkFBbUJBLENBQUN6MEIsS0FBZSxFQUFZO0VBQzdELElBQUksQ0FBQ0EsS0FBSyxDQUFDaEIsV0FBVyxFQUFFO0lBQ3RCLE9BQU9nQixLQUFLO0VBQ2Q7RUFDQSxJQUFPcTBCLFdBQVcsR0FBSXIwQixLQUFLLENBQUNoQixXQUFXLENBQWhDcTFCLFdBQVc7RUFDbEIsSUFBQWEsWUFBQSxPQUFBQyxTQUFBLGFBQXdDZCxXQUFXO0lBQTVDZSxJQUFJLEdBQUFGLFlBQUE7SUFBS0csb0JBQW9CLEdBQUFILFlBQUEsQ0FBQWg4QixLQUFBOztFQUVwQztFQUNBLElBQU1xSixTQUFTLEdBQUcsSUFBQStPLHNCQUFLLEVBQUMsYUFBYSxDQUFDLENBQUMsSUFBQUMsdUJBQU0sRUFBQztJQUFDOGlCLFdBQVcsRUFBRWdCO0VBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUNyMUIsS0FBSyxDQUFDO0VBRTFGLElBQU02MEIsaUJBQWlCLEdBQUdDLGdDQUFnQyxDQUFDdnlCLFNBQVMsRUFBRTtJQUNwRW95QixRQUFRLEVBQUVTLElBQUksQ0FBQ2g4QixJQUFJO0lBQ25Ca3ZCLFFBQVEsRUFBRTtNQUFDSyxPQUFPLEVBQUUsQ0FBQztNQUFFcEMsT0FBTyxFQUFFO0lBQVk7RUFDOUMsQ0FBQyxDQUFDO0VBRUYsSUFBT3BuQixPQUFPLEdBQWlCYSxLQUFLLENBQTdCYixPQUFPO0lBQUVDLFdBQVcsR0FBSVksS0FBSyxDQUFwQlosV0FBVztFQUMzQixPQUFPLElBQUFpcEIsZUFBUSxFQUNid00saUJBQWlCLEVBQ2pCUyxnQkFBZ0IsQ0FDZEYsSUFBSSxFQUNKN3lCLFNBQVMsQ0FBQ3ZELFdBQVcsSUFBSXVELFNBQVMsQ0FBQ3ZELFdBQVcsQ0FBQ3cxQixTQUFTLEVBQ3hEcjFCLE9BQU8sRUFDUEMsV0FBVyxFQUNYbUQsU0FBUyxDQUFDdkQsV0FBVyxHQUFHdUQsU0FBUyxDQUFDdkQsV0FBVyxDQUFDbzFCLGNBQWMsR0FBRzcyQixTQUNqRSxDQUNGLENBQUM7QUFDSDtBQUVPLFNBQVMrM0IsZ0JBQWdCQSxDQUM5QkYsSUFBSSxFQUNKWixTQUFTLEVBSVQ7RUFBQSxJQUhBcjFCLE9BQWlCLEdBQUFwRixTQUFBLENBQUF4QixNQUFBLFFBQUF3QixTQUFBLFFBQUF3RCxTQUFBLEdBQUF4RCxTQUFBLE1BQUcsRUFBRTtFQUFBLElBQ3RCcUYsV0FBVyxHQUFBckYsU0FBQSxDQUFBeEIsTUFBQSxRQUFBd0IsU0FBQSxRQUFBd0QsU0FBQSxHQUFBeEQsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUFBLElBQ2hCcTZCLGNBQXVCLEdBQUFyNkIsU0FBQSxDQUFBeEIsTUFBQSxPQUFBd0IsU0FBQSxNQUFBd0QsU0FBQTtFQUV2QixPQUFPLElBQUFnNEIscUJBQWMsRUFBQztJQUFDSCxJQUFJLEVBQUpBLElBQUk7SUFBRVosU0FBUyxFQUFUQSxTQUFTO0lBQUVyMUIsT0FBTyxFQUFQQSxPQUFPO0lBQUVDLFdBQVcsRUFBWEEsV0FBVztJQUFFZzFCLGNBQWMsRUFBZEE7RUFBYyxDQUFDLENBQUMsQ0FBQ3hMLEtBQUs7RUFDbEY7RUFDQTtFQUNBLFVBQUE0TSxHQUFHO0lBQUEsT0FDRCxJQUFBQyxzQkFBYSxFQUFDO01BQ1pELEdBQUcsRUFBSEEsR0FBRztNQUNIYixRQUFRLEVBQUVTLElBQUksQ0FBQ2g4QixJQUFJO01BQ25CODZCLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFFNXFCLE1BQU07UUFBQSxPQUNkLElBQUFvc0IsMkJBQWtCLEVBQUM7VUFDakJDLE9BQU8sRUFBRXJzQixNQUFNO1VBQ2ZrckIsU0FBUyxFQUFUQTtRQUNGLENBQUMsQ0FBQztNQUFBO0lBQ04sQ0FBQyxDQUFDO0VBQUE7RUFFSjtFQUNBLFVBQUF2d0IsR0FBRztJQUFBLE9BQUksSUFBQTJ4QixxQkFBWSxFQUFDUixJQUFJLENBQUNoOEIsSUFBSSxFQUFFNkssR0FBRyxDQUFDO0VBQUEsQ0FDckMsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTNHhCLHlCQUF5QkEsQ0FDdkM3MUIsS0FBZSxFQUNmd0IsTUFBdUQsRUFDN0M7RUFDVixJQUFBczBCLGdCQUFBLEdBQTZCdDBCLE1BQU0sQ0FBQzZmLE9BQU87SUFBcENzVSxPQUFPLEdBQUFHLGdCQUFBLENBQVBILE9BQU87SUFBRW5CLFNBQVMsR0FBQXNCLGdCQUFBLENBQVR0QixTQUFTO0VBRXpCLElBQU1LLGlCQUFpQixHQUFHQyxnQ0FBZ0MsQ0FBQzkwQixLQUFLLEVBQUU7SUFDaEUyMEIsUUFBUSxFQUFFZ0IsT0FBTyxDQUFDaEIsUUFBUTtJQUMxQnJNLFFBQVEsRUFBRTtNQUFDSyxPQUFPLEVBQUUsQ0FBQztNQUFFcEMsT0FBTyxFQUFFO0lBQWU7RUFDakQsQ0FBQyxDQUFDO0VBRUYsT0FBTyxJQUFBOEIsZUFBUSxFQUNid00saUJBQWlCLEVBQ2pCLElBQUFrQix3QkFBaUIsRUFBQztJQUFDSixPQUFPLEVBQVBBLE9BQU87SUFBRW5CLFNBQVMsRUFBVEE7RUFBUyxDQUFDLENBQUMsQ0FBQzVMLEtBQUssQ0FDM0MsVUFBQXRmLE1BQU07SUFBQSxPQUFJLElBQUEwc0IsNEJBQW1CLEVBQUM7TUFBQ3JCLFFBQVEsRUFBRWdCLE9BQU8sQ0FBQ2hCLFFBQVE7TUFBRUgsU0FBUyxFQUFFbHJCO0lBQU0sQ0FBQyxDQUFDO0VBQUEsR0FDOUUsVUFBQXJGLEdBQUc7SUFBQSxPQUFJLElBQUEyeEIscUJBQVksRUFBQ0QsT0FBTyxDQUFDaEIsUUFBUSxFQUFFMXdCLEdBQUcsQ0FBQztFQUFBLENBQzVDLENBQ0YsQ0FBQztBQUNIOztBQUVBO0FBQ08sU0FBU2d5QixhQUFhQSxDQUFBLEVBQThCO0VBQUEsSUFBN0JDLFlBQVksR0FBQW44QixTQUFBLENBQUF4QixNQUFBLFFBQUF3QixTQUFBLFFBQUF3RCxTQUFBLEdBQUF4RCxTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBQUEsSUFBRXV1QixRQUFRLEdBQUF2dUIsU0FBQSxDQUFBeEIsTUFBQSxPQUFBd0IsU0FBQSxNQUFBd0QsU0FBQTtFQUN2RDtFQUNBO0VBQ0EsSUFBSSxDQUFDK3FCLFFBQVEsSUFBSSxDQUFDQSxRQUFRLENBQUNLLE9BQU8sRUFBRTtJQUNsQyxPQUFPLENBQUMsQ0FBQztFQUNYO0VBRUEsT0FBTztJQUNMQSxPQUFPLEVBQUVMLFFBQVEsQ0FBQ0s7RUFDcEIsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNd04sb0JBQW9CLEdBQUE1N0IsT0FBQSxDQUFBNDdCLG9CQUFBLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FDL0JuMkIsS0FBZSxFQUFBbzJCLE1BQUEsRUFJRjtFQUFBLElBQUFDLGlCQUFBO0VBQUEsSUFBQUMsY0FBQSxHQUFBRixNQUFBLENBRlgvVSxPQUFPO0lBQUdtVSxHQUFHLEdBQUFjLGNBQUEsQ0FBSGQsR0FBRztJQUFFYixRQUFRLEdBQUEyQixjQUFBLENBQVIzQixRQUFRO0lBQUVyTSxRQUFRLEdBQUFnTyxjQUFBLENBQVJoTyxRQUFRO0lBQUVpTyxXQUFXLEdBQUFELGNBQUEsQ0FBWEMsV0FBVztJQUFFckMsUUFBUSxHQUFBb0MsY0FBQSxDQUFScEMsUUFBUTtFQUcxRCxJQUFNVyxpQkFBaUIsR0FBR0MsZ0NBQWdDLENBQUM5MEIsS0FBSyxFQUFFO0lBQ2hFMjBCLFFBQVEsRUFBUkEsUUFBUTtJQUNSck0sUUFBUSxFQUFFMk4sYUFBYSxDQUFDajJCLEtBQUssQ0FBQ2YsbUJBQW1CLENBQUMwMUIsUUFBUSxDQUFDLEVBQUVyTSxRQUFRO0VBQ3ZFLENBQUMsQ0FBQztFQUVGLE9BQU8sSUFBQUQsZUFBUSxFQUFDd00saUJBQWlCLEtBQUF6dEIsTUFBQSxLQUFBQyxtQkFBQSxhQUMzQixJQUFBbXZCLDJCQUFvQixFQUFDLENBQUMsQ0FBQ0MsMEJBQTBCLElBQ3JEOUIsUUFBUSxDQUFDK0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUMxQixDQUFBSCxXQUFXLGFBQVhBLFdBQVcsZ0JBQUFGLGlCQUFBLEdBQVhFLFdBQVcsQ0FBRS9TLElBQUksY0FBQTZTLGlCQUFBLHVCQUFqQkEsaUJBQUEsQ0FBbUI5OUIsTUFBTSxJQUFHLENBQUMsR0FDekI7RUFDRTtFQUNBO0VBQ0EsSUFBQXc5Qix3QkFBaUIsRUFBQztJQUNoQkosT0FBTyxFQUFBNzdCLGFBQUEsQ0FBQUEsYUFBQSxLQUFNeThCLFdBQVc7TUFBRUksZ0JBQWdCLEVBQUU7SUFBSSxFQUFDO0lBQ2pEbkMsU0FBUyxFQUFFO0VBQ2IsQ0FBQyxDQUFDLENBQUM1TCxLQUFLLENBQ04sVUFBQXRmLE1BQU07SUFBQSxPQUFJLElBQUE2cUIseUJBQWdCLEVBQUM3cUIsTUFBTSxDQUFDO0VBQUEsR0FDbEMsVUFBQXJGLEdBQUc7SUFBQSxPQUFJLElBQUEyeEIscUJBQVksRUFBQ2pCLFFBQVEsRUFBRTF3QixHQUFHLENBQUM7RUFBQSxDQUNwQyxDQUFDLENBQ0YsR0FDRCxFQUFFLElBQ04sSUFBQTJ5QixrQkFBVyxFQUFDcEIsR0FBRyxDQUFDejhCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzZ2QixLQUFLLENBQzNCLFVBQUFpTyxNQUFBLEVBQW1CO0lBQUEsSUFBakJqK0IsS0FBSyxHQUFBaStCLE1BQUEsQ0FBTGorQixLQUFLO01BQUVELElBQUksR0FBQWsrQixNQUFBLENBQUpsK0IsSUFBSTtJQUNYLE9BQU9BLElBQUksR0FDUHU3QixRQUFRLENBQUNxQyxXQUFXLENBQUMsR0FDckIsSUFBQWQsc0JBQWEsRUFBQztNQUNaRCxHQUFHLEVBQUhBLEdBQUc7TUFDSGIsUUFBUSxFQUFSQSxRQUFRO01BQ1JyTSxRQUFRLEVBQUUxdkIsS0FBSyxDQUFDMHZCLFFBQVE7TUFDeEJpTyxXQUFXLEVBQUUzOUIsS0FBSztNQUNsQnM3QixRQUFRLEVBQVJBO0lBQ0YsQ0FBQyxDQUFDO0VBQ1IsQ0FBQyxFQUNELFVBQUFqd0IsR0FBRztJQUFBLE9BQUksSUFBQTJ4QixxQkFBWSxFQUFDakIsUUFBUSxFQUFFMXdCLEdBQUcsQ0FBQztFQUFBLENBQ3BDLENBQUMsRUFDRixDQUFDO0FBQ0osQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTTZ5QixtQkFBbUIsR0FBQXY4QixPQUFBLENBQUF1OEIsbUJBQUEsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUM5QjkyQixLQUFlLEVBQUErMkIsTUFBQSxFQUVGO0VBQUEsSUFEWnB0QixLQUFLLEdBQUFvdEIsTUFBQSxDQUFMcHRCLEtBQUs7SUFBRWdyQixRQUFRLEdBQUFvQyxNQUFBLENBQVJwQyxRQUFRO0VBRWhCO0VBQ0FqckIsZUFBTyxDQUFDaUssSUFBSSxDQUFDaEssS0FBSyxDQUFDO0VBQ25CLElBQUksQ0FBQzNKLEtBQUssQ0FBQ2hCLFdBQVcsRUFBRTtJQUN0QixPQUFPZ0IsS0FBSztFQUNkO0VBQ0EsSUFBQWczQixtQkFBQSxHQUEyQ2gzQixLQUFLLENBQUNoQixXQUFXO0lBQXJEcTFCLFdBQVcsR0FBQTJDLG1CQUFBLENBQVgzQyxXQUFXO0lBQUVILFFBQVEsR0FBQThDLG1CQUFBLENBQVI5QyxRQUFRO0lBQUVNLFNBQVMsR0FBQXdDLG1CQUFBLENBQVR4QyxTQUFTO0VBRXZDLElBQU1qeUIsU0FBUyxHQUFHdXlCLGdDQUFnQyxDQUFDOTBCLEtBQUssRUFBRTtJQUN4RDIwQixRQUFRLEVBQVJBLFFBQVE7SUFDUnJNLFFBQVEsRUFBRTtNQUFDM2UsS0FBSyxFQUFMQTtJQUFLO0VBQ2xCLENBQUMsQ0FBQzs7RUFFRjtFQUNBLE9BQU8sSUFBQTBlLGVBQVEsRUFDYjlsQixTQUFTLEVBQ1QsSUFBQXl5QixpQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDNTBCLEdBQUcsQ0FBQ2kwQixXQUFXLENBQUM5N0IsTUFBTSxHQUFHMDhCLHFCQUFZLEdBQUc7SUFBQSxPQUFNZixRQUFRLENBQUNNLFNBQVMsQ0FBQztFQUFBLEVBQ25GLENBQUM7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNeUMscUJBQXFCLEdBQUExOEIsT0FBQSxDQUFBMDhCLHFCQUFBLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FDaENqM0IsS0FBZSxFQUFBazNCLE1BQUEsRUFFRjtFQUFBLElBRFo5MEIsTUFBTSxHQUFBODBCLE1BQUEsQ0FBTjkwQixNQUFNO0VBRVA7RUFDQSxJQUFNKzBCLE9BQU8sR0FBRyxJQUFBdnBCLG9CQUFPLEVBQUN4TCxNQUFNLENBQUM7RUFFL0IsT0FBTyswQixPQUFPLENBQUM3cUIsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRTlSLEVBQUU7SUFBQSxPQUFLLElBQUEyOEIsdUJBQWdCLEVBQUM3cUIsSUFBSSxFQUFFOVIsRUFBRSxDQUFDO0VBQUEsR0FBRXVGLEtBQUssQ0FBQztBQUN4RSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNcTNCLGlCQUFpQixHQUFBOThCLE9BQUEsQ0FBQTg4QixpQkFBQSxHQUFHLFNBQXBCQSxpQkFBaUJBLENBQzVCcjNCLEtBQWUsRUFDZndCLE1BQStDO0VBQUEsT0FBQTFILGFBQUEsQ0FBQUEsYUFBQSxLQUU1Q2tHLEtBQUs7SUFDUnJELE9BQU8sRUFBQTdDLGFBQUEsQ0FBQUEsYUFBQSxLQUNGa0csS0FBSyxDQUFDckQsT0FBTyxHQUNiNkUsTUFBTSxDQUFDNGdCLElBQUk7RUFDZjtBQUFBLENBQ0Q7QUFDRjtBQUNBO0FBQ0E7QUFDTyxTQUFTa04sZ0JBQWdCQSxDQUM5QnR2QixLQUFlLEVBQ2YzQyxRQUFrQixFQUNxQjtFQUN2QyxJQUFNaTZCLEtBQWMsR0FBRyxFQUFFO0VBQ3pCLElBQU1DLGFBQWEsR0FBRy8vQixNQUFNLENBQUNtUixNQUFNLENBQUN0TCxRQUFRLENBQUMsQ0FBQ2lQLE1BQU0sQ0FBQyxVQUFDQyxJQUFhLEVBQUVwSyxPQUFPLEVBQUs7SUFDL0UsSUFBTXExQixXQUFXLEdBQUcsSUFBQUMsNEJBQWdCLEVBQUN0MUIsT0FBTyxFQUFFbkMsS0FBSyxDQUFDcEIsWUFBWSxDQUFDO0lBQ2pFLE9BQU80NEIsV0FBVyxJQUFJQSxXQUFXLENBQUNqL0IsTUFBTSxHQUFHZ1UsSUFBSSxDQUFDbkYsTUFBTSxDQUFDb3dCLFdBQVcsQ0FBQyxHQUFHanJCLElBQUk7RUFDNUUsQ0FBQyxFQUFFK3FCLEtBQUssQ0FBQztFQUVULE9BQU87SUFDTHQzQixLQUFLLEVBQUFsRyxhQUFBLENBQUFBLGFBQUEsS0FDQWtHLEtBQUs7TUFDUmxELE1BQU0sS0FBQXNLLE1BQUEsS0FBQUMsbUJBQUEsYUFBTXJILEtBQUssQ0FBQ2xELE1BQU0sT0FBQXVLLG1CQUFBLGFBQUtrd0IsYUFBYSxFQUFDO01BQzNDdDZCLFVBQVUsS0FBQW1LLE1BQUEsS0FBQUMsbUJBQUEsYUFFTCxJQUFBcXdCLG1DQUF1QixFQUFDSCxhQUFhLENBQUMsT0FBQWx3QixtQkFBQSxhQUN0Q3JILEtBQUssQ0FBQy9DLFVBQVU7SUFDcEIsRUFDRjtJQUNEbXlCLFNBQVMsRUFBRW1JO0VBQ2IsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVM1SCxrQkFBa0JBLENBQUMzdkIsS0FBSyxFQUFFbUMsT0FBTyxFQUFFO0VBQ2pELElBQU1zdEIsYUFBYSxHQUFHLElBQUFrSSxrQ0FBZ0IsRUFBQTc5QixhQUFBLENBQUFBLGFBQUEsS0FDakNxSSxPQUFPO0lBQ1Y1RCxrQkFBa0IsRUFBRXlCLEtBQUssQ0FBQ3pCO0VBQWtCLEVBQzdDLENBQUM7RUFDRixJQUFNcTVCLE1BQU0sR0FBQTk5QixhQUFBLENBQUFBLGFBQUEsS0FDUGtHLEtBQUssQ0FBQ2hDLGlCQUFpQixDQUFDeEQsT0FBTyxDQUFDSSxNQUFNLENBQUNDLFlBQVksR0FDbkQ0MEIsYUFBYSxDQUNqQjtFQUVELE9BQU8sSUFBQXI0QixVQUFHLEVBQUMsQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxFQUFFd2dDLE1BQU0sRUFBRTUzQixLQUFLLENBQUM7QUFDdkY7QUFFTyxTQUFTdTBCLDBCQUEwQkEsQ0FBQ2EsSUFBSSxFQUFFbmpCLEtBQUssRUFBRTtFQUN0RCxJQUFNMGlCLFFBQVEsR0FBR1MsSUFBSSxDQUFDaDhCLElBQUkscUJBQUFnTyxNQUFBLENBQXFCNkssS0FBSyxDQUFFO0VBQ3RELFdBQUFoWSxnQkFBQSxpQkFDRzA2QixRQUFRLEVBQUc7SUFDVjtJQUNBaE0sT0FBTyxFQUFFLENBQUM7SUFDVnBDLE9BQU8sRUFBRSxFQUFFO0lBQ1hvTyxRQUFRLEVBQVJBLFFBQVE7SUFDUmhyQixLQUFLLEVBQUU7RUFDVCxDQUFDO0FBRUw7QUFFTyxTQUFTbXJCLGdDQUFnQ0EsQ0FBQzkwQixLQUFLLEVBQUE2M0IsTUFBQSxFQUF3QjtFQUFBLElBQXJCbEQsUUFBUSxHQUFBa0QsTUFBQSxDQUFSbEQsUUFBUTtJQUFFck0sUUFBUSxHQUFBdVAsTUFBQSxDQUFSdlAsUUFBUTtFQUN6RTtFQUNBLE9BQU8sSUFBQWhYLHNCQUFLLEVBQUMscUJBQXFCLENBQUMsQ0FBQyxJQUFBQSxzQkFBSyxFQUFDcWpCLFFBQVEsQ0FBQyxDQUFDLElBQUFwakIsdUJBQU0sRUFBQytXLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RvQixLQUFLLENBQUM7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTNE8sd0JBQXdCQSxDQUN0QzVPLEtBQVEsRUFDUm9DLE1BQXlCLEVBQ3pCZ08sYUFBc0IsRUFDbkI7RUFDSCxJQUFNK21CLE9BQU8sR0FBRyxPQUFPLzBCLE1BQU0sS0FBSyxRQUFRLEdBQUcsQ0FBQ0EsTUFBTSxDQUFDLEdBQUdBLE1BQU07RUFDOUQsSUFBTWd0QixTQUFrQixHQUFHLEVBQUU7RUFDN0IsSUFBTTNiLFlBQW1CLEdBQUcsRUFBRTtFQUU5QnpULEtBQUssQ0FBQ2xELE1BQU0sQ0FBQzlDLE9BQU8sQ0FBQyxVQUFDZ0ksUUFBUSxFQUFFbEwsQ0FBQyxFQUFLO0lBQ3BDLElBQUlrTCxRQUFRLENBQUNwSCxNQUFNLENBQUN3SCxNQUFNLElBQUkrMEIsT0FBTyxDQUFDbHdCLFFBQVEsQ0FBQ2pGLFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQ3dILE1BQU0sQ0FBQyxFQUFFO01BQ3RFO01BQ0EsSUFBTUMsUUFBUSxHQUNaK04sYUFBYSxJQUFJQSxhQUFhLENBQUMwbkIsV0FBVyxHQUN0QzkxQixRQUFRLEdBQ1JBLFFBQVEsQ0FBQ21ILGlCQUFpQixDQUFDbkosS0FBSyxDQUFDM0MsUUFBUSxFQUFFK1MsYUFBYSxDQUFDO01BRS9ELElBQUEybkIsb0JBQUEsR0FBMkIsSUFBQXh5Qiw4QkFBa0IsRUFBQ2xELFFBQVEsRUFBRXJDLEtBQUssRUFBRUEsS0FBSyxDQUFDakQsU0FBUyxDQUFDakcsQ0FBQyxDQUFDLENBQUM7UUFBM0VpRyxTQUFTLEdBQUFnN0Isb0JBQUEsQ0FBVGg3QixTQUFTO1FBQUVtRCxLQUFLLEdBQUE2M0Isb0JBQUEsQ0FBTDczQixLQUFLO01BRXZCa3ZCLFNBQVMsQ0FBQ3gxQixJQUFJLENBQUNzRyxLQUFLLENBQUM7TUFDckJ1VCxZQUFZLENBQUM3WixJQUFJLENBQUNtRCxTQUFTLENBQUM7SUFDOUIsQ0FBQyxNQUFNO01BQ0xxeUIsU0FBUyxDQUFDeDFCLElBQUksQ0FBQ29JLFFBQVEsQ0FBQztNQUN4QnlSLFlBQVksQ0FBQzdaLElBQUksQ0FBQ29HLEtBQUssQ0FBQ2pELFNBQVMsQ0FBQ2pHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBTTBKLFFBQVEsR0FBQTFHLGFBQUEsQ0FBQUEsYUFBQSxLQUNUa0csS0FBSztJQUNSbEQsTUFBTSxFQUFFc3lCLFNBQVM7SUFDakJyeUIsU0FBUyxFQUFFMFc7RUFBWSxFQUN4QjtFQUVELE9BQU9qVCxRQUFRO0FBQ2pCO0FBRU8sU0FBU0sscUJBQXFCQSxDQUFxQmIsS0FBUSxFQUFLO0VBQUEsSUFBQWc0QixjQUFBO0VBQ3JFO0VBQ0EsSUFBTUMsZ0JBQWdCLEdBQUcsSUFBQXZ6QixpQ0FBMEIsRUFBQzFFLEtBQUssQ0FBQ2xELE1BQU0sQ0FBQztFQUVqRSxJQUFJLENBQUNtN0IsZ0JBQWdCLENBQUMxL0IsTUFBTSxFQUFFO0lBQzVCLE9BQUF1QixhQUFBLENBQUFBLGFBQUEsS0FDS2tHLEtBQUs7TUFDUmxCLGVBQWUsRUFBQWhGLGFBQUEsQ0FBQUEsYUFBQSxLQUNWa0csS0FBSyxDQUFDbEIsZUFBZTtRQUN4QnJELE1BQU0sRUFBRSxJQUFJO1FBQ1pHLFdBQVcsRUFBRSxLQUFLO1FBQ2xCQyxTQUFTLEVBQUUsSUFBSTtRQUNmRyxpQkFBaUIsRUFBRTtNQUFJO0lBQ3hCO0VBRUw7RUFFQSxJQUFNazhCLFlBQVksR0FBR0QsZ0JBQWdCLENBQUM3M0IsR0FBRyxDQUFDLFVBQUE4QixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDdEgsTUFBTSxDQUFDZ0csU0FBUyxDQUFDbkYsTUFBTSxJQUFJLEVBQUU7RUFBQSxFQUFDO0VBQy9FO0VBQ0EsSUFBTTA4QixZQUFZLEdBQUcsSUFBQUMsdUJBQWdCLEVBQUNGLFlBQVksQ0FBQztFQUNuRCxJQUFNbDhCLGlCQUFpQixHQUFHLElBQUFxOEIsa0NBQTJCLEVBQUNGLFlBQVksQ0FBQzs7RUFFbkU7RUFDQSxJQUFJRyxlQUFnQyxHQUFHLElBQUE3cEIsZ0JBQUksRUFDekN3cEIsZ0JBQWdCLENBQUMzckIsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRXJNLEtBQUssRUFBSztJQUN2Q3FNLElBQUksQ0FBQzNTLElBQUksQ0FBQUMsS0FBQSxDQUFUMFMsSUFBSSxNQUFBbEYsbUJBQUEsYUFBVW5ILEtBQUssQ0FBQ3RGLE1BQU0sQ0FBQ2dHLFNBQVMsQ0FBQy9FLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RCxPQUFPMFEsSUFBSTtFQUNiLENBQUMsRUFBRSxFQUFFLENBQ1AsQ0FBQyxDQUFDZ3NCLElBQUksQ0FBQyxDQUFDO0VBRVJELGVBQWUsR0FBR0EsZUFBZSxDQUFDLy9CLE1BQU0sR0FBRysvQixlQUFlLEdBQUcsSUFBSTs7RUFFakU7RUFDQSxJQUFNcDhCLFFBQVEsR0FBR284QixlQUFlLEdBQzNCRSxxQkFBVSxJQUFJLElBQUksR0FBR0MsY0FBRyxDQUFDLEdBQUlILGVBQWUsQ0FBQy8vQixNQUFNLElBQUl5SCxLQUFLLENBQUNsQixlQUFlLENBQUNuRCxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQ3pGLElBQUk7RUFFUixJQUFNNEcsU0FBUyxHQUFBekksYUFBQSxDQUFBQSxhQUFBLEtBQ1ZrRyxLQUFLO0lBQ1JsQixlQUFlLEVBQUFoRixhQUFBLENBQUFBLGFBQUEsS0FDVmtHLEtBQUssQ0FBQ2xCLGVBQWU7TUFDeEJyRCxNQUFNLEVBQUUwOEIsWUFBWTtNQUNwQm44QixpQkFBaUIsRUFBakJBLGlCQUFpQjtNQUNqQkUsUUFBUSxFQUFSQSxRQUFRO01BQ1JMLFNBQVMsRUFBRXk4QjtJQUFlO0VBQzNCLEVBQ0Y7O0VBRUQ7RUFDQSxJQUFNSSxZQUFZLElBQUFWLGNBQUEsR0FBR2g0QixLQUFLLENBQUM3QyxPQUFPLGNBQUE2NkIsY0FBQSx1QkFBYkEsY0FBQSxDQUFlLzFCLElBQUksQ0FBQyxVQUFBbEwsQ0FBQztJQUFBLE9BQUtBLENBQUMsQ0FBcUJrUCx1QkFBdUI7RUFBQSxFQUUvRTs7RUFFYjtFQUNBO0VBQ0EsSUFBTTB5QixrQkFBa0IsR0FBR0QsWUFBWSxHQUNuQyxJQUFBTix1QkFBZ0IsRUFBQyxDQUFDRCxZQUFZLEVBQUVPLFlBQVksQ0FBQ2o5QixNQUFNLENBQUMsQ0FBQyxHQUNyRDA4QixZQUFZO0VBQ2hCLElBQU16OEIsV0FBVyxHQUFHLElBQUFrOUIsZ0JBQVMsRUFBQzU0QixLQUFLLENBQUNsQixlQUFlLENBQUNwRCxXQUFXLEVBQUVpOUIsa0JBQWtCLENBQUMsR0FDaEYzNEIsS0FBSyxDQUFDbEIsZUFBZSxDQUFDcEQsV0FBVyxHQUNqQ2k5QixrQkFBa0IsQ0FBQyxDQUFDLENBQUM7RUFFekIsSUFBSWo5QixXQUFXLEtBQUtzRSxLQUFLLENBQUNsQixlQUFlLENBQUNwRCxXQUFXLEVBQUU7SUFDckQ7SUFDQSxPQUFPMFEsNEJBQTRCLENBQUM3SixTQUFTLEVBQUU7TUFBQzNKLEtBQUssRUFBRThDO0lBQVcsQ0FBQyxDQUFDO0VBQ3RFO0VBRUEsT0FBTzZHLFNBQVM7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNczJCLG9CQUFvQixHQUFBdCtCLE9BQUEsQ0FBQXMrQixvQkFBQSxHQUFHLFNBQXZCQSxvQkFBb0JBLENBQy9CNzRCLEtBQWUsRUFBQTg0QixNQUFBLEVBRUY7RUFBQSxJQURaMThCLElBQUksR0FBQTA4QixNQUFBLENBQUoxOEIsSUFBSTtFQUVMLElBQU0yOEIsZUFBZSxHQUFHLElBQUF2QywyQkFBb0IsRUFBQyxDQUFDLENBQUN3Qyx1QkFBdUI7RUFDdEUsSUFDRSxDQUFDRCxlQUFlLEtBQ2YzOEIsSUFBSSxLQUFLQyx1QkFBWSxDQUFDNDhCLFVBQVUsSUFBSTc4QixJQUFJLEtBQUtDLHVCQUFZLENBQUM2OEIsZUFBZSxDQUFDLEVBQzNFO0lBQ0EsT0FBT2w1QixLQUFLO0VBQ2Q7RUFFQSxPQUFBbEcsYUFBQSxDQUFBQSxhQUFBLEtBQ0trRyxLQUFLO0lBQ1JqQixNQUFNLEVBQUFqRixhQUFBLENBQUFBLGFBQUEsS0FDRGtHLEtBQUssQ0FBQ2pCLE1BQU07TUFDZjNDLElBQUksRUFBSkEsSUFBSTtNQUNKSSxlQUFlLEVBQUU7SUFBSTtFQUN0QjtBQUVMLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMyOEIsa0JBQWtCQSxDQUNoQ241QixLQUFlLEVBQUFvNUIsTUFBQSxFQUVMO0VBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7RUFBQSxJQUFBQyxlQUFBLEdBQUFILE1BQUEsQ0FEVDc4QixRQUFRO0lBQVJBLFFBQVEsR0FBQWc5QixlQUFBLGNBQUcsRUFBRSxHQUFBQSxlQUFBO0VBRWQsSUFBTUMsV0FBVyxHQUFHajlCLFFBQVEsQ0FBQ2hFLE1BQU0sSUFBSWdFLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDaEUsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUVwRSxJQUFNaUksUUFBUSxHQUFBMUcsYUFBQSxDQUFBQSxhQUFBLEtBQ1RrRyxLQUFLO0lBQ1JqQixNQUFNLEVBQUFqRixhQUFBLENBQUFBLGFBQUEsS0FDRGtHLEtBQUssQ0FBQ2pCLE1BQU07TUFDZjtNQUNBeEMsUUFBUSxFQUFFQSxRQUFRLENBQUM3QyxNQUFNLENBQUMsVUFBQTNDLENBQUM7UUFBQSxPQUFJLENBQUMsSUFBQXdjLDJCQUFvQixFQUFDeGMsQ0FBQyxDQUFDO01BQUEsRUFBQztNQUN4RHFGLElBQUksRUFDRm85QixXQUFXLEtBQUFILHFCQUFBLEdBQUlHLFdBQVcsQ0FBQ0MsVUFBVSxjQUFBSixxQkFBQSxlQUF0QkEscUJBQUEsQ0FBd0JLLFFBQVEsR0FDM0MsRUFBQUosc0JBQUEsR0FBQUUsV0FBVyxDQUFDQyxVQUFVLGNBQUFILHNCQUFBLHVCQUF0QkEsc0JBQUEsQ0FBd0JLLEtBQUssTUFBSyxXQUFXLEdBQzNDMzVCLEtBQUssQ0FBQ2pCLE1BQU0sQ0FBQzNDLElBQUksR0FDakJDLHVCQUFZLENBQUN1OUIsSUFBSSxHQUNuQjU1QixLQUFLLENBQUNqQixNQUFNLENBQUMzQztJQUFJO0VBQ3hCLEVBQ0Y7O0VBRUQ7RUFDQSxJQUFPSSxlQUFlLEdBQUl3RCxLQUFLLENBQUNqQixNQUFNLENBQS9CdkMsZUFBZTs7RUFFdEI7RUFDQSxJQUFJLENBQUNBLGVBQWUsRUFBRTtJQUNwQixPQUFPZ0UsUUFBUTtFQUNqQjs7RUFFQTtFQUNBLElBQU1xNUIsT0FBTyxHQUFHdDlCLFFBQVEsQ0FBQzBGLElBQUksQ0FBQyxVQUFBbEwsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQzBELEVBQUUsS0FBSytCLGVBQWUsQ0FBQy9CLEVBQUU7RUFBQSxFQUFDOztFQUUvRDtFQUNBLElBQU0yUyxRQUFRLEdBQUd5c0IsT0FBTyxJQUFJLElBQUF0bUIsMkJBQW9CLEVBQUNzbUIsT0FBTyxDQUFDO0VBQ3pELElBQUl6c0IsUUFBUSxJQUFJeXNCLE9BQU8sRUFBRTtJQUN2QjtJQUNBLElBQUlBLE9BQU8sQ0FBQ0osVUFBVSxFQUFFSSxPQUFPLENBQUNKLFVBQVUsQ0FBQ0ssSUFBSSxHQUFHLElBQUFBLFVBQUksRUFBQ0QsT0FBZ0MsQ0FBQztJQUN4RixJQUFNRSxZQUFZLEdBQUcsSUFBQTdtQiwyQkFBb0IsRUFBQzJtQixPQUFPLEVBQUV6c0IsUUFBUSxDQUFDO0lBQzVELElBQU00c0IsU0FBUyxHQUFHaDZCLEtBQUssQ0FBQzdDLE9BQU8sQ0FBQ3VGLFNBQVMsQ0FBQyxVQUFBdTNCLEdBQUc7TUFBQSxPQUFJQSxHQUFHLENBQUN4L0IsRUFBRSxLQUFLMlMsUUFBUTtJQUFBLEVBQUM7SUFDckU7SUFDQSxPQUFPWCxnQkFBZ0IsQ0FBQ2pNLFFBQVEsRUFBRTtNQUNoQ0wsR0FBRyxFQUFFNjVCLFNBQVM7TUFDZHQyQixJQUFJLEVBQUUsT0FBTztNQUNiOUssS0FBSyxFQUFFbWhDO0lBQ1QsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxPQUFPdjVCLFFBQVE7QUFDakI7QUFFQSxTQUFTMDVCLGlCQUFpQkEsQ0FBQ2w2QixLQUFlLEVBQUU2NUIsT0FBd0IsRUFBa0I7RUFBQSxJQUFBTSxxQkFBQTtFQUNwRixJQUFJLEVBQUNOLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUVwL0IsRUFBRSxHQUFFO0lBQ2hCLE9BQU9vL0IsT0FBTyxJQUFJLElBQUk7RUFDeEI7RUFDQSxJQUFJLEVBQUFNLHFCQUFBLEdBQUFuNkIsS0FBSyxDQUFDakIsTUFBTSxDQUFDdkMsZUFBZSxjQUFBMjlCLHFCQUFBLHVCQUE1QkEscUJBQUEsQ0FBOEIxL0IsRUFBRSxNQUFLby9CLE9BQU8sQ0FBQ3AvQixFQUFFLEVBQUU7SUFDbkQsT0FBT3VGLEtBQUssQ0FBQ2pCLE1BQU0sQ0FBQ3ZDLGVBQWU7RUFDckM7RUFDQSxJQUFNNDlCLFVBQVUsR0FBR3A2QixLQUFLLENBQUNqQixNQUFNLENBQUN4QyxRQUFRLENBQUMwRixJQUFJLENBQUMsVUFBQW80QixJQUFJO0lBQUEsT0FBSUEsSUFBSSxDQUFDNS9CLEVBQUUsS0FBS28vQixPQUFPLENBQUNwL0IsRUFBRTtFQUFBLEVBQUM7RUFDN0UsSUFBSTIvQixVQUFVLEVBQUU7SUFDZCxPQUFPQSxVQUFVO0VBQ25CO0VBQ0EsSUFBTWh0QixRQUFRLEdBQUcsSUFBQW1HLDJCQUFvQixFQUFDc21CLE9BQU8sQ0FBQztFQUM5QyxJQUFJenNCLFFBQVEsRUFBRTtJQUNaLElBQU0xVCxNQUFNLEdBQUdzRyxLQUFLLENBQUM3QyxPQUFPLENBQUM4RSxJQUFJLENBQUMsVUFBQW80QixJQUFJO01BQUEsT0FBSUEsSUFBSSxDQUFDNS9CLEVBQUUsS0FBSzJTLFFBQVE7SUFBQSxFQUFDO0lBQy9ELElBQUkxVCxNQUFNLGFBQU5BLE1BQU0sZUFBTkEsTUFBTSxDQUFFZCxLQUFLLEVBQUU7TUFDakIsT0FBT2MsTUFBTSxDQUFDZCxLQUFLO0lBQ3JCO0VBQ0Y7RUFDQSxPQUFPaWhDLE9BQU87QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTUyxpQ0FBaUNBLENBQy9DdDZCLEtBQWUsRUFBQXU2QixNQUFBLEVBRUw7RUFBQSxJQUFBQyxzQkFBQTtFQUFBLElBRFRYLE9BQU8sR0FBQVUsTUFBQSxDQUFQVixPQUFPO0lBQUVKLFVBQVUsR0FBQWMsTUFBQSxDQUFWZCxVQUFVO0VBRXBCLElBQUksQ0FBQyxJQUFBakQsMkJBQW9CLEVBQUMsQ0FBQyxDQUFDd0MsdUJBQXVCLEVBQUU7SUFDbkQsT0FBT2g1QixLQUFLO0VBQ2Q7RUFFQSxJQUFNb2tCLE1BQU0sR0FBRzhWLGlCQUFpQixDQUFDbDZCLEtBQUssRUFBRTY1QixPQUFPLENBQUM7RUFDaEQsSUFBSSxFQUFDelYsTUFBTSxhQUFOQSxNQUFNLGVBQU5BLE1BQU0sQ0FBRTNwQixFQUFFLEdBQUU7SUFDZixPQUFPdUYsS0FBSztFQUNkO0VBRUEsSUFBTXk2QixXQUFXLEdBQUcsSUFBQUMsaUNBQTBCLEVBQUN0VyxNQUFNLEVBQUVxVixVQUFVLENBQUM7RUFDbEUsSUFBTXJzQixRQUFRLEdBQUcsSUFBQW1HLDJCQUFvQixFQUFDa25CLFdBQVcsQ0FBQztFQUNsRCxJQUFNRSxVQUFVLEdBQUE3Z0MsYUFBQSxDQUFBQSxhQUFBLEtBQ1hrRyxLQUFLLENBQUNqQixNQUFNO0lBQ2Z4QyxRQUFRLEVBQUU2USxRQUFRLEdBQ2RwTixLQUFLLENBQUNqQixNQUFNLENBQUN4QyxRQUFRLEdBQ3JCeUQsS0FBSyxDQUFDakIsTUFBTSxDQUFDeEMsUUFBUSxDQUFDNkQsR0FBRyxDQUFDLFVBQUFpNkIsSUFBSTtNQUFBLE9BQUtBLElBQUksQ0FBQzUvQixFQUFFLEtBQUtnZ0MsV0FBVyxDQUFDaGdDLEVBQUUsR0FBR2dnQyxXQUFXLEdBQUdKLElBQUk7SUFBQSxDQUFDLENBQUM7SUFDeEY3OUIsZUFBZSxFQUNiLEVBQUFnK0Isc0JBQUEsR0FBQXg2QixLQUFLLENBQUNqQixNQUFNLENBQUN2QyxlQUFlLGNBQUFnK0Isc0JBQUEsdUJBQTVCQSxzQkFBQSxDQUE4Qi8vQixFQUFFLE1BQUtnZ0MsV0FBVyxDQUFDaGdDLEVBQUUsR0FDL0NnZ0MsV0FBVyxHQUNYejZCLEtBQUssQ0FBQ2pCLE1BQU0sQ0FBQ3ZDO0VBQWUsRUFDbkM7RUFFRCxJQUFNK0YsU0FBUyxHQUFBekksYUFBQSxDQUFBQSxhQUFBLEtBQ1ZrRyxLQUFLO0lBQ1JqQixNQUFNLEVBQUU0N0I7RUFBVSxFQUNuQjtFQUVELElBQUksQ0FBQ3Z0QixRQUFRLEVBQUU7SUFDYixPQUFPN0ssU0FBUztFQUNsQjtFQUVBLElBQU15M0IsU0FBUyxHQUFHaDZCLEtBQUssQ0FBQzdDLE9BQU8sQ0FBQ3VGLFNBQVMsQ0FBQyxVQUFBMjNCLElBQUk7SUFBQSxPQUFJQSxJQUFJLENBQUM1L0IsRUFBRSxLQUFLMlMsUUFBUTtFQUFBLEVBQUM7RUFDdkUsSUFBSTRzQixTQUFTLEdBQUcsQ0FBQyxFQUFFO0lBQ2pCLE9BQU96M0IsU0FBUztFQUNsQjtFQUVBLE9BQU9rSyxnQkFBZ0IsQ0FBQ2xLLFNBQVMsRUFBRTtJQUNqQ3BDLEdBQUcsRUFBRTY1QixTQUFTO0lBQ2R0MkIsSUFBSSxFQUFFLE9BQU87SUFDYjlLLEtBQUssRUFBRSxJQUFBc2EsMkJBQW9CLEVBQUN1bkIsV0FBVyxFQUFFcnRCLFFBQVE7RUFDbkQsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNd3RCLHlCQUF5QixHQUFBcmdDLE9BQUEsQ0FBQXFnQyx5QkFBQSxHQUFHLFNBQTVCQSx5QkFBeUJBLENBQ3BDNTZCLEtBQWUsRUFBQTY2QixNQUFBLEVBRUY7RUFBQSxJQURaaEIsT0FBTyxHQUFBZ0IsTUFBQSxDQUFQaEIsT0FBTztJQUFFaUIsZ0JBQWdCLEdBQUFELE1BQUEsQ0FBaEJDLGdCQUFnQjtFQUUxQjtFQUNBLElBQUl0K0IsZUFBZSxHQUFHcTlCLE9BQU87RUFDN0IsSUFBSUEsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRUosVUFBVSxFQUFFO0lBQ3ZCajlCLGVBQWUsR0FBQTFDLGFBQUEsQ0FBQUEsYUFBQSxLQUNWKy9CLE9BQU87TUFDVkosVUFBVSxFQUFBMy9CLGFBQUEsQ0FBQUEsYUFBQSxLQUNMKy9CLE9BQU8sQ0FBQ0osVUFBVTtRQUNyQkssSUFBSSxFQUFFLElBQUFBLFVBQUksRUFBQ0QsT0FBZ0M7TUFBQztJQUM3QyxFQUNGO0VBQ0g7RUFDQSxPQUFBLy9CLGFBQUEsQ0FBQUEsYUFBQSxLQUNLa0csS0FBSztJQUNSakIsTUFBTSxFQUFBakYsYUFBQSxDQUFBQSxhQUFBLEtBQ0RrRyxLQUFLLENBQUNqQixNQUFNO01BQ2Z2QyxlQUFlLEVBQWZBLGVBQWU7TUFDZnMrQixnQkFBZ0IsRUFBaEJBO0lBQWdCO0VBQ2pCO0FBRUwsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLG9CQUFvQkEsQ0FDbEMvNkIsS0FBZSxFQUFBZzdCLE1BQUEsRUFFTDtFQUFBLElBRFRuQixPQUFPLEdBQUFtQixNQUFBLENBQVBuQixPQUFPO0VBRVIsSUFBSSxDQUFDQSxPQUFPLEVBQUU7SUFDWixPQUFPNzVCLEtBQUs7RUFDZDtFQUVBLElBQU1RLFFBQVEsR0FBQTFHLGFBQUEsQ0FBQUEsYUFBQSxLQUNUa0csS0FBSztJQUNSakIsTUFBTSxFQUFBakYsYUFBQSxDQUFBQSxhQUFBLEtBQ0RrRyxLQUFLLENBQUNqQixNQUFNO01BQ2Z2QyxlQUFlLEVBQUU7SUFBSTtFQUN0QixFQUNGO0VBRUQsSUFBSSxJQUFBK1csMkJBQW9CLEVBQUNzbUIsT0FBTyxDQUFDLEVBQUU7SUFDakMsSUFBTUcsU0FBUyxHQUFHeDVCLFFBQVEsQ0FBQ3JELE9BQU8sQ0FBQ3VGLFNBQVMsQ0FBQyxVQUFBM0wsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQzBELEVBQUUsS0FBSyxJQUFBOFksMkJBQW9CLEVBQUNzbUIsT0FBTyxDQUFDO0lBQUEsRUFBQztJQUV6RixPQUFPRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUc3bUIsbUJBQW1CLENBQUMzUyxRQUFRLEVBQUU7TUFBQ0wsR0FBRyxFQUFFNjVCO0lBQVMsQ0FBQyxDQUFDLEdBQUd4NUIsUUFBUTtFQUNwRjs7RUFFQTtFQUNBLElBQU04UyxTQUFTLEdBQUF4WixhQUFBLENBQUFBLGFBQUEsS0FDVmtHLEtBQUssQ0FBQ2pCLE1BQU07SUFDZnhDLFFBQVEsRUFBRXlELEtBQUssQ0FBQ2pCLE1BQU0sQ0FBQ3hDLFFBQVEsQ0FBQzdDLE1BQU0sQ0FBQyxVQUFBM0MsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQzBELEVBQUUsS0FBS28vQixPQUFPLENBQUNwL0IsRUFBRTtJQUFBLEVBQUM7SUFDaEUrQixlQUFlLEVBQUU7RUFBSSxFQUN0QjtFQUVELE9BQUExQyxhQUFBLENBQUFBLGFBQUEsS0FDS2tHLEtBQUs7SUFDUmpCLE1BQU0sRUFBRXVVO0VBQVM7QUFFckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTMm5CLDRCQUE0QkEsQ0FDMUNqN0IsS0FBZSxFQUNmcWhCLE9BQTJELEVBQ2pEO0VBQ1YsSUFBT25oQixLQUFLLEdBQWFtaEIsT0FBTyxDQUF6Qm5oQixLQUFLO0lBQUUyNUIsT0FBTyxHQUFJeFksT0FBTyxDQUFsQndZLE9BQU87RUFDckIsSUFBTXpzQixRQUFRLEdBQUcsSUFBQW1HLDJCQUFvQixFQUFDc21CLE9BQU8sQ0FBQzs7RUFFOUM7RUFDQSxJQUFJRyxTQUFTO0VBQ2IsSUFBSW4zQixVQUFVLEdBQUcsQ0FBQzNDLEtBQUssQ0FBQ3pGLEVBQUUsQ0FBQztFQUMzQixJQUFJK0YsUUFBUSxHQUFHUixLQUFLO0VBQ3BCO0VBQ0EsSUFBSW9OLFFBQVEsRUFBRTtJQUNaNHNCLFNBQVMsR0FBR2g2QixLQUFLLENBQUM3QyxPQUFPLENBQUN1RixTQUFTLENBQUMsVUFBQTNMLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUMwRCxFQUFFLEtBQUsyUyxRQUFRO0lBQUEsRUFBQztJQUUzRCxJQUFJLENBQUNwTixLQUFLLENBQUM3QyxPQUFPLENBQUM2OEIsU0FBUyxDQUFDLEVBQUU7TUFDN0I7TUFDQTtNQUNBO01BQ0EsSUFBTWtCLGlCQUFpQixHQUFBcGhDLGFBQUEsQ0FBQUEsYUFBQSxLQUNsQisvQixPQUFPO1FBQ1ZKLFVBQVUsRUFBQTMvQixhQUFBLENBQUFBLGFBQUEsS0FDTCsvQixPQUFPLENBQUNKLFVBQVU7VUFDckJyc0IsUUFBUSxFQUFFO1FBQUk7TUFDZixFQUNGO01BRUQsT0FBQXRULGFBQUEsQ0FBQUEsYUFBQSxLQUNLa0csS0FBSztRQUNSakIsTUFBTSxFQUFBakYsYUFBQSxDQUFBQSxhQUFBLEtBQ0RrRyxLQUFLLENBQUNqQixNQUFNO1VBQ2Z4QyxRQUFRLEtBQUE2SyxNQUFBLEtBQUFDLG1CQUFBLGFBQU1ySCxLQUFLLENBQUNqQixNQUFNLENBQUN4QyxRQUFRLElBQUUyK0IsaUJBQWlCLEVBQUM7VUFDdkQxK0IsZUFBZSxFQUFFMCtCO1FBQWlCO01BQ25DO0lBRUw7SUFDQSxJQUFNeGhDLE1BQU0sR0FBR3NHLEtBQUssQ0FBQzdDLE9BQU8sQ0FBQzY4QixTQUFTLENBQUM7SUFDdkMsSUFBQW1CLGVBQUEsR0FBdUJ6aEMsTUFBTSxDQUF0QmlNLE9BQU87TUFBUEEsT0FBTyxHQUFBdzFCLGVBQUEsY0FBRyxFQUFFLEdBQUFBLGVBQUE7SUFDbkIsSUFBTUMsZUFBZSxHQUFHejFCLE9BQU8sQ0FBQ3NCLFFBQVEsQ0FBQy9HLEtBQUssQ0FBQ3pGLEVBQUUsQ0FBQztJQUVsRG9JLFVBQVUsR0FBR3U0QixlQUFlO0lBQ3hCO0lBQ0F6MUIsT0FBTyxDQUFDak0sTUFBTSxDQUFDLFVBQUF3SSxDQUFDO01BQUEsT0FBSUEsQ0FBQyxLQUFLaEMsS0FBSyxDQUFDekYsRUFBRTtJQUFBLEVBQUMsTUFBQTJNLE1BQUEsS0FBQUMsbUJBQUEsYUFDL0IxQixPQUFPLElBQUV6RixLQUFLLENBQUN6RixFQUFFLEVBQUM7O0lBRTFCO0lBQ0EsSUFBSSxDQUFDb0ksVUFBVSxDQUFDdEssTUFBTSxFQUFFO01BQ3RCLElBQU04aUMsYUFBYSxHQUFHLElBQUFDLHNCQUFlLEVBQUN6QixPQUFPLENBQUM7TUFDOUMsSUFBTTBCLGtCQUFrQixHQUFHcG9CLG1CQUFtQixDQUFDM1MsUUFBUSxFQUFFO1FBQUNMLEdBQUcsRUFBRTY1QjtNQUFTLENBQUMsQ0FBQztNQUMxRSxPQUFBbGdDLGFBQUEsQ0FBQUEsYUFBQSxLQUNLeWhDLGtCQUFrQjtRQUNyQng4QixNQUFNLEVBQUFqRixhQUFBLENBQUFBLGFBQUEsS0FDRHloQyxrQkFBa0IsQ0FBQ3g4QixNQUFNO1VBQzVCeEMsUUFBUSxLQUFBNkssTUFBQSxLQUFBQyxtQkFBQSxhQUFNazBCLGtCQUFrQixDQUFDeDhCLE1BQU0sQ0FBQ3hDLFFBQVEsSUFBRTgrQixhQUFhLEVBQUM7VUFDaEU3K0IsZUFBZSxFQUFFNitCO1FBQWE7TUFDL0I7SUFFTDtFQUNGLENBQUMsTUFBTTtJQUNMO0lBQ0EsSUFBTXh1QixTQUFTLEdBQUcsSUFBQTJ1Qiw0QkFBcUIsRUFBQyxFQUFFLEVBQUUzQixPQUFPLENBQUM7SUFDcERHLFNBQVMsR0FBR2g2QixLQUFLLENBQUM3QyxPQUFPLENBQUM1RSxNQUFNOztJQUVoQztJQUNBaUksUUFBUSxHQUFBMUcsYUFBQSxDQUFBQSxhQUFBLEtBQ0hrRyxLQUFLO01BQ1I3QyxPQUFPLEtBQUFpSyxNQUFBLEtBQUFDLG1CQUFBLGFBQU1ySCxLQUFLLENBQUM3QyxPQUFPLElBQUUwUCxTQUFTLEVBQUM7TUFDdEM5TixNQUFNLEVBQUFqRixhQUFBLENBQUFBLGFBQUEsS0FDRGtHLEtBQUssQ0FBQ2pCLE1BQU07UUFDZnhDLFFBQVEsRUFBRXlELEtBQUssQ0FBQ2pCLE1BQU0sQ0FBQ3hDLFFBQVEsQ0FBQzdDLE1BQU0sQ0FBQyxVQUFBM0MsQ0FBQztVQUFBLE9BQUlBLENBQUMsQ0FBQzBELEVBQUUsS0FBS28vQixPQUFPLENBQUNwL0IsRUFBRTtRQUFBLEVBQUM7UUFDaEUrQixlQUFlLEVBQUVxUSxTQUFTLENBQUNqVTtNQUFLO0lBQ2pDLEVBQ0Y7RUFDSDtFQUVBLE9BQU82VCxnQkFBZ0IsQ0FBQ2pNLFFBQVEsRUFBRTtJQUNoQ0wsR0FBRyxFQUFFNjVCLFNBQVM7SUFDZHQyQixJQUFJLEVBQUUsU0FBUztJQUNmOUssS0FBSyxFQUFFaUs7RUFDVCxDQUFDLENBQUM7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVM0NEIsZ0NBQWdDQSxDQUM5Q3o3QixLQUFlLEVBQ2ZxaEIsT0FBK0QsRUFDckQ7RUFDVixJQUFPd1ksT0FBTyxHQUFJeFksT0FBTyxDQUFsQndZLE9BQU87RUFFZCxJQUFNaHRCLFNBQVMsR0FBRyxJQUFBMnVCLDRCQUFxQixFQUFDLEVBQUUsRUFBRTNCLE9BQU8sQ0FBQztFQUNwRCxJQUFNRyxTQUFTLEdBQUdoNkIsS0FBSyxDQUFDN0MsT0FBTyxDQUFDNUUsTUFBTTtFQUV0QyxJQUFNaUksUUFBa0IsR0FBQTFHLGFBQUEsQ0FBQUEsYUFBQSxLQUNuQmtHLEtBQUs7SUFDUjdDLE9BQU8sS0FBQWlLLE1BQUEsS0FBQUMsbUJBQUEsYUFBTXJILEtBQUssQ0FBQzdDLE9BQU8sSUFBRTBQLFNBQVMsRUFBQztJQUN0QzlOLE1BQU0sRUFBQWpGLGFBQUEsQ0FBQUEsYUFBQSxLQUNEa0csS0FBSyxDQUFDakIsTUFBTTtNQUNmeEMsUUFBUSxFQUFFeUQsS0FBSyxDQUFDakIsTUFBTSxDQUFDeEMsUUFBUSxDQUFDN0MsTUFBTSxDQUFDLFVBQUEzQyxDQUFDO1FBQUEsT0FBSUEsQ0FBQyxDQUFDMEQsRUFBRSxLQUFLby9CLE9BQU8sQ0FBQ3AvQixFQUFFO01BQUEsRUFBQztNQUNoRStCLGVBQWUsRUFBRXFRLFNBQVMsQ0FBQ2pVLEtBQUs7TUFDaEN3RCxJQUFJLEVBQUVDLHVCQUFZLENBQUN1OUI7SUFBSTtFQUN4QixFQUNGO0VBRUQsSUFBTThCLGVBQWUsR0FBRyxJQUFBdmtDLGVBQUcsRUFBQ2txQixPQUFPLEVBQUUsaUJBQWlCLENBQUM7RUFDdkQsSUFBTXNhLFdBQVcsR0FBR3ZqQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ3FqQyxlQUFlLENBQUMsR0FDOUNBLGVBQWUsR0FDZjE3QixLQUFLLENBQUNsRCxNQUFNLENBQUNwRCxNQUFNLENBQUMsVUFBQXdJLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN0SCxNQUFNLENBQUM2RixTQUFTO0VBQUEsRUFBQyxDQUFDTCxHQUFHLENBQUMsVUFBQThCLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN6SCxFQUFFO0VBQUEsRUFBQztFQUUvRCxPQUFPZ1MsZ0JBQWdCLENBQUNqTSxRQUFRLEVBQUU7SUFDaENMLEdBQUcsRUFBRTY1QixTQUFTO0lBQ2R0MkIsSUFBSSxFQUFFLFNBQVM7SUFDZjlLLEtBQUssRUFBRStpQztFQUNULENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0Msc0JBQXNCQSxDQUNwQzU3QixLQUFlLEVBQUE2N0IsTUFBQSxFQUVMO0VBQUEsSUFEVHo1QixNQUFNLEdBQUF5NUIsTUFBQSxDQUFOejVCLE1BQU07SUFBRTA1QixNQUFNLEdBQUFELE1BQUEsQ0FBTkMsTUFBTTtJQUFFMS9CLElBQUksR0FBQXkvQixNQUFBLENBQUp6L0IsSUFBSTtFQUVyQixJQUFNK0YsT0FBTyxHQUFHbkMsS0FBSyxDQUFDM0MsUUFBUSxDQUFDK0UsTUFBTSxDQUFDO0VBQ3RDLElBQUksQ0FBQ0QsT0FBTyxFQUFFO0lBQ1osT0FBT25DLEtBQUs7RUFDZDtFQUNBLElBQUkrN0IsUUFBUSxHQUFHMy9CLElBQUk7RUFDbkIsSUFBSSxDQUFDMi9CLFFBQVEsRUFBRTtJQUNiLElBQU1DLFdBQVcsR0FBRyxJQUFBN2tDLGVBQUcsRUFBQ2dMLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRTI1QixNQUFNLENBQUMsQ0FBQztJQUN4RDtJQUNBQyxRQUFRLEdBQUdDLFdBQVcsR0FDbEJ4a0MsTUFBTSxDQUFDZ0MsSUFBSSxDQUFDeWlDLHFCQUFVLENBQUMsQ0FBQ2g2QixJQUFJLENBQUMsVUFBQWdzQixDQUFDO01BQUEsT0FBSUEsQ0FBQyxLQUFLK04sV0FBVztJQUFBLEVBQUMsR0FDcERDLHFCQUFVLENBQUNDLFNBQVM7RUFDMUI7RUFFQSxJQUFNQyxNQUFNLEdBQUcsSUFBQUMsMEJBQW1CLEVBQUNqNkIsT0FBTyxFQUFFMjVCLE1BQU0sRUFBRUMsUUFBUSxDQUFDO0VBQzdELE9BQU8sSUFBQTNrQyxVQUFHLEVBQUMsQ0FBQyxVQUFVLEVBQUVnTCxNQUFNLENBQUMsRUFBRSs1QixNQUFNLEVBQUVuOEIsS0FBSyxDQUFDO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU3E4QixxQkFBcUJBLENBQ25DcjhCLEtBQWUsRUFBQXM4QixNQUFBLEVBRUw7RUFBQSxJQURUbDZCLE1BQU0sR0FBQWs2QixNQUFBLENBQU5sNkIsTUFBTTtJQUFFMDVCLE1BQU0sR0FBQVEsTUFBQSxDQUFOUixNQUFNO0VBRWYsSUFBTTM1QixPQUFPLEdBQUduQyxLQUFLLENBQUMzQyxRQUFRLENBQUMrRSxNQUFNLENBQUM7RUFDdEMsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPbkMsS0FBSztFQUNkO0VBQ0EsSUFBTXFRLFVBQVUsR0FBRyxJQUFBa3NCLHNCQUFlLEVBQUNwNkIsT0FBTyxFQUFFMjVCLE1BQU0sQ0FBQztFQUVuRCxPQUFPLElBQUExa0MsVUFBRyxFQUFDLENBQUMsVUFBVSxFQUFFZ0wsTUFBTSxDQUFDLEVBQUVpTyxVQUFVLEVBQUVyUSxLQUFLLENBQUM7QUFDckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVN3OEIsc0JBQXNCQSxDQUNwQ3g4QixLQUFlLEVBQUF5OEIsTUFBQSxFQUVMO0VBQUEsSUFEVHI2QixNQUFNLEdBQUFxNkIsTUFBQSxDQUFOcjZCLE1BQU07SUFBRTA1QixNQUFNLEdBQUFXLE1BQUEsQ0FBTlgsTUFBTTtFQUVmLElBQU0zNUIsT0FBTyxHQUFHbkMsS0FBSyxDQUFDM0MsUUFBUSxDQUFDK0UsTUFBTSxDQUFDO0VBQ3RDLElBQUksQ0FBQ0QsT0FBTyxFQUFFO0lBQ1osT0FBT25DLEtBQUs7RUFDZDtFQUNBLElBQU1xekIsUUFBUSxHQUFHbHhCLE9BQU8sQ0FBQ3NHLE1BQU0sQ0FBQy9GLFNBQVMsQ0FBQyxVQUFBM0wsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3FDLElBQUksS0FBSzBpQyxNQUFNO0VBQUEsRUFBQztFQUNqRSxJQUFJekksUUFBUSxHQUFHLENBQUMsRUFBRTtJQUNoQixPQUFPcnpCLEtBQUs7RUFDZDtFQUNBLElBQU93QyxJQUFJLEdBQUlMLE9BQU8sQ0FBQ3NHLE1BQU0sQ0FBQzRxQixRQUFRLENBQUMsQ0FBaEM3d0IsSUFBSTtFQUNYLElBQU1rNkIsSUFBSSxHQUFHdjZCLE9BQU8sQ0FBQ3c2QixhQUFhLENBQy9CdjhCLEdBQUcsQ0FBQyxVQUFBK3FCLEdBQUc7SUFBQSxPQUFJLElBQUF5UixzQkFBZSxFQUFDelIsR0FBRyxDQUFDMFIsT0FBTyxDQUFDeEosUUFBUSxDQUFDLEVBQUU3d0IsSUFBSSxDQUFDO0VBQUEsR0FBRSxJQUFJLENBQUMsQ0FDOURzNkIsSUFBSSxDQUFDLElBQUksQ0FBQztFQUViLElBQUFDLDJCQUFJLEVBQUNMLElBQUksQ0FBQztFQUVWLE9BQU8xOEIsS0FBSztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTZzlCLDZCQUE2QkEsQ0FDM0NoOUIsS0FBZSxFQUFBaTlCLE1BQUEsRUFFTDtFQUFBLElBRFQ3NkIsTUFBTSxHQUFBNjZCLE1BQUEsQ0FBTjc2QixNQUFNO0lBQUU4NkIsT0FBTyxHQUFBRCxNQUFBLENBQVBDLE9BQU87RUFFaEIsSUFBTS82QixPQUFPLEdBQUduQyxLQUFLLENBQUMzQyxRQUFRLENBQUMrRSxNQUFNLENBQUM7RUFDdEMsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPbkMsS0FBSztFQUNkO0VBQ0EsSUFBSXdHLFNBQVMsR0FBR3JFLE9BQU8sQ0FBQ3NHLE1BQU07RUFDOUJqUixNQUFNLENBQUNnQyxJQUFJLENBQUMwakMsT0FBTyxDQUFDLENBQUNsakMsT0FBTyxDQUFDLFVBQUE4aEMsTUFBTSxFQUFJO0lBQ3JDLElBQU16SSxRQUFRLEdBQUdseEIsT0FBTyxDQUFDc0csTUFBTSxDQUFDL0YsU0FBUyxDQUFDLFVBQUEzTCxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDcUMsSUFBSSxLQUFLMGlDLE1BQU07SUFBQSxFQUFDO0lBQ2pFLElBQUl6SSxRQUFRLElBQUksQ0FBQyxFQUFFO01BQ2pCLElBQU04SixhQUFhLEdBQUdELE9BQU8sQ0FBQ3BCLE1BQU0sQ0FBQztNQUNyQyxJQUFNLzBCLEtBQUssR0FBR1AsU0FBUyxDQUFDNnNCLFFBQVEsQ0FBQztNQUNqQzdzQixTQUFTLEdBQUcsSUFBQXNHLHNCQUFLLEVBQUMsSUFBQXlFLHVCQUFNLEVBQUM7UUFBQzRyQixhQUFhLEVBQWJBO01BQWEsQ0FBQyxDQUFDLENBQUNwMkIsS0FBSyxDQUFpQixDQUFDLENBQy9EUCxTQUNGLENBQVk7SUFDZDtFQUNGLENBQUMsQ0FBQztFQUVGLElBQU02SixVQUFVLEdBQUcsSUFBQTZXLHlCQUFrQixFQUFDL2tCLE9BQU8sRUFBRTtJQUFDc0csTUFBTSxFQUFFakM7RUFBb0IsQ0FBQyxDQUFDO0VBQzlFLElBQUloRyxRQUFRLEdBQUcsSUFBQThRLHNCQUFLLEVBQUMsVUFBVSxDQUFDLENBQUMsSUFBQUMsdUJBQU0sTUFBQXRYLGdCQUFBLGlCQUFHbUksTUFBTSxFQUFHaU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDclEsS0FBSyxDQUFDOztFQUV2RTtFQUNBUSxRQUFRLEdBQUExRyxhQUFBLENBQUFBLGFBQUEsS0FDSDBHLFFBQVE7SUFDWDFELE1BQU0sRUFBRTBELFFBQVEsQ0FBQzFELE1BQU0sQ0FBQ3NELEdBQUcsQ0FBQyxVQUFBRixLQUFLO01BQUEsSUFBQWs5QixjQUFBO01BQUEsT0FDL0IsQ0FBQUEsY0FBQSxHQUFBbDlCLEtBQUssQ0FBQ3RGLE1BQU0sY0FBQXdpQyxjQUFBLGdCQUFBQSxjQUFBLEdBQVpBLGNBQUEsQ0FBY0MsVUFBVSxjQUFBRCxjQUFBLGVBQXhCQSxjQUFBLENBQTBCaGtDLElBQUksSUFBSThHLEtBQUssQ0FBQ3RGLE1BQU0sQ0FBQ3lpQyxVQUFVLENBQUNqa0MsSUFBSSxJQUFJOGpDLE9BQU8sR0FDckVoOUIsS0FBSyxDQUFDaUYsaUJBQWlCLENBQUM7UUFDdEJrNEIsVUFBVSxFQUFBdmpDLGFBQUEsQ0FBQUEsYUFBQSxLQUNMb0csS0FBSyxDQUFDdEYsTUFBTSxDQUFDeWlDLFVBQVU7VUFDMUJGLGFBQWEsRUFBRUQsT0FBTyxDQUFDaDlCLEtBQUssQ0FBQ3RGLE1BQU0sQ0FBQ3lpQyxVQUFVLENBQUNqa0MsSUFBSTtRQUFDO01BRXhELENBQUMsQ0FBQyxHQUNGOEcsS0FBSztJQUFBLENBQ1g7RUFBQyxFQUNGO0VBRUQsT0FBT00sUUFBUTtBQUNqQjtBQU9BLFNBQVM4OEIsY0FBY0EsQ0FBQ0MsV0FBZ0MsRUFBeUI7RUFDL0UsSUFBSUEsV0FBVyxJQUFJLGFBQWEsSUFBSUEsV0FBVyxJQUFJbmxDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDa2xDLFdBQVcsQ0FBQ0MsV0FBVyxDQUFDLEVBQUU7SUFDekYsT0FBT0QsV0FBVyxDQUFDQyxXQUFXO0VBQ2hDO0VBQ0EsT0FBT2pnQyxTQUFTO0FBQ2xCO0FBRUEsU0FBU2tnQyxhQUFhQSxDQUFBLEVBQWtCO0VBQ3RDLE9BQU8sSUFBSUMsT0FBTyxDQUFDLFVBQUFDLE9BQU8sRUFBSTtJQUM1QkMsVUFBVSxDQUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDO0VBQ3hCLENBQUMsQ0FBQztBQUNKO0FBQUMsU0FFY0UsOEJBQThCQSxDQUFBQyxHQUFBO0VBQUEsT0FBQUMsK0JBQUEsQ0FBQWxrQyxLQUFBLE9BQUFFLFNBQUE7QUFBQTtBQUFBLFNBQUFna0MsZ0NBQUE7RUFBQUEsK0JBQUEsT0FBQXZaLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBN0MsU0FBQXNaLFNBQUFDLE1BQUE7SUFBQSxJQUFBOTdCLE9BQUEsRUFBQTRFLEtBQUEsRUFBQXcyQixXQUFBLEVBQUFDLFdBQUEsRUFBQTcwQixNQUFBLEVBQUFXLE1BQUE7SUFBQSxPQUFBbWIsWUFBQSxZQUFBTyxJQUFBLFVBQUFrWixVQUFBQyxTQUFBO01BQUEsa0JBQUFBLFNBQUEsQ0FBQXA5QixJQUFBLEdBQUFvOUIsU0FBQSxDQUFBcGxDLElBQUE7UUFBQTtVQUErQ29KLE9BQU8sR0FBQTg3QixNQUFBLENBQVA5N0IsT0FBTyxFQUFFNEUsS0FBSyxHQUFBazNCLE1BQUEsQ0FBTGwzQixLQUFLO1VBQUFvM0IsU0FBQSxDQUFBcGxDLElBQUE7VUFBQSxPQUVyRDBrQyxhQUFhLENBQUMsQ0FBQztRQUFBO1VBQ2ZGLFdBQVcsR0FBR3gyQixLQUFLLENBQUN3MkIsV0FBVyxJQUFJcDdCLE9BQU8sQ0FBQ2k4QixvQkFBb0IsQ0FBQ3IzQixLQUFLLENBQUMzTixJQUFJLENBQUM7VUFDM0Vva0MsV0FBVyxHQUFHRixjQUFjLENBQUNDLFdBQVcsQ0FBQztVQUN6QzUwQixNQUFNLEdBQUc2MEIsV0FBVyxhQUFYQSxXQUFXLGNBQVhBLFdBQVcsR0FBSSxJQUFBYSwwQkFBbUIsRUFBQ2w4QixPQUFPLENBQUN3NkIsYUFBYSxFQUFFNTFCLEtBQUssQ0FBQ3NzQixRQUFRLENBQUM7VUFBQThLLFNBQUEsQ0FBQXBsQyxJQUFBO1VBQUEsT0FDbkUsSUFBQXVsQywwQkFBbUIsRUFBQztZQUN2QzMxQixNQUFNLEVBQU5BLE1BQU07WUFDTjQxQixTQUFTLEVBQUV4M0IsS0FBSyxDQUFDdkU7VUFDbkIsQ0FBQyxDQUFDO1FBQUE7VUFISThHLE1BQU0sR0FBQTYwQixTQUFBLENBQUExWSxJQUFBO1VBQUEsT0FBQTBZLFNBQUEsQ0FBQWhaLE1BQUEsV0FLTDtZQUFDN2IsTUFBTSxFQUFOQSxNQUFNO1lBQUVpMEIsV0FBVyxFQUFYQTtVQUFXLENBQUM7UUFBQTtRQUFBO1VBQUEsT0FBQVksU0FBQSxDQUFBbFksSUFBQTtNQUFBO0lBQUEsR0FBQStYLFFBQUE7RUFBQSxDQUM3QjtFQUFBLE9BQUFELCtCQUFBLENBQUFsa0MsS0FBQSxPQUFBRSxTQUFBO0FBQUE7QUFFRCxJQUFNeWtDLHNCQUFzQixHQUFHOStCLGlCQUFJLENBQUN5bUIsV0FBVyxDQUM3QzBYLDhCQUE4QixFQUM5Qix3QkFDRixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTWSxzQkFBc0JBLENBQ3BDeitCLEtBQWUsRUFBQTArQixNQUFBLEVBRUw7RUFBQSxJQURUdDhCLE1BQU0sR0FBQXM4QixNQUFBLENBQU50OEIsTUFBTTtJQUFFdThCLFNBQVMsR0FBQUQsTUFBQSxDQUFUQyxTQUFTO0VBRWxCLElBQU1DLGdCQUFnQixHQUFHLElBQUFoeEIsb0JBQU8sRUFBQyt3QixTQUFTLENBQUM7RUFDM0MsSUFBTXg4QixPQUFPLEdBQUduQyxLQUFLLENBQUMzQyxRQUFRLENBQUMrRSxNQUFNLENBQUM7RUFDdEMsSUFBTXk4QixZQUFZLEdBQUcxOEIsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVzRyxNQUFNLENBQUMvTyxNQUFNLENBQUMsVUFBQTNDLENBQUM7SUFBQSxPQUFJNm5DLGdCQUFnQixDQUFDMzNCLFFBQVEsQ0FBQ2xRLENBQUMsQ0FBQ3FDLElBQUksQ0FBQztFQUFBLEVBQUM7RUFDbkYsSUFBSSxDQUFDK0ksT0FBTyxJQUFJLENBQUMwOEIsWUFBWSxDQUFDdG1DLE1BQU0sRUFBRTtJQUNwQyxPQUFPeUgsS0FBSztFQUNkO0VBRUEsSUFBTXdHLFNBQVMsR0FBR3JFLE9BQU8sQ0FBQ3NHLE1BQU0sQ0FBQ3JJLEdBQUcsQ0FBQyxVQUFBMkcsS0FBSztJQUFBLE9BQ3hDNjNCLGdCQUFnQixDQUFDMzNCLFFBQVEsQ0FBQ0YsS0FBSyxDQUFDM04sSUFBSSxDQUFDLEdBQUFVLGFBQUEsQ0FBQUEsYUFBQSxLQUFPaU4sS0FBSztNQUFFKzNCLGNBQWMsRUFBRTtJQUFJLEtBQUkvM0IsS0FBSztFQUFBLENBQ2xGLENBQUM7RUFDRCxJQUFNc0osVUFBVSxHQUFHLElBQUE2Vyx5QkFBa0IsRUFBQy9rQixPQUFPLEVBQUU7SUFBQ3NHLE1BQU0sRUFBRWpDO0VBQVMsQ0FBQyxDQUFDO0VBRW5FLElBQU11NEIsS0FBSyxHQUFHRixZQUFZLENBQUN6K0IsR0FBRyxDQUFDLFVBQUFySixDQUFDO0lBQUEsT0FDOUJ5bkMsc0JBQXNCLENBQUM7TUFBQ3I4QixPQUFPLEVBQUVrTyxVQUFVO01BQUV0SixLQUFLLEVBQUVoUTtJQUFDLENBQUMsQ0FBQyxDQUFDNnhCLEtBQUssQ0FDM0QsVUFBQW9XLE1BQUE7TUFBQSxJQUFFMTFCLE1BQU0sR0FBQTAxQixNQUFBLENBQU4xMUIsTUFBTTtRQUFFaTBCLFdBQVcsR0FBQXlCLE1BQUEsQ0FBWHpCLFdBQVc7TUFBQSxPQUFNLElBQUEwQiwrQkFBc0IsRUFBQzV1QixVQUFVLENBQUM1VixFQUFFLEVBQUUxRCxDQUFDLENBQUNxQyxJQUFJLEVBQUVrUSxNQUFNLEVBQUVpMEIsV0FBVyxDQUFDO0lBQUEsR0FDN0YsVUFBQzV6QixLQUFZO01BQUEsT0FBSyxJQUFBdTFCLDZCQUFvQixFQUFDN3VCLFVBQVUsQ0FBQzVWLEVBQUUsRUFBRTFELENBQUMsQ0FBQ3FDLElBQUksRUFBRXVRLEtBQUssQ0FBQztJQUFBLENBQ3RFLENBQUM7RUFBQSxDQUNILENBQUM7RUFDRCxJQUFNcEgsU0FBUyxHQUFHLElBQUErTyxzQkFBSyxFQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUFDLHVCQUFNLE1BQUF0WCxnQkFBQSxpQkFBR21JLE1BQU0sRUFBR2lPLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ3JRLEtBQUssQ0FBQztFQUUxRSxPQUFPLElBQUFxb0IsZUFBUSxFQUFDOWxCLFNBQVMsRUFBRXc4QixLQUFLLENBQUM7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNJLDZCQUE2QkEsQ0FDM0NuL0IsS0FBZSxFQUFBby9CLE1BQUEsRUFFTDtFQUFBLElBRFQ5MUIsTUFBTSxHQUFBODFCLE1BQUEsQ0FBTjkxQixNQUFNO0lBQUVpMEIsV0FBVyxHQUFBNkIsTUFBQSxDQUFYN0IsV0FBVztJQUFFbjdCLE1BQU0sR0FBQWc5QixNQUFBLENBQU5oOUIsTUFBTTtJQUFFdThCLFNBQVMsR0FBQVMsTUFBQSxDQUFUVCxTQUFTO0VBRXZDLElBQU14OEIsT0FBTyxHQUFHbkMsS0FBSyxDQUFDM0MsUUFBUSxDQUFDK0UsTUFBTSxDQUFDO0VBQ3RDLElBQU0yRSxLQUFLLEdBQUcsQ0FBQyxDQUFBNUUsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVzRyxNQUFNLEtBQUksRUFBRSxFQUFFeEcsSUFBSSxDQUFDLFVBQUFsTCxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDcUMsSUFBSSxLQUFLdWxDLFNBQVM7RUFBQSxFQUFDO0VBQ3JFLElBQUksQ0FBQ3g4QixPQUFPLElBQUksQ0FBQzRFLEtBQUssRUFBRTtJQUN0QixPQUFPL0csS0FBSztFQUNkO0VBRUEsSUFBTXEvQixjQUFjLEdBQUF2bEMsYUFBQSxDQUFBQSxhQUFBLEtBQ2Z5akMsV0FBVztJQUNkK0IsV0FBVyxFQUFFaDJCO0VBQU0sRUFDcEI7RUFDRCxJQUFNOUMsU0FBUyxHQUFHckUsT0FBTyxDQUFDc0csTUFBTSxDQUFDckksR0FBRyxDQUFDLFVBQUFySixDQUFDO0lBQUEsT0FDcENBLENBQUMsQ0FBQ3FDLElBQUksS0FBS3VsQyxTQUFTLEdBQUE3a0MsYUFBQSxDQUFBQSxhQUFBLEtBQU8vQyxDQUFDO01BQUV3bUMsV0FBVyxFQUFFOEIsY0FBYztNQUFFUCxjQUFjLEVBQUU7SUFBSyxLQUFJL25DLENBQUM7RUFBQSxDQUN2RixDQUFDO0VBQ0QsSUFBTXNaLFVBQVUsR0FBRyxJQUFBNlcseUJBQWtCLEVBQUMva0IsT0FBTyxFQUFFO0lBQUNzRyxNQUFNLEVBQUVqQztFQUFTLENBQUMsQ0FBQztFQUNuRSxPQUFPLElBQUE4SyxzQkFBSyxFQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUFDLHVCQUFNLE1BQUF0WCxnQkFBQSxpQkFBR21JLE1BQU0sRUFBR2lPLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ3JRLEtBQUssQ0FBQztBQUNqRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU3UvQiwyQkFBMkJBLENBQ3pDdi9CLEtBQWUsRUFBQXcvQixNQUFBLEVBRUw7RUFBQSxJQURUNzFCLEtBQUssR0FBQTYxQixNQUFBLENBQUw3MUIsS0FBSztJQUFFdkgsTUFBTSxHQUFBbzlCLE1BQUEsQ0FBTnA5QixNQUFNO0lBQUV1OEIsU0FBUyxHQUFBYSxNQUFBLENBQVRiLFNBQVM7RUFFekJqMUIsZUFBTyxDQUFDQyxLQUFLLENBQUNBLEtBQUssQ0FBQztFQUNwQixJQUFNeEgsT0FBTyxHQUFHbkMsS0FBSyxDQUFDM0MsUUFBUSxDQUFDK0UsTUFBTSxDQUFDO0VBQ3RDLElBQU0yRSxLQUFLLEdBQUcsQ0FBQyxDQUFBNUUsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVzRyxNQUFNLEtBQUksRUFBRSxFQUFFeEcsSUFBSSxDQUFDLFVBQUFsTCxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDcUMsSUFBSSxLQUFLdWxDLFNBQVM7RUFBQSxFQUFDO0VBQ3JFLElBQUksQ0FBQ3g4QixPQUFPLElBQUksQ0FBQzRFLEtBQUssRUFBRTtJQUN0QixPQUFPL0csS0FBSztFQUNkO0VBQ0EsSUFBTXdHLFNBQVMsR0FBR3JFLE9BQU8sQ0FBQ3NHLE1BQU0sQ0FBQ3JJLEdBQUcsQ0FBQyxVQUFBckosQ0FBQztJQUFBLE9BQ3BDQSxDQUFDLENBQUNxQyxJQUFJLEtBQUt1bEMsU0FBUyxHQUFBN2tDLGFBQUEsQ0FBQUEsYUFBQSxLQUFPL0MsQ0FBQztNQUFFK25DLGNBQWMsRUFBRTtJQUFLLEtBQUkvbkMsQ0FBQztFQUFBLENBQzFELENBQUM7RUFDRCxJQUFNc1osVUFBVSxHQUFHLElBQUE2Vyx5QkFBa0IsRUFBQy9rQixPQUFPLEVBQUU7SUFBQ3NHLE1BQU0sRUFBRWpDO0VBQVMsQ0FBQyxDQUFDO0VBQ25FLE9BQU8sSUFBQThLLHNCQUFLLEVBQUMsVUFBVSxDQUFDLENBQUMsSUFBQUMsdUJBQU0sTUFBQXRYLGdCQUFBLGlCQUFHbUksTUFBTSxFQUFHaU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDclEsS0FBSyxDQUFDO0FBQ2pFOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVN5L0IsNkJBQTZCQSxDQUMzQ3ovQixLQUFlO0FBQ2Y7QUFDQXdCLE1BQTJELEVBQ2pEO0VBQ1YsT0FBQTFILGFBQUEsQ0FBQUEsYUFBQSxLQUNLa0csS0FBSztJQUNSakIsTUFBTSxFQUFBakYsYUFBQSxDQUFBQSxhQUFBLEtBQ0RrRyxLQUFLLENBQUNqQixNQUFNO01BQ2Z0QyxPQUFPLEVBQUUsQ0FBQ3VELEtBQUssQ0FBQ2pCLE1BQU0sQ0FBQ3RDO0lBQU87RUFDL0I7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxTQUFTaWpDLG1DQUFtQ0EsQ0FDakQxL0IsS0FBZTtBQUNmO0FBQ0EyL0IsT0FBa0UsRUFDeEQ7RUFDVixJQUFJLENBQUMsSUFBQW5KLDJCQUFvQixFQUFDLENBQUMsQ0FBQ3dDLHVCQUF1QixFQUFFO0lBQ25ELE9BQU9oNUIsS0FBSztFQUNkO0VBRUEsSUFBTXpELFFBQVEsR0FBR3lELEtBQUssQ0FBQ2pCLE1BQU0sQ0FBQ3hDLFFBQVE7RUFDdEMsSUFBSSxDQUFDQSxRQUFRLENBQUNoRSxNQUFNLEVBQUU7SUFDcEIsT0FBT3lILEtBQUs7RUFDZDtFQUVBLElBQUl3akIsSUFBSTtFQUNSLElBQUk7SUFDRkEsSUFBSSxHQUFHLElBQUFvYywwQkFBYyxFQUFDLElBQUFDLHdDQUFpQyxFQUFDdGpDLFFBQVEsQ0FBQyxDQUFDO0VBQ3BFLENBQUMsQ0FBQyxPQUFPMEgsR0FBRyxFQUFFO0lBQ1osSUFBTXNpQixPQUFPLEdBQUd0aUIsR0FBRyxZQUFZeWhCLEtBQUssR0FBR3poQixHQUFHLENBQUNzaUIsT0FBTyxHQUFHdnVCLE1BQU0sQ0FBQ2lNLEdBQUcsQ0FBQztJQUNoRSxPQUFPLElBQUFva0IsZUFBUSxFQUNicm9CLEtBQUssRUFDTEYsNEJBQTRCLENBQUMsQ0FBQyxDQUFDTSxHQUFHLENBQUM7TUFBQSxPQUNqQyxJQUFBMnNCLHdCQUFlLEVBQ2IsSUFBQUMsd0JBQWlCLEVBQUM7UUFDaEJ6RyxPQUFPLGtEQUFBbmYsTUFBQSxDQUFrRG1mLE9BQU8sQ0FBRTtRQUNsRTlyQixFQUFFLEVBQUU7TUFDTixDQUFDLENBQ0gsQ0FBQztJQUFBLENBQ0gsQ0FDRixDQUFDO0VBQ0g7RUFFQSxJQUFNcWxDLFlBQXNCLEdBQUFobUMsYUFBQSxDQUFBQSxhQUFBLEtBQ3ZCa0csS0FBSztJQUNSakIsTUFBTSxFQUFBakYsYUFBQSxDQUFBQSxhQUFBLEtBQ0RrRyxLQUFLLENBQUNqQixNQUFNO01BQ2Z4QyxRQUFRLEVBQUUsRUFBRTtNQUNaQyxlQUFlLEVBQUUsSUFBSTtNQUNyQkosSUFBSSxFQUFFQyx1QkFBWSxDQUFDdTlCO0lBQUk7RUFDeEIsRUFDRjtFQUVELElBQU1tRyxPQUFPLEdBQUd0WCxJQUFJLENBQUN1WCxLQUFLLENBQUN2WCxJQUFJLENBQUN3WCxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUU7RUFFbkQsT0FBT3pULG9CQUFvQixDQUFDc1QsWUFBWSxFQUFFO0lBQ3hDemlDLFFBQVEsRUFBRTtNQUNSK2tCLElBQUksRUFBRTtRQUNKM25CLEVBQUUsb0JBQUEyTSxNQUFBLENBQW9CLElBQUE4UCwyQkFBYyxFQUFDLENBQUMsQ0FBQyxDQUFFO1FBQ3pDeGMsS0FBSyxvQkFBQTBNLE1BQUEsQ0FBb0IyNEIsT0FBTztNQUNsQyxDQUFDO01BQ0R2YyxJQUFJLEVBQUpBO0lBQ0YsQ0FBQztJQUNEak8sT0FBTyxFQUFFO01BQ1BrTSxrQkFBa0IsRUFBRSxJQUFJO01BQ3hCdU8sU0FBUyxFQUFFLEtBQUs7TUFDaEJYLGdCQUFnQixFQUFFO0lBQ3BCO0VBQ0YsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTNlEsNkJBQTZCQSxDQUMzQ2xnQyxLQUFlLEVBQUFtZ0MsTUFBQSxFQUVMO0VBQUEsSUFEVHg2QixPQUFPLEdBQUF3NkIsTUFBQSxDQUFQeDZCLE9BQU87RUFFUixJQUFNazBCLE9BQU8sR0FBRzc1QixLQUFLLENBQUNqQixNQUFNLENBQUN2QyxlQUFlO0VBQzVDLElBQU0wRCxLQUFLLEdBQUdGLEtBQUssQ0FBQ2xELE1BQU0sQ0FBQ21GLElBQUksQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDekgsRUFBRSxLQUFLa0wsT0FBTztFQUFBLEVBQUM7RUFDdEQsSUFBTXZELE1BQU0sR0FBR2xDLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFdEYsTUFBTSxDQUFDd0gsTUFBTTtFQUNuQyxJQUFJRCxPQUFPLEdBQUdDLE1BQU0sR0FBR3BDLEtBQUssQ0FBQzNDLFFBQVEsQ0FBQytFLE1BQU0sQ0FBQyxHQUFHLElBQUk7RUFFcEQsSUFBSSxDQUFDbEMsS0FBSyxJQUFJLENBQUNpQyxPQUFPLElBQUksQ0FBQ0MsTUFBTSxFQUFFO0lBQ2pDLE9BQU9wQyxLQUFLO0VBQ2Q7O0VBRUE7RUFDQTtFQUNBLElBQUksQ0FBQyxJQUFBb2dDLCtCQUF3QixFQUFDbGdDLEtBQUssQ0FBQyxFQUFFO0lBQ3BDRixLQUFLLEdBQUcsSUFBQW8zQix1QkFBZ0IsRUFBQ3AzQixLQUFLLEVBQUVvQyxNQUFNLENBQUM7SUFDdkNELE9BQU8sR0FBR25DLEtBQUssQ0FBQzNDLFFBQVEsQ0FBQytFLE1BQU0sQ0FBQztJQUNoQyxJQUFJLENBQUNELE9BQU8sRUFBRTtNQUNaLE9BQU9uQyxLQUFLO0lBQ2Q7RUFDRjtFQUVBLElBQUlxZ0MsU0FBUztFQUNiLElBQUk7SUFDRkEsU0FBUyxHQUFHLElBQUFDLCtCQUF3QixFQUFDO01BQUNwZ0MsS0FBSyxFQUFMQSxLQUFLO01BQUVpQyxPQUFPLEVBQVBBLE9BQU87TUFBRTAzQixPQUFPLEVBQVBBO0lBQU8sQ0FBQyxDQUFDO0VBQ2pFLENBQUMsQ0FBQyxPQUFPNTFCLEdBQUcsRUFBRTtJQUNaLElBQU1zaUIsT0FBTyxHQUFHdGlCLEdBQUcsWUFBWXloQixLQUFLLEdBQUd6aEIsR0FBRyxDQUFDc2lCLE9BQU8sR0FBR3Z1QixNQUFNLENBQUNpTSxHQUFHLENBQUM7SUFDaEUsT0FBTyxJQUFBb2tCLGVBQVEsRUFDYnJvQixLQUFLLEVBQ0xGLDRCQUE0QixDQUFDLENBQUMsQ0FBQ00sR0FBRyxDQUFDO01BQUEsT0FDakMsSUFBQTJzQix3QkFBZSxFQUNiLElBQUFDLHdCQUFpQixFQUFDO1FBQ2hCekcsT0FBTyw2QkFBQW5mLE1BQUEsQ0FBNkJtZixPQUFPLENBQUU7UUFDN0M5ckIsRUFBRSxFQUFFO01BQ04sQ0FBQyxDQUNILENBQUM7SUFBQSxDQUNILENBQ0YsQ0FBQztFQUNIO0VBRUEsSUFBSSxDQUFDNGxDLFNBQVMsRUFBRTtJQUNkLE9BQU9yZ0MsS0FBSztFQUNkO0VBRUEsSUFBSSxDQUFDcWdDLFNBQVMsQ0FBQ0UsUUFBUSxFQUFFO0lBQ3ZCLE9BQU8sSUFBQWxZLGVBQVEsRUFDYnJvQixLQUFLLEVBQ0xGLDRCQUE0QixDQUFDLENBQUMsQ0FBQ00sR0FBRyxDQUFDO01BQUEsT0FDakMsSUFBQTJzQix3QkFBZSxFQUNiLElBQUFDLHdCQUFpQixFQUFDO1FBQ2hCekcsT0FBTyxFQUFFLElBQUE2WiwrQkFBd0IsRUFBQ2xnQyxLQUFLLENBQUMsR0FDcEMsa0VBQWtFLEdBQ2xFLDJDQUEyQztRQUMvQ3pGLEVBQUUsRUFBRTtNQUNOLENBQUMsQ0FDSCxDQUFDO0lBQUEsQ0FDSCxDQUNGLENBQUM7RUFDSDtFQUVBLElBQUkrb0IsSUFBSTtFQUNSLElBQUk7SUFDRkEsSUFBSSxHQUNGNmMsU0FBUyxDQUFDeGpCLElBQUksS0FBSyxTQUFTLEdBQ3hCLElBQUEraUIsMEJBQWMsRUFBQztNQUNicDlCLElBQUksRUFBRSxtQkFBbUI7TUFDekJqRyxRQUFRLEVBQUU4akMsU0FBUyxDQUFDOWpDO0lBQ3RCLENBQUMsQ0FBQyxHQUNGO01BQUNrTSxNQUFNLEVBQUU0M0IsU0FBUyxDQUFDNTNCLE1BQU07TUFBRWtiLElBQUksRUFBRTBjLFNBQVMsQ0FBQzFjO0lBQUksQ0FBQztFQUN4RCxDQUFDLENBQUMsT0FBTzFmLEdBQUcsRUFBRTtJQUNaLElBQU1zaUIsUUFBTyxHQUFHdGlCLEdBQUcsWUFBWXloQixLQUFLLEdBQUd6aEIsR0FBRyxDQUFDc2lCLE9BQU8sR0FBR3Z1QixNQUFNLENBQUNpTSxHQUFHLENBQUM7SUFDaEUsT0FBTyxJQUFBb2tCLGVBQVEsRUFDYnJvQixLQUFLLEVBQ0xGLDRCQUE0QixDQUFDLENBQUMsQ0FBQ00sR0FBRyxDQUFDO01BQUEsT0FDakMsSUFBQTJzQix3QkFBZSxFQUNiLElBQUFDLHdCQUFpQixFQUFDO1FBQ2hCekcsT0FBTyw2QkFBQW5mLE1BQUEsQ0FBNkJtZixRQUFPLENBQUU7UUFDN0M5ckIsRUFBRSxFQUFFO01BQ04sQ0FBQyxDQUNILENBQUM7SUFBQSxDQUNILENBQ0YsQ0FBQztFQUNIO0VBRUEsT0FBTyt4QixvQkFBb0IsQ0FBQ3hzQixLQUFLLEVBQUU7SUFDakMzQyxRQUFRLEVBQUU7TUFDUitrQixJQUFJLEVBQUU7UUFDSjNuQixFQUFFLGFBQUEyTSxNQUFBLENBQWEsSUFBQThQLDJCQUFjLEVBQUMsQ0FBQyxDQUFDLENBQUU7UUFDbEN4YyxLQUFLLGVBQUEwTSxNQUFBLENBQWVqRixPQUFPLENBQUN6SCxLQUFLO01BQ25DLENBQUM7TUFDRDhvQixJQUFJLEVBQUpBO0lBQ0YsQ0FBQztJQUNEak8sT0FBTyxFQUFFO01BQ1BrTSxrQkFBa0IsRUFBRSxJQUFJO01BQ3hCdU8sU0FBUyxFQUFFLEtBQUs7TUFDaEJYLGdCQUFnQixFQUFFO0lBQ3BCO0VBQ0YsQ0FBQyxDQUFDO0FBQ0o7QUFFTyxTQUFTbVIsbUNBQW1DQSxDQUNqRHhnQyxLQUFlLEVBQUF5Z0MsTUFBQSxFQUVMO0VBQUEsSUFEVHRnQyxHQUFHLEdBQUFzZ0MsTUFBQSxDQUFIdGdDLEdBQUc7SUFBRXZGLE1BQU0sR0FBQTZsQyxNQUFBLENBQU43bEMsTUFBTTtFQUVaLElBQU15UyxTQUFTLEdBQUdyTixLQUFLLENBQUM3QyxPQUFPLENBQUNnRCxHQUFHLENBQUM7RUFDcEMsSUFBSSxDQUFDa04sU0FBUyxFQUFFO0lBQ2QzRCxlQUFPLENBQUNDLEtBQUssWUFBQXZDLE1BQUEsQ0FBWWpILEdBQUcsa0JBQWUsQ0FBQztJQUM1QyxPQUFPSCxLQUFLO0VBQ2Q7RUFDQSxJQUFJcU4sU0FBUyxDQUFDN0ssSUFBSSxLQUFLcU0sdUJBQVksQ0FBQ0MsU0FBUyxFQUFFO0lBQzdDcEYsZUFBTyxDQUFDQyxLQUFLLDZHQUViLENBQUM7SUFDRCxPQUFPM0osS0FBSztFQUNkO0VBRUEsSUFBTTBnQyxPQUFPLEdBQUdDLG1CQUFtQixDQUFDL2xDLE1BQU0sQ0FBQztFQUUzQyxPQUFPLElBQUEwVyxzQkFBSyxFQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUF4RSxzQkFBSyxFQUFDLElBQUF5RSx1QkFBTSxFQUFDbXZCLE9BQU8sQ0FBQyxDQUFDcnpCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3JOLEtBQUssQ0FBQztBQUNuRTtBQUVBLFNBQVMyZ0MsbUJBQW1CQSxDQUFDL2xDLE1BQU0sRUFBRTtFQUNuQyxJQUFNZ21DLE9BQU8sR0FBRyxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUM7RUFDMUMsT0FBT3BwQyxNQUFNLENBQUNnQyxJQUFJLENBQUNvQixNQUFNLENBQUMsQ0FBQzBSLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUU3SSxJQUFJLEVBQUs7SUFDaEQsSUFBSSxDQUFDazlCLE9BQU8sQ0FBQzM1QixRQUFRLENBQUN2RCxJQUFJLENBQUMsRUFBRTtNQUMzQmdHLGVBQU8sQ0FBQ0MsS0FBSyxtRkFBQXZDLE1BQUEsQ0FDdUUxRCxJQUFJLENBQ3hGLENBQUM7TUFDRCxPQUFPNkksSUFBSTtJQUNiOztJQUVBO0lBQ0FBLElBQUksQ0FBQzdJLElBQUksQ0FBQyxHQUFHOUksTUFBTSxDQUFDOEksSUFBSSxDQUFDO0lBQ3pCLE9BQU82SSxJQUFJO0VBQ2IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBU3MwQixrQ0FBa0NBLENBQ2hEN2dDLEtBQWUsRUFBQThnQyxNQUFBLEVBRUw7RUFBQSxJQURUbG1DLE1BQU0sR0FBQWttQyxNQUFBLENBQU5sbUMsTUFBTTtFQUVQLElBQUksQ0FBQ0EsTUFBTSxFQUFFO0lBQ1gsT0FBT29GLEtBQUs7RUFDZDtFQUNBLElBQU0wZ0MsT0FBTyxHQUFHQyxtQkFBbUIsQ0FBQy9sQyxNQUFNLENBQUM7RUFDM0MsT0FBTyxJQUFBMFcsc0JBQUssRUFBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUFDLHVCQUFNLEVBQUNtdkIsT0FBTyxDQUFDLENBQUMsQ0FBQzFnQyxLQUFLLENBQUM7QUFDekQ7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBUytnQywrQkFBK0JBLENBQzdDL2dDLEtBQVEsRUFDUndCLE1BQXNELEVBQ25EO0VBQUEsSUFBQXcvQixxQkFBQTtFQUNILElBQU9DLEtBQUssR0FBV3ovQixNQUFNLENBQXRCeS9CLEtBQUs7SUFBRS9nQyxLQUFLLEdBQUlzQixNQUFNLENBQWZ0QixLQUFLO0VBQ25CLElBQVdnaEMsYUFBYSxHQUFXRCxLQUFLLENBQWpDeG1DLEVBQUU7SUFBaUIwbUMsS0FBSyxHQUFJRixLQUFLLENBQWRFLEtBQUs7RUFDL0IsSUFBSSxDQUFDamhDLEtBQUssRUFBRTtJQUNWd0osZUFBTyxDQUFDaUssSUFBSSx5Q0FBeUMsQ0FBQztJQUN0RCxPQUFPM1QsS0FBSztFQUNkO0VBQ0EsSUFBSSxFQUFBZ2hDLHFCQUFBLEdBQUE5Z0MsS0FBSyxDQUFDa2hDLGlCQUFpQixjQUFBSixxQkFBQSx1QkFBdkJBLHFCQUFBLENBQTBCRSxhQUFhLENBQUMsTUFBS0MsS0FBSyxFQUFFO0lBQ3RELE9BQU9uaEMsS0FBSztFQUNkO0VBRUFFLEtBQUssQ0FBQ2toQyxpQkFBaUIsR0FBQXRuQyxhQUFBLENBQUFBLGFBQUEsS0FDbEJvRyxLQUFLLENBQUNraEMsaUJBQWlCLFdBQUFubkMsZ0JBQUEsaUJBQ3pCaW5DLGFBQWEsRUFBR0MsS0FBSyxFQUN2QjtFQUVELE9BQUFybkMsYUFBQSxDQUFBQSxhQUFBLEtBQ0trRyxLQUFLO0lBQ1JsRCxNQUFNLEVBQUUsSUFBQWdRLHNCQUFLLEVBQUM1TSxLQUFLLENBQUMsQ0FBQ0YsS0FBSyxDQUFDbEQsTUFBTTtFQUFDO0FBRXRDOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVN1a0MscUJBQXFCQSxDQUNuQ3JoQyxLQUFRLEVBQ1J3QixNQUE0QyxFQUN6QztFQUNILElBQU90QixLQUFLLEdBQTZCc0IsTUFBTSxDQUF4Q3RCLEtBQUs7SUFBRW9oQyxXQUFXLEdBQWdCOS9CLE1BQU0sQ0FBakM4L0IsV0FBVztJQUFFL2xDLFVBQVUsR0FBSWlHLE1BQU0sQ0FBcEJqRyxVQUFVO0VBQ3JDLElBQUksQ0FBQzJFLEtBQUssRUFBRTtJQUNWcWhDLE9BQU8sQ0FBQzV0QixJQUFJLHVDQUF1QyxDQUFDO0lBQ3BELE9BQU8zVCxLQUFLO0VBQ2Q7O0VBRUE7RUFDQSxJQUFNM0IsT0FBTyxHQUFHaWpDLFdBQVcsR0FDdkI7SUFDRTVlLE1BQU0sRUFBRSxJQUFJO0lBQ1o4ZSxNQUFNLEVBQUU7TUFDTkMsY0FBYyxFQUFFSDtJQUNsQixDQUFDO0lBQ0QvbEMsVUFBVSxFQUFFQSxVQUFVLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDMkUsS0FBSyxFQUFFO01BQ0x5RSxLQUFLLEVBQUU7UUFDTHhFLEdBQUcsRUFBRUgsS0FBSyxDQUFDbEQsTUFBTSxDQUFDNEYsU0FBUyxDQUFDLFVBQUFSLENBQUM7VUFBQSxPQUFJQSxDQUFDLENBQUN6SCxFQUFFLEtBQUt5RixLQUFLLENBQUN6RixFQUFFO1FBQUEsRUFBQztRQUNuREEsRUFBRSxFQUFFeUYsS0FBSyxDQUFDekY7TUFDWjtJQUNGO0VBQ0YsQ0FBQyxHQUNELElBQUk7RUFFUixPQUFBWCxhQUFBLENBQUFBLGFBQUEsS0FDS2tHLEtBQUs7SUFDUjNCLE9BQU8sRUFBUEE7RUFBTztBQUVYOztBQUVBO0FBQ08sU0FBU21HLHNDQUFzQ0EsQ0FDcER4RSxLQUFRLEVBQ1J3QixNQUE2RCxFQUMxRDtFQUFBLElBQUFrZ0MscUJBQUEsRUFBQUMsc0JBQUE7RUFDSCxJQUFZM0gsU0FBUyxHQUFvQng0QixNQUFNLENBQXhDckIsR0FBRztJQUFBeWhDLGNBQUEsR0FBK0JwZ0MsTUFBTSxDQUF4QmlELE1BQU07SUFBTkEsTUFBTSxHQUFBbTlCLGNBQUEsY0FBRyxLQUFLLEdBQUFBLGNBQUE7RUFFckMsSUFBTWxvQyxNQUFNLEdBQUdzRyxLQUFLLENBQUM3QyxPQUFPLENBQUM2OEIsU0FBUyxDQUFvQjtFQUUxRCxJQUFJeDVCLFFBQVEsR0FBR1IsS0FBSztFQUNwQixJQUFJNk0sU0FBUyxHQUFHblQsTUFBTTs7RUFFdEI7RUFDQSxJQUFJK0ssTUFBTSxFQUFFO0lBQ1YsSUFBTXd6QixnQkFBZ0IsR0FBRyxJQUFBdnpCLGlDQUEwQixFQUFDbEUsUUFBUSxDQUFDMUQsTUFBTSxDQUFDO0lBQ3BFO0lBQ0EsSUFBSSxDQUFDbTdCLGdCQUFnQixDQUFDMS9CLE1BQU0sRUFBRTtNQUM1QixPQUFPaUksUUFBUTtJQUNqQjtJQUVBLElBQU1xaEMsNEJBQTRCLEdBQUcsSUFBQUMsc0NBQStCLEVBQUM3SixnQkFBZ0IsQ0FBQztJQUN0RixJQUFNOEosOEJBQThCLEdBQUdyNkIsT0FBTyxDQUFDbTZCLDRCQUE0QixDQUFDdHBDLE1BQU0sQ0FBQztJQUVuRixJQUFNeXBDLGVBQWUsR0FBRyxJQUFBNUosdUJBQWdCLEVBQUMsQ0FBQzErQixNQUFNLENBQUMrQixNQUFNLEVBQUUrRSxRQUFRLENBQUMxQixlQUFlLENBQUNyRCxNQUFNLENBQUMsQ0FBQzs7SUFFMUY7SUFDQSxJQUFJc21DLDhCQUE4QixFQUFFO01BQ2xDLElBQUlyb0MsTUFBTSxDQUFDa1QsZUFBZSxLQUFLcTFCLDJCQUFnQixDQUFDQyxRQUFRLEVBQUU7UUFDeEQxaEMsUUFBUSxHQUFHa00sK0JBQStCLENBQUNsTSxRQUFRLEVBQUU7VUFDbkQvRixFQUFFLEVBQUVmLE1BQU0sQ0FBQ2UsRUFBRTtVQUNibVMsZUFBZSxFQUFFcTFCLDJCQUFnQixDQUFDQztRQUNwQyxDQUFDLENBQUM7TUFDSjtNQUVBcjFCLFNBQVMsR0FBR3JNLFFBQVEsQ0FBQ3JELE9BQU8sQ0FBQzY4QixTQUFTLENBQW9COztNQUUxRDtNQUNBbnRCLFNBQVMsR0FBR3MxQix3QkFBd0IsQ0FBQzNoQyxRQUFRLEVBQUVxTSxTQUFTLENBQUM7O01BRXpEO01BQ0FyTSxRQUFRLEdBQUExRyxhQUFBLENBQUFBLGFBQUEsS0FDSDBHLFFBQVE7UUFDWHJELE9BQU8sRUFBRSxJQUFBMlAsc0JBQUssRUFBU0QsU0FBUyxDQUFDLENBQUNyTSxRQUFRLENBQUNyRCxPQUFPO01BQUMsRUFDcEQ7SUFDSDtJQUVBMFAsU0FBUyxHQUFHck0sUUFBUSxDQUFDckQsT0FBTyxDQUFDNjhCLFNBQVMsQ0FBb0I7O0lBRTFEO0lBQ0EsSUFBTW9JLGVBQWMsR0FBRyxJQUFBeHlCLGdDQUF5QixFQUM5Qy9DLFNBQVMsQ0FBQ0QsZUFBZSxLQUFLcTFCLDJCQUFnQixDQUFDQyxRQUFRLEdBQ25ELENBQUNGLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRUEsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQ3hDQSxlQUFlLEVBQUFsb0MsYUFBQSxDQUFBQSxhQUFBLEtBQ2YrUyxTQUFTO01BQUVwUixNQUFNLEVBQUV1bUM7SUFBZSxFQUN4QyxDQUFDO0lBRUR4aEMsUUFBUSxHQUFHaU0sZ0JBQWdCLENBQUNqTSxRQUFRLEVBQUU7TUFDcENMLEdBQUcsRUFBRTY1QixTQUFTO01BQ2R0MkIsSUFBSSxFQUFFLE9BQU87TUFDYjlLLEtBQUssRUFBRXdwQztJQUNULENBQUMsQ0FBQztJQUVGdjFCLFNBQVMsR0FBQS9TLGFBQUEsQ0FBQUEsYUFBQSxLQUNIMEcsUUFBUSxDQUFDckQsT0FBTyxDQUFDNjhCLFNBQVMsQ0FBQztNQUMvQi96Qix1QkFBdUIsRUFBRTtJQUFJLEVBQzlCOztJQUVEO0lBQ0F6RixRQUFRLEdBQUExRyxhQUFBLENBQUFBLGFBQUEsS0FDSDBHLFFBQVE7TUFDWHJELE9BQU8sRUFBRSxJQUFBMlAsc0JBQUssRUFBU0QsU0FBUyxDQUFDLENBQUNyTSxRQUFRLENBQUNyRCxPQUFPO0lBQUMsRUFDcEQ7SUFFRHFELFFBQVEsR0FBR3lNLGdDQUFnQyxDQUFDek0sUUFBUSxFQUFFO01BQ3BEL0YsRUFBRSxFQUFFb1MsU0FBUyxDQUFDcFMsRUFBRTtNQUNoQjJCLElBQUksRUFBRTRRLG9CQUFvQixDQUFDSCxTQUFTO0lBQ3RDLENBQUMsQ0FBQztJQUVGQSxTQUFTLEdBQUdyTSxRQUFRLENBQUNyRCxPQUFPLENBQUM2OEIsU0FBUyxDQUFvQjs7SUFFMUQ7SUFDQSxPQUFPNXRCLDRCQUE0QixDQUFDNUwsUUFBUSxFQUFFO01BQzVDNUgsS0FBSyxFQUFFaVUsU0FBUyxDQUFDalUsS0FBSyxDQUFDaVUsU0FBUyxDQUFDdzFCLGdCQUFnQjtJQUNuRCxDQUFDLENBQUM7RUFDSjs7RUFFQTtFQUNBeDFCLFNBQVMsR0FBQS9TLGFBQUEsQ0FBQUEsYUFBQSxLQUNKSixNQUFNO0lBQ1R1TSx1QkFBdUIsRUFBRTtFQUFLLEVBQy9COztFQUVEO0VBQ0F6RixRQUFRLEdBQUExRyxhQUFBLENBQUFBLGFBQUEsS0FDSDBHLFFBQVE7SUFDWHJELE9BQU8sRUFBRSxJQUFBMlAsc0JBQUssRUFBU0QsU0FBUyxDQUFDLENBQUNyTSxRQUFRLENBQUNyRCxPQUFPO0VBQUMsRUFDcEQ7O0VBRUQ7RUFDQXFELFFBQVEsR0FBR3lNLGdDQUFnQyxDQUFDek0sUUFBUSxFQUFFO0lBQ3BEL0YsRUFBRSxFQUFFb1MsU0FBUyxDQUFDcFMsRUFBRTtJQUNoQjJCLElBQUksRUFBRWttQyw4QkFBbUIsQ0FBQ0M7RUFDNUIsQ0FBQyxDQUFDO0VBRUYxMUIsU0FBUyxHQUFHck0sUUFBUSxDQUFDckQsT0FBTyxDQUFDNjhCLFNBQVMsQ0FBb0I7O0VBRTFEO0VBQ0EsSUFBTW9JLGNBQWMsR0FBRyxJQUFBeHlCLGdDQUF5QixFQUFDL0MsU0FBUyxDQUFDcFIsTUFBTSxFQUFFb1IsU0FBUyxDQUFDO0VBRTdFck0sUUFBUSxHQUFHaU0sZ0JBQWdCLENBQUNqTSxRQUFRLEVBQUU7SUFDcENMLEdBQUcsRUFBRTY1QixTQUFTO0lBQ2R0MkIsSUFBSSxFQUFFLE9BQU87SUFDYjlLLEtBQUssRUFBRXdwQztFQUNULENBQUMsQ0FBQztFQUVGNWhDLFFBQVEsR0FBR3lNLGdDQUFnQyxDQUFDek0sUUFBUSxFQUFFO0lBQ3BEL0YsRUFBRSxFQUFFb1MsU0FBUyxDQUFDcFMsRUFBRTtJQUNoQjJCLElBQUksRUFBRTRRLG9CQUFvQixDQUFDSCxTQUFTO0VBQ3RDLENBQUMsQ0FBQzs7RUFFRjtFQUNBLE9BQU9ULDRCQUE0QixDQUFDNUwsUUFBUSxFQUFFO0lBQzVDNUgsS0FBSyxHQUFBOG9DLHFCQUFBLElBQUFDLHNCQUFBLEdBQUVuaEMsUUFBUSxDQUFDMUIsZUFBZSxDQUFDckQsTUFBTSxjQUFBa21DLHNCQUFBLHVCQUEvQkEsc0JBQUEsQ0FBa0MsQ0FBQyxDQUFDLGNBQUFELHFCQUFBLGNBQUFBLHFCQUFBLEdBQUk7RUFDakQsQ0FBQyxDQUFDO0FBQ0o7QUFFTyxTQUFTejBCLGdDQUFnQ0EsQ0FDOUNqTixLQUFRLEVBQ1J3QixNQUEyRCxFQUMzRDtFQUNBLElBQVc0TCxRQUFRLEdBQTRCNUwsTUFBTSxDQUE5Qy9HLEVBQUU7SUFBa0I0bkMsZ0JBQWdCLEdBQUk3Z0MsTUFBTSxDQUFoQ3BGLElBQUk7RUFFekIsSUFBTTQ5QixTQUFTLEdBQUdoNkIsS0FBSyxDQUFDN0MsT0FBTyxDQUFDdUYsU0FBUyxDQUFDLFVBQUEzTCxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDMEQsRUFBRSxLQUFLMlMsUUFBUTtFQUFBLEVBQUM7RUFDakUsSUFBSTRzQixTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7SUFDcEIsT0FBT2g2QixLQUFLO0VBQ2Q7RUFFQSxJQUFNdEcsTUFBTSxHQUFHc0csS0FBSyxDQUFDN0MsT0FBTyxDQUFDNjhCLFNBQVMsQ0FBb0I7RUFFMUQsSUFBSSxDQUFDd0kseUJBQXlCLENBQUM5b0MsTUFBTSxFQUFFMm9DLGdCQUFnQixDQUFDLEVBQUU7SUFDeEQsT0FBT3JpQyxLQUFLO0VBQ2Q7RUFFQSxJQUFNNk0sU0FBUyxHQUFBL1MsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZKLE1BQU07SUFDVDJvQyxnQkFBZ0IsRUFBaEJBO0VBQWdCLEVBQ2pCO0VBRUQsSUFBTTdoQyxRQUFRLEdBQUExRyxhQUFBLENBQUFBLGFBQUEsS0FDVGtHLEtBQUs7SUFDUjdDLE9BQU8sRUFBRSxJQUFBMlAsc0JBQUssRUFBU0QsU0FBUyxDQUFDLENBQUM3TSxLQUFLLENBQUM3QyxPQUFPO0VBQUMsRUFDakQ7RUFFRCxPQUFPNFIsK0JBQStCLENBQUN2TyxRQUFRLEVBQUV3NUIsU0FBUyxDQUFDO0FBQzdEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0xTSwwQkFBMEIsR0FBQS95QixPQUFBLENBQUEreUIsMEJBQUEsR0FBRyxTQUE3QkEsMEJBQTBCQSxDQUNyQ3R0QixLQUFlLEVBQUF5aUMsTUFBQSxFQUVGO0VBQUEsSUFERmpWLE1BQU0sR0FBQWlWLE1BQUEsQ0FBaEJwaEIsT0FBTyxDQUFHbU0sTUFBTTtFQUVqQixJQUFLdHVCLHFCQUFxQixHQUFJYyxLQUFLLENBQTlCZCxxQkFBcUI7RUFDMUIsSUFBSSxDQUFDQSxxQkFBcUIsRUFBRTtJQUMxQkEscUJBQXFCLEdBQUcsQ0FBQztFQUMzQjtFQUVBLE9BQUFwRixhQUFBLENBQUFBLGFBQUEsS0FDS2tHLEtBQUs7SUFDUmQscUJBQXFCLEVBQUV1cEIsSUFBSSxDQUFDVyxHQUFHLENBQUNscUIscUJBQXFCLEdBQUdzdUIsTUFBTSxFQUFFLENBQUM7RUFBQztBQUV0RSxDQUFDO0FBRUQsU0FBU3plLCtCQUErQkEsQ0FBcUIvTyxLQUFRLEVBQUVnNkIsU0FBaUIsRUFBSztFQUMzRixJQUFNdGdDLE1BQU0sR0FBR3NHLEtBQUssQ0FBQzdDLE9BQU8sQ0FBQzY4QixTQUFTLENBQUM7RUFDdkMsSUFBS3RnQyxNQUFNLENBQXFCdU0sdUJBQXVCLEVBQUU7SUFDdkQsSUFBTXk4QixhQUFhLEdBQUdDLDBCQUEwQixDQUFDanBDLE1BQU0sQ0FBQztJQUN4RCxJQUFNZCxLQUFLLEdBQUdvSCxLQUFLLENBQUNsQixlQUFlLENBQUNqRCxTQUFTLEdBQ3pDLElBQUErbUMsa0JBQVcsRUFBQ0YsYUFBYSxFQUFFMWlDLEtBQUssQ0FBQ2xCLGVBQWUsQ0FBQ2pELFNBQVMsQ0FBQyxHQUMzRDZtQyxhQUFhO0lBQ2pCLE9BQU90MkIsNEJBQTRCLENBQUNwTSxLQUFLLEVBQUU7TUFBQ3BILEtBQUssRUFBTEE7SUFBSyxDQUFDLENBQUM7RUFDckQ7RUFDQSxPQUFPb0gsS0FBSztBQUNkO0FBRUEsU0FBUzJpQywwQkFBMEJBLENBQUNqcEMsTUFBTSxFQUFFO0VBQzFDLE9BQU9BLE1BQU0sQ0FBQ2QsS0FBSyxDQUFDYyxNQUFNLENBQUMyb0MsZ0JBQWdCLENBQUM7QUFDOUM7QUFFQSxTQUFTcjFCLG9CQUFvQkEsQ0FBQ3RULE1BQXVCLEVBQUU7RUFDckQsSUFBSUEsTUFBTSxDQUFDa1QsZUFBZSxLQUFLcTFCLDJCQUFnQixDQUFDWSxJQUFJLEVBQUU7SUFBQSxJQUFBQyxxQkFBQTtJQUNwRCxRQUFBQSxxQkFBQSxHQUFPcHBDLE1BQU0sQ0FBQzJvQyxnQkFBZ0IsY0FBQVMscUJBQUEsY0FBQUEscUJBQUEsR0FBSVIsOEJBQW1CLENBQUNDLEdBQUc7RUFDM0Q7RUFFQSxPQUFPRCw4QkFBbUIsQ0FBQ0MsR0FBRztBQUNoQztBQUVBLFNBQVNDLHlCQUF5QkEsQ0FBQzlvQyxNQUF1QixFQUFFcXBDLE9BQWUsRUFBRTtFQUMzRSxPQUFPLEVBQ0xycEMsTUFBTSxDQUFDa1QsZUFBZSxLQUFLcTFCLDJCQUFnQixDQUFDWSxJQUFJLElBQUlFLE9BQU8sS0FBS1QsOEJBQW1CLENBQUNVLEtBQUssQ0FDMUY7QUFDSDtBQUVBLFNBQVNiLHdCQUF3QkEsQ0FBQ25pQyxLQUFLLEVBQUV0RyxNQUFNLEVBQUU7RUFDL0MsSUFBTW1vQyw0QkFBNEIsR0FBRyxJQUFBQyxzQ0FBK0IsRUFBQzloQyxLQUFLLENBQUNsRCxNQUFNLENBQUM7RUFFbEYsSUFBSW9sQyxRQUF1QixHQUFHLElBQUk7RUFDbEMsSUFBSUwsNEJBQTRCLENBQUN0cEMsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUMzQztJQUNBLElBQU0wcUMsYUFBYSxHQUFHcEIsNEJBQTRCLENBQUN2MUIsTUFBTSxDQUFDLFVBQUM0MkIsWUFBWSxFQUFFaGhDLENBQUMsRUFBSztNQUM3RSxJQUFJQSxDQUFDLENBQUNpaEMsSUFBSSxDQUFDQyxrQkFBa0IsRUFBRTtRQUM3QixJQUFNQyxRQUFRLEdBQUdDLDZCQUFzQixDQUFDNWdDLFNBQVMsQ0FBQyxVQUFBNUwsQ0FBQztVQUFBLE9BQUlBLENBQUMsS0FBS29MLENBQUMsQ0FBQ2loQyxJQUFJLENBQUNDLGtCQUFrQjtRQUFBLEVBQUM7UUFDdkYsT0FBT0MsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJQSxRQUFRLEdBQUdILFlBQVksR0FBR0csUUFBUSxHQUFHSCxZQUFZO01BQzNFO0lBQ0YsQ0FBQyxFQUFFSSw2QkFBc0IsQ0FBQy9xQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDO0lBQ0EsSUFBTWdyQyxpQkFBaUIsR0FBR0QsNkJBQXNCLENBQUNMLGFBQWEsQ0FBQztJQUMvRGYsUUFBUSxHQUFHc0IsZ0NBQXlCLENBQUNELGlCQUFpQixDQUFDO0VBQ3pEO0VBRUEsSUFBSSxDQUFDckIsUUFBUSxFQUFFO0lBQ2IsT0FBT3hvQyxNQUFNO0VBQ2Y7O0VBRUE7RUFDQSxJQUFNb0MsVUFBVSxHQUFHLElBQUEybkMsMkJBQW9CLEVBQUN2QixRQUFRLENBQUM7RUFDakQsSUFBTXdCLGVBQWUsR0FBQTVwQyxhQUFBLENBQUFBLGFBQUEsS0FBT0osTUFBTSxDQUFDOFgsUUFBUTtJQUFFMHdCLFFBQVEsRUFBUkEsUUFBUTtJQUFFcG1DLFVBQVUsRUFBVkE7RUFBVSxFQUFDO0VBQ2xFLElBQU0rUSxTQUFTLEdBQUcsSUFBQTgyQiwrQkFBd0IsRUFBQ2pxQyxNQUFNLEVBQUVncUMsZUFBZSxFQUFFMWpDLEtBQUssQ0FBQzNDLFFBQVEsQ0FBQztFQUNuRixPQUFPLElBQUF1bUMsbUNBQTRCLEVBQUM1akMsS0FBSyxFQUFFNk0sU0FBUyxDQUFDO0FBQ3ZEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVNnM0IsOEJBQThCQSxDQUFDanJDLEtBQVUsRUFBRXdKLE1BQWMsRUFBRTBoQyxlQUF1QixFQUFFO0VBQUEsSUFBQUMsYUFBQSxFQUFBQyxjQUFBO0VBQzNGLElBQUlwckMsS0FBSyxJQUFJLElBQUksRUFBRTtJQUNqQixPQUFPLElBQUk7RUFDYjtFQUNBLElBQUlSLEtBQUssQ0FBQ0MsT0FBTyxDQUFDTyxLQUFLLENBQUMsRUFBRTtJQUN4QjtJQUNBLElBQU1xckMsUUFBUSxHQUFHcnJDLEtBQUssQ0FDbkJ3SCxHQUFHLENBQUMsVUFBQTROLENBQUM7TUFBQSxPQUFJNjFCLDhCQUE4QixDQUFDNzFCLENBQUMsRUFBRTVMLE1BQU0sRUFBRTBoQyxlQUFlLENBQUM7SUFBQSxFQUFDLENBQ3BFcHFDLE1BQU0sQ0FBQyxVQUFBNEcsQ0FBQztNQUFBLE9BQUlBLENBQUM7SUFBQSxFQUFDO0lBQ2pCLE9BQU8yakMsUUFBUSxDQUFDMXJDLE1BQU0sR0FBRzByQyxRQUFRLEdBQUcsSUFBSTtFQUMxQztFQUNBLElBQUksT0FBT3JyQyxLQUFLLENBQUN3SixNQUFNLEtBQUssUUFBUSxJQUFJeEosS0FBSyxDQUFDd0osTUFBTSxLQUFLQSxNQUFNLEVBQUU7SUFDL0Q7SUFDQSxPQUFBdEksYUFBQSxDQUFBQSxhQUFBLEtBQ0tsQixLQUFLO01BQ1J3SixNQUFNLEVBQUUwaEM7SUFBZTtFQUUzQixDQUFDLE1BQU0sSUFBSTFyQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ08sS0FBSyxDQUFDd0osTUFBTSxDQUFDLElBQUl4SixLQUFLLENBQUN3SixNQUFNLENBQUM2RSxRQUFRLENBQUM3RSxNQUFNLENBQUMsRUFBRTtJQUN2RTtJQUNBLE9BQUF0SSxhQUFBLENBQUFBLGFBQUEsS0FDS2xCLEtBQUs7TUFDUndKLE1BQU0sRUFBRXhKLEtBQUssQ0FBQ3dKLE1BQU0sQ0FBQ2hDLEdBQUcsQ0FBQyxVQUFBRSxDQUFDO1FBQUEsT0FBS0EsQ0FBQyxLQUFLOEIsTUFBTSxHQUFHMGhDLGVBQWUsR0FBR3hqQyxDQUFDO01BQUEsQ0FBQztJQUFDO0VBRXZFLENBQUMsTUFBTSxJQUFJLENBQUF5akMsYUFBQSxHQUFBbnJDLEtBQUssQ0FBQ2dDLE1BQU0sY0FBQW1wQyxhQUFBLGVBQVpBLGFBQUEsQ0FBYzNoQyxNQUFNLElBQUksRUFBQTRoQyxjQUFBLEdBQUFwckMsS0FBSyxDQUFDZ0MsTUFBTSxjQUFBb3BDLGNBQUEsdUJBQVpBLGNBQUEsQ0FBYzVoQyxNQUFNLE1BQUtBLE1BQU0sRUFBRTtJQUNsRTtJQUNBLE9BQUF0SSxhQUFBLENBQUFBLGFBQUEsS0FDS2xCLEtBQUs7TUFDUmdDLE1BQU0sRUFBQWQsYUFBQSxDQUFBQSxhQUFBLEtBQ0RsQixLQUFLLENBQUNnQyxNQUFNO1FBQ2Z3SCxNQUFNLEVBQUUwaEM7TUFBZTtJQUN4QjtFQUVMLENBQUMsTUFBTSxJQUFJLElBQUFJLGVBQVEsRUFBQ3RyQyxLQUFLLENBQUMsSUFBSXBCLE1BQU0sQ0FBQzRKLFNBQVMsQ0FBQzlKLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDcUIsS0FBSyxFQUFFd0osTUFBTSxDQUFDLEVBQUU7SUFDakY7SUFDQSxXQUFBbkksZ0JBQUEsaUJBQVM2cEMsZUFBZSxFQUFHbHJDLEtBQUssQ0FBQ3dKLE1BQU0sQ0FBQztFQUMxQztFQUVBLE9BQU8sSUFBSTtBQUNiOztBQUVBO0FBQ0EsU0FBUytoQyxtQkFBbUJBLENBQUN2ckMsS0FBSyxFQUFFO0VBQUEsSUFBQXdyQyxpQkFBQTtFQUNsQyxJQUFJaHNDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDTyxLQUFLLENBQUMsRUFBRTtJQUN4QjtJQUNBLElBQU15ckMsWUFBWSxHQUFHenJDLEtBQUssQ0FBQ3dILEdBQUcsQ0FBQytqQyxtQkFBbUIsQ0FBQyxDQUFDenFDLE1BQU0sQ0FBQyxVQUFBNEcsQ0FBQztNQUFBLE9BQUlBLENBQUM7SUFBQSxFQUFDO0lBQ2xFLE9BQU8rakMsWUFBWSxDQUFDOXJDLE1BQU0sR0FBRzhyQyxZQUFZLEdBQUcsSUFBSTtFQUNsRDs7RUFFQTtFQUNBLE9BQU8sQ0FBQXpyQyxLQUFLLGFBQUxBLEtBQUssZ0JBQUF3ckMsaUJBQUEsR0FBTHhyQyxLQUFLLENBQUV5WCxVQUFVLGNBQUErekIsaUJBQUEsdUJBQWpCQSxpQkFBQSxDQUFtQmhpQixJQUFJLENBQUMzbkIsRUFBRSxLQUFJLElBQUk7QUFDM0M7O0FBRUE7QUFDQSxTQUFTNnBDLG1CQUFtQkEsQ0FBQ3RrQyxLQUFLLEVBQUV1a0MsVUFBVSxFQUFBQyxNQUFBLEVBQXFDO0VBQUEsSUFBbEM5Z0MsSUFBSSxHQUFBOGdDLE1BQUEsQ0FBSjlnQyxJQUFJO0lBQUV3ZSxXQUFXLEdBQUFzaUIsTUFBQSxDQUFYdGlCLFdBQVc7SUFBRXVpQixZQUFZLEdBQUFELE1BQUEsQ0FBWkMsWUFBWTtFQUM5RTtFQUNBO0VBQ0EsSUFBSSxDQUFDRixVQUFVLEVBQUU7SUFDZixPQUFPdmtDLEtBQUs7RUFDZDtFQUNBLElBQU0wa0MsWUFBWSxHQUNoQmhoQyxJQUFJLEtBQUssUUFBUSxHQUNiNmdDLFVBQVUsQ0FBQ2o0QixNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFbzRCLFNBQVM7SUFBQSxPQUFLNXdCLGtCQUFrQixDQUFDeEgsSUFBSSxFQUFFO01BQUM5UixFQUFFLEVBQUVrcUMsU0FBUyxDQUFDbHFDO0lBQUUsQ0FBQyxDQUFDO0VBQUEsR0FBRXVGLEtBQUssQ0FBQyxHQUMzRjVILEtBQUssQ0FBQ0MsT0FBTyxDQUFDMkgsS0FBSyxDQUFDMEQsSUFBSSxDQUFDLENBQUMsR0FBQTVKLGFBQUEsQ0FBQUEsYUFBQSxLQUVyQmtHLEtBQUssV0FBQS9GLGdCQUFBLGlCQUNQeUosSUFBSSxFQUFHMUQsS0FBSyxDQUFDMEQsSUFBSSxDQUFDLENBQUNoSyxNQUFNLENBQUMsVUFBQWtyQyxDQUFDO0lBQUEsT0FBSSxDQUFDTCxVQUFVLENBQUN0aUMsSUFBSSxDQUFDLFVBQUEwaUMsU0FBUztNQUFBLE9BQUlDLENBQUMsQ0FBQ25xQyxFQUFFLEtBQUtrcUMsU0FBUyxDQUFDbHFDLEVBQUU7SUFBQSxFQUFDO0VBQUEsRUFBQztFQUV2RjtFQUNBdUYsS0FBSzs7RUFFWDtFQUNBLElBQU02a0MsVUFBVSxPQUFBNXFDLGdCQUFBLGlCQUNiaW9CLFdBQVcsRUFBR3VpQixZQUFZO0VBQ3ZCO0VBQ0FBLFlBQVksQ0FBQ0MsWUFBWSxFQUFFSCxVQUFVLENBQUM7RUFDdEM7RUFDRm5zQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ3FzQyxZQUFZLENBQUN4aUIsV0FBVyxDQUFDLENBQUMsTUFBQTlhLE1BQUEsS0FBQUMsbUJBQUEsYUFDbENxOUIsWUFBWSxDQUFDeGlCLFdBQVcsQ0FBQyxPQUFBN2EsbUJBQUEsYUFBS2s5QixVQUFVO0VBQzVDO0VBQ0YsSUFBQUwsZUFBUSxFQUFDUSxZQUFZLENBQUN4aUIsV0FBVyxDQUFDLENBQUMsR0FBQXBvQixhQUFBLENBQUFBLGFBQUEsS0FFNUI0cUMsWUFBWSxDQUFDeGlCLFdBQVcsQ0FBQyxHQUN6QnFpQixVQUFVLElBRWZHLFlBQVksQ0FBQ3hpQixXQUFXLENBQUMsQ0FDOUI7RUFFRCxPQUFBcG9CLGFBQUEsQ0FBQUEsYUFBQSxLQUNLNHFDLFlBQVksR0FDWkcsVUFBVTtBQUVqQjtBQUVBLFNBQVNDLHFCQUFxQkEsQ0FDNUI5a0MsS0FBUSxFQUNSb0MsTUFBYyxFQUNkMmlDLFdBQW1CLEVBQ2hCO0VBQ0gsT0FBTyxJQUFBQyx5QkFBUSxFQUFJLENBQ2pCLElBQUFDLHVCQUFNLEVBQUNDLHlCQUF5QixFQUFFO0lBQUM5aUMsTUFBTSxFQUFOQSxNQUFNO0lBQUUyaUMsV0FBVyxFQUFYQTtFQUFXLENBQUMsQ0FBQyxFQUN4RCxJQUFBRSx1QkFBTSxFQUFDbmxCLG9CQUFvQixFQUFFO0lBQUMxZCxNQUFNLEVBQU5BO0VBQU0sQ0FBQyxDQUFDLENBQ3ZDLENBQUMsQ0FBQ3BDLEtBQUssQ0FBQztBQUNYO0FBRU8sU0FBU21sQyw2QkFBNkJBLENBQzNDbmxDLEtBQVEsRUFDUm9DLE1BQWMsRUFDZDJpQyxXQUFtQixFQUNoQjtFQUFBLElBQUFLLHFCQUFBO0VBQ0gsSUFBTUMsZUFBZSxHQUFHLElBQUFDLGlDQUFpQixFQUFDdGxDLEtBQUssRUFBRUEsS0FBSyxDQUFDVCxNQUFNLENBQUM7RUFDOUQsSUFBTWdELFNBQVMsR0FBR3VpQyxxQkFBcUIsQ0FBQzlrQyxLQUFLLEVBQUVvQyxNQUFNLEVBQUUyaUMsV0FBVyxDQUFDO0VBQ25FO0VBQ0EsSUFBTVEsa0JBQWtCLE9BQUFsK0IsbUJBQUEsYUFBT3JILEtBQUssQ0FBQy9DLFVBQVUsQ0FBQzs7RUFFaEQ7RUFDQXNGLFNBQVMsQ0FBQ2lqQyxvQkFBb0IsR0FBR2h1QyxNQUFNLENBQUNnQyxJQUFJLENBQUN3RyxLQUFLLENBQUMzQyxRQUFRLENBQUMsQ0FBQytDLEdBQUcsQ0FBQyxVQUFBRSxDQUFDO0lBQUEsT0FDaEVBLENBQUMsS0FBSzhCLE1BQU0sR0FBRzJpQyxXQUFXLEdBQUd6a0MsQ0FBQztFQUFBLENBQ2hDLENBQUM7O0VBRUQ7RUFDQSxLQUFBOGtDLHFCQUFBLEdBQUk3aUMsU0FBUyxDQUFDdkYsZUFBZSxjQUFBb29DLHFCQUFBLGVBQXpCQSxxQkFBQSxDQUEyQjdzQyxNQUFNLEVBQUU7SUFBQSxJQUFBa3RDLHFCQUFBO0lBQ3JDO0lBQ0E7SUFDQTtJQUNBbGpDLFNBQVMsQ0FBQzdELG1CQUFtQixHQUFHLElBQUFnbkMsOEJBQXVCLEVBQ3JEMWxDLEtBQUssQ0FBQ3RCLG1CQUFtQixHQUFBK21DLHFCQUFBLEdBQ3pCSixlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRTVtQyxTQUFTLGNBQUFnbkMscUJBQUEsY0FBQUEscUJBQUEsR0FBSSxFQUNoQyxDQUFDO0lBQ0RsakMsU0FBUyxDQUFDdEYsVUFBVSxPQUFBb0ssbUJBQUEsYUFBT2srQixrQkFBa0IsQ0FBQztFQUNoRDtFQUVBLE9BQU9oakMsU0FBUztBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU29qQyx3QkFBd0JBLENBQUEsRUFJNUI7RUFBQSxJQUhWQyxhQUF1QixHQUFBN3JDLFNBQUEsQ0FBQXhCLE1BQUEsUUFBQXdCLFNBQUEsUUFBQXdELFNBQUEsR0FBQXhELFNBQUEsTUFBRyxFQUFFO0VBQUEsSUFDNUI4ckMsR0FBYSxHQUFBOXJDLFNBQUEsQ0FBQXhCLE1BQUEsT0FBQXdCLFNBQUEsTUFBQXdELFNBQUE7RUFBQSxJQUNidW9DLE1BQXVCLEdBQUEvckMsU0FBQSxDQUFBeEIsTUFBQSxPQUFBd0IsU0FBQSxNQUFBd0QsU0FBQTtFQUV2QixJQUFNd29DLFNBQVMsR0FBR0QsTUFBTSxDQUNyQjFsQyxHQUFHLENBQUMsVUFBQWk2QixJQUFJO0lBQUEsT0FBSUEsSUFBSSxhQUFKQSxJQUFJLHVCQUFKQSxJQUFJLENBQUU1L0IsRUFBRTtFQUFBLEVBQUMsQ0FDckJmLE1BQU0sQ0FBQyxVQUFDZSxFQUFFO0lBQUEsT0FBbUJpTixPQUFPLENBQUNqTixFQUFFLENBQUMsSUFBSSxDQUFDb3JDLEdBQUcsQ0FBQzUrQixRQUFRLENBQUN4TSxFQUFZLENBQUM7RUFBQSxFQUFDO0VBRTNFLElBQUksQ0FBQ3NyQyxTQUFTLENBQUN4dEMsTUFBTSxFQUFFO0lBQ3JCLE9BQU9zdEMsR0FBRztFQUNaO0VBRUEsSUFBTUcsS0FBSyxHQUFHLElBQUlwc0IsR0FBRyxJQUFBeFMsTUFBQSxLQUFBQyxtQkFBQSxhQUFLdytCLEdBQUcsT0FBQXgrQixtQkFBQSxhQUFLMCtCLFNBQVMsRUFBQyxDQUFDO0VBQzdDLElBQU1FLE9BQU8sR0FBRyxDQUFDTCxhQUFhLElBQUksRUFBRSxFQUFFbHNDLE1BQU0sQ0FBQyxVQUFBZSxFQUFFO0lBQUEsT0FBSXVyQyxLQUFLLENBQUM5dUMsR0FBRyxDQUFDdUQsRUFBRSxDQUFDO0VBQUEsRUFBQztFQUNqRSxJQUFNcXlCLElBQUksR0FBRyxHQUFBMWxCLE1BQUEsS0FBQUMsbUJBQUEsYUFBSXcrQixHQUFHLE9BQUF4K0IsbUJBQUEsYUFBSzArQixTQUFTLEdBQUVyc0MsTUFBTSxDQUFDLFVBQUFlLEVBQUU7SUFBQSxPQUFJLENBQUN3ckMsT0FBTyxDQUFDaC9CLFFBQVEsQ0FBQ3hNLEVBQUUsQ0FBQztFQUFBLEVBQUM7RUFFdkUsVUFBQTJNLE1BQUEsS0FBQUMsbUJBQUEsYUFBVzQrQixPQUFPLE9BQUE1K0IsbUJBQUEsYUFBS3lsQixJQUFJO0FBQzdCO0FBRU8sU0FBU29ZLHlCQUF5QkEsQ0FDdkNsbEMsS0FBUSxFQUFBa21DLE1BQUEsRUFFTDtFQUFBLElBREY5akMsTUFBTSxHQUFBOGpDLE1BQUEsQ0FBTjlqQyxNQUFNO0lBQUUyaUMsV0FBVyxHQUFBbUIsTUFBQSxDQUFYbkIsV0FBVztFQUVwQixJQUFNTSxlQUFlLEdBQUcsSUFBQUMsaUNBQWlCLEVBQUN0bEMsS0FBSyxFQUFFQSxLQUFLLENBQUNULE1BQU0sQ0FBQztFQUU5RCxJQUFNZ0QsU0FBUyxHQUFHdkMsS0FBSyxDQUFDWCxPQUFPLENBQUNpTixNQUFNLENBQ3BDLFVBQ0U2NUIsU0FBUyxFQUFBQyxNQUFBLEVBRU47SUFBQSxJQURGMWlDLElBQUksR0FBQTBpQyxNQUFBLENBQUoxaUMsSUFBSTtNQUFFd2UsV0FBVyxHQUFBa2tCLE1BQUEsQ0FBWGxrQixXQUFXO01BQUVta0IsdUJBQXVCLEdBQUFELE1BQUEsQ0FBdkJDLHVCQUF1QjtNQUFFQyxrQkFBa0IsR0FBQUYsTUFBQSxDQUFsQkUsa0JBQWtCO01BQUU3QixZQUFZLEdBQUEyQixNQUFBLENBQVozQixZQUFZO01BQUU4QixhQUFhLEdBQUFILE1BQUEsQ0FBYkcsYUFBYTtJQUU1RjtJQUNBLElBQU01aEMsS0FBSyxHQUFHLElBQUFpSixvQkFBTyxFQUFDbEssSUFBSSxDQUFDO0lBQzNCLElBQU04aUMsWUFBWSxHQUFHLElBQUE1NEIsb0JBQU8sRUFBQ3NVLFdBQVcsQ0FBQztJQUN6QyxJQUFNdWtCLFVBQVUsR0FBR3BCLGVBQWUsR0FBRzFnQyxLQUFLLENBQUN2RSxHQUFHLENBQUMsVUFBQXdrQyxDQUFDO01BQUEsT0FBSVMsZUFBZSxDQUFDVCxDQUFDLENBQUM7SUFBQSxFQUFDLEdBQUcsRUFBRTtJQUU1RSxJQUFJOEIsYUFBYSxHQUFHUCxTQUFTO0lBQzdCTSxVQUFVLENBQUN6c0MsT0FBTyxDQUFDLFVBQUMycUMsU0FBUyxFQUFFN3RDLENBQUMsRUFBSztNQUFBLElBQUE2dkMscUJBQUEsRUFBQUMsc0JBQUE7TUFDbkMsSUFBSWpDLFNBQVMsSUFBSSxJQUFJLEVBQUU7UUFDckI7TUFDRjtNQUNBLElBQU1rQyxhQUFhLEdBQUc7UUFDcEJuakMsSUFBSSxFQUFFaUIsS0FBSyxDQUFDN04sQ0FBQyxDQUFDO1FBQ2RvckIsV0FBVyxFQUFFc2tCLFlBQVksQ0FBQzF2QyxDQUFDLENBQUM7UUFDNUJ3dkMsa0JBQWtCLEVBQWxCQSxrQkFBa0I7UUFDbEI3QixZQUFZLEVBQVpBO01BQ0YsQ0FBQzs7TUFFRDtNQUNBO01BQ0EsSUFBTXFDLGVBQWUsR0FDbkJELGFBQWEsQ0FBQzNrQixXQUFXLEtBQUsza0IsU0FBUyxHQUNuQyxJQUFBcVEsb0JBQU8sR0FBQSs0QixxQkFBQSxHQUFDRCxhQUFhLENBQUNHLGFBQWEsQ0FBQzNrQixXQUFXLENBQUMsY0FBQXlrQixxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLEVBQUUsQ0FBQyxHQUN2RCxFQUFFO01BRVIsSUFBTUksWUFBWSxHQUNoQixDQUFBVix1QkFBdUIsYUFBdkJBLHVCQUF1Qix1QkFBdkJBLHVCQUF1QixDQUFHMUIsU0FBUyxFQUFFdmlDLE1BQU0sRUFBRTJpQyxXQUFXLENBQUMsS0FDekRsQiw4QkFBOEIsQ0FBQ2MsU0FBUyxFQUFFdmlDLE1BQU0sRUFBRTJpQyxXQUFXLENBQUM7TUFDaEUyQixhQUFhLEdBQUdLLFlBQVksR0FDeEJDLHVCQUF1QixDQUFDTixhQUFhLEVBQUVLLFlBQVksRUFBRUYsYUFBYSxDQUFDLEdBQ25FSCxhQUFhOztNQUVqQjtNQUNBO01BQ0E7TUFDQTtNQUNBLElBQ0VLLFlBQVksSUFDWkYsYUFBYSxDQUFDM2tCLFdBQVcsS0FBSzNrQixTQUFTLEtBQUFxcEMsc0JBQUEsR0FDdkNGLGFBQWEsQ0FBQ0csYUFBYSxDQUFDM2tCLFdBQVcsQ0FBQyxjQUFBMGtCLHNCQUFBLGVBQXhDQSxzQkFBQSxDQUEwQ3J1QyxNQUFNLElBQ2hEZ3VDLGFBQWEsRUFDYjtRQUNBRyxhQUFhLENBQUNILGFBQWEsQ0FBQyxHQUFHWix3QkFBd0IsQ0FDckRlLGFBQWEsQ0FBQ0gsYUFBYSxDQUFDLEVBQzVCNUIsU0FBUyxDQUFDdmtDLEdBQUcsQ0FBQyxVQUFBaTZCLElBQUk7VUFBQSxPQUFJQSxJQUFJLENBQUM1L0IsRUFBRTtRQUFBLEVBQUMsRUFDOUJxc0MsZUFDRixDQUFDO01BQ0g7SUFDRixDQUFDLENBQUM7SUFFRixPQUFPSixhQUFhO0VBQ3RCLENBQUMsRUFDRDFtQyxLQUNGLENBQUM7RUFFRCxPQUFPdUMsU0FBUztBQUNsQjtBQUVBLFNBQVN5a0MsdUJBQXVCQSxDQUM5QmhuQyxLQUFLLEVBQ0wrbUMsWUFBWSxFQUFBRSxNQUFBLEVBRVo7RUFBQSxJQURDdmpDLElBQUksR0FBQXVqQyxNQUFBLENBQUp2akMsSUFBSTtJQUFFd2UsV0FBVyxHQUFBK2tCLE1BQUEsQ0FBWC9rQixXQUFXO0lBQUVva0Isa0JBQWtCLEdBQUFXLE1BQUEsQ0FBbEJYLGtCQUFrQjtJQUFFN0IsWUFBWSxHQUFBd0MsTUFBQSxDQUFaeEMsWUFBWTtFQUVwRDtFQUNBO0VBQ0EsSUFBSWxpQyxTQUFTLEdBQUcraEMsbUJBQW1CLENBQUN0a0MsS0FBSyxFQUFFK21DLFlBQVksRUFBRTtJQUFDcmpDLElBQUksRUFBSkEsSUFBSTtJQUFFd2UsV0FBVyxFQUFYQSxXQUFXO0lBQUV1aUIsWUFBWSxFQUFaQTtFQUFZLENBQUMsQ0FBQztFQUMzRixJQUFNSixZQUFZLEdBQUcsQ0FBQWlDLGtCQUFrQixhQUFsQkEsa0JBQWtCLHVCQUFsQkEsa0JBQWtCLENBQUdTLFlBQVksQ0FBQyxLQUFJNUMsbUJBQW1CLENBQUM0QyxZQUFZLENBQUM7RUFFNUYsSUFBSTFDLFlBQVksRUFBRTtJQUNoQjloQyxTQUFTLEdBQUcsSUFBQXFMLG9CQUFPLEVBQUN5MkIsWUFBWSxDQUFDLENBQUMvM0IsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRTI2QixXQUFXLEVBQUs7TUFDOUQ7TUFDQTtNQUNBLE9BQU9wQyxxQkFBcUIsQ0FBQ3Y0QixJQUFJLEVBQUUyNkIsV0FBVyxFQUFFQSxXQUFXLENBQUM7SUFDOUQsQ0FBQyxFQUFFM2tDLFNBQVMsQ0FBQztFQUNmO0VBQ0EsT0FBT0EsU0FBUztBQUNsQiIsImlnbm9yZUxpc3QiOltdfQ==