@kepler.gl/reducers 3.3.0-alpha.8 → 3.3.0-alpha.9

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.
@@ -8,7 +8,9 @@ Object.defineProperty(exports, "__esModule", {
8
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;
9
9
  exports.addDefaultLayers = addDefaultLayers;
10
10
  exports.addDefaultTooltips = addDefaultTooltips;
11
- exports.applyCPUFilterUpdater = exports.addLayerUpdater = exports.addLayerToLayerGroupUpdater = exports.addLayerGroupUpdater = exports.addFilterUpdater = exports.addEffectUpdater = void 0;
11
+ exports.addLayerUpdater = exports.addLayerToLayerGroupUpdater = exports.addLayerGroupUpdater = exports.addFilterUpdater = exports.addEffectUpdater = void 0;
12
+ exports.addToDatasetUpdater = addToDatasetUpdater;
13
+ exports.applyCPUFilterUpdater = void 0;
12
14
  exports.applyFilterConfigUpdater = applyFilterConfigUpdater;
13
15
  exports.applyLayerConfigUpdater = applyLayerConfigUpdater;
14
16
  exports.applyMergersUpdater = applyMergersUpdater;
@@ -45,9 +47,16 @@ exports.parseProgress = parseProgress;
45
47
  exports.pinTableColumnUpdater = pinTableColumnUpdater;
46
48
  exports.prepareStateForDatasetReplace = prepareStateForDatasetReplace;
47
49
  exports.processFileContentUpdater = processFileContentUpdater;
48
- exports.removeAnnotationUpdater = exports.receiveMapConfigUpdater = void 0;
50
+ exports.receiveMapConfigUpdater = void 0;
51
+ exports.refreshDatasetErrorUpdater = refreshDatasetErrorUpdater;
52
+ exports.refreshDatasetProgressUpdater = refreshDatasetProgressUpdater;
53
+ exports.refreshDatasetSuccessUpdater = refreshDatasetSuccessUpdater;
54
+ exports.refreshDatasetUpdater = refreshDatasetUpdater;
55
+ exports.removeAnnotationUpdater = void 0;
49
56
  exports.removeDatasetUpdater = removeDatasetUpdater;
50
- exports.removeLayerGroupUpdater = exports.removeLayerFromLayerGroupUpdater = exports.removeFilterUpdater = exports.removeEffectUpdater = void 0;
57
+ exports.removeFilterUpdater = exports.removeEffectUpdater = void 0;
58
+ exports.removeFromDatasetUpdater = removeFromDatasetUpdater;
59
+ exports.removeLayerGroupUpdater = exports.removeLayerFromLayerGroupUpdater = void 0;
51
60
  exports.removeLayerUpdater = removeLayerUpdater;
52
61
  exports.renameDatasetUpdater = renameDatasetUpdater;
53
62
  exports.reorderLayerUpdater = exports.reorderEffectUpdater = void 0;
@@ -76,12 +85,12 @@ exports.sortTableColumnUpdater = sortTableColumnUpdater;
76
85
  exports.swapLayerOrderEntriesUpdater = void 0;
77
86
  exports.syncTimeFilterWithLayerTimelineUpdater = syncTimeFilterWithLayerTimelineUpdater;
78
87
  exports.toggleEditorVisibilityUpdater = toggleEditorVisibilityUpdater;
79
- exports.toggleLayerAnimationUpdater = exports.toggleLayerAnimationControlUpdater = exports.toggleFilterFeatureUpdater = exports.toggleFilterAnimationUpdater = void 0;
80
- exports.toggleSplitMapUpdater = exports.toggleLayerForMapUpdater = void 0;
88
+ exports.toggleSplitMapUpdater = exports.toggleLayerForMapUpdater = exports.toggleLayerAnimationUpdater = exports.toggleLayerAnimationControlUpdater = exports.toggleFilterFeatureUpdater = exports.toggleFilterAnimationUpdater = void 0;
81
89
  exports.updateAllLayerDomainData = updateAllLayerDomainData;
82
90
  exports.updateAnimationDomain = updateAnimationDomain;
83
91
  exports.updateAnnotationUpdater = void 0;
84
92
  exports.updateDatasetPropsUpdater = updateDatasetPropsUpdater;
93
+ exports.updateDatasetUpdater = updateDatasetUpdater;
85
94
  exports.updateEffectUpdater = void 0;
86
95
  exports.updateFileLoadingProgressUpdater = updateFileLoadingProgressUpdater;
87
96
  exports.updateOverlayBlendingUpdater = exports.updateLayerGroupUpdater = exports.updateLayerBlendingUpdater = exports.updateLayerAnimationSpeedUpdater = exports.updateFilterAnimationSpeedUpdater = void 0;
@@ -2151,6 +2160,15 @@ var updateEffectUpdater = exports.updateEffectUpdater = function updateEffectUpd
2151
2160
  return effectOrderId === id ? props.id : effectOrderId;
2152
2161
  });
2153
2162
  }
2163
+ var effect = state.effects[idx];
2164
+ var nextParams = props.parameters;
2165
+ // A timestamp-only no-op still used to allocate a new visState (setProps
2166
+ // mutates in place). That retriggered nested react-redux connect subscribers
2167
+ // while dragging the Light & Shadow day-time slider until React threw
2168
+ // "Maximum update depth exceeded".
2169
+ if (nextParams && Object.keys(props).length === 1 && Object.keys(nextParams).length === 1 && nextParams.timestamp != null && nextParams.timestamp === effect.parameters.timestamp) {
2170
+ return state;
2171
+ }
2154
2172
  var newEffects = (0, _toConsumableArray2["default"])(state.effects);
2155
2173
  newEffects[idx].setProps(props);
2156
2174
  return _objectSpread(_objectSpread({}, state), {}, {
@@ -2625,8 +2643,8 @@ function hydrateExternallyHostedProtoDataset(_x) {
2625
2643
  }
2626
2644
  function _hydrateExternallyHostedProtoDataset() {
2627
2645
  _hydrateExternallyHostedProtoDataset = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(dataset) {
2628
- var _dataset$metadata2, _dataset$metadata3;
2629
- var data;
2646
+ var _dataset$metadata6, _dataset$metadata7;
2647
+ var loaded, _dataset$metadata8;
2630
2648
  return _regenerator["default"].wrap(function _callee2$(_context2) {
2631
2649
  while (1) switch (_context2.prev = _context2.next) {
2632
2650
  case 0:
@@ -2638,16 +2656,32 @@ function _hydrateExternallyHostedProtoDataset() {
2638
2656
  case 2:
2639
2657
  _context2.next = 4;
2640
2658
  return (0, _processors.loadExternallyHostedDataset)({
2641
- source: (_dataset$metadata2 = dataset.metadata) === null || _dataset$metadata2 === void 0 ? void 0 : _dataset$metadata2.source,
2659
+ source: (_dataset$metadata6 = dataset.metadata) === null || _dataset$metadata6 === void 0 ? void 0 : _dataset$metadata6.source,
2642
2660
  format: (0, _constants.getRemoteSourceFormat)(dataset.metadata),
2643
- size: typeof ((_dataset$metadata3 = dataset.metadata) === null || _dataset$metadata3 === void 0 ? void 0 : _dataset$metadata3.size) === 'number' ? dataset.metadata.size : undefined
2661
+ size: typeof ((_dataset$metadata7 = dataset.metadata) === null || _dataset$metadata7 === void 0 ? void 0 : _dataset$metadata7.size) === 'number' ? dataset.metadata.size : undefined,
2662
+ bypassCache: (0, _constants.getDatasetRefreshIntervalMs)(dataset.metadata) > 0
2644
2663
  });
2645
2664
  case 4:
2646
- data = _context2.sent;
2665
+ loaded = _context2.sent;
2666
+ if (loaded.data) {
2667
+ _context2.next = 7;
2668
+ break;
2669
+ }
2670
+ throw new Error("No data loaded from ".concat((_dataset$metadata8 = dataset.metadata) === null || _dataset$metadata8 === void 0 ? void 0 : _dataset$metadata8.source));
2671
+ case 7:
2647
2672
  return _context2.abrupt("return", _objectSpread(_objectSpread({}, dataset), {}, {
2648
- data: data
2673
+ data: loaded.data,
2674
+ metadata: _objectSpread(_objectSpread(_objectSpread({}, dataset.metadata), {}, {
2675
+ etag: loaded.etag,
2676
+ lastModified: loaded.lastModified
2677
+ }, typeof loaded.size === 'number' ? {
2678
+ size: loaded.size
2679
+ } : {}), {}, {
2680
+ lastFetchedAt: Date.now(),
2681
+ refreshStatus: 'idle'
2682
+ })
2649
2683
  }));
2650
- case 6:
2684
+ case 8:
2651
2685
  case "end":
2652
2686
  return _context2.stop();
2653
2687
  }
@@ -2681,6 +2715,342 @@ function createNewDataEntryTask(dataset, datasets) {
2681
2715
  return task || FAIL_CREATE_DATASET_TASK('Failed to create a new dataset due to data verification errors');
2682
2716
  });
2683
2717
  }
2718
+ function patchDatasetMetadata(dataset, patch) {
2719
+ return (0, _table.copyTableAndUpdate)(dataset, {
2720
+ metadata: _objectSpread(_objectSpread({}, dataset.metadata), patch)
2721
+ });
2722
+ }
2723
+ function refreshExternallyHostedTable(_x3) {
2724
+ return _refreshExternallyHostedTable.apply(this, arguments);
2725
+ }
2726
+ function _refreshExternallyHostedTable() {
2727
+ _refreshExternallyHostedTable = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref22) {
2728
+ var metadata, onProgress;
2729
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
2730
+ while (1) switch (_context3.prev = _context3.next) {
2731
+ case 0:
2732
+ metadata = _ref22.arg, onProgress = _ref22.onProgress;
2733
+ return _context3.abrupt("return", (0, _processors.loadExternallyHostedDataset)(_objectSpread(_objectSpread({}, metadata), {}, {
2734
+ onProgress: onProgress,
2735
+ bypassCache: true
2736
+ })));
2737
+ case 2:
2738
+ case "end":
2739
+ return _context3.stop();
2740
+ }
2741
+ }, _callee3);
2742
+ }));
2743
+ return _refreshExternallyHostedTable.apply(this, arguments);
2744
+ }
2745
+ var REFRESH_EXTERNALLY_HOSTED_DATASET_TASK = _tasks["default"].fromPromiseWithProgress(refreshExternallyHostedTable, 'REFRESH_EXTERNALLY_HOSTED_DATASET_TASK');
2746
+
2747
+ /**
2748
+ * Re-fetch an externally hosted dataset and replace its table contents in place.
2749
+ * Layers and filters are kept when field names match.
2750
+ * @memberof visStateUpdaters
2751
+ * @public
2752
+ */
2753
+ function refreshDatasetUpdater(state, _ref23) {
2754
+ var _dataset$metadata2, _dataset$metadata3;
2755
+ var dataId = _ref23.dataId;
2756
+ var dataset = state.datasets[dataId];
2757
+ if (!dataset || dataset.type !== _constants.DatasetType.EXTERNALLY_HOSTED || typeof ((_dataset$metadata2 = dataset.metadata) === null || _dataset$metadata2 === void 0 ? void 0 : _dataset$metadata2.source) !== 'string') {
2758
+ return state;
2759
+ }
2760
+ if (((_dataset$metadata3 = dataset.metadata) === null || _dataset$metadata3 === void 0 ? void 0 : _dataset$metadata3.refreshStatus) === 'loading') {
2761
+ return state;
2762
+ }
2763
+ var nextDataset = patchDatasetMetadata(dataset, {
2764
+ refreshStatus: 'loading',
2765
+ refreshError: undefined,
2766
+ refreshProgress: undefined
2767
+ });
2768
+ return (0, _tasks.withTask)(_objectSpread(_objectSpread({}, state), {}, {
2769
+ datasets: _objectSpread(_objectSpread({}, state.datasets), {}, (0, _defineProperty2["default"])({}, dataId, nextDataset))
2770
+ }), REFRESH_EXTERNALLY_HOSTED_DATASET_TASK({
2771
+ arg: {
2772
+ source: nextDataset.metadata.source,
2773
+ format: (0, _constants.getRemoteSourceFormat)(nextDataset.metadata),
2774
+ size: typeof nextDataset.metadata.size === 'number' ? nextDataset.metadata.size : undefined,
2775
+ etag: typeof nextDataset.metadata.etag === 'string' ? nextDataset.metadata.etag : undefined,
2776
+ lastModified: typeof nextDataset.metadata.lastModified === 'string' ? nextDataset.metadata.lastModified : undefined
2777
+ },
2778
+ onProgress: function onProgress(progress) {
2779
+ var _progress$percent;
2780
+ return (0, _actions.refreshDatasetProgress)(dataId, Math.round(((_progress$percent = progress === null || progress === void 0 ? void 0 : progress.percent) !== null && _progress$percent !== void 0 ? _progress$percent : 0) * 100));
2781
+ }
2782
+ }).bimap(function (result) {
2783
+ return (0, _actions.refreshDatasetSuccess)(dataId, result);
2784
+ }, function (error) {
2785
+ return (0, _actions.refreshDatasetError)(dataId, error);
2786
+ }));
2787
+ }
2788
+
2789
+ /**
2790
+ * Record download progress for an in-flight remote dataset refresh.
2791
+ * @memberof visStateUpdaters
2792
+ * @public
2793
+ */
2794
+ function refreshDatasetProgressUpdater(state, _ref24) {
2795
+ var _dataset$metadata4, _dataset$metadata5;
2796
+ var dataId = _ref24.dataId,
2797
+ percent = _ref24.percent;
2798
+ var dataset = state.datasets[dataId];
2799
+ if (!dataset || ((_dataset$metadata4 = dataset.metadata) === null || _dataset$metadata4 === void 0 ? void 0 : _dataset$metadata4.refreshStatus) !== 'loading') {
2800
+ return state;
2801
+ }
2802
+ var nextPercent = Number.isFinite(percent) ? Math.max(0, Math.min(100, Math.round(percent))) : 0;
2803
+ if (((_dataset$metadata5 = dataset.metadata) === null || _dataset$metadata5 === void 0 ? void 0 : _dataset$metadata5.refreshProgress) === nextPercent) {
2804
+ return state;
2805
+ }
2806
+ return _objectSpread(_objectSpread({}, state), {}, {
2807
+ datasets: _objectSpread(_objectSpread({}, state.datasets), {}, (0, _defineProperty2["default"])({}, dataId, patchDatasetMetadata(dataset, {
2808
+ refreshProgress: nextPercent
2809
+ })))
2810
+ });
2811
+ }
2812
+ function fieldNamesEqual(current, incoming) {
2813
+ if (!(incoming !== null && incoming !== void 0 && incoming.length)) {
2814
+ return true;
2815
+ }
2816
+ if (current.length !== incoming.length) {
2817
+ return false;
2818
+ }
2819
+ return current.every(function (field, i) {
2820
+ return field.name === incoming[i].name;
2821
+ });
2822
+ }
2823
+
2824
+ /**
2825
+ * When a remote snapshot changes column names, old layer fieldIdx / filter names
2826
+ * can point at the wrong column. Re-bind by name and drop configs that no longer fit.
2827
+ */
2828
+ function rebindLayersAndFiltersAfterSchemaChange(state, dataId, datasets) {
2829
+ var dataset = datasets[dataId];
2830
+ var nextLayers = [];
2831
+ var droppedLayers = [];
2832
+ state.layers.forEach(function (layer) {
2833
+ if (layer.config.dataId !== dataId) {
2834
+ nextLayers.push(layer);
2835
+ return;
2836
+ }
2837
+ var rebound = validateExistingLayerWithData(dataset, state.layerClasses, layer, state.schema);
2838
+ if (rebound !== null && rebound !== void 0 && rebound.isValidToSave()) {
2839
+ nextLayers.push(rebound);
2840
+ } else {
2841
+ droppedLayers.push(layer);
2842
+ }
2843
+ });
2844
+ var nextLayerOrder = state.layerOrder;
2845
+ var nextSplitMaps = state.splitMaps;
2846
+ droppedLayers.forEach(function (layer) {
2847
+ nextLayerOrder = (0, _layerUtils.removeElementFromLayerOrder)(nextLayerOrder, layer.id);
2848
+ nextSplitMaps = (0, _utils.removeLayerFromSplitMaps)(nextSplitMaps, layer);
2849
+ });
2850
+ var nextLayerData = nextLayers.map(function (layer) {
2851
+ var oldIdx = state.layers.findIndex(function (oldLayer) {
2852
+ return oldLayer.id === layer.id;
2853
+ });
2854
+ return oldIdx >= 0 ? state.layerData[oldIdx] : {};
2855
+ });
2856
+ var filtersForDataset = state.filters.filter(function (filter) {
2857
+ return (0, _commonUtils.toArray)(filter.dataId).includes(dataId);
2858
+ });
2859
+ var otherFilters = state.filters.filter(function (filter) {
2860
+ return !(0, _commonUtils.toArray)(filter.dataId).includes(dataId);
2861
+ });
2862
+ var _validateFiltersUpdat = (0, _utils.validateFiltersUpdateDatasets)(_objectSpread(_objectSpread({}, state), {}, {
2863
+ datasets: datasets,
2864
+ layers: nextLayers
2865
+ }), filtersForDataset),
2866
+ validated = _validateFiltersUpdat.validated,
2867
+ updatedDatasets = _validateFiltersUpdat.updatedDatasets;
2868
+ var nextFilters = [].concat((0, _toConsumableArray2["default"])(otherFilters), (0, _toConsumableArray2["default"])(validated));
2869
+ var filteredDatasets = (0, _utils.applyFiltersToDatasets)([dataId], updatedDatasets, nextFilters, nextLayers);
2870
+ var nextState = _objectSpread(_objectSpread({}, state), {}, {
2871
+ datasets: filteredDatasets,
2872
+ layers: nextLayers,
2873
+ layerData: nextLayerData,
2874
+ layerOrder: nextLayerOrder,
2875
+ splitMaps: nextSplitMaps,
2876
+ filters: nextFilters
2877
+ });
2878
+ nextState = updateAllLayerDomainData(nextState, [dataId], undefined);
2879
+ return updateAnimationDomain(nextState);
2880
+ }
2881
+
2882
+ /**
2883
+ * Apply a finished remote refresh: keep layers, re-run filters and layer data.
2884
+ * @memberof visStateUpdaters
2885
+ * @public
2886
+ */
2887
+ function refreshDatasetSuccessUpdater(state, _ref25) {
2888
+ var _result$data;
2889
+ var dataId = _ref25.dataId,
2890
+ result = _ref25.result;
2891
+ var dataset = state.datasets[dataId];
2892
+ if (!dataset) {
2893
+ return state;
2894
+ }
2895
+ var metadataPatch = _objectSpread({
2896
+ refreshStatus: 'idle',
2897
+ refreshError: undefined,
2898
+ refreshProgress: undefined,
2899
+ lastFetchedAt: Date.now(),
2900
+ // Always write validators. A 200 that omits them must not keep the previous
2901
+ // ETag or a later 304 can skip a body we no longer have.
2902
+ etag: result.etag,
2903
+ lastModified: result.lastModified
2904
+ }, typeof result.size === 'number' ? {
2905
+ size: result.size
2906
+ } : {});
2907
+ var schemaUnchanged = fieldNamesEqual(dataset.fields, (_result$data = result.data) === null || _result$data === void 0 ? void 0 : _result$data.fields);
2908
+
2909
+ // Apply the snapshot to the table currently in the store. Progress may have
2910
+ // copied it off the object that started the fetch; the task never mutates it.
2911
+ if (!result.notModified && result.data) {
2912
+ // KeplerTable.update is async so DuckDB can await Arrow conversion. The
2913
+ // CSV/GeoJSON path (and KeplerTable.importData) run synchronously before
2914
+ // the first await, so the store table is updated before we copy it below.
2915
+ void dataset.update(result.data);
2916
+ }
2917
+ var refreshed = patchDatasetMetadata(dataset, metadataPatch);
2918
+ var datasets = _objectSpread(_objectSpread({}, state.datasets), {}, (0, _defineProperty2["default"])({}, dataId, refreshed));
2919
+ if (result.notModified || !result.data) {
2920
+ return _objectSpread(_objectSpread({}, state), {}, {
2921
+ datasets: datasets
2922
+ });
2923
+ }
2924
+ if (!schemaUnchanged) {
2925
+ return rebindLayersAndFiltersAfterSchemaChange(state, dataId, datasets);
2926
+ }
2927
+ return reapplyFiltersAndLayerData(_objectSpread(_objectSpread({}, state), {}, {
2928
+ datasets: datasets
2929
+ }), dataId);
2930
+ }
2931
+ function reapplyFiltersAndLayerData(state, dataId) {
2932
+ var filteredDatasets = (0, _utils.applyFiltersToDatasets)([dataId], state.datasets, state.filters, state.layers);
2933
+ var nextState = _objectSpread(_objectSpread({}, state), {}, {
2934
+ datasets: filteredDatasets
2935
+ });
2936
+ nextState = updateAllLayerDomainData(nextState, [dataId], undefined);
2937
+ return updateAnimationDomain(nextState);
2938
+ }
2939
+ function isDatasetRowList(rows) {
2940
+ if (!Array.isArray(rows) || !rows.length) {
2941
+ return Array.isArray(rows);
2942
+ }
2943
+ // A single column-ordered row is an array of primitives; a list of rows is
2944
+ // an array of arrays or an array of field-name records.
2945
+ return Array.isArray(rows[0]) || (0, _utils.isPlainObject)(rows[0]);
2946
+ }
2947
+ function toArrayRow(row, fields) {
2948
+ if (Array.isArray(row)) {
2949
+ return row.length === fields.length ? row : null;
2950
+ }
2951
+ if ((0, _utils.isPlainObject)(row)) {
2952
+ var record = row;
2953
+ return fields.map(function (field) {
2954
+ return Object.prototype.hasOwnProperty.call(record, field.name) ? record[field.name] : null;
2955
+ });
2956
+ }
2957
+ return null;
2958
+ }
2959
+ function normalizeDatasetRows(rows, fields) {
2960
+ if (!fields.length) {
2961
+ return null;
2962
+ }
2963
+ var list = isDatasetRowList(rows) ? rows : [rows];
2964
+ if (!list.length) {
2965
+ return null;
2966
+ }
2967
+ var normalized = [];
2968
+ for (var i = 0; i < list.length; i++) {
2969
+ var arrayRow = toArrayRow(list[i], fields);
2970
+ if (!arrayRow) {
2971
+ return null;
2972
+ }
2973
+ normalized.push(arrayRow);
2974
+ }
2975
+ return normalized;
2976
+ }
2977
+
2978
+ /**
2979
+ * Append or upsert rows on an existing in-memory row dataset. Keeps layers and re-runs filters.
2980
+ * Arrow/DuckDB tables warn and are left unchanged (INSERT / concat not implemented).
2981
+ * @memberof visStateUpdaters
2982
+ * @public
2983
+ */
2984
+ function addToDatasetUpdater(state, _ref26) {
2985
+ var dataId = _ref26.dataId,
2986
+ rows = _ref26.rows,
2987
+ options = _ref26.options;
2988
+ var dataset = state.datasets[dataId];
2989
+ if (!dataset) {
2990
+ return state;
2991
+ }
2992
+ var normalized = normalizeDatasetRows(rows, dataset.fields);
2993
+ if (!normalized) {
2994
+ return state;
2995
+ }
2996
+ var applied = options !== null && options !== void 0 && options.upsertBy ? dataset.upsertRows(normalized, options.upsertBy) : dataset.appendRows(normalized);
2997
+ if (!applied) {
2998
+ return state;
2999
+ }
3000
+ var datasets = _objectSpread(_objectSpread({}, state.datasets), {}, (0, _defineProperty2["default"])({}, dataId, (0, _table.copyTableAndUpdate)(dataset, {})));
3001
+ return reapplyFiltersAndLayerData(_objectSpread(_objectSpread({}, state), {}, {
3002
+ datasets: datasets
3003
+ }), dataId);
3004
+ }
3005
+
3006
+ /**
3007
+ * Delete rows by index or by field values from an existing in-memory row dataset.
3008
+ * Keeps layers. Arrow/DuckDB tables warn and are left unchanged.
3009
+ * @memberof visStateUpdaters
3010
+ * @public
3011
+ */
3012
+ function removeFromDatasetUpdater(state, _ref27) {
3013
+ var dataId = _ref27.dataId,
3014
+ rowIndexes = _ref27.rowIndexes,
3015
+ byField = _ref27.byField;
3016
+ var dataset = state.datasets[dataId];
3017
+ if (!dataset) {
3018
+ return state;
3019
+ }
3020
+ var indexes = byField ? dataset.findRowIndexesByFieldValues(byField.field, (0, _commonUtils.toArray)(byField.values)) : (0, _commonUtils.toArray)(rowIndexes !== null && rowIndexes !== void 0 ? rowIndexes : []);
3021
+ if (!indexes.length) {
3022
+ return state;
3023
+ }
3024
+ if (!dataset.removeRows(indexes)) {
3025
+ return state;
3026
+ }
3027
+ var datasets = _objectSpread(_objectSpread({}, state.datasets), {}, (0, _defineProperty2["default"])({}, dataId, (0, _table.copyTableAndUpdate)(dataset, {})));
3028
+ return reapplyFiltersAndLayerData(_objectSpread(_objectSpread({}, state), {}, {
3029
+ datasets: datasets
3030
+ }), dataId);
3031
+ }
3032
+
3033
+ /**
3034
+ * Record a failed remote dataset refresh without dropping existing rows.
3035
+ * @memberof visStateUpdaters
3036
+ * @public
3037
+ */
3038
+ function refreshDatasetErrorUpdater(state, _ref28) {
3039
+ var dataId = _ref28.dataId,
3040
+ error = _ref28.error;
3041
+ var dataset = state.datasets[dataId];
3042
+ if (!dataset) {
3043
+ return state;
3044
+ }
3045
+ var nextState = _objectSpread(_objectSpread({}, state), {}, {
3046
+ datasets: _objectSpread(_objectSpread({}, state.datasets), {}, (0, _defineProperty2["default"])({}, dataId, patchDatasetMetadata(dataset, {
3047
+ refreshStatus: 'error',
3048
+ refreshError: (error === null || error === void 0 ? void 0 : error.message) || String(error),
3049
+ refreshProgress: undefined
3050
+ })))
3051
+ });
3052
+ return nextState;
3053
+ }
2684
3054
 
2685
3055
  /**
2686
3056
  * Add new dataset to `visState`, with option to load a map config along with the datasets
@@ -2707,10 +3077,10 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
2707
3077
  }
2708
3078
  var createDatasetTasks = [];
2709
3079
  var notificationTasks = [];
2710
- datasets.forEach(function (_ref22, datasetIndex) {
2711
- var _ref22$info = _ref22.info,
2712
- info = _ref22$info === void 0 ? {} : _ref22$info,
2713
- rest = (0, _objectWithoutProperties2["default"])(_ref22, _excluded2);
3080
+ datasets.forEach(function (_ref29, datasetIndex) {
3081
+ var _ref29$info = _ref29.info,
3082
+ info = _ref29$info === void 0 ? {} : _ref29$info,
3083
+ rest = (0, _objectWithoutProperties2["default"])(_ref29, _excluded2);
2714
3084
  var task = createNewDataEntryTask(_objectSpread({
2715
3085
  info: info
2716
3086
  }, rest), state.datasets);
@@ -2991,6 +3361,225 @@ function updateDatasetPropsUpdater(state, action) {
2991
3361
  return state;
2992
3362
  }
2993
3363
 
3364
+ /**
3365
+ * Re-validate a live layer against a table whose schema just changed.
3366
+ *
3367
+ * The layer's columns / visual-channel fields / text-label fields are first
3368
+ * remapped to their new names (via `renames`) so the layer follows a rename
3369
+ * instead of treating the old column as removed, then re-validated with
3370
+ * `validateExistingLayerWithData` — the same serialize + validate path used
3371
+ * when a saved config is loaded against new data. Returns `null` when a
3372
+ * required column is gone (the layer can no longer be built).
3373
+ */
3374
+ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3375
+ var _layer$config$textLab;
3376
+ var configPatch = {};
3377
+
3378
+ // follow renamed columns
3379
+ var columnsPatch = {};
3380
+ var columnsChanged = false;
3381
+ Object.entries(layer.config.columns || {}).forEach(function (_ref30) {
3382
+ var _ref31 = (0, _slicedToArray2["default"])(_ref30, 2),
3383
+ ckey = _ref31[0],
3384
+ col = _ref31[1];
3385
+ if (col !== null && col !== void 0 && col.value && renames[col.value]) {
3386
+ columnsPatch[ckey] = _objectSpread(_objectSpread({}, col), {}, {
3387
+ value: renames[col.value]
3388
+ });
3389
+ columnsChanged = true;
3390
+ }
3391
+ });
3392
+ if (columnsChanged) {
3393
+ configPatch.columns = _objectSpread(_objectSpread({}, layer.config.columns), columnsPatch);
3394
+ }
3395
+
3396
+ // follow renamed visual-channel fields (colorField, sizeField, ...)
3397
+ Object.values(layer.visualChannels).forEach(function (_ref32) {
3398
+ var field = _ref32.field;
3399
+ var fieldConfig = layer.config[field];
3400
+ if (fieldConfig !== null && fieldConfig !== void 0 && fieldConfig.name && renames[fieldConfig.name]) {
3401
+ configPatch[field] = _objectSpread(_objectSpread({}, fieldConfig), {}, {
3402
+ name: renames[fieldConfig.name]
3403
+ });
3404
+ }
3405
+ });
3406
+
3407
+ // follow renamed text-label fields
3408
+ if ((_layer$config$textLab = layer.config.textLabel) !== null && _layer$config$textLab !== void 0 && _layer$config$textLab.length) {
3409
+ var textLabel = layer.config.textLabel.map(function (tl) {
3410
+ return tl.field && renames[tl.field.name] ? _objectSpread(_objectSpread({}, tl), {}, {
3411
+ field: _objectSpread(_objectSpread({}, tl.field), {}, {
3412
+ name: renames[tl.field.name]
3413
+ })
3414
+ }) : tl;
3415
+ });
3416
+ if (textLabel.some(function (tl, i) {
3417
+ return tl !== layer.config.textLabel[i];
3418
+ })) {
3419
+ configPatch.textLabel = textLabel;
3420
+ }
3421
+ }
3422
+
3423
+ // shallow-copy the layer so we never mutate redux state; the copy keeps the
3424
+ // prototype methods (`visualChannels` getter, `isValidToSave`) so it
3425
+ // serializes exactly like a live layer.
3426
+ var layerCopy = Object.assign(Object.create(Object.getPrototypeOf(layer)), layer);
3427
+ if (Object.keys(configPatch).length) {
3428
+ layerCopy.config = _objectSpread(_objectSpread({}, layer.config), configPatch);
3429
+ }
3430
+ var validated = validateExistingLayerWithData(newTable, state.layerClasses, layerCopy, state.schema);
3431
+ return validated && validated.hasAllColumns() ? validated : null;
3432
+ }
3433
+
3434
+ /**
3435
+ * Update an existing dataset's schema (columns/fields) in place and reconcile
3436
+ * everything that referenced the old columns: filters, layers, tooltip fields,
3437
+ * pinned columns and sort state. The dataset keeps its id/label/color/metadata.
3438
+ *
3439
+ * `action.data` is the same shape `KeplerTable.importData` accepts (`{cols,
3440
+ * fields, arrowTable}` when replacing columns). `action.renames` is an optional
3441
+ * old → new column-name map so layers/filters/tooltips follow a rename instead
3442
+ * of treating the old column as removed.
3443
+ *
3444
+ * Reconciliation is name-based — the same way kepler.gl loads a saved config
3445
+ * against changed data. A layer whose required column is gone is removed; a
3446
+ * filter on a gone column is dropped (or the dataset is spliced out of a synced
3447
+ * filter); tooltip fields are remapped / dropped.
3448
+ *
3449
+ * @memberof visStateUpdaters
3450
+ * @public
3451
+ */
3452
+ function updateDatasetUpdater(state, action) {
3453
+ var _interactionConfig2, _tooltip$config;
3454
+ var dataId = action.dataId,
3455
+ data = action.data,
3456
+ _action$renames = action.renames,
3457
+ renames = _action$renames === void 0 ? {} : _action$renames;
3458
+ var existing = state.datasets[dataId];
3459
+ if (!existing) {
3460
+ return state;
3461
+ }
3462
+
3463
+ // 1. rebuild the table schema in place (same id/label/color/metadata)
3464
+ var newTable = (0, _table.copyTableAndUpdate)(existing, {});
3465
+ newTable.updateSchema(data);
3466
+
3467
+ // The data container is rebuilt unsorted and unfiltered; reset the table's
3468
+ // view state that indexes into the old container.
3469
+ newTable.filteredIdxCPU = newTable.allIndexes;
3470
+ newTable.filterRecordCPU = undefined;
3471
+ newTable.sortColumn = undefined;
3472
+ newTable.sortOrder = null;
3473
+ newTable.pinnedColumns = (existing.pinnedColumns || []).map(function (name) {
3474
+ var _renames$name;
3475
+ return (_renames$name = renames[name]) !== null && _renames$name !== void 0 ? _renames$name : name;
3476
+ }).filter(function (name) {
3477
+ return newTable.getColumnFieldIdx(name) > -1;
3478
+ });
3479
+ var newFieldsByName = new Set(newTable.fields.map(function (f) {
3480
+ return f.name;
3481
+ }));
3482
+ var newDatasets = _objectSpread(_objectSpread({}, state.datasets), {}, (0, _defineProperty2["default"])({}, dataId, newTable));
3483
+
3484
+ // 2. reconcile filters
3485
+ var newFilters = state.filters.map(function (filter) {
3486
+ var _renames$oldName, _updated$yAxis;
3487
+ var vi = filter.dataId.indexOf(dataId);
3488
+ if (vi === -1) {
3489
+ return filter;
3490
+ }
3491
+ var oldName = filter.name[vi];
3492
+ var newName = (_renames$oldName = renames[oldName]) !== null && _renames$oldName !== void 0 ? _renames$oldName : oldName;
3493
+ var fieldIdx = newTable.getColumnFieldIdx(newName);
3494
+ if (fieldIdx === -1) {
3495
+ // column is gone: drop a single-dataset filter, splice it out of a synced one
3496
+ return filter.dataId.length === 1 ? null : _removeFilterDataIdAtValueIndex(filter, vi, newDatasets);
3497
+ }
3498
+
3499
+ // column present (possibly renamed): re-resolve name/fieldIdx/domain
3500
+ var _applyFilterFieldName2 = (0, _utils.applyFilterFieldName)(filter, newDatasets, dataId, newName, vi, {
3501
+ mergeDomain: vi > 0
3502
+ }),
3503
+ updated = _applyFilterFieldName2.filter;
3504
+ if (!updated) {
3505
+ return null;
3506
+ }
3507
+
3508
+ // brush filters carry a second y-axis field; follow a rename there too
3509
+ var yAxis = ((_updated$yAxis = updated.yAxis) === null || _updated$yAxis === void 0 ? void 0 : _updated$yAxis.name) && (renames[updated.yAxis.name] ? _objectSpread(_objectSpread({}, updated.yAxis), {}, {
3510
+ name: renames[updated.yAxis.name]
3511
+ }) : newFieldsByName.has(updated.yAxis.name) ? updated.yAxis : null);
3512
+ return _objectSpread(_objectSpread({}, updated), {}, {
3513
+ yAxis: yAxis,
3514
+ // clamp the user's previous selection into the new domain instead of
3515
+ // resetting it to the full range
3516
+ value: (0, _utils.adjustValueToFilterDomain)(filter.value, updated)
3517
+ });
3518
+ }).filter(Boolean);
3519
+
3520
+ // reassign GPU channels now that the filter list is settled
3521
+ newFilters = newFilters.map(function (filter) {
3522
+ return filter.gpu ? (0, _table.assignGpuChannel)((0, _table.setFilterGpuMode)(filter, newFilters), newFilters) : filter;
3523
+ });
3524
+
3525
+ // 3. rebuild the table's filter state (gpuFilter / filterRecord / filteredIndex)
3526
+ newTable.filterTable(newFilters, state.layers.filter(function (l) {
3527
+ return l.config.dataId === dataId;
3528
+ }), {});
3529
+
3530
+ // 4. reconcile layers
3531
+ var layersToRemove = [];
3532
+ var newLayers = state.layers.map(function (layer) {
3533
+ if (layer.config.dataId !== dataId) {
3534
+ return layer;
3535
+ }
3536
+ var reconciled = reconcileLayerWithNewSchema(layer, renames, newTable, state);
3537
+ if (reconciled) {
3538
+ return reconciled;
3539
+ }
3540
+ layersToRemove.push(layer.id);
3541
+ return layer; // placeholder, dropped via removeLayerUpdater below
3542
+ });
3543
+
3544
+ // 5. reconcile tooltip fieldsToShow
3545
+ var interactionConfig = state.interactionConfig;
3546
+ var tooltip = (_interactionConfig2 = interactionConfig) === null || _interactionConfig2 === void 0 ? void 0 : _interactionConfig2.tooltip;
3547
+ var fieldsToShow = tooltip === null || tooltip === void 0 || (_tooltip$config = tooltip.config) === null || _tooltip$config === void 0 || (_tooltip$config = _tooltip$config.fieldsToShow) === null || _tooltip$config === void 0 ? void 0 : _tooltip$config[dataId];
3548
+ if (fieldsToShow) {
3549
+ var nextFieldsToShow = fieldsToShow.flatMap(function (f) {
3550
+ var _renames$f$name;
3551
+ var name = (_renames$f$name = renames[f.name]) !== null && _renames$f$name !== void 0 ? _renames$f$name : f.name;
3552
+ return newFieldsByName.has(name) ? [_objectSpread(_objectSpread({}, f), {}, {
3553
+ name: name
3554
+ })] : [];
3555
+ });
3556
+ interactionConfig = _objectSpread(_objectSpread({}, interactionConfig), {}, {
3557
+ tooltip: _objectSpread(_objectSpread({}, tooltip), {}, {
3558
+ config: _objectSpread(_objectSpread({}, tooltip.config), {}, {
3559
+ fieldsToShow: _objectSpread(_objectSpread({}, tooltip.config.fieldsToShow), {}, (0, _defineProperty2["default"])({}, dataId, nextFieldsToShow))
3560
+ })
3561
+ })
3562
+ });
3563
+ }
3564
+ var nextState = _objectSpread(_objectSpread({}, state), {}, {
3565
+ datasets: newDatasets,
3566
+ filters: newFilters,
3567
+ layers: newLayers,
3568
+ interactionConfig: interactionConfig
3569
+ });
3570
+
3571
+ // 6. drop layers that lost their required columns
3572
+ nextState = layersToRemove.reduce(function (accu, id) {
3573
+ return removeLayerUpdater(accu, {
3574
+ id: id
3575
+ });
3576
+ }, nextState);
3577
+
3578
+ // 7. recompute layer domains + data for the updated dataset
3579
+ nextState = updateAllLayerDomainData(nextState, dataId);
3580
+ return nextState;
3581
+ }
3582
+
2994
3583
  /**
2995
3584
  * When a user clicks on the specific map closing icon
2996
3585
  * the application will close the selected map
@@ -3188,14 +3777,14 @@ function parseProgress() {
3188
3777
  * @memberof visStateUpdaters
3189
3778
  * @public
3190
3779
  */
3191
- var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref23) {
3780
+ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref33) {
3192
3781
  var _accumulated$data;
3193
- var _ref23$payload = _ref23.payload,
3194
- gen = _ref23$payload.gen,
3195
- fileName = _ref23$payload.fileName,
3196
- progress = _ref23$payload.progress,
3197
- accumulated = _ref23$payload.accumulated,
3198
- onFinish = _ref23$payload.onFinish;
3782
+ var _ref33$payload = _ref33.payload,
3783
+ gen = _ref33$payload.gen,
3784
+ fileName = _ref33$payload.fileName,
3785
+ progress = _ref33$payload.progress,
3786
+ accumulated = _ref33$payload.accumulated,
3787
+ onFinish = _ref33$payload.onFinish;
3199
3788
  var stateWithProgress = updateFileLoadingProgressUpdater(state, {
3200
3789
  fileName: fileName,
3201
3790
  progress: parseProgress(state.fileLoadingProgress[fileName], progress)
@@ -3212,9 +3801,9 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
3212
3801
  return (0, _actions.loadFilesSuccess)(result);
3213
3802
  }, function (err) {
3214
3803
  return (0, _actions.loadFilesErr)(fileName, err);
3215
- })] : []), [(0, _tasks2.UNWRAP_TASK)(gen.next()).bimap(function (_ref24) {
3216
- var value = _ref24.value,
3217
- done = _ref24.done;
3804
+ })] : []), [(0, _tasks2.UNWRAP_TASK)(gen.next()).bimap(function (_ref34) {
3805
+ var value = _ref34.value,
3806
+ done = _ref34.done;
3218
3807
  return done ? onFinish(accumulated) : (0, _actions.nextFileBatch)({
3219
3808
  gen: gen,
3220
3809
  fileName: fileName,
@@ -3232,9 +3821,9 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
3232
3821
  * @memberof visStateUpdaters
3233
3822
  * @public
3234
3823
  */
3235
- var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref25) {
3236
- var error = _ref25.error,
3237
- fileName = _ref25.fileName;
3824
+ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref35) {
3825
+ var error = _ref35.error,
3826
+ fileName = _ref35.fileName;
3238
3827
  // update ui with error message
3239
3828
  _window.console.warn(error);
3240
3829
  if (!state.fileLoading) {
@@ -3262,8 +3851,8 @@ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpd
3262
3851
  * @memberof visStateUpdaters
3263
3852
  * @public
3264
3853
  */
3265
- var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref26) {
3266
- var dataId = _ref26.dataId;
3854
+ var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref36) {
3855
+ var dataId = _ref36.dataId;
3267
3856
  // apply cpuFilter
3268
3857
  var dataIds = (0, _commonUtils.toArray)(dataId);
3269
3858
  return dataIds.reduce(function (accu, id) {
@@ -3322,9 +3911,9 @@ function initialFileLoadingProgress(file, index) {
3322
3911
  error: null
3323
3912
  });
3324
3913
  }
3325
- function updateFileLoadingProgressUpdater(state, _ref28) {
3326
- var fileName = _ref28.fileName,
3327
- progress = _ref28.progress;
3914
+ function updateFileLoadingProgressUpdater(state, _ref38) {
3915
+ var fileName = _ref38.fileName,
3916
+ progress = _ref38.progress;
3328
3917
  // @ts-expect-error
3329
3918
  return (0, _composerHelpers.pick_)('fileLoadingProgress')((0, _composerHelpers.pick_)(fileName)((0, _composerHelpers.merge_)(progress)))(state);
3330
3919
  }
@@ -3416,8 +4005,8 @@ function updateAnimationDomain(state) {
3416
4005
  * Update the status of the editor
3417
4006
  * @memberof visStateUpdaters
3418
4007
  */
3419
- var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state, _ref29) {
3420
- var mode = _ref29.mode;
4008
+ var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state, _ref39) {
4009
+ var mode = _ref39.mode;
3421
4010
  var sketchesEnabled = (0, _utils.getApplicationConfig)().enableDrawOnMapSketches;
3422
4011
  if (!sketchesEnabled && (mode === _constants.EDITOR_MODES.DRAW_POINT || mode === _constants.EDITOR_MODES.DRAW_LINESTRING)) {
3423
4012
  return state;
@@ -3435,10 +4024,10 @@ var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorMode
3435
4024
  * Update editor features
3436
4025
  * @memberof visStateUpdaters
3437
4026
  */
3438
- function setFeaturesUpdater(state, _ref30) {
4027
+ function setFeaturesUpdater(state, _ref40) {
3439
4028
  var _lastFeature$properti, _lastFeature$properti2;
3440
- var _ref30$features = _ref30.features,
3441
- features = _ref30$features === void 0 ? [] : _ref30$features;
4029
+ var _ref40$features = _ref40.features,
4030
+ features = _ref40$features === void 0 ? [] : _ref40$features;
3442
4031
  var lastFeature = features.length && features[features.length - 1];
3443
4032
  var newState = _objectSpread(_objectSpread({}, state), {}, {
3444
4033
  editor: _objectSpread(_objectSpread({}, state.editor), {}, {
@@ -3511,10 +4100,10 @@ function findEditorFeature(state, feature) {
3511
4100
  * Set user-facing GeoJSON properties on a sketch or polygon-filter feature.
3512
4101
  * @memberof visStateUpdaters
3513
4102
  */
3514
- function setEditorFeaturePropertiesUpdater(state, _ref31) {
4103
+ function setEditorFeaturePropertiesUpdater(state, _ref41) {
3515
4104
  var _state$editor$selecte2;
3516
- var feature = _ref31.feature,
3517
- properties = _ref31.properties;
4105
+ var feature = _ref41.feature,
4106
+ properties = _ref41.properties;
3518
4107
  if (!(0, _utils.getApplicationConfig)().enableDrawOnMapSketches) {
3519
4108
  return state;
3520
4109
  }
@@ -3553,9 +4142,9 @@ function setEditorFeaturePropertiesUpdater(state, _ref31) {
3553
4142
  * Set the current selected feature
3554
4143
  * @memberof uiStateUpdaters
3555
4144
  */
3556
- var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref32) {
3557
- var feature = _ref32.feature,
3558
- selectionContext = _ref32.selectionContext;
4145
+ var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref42) {
4146
+ var feature = _ref42.feature,
4147
+ selectionContext = _ref42.selectionContext;
3559
4148
  // add bbox for polygon filter to speed up filtering
3560
4149
  var selectedFeature = feature;
3561
4150
  if (feature !== null && feature !== void 0 && feature.properties) {
@@ -3577,8 +4166,8 @@ var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function set
3577
4166
  * Delete existing feature from filters
3578
4167
  * @memberof visStateUpdaters
3579
4168
  */
3580
- function deleteFeatureUpdater(state, _ref33) {
3581
- var feature = _ref33.feature;
4169
+ function deleteFeatureUpdater(state, _ref43) {
4170
+ var feature = _ref43.feature;
3582
4171
  if (!feature) {
3583
4172
  return state;
3584
4173
  }
@@ -3723,10 +4312,10 @@ function setPolygonFilterAllLayersUpdater(state, payload) {
3723
4312
  * @memberof visStateUpdaters
3724
4313
  * @public
3725
4314
  */
3726
- function sortTableColumnUpdater(state, _ref34) {
3727
- var dataId = _ref34.dataId,
3728
- column = _ref34.column,
3729
- mode = _ref34.mode;
4315
+ function sortTableColumnUpdater(state, _ref44) {
4316
+ var dataId = _ref44.dataId,
4317
+ column = _ref44.column,
4318
+ mode = _ref44.mode;
3730
4319
  var dataset = state.datasets[dataId];
3731
4320
  if (!dataset) {
3732
4321
  return state;
@@ -3747,9 +4336,9 @@ function sortTableColumnUpdater(state, _ref34) {
3747
4336
  * @memberof visStateUpdaters
3748
4337
  * @public
3749
4338
  */
3750
- function pinTableColumnUpdater(state, _ref35) {
3751
- var dataId = _ref35.dataId,
3752
- column = _ref35.column;
4339
+ function pinTableColumnUpdater(state, _ref45) {
4340
+ var dataId = _ref45.dataId,
4341
+ column = _ref45.column;
3753
4342
  var dataset = state.datasets[dataId];
3754
4343
  if (!dataset) {
3755
4344
  return state;
@@ -3763,9 +4352,9 @@ function pinTableColumnUpdater(state, _ref35) {
3763
4352
  * @memberof visStateUpdaters
3764
4353
  * @public
3765
4354
  */
3766
- function copyTableColumnUpdater(state, _ref36) {
3767
- var dataId = _ref36.dataId,
3768
- column = _ref36.column;
4355
+ function copyTableColumnUpdater(state, _ref46) {
4356
+ var dataId = _ref46.dataId,
4357
+ column = _ref46.column;
3769
4358
  var dataset = state.datasets[dataId];
3770
4359
  if (!dataset) {
3771
4360
  return state;
@@ -3789,9 +4378,9 @@ function copyTableColumnUpdater(state, _ref36) {
3789
4378
  * @memberof visStateUpdaters
3790
4379
  * @public
3791
4380
  */
3792
- function setColumnDisplayFormatUpdater(state, _ref37) {
3793
- var dataId = _ref37.dataId,
3794
- formats = _ref37.formats;
4381
+ function setColumnDisplayFormatUpdater(state, _ref47) {
4382
+ var dataId = _ref47.dataId,
4383
+ formats = _ref47.formats;
3795
4384
  var dataset = state.datasets[dataId];
3796
4385
  if (!dataset) {
3797
4386
  return state;
@@ -3838,38 +4427,38 @@ function yieldForPaint() {
3838
4427
  setTimeout(resolve, 0);
3839
4428
  });
3840
4429
  }
3841
- function requestDatasetColumnStatistics(_x3) {
4430
+ function requestDatasetColumnStatistics(_x4) {
3842
4431
  return _requestDatasetColumnStatistics.apply(this, arguments);
3843
4432
  }
3844
4433
  function _requestDatasetColumnStatistics() {
3845
- _requestDatasetColumnStatistics = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref38) {
4434
+ _requestDatasetColumnStatistics = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(_ref48) {
3846
4435
  var dataset, field, filterProps, mappedValue, values, result;
3847
- return _regenerator["default"].wrap(function _callee3$(_context3) {
3848
- while (1) switch (_context3.prev = _context3.next) {
4436
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
4437
+ while (1) switch (_context4.prev = _context4.next) {
3849
4438
  case 0:
3850
- dataset = _ref38.dataset, field = _ref38.field;
3851
- _context3.next = 3;
4439
+ dataset = _ref48.dataset, field = _ref48.field;
4440
+ _context4.next = 3;
3852
4441
  return yieldForPaint();
3853
4442
  case 3:
3854
4443
  filterProps = field.filterProps || dataset.getColumnFilterProps(field.name);
3855
4444
  mappedValue = getMappedValue(filterProps);
3856
4445
  values = mappedValue !== null && mappedValue !== void 0 ? mappedValue : (0, _utils.collectColumnValues)(dataset.dataContainer, field.fieldIdx);
3857
- _context3.next = 8;
4446
+ _context4.next = 8;
3858
4447
  return (0, _utils.getColumnStatistics)({
3859
4448
  values: values,
3860
4449
  fieldType: field.type
3861
4450
  });
3862
4451
  case 8:
3863
- result = _context3.sent;
3864
- return _context3.abrupt("return", {
4452
+ result = _context4.sent;
4453
+ return _context4.abrupt("return", {
3865
4454
  result: result,
3866
4455
  filterProps: filterProps
3867
4456
  });
3868
4457
  case 10:
3869
4458
  case "end":
3870
- return _context3.stop();
4459
+ return _context4.stop();
3871
4460
  }
3872
- }, _callee3);
4461
+ }, _callee4);
3873
4462
  }));
3874
4463
  return _requestDatasetColumnStatistics.apply(this, arguments);
3875
4464
  }
@@ -3880,9 +4469,9 @@ var LOAD_COLUMN_STATS_TASK = _tasks["default"].fromPromise(requestDatasetColumnS
3880
4469
  * @memberof visStateUpdaters
3881
4470
  * @public
3882
4471
  */
3883
- function loadColumnStatsUpdater(state, _ref39) {
3884
- var dataId = _ref39.dataId,
3885
- fieldName = _ref39.fieldName;
4472
+ function loadColumnStatsUpdater(state, _ref49) {
4473
+ var dataId = _ref49.dataId,
4474
+ fieldName = _ref49.fieldName;
3886
4475
  var fieldNamesToLoad = (0, _commonUtils.toArray)(fieldName);
3887
4476
  var dataset = state.datasets[dataId];
3888
4477
  var fieldsToLoad = dataset === null || dataset === void 0 ? void 0 : dataset.fields.filter(function (f) {
@@ -3903,9 +4492,9 @@ function loadColumnStatsUpdater(state, _ref39) {
3903
4492
  return LOAD_COLUMN_STATS_TASK({
3904
4493
  dataset: newDataset,
3905
4494
  field: f
3906
- }).bimap(function (_ref40) {
3907
- var result = _ref40.result,
3908
- filterProps = _ref40.filterProps;
4495
+ }).bimap(function (_ref50) {
4496
+ var result = _ref50.result,
4497
+ filterProps = _ref50.filterProps;
3909
4498
  return (0, _actions.loadColumnStatsSuccess)(newDataset.id, f.name, result, filterProps);
3910
4499
  }, function (error) {
3911
4500
  return (0, _actions.loadColumnStatsError)(newDataset.id, f.name, error);
@@ -3920,11 +4509,11 @@ function loadColumnStatsUpdater(state, _ref39) {
3920
4509
  * @memberof visStateUpdaters
3921
4510
  * @public
3922
4511
  */
3923
- function loadColumnStatsSuccessUpdater(state, _ref41) {
3924
- var result = _ref41.result,
3925
- filterProps = _ref41.filterProps,
3926
- dataId = _ref41.dataId,
3927
- fieldName = _ref41.fieldName;
4512
+ function loadColumnStatsSuccessUpdater(state, _ref51) {
4513
+ var result = _ref51.result,
4514
+ filterProps = _ref51.filterProps,
4515
+ dataId = _ref51.dataId,
4516
+ fieldName = _ref51.fieldName;
3928
4517
  var dataset = state.datasets[dataId];
3929
4518
  var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
3930
4519
  return f.name === fieldName;
@@ -3952,10 +4541,10 @@ function loadColumnStatsSuccessUpdater(state, _ref41) {
3952
4541
  * @memberof visStateUpdaters
3953
4542
  * @public
3954
4543
  */
3955
- function loadColumnStatsErrorUpdater(state, _ref42) {
3956
- var error = _ref42.error,
3957
- dataId = _ref42.dataId,
3958
- fieldName = _ref42.fieldName;
4544
+ function loadColumnStatsErrorUpdater(state, _ref52) {
4545
+ var error = _ref52.error,
4546
+ dataId = _ref52.dataId,
4547
+ fieldName = _ref52.fieldName;
3959
4548
  _window.console.error(error);
3960
4549
  var dataset = state.datasets[dataId];
3961
4550
  var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
@@ -4036,9 +4625,9 @@ _action) {
4036
4625
  }
4037
4626
  });
4038
4627
  }
4039
- function setFilterAnimationTimeConfigUpdater(state, _ref43) {
4040
- var idx = _ref43.idx,
4041
- config = _ref43.config;
4628
+ function setFilterAnimationTimeConfigUpdater(state, _ref53) {
4629
+ var idx = _ref53.idx,
4630
+ config = _ref53.config;
4042
4631
  var oldFilter = state.filters[idx];
4043
4632
  if (!oldFilter) {
4044
4633
  _window.console.error("filters.".concat(idx, " is undefined"));
@@ -4068,8 +4657,8 @@ function checkTimeConfigArgs(config) {
4068
4657
  /**
4069
4658
  * Update editor
4070
4659
  */
4071
- function setLayerAnimationTimeConfigUpdater(state, _ref44) {
4072
- var config = _ref44.config;
4660
+ function setLayerAnimationTimeConfigUpdater(state, _ref54) {
4661
+ var config = _ref54.config;
4073
4662
  if (!config) {
4074
4663
  return state;
4075
4664
  }
@@ -4267,8 +4856,8 @@ function setTimeFilterTimelineModeUpdater(state, action) {
4267
4856
  * @returns nextState
4268
4857
  * @public
4269
4858
  */
4270
- var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref45) {
4271
- var change = _ref45.payload.change;
4859
+ var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref55) {
4860
+ var change = _ref55.payload.change;
4272
4861
  var loadingIndicatorValue = state.loadingIndicatorValue;
4273
4862
  if (!loadingIndicatorValue) {
4274
4863
  loadingIndicatorValue = 0;
@@ -4388,10 +4977,10 @@ function findChildDatasetIds(value) {
4388
4977
  }
4389
4978
 
4390
4979
  // moved unmerged layers, filters, interactions
4391
- function moveValueToBeMerged(state, propValues, _ref47) {
4392
- var prop = _ref47.prop,
4393
- toMergeProp = _ref47.toMergeProp,
4394
- saveUnmerged = _ref47.saveUnmerged;
4980
+ function moveValueToBeMerged(state, propValues, _ref57) {
4981
+ var prop = _ref57.prop,
4982
+ toMergeProp = _ref57.toMergeProp,
4983
+ saveUnmerged = _ref57.saveUnmerged;
4395
4984
  // remove prop value from state
4396
4985
  // TODO: should we add remove updater to merger as well?
4397
4986
  if (!propValues) {
@@ -4448,17 +5037,17 @@ function prepareStateForDatasetReplace(state, dataId, dataIdToUse) {
4448
5037
  }
4449
5038
  return nextState;
4450
5039
  }
4451
- function replaceDatasetDepsInState(state, _ref48) {
4452
- var dataId = _ref48.dataId,
4453
- dataIdToUse = _ref48.dataIdToUse;
5040
+ function replaceDatasetDepsInState(state, _ref58) {
5041
+ var dataId = _ref58.dataId,
5042
+ dataIdToUse = _ref58.dataIdToUse;
4454
5043
  var serializedState = (0, _visStateMerger.serializeVisState)(state, state.schema);
4455
- var nextState = state.mergers.reduce(function (accuState, _ref49) {
4456
- var prop = _ref49.prop,
4457
- toMergeProp = _ref49.toMergeProp,
4458
- replaceParentDatasetIds = _ref49.replaceParentDatasetIds,
4459
- getChildDatasetIds = _ref49.getChildDatasetIds,
4460
- saveUnmerged = _ref49.saveUnmerged,
4461
- preserveOrder = _ref49.preserveOrder;
5044
+ var nextState = state.mergers.reduce(function (accuState, _ref59) {
5045
+ var prop = _ref59.prop,
5046
+ toMergeProp = _ref59.toMergeProp,
5047
+ replaceParentDatasetIds = _ref59.replaceParentDatasetIds,
5048
+ getChildDatasetIds = _ref59.getChildDatasetIds,
5049
+ saveUnmerged = _ref59.saveUnmerged,
5050
+ preserveOrder = _ref59.preserveOrder;
4462
5051
  // get dataset ids that are depends on this dataset
4463
5052
  var props = (0, _commonUtils.toArray)(prop);
4464
5053
  var toMergeProps = (0, _commonUtils.toArray)(toMergeProp);
@@ -4486,11 +5075,11 @@ function replaceDatasetDepsInState(state, _ref48) {
4486
5075
  }, state);
4487
5076
  return nextState;
4488
5077
  }
4489
- function replacePropValueInState(state, replacedItem, _ref50) {
4490
- var prop = _ref50.prop,
4491
- toMergeProp = _ref50.toMergeProp,
4492
- getChildDatasetIds = _ref50.getChildDatasetIds,
4493
- saveUnmerged = _ref50.saveUnmerged;
5078
+ function replacePropValueInState(state, replacedItem, _ref60) {
5079
+ var prop = _ref60.prop,
5080
+ toMergeProp = _ref60.toMergeProp,
5081
+ getChildDatasetIds = _ref60.getChildDatasetIds,
5082
+ saveUnmerged = _ref60.saveUnmerged;
4494
5083
  // prop is depends on the dataset to be replaced
4495
5084
  // remove prop from state, and move it to toBeMerged
4496
5085
  var nextState = moveValueToBeMerged(state, replacedItem, {
@@ -4508,4 +5097,4 @@ function replacePropValueInState(state, replacedItem, _ref50) {
4508
5097
  }
4509
5098
  return nextState;
4510
5099
  }
4511
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdGFza3MyIiwiX2FjdGlvbnMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX2xheWVycyIsIl9jb21wb3NlckhlbHBlcnMiLCJfbWVyZ2VySGFuZGxlciIsIl92aXNTdGF0ZU1lcmdlciIsIl9zY2hlbWFzIiwiX3Byb2Nlc3NvcnMiLCJfdGFibGUiLCJfaW50ZXJhY3Rpb25VdGlscyIsIl9sYXllclV0aWxzIiwiX2VmZmVjdHMiLCJfZGF0YVV0aWxzIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImEiLCJ1IiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkaXNhYmxlU3RhY2tDYXB0dXJpbmciLCJ2aXNTdGF0ZVVwZGF0ZXJzIiwiZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnIiwiZXhwb3J0cyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJDT01QQVJFX1RZUEVTIiwiQUJTT0xVVEUiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwibGltaXRTZWFyY2giLCJicnVzaCIsInNpemUiLCJjb29yZGluYXRlIiwiREVGQVVMVF9BTklNQVRJT05fQ09ORklHIiwiZG9tYWluIiwiY3VycmVudFRpbWUiLCJzcGVlZCIsImlzQW5pbWF0aW5nIiwidGltZVN0ZXBzIiwidGltZUZvcm1hdCIsInRpbWV6b25lIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJoaWRlQ29udHJvbCIsImR1cmF0aW9uIiwiREVGQVVMVF9FRElUT1IiLCJtb2RlIiwiRURJVE9SX01PREVTIiwiRFJBV19QT0xZR09OIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJ2aXNpYmxlIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJtYXBJbmZvIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImxheWVycyIsImxheWVyRGF0YSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXIiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsInVuZGVmaW5lZCIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbnNUb0JlTWVyZ2VkIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiVGFzayIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIm1hcCIsImx5ciIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJpc1Zpc2libGUiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImlzRXF1YWwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJwYXJzZUxheWVyQ29uZmlnIiwib2xkTGF5ZXIiLCJmaW5kIiwibCIsImRhdGFzZXQiLCJkYXRhSWQiLCJuZXdMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIm5leHRTdGF0ZSIsInR5cGUiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4IiwibGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsImxheWVyVHlwZUNoYW5nZSIsIm5ld0xheWVySWQiLCJhcHBseUxheWVyQ29uZmlnIiwic2VyaWFsaXplZE9sZExheWVyIiwic2VyaWFsaXplTGF5ZXIiLCJzZXJpYWxpemVkTmV3TGF5ZXIiLCJjaGFuZ2VkIiwidmlzQ29uZmlnIiwibGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJ2aXN1YWxDaGFubmVscyIsImNoYW5uZWxOYW1lIiwiY2hhbm5lbCIsImNoYW5uZWxQcm9wTmFtZXMiLCJwcm9wIiwic29tZSIsImxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIiLCJsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UiLCJwaWNrIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJlcnIiLCJsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllckNvbmZpZ0NoYW5nZSIsInVwZGF0ZWxheWVyVmlzaWJpbHR5IiwiZmlsdGVySW5kZXgiLCJmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUiLCJpc0xheWVyQW5pbWF0YWJsZSIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyIiwiZW5hYmxlIiwiZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMiLCJwcm9wcyIsIm5ld0NvbmZpZyIsIl9hY3Rpb24kbmV3Q29uZmlnIiwicmVzdENvbmZpZyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJzdGF0ZVdpdGhEYXRhSWQiLCJsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIiLCJuZXh0TGF5ZXIiLCJ1cGRhdGVMYXllckNvbmZpZyIsInNob3VsZENhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsInVwZGF0ZUxheWVyRGF0YVJlc3VsdCIsImNhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlciIsIl9jYWxjdWxhdGVMYXllckRhdGEiLCJsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyIiwibGF5ZXJJZCIsInNwbGl0TWFwSWQiLCJtYXBJbmRleCIsInNtIiwidG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSIsImxheWVyU2V0SXNWYWxpZFVwZGF0ZXIiLCJpc1ZhbGlkIiwibGF5ZXJUb1VwZGF0ZSIsIm5ld0RhdGEiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMiIsImFkZE9yUmVtb3ZlVGV4dExhYmVscyIsIm5ld0ZpZWxkcyIsInRleHRMYWJlbCIsImRlZmF1bHRUZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJuZXdUZXh0TGFiZWwiLCJjdXJyZW50RmllbGRzIiwidGwiLCJmaWVsZCIsImFkZEZpZWxkcyIsImluY2x1ZGVzIiwiZGVsZXRlRmllbGRzIiwiZmQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiYWYiLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm5ld1R5cGUiLCJvbGRJZCIsIkNvbnNvbGUiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwidXBkYXRlZFN0YXRlIiwidmlzdWFsQ2hhbm5lbCIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJlZGl0Qm91bmRzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTYiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwiX3JlZjQiLCJyZWR1Y2UiLCJhY2N1Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJzZXRGaWx0ZXJVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlciIsIl9yZWY1IiwiYW5pbWF0aW9uV2luZG93IiwibmV3RmlsdGVyIiwic3dhcF8iLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwic2V0RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsInRvQXJyYXkiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsInYiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ1bmlxIiwiZmlsdGVyV2l0aFBMb3QiLCJ1cGRhdGVGaWx0ZXJQbG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiZ2V0RGVmYXVsdEZpbHRlciIsInJlbW92ZUZpbHRlclBsb3QiLCJfaSIsIl9hcnIiLCJuZXh0VmFsIiwiZG9tYWluU3RlcHMiLCJtZXJnZUZpbHRlckRvbWFpbiIsIm5leHRGaWx0ZXIiLCJzdGVwIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImRhdGFzZXRJZHMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsIm9sZERhdGFJZCIsImRhdGFzZXRJZCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsInNldEZpbHRlckdwdU1vZGUiLCJhc3NpZ25HcHVDaGFubmVsIiwibGF5ZXJJZERpZmZlcmVuY2UiLCJ4b3IiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwic2V0RmlsdGVyUGxvdFVwZGF0ZXIiLCJfcmVmNiIsIm5ld1Byb3AiLCJwaWNrXyIsIm1lcmdlXyIsInBsb3RUeXBlIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJpc1NpZGVGaWx0ZXIiLCJhcHBseUZpbHRlckNvbmZpZyIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwiZ2V0TmV3TGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVySWRzVG9SZW1vdmUiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImFycmF5TW92ZSIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJnZW5lcmF0ZUhhc2hJZCIsIkxBWUVSX0lEX0xFTkdUSCIsInBhcmVudEdyb3VwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJhcnJheUluc2VydCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiZWZmZWN0IiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwibmV3RWZmZWN0IiwiY3JlYXRlRWZmZWN0Iiwic2V0UHJvcHMiLCJmaXhFZmZlY3RPcmRlciIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXdFZmZlY3RzIiwibWFrZU5ld0Fubm90YXRpb24iLCJfY29uZmlnJGtpbmQiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYW5nbGUiLCJfYXJtTGVuZ3RoMiIsIl9hbmdsZTIiLCJfYXJtTGVuZ3RoMyIsIl9hbmdsZTMiLCJfcmFkaXVzSW5NZXRlcnMiLCJraW5kIiwiSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQiLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImxpbmVDb2xvciIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwibGluZVdpZHRoIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJ0ZXh0V2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCIsInRleHRIZWlnaHQiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQiLCJ0ZXh0VmVydGljYWxBbGlnbiIsIkFubm90YXRpb25LaW5kIiwiUE9JTlQiLCJhcm1MZW5ndGgiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsImFuZ2xlIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFIiwiQVJST1ciLCJDSVJDTEUiLCJyYWRpdXNJbk1ldGVycyIsIlRFWFQiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxMyIsInVwZGF0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE0IiwibmV4dEFubm90YXRpb24iLCJuZXdBbm5vdGF0aW9ucyIsImR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE1IiwiY2xvbmVEZWVwIiwic2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNiIsImlzRWRpdGluZ1RleHQiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJfc3RhdGUkZGF0YXNldHMiLCJuZXdEYXRhc2V0cyIsImxheWVyc1RvUmVtb3ZlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluZGV4T2YiLCJyZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnIiwiX3JlZjE3IiwiX2ludGVyYWN0aW9uQ29uZmlnIiwiX2NvbmZpZyRmaWVsZHNUb1Nob3ciLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyIiwidXBkYXRlRGF0YXNldFByb3BzVXBkYXRlciIsIm5ld0NvbG9yIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMTgiLCJfcmVmMTgkcGF5bG9hZCIsInBheWxvYWQiLCJfcmVmMTgkcGF5bG9hZCRjb25maWciLCJfcmVmMTgkcGF5bG9hZCRvcHRpb24iLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsImlzVmFsaWRNZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYxOSIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjIwIiwiaGFzVGFidWxhckRhdGFzZXREYXRhIiwiZGF0YSIsIl9kYXRhJHJvd3MiLCJfZGF0YSRjb2xzIiwiQm9vbGVhbiIsInJvd3MiLCJjb2xzIiwiYXJyb3dUYWJsZSIsIm5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUiLCJfZGF0YXNldCRpbmZvIiwiX2RhdGFzZXQkbWV0YWRhdGEiLCJEYXRhc2V0VHlwZSIsIkVYVEVSTkFMTFlfSE9TVEVEIiwibWV0YWRhdGEiLCJzb3VyY2UiLCJoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCIsIl94IiwiX2h5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUyIiwiX2RhdGFzZXQkbWV0YWRhdGEyIiwiX2RhdGFzZXQkbWV0YWRhdGEzIiwid3JhcCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImFicnVwdCIsImxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCIsImZvcm1hdCIsImdldFJlbW90ZVNvdXJjZUZvcm1hdCIsInNlbnQiLCJzdG9wIiwiSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZSIsIkZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyIsIl9yZWYyMSIsIl9jYWxsZWUiLCJtZXNzYWdlIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsIkVycm9yIiwiX3gyIiwiY3JlYXRlTmV3RGF0YUVudHJ5VGFzayIsImNyZWF0ZU5ld0RhdGFFbnRyeSIsImNoYWluIiwiaHlkcmF0ZWQiLCJ0YXNrIiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJjcmVhdGVEYXRhc2V0VGFza3MiLCJub3RpZmljYXRpb25UYXNrcyIsIl9yZWYyMiIsImRhdGFzZXRJbmRleCIsIl9yZWYyMiRpbmZvIiwicmVzdCIsImFkZE5vdGlmaWNhdGlvbiIsImVycm9yTm90aWZpY2F0aW9uIiwiZGF0YXNldHNBbGxTZXR0bGVkVGFzayIsImFsbFNldHRsZWQiLCJyZXN1bHRzIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MiLCJhZGRUb01hcE9wdGlvbnMiLCJzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciIsInBheWxvYWRfIiwiY2hhbmdlIiwid2l0aFRhc2siLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQiLCJuZXdEYXRhRW50cmllcyIsInN0YXR1cyIsIkFDVElPTl9UQVNLIiwicmVhc29uIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJsYXllck1lcmdlcnMiLCJtIiwid2FpdEZvckxheWVyRGF0YSIsImRhdGFzZXRNZXJnZXJzIiwicG9zdE1lcmdlclBheWxvYWQiLCJhcHBseU1lcmdlcnNVcGRhdGVyIiwibWVyZ2VTdGF0ZVJlc3VsdCIsIm1lcmdlU3RhdGVGcm9tTWVyZ2VycyIsImFsbE1lcmdlZCIsInBvc3RNZXJnZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyIsInBhdGNoIiwibGF5ZXJWaXNDb25maWciLCJfdHlwZW9mMiIsInBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEiLCJfbGF5ZXIkY29uZmlnIiwiTEFZRVJfVFlQRVMiLCJnZW9qc29uIiwiY29sdW1uTW9kZSIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJwb2x5Z29uRmlsdGVycyIsInBvbHlnb24iLCJwb2x5Z29uTWV0YURhdGFJZHMiLCJfZiRsYXllcklkIiwiY2VudGVyTWFwIiwiYm91bmRzIiwiZmluZE1hcEJvdW5kcyIsInBhZGRpbmciLCJmaXRCb3VuZHNUYXNrIiwiZml0TWFwQm91bmRzIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheTIiLCJpc1JnYkNvbG9yIiwiaXNQbGFpbk9iamVjdCIsImRlZXBtZXJnZSIsImV4aXN0aW5nIiwiY29weVRhYmxlQW5kVXBkYXRlIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibG9hZEZpbGVzVXBkYXRlciIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsIm9uRmluaXNoIiwibG9hZEZpbGVzU3VjY2VzcyIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwiZmlsZUNhY2hlIiwiZmlsZXNUb0xvYWQiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsIl9zdGF0ZSRmaWxlTG9hZGluZyIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJwcm9ncmVzcyIsInBlcmNlbnQiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheTIiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiTE9BRF9GSUxFX1RBU0siLCJiaW1hcCIsImdlbiIsIm5leHRGaWxlQmF0Y2giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJjb250ZW50IiwibG9hZEZpbGVzRXJyIiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJQUk9DRVNTX0ZJTEVfREFUQSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmMjMiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWYyMyRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwiZW5kc1dpdGgiLCJza2lwQXJyb3dDb21wYWN0IiwiVU5XUkFQX1RBU0siLCJfcmVmMjQiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjI1IiwiX3N0YXRlJGZpbGVMb2FkaW5nMiIsImFwcGx5Q1BVRmlsdGVyVXBkYXRlciIsIl9yZWYyNiIsImRhdGFJZHMiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJlbXB0eSIsImRlZmF1bHRMYXllcnMiLCJmb3VuZExheWVycyIsImZpbmREZWZhdWx0TGF5ZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsImZpbmRGaWVsZHNUb1Nob3ciLCJtZXJnZWQiLCJfcmVmMjgiLCJmaXhlZERvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGE3IiwiX3N0YXRlJGZpbHRlcnMiLCJhbmltYXRhYmxlTGF5ZXJzIiwibGF5ZXJEb21haW5zIiwibWVyZ2VkRG9tYWluIiwibWVyZ2VUaW1lRG9tYWlucyIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsIm1lcmdlZFRpbWVTdGVwcyIsInNvcnQiLCJCQVNFX1NQRUVEIiwiRlBTIiwic3luY2VkRmlsdGVyIiwibmV3QW5pbWF0aW9uRG9tYWluIiwiaXNJblJhbmdlIiwic2V0RWRpdG9yTW9kZVVwZGF0ZXIiLCJfcmVmMjkiLCJza2V0Y2hlc0VuYWJsZWQiLCJlbmFibGVEcmF3T25NYXBTa2V0Y2hlcyIsIkRSQVdfUE9JTlQiLCJEUkFXX0xJTkVTVFJJTkciLCJzZXRGZWF0dXJlc1VwZGF0ZXIiLCJfcmVmMzAiLCJfbGFzdEZlYXR1cmUkcHJvcGVydGkiLCJfbGFzdEZlYXR1cmUkcHJvcGVydGkyIiwiX3JlZjMwJGZlYXR1cmVzIiwibGFzdEZlYXR1cmUiLCJwcm9wZXJ0aWVzIiwiaXNDbG9zZWQiLCJzaGFwZSIsIkVESVQiLCJmZWF0dXJlIiwiYmJveCIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsImZpbmRFZGl0b3JGZWF0dXJlIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlIiwiZnJvbUVkaXRvciIsIml0ZW0iLCJzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIiLCJfcmVmMzEiLCJfc3RhdGUkZWRpdG9yJHNlbGVjdGUyIiwibmV4dEZlYXR1cmUiLCJtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyIsIm5leHRFZGl0b3IiLCJzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyIiwiX3JlZjMyIiwic2VsZWN0aW9uQ29udGV4dCIsImRlbGV0ZUZlYXR1cmVVcGRhdGVyIiwiX3JlZjMzIiwic2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlciIsIm5vbmVGaWx0ZXJGZWF0dXJlIiwiX2ZpbHRlciRsYXllcklkIiwiaXNMYXllckluY2x1ZGVkIiwic2tldGNoRmVhdHVyZSIsInRvU2tldGNoRmVhdHVyZSIsInN0YXRlV2l0aG91dEZpbHRlciIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsInNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyIiwidmlzaWJsZUxheWVySWRzIiwiYWxsTGF5ZXJJZHMiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjM0IiwiY29sdW1uIiwic29ydE1vZGUiLCJjdXJyZW50TW9kZSIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjM1IiwicGluVGFibGVDb2x1bW5zIiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWYzNiIsImZpZWxkSWR4IiwidGV4dCIsImRhdGFDb250YWluZXIiLCJyb3ciLCJwYXJzZUZpZWxkVmFsdWUiLCJ2YWx1ZUF0Iiwiam9pbiIsImNvcHkiLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlciIsIl9yZWYzNyIsImZvcm1hdHMiLCJkaXNwbGF5Rm9ybWF0IiwiX2xheWVyJGNvbmZpZzIiLCJjb2xvckZpZWxkIiwiZ2V0TWFwcGVkVmFsdWUiLCJmaWx0ZXJQcm9wcyIsIm1hcHBlZFZhbHVlIiwieWllbGRGb3JQYWludCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsInJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl94MyIsIl9yZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MiLCJfY2FsbGVlMyIsIl9yZWYzOCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImdldENvbHVtbkZpbHRlclByb3BzIiwiY29sbGVjdENvbHVtblZhbHVlcyIsImdldENvbHVtblN0YXRpc3RpY3MiLCJmaWVsZFR5cGUiLCJMT0FEX0NPTFVNTl9TVEFUU19UQVNLIiwibG9hZENvbHVtblN0YXRzVXBkYXRlciIsIl9yZWYzOSIsImZpZWxkTmFtZSIsImZpZWxkTmFtZXNUb0xvYWQiLCJmaWVsZHNUb0xvYWQiLCJpc0xvYWRpbmdTdGF0cyIsInRhc2tzIiwiX3JlZjQwIiwibG9hZENvbHVtblN0YXRzU3VjY2VzcyIsImxvYWRDb2x1bW5TdGF0c0Vycm9yIiwibG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIiLCJfcmVmNDEiLCJuZXdGaWx0ZXJQcm9wcyIsImNvbHVtblN0YXRzIiwibG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyIiwiX3JlZjQyIiwidG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIiLCJjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlciIsIl9hY3Rpb24iLCJwcm9jZXNzR2VvanNvbiIsImVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbiIsImNsZWFyZWRTdGF0ZSIsImxhYmVsSWQiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY0MyIsInVwZGF0ZXMiLCJjaGVja1RpbWVDb25maWdBcmdzIiwiYWxsb3dlZCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNDQiLCJsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VVcGRhdGVyIiwiX2xheWVyJGZpbHRlcmVkSXRlbUNvIiwiZXZlbnQiLCJkZWNrZ2xMYXllcklkIiwiY291bnQiLCJmaWx0ZXJlZEl0ZW1Db3VudCIsIndtc0ZlYXR1cmVJbmZvVXBkYXRlciIsImZlYXR1cmVJbmZvIiwiY29uc29sZSIsIm9iamVjdCIsIndtc0ZlYXR1cmVJbmZvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvMiIsIl9hY3Rpb24kZW5hYmxlIiwiaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIiLCJuZXdGaWx0ZXJEb21haW4iLCJBTklNQVRJT05fV0lORE9XIiwiaW50ZXJ2YWwiLCJhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwiLCJuZXdGaWx0ZXJWYWx1ZSIsInN5bmNUaW1lbGluZU1vZGUiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsIl9yZWY0NSIsIm1heCIsInRpbWVsaW5lVmFsdWUiLCJnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlciIsInNuYXBUb01hcmtzIiwiZnJlZSIsIl9maWx0ZXIkc3luY1RpbWVsaW5lTSIsIm5ld01vZGUiLCJzdGFydCIsImludGVydmFsSW5kZXgiLCJjdXJyZW50SW5kZXgiLCJtZXRhIiwidGFyZ2V0VGltZUludGVydmFsIiwibmV3SW5kZXgiLCJUSU1FX0lOVEVSVkFMU19PUkRFUkVEIiwiaGV4VGlsZUludGVydmFsIiwiTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCIsImdldERlZmF1bHRUaW1lRm9ybWF0IiwidXBkYXRlZFBsb3RUeXBlIiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsImRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl92YWx1ZSRjb25maWciLCJfdmFsdWUkY29uZmlnMiIsInJlcGxhY2VkIiwiaXNPYmplY3QiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWY0NyIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJjb21wb3NlXyIsImFwcGx5XyIsInJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsIl9uZXh0U3RhdGUkbGF5ZXJUb0JlTSIsInNlcmlhbGl6ZWRTdGF0ZSIsInNlcmlhbGl6ZVZpc1N0YXRlIiwicHJlc2VydmVMYXllck9yZGVyIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJfc2VyaWFsaXplZFN0YXRlJHNwbGkiLCJfcmVmNDgiLCJhY2N1U3RhdGUiLCJfcmVmNDkiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIm1lcmdlck9wdGlvbnMiLCJyZXBsYWNlZEl0ZW0iLCJyZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZSIsIl9yZWY1MCIsImNoaWxkRGF0YUlkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Jib3h9IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IHR5cGUge0FsbEdlb0pTT059IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IGNvcHkgZnJvbSAnY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9jbG9uZURlZXAnO1xuaW1wb3J0IGdldCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9nZXQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvaXNFcXVhbCc7XG5pbXBvcnQgcGljayBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9waWNrJztcbmltcG9ydCB1bmlxIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3VuaXEnO1xuaW1wb3J0IHhvciBmcm9tICdlcy10b29sa2l0L2NvbXBhdC94b3InO1xuaW1wb3J0IFRhc2ssIHtkaXNhYmxlU3RhY2tDYXB0dXJpbmcsIHdpdGhUYXNrfSBmcm9tICdyZWFjdC1wYWxtL3Rhc2tzJztcbi8vIFRhc2tzXG5pbXBvcnQge1xuICBERUxBWV9UQVNLLFxuICBBQ1RJT05fVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWcsXG4gIFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkLFxuICBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzLFxuICBsb2FkQ29sdW1uU3RhdHNFcnJvclxufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgYXJyYXlJbnNlcnQsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbixcbiAgbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMsXG4gIHRvU2tldGNoRmVhdHVyZSxcbiAgZmVhdHVyZVRvRmlsdGVyVmFsdWUsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIGdlbmVyYXRlUG9seWdvbkZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlcixcbiAgZ2V0RmlsdGVySWRJbkZlYXR1cmUsXG4gIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcixcbiAgaXNJblJhbmdlLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZ2JDb2xvcixcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICByZW1vdmVMYXllckZyb21TcGxpdE1hcHMsXG4gIHNldCxcbiAgdXBkYXRlRmlsdGVyUGxvdCxcbiAgcmVtb3ZlRmlsdGVyUGxvdCxcbiAgaXNMYXllckFuaW1hdGFibGUsXG4gIGlzU2lkZUZpbHRlcixcbiAgZ2V0QXBwbGljYXRpb25Db25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5LCBhcnJheU1vdmV9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbi8vIE1lcmdlcnNcbmltcG9ydCB7XG4gIEFOSU1BVElPTl9XSU5ET1csXG4gIEJBU0VfU1BFRUQsXG4gIENPTVBBUkVfVFlQRVMsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgRURJVE9SX01PREVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTLFxuICBMQVlFUl9UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgRElTVEFOQ0VfRk9HX1RZUEUsXG4gIFNVUkZBQ0VfRk9HX1RZUEUsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVMsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9LSU5ELFxuICBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIEFubm90YXRpb25LaW5kLFxuICBEYXRhc2V0VHlwZSxcbiAgZ2V0UmVtb3RlU291cmNlRm9ybWF0XG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TEFZRVJfSURfTEVOR1RILCBMYXllciwgTGF5ZXJDbGFzc2VzfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBhcHBseV8sXG4gIGNvbXBvc2VfLFxuICBmaWx0ZXJPdXRCeUlkLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQsIHByb2Nlc3NHZW9qc29ufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEZlYXR1cmUsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbCxcbiAgUHJvdG9EYXRhc2V0XG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtMb2FkZXJ9IGZyb20gJ0Bsb2FkZXJzLmdsL2xvYWRlci11dGlscyc7XG5cbmltcG9ydCB7XG4gIERhdGFzZXRzLFxuICBGaWx0ZXJQcm9wcyxcbiAgYXNzaWduR3B1Q2hhbm5lbCxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgc29ydERhdGFzZXRCeUNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7ZmluZEZpZWxkc1RvU2hvd30gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVMYXllckRhdGEsXG4gIGZpbmREZWZhdWx0TGF5ZXIsXG4gIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzLFxuICBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMsXG4gIGdldE5ld0xheWVyR3JvdXAsXG4gIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcixcbiAgcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyLFxuICBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIsXG4gIGZpbmRQYXJlbnRHcm91cEZvckxheWVyLFxuICBnZXRJbmRleEZyb21MYXllckVudHJ5SWQsXG4gIHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIsXG4gIGdldEZsYXRMYXllck9yZGVyLFxuICByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlclxufSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlLFxuICBjb2xsZWN0Q29sdW1uVmFsdWVzLFxuICBnZXRDb2x1bW5TdGF0aXN0aWNzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge1BheWxvYWRBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5pbXBvcnQge2ZpbmRNYXBCb3VuZHN9IGZyb20gJy4vZGF0YS11dGlscyc7XG5cbi8vIHJlYWN0LXBhbG1cbi8vIGRpc2FibGUgY2FwdHVyZSBleGNlcHRpb24gZm9yIHJlYWN0LXBhbG0gY2FsbCB0byB3aXRoVGFza1xuZGlzYWJsZVN0YWNrQ2FwdHVyaW5nKCk7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB2aXNTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKlxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7dmlzU3RhdGVVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdmlzU3RhdGU6IHZpc1N0YXRlVXBkYXRlcnMuZW5sYXJnZUZpbHRlclVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHN0YXRlLmtlcGxlckdsLmZvby52aXNTdGF0ZSxcbiAqICAgICAgICAgICAgICAge2lkeDogMH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZzogSW50ZXJhY3Rpb25Db25maWcgPSB7XG4gIHRvb2x0aXA6IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLnRvb2x0aXAnLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgY29uZmlnOiB7XG4gICAgICBmaWVsZHNUb1Nob3c6IHt9LFxuICAgICAgY29tcGFyZU1vZGU6IGZhbHNlLFxuICAgICAgY29tcGFyZVR5cGU6IENPTVBBUkVfVFlQRVMuQUJTT0xVVEVcbiAgICB9XG4gIH0sXG4gIGdlb2NvZGVyOiB7XG4gICAgaWQ6ICdnZW9jb2RlcicsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZ2VvY29kZXInLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsLFxuICAgIGNvbmZpZzoge1xuICAgICAgbGltaXRTZWFyY2g6IGZhbHNlXG4gICAgfVxuICB9LFxuICBicnVzaDoge1xuICAgIGlkOiAnYnJ1c2gnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmJydXNoJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBjb25maWc6IHtcbiAgICAgIC8vIHNpemUgaXMgaW4ga21cbiAgICAgIHNpemU6IDAuNVxuICAgIH1cbiAgfSxcbiAgY29vcmRpbmF0ZToge1xuICAgIGlkOiAnY29vcmRpbmF0ZScsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuY29vcmRpbmF0ZScsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGxcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRzogQW5pbWF0aW9uQ29uZmlnID0ge1xuICBkb21haW46IG51bGwsXG4gIGN1cnJlbnRUaW1lOiBudWxsLFxuICBzcGVlZDogMSxcbiAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICB0aW1lU3RlcHM6IG51bGwsXG4gIHRpbWVGb3JtYXQ6IG51bGwsXG4gIHRpbWV6b25lOiBudWxsLFxuICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbCxcbiAgaGlkZUNvbnRyb2w6IGZhbHNlLFxuICBkdXJhdGlvbjogbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRURJVE9SOiBFZGl0b3IgPSB7XG4gIG1vZGU6IEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04sXG4gIGZlYXR1cmVzOiBbXSxcbiAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICB2aXNpYmxlOiB0cnVlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX1ZJU19TVEFURTogVmlzU3RhdGUgPSB7XG4gIC8vIG1hcCBpbmZvXG4gIG1hcEluZm86IHtcbiAgICB0aXRsZTogJycsXG4gICAgZGVzY3JpcHRpb246ICcnXG4gIH0sXG4gIC8vIGxheWVyc1xuICBsYXllcnM6IFtdLFxuICBsYXllckRhdGE6IFtdLFxuICBsYXllclRvQmVNZXJnZWQ6IFtdLFxuICBsYXllck9yZGVyOiBbXSxcbiAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGwsXG5cbiAgLy8gZmlsdGVyc1xuICBmaWx0ZXJzOiBbXSxcbiAgZmlsdGVyVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYSBjb2xsZWN0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRcbiAgZGF0YXNldHM6IHt9LFxuICBlZGl0aW5nRGF0YXNldDogdW5kZWZpbmVkLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICAvLyBhbm5vdGF0aW9uc1xuICBhbm5vdGF0aW9uczogW10sXG4gIGFubm90YXRpb25zVG9CZU1lcmdlZDogW10sXG4gIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBudWxsLFxuICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2UsXG5cbiAgaW50ZXJhY3Rpb25Db25maWc6IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiB7fSxcblxuICBsYXllckJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgb3ZlcmxheUJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgaG92ZXJJbmZvOiB1bmRlZmluZWQsXG4gIGNsaWNrZWQ6IHVuZGVmaW5lZCxcbiAgbW91c2VQb3M6IHt9LFxuICBtYXhEZWZhdWx0VG9vbHRpcHM6IE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuXG4gIC8vIHRoaXMgaXMgdXNlZCB3aGVuIHVzZXIgc3BsaXQgbWFwc1xuICBzcGxpdE1hcHM6IFtcbiAgICAvLyB0aGlzIHdpbGwgY29udGFpbiBhIGxpc3Qgb2Ygb2JqZWN0cyB0b1xuICAgIC8vIGRlc2NyaWJlIHRoZSBzdGF0ZSBvZiBsYXllciBhdmFpbGFiaWxpdHkgYW5kIHZpc2liaWxpdHkgZm9yIGVhY2ggbWFwXG4gICAgLy8gW1xuICAgIC8vICAge1xuICAgIC8vICAgICAgbGF5ZXJzOiB7bGF5ZXJfaWQ6IHRydWUgfCBmYWxzZX1cbiAgICAvLyAgIH1cbiAgICAvLyBdXG4gIF0sXG4gIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFtdLFxuICBpc01lcmdpbmdEYXRhc2V0czoge30sXG4gIC8vIGRlZmF1bHRzIGxheWVyIGNsYXNzZXNcbiAgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXMsXG5cbiAgLy8gZGVmYXVsdCBhbmltYXRpb25cbiAgLy8gdGltZSBpbiB1bml4IHRpbWVzdGFtcCAobWlsbGlzZWNvbmRzKSAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVbml4IEVwb2NoKVxuICBhbmltYXRpb25Db25maWc6IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyxcblxuICBlZGl0b3I6IERFRkFVTFRfRURJVE9SLFxuXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gIC8vIGZvciBsb2FkaW5nIGRhdGFzZXRzXG4gIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogMCxcblxuICBsb2FkZXJzOiBbXSxcbiAgbG9hZE9wdGlvbnM6IHt9LFxuXG4gIC8vIHZpc1N0YXRlTWVyZ2Vyc1xuICBtZXJnZXJzOiBWSVNfU1RBVEVfTUVSR0VSUyxcblxuICAvLyBrZXBsZXIgc2NoZW1hc1xuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hXG59O1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfRklUX0JPVU5EUyA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0ZJVF9CT1VORFMnXG4pO1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04nXG4pO1xuXG50eXBlIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGUgPSB7XG4gIGxheWVyczogTGF5ZXJbXTtcbiAgbGF5ZXJEYXRhOiBhbnlbXTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIHdpdGggdXBkYXRlZCBsYXllciBhbmQgbGF5ZXJEYXRhXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhPFMgZXh0ZW5kcyBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlPihcbiAgc3RhdGU6IFMsXG4gIHtsYXllckRhdGEsIGxheWVyLCBpZHh9OiB7bGF5ZXJEYXRhPzogYW55OyBsYXllcjogTGF5ZXI7IGlkeDogbnVtYmVyfVxuKTogUyB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKChseXIsIGkpID0+IChpID09PSBpZHggPyBsYXllciA6IGx5cikpLFxuICAgIGxheWVyRGF0YTogbGF5ZXJEYXRhXG4gICAgICA/IHN0YXRlLmxheWVyRGF0YS5tYXAoKGQsIGkpID0+IChpID09PSBpZHggPyBsYXllckRhdGEgOiBkKSlcbiAgICAgIDogc3RhdGUubGF5ZXJEYXRhXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGxheWVyOiBMYXllcik6IFMge1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICAgID8gYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgICAgICA6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgIH07XG4gIH1cblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBvYmplY3RzIChvciBhcnJheXMpIGFuZCByZXR1cm5zIGEgbmV3IG9iamVjdCB3aXRoIG9ubHkgdGhlXG4gKiBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBjaGFuZ2VkIGJldHdlZW4gdGhlIHR3byBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBwaWNrQ2hhbmdlZFByb3BzPFQ+KHByZXY6IFQsIG5leHQ6IFQpOiBQYXJ0aWFsPFQ+IHtcbiAgY29uc3QgY2hhbmdlZFByb3BzOiBQYXJ0aWFsPFQ+ID0ge307XG4gIGNvbnN0IHBpY2tQcm9wc09mID0gb2JqID0+IHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VkUHJvcHMsIGtleSkgJiZcbiAgICAgICAgIWlzRXF1YWwocHJldltrZXldLCBuZXh0W2tleV0pXG4gICAgICApIHtcbiAgICAgICAgY2hhbmdlZFByb3BzW2tleV0gPSBuZXh0W2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHBpY2tQcm9wc09mKHByZXYpO1xuICBwaWNrUHJvcHNPZihuZXh0KTtcbiAgcmV0dXJuIGNoYW5nZWRQcm9wcztcbn1cblxuY29uc3QgVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUyA9IFsnZmllbGQnLCAnc2NhbGUnLCAnZG9tYWluJywgJ2FnZ3JlZ2F0aW9uJ107XG5cbi8qKlxuICogQXBwbHkgbGF5ZXIgY29uZmlnXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5LCBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5TGF5ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcklkLCBuZXdMYXllckNvbmZpZywgbGF5ZXJJbmRleH0gPSBhY3Rpb247XG4gIGNvbnN0IG5ld1BhcnNlZExheWVyID1cbiAgICAvLyB3aWxsIG1vdmUgdmlzdWFsQ2hhbm5lbHMgdG8gdGhlIGNvbmZpZyBwcm9wXG4gICAgcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIG5ld0xheWVyQ29uZmlnKTtcbiAgY29uc3Qgb2xkTGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICBpZiAoIW9sZExheWVyIHx8ICFuZXdQYXJzZWRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXJJbmRleCAhPT0gbnVsbCAmJiBsYXllckluZGV4ICE9PSB1bmRlZmluZWQgJiYgc3RhdGUubGF5ZXJzW2xheWVySW5kZXhdICE9PSBvbGRMYXllcikge1xuICAgIC8vIGxheWVySW5kZXggaXMgcHJvdmlkZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdGNoIHRoZSBvbGRMYXllclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbbmV3UGFyc2VkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGlzIHZhbGlkIGFuZCBjb252ZXJ0IGl0IHRvIExheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIG5ld1BhcnNlZExheWVyLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICBpZiAoIW5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChuZXdMYXllci50eXBlICYmIG5ld0xheWVyLnR5cGUgIT09IG9sZExheWVyLnR5cGUpIHtcbiAgICBjb25zdCBvbGRMYXllckluZGV4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICAgIGlmIChvbGRMYXllckluZGV4ID49IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIobmV4dFN0YXRlLCBsYXllclR5cGVDaGFuZ2Uob2xkTGF5ZXIsIG5ld0xheWVyLnR5cGUpKTtcbiAgICAgIC8vIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIgY2hhbmdlcyB0aGUgaWQgb2YgdGhlIGxheWVyLCBzbyB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgbmV3IGlkXG4gICAgICAvLyBidXQgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIGxheWVyIHdhcyBub3QgcmVtb3ZlZFxuICAgICAgaWYgKG5leHRTdGF0ZS5sYXllcnMubGVuZ3RoID09PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVySWQgPSBuZXh0U3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdLmlkO1xuICAgICAgICBuZXh0U3RhdGUgPSBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgYXBwbHlMYXllckNvbmZpZyhuZXdMYXllcklkLCB7Li4ubmV3TGF5ZXJDb25maWcsIGlkOiBuZXdMYXllcklkfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIC8vIHNlcmlhbGl6ZUxheWVyKCkgbWlnaHQgcmV0dXJuIG51bGwgaWYgdGhlIG9sZCBsYXllciBpcyBub3QgdmFsaWQsXG4gIC8vIHdlIHNob3VsZCBzdGlsbCBhcHBseSB0aGUgY2hhbmdlcyBpbiB0aGF0IGNhc2VcbiAgY29uc3Qgc2VyaWFsaXplZE9sZExheWVyID0gc2VyaWFsaXplTGF5ZXIob2xkTGF5ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3TGF5ZXIgPSBzZXJpYWxpemVMYXllcihuZXdMYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHNlcmlhbGl6ZWRPbGRMYXllciwgc2VyaWFsaXplZE5ld0xheWVyKSkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRMYXllci5jb25maWcsIHNlcmlhbGl6ZWROZXdMYXllci5jb25maWcpO1xuXG4gICAgaWYgKCd2aXNDb25maWcnIGluIGNoYW5nZWQpIHtcbiAgICAgIGlmIChjaGFuZ2VkLnZpc0NvbmZpZykge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBjaGFuZ2VkLnZpc0NvbmZpZylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjaGFuZ2VkLnZpc0NvbmZpZztcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvbGRMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsTmFtZSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbE5hbWVdO1xuICAgICAgY29uc3QgY2hhbm5lbFByb3BOYW1lcyA9IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMubWFwKHByb3AgPT4gY2hhbm5lbFtwcm9wXSk7XG4gICAgICBpZiAoY2hhbm5lbFByb3BOYW1lcy5zb21lKHByb3AgPT4gcHJvcCBpbiBjaGFuZ2VkKSkge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UoXG4gICAgICAgICAgICBvbGRMYXllcixcbiAgICAgICAgICAgIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBjaGFubmVsUHJvcE5hbWVzKSxcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgY2hhbm5lbFByb3BOYW1lcykge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VkW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoY2hhbmdlZCkubGVuZ3RoID4gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBwaWNrKG5ld0xheWVyLmNvbmZpZywgT2JqZWN0LmtleXMoY2hhbmdlZCkpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVsYXllclZpc2liaWx0eShzdGF0ZTogVmlzU3RhdGUsIG5ld0xheWVyOiBMYXllciwgaXNWaXNpYmxlPzogYm9vbGVhbik6IFZpc1N0YXRlIHtcbiAgbGV0IG5ld1N0YXRlID0gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZShzdGF0ZSwgbmV3TGF5ZXIpO1xuICBjb25zdCBmaWx0ZXJJbmRleCA9IGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZSk7XG4gIGlmIChpc0xheWVyQW5pbWF0YWJsZShuZXdMYXllcikgJiYgZmlsdGVySW5kZXggIT09IC0xKSB7XG4gICAgLy8gaWYgbGF5ZXIgaXMgZ29pbmcgdG8gYmUgdmlzaWJsZSB3ZSBzeW5jIHdpdGggZmlsdGVyIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgb3RoZXIgYW5pbWF0YWJsZSBsYXllcnMgZXhpc3RzIGFuZCBhcmUgdmlzaWJsZVxuICAgIG5ld1N0YXRlID0gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICBlbmFibGU6IGlzVmlzaWJsZSA/IGlzVmlzaWJsZSA6IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycykubGVuZ3RoID4gMFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdDb25maWcpO1xuICBpZiAoXG4gICAgdHlwZW9mIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkID09PSAnc3RyaW5nJyAmJlxuICAgIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkICE9PSBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gICkge1xuICAgIGNvbnN0IHtkYXRhSWQsIC4uLnJlc3RDb25maWd9ID0gYWN0aW9uLm5ld0NvbmZpZztcbiAgICBjb25zdCBzdGF0ZVdpdGhEYXRhSWQgPSBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3Q29uZmlnOiB7ZGF0YUlkfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRMYXllciA9IHN0YXRlV2l0aERhdGFJZC5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgICByZXR1cm4gbmV4dExheWVyICYmIE9iamVjdC5rZXlzKHJlc3RDb25maWcpLmxlbmd0aFxuICAgICAgPyBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGVXaXRoRGF0YUlkLCB7b2xkTGF5ZXI6IG5leHRMYXllciwgbmV3Q29uZmlnOiByZXN0Q29uZmlnfSlcbiAgICAgIDogc3RhdGVXaXRoRGF0YUlkO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoYWN0aW9uLm5ld0NvbmZpZyk7XG5cbiAgbGV0IGxheWVyRGF0YTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuXG4gICAgY29uc3QgdXBkYXRlTGF5ZXJEYXRhUmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICBuZXdMYXllciA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllcjtcbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGFjdGlvbi5uZXdDb25maWcuaXNWaXNpYmxlKTtcbiAgfVxuXG4gIGlmICgnY29sdW1ucycgaW4gYWN0aW9uLm5ld0NvbmZpZyAmJiBuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICAvLyBUT0RPOiBTaGFuLCBtYWtlIHRoZSBhbmltYXRpb24gY29uZmlnIGZ1bmN0aW9uIG1vcmUgcm9idXN0XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgIGxheWVyOiBuZXdMYXllcixcbiAgICBsYXllckRhdGEsXG4gICAgaWR4XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFjdGlvbik6IFMge1xuICBjb25zdCB7b2xkTGF5ZXIsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBhbmltYXRpb246IHtcbiAgICAgIC4uLm9sZExheWVyLmNvbmZpZy5hbmltYXRpb24sXG4gICAgICBbcHJvcF06IHZhbHVlXG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaWR4XSk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWRcbiAqIGhhbmRsZXMgdHdvIGNhc2VzOlxuICogMSkgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGxvY2FsIFNwbGl0TWFwIGxheWVyICh2aXNTdGF0ZS5zcGxpdE1hcC5sYXllcnMpXG4gKiAyKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgZ2xvYmFsIGxheWVyICh2aXNTdGF0ZS5sYXllcnMpXG5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChkID0+IGQuaWQgPT09IGxheWVySWQpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAoc3BsaXRNYXBJZCkge1xuICAgIC8vIFtjYXNlIDFdOiB0b2dnbGUgbG9jYWwgbGF5ZXIgdmlzaWJpbGl0eSBmb3IgZWFjaCBTcGxpdE1hcFxuICAgIGNvbnN0IG1hcEluZGV4ID0gbmV3U3RhdGUuc3BsaXRNYXBzLmZpbmRJbmRleChzbSA9PiBzbS5pZCA9PT0gc3BsaXRNYXBJZCk7XG4gICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgLy8gMSkgaWYgdGhlIGxheWVyIGlzIGludmlzaWJsZSBnbG9iYWxseVxuICAgICAgLy8gLT4gc2V0IGdsb2JhbCB2aXNpYmlsaXR5IHRvIHRydWVcbiAgICAgIG5ld1N0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKG5ld1N0YXRlLCBsYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogdHJ1ZX0pKTtcblxuICAgICAgLy8gLT4gc2V0IGxvY2FsIHZpc2liaWxpdHkgdG8gdHJ1ZSBhbmQgdGhlIGxvY2FsIHZpc2liaWxpdGllcyBvZiBhbGwgb3RoZXIgU3BsaXRNYXBzIHRvIGZhbHNlXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNtID0+XG4gICAgICAgICAgc20uaWQgIT09IHNwbGl0TWFwSWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gMikgZWxzZSB3aGVuIHRoZSBsYXllciBpcyB2aXNpYmxlIGdsb2JhbGx5XG4gICAgcmV0dXJuIHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlcihuZXdTdGF0ZSwgdG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBbY2FzZSAyXTogdG9nZ2xlIGdsb2JhbCBsYXllciB2aXNpYmlsaXR5XG4gICAgY29uc3QgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7aXNWaXNpYmxlfSk7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuXG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGlzVmlzaWJsZSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgICAgaWR4XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBpbmRleCBvZiB0aGUgZmlsdGVyIHN5bmNlZCB0byB0aW1lbGluZSBvciAtMVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGU6IFZpc1N0YXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyBpc1ZhbGlkIGZsYWcgb2YgYSBsYXllci5cbiAqIFVwZGF0ZXMgaXNWaXNpYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBpc1ZhbGlkLlxuICogVHJpZ2dlcnMgdXBkYXRlIG9mIGRhdGEgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBnZXQgZXJyb3JzIGFnYWluIGR1cmluZyBuZXh0IHVwZGF0ZSBpdGVyYXRpb24uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclNldElzVmFsaWRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyU2V0SXNWYWxpZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpc1ZhbGlkfSA9IGFjdGlvbjtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBsYXllclRvVXBkYXRlID0gc3RhdGUubGF5ZXJzW2lkeF07XG4gIGlmIChsYXllclRvVXBkYXRlKSB7XG4gICAgbGV0IG5ld0xheWVyO1xuICAgIGxldCBuZXdEYXRhID0gbnVsbDtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBUcmlnZ2VyIGRhdGEgdXBkYXRlIGluIG9yZGVyIHRvIHNob3cgZXJyb3JzIGFnYWluIGlmIHByZXNlbnQuXG4gICAgICBjb25zdCB7bGF5ZXIsIGxheWVyRGF0YX0gPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJUb1VwZGF0ZSwgc3RhdGUsIHVuZGVmaW5lZCk7XG4gICAgICBuZXdMYXllciA9IGxheWVyO1xuICAgICAgbmV3RGF0YSA9IGxheWVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSBsYXllclRvVXBkYXRlLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBuZXdMYXllci5pc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2lkeCwgbGF5ZXI6IG5ld0xheWVyLCBsYXllckRhdGE6IG5ld0RhdGF9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKG5ld0ZpZWxkcywgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsID0gREVGQVVMVF9URVhUX0xBQkVMKSB7XG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBjb25zdCBjdXJyZW50RmllbGRzID0gdGV4dExhYmVsLm1hcCh0bCA9PiB0bC5maWVsZCAmJiB0bC5maWVsZC5uYW1lKS5maWx0ZXIoZCA9PiBkKTtcblxuICBjb25zdCBhZGRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKGYgPT4gIWN1cnJlbnRGaWVsZHMuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGNvbnN0IGRlbGV0ZUZpZWxkcyA9IGN1cnJlbnRGaWVsZHMuZmlsdGVyKGYgPT4gIW5ld0ZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGYpKTtcblxuICAvLyBkZWxldGVcbiAgbmV3VGV4dExhYmVsID0gbmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCAmJiAhZGVsZXRlRmllbGRzLmluY2x1ZGVzKHRsLmZpZWxkLm5hbWUpKTtcbiAgbmV3VGV4dExhYmVsID0gIW5ld1RleHRMYWJlbC5sZW5ndGggPyBbZGVmYXVsdFRleHRMYWJlbF0gOiBuZXdUZXh0TGFiZWw7XG5cbiAgLy8gYWRkXG4gIG5ld1RleHRMYWJlbCA9IFtcbiAgICAuLi5uZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkKSxcbiAgICAuLi5hZGRGaWVsZHMubWFwKGFmID0+ICh7XG4gICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgZmllbGQ6IGFmXG4gICAgfSkpXG4gIF07XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIHRleHRMYWJlbCkge1xuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZXh0TGFiZWxbaWR4XSwgcHJvcCkpIHtcbiAgICByZXR1cm4gdGV4dExhYmVsO1xuICB9XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGlmIChwcm9wID09PSAnZmllbGQnICYmIHZhbHVlID09PSBudWxsICYmIHRleHRMYWJlbC5sZW5ndGggPiAxKSB7XG4gICAgLy8gcmVtb3ZlIGxhYmVsIHdoZW4gZmllbGQgdmFsdWUgaXMgc2V0IHRvIG51bGxcbiAgICBuZXdUZXh0TGFiZWwuc3BsaWNlKGlkeCwgMSk7XG4gIH0gZWxzZSBpZiAocHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAoKHRsLCBpKSA9PiAoaSA9PT0gaWR4ID8gey4uLnRsLCBbcHJvcF06IHZhbHVlfSA6IHRsKSk7XG4gIH1cblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpZHgsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3Qge3RleHRMYWJlbH0gPSBvbGRMYXllci5jb25maWc7XG5cbiAgLy8gd2hlbiBhZGRpbmcgYSBuZXcgZW1wdHkgdGV4dCBsYWJlbCxcbiAgLy8gcmVseSBvbiB0aGUgbGF5ZXIncyBkZWZhdWx0IGNvbmZpZywgb3IgdXNlIHRoZSBjb25zdGFudCBERUZBVUxUX1RFWFRfTEFCRUxcbiAgY29uc3QgZGVmYXVsdFRleHRMYWJlbCA9XG4gICAgb2xkTGF5ZXIuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHtkYXRhSWQ6ICcnfSk/LnRleHRMYWJlbD8uWzBdID8/IERFRkFVTFRfVEVYVF9MQUJFTDtcblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG4gIGlmICghdGV4dExhYmVsW2lkeF0gJiYgaWR4ID09PSB0ZXh0TGFiZWwubGVuZ3RoKSB7XG4gICAgLy8gaWYgaWR4IGlzIHNldCB0byBsZW5ndGgsIGFkZCBlbXB0eSB0ZXh0IGxhYmVsXG4gICAgbmV3VGV4dExhYmVsID0gWy4uLnRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbF07XG4gIH1cblxuICBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wID09PSAnZmllbGRzJykge1xuICAgIG5ld1RleHRMYWJlbCA9IGFkZE9yUmVtb3ZlVGV4dExhYmVscyh2YWx1ZSwgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgbmV3VGV4dExhYmVsKTtcbiAgfVxuICAvLyB1cGRhdGUgdGV4dCBsYWJlbCBwcm9wIGFuZCB2YWx1ZVxuICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnOiB7dGV4dExhYmVsOiBuZXdUZXh0TGFiZWx9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsYXllckNsYXNzZXMsIGxheWVyLCBzY2hlbWEpIHtcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihsYXllciwgc2NoZW1hKTtcbiAgcmV0dXJuIGxvYWRlZExheWVyXG4gICAgPyB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbG9hZGVkTGF5ZXIsIGxheWVyQ2xhc3Nlcywge1xuICAgICAgICBhbGxvd0VtcHR5Q29sdW1uOiB0cnVlXG4gICAgICB9KVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgY29uZmlnIGRhdGFJZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG9sZExheWVyOiBMYXllcjtcbiAgICBuZXdDb25maWc6IHtcbiAgICAgIGRhdGFJZDogc3RyaW5nO1xuICAgIH07XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWd9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkfSA9IG5ld0NvbmZpZztcblxuICBpZiAoIW9sZExheWVyIHx8ICFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZH0pO1xuXG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyLFxuICAgICAgc3RhdGUuc2NoZW1hXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IG9sZExheWVyVHlwZSA9IG9sZExheWVyLnR5cGU7XG4gICAgICBpZiAob2xkTGF5ZXJUeXBlKSB7XG4gICAgICAgIG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tvbGRMYXllclR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmUgKGUuZy4gbWlzc2luZyBjb2x1bW5zKSwgYnV0IHdlIHN0aWxsIG5lZWQgdG9cbiAgICAvLyByZW1hcCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIG5ldyBkYXRhc2V0IHRvIGF2b2lkIHN0YWxlIGZpZWxkIHJlZmVyZW5jZXNcbiAgICAvLyB0aGF0IHBvaW50IHRvIHJvd3MgYmV5b25kIHRoZSBuZXcgZGF0YXNldCdzIGxlbmd0aFxuICAgIGNvbnN0IG5ld0RhdGFzZXRGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcztcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZDogZmllbGRLZXl9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RmllbGQgPSBuZXdMYXllci5jb25maWdbZmllbGRLZXldO1xuICAgICAgaWYgKGN1cnJlbnRGaWVsZCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkID0gbmV3RGF0YXNldEZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBjdXJyZW50RmllbGQubmFtZSk7XG4gICAgICAgIHJlbWFwcGVkRmllbGRzW2ZpZWxkS2V5XSA9IG1hdGNoZWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoT2JqZWN0LmtleXMocmVtYXBwZWRGaWVsZHMpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhyZW1hcHBlZEZpZWxkcyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIGZpZWxkIHR5cGUgY29tcGF0aWJpbGl0eSDigJQgY2xlYXJzIGZpZWxkcyB3aG9zZSB0eXBlIGlzIGluY29tcGF0aWJsZVxuICAgIC8vIHdpdGggdGhlIGNoYW5uZWwncyBzdXBwb3J0ZWQgZmllbGQgdHlwZXMgKGUuZy4gc3RyaW5nIGZpZWxkIGZvciBhIG51bWVyaWMgc2NhbGUpXG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2tleX0pID0+IHtcbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgaXNWaXNpYmxlOiBvbGRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlXG4gIH0pO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsTGF5ZXJDb25maWcobGF5ZXIsIGRhdGFzZXRzLCBsYXllckNsYXNzZXMpOiBMYXllciB7XG4gIGxldCBuZXdMYXllciA9IGxheWVyO1xuICBpZiAoIU9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGgpIHtcbiAgICAvLyBubyBkYXRhIGlzIGxvYWRlZFxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuICBpZiAoIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAvLyBzZXQgbGF5ZXIgZGF0YUlkXG4gICAgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkOiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF19KTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8vIGZpbmQgZGVmYXV0IGxheWVyIHByb3BzXG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBbXSlcbiAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgLy8gYW4gYXJyYXkgb2YgcG9zc2libGUgcHJvcHMsIHVzZSAxc3Qgb25lXG4gIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuXG4gIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbbGF5ZXIudHlwZV0oe1xuICAgICAgLi4ucHJvcHNbMF0sXG4gICAgICBsYWJlbDogbmV3TGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgICAgZGF0YUlkOiBuZXdMYXllci5jb25maWcuZGF0YUlkLFxuICAgICAgaXNDb25maWdBY3RpdmU6IG5ld0xheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICAgIGlzVmlzaWJsZTogbmV3TGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0eXBlb2YgbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nXG4gICAgPyBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICA6IG5ld0xheWVyO1xufVxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgb2xkSWQgPSBvbGRMYXllci5pZDtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZElkKTtcblxuICBpZiAoIXN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSkge1xuICAgIENvbnNvbGUuZXJyb3IoYCR7bmV3VHlwZX0gaXMgbm90IGEgdmFsaWQgbGF5ZXIgdHlwZWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKHtcbiAgICAvLyBrZWVwIG9sZCBsYXllciBsYWJsZSBhbmQgaXNDb25maWdBY3RpdmVcbiAgICBsYWJlbDogb2xkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGlzQ29uZmlnQWN0aXZlOiBvbGRMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgZGF0YUlkOiBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gIH0pO1xuXG4gIGlmICghb2xkTGF5ZXIudHlwZSkge1xuICAgIC8vIGlmIHNldHRpbmcgbGF5ZXIgdHlwZSBvbiBhbiBlbXB0eSBsYXllclxuICAgIG5ld0xheWVyID0gc2V0SW5pdGlhbExheWVyQ29uZmlnKG5ld0xheWVyLCBzdGF0ZS5kYXRhc2V0cywgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBnZXQgYSBtaW50IGxheWVyLCB3aXRoIG5ldyBpZCBhbmQgdHlwZVxuICAgIC8vIGJlY2F1c2UgZGVjay5nbCB1c2VzIGlkIHRvIG1hdGNoIGJldHdlZW4gbmV3IGFuZCBvbGQgbGF5ZXIuXG4gICAgLy8gSWYgdHlwZSBoYXMgY2hhbmdlZCBidXQgaWQgaXMgdGhlIHNhbWUsIGl0IHdpbGwgYnJlYWtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID1cbiAgICAgIHR5cGVvZiBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhzdGF0ZS5kYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgbmV3TGF5ZXIuYXNzaWduQ29uZmlnVG9MYXllcihcbiAgICAgIG9sZExheWVyLmNvbmZpZyxcbiAgICAgIG9sZExheWVyLnZpc0NvbmZpZ1NldHRpbmdzLFxuICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICBkZWZhdWx0TGF5ZXJQcm9wc1xuICAgICk7XG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICB9XG5cbiAgY29uc3Qge2NsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mb1xuICB9O1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgfHwgb2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHNwbGl0TWFwIGxheWVyIGlkXG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiB7XG4gICAgICAgIGNvbnN0IHtbb2xkSWRdOiBvbGRMYXllck1hcCwgLi4ub3RoZXJMYXllcnN9ID0gc2V0dGluZ3MubGF5ZXJzO1xuICAgICAgICByZXR1cm4gb2xkSWQgaW4gc2V0dGluZ3MubGF5ZXJzXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5vdGhlckxheWVycyxcbiAgICAgICAgICAgICAgICBbbGF5ZXIuaWRdOiBvbGRMYXllck1hcFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzZXR0aW5ncztcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsYXllck9yZGVyIHdpdGggbmV3IGlkXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG9sZExheWVyLmlkLCBuZXdMYXllci5pZClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWcsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgLy8gRXhjbHVzaXZlIGJpdG1hcCBlZGl0aW5nOiB3aGVuIGVkaXRCb3VuZHMgaXMgdHVybmVkIG9uIGZvciBvbmUgYml0bWFwIGxheWVyLFxuICAvLyB0dXJuIGl0IG9mZiBmb3IgYWxsIG90aGVyIGJpdG1hcCBsYXllcnNcbiAgaWYgKFxuICAgIG5ld0xheWVyLnR5cGUgPT09ICdiaXRtYXAnICYmXG4gICAgYWN0aW9uLm5ld1Zpc0NvbmZpZy5lZGl0Qm91bmRzID09PSB0cnVlXG4gICkge1xuICAgIG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgIGxheWVyczogbmV4dFN0YXRlLmxheWVycy5tYXAoKGwsIGkpID0+IHtcbiAgICAgICAgaWYgKGkgIT09IGlkeCAmJiBsLnR5cGUgPT09ICdiaXRtYXAnICYmIGwuY29uZmlnLnZpc0NvbmZpZy5lZGl0Qm91bmRzKSB7XG4gICAgICAgICAgcmV0dXJuIGwudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgdmlzQ29uZmlnOiB7Li4ubC5jb25maWcudmlzQ29uZmlnLCBlZGl0Qm91bmRzOiBmYWxzZX1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gbmV4dFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV4dFN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBhbmltYXRpb25XaW5kb3dcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG5cbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKSxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIG5lZWQgdG8gdXBkYXRlIGZpbHRlclBsb3QgYWZ0ZXIgZmlsdGVyIERhdGFzZXQgZm9yIHBsb3QgdG8gdXBkYXRlIG9uIGZpbHRlcmVkIHJlc3VsdFxuICBjb25zdCBmaWx0ZXJXaXRoUExvdCA9IHVwZGF0ZUZpbHRlclBsb3QobmV3U3RhdGUuZGF0YXNldHMsIG5ld1N0YXRlLmZpbHRlcnNbaWR4XSk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgZmlsdGVyV2l0aFBMb3QsIG5ld1N0YXRlKTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMpIHtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF0pIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbJ2RhdGFJZCcsICduYW1lJywgJ2ZpZWxkSWR4JywgJ2dwdUNoYW5uZWwnXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltwcm9wXSkpIHtcbiAgICAgIGNvbnN0IG5leHRWYWwgPSBmaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgIG5leHRWYWwuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dFZhbCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZUZpZWxkRG9tYWluIGZvciB0aGUgcmVtYWluaW5nIGZpZWxkc1xuICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC8vIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHM/LmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHM/LnN0ZXB9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXh0RmlsdGVyLnZhbHVlLCBuZXh0RmlsdGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgfTtcbn1cblxuLyoqICpcbiAqIFVwZGF0ZXMgYSBzaW5nbGUgcHJvcGVydHkgb2YgYSBmaWx0ZXJcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlclByb3Aoc3RhdGUsIGZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgsIGRhdGFzZXRJZHM/KSB7XG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocHJvcCkge1xuICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGlmIHdlIHVwZGF0ZSBmaWx0ZXJEYXRhSWQsIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIGNhc2VzOlxuICAgIC8vIDEuIGRhdGFJZCBpcyBlbXB0eTogY3JlYXRlIGEgZGVmYXVsdCBmaWx0ZXJcbiAgICAvLyAyLiBBZGQgYSBuZXcgZGF0YXNldCBpZFxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZGF0YUlkOiB7XG4gICAgICBjb25zdCBvbGREYXRhSWQgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBmaWx0ZXIgPSBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVuaXEoWy4uLm9sZERhdGFJZCwgLi4uZmlsdGVyLmRhdGFJZF0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubmFtZToge1xuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IHZhbHVlSW5kZXggPiAwfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcH06IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbHRlcnNbaWR4XSkge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnNbJHtpZHh9XSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gbmV3UHJvcCkge1xuICAgIGlmIChwcm9wID09PSAncGxvdFR5cGUnKSB7XG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8obmV3UHJvcC5wbG90VHlwZSkpKG5ld0ZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgICBjb25zdCBjaGFydFR5cGUgPSBuZXdQcm9wLnlBeGlzID8gUExPVF9UWVBFUy5saW5lQ2hhcnQgOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbTtcblxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHt0eXBlOiBjaGFydFR5cGV9KSkobWVyZ2VfKG5ld1Byb3ApKG5ld0ZpbHRlcikpO1xuICAgIH1cbiAgfVxuXG4gIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgICBpID09PSBpZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH1cbiAgICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCBuZXdMYXllcjtcbiAgbGV0IG5ld0xheWVyRGF0YTtcbiAgaWYgKGFjdGlvbi5jb25maWcpIHtcbiAgICBuZXdMYXllciA9IGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZSwgYWN0aW9uLmNvbmZpZyk7XG4gICAgaWYgKCFuZXdMYXllcikge1xuICAgICAgQ29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBsYXllciBmcm9tIGNvbmZpZywgaXQgdXN1YWxseSBtZWFucyB0aGUgY29uZmlnIGlzIG5vdCBiZSBpbiBjb3JyZWN0IGZvcm1hdCcsXG4gICAgICAgIGFjdGlvbi5jb25maWdcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gICAgbmV3TGF5ZXIgPSByZXN1bHQubGF5ZXI7XG4gICAgbmV3TGF5ZXJEYXRhID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIGRhdGFzZXQgb3IgYSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gYWN0aW9uLmRhdGFzZXRJZCA/PyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cylbMF07XG4gICAgbmV3TGF5ZXIgPSBuZXcgTGF5ZXIoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHRydWUsXG4gICAgICBkYXRhSWQ6IGRlZmF1bHREYXRhc2V0XG4gICAgfSk7XG4gICAgbmV3TGF5ZXJEYXRhID0ge307XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIC8vIGFkZCBuZXcgbGF5ZXIgYXQgdGhlIHRvcFxuICAgIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZCwgLi4uc3RhdGUubGF5ZXJPcmRlcl0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXJVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgLy8gaW52YWxpZCBpbmRleFxuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgbGF5ZXIgd2l0aCBpbnZhbGlkIGlkfGlkeCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnMsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgY2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuICBjb25zdCBsYXllclRvUmVtb3ZlID0gbGF5ZXJzW2lkeF07XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogZmlsdGVyT3V0QnlJZChsYXllclRvUmVtb3ZlLmlkKShsYXllcnMpLFxuICAgIGxheWVyRGF0YTogcmVtb3ZlRWxlbWVudEF0SW5kZXgoaWR4KShsYXllckRhdGEpLFxuICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllck9yZGVyLCBsYXllclRvUmVtb3ZlLmlkKSxcbiAgICBjbGlja2VkOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mbyxcbiAgICBzcGxpdE1hcHM6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyVG9SZW1vdmUpXG4gICAgLy8gVE9ETzogdXBkYXRlIGZpbHRlcnMsIGNyZWF0ZSBoZWxwZXIgdG8gcmVtb3ZlIGxheWVyIGZvcm0gZmlsdGVyIChyZW1vdmUgbGF5ZXJpZCBhbmQgZGF0YWlkKSBpZiBtYXBwZWRcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbn1cblxuLyoqXG4gKiBSZW9yZGVyIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyT3JkZXI6IG9yZGVyXG59KTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TmV3TGF5ZXJHcm91cChhY3Rpb24pO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICBpZiAoYWN0aW9uLmxheWVyT3JkZXIpIHtcbiAgICBhY3Rpb24ubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllckdyb3VwKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBncm91cCBhbmQgYWxsIGxheWVycyB3aXRoaW4gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwVG9SZW1vdmUgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXBUb1JlbW92ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGxheWVySWRzVG9SZW1vdmUgPSBnZXRGbGF0TGF5ZXJPcmRlcihsYXllckdyb3VwVG9SZW1vdmUubGF5ZXJPcmRlcik7XG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgbGF5ZXJJZHNUb1JlbW92ZS5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIG5ld1N0YXRlID0gcmVtb3ZlTGF5ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWQ6IGxheWVySWR9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cFRvUmVtb3ZlKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhIGxheWVyIGdyb3VwIChsYWJlbCwgdmlzaWJpbGl0eSwgbGF5ZXIgbWVtYmVyc2hpcClcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIG9wdGlvbnN9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBpZiAob3B0aW9ucy5sYXllck9yZGVyKSB7XG4gICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5sYXllckdyb3VwLmxheWVyT3JkZXIsIC4uLm5ld1N0YXRlLmxheWVyT3JkZXJdO1xuICAgIG9wdGlvbnMubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihcbiAgICAgICAgbmV3U3RhdGUubGF5ZXJPcmRlcixcbiAgICAgICAgbGF5ZXJJZCBhcyBzdHJpbmdcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwID0ge1xuICAgIC4uLmxheWVyR3JvdXAsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuXG4gIGlmIChuZXdMYXllckdyb3VwLmlzVmlzaWJsZSAhPT0gbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICBjb25zdCBsYXllcklkcyA9IGdldEZsYXRMYXllck9yZGVyKG5ld0xheWVyR3JvdXAubGF5ZXJPcmRlcik7XG4gICAgbmV3U3RhdGUgPSBuZXdTdGF0ZS5sYXllcnMucmVkdWNlKChhY2MsIGxheWVyKSA9PiB7XG4gICAgICBpZiAobGF5ZXJJZHMuaW5jbHVkZXMobGF5ZXIuaWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoYWNjLCB7XG4gICAgICAgICAgb2xkTGF5ZXI6IGxheWVyLFxuICAgICAgICAgIG5ld0NvbmZpZzoge2lzVmlzaWJsZTogbmV3TGF5ZXJHcm91cC5pc1Zpc2libGV9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBuZXdMYXllckdyb3VwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIGxheWVyIHRvIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgaWYgKCFsYXllckdyb3VwIHx8ICFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZChlbnRyeSA9PiBlbnRyeSA9PT0gbGF5ZXJJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZnJvbSBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cE9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0xheWVyR3JvdXBPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFN3YXAgbGF5ZXIgb3JkZXIgZW50cmllcyBiZXR3ZWVuIHJvb3QgYW5kIGdyb3Vwc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCBzd2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge29yaWdpbkxheWVySWQsIGRlc3RpbmF0aW9uTGF5ZXJJZCwgb3JpZ2luTGF5ZXJHcm91cElkLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH0gPSBhY3Rpb247XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3Qgb3JpZ2luSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICApO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQgJiYgb3JpZ2luSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheU1vdmUoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RpbmF0aW9uSW5kZXgpO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGxldCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBuZXdMYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGZhbHNlXG4gICAgICApO1xuICAgICAgbmV3TGF5ZXJPcmRlci5zcGxpY2UoZGVzdGluYXRpb25JbmRleCA9PT0gLTEgPyAwIDogZGVzdGluYXRpb25JbmRleCwgMCwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSBbLi4ubmV3TGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZF07XG4gICAgfVxuICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGlmIChvcmlnaW5MYXllckdyb3VwSWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZGVzdEluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBDcm9zcy1ncm91cCBtb3ZlOiByZW1vdmUgZnJvbSBvcmlnaW4sIHRoZW4gYWRkIHRvIGRlc3RpbmF0aW9uXG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBsZXQgbmV3U3RhdGUgPSBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcblxuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgZGVzdGluYXRpb25MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IG9yaWdpbkxheWVySWQpO1xuICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCAhPT0gLTEgJiYgZGVzdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIHJldHVybiBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogZHVwbGljYXRlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8ICFzdGF0ZS5sYXllcnNbaWR4XSkge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXIgJHtpZHh9IG5vdCBmb3VuZCBpbiBsYXllck9yZGVyYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWwgPSBsYXllcnNbaWR4XTtcblxuICBjb25zdCBvcmlnaW5hbExheWVyT3JkZXJJZHggPSBnZXRJbmRleEZyb21MYXllckVudHJ5SWQoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuXG4gIC8vIENoZWNrIGlmIHRoZSBvcmlnaW5hbCBsYXllciBpcyBpbnNpZGUgYSBncm91cFxuICBjb25zdCBwYXJlbnRHcm91cCA9IGZpbmRQYXJlbnRHcm91cEZvckxheWVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcblxuICBpZiAocGFyZW50R3JvdXApIHtcbiAgICAvLyBMYXllciBpcyBpbnNpZGUgYSBncm91cCAtIHJlbW92ZSB0aGUgcHJlcGVuZGVkIGlkIGZyb20gcm9vdCBhbmQgaW5zZXJ0IGludG8gdGhlIGdyb3VwXG4gICAgY29uc3QgbGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQgPSBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxKTtcbiAgICBjb25zdCBpZHhJbkdyb3VwID0gcGFyZW50R3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZSA9PiBlID09PSBvcmlnaW5hbC5pZCk7XG4gICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlJbnNlcnQocGFyZW50R3JvdXAubGF5ZXJPcmRlciwgaWR4SW5Hcm91cCwgbmV3TGF5ZXIuaWQpO1xuICAgIGNvbnN0IHVwZGF0ZWRHcm91cCA9IHsuLi5wYXJlbnRHcm91cCwgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfTtcbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihcbiAgICAgIGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkLFxuICAgICAgdXBkYXRlZEdyb3VwXG4gICAgKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgYXQgcm9vdCBsZXZlbCAtIHVzZSBvcmlnaW5hbCBpbmRleC1iYXNlZCBpbnNlcnRpb25cbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgICBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxLCBuZXh0U3RhdGUubGF5ZXJPcmRlci5sZW5ndGgpLFxuICAgICAgb3JpZ2luYWxMYXllck9yZGVySWR4LFxuICAgICAgbmV3TGF5ZXIuaWRcbiAgICApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUpXG4gICkge1xuICAgIENvbnNvbGUud2FybihgQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgJHtMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC5uYW1lfSBlZmZlY3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3QgPSBjcmVhdGVFZmZlY3QoYWN0aW9uLmNvbmZpZyk7XG5cbiAgLy8gY29sbGFwc2UgY29uZmlndXJhdG9ycyBmb3Igb3RoZXIgZWZmZWN0c1xuICBzdGF0ZS5lZmZlY3RzLmZvckVhY2goZWZmZWN0ID0+IGVmZmVjdC5zZXRQcm9wcyh7aXNDb25maWdBY3RpdmU6IGZhbHNlfSkpO1xuXG4gIGNvbnN0IGVmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0cywgbmV3RWZmZWN0XTtcbiAgY29uc3QgZWZmZWN0T3JkZXIgPSBmaXhFZmZlY3RPcmRlcihlZmZlY3RzLCBbbmV3RWZmZWN0LmlkLCAuLi5zdGF0ZS5lZmZlY3RPcmRlcl0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiByZW1vdmUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2VmZmVjdHMsIGVmZmVjdE9yZGVyfSA9IHN0YXRlO1xuICBjb25zdCBlZmZlY3RUb1JlbW92ZSA9IGVmZmVjdHNbaWR4XTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGZpeGVkIGluIHRzXG4gICAgZWZmZWN0czogZmlsdGVyT3V0QnlJZChlZmZlY3RUb1JlbW92ZS5pZCkoZWZmZWN0cyksXG4gICAgZWZmZWN0T3JkZXI6IGVmZmVjdE9yZGVyLmZpbHRlcihlZmZlY3RJZCA9PiBlZmZlY3RJZCAhPT0gZWZmZWN0VG9SZW1vdmUuaWQpXG4gIH07XG59O1xuXG4vKipcbiAqIFJlb3JkZXIgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZWZmZWN0T3JkZXI6IGZpeEVmZmVjdE9yZGVyKHN0YXRlLmVmZmVjdHMsIFsuLi5vcmRlcl0pXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHByb3BzfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBlZmZlY3RPcmRlciA9IHN0YXRlLmVmZmVjdE9yZGVyO1xuICBpZiAocHJvcHMuaWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5pZCAhPT0gaWQpIHtcbiAgICBjb25zdCBpZHgyID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBwcm9wcy5pZCk7XG4gICAgaWYgKGlkeDIgPj0gMCkge1xuICAgICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBleGlzdGluZyBlZmZlY3QgaWQgJHtpZH1gKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBlZmZlY3RPcmRlciA9IGVmZmVjdE9yZGVyLm1hcChlZmZlY3RPcmRlcklkID0+XG4gICAgICBlZmZlY3RPcmRlcklkID09PSBpZCA/IChwcm9wcy5pZCBhcyBzdHJpbmcpIDogZWZmZWN0T3JkZXJJZFxuICAgICk7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHNdO1xuICBuZXdFZmZlY3RzW2lkeF0uc2V0UHJvcHMocHJvcHMpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLy8gQU5OT1RBVElPTiBVUERBVEVSU1xuXG5mdW5jdGlvbiBtYWtlTmV3QW5ub3RhdGlvbihjb25maWc/OiBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTogQW5ub3RhdGlvbiB7XG4gIGNvbnN0IGtpbmQgPSBjb25maWc/LmtpbmQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQ7XG4gIGNvbnN0IGJhc2UgPSB7XG4gICAgaWQ6IGNvbmZpZz8uaWQgPz8gZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAga2luZCxcbiAgICBpc1Zpc2libGU6IGNvbmZpZz8uaXNWaXNpYmxlID8/IHRydWUsXG4gICAgYXV0b1NpemU6IGNvbmZpZz8uYXV0b1NpemUgPz8gdHJ1ZSxcbiAgICBhdXRvU2l6ZVk6IGNvbmZpZz8uYXV0b1NpemVZID8/IHRydWUsXG4gICAgYW5jaG9yUG9pbnQ6IGNvbmZpZz8uYW5jaG9yUG9pbnQgPz8gKFswLCAwXSBhcyBbbnVtYmVyLCBudW1iZXJdKSxcbiAgICBsYWJlbDogY29uZmlnPy5sYWJlbCA/PyAnTmV3IEFubm90YXRpb24nLFxuICAgIGxpbmVDb2xvcjogY29uZmlnPy5saW5lQ29sb3IgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gICAgbGluZVdpZHRoOiBjb25maWc/LmxpbmVXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgICB0ZXh0V2lkdGg6IGNvbmZpZz8udGV4dFdpZHRoID8/IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICAgIHRleHRIZWlnaHQ6IGNvbmZpZz8udGV4dEhlaWdodCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gICAgdGV4dFZlcnRpY2FsQWxpZ246IGNvbmZpZz8udGV4dFZlcnRpY2FsQWxpZ24gPz8gKCdib3R0b20nIGFzIGNvbnN0KSxcbiAgICBtYXBJbmRleDogY29uZmlnPy5tYXBJbmRleFxuICB9O1xuXG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuUE9JTlQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5QT0lOVCxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IChjb25maWcgYXMgYW55KT8uYW5nbGUgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQVJST1c6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5BUlJPVyxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IChjb25maWcgYXMgYW55KT8uYW5nbGUgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQ0lSQ0xFOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQ0lSQ0xFLFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogKGNvbmZpZyBhcyBhbnkpPy5hbmdsZSA/PyBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gICAgICAgIHJhZGl1c0luTWV0ZXJzOiAoY29uZmlnIGFzIGFueSk/LnJhZGl1c0luTWV0ZXJzID8/IDEwMDBcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5URVhUOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5URVhUXG4gICAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBuZXdBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oYWN0aW9uLmNvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IHRydWVcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogc3RhdGUuYW5ub3RhdGlvbnMuZmlsdGVyKGEgPT4gYS5pZCAhPT0gaWQpLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBudWxsIDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6XG4gICAgICBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBmYWxzZSA6IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZEluZGV4KGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcHJldiA9IHN0YXRlLmFubm90YXRpb25zW2lkeF07XG4gIGxldCBuZXh0QW5ub3RhdGlvbjogQW5ub3RhdGlvbjtcblxuICBpZiAoY29uZmlnLmtpbmQgJiYgY29uZmlnLmtpbmQgIT09IHByZXYua2luZCkge1xuICAgIG5leHRBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvblByb3BzUGFydGlhbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEFubm90YXRpb24gPSB7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uO1xuICB9XG5cbiAgY29uc3QgbmV3QW5ub3RhdGlvbnMgPSBbLi4uc3RhdGUuYW5ub3RhdGlvbnNdO1xuICBuZXdBbm5vdGF0aW9uc1tpZHhdID0gbmV4dEFubm90YXRpb247XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IG5ld0Fubm90YXRpb25zXG4gIH07XG59O1xuXG4vKipcbiAqIER1cGxpY2F0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKCFvcmlnaW5hbCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCBkdXBsaWNhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IHtcbiAgICAuLi5jbG9uZURlZXAob3JpZ2luYWwpLFxuICAgIGlkOiBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBsYWJlbDogYENvcHkgb2YgJHtvcmlnaW5hbC5sYWJlbH1gXG4gIH07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFNldCBzZWxlY3RlZCBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGlzRWRpdGluZ1RleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgaWQgPT09IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkICYmXG4gICAgKGlzRWRpdGluZ1RleHQgPz8gZmFsc2UpID09PSBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGlzRWRpdGluZ1RleHQgPz8gZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZGF0YXNldCBhbmQgYWxsIGxheWVycywgZmlsdGVycywgdG9vbHRpcCBjb25maWdzIHRoYXQgYmFzZWQgb24gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEYXRhc2V0VXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICAvLyBleHRyYWN0IGRhdGFzZXQga2V5XG4gIGNvbnN0IHtkYXRhSWQ6IGRhdGFzZXRLZXl9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG5cbiAgLy8gY2hlY2sgaWYgZGF0YXNldCBpcyBwcmVzZW50XG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGF5ZXJzLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkYXRhc2V0czoge1tkYXRhc2V0S2V5XTogZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIC8vIHJlbW92ZSBsYXllcnMgYW5kIGRhdGFzZXRzXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICAvLyB1cGRhdGUgZmlsdGVyc1xuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBuZXdTdGF0ZS5maWx0ZXJzKSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhc2V0S2V5KTtcbiAgICBpZiAodmFsdWVJbmRleCA+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgLy8gb25seSByZW1vdmUgb25lIHN5bmNlZCBkYXRhc2V0IGZyb20gdGhlIGZpbHRlclxuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIC8vIGxlYXZlIHRoZSBmaWx0ZXIgYXMgaXNcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhuZXdTdGF0ZSwge2RhdGFJZDogZGF0YXNldEtleX0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKHN0YXRlLCB7ZGF0YUlkfSkge1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtbZGF0YUlkXTogZmllbGRzLCAuLi5maWVsZHNUb1Nob3d9ID0gY29uZmlnLmZpZWxkc1RvU2hvdztcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9O1xufVxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIHVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBvdmVybGF5QmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdGluZ0RhdGFzZXQ6IGFjdGlvbi5kYXRhSWRcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGN1c3RvbSBjb2xvciBmb3IgZGF0YXNldHMgYW5kIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRDb2xvclVwZGF0ZXJcbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7Y29sb3I6IGFjdGlvbi5uZXdDb2xvcn19KTtcbn07XG5cbi8qKlxuICogcmVzZXQgdmlzU3RhdGUgdG8gaW5pdGlhbCBTdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2V0TWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnID8gcmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBoYXNQcm9wc1RvTWVyZ2UoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCkpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKFxuICAgICAgICBtZXJnZWRTdGF0ZSxcbiAgICAgICAgZ2V0UHJvcFZhbHVlVG9NZXJnZXIoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCwgbWVyZ2VyLnRvTWVyZ2VQcm9wKSxcbiAgICAgICAgLy8gZnJvbUNvbmZpZ1xuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJIb3ZlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckhvdmVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGhvdmVySW5mbzoge1xuICAgIC8vIGRlY2suZ2wgaW5mbyBpcyBtdXRhYmxlXG4gICAgLi4uYWN0aW9uLmluZm8sXG4gICAgLi4uKE51bWJlci5pc0Zpbml0ZShhY3Rpb24ubWFwSW5kZXgpID8ge21hcEluZGV4OiBhY3Rpb24ubWFwSW5kZXh9IDoge30pXG4gIH1cbn0pO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogVXBkYXRlIGBpbnRlcmFjdGlvbkNvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgIC4uLntbY29uZmlnLmlkXTogY29uZmlnfVxuICB9O1xuXG4gIC8vIERvbid0IGVuYWJsZSB0b29sdGlwIGFuZCBicnVzaCBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIGJ1dCBjb29yZGluYXRlcyBjYW4gYmUgc2hvd24gYXQgYWxsIHRpbWVcbiAgY29uc3QgY29udHJhZGljdCA9IFsnYnJ1c2gnLCAndG9vbHRpcCddO1xuXG4gIGlmIChcbiAgICBjb250cmFkaWN0LmluY2x1ZGVzKGNvbmZpZy5pZCkgJiZcbiAgICBjb25maWcuZW5hYmxlZCAmJlxuICAgICFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1tjb25maWcuaWRdLmVuYWJsZWRcbiAgKSB7XG4gICAgLy8gb25seSBlbmFibGUgb25lIGludGVyYWN0aW9uIGF0IGEgdGltZVxuICAgIGNvbnRyYWRpY3QuZm9yRWFjaChrID0+IHtcbiAgICAgIGlmIChrICE9PSBjb25maWcuaWQpIHtcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdba10gPSB7Li4uaW50ZXJhY3Rpb25Db25maWdba10sIGVuYWJsZWQ6IGZhbHNlfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJyAmJiAhY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gcmVtb3ZlRGF0YXNldFVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWQ6ICdnZW9jb2Rlcl9kYXRhc2V0J30pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtb3VzZVBvczogc3RhdGUuaW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICBwaW5uZWQ6IHN0YXRlLm1vdXNlUG9zLnBpbm5lZCA/IG51bGwgOiBjbG9uZURlZXAoc3RhdGUubW91c2VQb3MpXG4gICAgICB9XG4gICAgOiBzdGF0ZS5tb3VzZVBvcyxcbiAgY2xpY2tlZDogYWN0aW9uLmluZm8gJiYgYWN0aW9uLmluZm8ucGlja2VkID8gYWN0aW9uLmluZm8gOiBudWxsXG59KTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBjbGljayBldmVudCwgdW5zZWxlY3QgY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Pbk1hcENsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1vdXNlTW92ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2V2dH06IFZpc1N0YXRlQWN0aW9ucy5Pbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQucG9pbnQpID8ge21vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdfSA6IHt9KSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LmxuZ0xhdCkgPyB7Y29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGZvciBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzLCB7ZHVwbGljYXRlOiBmYWxzZX0pXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttYXBJbmRleCwgbGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3NwbGl0TWFwc30gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcCgoc20sIGkpID0+XG4gICAgICBpID09PSBtYXBJbmRleFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXSxcbiAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0ubGF5ZXJzLFxuICAgICAgICAgICAgICAvLyBpZiBsYXllcklkIG5vdCBpbiBsYXllcnMsIHNldCBpdCB0byB2aXNpYmxlXG4gICAgICAgICAgICAgIFtsYXllcklkXTogIXNwbGl0TWFwc1tpXS5sYXllcnNbbGF5ZXJJZF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc21cbiAgICApXG4gIH07XG59O1xuXG5mdW5jdGlvbiBoYXNUYWJ1bGFyRGF0YXNldERhdGEoZGF0YT86IFByb3RvRGF0YXNldFsnZGF0YSddIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihkYXRhPy5yb3dzPy5sZW5ndGggfHwgZGF0YT8uY29scz8ubGVuZ3RoIHx8IChkYXRhIGFzIHthcnJvd1RhYmxlPzogdW5rbm93bn0pPy5hcnJvd1RhYmxlKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0OiBQcm90b0RhdGFzZXQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBkYXRhc2V0LmluZm8/LnR5cGUgPT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEICYmXG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSA9PT0gJ3N0cmluZycgJiZcbiAgICAhaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGFzZXQuZGF0YSlcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQoZGF0YXNldDogUHJvdG9EYXRhc2V0KTogUHJvbWlzZTxQcm90b0RhdGFzZXQ+IHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cbiAgY29uc3QgZGF0YSA9IGF3YWl0IGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCh7XG4gICAgc291cmNlOiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgYXMgc3RyaW5nLFxuICAgIGZvcm1hdDogZ2V0UmVtb3RlU291cmNlRm9ybWF0KGRhdGFzZXQubWV0YWRhdGEpLFxuICAgIHNpemU6IHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zaXplID09PSAnbnVtYmVyJyA/IGRhdGFzZXQubWV0YWRhdGEuc2l6ZSA6IHVuZGVmaW5lZFxuICB9KTtcbiAgcmV0dXJuIHsuLi5kYXRhc2V0LCBkYXRhfTtcbn1cblxuY29uc3QgSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKFxuICBoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCxcbiAgJ0hZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLJ1xuKTtcblxuY29uc3QgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZShhc3luYyAobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn0sICdGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0snKTtcblxuZnVuY3Rpb24gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayhkYXRhc2V0OiBQcm90b0RhdGFzZXQsIGRhdGFzZXRzOiBEYXRhc2V0cykge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gY3JlYXRlTmV3RGF0YUVudHJ5KGRhdGFzZXQsIGRhdGFzZXRzKTtcbiAgfVxuICByZXR1cm4gSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soZGF0YXNldCkuY2hhaW4oaHlkcmF0ZWQgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnkoaHlkcmF0ZWQsIGRhdGFzZXRzKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGFzayB8fFxuICAgICAgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLKCdGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9ycycpXG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpc0RhdGFVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGRhdGFzZXRzIGNhbiBiZSBhIHNpbmdsZSBkYXRhIGVudHJpZXMgb3IgYW4gYXJyYXkgb2YgbXVsdGlwbGUgZGF0YSBlbnRyaWVzXG4gIGNvbnN0IHtjb25maWcsIG9wdGlvbnN9ID0gYWN0aW9uO1xuXG4gIC8vIGFwcGx5IGNvbmZpZyBpZiBwYXNzZWQgZnJvbSBhY3Rpb25cbiAgLy8gVE9ETzogd2UgZG9uJ3QgaGFuZGxlIGFzeW5jIG1lcmdlcnMgaGVyZSB5ZXRcbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IGNvbmZpZ1xuICAgID8gcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtcbiAgICAgICAgcGF5bG9hZDoge2NvbmZpZywgb3B0aW9uc31cbiAgICAgIH0pXG4gICAgOiBzdGF0ZTtcblxuICBjb25zdCBkYXRhc2V0cyA9IHRvQXJyYXkoYWN0aW9uLmRhdGFzZXRzKTtcbiAgaWYgKCFkYXRhc2V0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdXBkYXRlZFN0YXRlO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlRGF0YXNldFRhc2tzOiBUYXNrW10gPSBbXTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gIGRhdGFzZXRzLmZvckVhY2goKHtpbmZvID0ge30sIC4uLnJlc3R9LCBkYXRhc2V0SW5kZXgpID0+IHtcbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayh7aW5mbywgLi4ucmVzdH0sIHN0YXRlLmRhdGFzZXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgY3JlYXRlRGF0YXNldFRhc2tzLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9yc2AsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1mYWlsZWQtJHtkYXRhc2V0SW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBkYXRhc2V0c0FsbFNldHRsZWRUYXNrID0gY3JlYXRlRGF0YXNldFRhc2tzLmxlbmd0aFxuICAgID8gVGFzay5hbGxTZXR0bGVkKGNyZWF0ZURhdGFzZXRUYXNrcykubWFwKHJlc3VsdHMgPT5cbiAgICAgICAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3Moe3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uczogb3B0aW9uc30pXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChkYXRhc2V0c0FsbFNldHRsZWRUYXNrKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAxLCB0eXBlOiAnJ30pKTtcbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi4oZGF0YXNldHNBbGxTZXR0bGVkVGFzayA/IFtkYXRhc2V0c0FsbFNldHRsZWRUYXNrXSA6IFtdKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uc30gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gcmVzdWx0cy5yZWR1Y2UoKGFjY3UsIHJlc3VsdCwgaWR4KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBbZGF0YXNldC5pZF06IGRhdGFzZXR9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IGVycm9yIG5vdGlmaWNhdGlvbiBvbiBVSVxuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0soKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBEYXRhc2V0IGVycm9yOiBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQ6XG4gICAgICAgICAgICAgICR7cmVzdWx0LnJlYXNvbiB8fCAocmVzdWx0IGFzIGFueSkudmFsdWV9YCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWNyZWF0ZS1mYWlsZWQtJHtpZHh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG4gIH0sIHt9IGFzIERhdGFzZXRzKTtcbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGUsIG5ld0RhdGFFbnRyaWVzKVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBsYXllck1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+IG0ud2FpdEZvckxheWVyRGF0YSk7XG4gIGNvbnN0IGRhdGFzZXRNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiAhbGF5ZXJNZXJnZXJzLmluY2x1ZGVzKG0pKTtcblxuICBjb25zdCBuZXdEYXRhSWRzID0gT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpO1xuICBjb25zdCBwb3N0TWVyZ2VyUGF5bG9hZCA9IHtcbiAgICBuZXdEYXRhSWRzLFxuICAgIG9wdGlvbnM6IGFkZFRvTWFwT3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkU3RhdGUgPSBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgbWVyZ2VyczogZGF0YXNldE1lcmdlcnMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogLTF9KSksXG4gICAgbm90aWZpY2F0aW9uVGFza3NcbiAgKTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1lcmdlcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG1lcmdlcnM6IE1lcmdlcjxhbnk+W107XG4gICAgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHttZXJnZXJzLCBwb3N0TWVyZ2VyUGF5bG9hZH0gPSBhY3Rpb247XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IG1lcmdlU3RhdGVSZXN1bHQgPSBtZXJnZVN0YXRlRnJvbU1lcmdlcnMoXG4gICAgc3RhdGUsXG4gICAge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICAuLi5zdGF0ZS5pbml0aWFsU3RhdGVcbiAgICB9LFxuICAgIG1lcmdlcnMsXG4gICAgLy8gbmV3RGF0YUlkcyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICApO1xuXG4gIC8vIGlmIGFsbCBtZXJnZWQsIGtpY2t1cCBwb3N0IG1lcmdlIHByb2Nlc3NcbiAgLy8gaWYgbm90IHdhaXRcbiAgcmV0dXJuIG1lcmdlU3RhdGVSZXN1bHQuYWxsTWVyZ2VkXG4gICAgPyBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkKVxuICAgIDogbWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZTtcbn1cblxuLyoqIFJlYWRzIGBvcHRpb25zLmxheWVyVmlzQ29uZmlnYCBmcm9tIGFkZC1kYXRhLXRvLW1hcCAoc2VlIGBBZGREYXRhVG9NYXBPcHRpb25zYCkuICovXG5mdW5jdGlvbiBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhcbiAgb3B0aW9uczogUG9zdE1lcmdlclBheWxvYWRbJ29wdGlvbnMnXSB8IHVuZGVmaW5lZFxuKTogUGFydGlhbDxMYXllclZpc0NvbmZpZz4gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wdGlvbnMgfHwgISgnbGF5ZXJWaXNDb25maWcnIGluIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBwYXRjaCA9IChvcHRpb25zIGFzIHtsYXllclZpc0NvbmZpZz86IHVua25vd259KS5sYXllclZpc0NvbmZpZztcbiAgaWYgKHBhdGNoID09IG51bGwgfHwgdHlwZW9mIHBhdGNoICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhdGNoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHBhdGNoIGFzIFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+O1xufVxuXG4vKipcbiAqIFBvbHlnb24gZmlsdGVycyBmb3IgdGhlc2UgbGF5ZXJzIHVzZSBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlIGZyb21cbiAqIGNhbGN1bGF0ZUxheWVyRGF0YS4gT3RoZXIgdHlwZXMgKGxhdC9sbmcgcG9pbnRzLCBIMywgYXJjcykgY2FuIGZpbHRlclxuICogZnJvbSBjb2x1bW5zIG9uIHRoZSBmaXJzdCBwYXNzIGFuZCBtdXN0IG5vdCBiZSByZWNhbGN1bGF0ZWQgaGVyZS5cbiAqL1xuZnVuY3Rpb24gcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5nZW9qc29uIHx8XG4gICAgbGF5ZXIuY29uZmlnPy5jb2x1bW5Nb2RlID09PSAnZ2VvanNvbidcbiAgKTtcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZnVuY3Rpb24gcG9zdE1lcmdlVXBkYXRlcihtZXJnZWRTdGF0ZTogVmlzU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZCk6IFZpc1N0YXRlIHtcbiAgY29uc3Qge25ld0RhdGFJZHMsIG9wdGlvbnMsIGxheWVyTWVyZ2Vyc30gPSBwb3N0TWVyZ2VyUGF5bG9hZDtcbiAgY29uc3QgbmV3RmlsdGVycyA9IG1lcmdlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKGYgPT5cbiAgICBmLmRhdGFJZC5maW5kKGZEYXRhSWQgPT4gbmV3RGF0YUlkcy5pbmNsdWRlcyhmRGF0YUlkKSlcbiAgKTtcbiAgY29uc3QgZGF0YXNldEZpbHRlcmVkOiBzdHJpbmdbXSA9IHVuaXEoXG4gICAgbmV3RmlsdGVycy5yZWR1Y2UoKGFjY3UsIGYpID0+IFsuLi5hY2N1LCAuLi5mLmRhdGFJZF0sIFtdIGFzIHN0cmluZ1tdKVxuICApO1xuICBjb25zdCBkYXRhRW1wdHkgPSBuZXdEYXRhSWRzLmxlbmd0aCA8IDE7XG5cbiAgbGV0IG5ld0xheWVycyA9ICFkYXRhRW1wdHlcbiAgICA/IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpKVxuICAgIDogW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSBuZXdEYXRhSWRzLnJlZHVjZShcbiAgICAoYWNjdSwgaWQpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2lkXTogbWVyZ2VkU3RhdGUuZGF0YXNldHNbaWRdXG4gICAgfSksXG4gICAge31cbiAgKTtcblxuICBpZiAoIW5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmF1dG9DcmVhdGVMYXllcnMgIT09IGZhbHNlKSB7XG4gICAgLy8gbm8gbGF5ZXIgbWVyZ2VkLCBmaW5kIGRlZmF1bHRzXG4gICAgY29uc3QgcmVzdWx0ID0gYWRkRGVmYXVsdExheWVycyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXMpO1xuICAgIG1lcmdlZFN0YXRlID0gcmVzdWx0LnN0YXRlO1xuICAgIG5ld0xheWVycyA9IHJlc3VsdC5uZXdMYXllcnM7XG4gIH1cblxuICBpZiAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIC8vIGlmIG1hcCBpcyBzcGxpdCwgYWRkIG5ldyBsYXllcnMgdG8gc3BsaXRNYXBzXG4gICAgbmV3TGF5ZXJzID0gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKVxuICAgICk7XG4gICAgbWVyZ2VkU3RhdGUgPSB7XG4gICAgICAuLi5tZXJnZWRTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVycylcbiAgICB9O1xuICB9XG5cbiAgbWVyZ2VkU3RhdGUgPSBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gICAgbWVyZ2VkU3RhdGUsXG4gICAgbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMob3B0aW9ucyksXG4gICAgbmV3RGF0YUlkc1xuICApO1xuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBuZXdEYXRhSWRzLmZvckVhY2goZGF0YUlkID0+IHtcbiAgICBjb25zdCB0b29sdGlwRmllbGRzID0gbWVyZ2VkU3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgLy8gbG9hZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgZmFsc2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gcnVuIGFkZERlZmF1bHRUb29sdGlwcyB3aGVuIHRvb2x0aXBGaWVsZHMgaXMgZW1wdHlcbiAgICBpZiAoXG4gICAgICBvcHRpb25zPy5hdXRvQ3JlYXRlVG9vbHRpcHMgIT09IGZhbHNlICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKVxuICAgICkge1xuICAgICAgLy8gYWRkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyB0cnVlXG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhRW1wdHlcbiAgICA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKVxuICAgIDogdW5pcShPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuY29uY2F0KGRhdGFzZXRGaWx0ZXJlZCkpO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobWVyZ2VkU3RhdGUsIHVwZGF0ZWREYXRhc2V0cywgdW5kZWZpbmVkKTtcblxuICAvLyBQb2x5Z29uIHBlci1sYXllciBpbmRleGVzIG5lZWQgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSwgd2hpY2ggYXJlIG9ubHlcbiAgLy8gcG9wdWxhdGVkIGJ5IHRoZSBsYXllci1kYXRhIHBhc3MgYWJvdmUuIFNraXAgZGF0YXNldHMgd2hvc2UgdGFyZ2V0ZWQgbGF5ZXJzXG4gIC8vIGFscmVhZHkgZmlsdGVyZWQgZnJvbSBjb2x1bW5zIChlLmcuIGxhdC9sbmcgcG9pbnRzKS5cbiAgY29uc3QgcG9seWdvbkZpbHRlcnMgPSB1cGRhdGVkU3RhdGUuZmlsdGVycy5maWx0ZXIoXG4gICAgZiA9PiBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmIGYuZW5hYmxlZCAhPT0gZmFsc2VcbiAgKTtcbiAgY29uc3QgcG9seWdvbk1ldGFEYXRhSWRzID0gdW5pcShcbiAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICBsYXllciA9PlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXIpICYmXG4gICAgICAgICAgcG9seWdvbkZpbHRlcnMuc29tZShmID0+IGYubGF5ZXJJZD8uaW5jbHVkZXMobGF5ZXIuaWQpKVxuICAgICAgKVxuICAgICAgLm1hcChsYXllciA9PiBsYXllci5jb25maWcuZGF0YUlkKVxuICAgICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkgJiYgdXBkYXRlZERhdGFzZXRzLmluY2x1ZGVzKGlkKSlcbiAgKTtcbiAgaWYgKHBvbHlnb25NZXRhRGF0YUlkcy5sZW5ndGgpIHtcbiAgICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEoXG4gICAgICB7XG4gICAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgICAgZGF0YXNldHM6IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgICAgICAgcG9seWdvbk1ldGFEYXRhSWRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZmlsdGVycyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBwb2x5Z29uTWV0YURhdGFJZHNcbiAgICApO1xuICB9XG5cbiAgLy8gcmVnaXN0ZXIgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpbixcbiAgLy8gbmVlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgbGF5ZXIgZGF0YSBpcyBjYWxjdWxhdGVkXG4gIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbih1cGRhdGVkU3RhdGUpO1xuXG4gIC8vIHRyeSB0byBwcm9jZXNzIGxheWVyTWVyZ2VycyBhZnRlciBkYXRhc2V0K2RhdGFzZXRNZXJnZXJzXG4gIHVwZGF0ZWRTdGF0ZSA9XG4gICAgbGF5ZXJNZXJnZXJzICYmIGxheWVyTWVyZ2Vycy5sZW5ndGggPiAwXG4gICAgICA/IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIodXBkYXRlZFN0YXRlLCB7XG4gICAgICAgICAgbWVyZ2VyczogbGF5ZXJNZXJnZXJzLFxuICAgICAgICAgIHBvc3RNZXJnZXJQYXlsb2FkOiB7Li4ucG9zdE1lcmdlclBheWxvYWQsIGxheWVyTWVyZ2VyczogW119XG4gICAgICAgIH0pXG4gICAgICA6IHVwZGF0ZWRTdGF0ZTtcblxuICAvLyBjZW50ZXIgdGhlIG1hcCBvbmNlIHRoZSBkYXRhc2V0IGlzIGNyZWF0ZWRcbiAgaWYgKG5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmNlbnRlck1hcCkge1xuICAgIGNvbnN0IGJvdW5kcyA9IGZpbmRNYXBCb3VuZHMobmV3TGF5ZXJzKTtcbiAgICBpZiAoYm91bmRzKSB7XG4gICAgICBjb25zdCBwYWRkaW5nID0gb3B0aW9ucz8ucGFkZGluZztcbiAgICAgIGNvbnN0IGZpdEJvdW5kc1Rhc2sgPSBBQ1RJT05fVEFTS19GSVRfQk9VTkRTKCkubWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpdE1hcEJvdW5kcyhib3VuZHMsIHBhZGRpbmcpO1xuICAgICAgfSk7XG4gICAgICB1cGRhdGVkU3RhdGUgPSB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIGZpdEJvdW5kc1Rhc2spO1xuICAgIH1cbiAgfVxuXG4gIC8vIG5lZWQgdG8gY2VudGVyIG1hcCBoZXJlIGlmIHdlIGhhdmUgbmV3IGxheWVyc1xuICByZXR1cm4gdXBkYXRlZFN0YXRlO1xufVxuXG4vKipcbiAqIFJlbmFtZSBhbiBleGlzdGluZyBkYXRhc2V0IGluIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW5hbWVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtsYWJlbDogYWN0aW9uLmxhYmVsfX0pO1xufVxuXG5jb25zdCBBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTID0gWydsYWJlbCcsICdjb2xvcicsICdtZXRhZGF0YSddO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBwcm9wZXJ0aWVzIGJlZm9yZSB1cGRhdGluZyB0aGUgZGF0YXNldC5cbiAqIE1ha2VzIHN1cmUgZWFjaCBwcm9wZXJ0eSBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0XG4gKiBNYWtlcyBzdXJlIGNvbG9yIHZhbHVlIGlzIFJHQlxuICogUGVyZm9ybXMgZGVlcCBtZXJnZSB3aGVuIHVwZGF0aW5nIG1ldGFkYXRhXG4gKi9cbmNvbnN0IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzID0gKHByb3BzLCBkYXRhc2V0KSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gT2JqZWN0LmVudHJpZXMocHJvcHMpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVudHJ5O1xuICAgIC8vIGlzIGl0IGFsbG93ZWQgP1xuICAgIGlmICghQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFyZSBhZGRpbmcgYSBjb2xvciBidXQgaXQgaXMgbm90IFJHQiB3ZSBkb24ndCBhY2NlcHQgdGhlIHZhbHVlXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSBhcyB3ZSBhZGQgbW9yZSBwcm9wcyB3ZSBzaG91bGQgY2hhbmdlIHRoaXMgaWYgaW50byBhIHN3aXRjaFxuICAgIGlmIChrZXkgPT09ICdjb2xvcicgJiYgIWlzUmdiQ29sb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGRvIHdlIG5lZWQgZGVlcCBtZXJnZSA/XG4gICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IGRlZXBtZXJnZShkYXRhc2V0W2tleV0gfHwge30sIHZhbHVlKSA6IHZhbHVlfTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB2YWxpZGF0ZWRQcm9wcztcbn07XG5cbi8qKlxuICogVXBkYXRlIERhdGFzZXQgcHJvcHMgKGxhYmVsLCBjb2xvciwgbWV0YSkuIERvIG5vdCB1c2UgdG8gdXBkYXRlIGRhdGEgb3IgYW55IHJlbGF0ZWQgcHJvcGVydGllc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFByb3BzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBwcm9wc30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMocHJvcHMsIGV4aXN0aW5nKTtcbiAgICAvLyAgdmFsaWRhdGUgcHJvcHM6IGp1c3QgY29sb3IgZm9yIG5vd1xuICAgIC8vICB3ZSBvbmx5IGFsbG93IGxhYmVsLCBjb2xvciBhbmQgbWV0YSB0byBiZSB1cGRhdGVkXG4gICAgLy8gY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IEFycmF5LmZyb20oZmlsZXMpLnJlZHVjZShcbiAgICAoYWNjdSwgZiwgaSkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGYsIGkpKShhY2N1KSxcbiAgICB7fVxuICApO1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nID0ge1xuICAgIGZpbGVDYWNoZTogW10sXG4gICAgZmlsZXNUb0xvYWQ6IGZpbGVzLFxuICAgIG9uRmluaXNoXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gbWVyZ2VfKHtmaWxlTG9hZGluZ1Byb2dyZXNzLCBmaWxlTG9hZGluZ30pKHN0YXRlKTtcblxuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ0RvbmUnfVxuICB9KTtcblxuICAvLyBzYXZlIHByb2Nlc3NlZCBmaWxlIHRvIGZpbGVDYWNoZVxuICBjb25zdCBzdGF0ZVdpdGhDYWNoZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZUNhY2hlfSkpKHN0YXRlV2l0aFByb2dyZXNzKTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufVxuXG4vLyB3aXRoVGFzazxUPihzdGF0ZTogVCwgdGFzazogYW55KTogVFxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlVXBkYXRlcihzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBbZmlsZSwgLi4ucmVtYWluaW5nRmlsZXNUb0xvYWRdID0gZmlsZXNUb0xvYWQ7XG5cbiAgLy8gc2F2ZSBmaWxlc1RvTG9hZCB0byBzdGF0ZVxuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVzVG9Mb2FkOiByZW1haW5pbmdGaWxlc1RvTG9hZH0pKShzdGF0ZSk7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMCwgbWVzc2FnZTogJ2xvYWRpbmcuLi4nfVxuICB9KTtcblxuICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgZmlsZSxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgbG9hZGVycyxcbiAgICAgIGxvYWRPcHRpb25zXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnM6IExvYWRlcltdID0gW10sIGxvYWRPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnMsIGxvYWRPcHRpb25zfSkuYmltYXAoXG4gICAgLy8gcHJldHRpZXIgaWdub3JlXG4gICAgLy8gc3VjY2Vzc1xuICAgIGdlbiA9PlxuICAgICAgbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgIGdlbixcbiAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgb25GaW5pc2g6IHJlc3VsdCA9PlxuICAgICAgICAgIHByb2Nlc3NGaWxlQ29udGVudCh7XG4gICAgICAgICAgICBjb250ZW50OiByZXN1bHQsXG4gICAgICAgICAgICBmaWxlQ2FjaGVcbiAgICAgICAgICB9KVxuICAgICAgfSksXG5cbiAgICAvLyBlcnJvclxuICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZS5uYW1lLCBlcnIpXG4gICk7XG59XG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbnRlbnQsIGZpbGVDYWNoZX0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAncHJvY2Vzc2luZy4uLid9XG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudCwgZmlsZUNhY2hlfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gbG9hZEZpbGVTdGVwU3VjY2Vzcyh7ZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsIGZpbGVDYWNoZTogcmVzdWx0fSksXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGNvbnRlbnQuZmlsZU5hbWUsIGVycilcbiAgICApXG4gICk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb2dyZXNzKHByZXZQcm9ncmVzcyA9IHt9LCBwcm9ncmVzcykge1xuICAvLyBUaGlzIGhhcHBlbnMgd2hlbiByZWNlaXZpbmcgcXVlcnkgbWV0YWRhdGEgb3Igb3RoZXIgY2FzZXMgd2UgZG9uJ3RcbiAgLy8gaGF2ZSBhbiB1cGRhdGUgZm9yIHRoZSB1c2VyLlxuICBpZiAoIXByb2dyZXNzIHx8ICFwcm9ncmVzcy5wZXJjZW50KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwZXJjZW50OiBwcm9ncmVzcy5wZXJjZW50XG4gIH07XG59XG5cbi8qKlxuICogZ2V0cyBjYWxsZWQgd2l0aCBwYXlsb2FkID0gQXN5bmNHZW5lcmF0b3I8Pz8/PlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG5leHRGaWxlQmF0Y2hVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Z2VuLCBmaWxlTmFtZSwgcHJvZ3Jlc3MsIGFjY3VtdWxhdGVkLCBvbkZpbmlzaH1cbiAgfTogVmlzU3RhdGVBY3Rpb25zLk5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczogcGFyc2VQcm9ncmVzcyhzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzW2ZpbGVOYW1lXSwgcHJvZ3Jlc3MpXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhzdGF0ZVdpdGhQcm9ncmVzcywgW1xuICAgIC4uLihnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nICYmXG4gICAgZmlsZU5hbWUuZW5kc1dpdGgoJ2Fycm93JykgJiZcbiAgICBhY2N1bXVsYXRlZD8uZGF0YT8ubGVuZ3RoID4gMFxuICAgICAgPyBbXG4gICAgICAgICAgLy8gU2tpcCBjb21wYWN0aW9uIHdoaWxlIGJhdGNoZXMgYXJlIHN0aWxsIGFycml2aW5nLiBUaGUgY29tcGxldGVkXG4gICAgICAgICAgLy8gZmlsZSBpcyBjb21wYWN0ZWQgb25jZSBpbiBwcm9jZXNzRmlsZUNvbnRlbnQuXG4gICAgICAgICAgUFJPQ0VTU19GSUxFX0RBVEEoe1xuICAgICAgICAgICAgY29udGVudDogey4uLmFjY3VtdWxhdGVkLCBza2lwQXJyb3dDb21wYWN0OiB0cnVlfSxcbiAgICAgICAgICAgIGZpbGVDYWNoZTogW11cbiAgICAgICAgICB9KS5iaW1hcChcbiAgICAgICAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZXNTdWNjZXNzKHJlc3VsdCksXG4gICAgICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICA6IFtdKSxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2hcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICApXG4gIF0pO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxvYWRpbmcgZmlsZSBlcnJvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBmaWxlTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIHVwZGF0ZSB1aSB3aXRoIGVycm9yIG1lc3NhZ2VcbiAgQ29uc29sZS53YXJuKGVycm9yKTtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGV9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBraWNrIG9mZiBuZXh0IGZpbGUgb3IgZmluaXNoXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufTtcblxuLyoqXG4gKiBXaGVuIHNlbGVjdCBkYXRhc2V0IGZvciBleHBvcnQsIGFwcGx5IGNwdSBmaWx0ZXIgdG8gc2VsZWN0ZWQgZGF0YXNldFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5Q1BVRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLkFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhcHBseSBjcHVGaWx0ZXJcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjY3UsIGlkKSA9PiBmaWx0ZXJEYXRhc2V0Q1BVKGFjY3UsIGlkKSwgc3RhdGUpO1xufTtcblxuLyoqXG4gKiBVc2VyIGlucHV0IHRvIHVwZGF0ZSB0aGUgaW5mbyBvZiB0aGUgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwSW5mb1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtYXBJbmZvOiB7XG4gICAgLi4uc3RhdGUubWFwSW5mbyxcbiAgICAuLi5hY3Rpb24uaW5mb1xuICB9XG59KTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBBbGwgbGF5ZXIgZG9tYWluIGFuZCBsYXllciBkYXRhIG9mIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0TGF5ZXJzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFzZXRzOiBEYXRhc2V0c1xuKToge3N0YXRlOiBWaXNTdGF0ZTsgbmV3TGF5ZXJzOiBMYXllcltdfSB7XG4gIGNvbnN0IGVtcHR5OiBMYXllcltdID0gW107XG4gIGNvbnN0IGRlZmF1bHRMYXllcnMgPSBPYmplY3QudmFsdWVzKGRhdGFzZXRzKS5yZWR1Y2UoKGFjY3U6IExheWVyW10sIGRhdGFzZXQpID0+IHtcbiAgICBjb25zdCBmb3VuZExheWVycyA9IGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgICByZXR1cm4gZm91bmRMYXllcnMgJiYgZm91bmRMYXllcnMubGVuZ3RoID8gYWNjdS5jb25jYXQoZm91bmRMYXllcnMpIDogYWNjdTtcbiAgfSwgZW1wdHkpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCAuLi5kZWZhdWx0TGF5ZXJzXSxcbiAgICAgIGxheWVyT3JkZXI6IFtcbiAgICAgICAgLy8gcHV0IG5ldyBsYXllcnMgb24gdG9wIG9mIG9sZCBvbmVzIGluIHJldmVyc2VcbiAgICAgICAgLi4uZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMoZGVmYXVsdExheWVycyksXG4gICAgICAgIC4uLnN0YXRlLmxheWVyT3JkZXJcbiAgICAgIF1cbiAgICB9LFxuICAgIG5ld0xheWVyczogZGVmYXVsdExheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRlZmF1bHQgdG9vbHRpcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFRvb2x0aXBzKHN0YXRlLCBkYXRhc2V0KSB7XG4gIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBmaW5kRmllbGRzVG9TaG93KHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIG1heERlZmF1bHRUb29sdGlwczogc3RhdGUubWF4RGVmYXVsdFRvb2x0aXBzXG4gIH0pO1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LFxuICAgIC4uLnRvb2x0aXBGaWVsZHNcbiAgfTtcblxuICByZXR1cm4gc2V0KFsnaW50ZXJhY3Rpb25Db25maWcnLCAndG9vbHRpcCcsICdjb25maWcnLCAnZmllbGRzVG9TaG93J10sIG1lcmdlZCwgc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUgfHwgYFVudGl0bGVkIEZpbGUgJHtpbmRleH1gO1xuICByZXR1cm4ge1xuICAgIFtmaWxlTmFtZV06IHtcbiAgICAgIC8vIHBlcmNlbnQgb2YgY3VycmVudCBmaWxlXG4gICAgICBwZXJjZW50OiAwLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtmaWxlTmFtZSwgcHJvZ3Jlc3N9KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIHBpY2tfKCdmaWxlTG9hZGluZ1Byb2dyZXNzJykocGlja18oZmlsZU5hbWUpKG1lcmdlXyhwcm9ncmVzcykpKShzdGF0ZSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgbGF5ZXIgZG9tYWlucyBmb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YTxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdXBkYXRlZEZpbHRlcj86IEZpbHRlclxuKTogUyB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0eXBlb2YgZGF0YUlkID09PSAnc3RyaW5nJyA/IFtkYXRhSWRdIDogZGF0YUlkO1xuICBjb25zdCBuZXdMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKChvbGRMYXllciwgaSkgPT4ge1xuICAgIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkICYmIGRhdGFJZHMuaW5jbHVkZXMob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGF5ZXIgZG9tYWluIGlmIGZpbHRlciBoYXMgZml4ZWQgZG9tYWluXG4gICAgICBjb25zdCBuZXdMYXllciA9XG4gICAgICAgIHVwZGF0ZWRGaWx0ZXIgJiYgdXBkYXRlZEZpbHRlci5maXhlZERvbWFpblxuICAgICAgICAgID8gb2xkTGF5ZXJcbiAgICAgICAgICA6IG9sZExheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzLCB1cGRhdGVkRmlsdGVyKTtcblxuICAgICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2ldKTtcblxuICAgICAgbmV3TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2gobGF5ZXJEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJzLnB1c2gob2xkTGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2goc3RhdGUubGF5ZXJEYXRhW2ldKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV3TGF5ZXJEYXRhXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQW5pbWF0aW9uRG9tYWluPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMpOiBTIHtcbiAgLy8gbWVyZ2UgYWxsIGFuaW1hdGFibGUgbGF5ZXIgZG9tYWluIGFuZCB1cGRhdGUgZ2xvYmFsIGNvbmZpZ1xuICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgZG9tYWluOiBudWxsLFxuICAgICAgICBpc0FuaW1hdGluZzogZmFsc2UsXG4gICAgICAgIHRpbWVTdGVwczogbnVsbCxcbiAgICAgICAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF5ZXJEb21haW5zID0gYW5pbWF0YWJsZUxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5hbmltYXRpb24uZG9tYWluIHx8IFtdKTtcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBtZXJnZWREb21haW4gPSBtZXJnZVRpbWVEb21haW5zKGxheWVyRG9tYWlucyk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKG1lcmdlZERvbWFpbik7XG5cbiAgLy8gbWVyZ2UgdGltZVN0ZXBzXG4gIGxldCBtZXJnZWRUaW1lU3RlcHM6IG51bWJlcltdIHwgbnVsbCA9IHVuaXE8bnVtYmVyPihcbiAgICBhbmltYXRhYmxlTGF5ZXJzLnJlZHVjZSgoYWNjdSwgbGF5ZXIpID0+IHtcbiAgICAgIGFjY3UucHVzaCguLi4obGF5ZXIuY29uZmlnLmFuaW1hdGlvbi50aW1lU3RlcHMgfHwgW10pKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKVxuICApLnNvcnQoKTtcblxuICBtZXJnZWRUaW1lU3RlcHMgPSBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoID8gbWVyZ2VkVGltZVN0ZXBzIDogbnVsbDtcblxuICAvLyBUT0RPOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZHVyYXRpb24gY2FsY3VsYXRpb25cbiAgY29uc3QgZHVyYXRpb24gPSBtZXJnZWRUaW1lU3RlcHNcbiAgICA/IChCQVNFX1NQRUVEICogKDEwMDAgLyBGUFMpKSAvIG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggLyAoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnNwZWVkIHx8IDEpXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGRvbWFpbjogbWVyZ2VkRG9tYWluLFxuICAgICAgZGVmYXVsdFRpbWVGb3JtYXQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRpbWVTdGVwczogbWVyZ2VkVGltZVN0ZXBzXG4gICAgfVxuICB9O1xuXG4gIC8vIHJlc2V0IGN1cnJlbnRUaW1lIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgY29uc3Qgc3luY2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycz8uZmluZChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIGFzXG4gICAgfCBUaW1lUmFuZ2VGaWx0ZXJcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvLyBpZiBzeW5jZWQgZmlsdGVyIGV4aXN0IHdlZSBuZWVkIHRvIG1lcmdlIGFuaW1hdGlvbkNvbmZpZyBhbmQgZmlsdGVyIGRvbWFpbnNcbiAgLy8gYW5kIHZhbGlkYXRlIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0aGUgbmV3IG1lcmdlZCBkb21haW5cbiAgY29uc3QgbmV3QW5pbWF0aW9uRG9tYWluID0gc3luY2VkRmlsdGVyXG4gICAgPyBtZXJnZVRpbWVEb21haW5zKFttZXJnZWREb21haW4sIHN5bmNlZEZpbHRlci5kb21haW5dKVxuICAgIDogbWVyZ2VkRG9tYWluO1xuICBjb25zdCBjdXJyZW50VGltZSA9IGlzSW5SYW5nZShzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsIG5ld0FuaW1hdGlvbkRvbWFpbilcbiAgICA/IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgIDogbmV3QW5pbWF0aW9uRG9tYWluWzBdO1xuXG4gIGlmIChjdXJyZW50VGltZSAhPT0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lKSB7XG4gICAgLy8gaWYgY3VycmVudFRpbWUgY2hhbmdlZCwgbmVlZCB0byBjYWxsIGFuaW1hdGlvblRpbWVVcGRhdGVyIHRvIHJlIGNhbGwgZm9ybWF0TGF5ZXJEYXRhXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV4dFN0YXRlLCB7dmFsdWU6IGN1cnJlbnRUaW1lfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlZGl0b3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFZGl0b3JNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bW9kZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JNb2RlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBza2V0Y2hlc0VuYWJsZWQgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzO1xuICBpZiAoXG4gICAgIXNrZXRjaGVzRW5hYmxlZCAmJlxuICAgIChtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19QT0lOVCB8fCBtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19MSU5FU1RSSU5HKVxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgbW9kZSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcbn07XG5cbi8vIGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKGZlYXR1cmUpID0+ICh7Li4uZmVhdHVyZSwgaWQ6IGZlYXR1cmUuaWR9KTtcbi8qKlxuICogVXBkYXRlIGVkaXRvciBmZWF0dXJlc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZXMgPSBbXX06IFZpc1N0YXRlQWN0aW9ucy5TZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbGFzdEZlYXR1cmUgPSBmZWF0dXJlcy5sZW5ndGggJiYgZmVhdHVyZXNbZmVhdHVyZXMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAvLyBvbmx5IHNhdmUgbm9uZSBmaWx0ZXIgZmVhdHVyZXMgdG8gZWRpdG9yXG4gICAgICBmZWF0dXJlczogZmVhdHVyZXMuZmlsdGVyKGYgPT4gIWdldEZpbHRlcklkSW5GZWF0dXJlKGYpKSxcbiAgICAgIG1vZGU6XG4gICAgICAgIGxhc3RGZWF0dXJlICYmIGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LmlzQ2xvc2VkXG4gICAgICAgICAgPyBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5zaGFwZSA9PT0gJ1JlY3RhbmdsZSdcbiAgICAgICAgICAgID8gc3RhdGUuZWRpdG9yLm1vZGVcbiAgICAgICAgICAgIDogRURJVE9SX01PREVTLkVESVRcbiAgICAgICAgICA6IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHJpZXZlIGV4aXN0aW5nIGZlYXR1cmVcbiAgY29uc3Qge3NlbGVjdGVkRmVhdHVyZX0gPSBzdGF0ZS5lZGl0b3I7XG5cbiAgLy8gSWYgbm8gZmVhdHVyZSBpcyBzZWxlY3RlZCB3ZSBjYW4gc2ltcGx5IHJldHVybiBzaW5jZSBubyBvcGVyYXRpb25zXG4gIGlmICghc2VsZWN0ZWRGZWF0dXJlKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gVE9ETzogY2hlY2sgaWYgdGhlIGZlYXR1cmUgaGFzIGNoYW5nZWRcbiAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzLmZpbmQoZiA9PiBmLmlkID09PSBzZWxlY3RlZEZlYXR1cmUuaWQpO1xuXG4gIC8vIGlmIGZlYXR1cmUgaXMgcGFydCBvZiBhIGZpbHRlclxuICBjb25zdCBmaWx0ZXJJZCA9IGZlYXR1cmUgJiYgZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCAmJiBmZWF0dXJlKSB7XG4gICAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICAgIGlmIChmZWF0dXJlLnByb3BlcnRpZXMpIGZlYXR1cmUucHJvcGVydGllcy5iYm94ID0gYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTik7XG4gICAgY29uc3QgZmVhdHVyZVZhbHVlID0gZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVySWQpO1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGZpbCA9PiBmaWwuaWQgPT09IGZpbHRlcklkKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBmZWF0dXJlVmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gZmluZEVkaXRvckZlYXR1cmUoc3RhdGU6IFZpc1N0YXRlLCBmZWF0dXJlPzogRmVhdHVyZSB8IG51bGwpOiBGZWF0dXJlIHwgbnVsbCB7XG4gIGlmICghZmVhdHVyZT8uaWQpIHtcbiAgICByZXR1cm4gZmVhdHVyZSB8fCBudWxsO1xuICB9XG4gIGlmIChzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gZmVhdHVyZS5pZCkge1xuICAgIHJldHVybiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICB9XG4gIGNvbnN0IGZyb21FZGl0b3IgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZlYXR1cmUuaWQpO1xuICBpZiAoZnJvbUVkaXRvcikge1xuICAgIHJldHVybiBmcm9tRWRpdG9yO1xuICB9XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgICBpZiAoZmlsdGVyPy52YWx1ZSkge1xuICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZlYXR1cmU7XG59XG5cbi8qKlxuICogU2V0IHVzZXItZmFjaW5nIEdlb0pTT04gcHJvcGVydGllcyBvbiBhIHNrZXRjaCBvciBwb2x5Z29uLWZpbHRlciBmZWF0dXJlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgcHJvcGVydGllc306IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgc291cmNlID0gZmluZEVkaXRvckZlYXR1cmUoc3RhdGUsIGZlYXR1cmUpO1xuICBpZiAoIXNvdXJjZT8uaWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RmVhdHVyZSA9IG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzKHNvdXJjZSwgcHJvcGVydGllcyk7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUobmV4dEZlYXR1cmUpO1xuICBjb25zdCBuZXh0RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogZmlsdGVySWRcbiAgICAgID8gc3RhdGUuZWRpdG9yLmZlYXR1cmVzXG4gICAgICA6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5tYXAoaXRlbSA9PiAoaXRlbS5pZCA9PT0gbmV4dEZlYXR1cmUuaWQgPyBuZXh0RmVhdHVyZSA6IGl0ZW0pKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6XG4gICAgICBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gbmV4dEZlYXR1cmUuaWRcbiAgICAgICAgPyBuZXh0RmVhdHVyZVxuICAgICAgICA6IHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmVcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXh0RWRpdG9yXG4gIH07XG5cbiAgaWYgKCFmaWx0ZXJJZCkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA8IDApIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUobmV4dEZlYXR1cmUsIGZpbHRlcklkKVxuICB9KTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmVhdHVyZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgc2VsZWN0aW9uQ29udGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgbGV0IHNlbGVjdGVkRmVhdHVyZSA9IGZlYXR1cmU7XG4gIGlmIChmZWF0dXJlPy5wcm9wZXJ0aWVzKSB7XG4gICAgc2VsZWN0ZWRGZWF0dXJlID0ge1xuICAgICAgLi4uZmVhdHVyZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICBiYm94OiBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZSxcbiAgICAgIHNlbGVjdGlvbkNvbnRleHRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIERlbGV0ZSBleGlzdGluZyBmZWF0dXJlIGZyb20gZmlsdGVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlfTogVmlzU3RhdGVBY3Rpb25zLkRlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZmVhdHVyZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xuXG4gIGlmIChnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSkge1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpO1xuXG4gICAgcmV0dXJuIGZpbHRlcklkeCA+IC0xID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSkgOiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIG1vZGlmeSBlZGl0b3Igb2JqZWN0XG4gIGNvbnN0IG5ld0VkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV3RWRpdG9yXG4gIH07XG59XG5cbi8qKlxuICogVG9nZ2xlIGZlYXR1cmUgYXMgbGF5ZXIgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmV9ID0gcGF5bG9hZDtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcblxuICAvLyBsZXQgbmV3RmlsdGVyID0gbnVsbDtcbiAgbGV0IGZpbHRlcklkeDtcbiAgbGV0IG5ld0xheWVySWQgPSBbbGF5ZXIuaWRdO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgLy8gSWYgcG9seWdvbiBmaWx0ZXIgYWxyZWFkeSBleGlzdHMsIHdlIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlIGN1cnJlbnQgbGF5ZXIgaXMgYWxyZWFkeSBpbmNsdWRlZFxuICBpZiAoZmlsdGVySWQpIHtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcblxuICAgIGlmICghc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdKSB7XG4gICAgICAvLyB3aGF0IGlmIGZpbHRlciBkb2Vzbid0IGV4aXN0Py4uLiBub3QgcG9zc2libGUuXG4gICAgICAvLyBiZWNhdXNlIGZlYXR1cmVzIGluIHRoZSBlZGl0b3IgaXMgcGFzc2VkIGluIGZyb20gZmlsdGVycyBhbmQgZWRpdG9ycy5cbiAgICAgIC8vIGJ1dCB3ZSB3aWxsIG1vdmUgdGhpcyBmZWF0dXJlIGJhY2sgdG8gZWRpdG9yIGp1c3QgaW4gY2FzZVxuICAgICAgY29uc3Qgbm9uZUZpbHRlckZlYXR1cmUgPSB7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgZmlsdGVySWQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgbm9uZUZpbHRlckZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbm9uZUZpbHRlckZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICAgIGNvbnN0IHtsYXllcklkID0gW119ID0gZmlsdGVyO1xuICAgIGNvbnN0IGlzTGF5ZXJJbmNsdWRlZCA9IGxheWVySWQuaW5jbHVkZXMobGF5ZXIuaWQpO1xuXG4gICAgbmV3TGF5ZXJJZCA9IGlzTGF5ZXJJbmNsdWRlZFxuICAgICAgPyAvLyBpZiBsYXllciBpcyBpbmNsdWRlZCwgcmVtb3ZlIGl0XG4gICAgICAgIGxheWVySWQuZmlsdGVyKGwgPT4gbCAhPT0gbGF5ZXIuaWQpXG4gICAgICA6IFsuLi5sYXllcklkLCBsYXllci5pZF07XG5cbiAgICAvLyBMYXN0IGxheWVyIHJlbW92ZWQ6IHR1cm4gdGhlIGZpbHRlciBwb2x5Z29uIGJhY2sgaW50byBhIHNrZXRjaFxuICAgIGlmICghbmV3TGF5ZXJJZC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNrZXRjaEZlYXR1cmUgPSB0b1NrZXRjaEZlYXR1cmUoZmVhdHVyZSk7XG4gICAgICBjb25zdCBzdGF0ZVdpdGhvdXRGaWx0ZXIgPSByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlcixcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGVXaXRob3V0RmlsdGVyLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IuZmVhdHVyZXMsIHNrZXRjaEZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogc2tldGNoRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB3ZSBoYXZlbid0IGNyZWF0ZSB0aGUgcG9seWdvbiBmaWx0ZXIsIGNyZWF0ZSBpdFxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgICAvLyBhZGQgZmVhdHVyZSwgcmVtb3ZlIGZlYXR1cmUgZnJvbSBlaWR0b3JcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgICBlZGl0b3I6IHtcbiAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogbmV3TGF5ZXJJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBseSBwb2x5Z29uIGZpbHRlciB0byBhbGwgdmlzaWJsZSBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZlYXR1cmV9ID0gcGF5bG9hZDtcblxuICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICBjb25zdCBuZXdTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWUsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCB2aXNpYmxlTGF5ZXJJZHMgPSBnZXQocGF5bG9hZCwgJ3Zpc2libGVMYXllcklkcycpO1xuICBjb25zdCBhbGxMYXllcklkcyA9IEFycmF5LmlzQXJyYXkodmlzaWJsZUxheWVySWRzKVxuICAgID8gdmlzaWJsZUxheWVySWRzXG4gICAgOiBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuaXNWaXNpYmxlKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogYWxsTGF5ZXJJZHNcbiAgfSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1uLCBtb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgc29ydE1vZGUgPSBtb2RlO1xuICBpZiAoIXNvcnRNb2RlKSB7XG4gICAgY29uc3QgY3VycmVudE1vZGUgPSBnZXQoZGF0YXNldCwgWydzb3J0Q29sdW1uJywgY29sdW1uXSk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNob3VsZCBiZSBmaXhhYmxlIGluIGEgVFMgZmlsZVxuICAgIHNvcnRNb2RlID0gY3VycmVudE1vZGVcbiAgICAgID8gT2JqZWN0LmtleXMoU09SVF9PUkRFUikuZmluZChtID0+IG0gIT09IGN1cnJlbnRNb2RlKVxuICAgICAgOiBTT1JUX09SREVSLkFTQ0VORElORztcbiAgfVxuXG4gIGNvbnN0IHNvcnRlZCA9IHNvcnREYXRhc2V0QnlDb2x1bW4oZGF0YXNldCwgY29sdW1uLCBzb3J0TW9kZSk7XG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIHNvcnRlZCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaW5UYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLlBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBwaW5UYWJsZUNvbHVtbnMoZGF0YXNldCwgY29sdW1uKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQ29weSBjb2x1bW4gY29udGVudCBhcyBzdHJpbmdzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuQ29weVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHt0eXBlfSA9IGRhdGFzZXQuZmllbGRzW2ZpZWxkSWR4XTtcbiAgY29uc3QgdGV4dCA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAocm93ID0+IHBhcnNlRmllbGRWYWx1ZShyb3cudmFsdWVBdChmaWVsZElkeCksIHR5cGUpLCB0cnVlKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICBjb3B5KHRleHQpO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgZGlzcGxheSBmb3JtYXQgZnJvbSBjb2x1bW5zIGZyb20gdXNlciBzZWxlY3Rpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmb3JtYXRzfTogVmlzU3RhdGVBY3Rpb25zLlNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzO1xuICBPYmplY3Qua2V5cyhmb3JtYXRzKS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gICAgaWYgKGZpZWxkSWR4ID49IDApIHtcbiAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXQgPSBmb3JtYXRzW2NvbHVtbl07XG4gICAgICBjb25zdCBmaWVsZCA9IG5ld0ZpZWxkc1tmaWVsZElkeF07XG4gICAgICBuZXdGaWVsZHMgPSBzd2FwXyhtZXJnZV8oe2Rpc3BsYXlGb3JtYXR9KShmaWVsZCkgYXMge2lkOiBzdHJpbmd9KShcbiAgICAgICAgbmV3RmllbGRzIGFzIHtpZDogc3RyaW5nfVtdXG4gICAgICApIGFzIEZpZWxkW107XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkcyBhcyBGaWVsZFtdfSk7XG4gIGxldCBuZXdTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIC8vIHVwZGF0ZSBjb2xvckZpZWxkIGRpc3BsYXlGb3JtYXRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdTdGF0ZS5sYXllcnMubWFwKGxheWVyID0+XG4gICAgICBsYXllci5jb25maWc/LmNvbG9yRmllbGQ/Lm5hbWUgJiYgbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZSBpbiBmb3JtYXRzXG4gICAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgY29sb3JGaWVsZDoge1xuICAgICAgICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JGaWVsZCxcbiAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdDogZm9ybWF0c1tsYXllci5jb25maWcuY29sb3JGaWVsZC5uYW1lXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogbGF5ZXJcbiAgICApXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG50eXBlIExvYWRDb2x1bW5TdGF0c1Rhc2tQYXlsb2FkID0ge1xuICBkYXRhc2V0OiBWaXNTdGF0ZVsnZGF0YXNldHMnXVtzdHJpbmddO1xuICBmaWVsZDogRmllbGQ7XG59O1xuXG5mdW5jdGlvbiBnZXRNYXBwZWRWYWx1ZShmaWx0ZXJQcm9wcz86IEZpbHRlclByb3BzIHwgbnVsbCk6IHVua25vd25bXSB8IHVuZGVmaW5lZCB7XG4gIGlmIChmaWx0ZXJQcm9wcyAmJiAnbWFwcGVkVmFsdWUnIGluIGZpbHRlclByb3BzICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyUHJvcHMubWFwcGVkVmFsdWUpKSB7XG4gICAgcmV0dXJuIGZpbHRlclByb3BzLm1hcHBlZFZhbHVlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHlpZWxkRm9yUGFpbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzKHtkYXRhc2V0LCBmaWVsZH06IExvYWRDb2x1bW5TdGF0c1Rhc2tQYXlsb2FkKSB7XG4gIC8vIFlpZWxkIHNvIHRoZSBkYXRhIHRhYmxlIGFuZCBwZXItY29sdW1uIGxvYWRpbmcgc3Bpbm5lcnMgY2FuIHBhaW50IGZpcnN0LlxuICBhd2FpdCB5aWVsZEZvclBhaW50KCk7XG4gIGNvbnN0IGZpbHRlclByb3BzID0gZmllbGQuZmlsdGVyUHJvcHMgfHwgZGF0YXNldC5nZXRDb2x1bW5GaWx0ZXJQcm9wcyhmaWVsZC5uYW1lKTtcbiAgY29uc3QgbWFwcGVkVmFsdWUgPSBnZXRNYXBwZWRWYWx1ZShmaWx0ZXJQcm9wcyk7XG4gIGNvbnN0IHZhbHVlcyA9IG1hcHBlZFZhbHVlID8/IGNvbGxlY3RDb2x1bW5WYWx1ZXMoZGF0YXNldC5kYXRhQ29udGFpbmVyLCBmaWVsZC5maWVsZElkeCk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldENvbHVtblN0YXRpc3RpY3Moe1xuICAgIHZhbHVlcyxcbiAgICBmaWVsZFR5cGU6IGZpZWxkLnR5cGVcbiAgfSk7XG5cbiAgcmV0dXJuIHtyZXN1bHQsIGZpbHRlclByb3BzfTtcbn1cblxuY29uc3QgTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoXG4gIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyxcbiAgJ0xPQURfQ09MVU1OX1NUQVRTX1RBU0snXG4pO1xuXG4vKipcbiAqIFN0YXJ0IGxvYWRpbmcgY29sdW1uIHN0YXRpc3RpY3MgZm9yIG9uZSBvciBtb3JlIGZpZWxkcy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZpZWxkTmFtZXNUb0xvYWQgPSB0b0FycmF5KGZpZWxkTmFtZSk7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZHNUb0xvYWQgPSBkYXRhc2V0Py5maWVsZHMuZmlsdGVyKGYgPT4gZmllbGROYW1lc1RvTG9hZC5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZHNUb0xvYWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGZpZWxkID0+XG4gICAgZmllbGROYW1lc1RvTG9hZC5pbmNsdWRlcyhmaWVsZC5uYW1lKSA/IHsuLi5maWVsZCwgaXNMb2FkaW5nU3RhdHM6IHRydWV9IDogZmllbGRcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcblxuICBjb25zdCB0YXNrcyA9IGZpZWxkc1RvTG9hZC5tYXAoZiA9PlxuICAgIExPQURfQ09MVU1OX1NUQVRTX1RBU0soe2RhdGFzZXQ6IG5ld0RhdGFzZXQsIGZpZWxkOiBmfSkuYmltYXAoXG4gICAgICAoe3Jlc3VsdCwgZmlsdGVyUHJvcHN9KSA9PiBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzKG5ld0RhdGFzZXQuaWQsIGYubmFtZSwgcmVzdWx0LCBmaWx0ZXJQcm9wcyksXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PiBsb2FkQ29sdW1uU3RhdHNFcnJvcihuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIGVycm9yKVxuICAgIClcbiAgKTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKG5leHRTdGF0ZSwgdGFza3MpO1xufVxuXG4vKipcbiAqIFBlcnNpc3QgbG9hZGVkIGNvbHVtbiBzdGF0aXN0aWNzIG9uIHRoZSBmaWVsZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cmVzdWx0LCBmaWx0ZXJQcm9wcywgZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlclByb3BzID0ge1xuICAgIC4uLmZpbHRlclByb3BzLFxuICAgIGNvbHVtblN0YXRzOiByZXN1bHRcbiAgfTtcbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBmaWx0ZXJQcm9wczogbmV3RmlsdGVyUHJvcHMsIGlzTG9hZGluZ1N0YXRzOiBmYWxzZX0gOiBmXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBDbGVhciBsb2FkaW5nIGZsYWcgd2hlbiBjb2x1bW4gc3RhdGlzdGljcyBmYWlsLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXJyb3IsIGRhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBDb25zb2xlLmVycm9yKGVycm9yKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZiA9PlxuICAgIGYubmFtZSA9PT0gZmllbGROYW1lID8gey4uLmYsIGlzTG9hZGluZ1N0YXRzOiBmYWxzZX0gOiBmXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICB2aXNpYmxlOiAhc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydCBlZGl0b3Igc2tldGNoIGZlYXR1cmVzIGludG8gYSBHZW9KU09OIGRhdGFzZXQvbGF5ZXIgYW5kIGNsZWFyIHRoZSBza2V0Y2hlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgX2FjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZlYXR1cmVzID0gc3RhdGUuZWRpdG9yLmZlYXR1cmVzO1xuICBpZiAoIWZlYXR1cmVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBkYXRhO1xuICB0cnkge1xuICAgIGRhdGEgPSBwcm9jZXNzR2VvanNvbihlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24oZmVhdHVyZXMpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY29udmVydCBkcmF3biBnZW9tZXRyeSB0byBhIGxheWVyOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnY29udmVydC1lZGl0b3ItZmVhdHVyZXMnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjb25zdCBjbGVhcmVkU3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbGFiZWxJZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDkwKSArIDEwO1xuXG4gIHJldHVybiB1cGRhdGVWaXNEYXRhVXBkYXRlcihjbGVhcmVkU3RhdGUsIHtcbiAgICBkYXRhc2V0czoge1xuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogYGRyYXduLWdlb21ldHJ5LSR7Z2VuZXJhdGVIYXNoSWQoNil9YCxcbiAgICAgICAgbGFiZWw6IGBEcmF3biBHZW9tZXRyeSAke2xhYmVsSWR9YFxuICAgICAgfSxcbiAgICAgIGRhdGFcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlXG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2V2ZW50LCBsYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IHtpZDogZGVja2dsTGF5ZXJJZCwgY291bnR9ID0gZXZlbnQ7XG4gIGlmICghbGF5ZXIpIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyRmlsdGVyZWRJdGVtcyBsYXllciBkb2VzbnQgZXhpc3RzYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllci5maWx0ZXJlZEl0ZW1Db3VudD8uW2RlY2tnbExheWVySWRdID09PSBjb3VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxheWVyLmZpbHRlcmVkSXRlbUNvdW50ID0ge1xuICAgIC4uLmxheWVyLmZpbHRlcmVkSXRlbUNvdW50LFxuICAgIFtkZWNrZ2xMYXllcklkXTogY291bnRcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3dhcF8obGF5ZXIpKHN0YXRlLmxheWVycylcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgV01TIGZlYXR1cmUgaW5mbyBhbmQgcGluIHRvb2x0aXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdtc0ZlYXR1cmVJbmZvVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuV01TRmVhdHVyZUluZm9BY3Rpb25cbik6IFMge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmVJbmZvLCBjb29yZGluYXRlfSA9IGFjdGlvbjtcbiAgaWYgKCFsYXllcikge1xuICAgIGNvbnNvbGUud2FybihgV01TIGZlYXR1cmUgaW5mbyBsYXllciBkb2Vzbid0IGV4aXN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgY2xpY2tlZCBvYmplY3Qgc2ltaWxhciB0byBsYXllckNsaWNrVXBkYXRlciB0byBwaW4gdGhlIHRvb2x0aXBcbiAgY29uc3QgY2xpY2tlZCA9IGZlYXR1cmVJbmZvXG4gICAgPyB7XG4gICAgICAgIHBpY2tlZDogdHJ1ZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgd21zRmVhdHVyZUluZm86IGZlYXR1cmVJbmZvXG4gICAgICAgIH0sXG4gICAgICAgIGNvb3JkaW5hdGU6IGNvb3JkaW5hdGUgfHwgWzAsIDBdLFxuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpZHg6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllci5pZCksXG4gICAgICAgICAgICBpZDogbGF5ZXIuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKVxuICB9O1xufTtcblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBoZXhUaWxlSW50ZXJ2YWwgPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVEW2ludGVydmFsSW5kZXhdO1xuICAgIGludGVydmFsID0gTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbFtoZXhUaWxlSW50ZXJ2YWxdO1xuICB9XG5cbiAgaWYgKCFpbnRlcnZhbCkge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvLyBhZGp1c3QgZmlsdGVyXG4gIGNvbnN0IHRpbWVGb3JtYXQgPSBnZXREZWZhdWx0VGltZUZvcm1hdChpbnRlcnZhbCk7XG4gIGNvbnN0IHVwZGF0ZWRQbG90VHlwZSA9IHsuLi5maWx0ZXIucGxvdFR5cGUsIGludGVydmFsLCB0aW1lRm9ybWF0fTtcbiAgY29uc3QgbmV3RmlsdGVyID0gdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlKGZpbHRlciwgdXBkYXRlZFBsb3RUeXBlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KHN0YXRlLCBuZXdGaWx0ZXIpO1xufVxuXG4vLyBGaW5kIGRhdGFJZCBmcm9tIGEgc2F2ZWQgdmlzU3RhdGUgcHJvcGVydHk6XG4vLyBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9ucywgbGF5ZXJCbGVuZGluZywgb3ZlcmxheUJsZW5kaW5nLCBzcGxpdE1hcHMsIGFuaW1hdGlvbkNvbmZpZywgZWRpdG9yXG4vLyByZXBsYWNlIGl0IHdpdGggYW5vdGhlciBkYXRhSWRcbmZ1bmN0aW9uIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2YWx1ZTogYW55LCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgcmVwbGFjZWQgPSB2YWx1ZVxuICAgICAgLm1hcCh2ID0+IGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2LCBkYXRhSWQsIGRhdGFJZFRvUmVwbGFjZSkpXG4gICAgICAuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBvdGhlcnNcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhSWQpICYmIHZhbHVlLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgLy8gZmlsdGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiB2YWx1ZS5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvUmVwbGFjZSA6IGQpKVxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUuY29uZmlnPy5kYXRhSWQgJiYgdmFsdWUuY29uZmlnPy5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnZhbHVlLmNvbmZpZyxcbiAgICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGRhdGFJZCkpIHtcbiAgICAvLyBmb3IgdmFsdWUgc2F2ZWQgYXMge1tkYXRhSWRdOiB7Li4ufX1cbiAgICByZXR1cm4ge1tkYXRhSWRUb1JlcGxhY2VdOiB2YWx1ZVtkYXRhSWRdfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBGaW5kIGRhdGFzZXRJZHMgZGVyaXZlZCBhIHNhdmVkIHZpc1N0YXRlIFByb3BlcnR5O1xuZnVuY3Rpb24gZmluZENoaWxkRGF0YXNldElkcyh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCBjaGlsZERhdGFJZHMgPSB2YWx1ZS5tYXAoZmluZENoaWxkRGF0YXNldElkcykuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIGNoaWxkRGF0YUlkcy5sZW5ndGggPyBjaGlsZERhdGFJZHMgOiBudWxsO1xuICB9XG5cbiAgLy8gY2hpbGQgZGF0YSBpZCB1c3VhbGx5IHN0b3JlcyBpbiB0aGUgZGVyaXZlZCBkYXRhc2V0IGluZm9cbiAgcmV0dXJuIHZhbHVlPy5uZXdEYXRhc2V0Py5pbmZvLmlkIHx8IG51bGw7XG59XG5cbi8vIG1vdmVkIHVubWVyZ2VkIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zXG5mdW5jdGlvbiBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCBwcm9wVmFsdWVzLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pIHtcbiAgLy8gcmVtb3ZlIHByb3AgdmFsdWUgZnJvbSBzdGF0ZVxuICAvLyBUT0RPOiBzaG91bGQgd2UgYWRkIHJlbW92ZSB1cGRhdGVyIHRvIG1lcmdlciBhcyB3ZWxsP1xuICBpZiAoIXByb3BWYWx1ZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgc3RhdGVSZW1vdmVkID1cbiAgICBwcm9wID09PSAnbGF5ZXJzJ1xuICAgICAgPyBwcm9wVmFsdWVzLnJlZHVjZSgoYWNjdSwgcHJvcFZhbHVlKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkOiBwcm9wVmFsdWUuaWR9KSwgc3RhdGUpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoc3RhdGVbcHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBbcHJvcF06IHN0YXRlW3Byb3BdLmZpbHRlcihwID0+ICFwcm9wVmFsdWVzLmZpbmQocHJvcFZhbHVlID0+IHAuaWQgPT09IHByb3BWYWx1ZS5pZCkpXG4gICAgICAgIH1cbiAgICAgIDogLy8gaWYgbm90IGFycmF5LCB3ZSB3b24ndCByZW1vdmUgaXQsIHJlbW92ZSBkYXRhc2V0IHNob3VsZCBoYW5kbGUgaXRcbiAgICAgICAgc3RhdGU7XG5cbiAgLy8gbW92ZSB0byBzdGF0ZVRvQmVNZXJnZWRcbiAgY29uc3QgdG9CZU1lcmdlZCA9IHtcbiAgICBbdG9NZXJnZVByb3BdOiBzYXZlVW5tZXJnZWRcbiAgICAgID8gLy8gY2FsbCBtZXJnZSBzYXZlVW5tZXJnZWQgbWV0aG9kXG4gICAgICAgIHNhdmVVbm1lcmdlZChzdGF0ZVJlbW92ZWQsIHByb3BWYWx1ZXMpXG4gICAgICA6IC8vIGlmIHRvTWVyZ2VQcm9wIGlzIGFyYWF5LCBhcHBlbmQgdG8gaXRcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8gWy4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sIC4uLnByb3BWYWx1ZXNdXG4gICAgICA6IC8vIHNhdmUgcHJvcFZhbHVlcyB0byB0b01lcmdlXG4gICAgICBpc09iamVjdChzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSxcbiAgICAgICAgICAuLi5wcm9wVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGVSZW1vdmVkLFxuICAgIC4uLnRvQmVNZXJnZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZURhdGFzZXRBbmREZXBzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIHJldHVybiBjb21wb3NlXzxUPihbXG4gICAgYXBwbHlfKHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUsIHtkYXRhSWQsIGRhdGFJZFRvVXNlfSksXG4gICAgYXBwbHlfKHJlbW92ZURhdGFzZXRVcGRhdGVyLCB7ZGF0YUlkfSlcbiAgXSkoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2U8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhzdGF0ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gIC8vIG1ha2UgYSBjb3B5IG9mIGxheWVyT3JkZXIsIGJlY2F1c2UgbGF5ZXIgaWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgYnkgY2FsbGluZyByZW1vdmVMYXllclVwZGF0ZXJcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIC8vIHByZXNlcnZlIGRhdGFzZXQgb3JkZXJcbiAgbmV4dFN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyID0gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpLm1hcChkID0+XG4gICAgZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkXG4gICk7XG5cbiAgLy8gcHJlc2VydmVMYXllck9yZGVyXG4gIGlmIChuZXh0U3RhdGUubGF5ZXJUb0JlTWVyZ2VkPy5sZW5ndGgpIHtcbiAgICAvLyBjb3B5IHNwbGl0IG1hcHMgdG8gYmUgbWVyZ2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzZXQgaW4gcmVtb3ZlIGxheWVyXG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQgPSBzZXJpYWxpemVkU3RhdGU/LnNwbGl0TWFwcyA/PyBbXTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcm9wVmFsdWUubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVwbGFjZWRTdGF0ZTtcbiAgICB9LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUoXG4gIHN0YXRlLFxuICByZXBsYWNlZEl0ZW0sXG4gIHtwcm9wLCB0b01lcmdlUHJvcCwgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWR9XG4pIHtcbiAgLy8gcHJvcCBpcyBkZXBlbmRzIG9uIHRoZSBkYXRhc2V0IHRvIGJlIHJlcGxhY2VkXG4gIC8vIHJlbW92ZSBwcm9wIGZyb20gc3RhdGUsIGFuZCBtb3ZlIGl0IHRvIHRvQmVNZXJnZWRcbiAgbGV0IG5leHRTdGF0ZSA9IG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHJlcGxhY2VkSXRlbSwge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KTtcbiAgY29uc3QgY2hpbGREYXRhSWRzID0gZ2V0Q2hpbGREYXRhc2V0SWRzPy4ocmVwbGFjZWRJdGVtKSB8fCBmaW5kQ2hpbGREYXRhc2V0SWRzKHJlcGxhY2VkSXRlbSk7XG5cbiAgaWYgKGNoaWxkRGF0YUlkcykge1xuICAgIG5leHRTdGF0ZSA9IHRvQXJyYXkoY2hpbGREYXRhSWRzKS5yZWR1Y2UoKGFjY3UsIGNoaWxkRGF0YUlkKSA9PiB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgY2hpbGQgZGF0YXNldCBpZCxcbiAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIG1vdmUgb3V0IG9mIHN0YXRlIGFuZCBtZXJnZSBiYWNrIGluXG4gICAgICByZXR1cm4gcmVwbGFjZURhdGFzZXRBbmREZXBzKGFjY3UsIGNoaWxkRGF0YUlkLCBjaGlsZERhdGFJZCk7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxnQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sSUFBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVEsS0FBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsS0FBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFB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
5100
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdGFza3MyIiwiX2FjdGlvbnMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX2xheWVycyIsIl9jb21wb3NlckhlbHBlcnMiLCJfbWVyZ2VySGFuZGxlciIsIl92aXNTdGF0ZU1lcmdlciIsIl9zY2hlbWFzIiwiX3Byb2Nlc3NvcnMiLCJfdGFibGUiLCJfaW50ZXJhY3Rpb25VdGlscyIsIl9sYXllclV0aWxzIiwiX2VmZmVjdHMiLCJfZGF0YVV0aWxzIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImEiLCJ1IiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkaXNhYmxlU3RhY2tDYXB0dXJpbmciLCJ2aXNTdGF0ZVVwZGF0ZXJzIiwiZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnIiwiZXhwb3J0cyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJDT01QQVJFX1RZUEVTIiwiQUJTT0xVVEUiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwibGltaXRTZWFyY2giLCJicnVzaCIsInNpemUiLCJjb29yZGluYXRlIiwiREVGQVVMVF9BTklNQVRJT05fQ09ORklHIiwiZG9tYWluIiwiY3VycmVudFRpbWUiLCJzcGVlZCIsImlzQW5pbWF0aW5nIiwidGltZVN0ZXBzIiwidGltZUZvcm1hdCIsInRpbWV6b25lIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJoaWRlQ29udHJvbCIsImR1cmF0aW9uIiwiREVGQVVMVF9FRElUT1IiLCJtb2RlIiwiRURJVE9SX01PREVTIiwiRFJBV19QT0xZR09OIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJ2aXNpYmxlIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJtYXBJbmZvIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImxheWVycyIsImxheWVyRGF0YSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXIiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsInVuZGVmaW5lZCIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbnNUb0JlTWVyZ2VkIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiVGFzayIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIm1hcCIsImx5ciIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJpc1Zpc2libGUiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImlzRXF1YWwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJwYXJzZUxheWVyQ29uZmlnIiwib2xkTGF5ZXIiLCJmaW5kIiwibCIsImRhdGFzZXQiLCJkYXRhSWQiLCJuZXdMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIm5leHRTdGF0ZSIsInR5cGUiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4IiwibGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsImxheWVyVHlwZUNoYW5nZSIsIm5ld0xheWVySWQiLCJhcHBseUxheWVyQ29uZmlnIiwic2VyaWFsaXplZE9sZExheWVyIiwic2VyaWFsaXplTGF5ZXIiLCJzZXJpYWxpemVkTmV3TGF5ZXIiLCJjaGFuZ2VkIiwidmlzQ29uZmlnIiwibGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJ2aXN1YWxDaGFubmVscyIsImNoYW5uZWxOYW1lIiwiY2hhbm5lbCIsImNoYW5uZWxQcm9wTmFtZXMiLCJwcm9wIiwic29tZSIsImxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIiLCJsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UiLCJwaWNrIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJlcnIiLCJsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllckNvbmZpZ0NoYW5nZSIsInVwZGF0ZWxheWVyVmlzaWJpbHR5IiwiZmlsdGVySW5kZXgiLCJmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUiLCJpc0xheWVyQW5pbWF0YWJsZSIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyIiwiZW5hYmxlIiwiZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMiLCJwcm9wcyIsIm5ld0NvbmZpZyIsIl9hY3Rpb24kbmV3Q29uZmlnIiwicmVzdENvbmZpZyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJzdGF0ZVdpdGhEYXRhSWQiLCJsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIiLCJuZXh0TGF5ZXIiLCJ1cGRhdGVMYXllckNvbmZpZyIsInNob3VsZENhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsInVwZGF0ZUxheWVyRGF0YVJlc3VsdCIsImNhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlciIsIl9jYWxjdWxhdGVMYXllckRhdGEiLCJsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyIiwibGF5ZXJJZCIsInNwbGl0TWFwSWQiLCJtYXBJbmRleCIsInNtIiwidG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSIsImxheWVyU2V0SXNWYWxpZFVwZGF0ZXIiLCJpc1ZhbGlkIiwibGF5ZXJUb1VwZGF0ZSIsIm5ld0RhdGEiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMiIsImFkZE9yUmVtb3ZlVGV4dExhYmVscyIsIm5ld0ZpZWxkcyIsInRleHRMYWJlbCIsImRlZmF1bHRUZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJuZXdUZXh0TGFiZWwiLCJjdXJyZW50RmllbGRzIiwidGwiLCJmaWVsZCIsImFkZEZpZWxkcyIsImluY2x1ZGVzIiwiZGVsZXRlRmllbGRzIiwiZmQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiYWYiLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm5ld1R5cGUiLCJvbGRJZCIsIkNvbnNvbGUiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwidXBkYXRlZFN0YXRlIiwidmlzdWFsQ2hhbm5lbCIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJlZGl0Qm91bmRzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTYiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwiX3JlZjQiLCJyZWR1Y2UiLCJhY2N1Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJzZXRGaWx0ZXJVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlciIsIl9yZWY1IiwiYW5pbWF0aW9uV2luZG93IiwibmV3RmlsdGVyIiwic3dhcF8iLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwic2V0RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsInRvQXJyYXkiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsInYiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ1bmlxIiwiZmlsdGVyV2l0aFBMb3QiLCJ1cGRhdGVGaWx0ZXJQbG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiZ2V0RGVmYXVsdEZpbHRlciIsInJlbW92ZUZpbHRlclBsb3QiLCJfaSIsIl9hcnIiLCJuZXh0VmFsIiwiZG9tYWluU3RlcHMiLCJtZXJnZUZpbHRlckRvbWFpbiIsIm5leHRGaWx0ZXIiLCJzdGVwIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImRhdGFzZXRJZHMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsIm9sZERhdGFJZCIsImRhdGFzZXRJZCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsInNldEZpbHRlckdwdU1vZGUiLCJhc3NpZ25HcHVDaGFubmVsIiwibGF5ZXJJZERpZmZlcmVuY2UiLCJ4b3IiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwic2V0RmlsdGVyUGxvdFVwZGF0ZXIiLCJfcmVmNiIsIm5ld1Byb3AiLCJwaWNrXyIsIm1lcmdlXyIsInBsb3RUeXBlIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJpc1NpZGVGaWx0ZXIiLCJhcHBseUZpbHRlckNvbmZpZyIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwiZ2V0TmV3TGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVySWRzVG9SZW1vdmUiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImFycmF5TW92ZSIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJnZW5lcmF0ZUhhc2hJZCIsIkxBWUVSX0lEX0xFTkdUSCIsInBhcmVudEdyb3VwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJhcnJheUluc2VydCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiZWZmZWN0IiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwibmV3RWZmZWN0IiwiY3JlYXRlRWZmZWN0Iiwic2V0UHJvcHMiLCJmaXhFZmZlY3RPcmRlciIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9jb25maWckaWQiLCJfY29uZmlnJGlzVmlzaWJsZSIsIl9jb25maWckYXV0b1NpemUiLCJfY29uZmlnJGF1dG9TaXplWSIsIl9jb25maWckYW5jaG9yUG9pbnQiLCJfY29uZmlnJGxhYmVsIiwiX2NvbmZpZyRsaW5lQ29sb3IiLCJfY29uZmlnJGxpbmVXaWR0aCIsIl9jb25maWckdGV4dFdpZHRoIiwiX2NvbmZpZyR0ZXh0SGVpZ2h0IiwiX2NvbmZpZyR0ZXh0VmVydGljYWxBIiwiX2FybUxlbmd0aCIsIl9hbmdsZSIsIl9hcm1MZW5ndGgyIiwiX2FuZ2xlMiIsIl9hcm1MZW5ndGgzIiwiX2FuZ2xlMyIsIl9yYWRpdXNJbk1ldGVycyIsImtpbmQiLCJJTklUSUFMX0FOTk9UQVRJT05fS0lORCIsImJhc2UiLCJhdXRvU2l6ZSIsImF1dG9TaXplWSIsImFuY2hvclBvaW50IiwibGluZUNvbG9yIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJsaW5lV2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCIsInRleHRXaWR0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwidGV4dEhlaWdodCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCIsInRleHRWZXJ0aWNhbEFsaWduIiwiQW5ub3RhdGlvbktpbmQiLCJQT0lOVCIsImFybUxlbmd0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RIIiwiYW5nbGUiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJBUlJPVyIsIkNJUkNMRSIsInJhZGl1c0luTWV0ZXJzIiwiVEVYVCIsImFkZEFubm90YXRpb25VcGRhdGVyIiwibmV3QW5ub3RhdGlvbiIsInJlbW92ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjEzIiwidXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTQiLCJuZXh0QW5ub3RhdGlvbiIsIm5ld0Fubm90YXRpb25zIiwiZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTUiLCJjbG9uZURlZXAiLCJzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE2IiwiaXNFZGl0aW5nVGV4dCIsInJlbW92ZURhdGFzZXRVcGRhdGVyIiwiZGF0YXNldEtleSIsIl9zdGF0ZSRkYXRhc2V0cyIsIm5ld0RhdGFzZXRzIiwibGF5ZXJzVG9SZW1vdmUiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiaW5kZXhPZiIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMTciLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYxOCIsIl9yZWYxOCRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYxOCRwYXlsb2FkJGNvbmZpZyIsIl9yZWYxOCRwYXlsb2FkJG9wdGlvbiIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VyIiwiaXNWYWxpZE1lcmdlciIsImhhc1Byb3BzVG9NZXJnZSIsIm1lcmdlIiwiZ2V0UHJvcFZhbHVlVG9NZXJnZXIiLCJ0b01lcmdlUHJvcCIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJrIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjE5IiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMjAiLCJoYXNUYWJ1bGFyRGF0YXNldERhdGEiLCJkYXRhIiwiX2RhdGEkcm93cyIsIl9kYXRhJGNvbHMiLCJCb29sZWFuIiwicm93cyIsImNvbHMiLCJhcnJvd1RhYmxlIiwibmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZSIsIl9kYXRhc2V0JGluZm8iLCJfZGF0YXNldCRtZXRhZGF0YSIsIkRhdGFzZXRUeXBlIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJfZGF0YXNldCRtZXRhZGF0YTciLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTgiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYWJydXB0IiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwiZm9ybWF0IiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2UiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJfcmVmMjEiLCJfY2FsbGVlIiwibWVzc2FnZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJfeDIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwiY2hhaW4iLCJoeWRyYXRlZCIsInRhc2siLCJwYXRjaERhdGFzZXRNZXRhZGF0YSIsInBhdGNoIiwiY29weVRhYmxlQW5kVXBkYXRlIiwicmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl94MyIsIl9yZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX2NhbGxlZTMiLCJfcmVmMjIiLCJvblByb2dyZXNzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiYXJnIiwiUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyIsInJlZnJlc2hEYXRhc2V0VXBkYXRlciIsIl9yZWYyMyIsIl9kYXRhc2V0JG1ldGFkYXRhMiIsIl9kYXRhc2V0JG1ldGFkYXRhMyIsIm5leHREYXRhc2V0IiwicmVmcmVzaEVycm9yIiwicmVmcmVzaFByb2dyZXNzIiwid2l0aFRhc2siLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50IiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsIk1hdGgiLCJyb3VuZCIsInBlcmNlbnQiLCJiaW1hcCIsInJlZnJlc2hEYXRhc2V0U3VjY2VzcyIsInJlZnJlc2hEYXRhc2V0RXJyb3IiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlciIsIl9yZWYyNCIsIl9kYXRhc2V0JG1ldGFkYXRhNCIsIl9kYXRhc2V0JG1ldGFkYXRhNSIsIm5leHRQZXJjZW50IiwibWF4IiwibWluIiwiZmllbGROYW1lc0VxdWFsIiwiY3VycmVudCIsImluY29taW5nIiwiZXZlcnkiLCJyZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2UiLCJuZXh0TGF5ZXJzIiwiZHJvcHBlZExheWVycyIsInJlYm91bmQiLCJuZXh0TGF5ZXJPcmRlciIsIm5leHRTcGxpdE1hcHMiLCJuZXh0TGF5ZXJEYXRhIiwib2xkSWR4IiwiZmlsdGVyc0ZvckRhdGFzZXQiLCJvdGhlckZpbHRlcnMiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsInVwZGF0ZWREYXRhc2V0cyIsIm5leHRGaWx0ZXJzIiwicmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9yZWYyNSIsIl9yZXN1bHQkZGF0YSIsIm1ldGFkYXRhUGF0Y2giLCJzY2hlbWFVbmNoYW5nZWQiLCJub3RNb2RpZmllZCIsInVwZGF0ZSIsInJlZnJlc2hlZCIsInJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhIiwiaXNEYXRhc2V0Um93TGlzdCIsImlzUGxhaW5PYmplY3QiLCJ0b0FycmF5Um93Iiwicm93IiwicmVjb3JkIiwibm9ybWFsaXplRGF0YXNldFJvd3MiLCJsaXN0Iiwibm9ybWFsaXplZCIsImFycmF5Um93IiwiYWRkVG9EYXRhc2V0VXBkYXRlciIsIl9yZWYyNiIsImFwcGxpZWQiLCJ1cHNlcnRCeSIsInVwc2VydFJvd3MiLCJhcHBlbmRSb3dzIiwicmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyIiwiX3JlZjI3Iiwicm93SW5kZXhlcyIsImJ5RmllbGQiLCJpbmRleGVzIiwiZmluZFJvd0luZGV4ZXNCeUZpZWxkVmFsdWVzIiwicmVtb3ZlUm93cyIsInJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyIiwiX3JlZjI4IiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJjcmVhdGVEYXRhc2V0VGFza3MiLCJub3RpZmljYXRpb25UYXNrcyIsIl9yZWYyOSIsImRhdGFzZXRJbmRleCIsIl9yZWYyOSRpbmZvIiwicmVzdCIsImFkZE5vdGlmaWNhdGlvbiIsImVycm9yTm90aWZpY2F0aW9uIiwiZGF0YXNldHNBbGxTZXR0bGVkVGFzayIsImFsbFNldHRsZWQiLCJyZXN1bHRzIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MiLCJhZGRUb01hcE9wdGlvbnMiLCJzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciIsInBheWxvYWRfIiwiY2hhbmdlIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX2FjdGlvbiRwYXlsb2FkIiwibmV3RGF0YUVudHJpZXMiLCJzdGF0dXMiLCJBQ1RJT05fVEFTSyIsInJlYXNvbiIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwibGF5ZXJNZXJnZXJzIiwibSIsIndhaXRGb3JMYXllckRhdGEiLCJkYXRhc2V0TWVyZ2VycyIsInBvc3RNZXJnZXJQYXlsb2FkIiwiYXBwbHlNZXJnZXJzVXBkYXRlciIsIm1lcmdlU3RhdGVSZXN1bHQiLCJtZXJnZVN0YXRlRnJvbU1lcmdlcnMiLCJhbGxNZXJnZWQiLCJwb3N0TWVyZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMiLCJsYXllclZpc0NvbmZpZyIsIl90eXBlb2YyIiwicG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YSIsIl9sYXllciRjb25maWciLCJMQVlFUl9UWVBFUyIsImdlb2pzb24iLCJjb2x1bW5Nb2RlIiwiZkRhdGFJZCIsImRhdGFzZXRGaWx0ZXJlZCIsImRhdGFFbXB0eSIsIm5ld0xheWVycyIsImF1dG9DcmVhdGVMYXllcnMiLCJhZGREZWZhdWx0TGF5ZXJzIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwidG9vbHRpcEZpZWxkcyIsImF1dG9DcmVhdGVUb29sdGlwcyIsImFkZERlZmF1bHRUb29sdGlwcyIsInBvbHlnb25GaWx0ZXJzIiwicG9seWdvbiIsInBvbHlnb25NZXRhRGF0YUlkcyIsIl9mJGxheWVySWQiLCJjZW50ZXJNYXAiLCJib3VuZHMiLCJmaW5kTWFwQm91bmRzIiwicGFkZGluZyIsImZpdEJvdW5kc1Rhc2siLCJmaXRNYXBCb3VuZHMiLCJyZW5hbWVEYXRhc2V0VXBkYXRlciIsIkFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMiLCJ2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyIsInZhbGlkYXRlZFByb3BzIiwiZW50cmllcyIsIl9lbnRyeSIsIl9zbGljZWRUb0FycmF5MiIsImlzUmdiQ29sb3IiLCJkZWVwbWVyZ2UiLCJleGlzdGluZyIsInJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYSIsInJlbmFtZXMiLCJuZXdUYWJsZSIsIl9sYXllciRjb25maWckdGV4dExhYiIsImNvbmZpZ1BhdGNoIiwiY29sdW1uc1BhdGNoIiwiY29sdW1uc0NoYW5nZWQiLCJjb2x1bW5zIiwiX3JlZjMwIiwiX3JlZjMxIiwiY2tleSIsImNvbCIsIl9yZWYzMiIsImZpZWxkQ29uZmlnIiwibGF5ZXJDb3B5IiwiYXNzaWduIiwiY3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJoYXNBbGxDb2x1bW5zIiwidXBkYXRlRGF0YXNldFVwZGF0ZXIiLCJfaW50ZXJhY3Rpb25Db25maWcyIiwiX3Rvb2x0aXAkY29uZmlnIiwiX2FjdGlvbiRyZW5hbWVzIiwidXBkYXRlU2NoZW1hIiwiZmlsdGVyZWRJZHhDUFUiLCJhbGxJbmRleGVzIiwiZmlsdGVyUmVjb3JkQ1BVIiwic29ydENvbHVtbiIsInNvcnRPcmRlciIsInBpbm5lZENvbHVtbnMiLCJfcmVuYW1lcyRuYW1lIiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJuZXdGaWVsZHNCeU5hbWUiLCJTZXQiLCJfcmVuYW1lcyRvbGROYW1lIiwiX3VwZGF0ZWQkeUF4aXMiLCJ2aSIsIm9sZE5hbWUiLCJuZXdOYW1lIiwiZmllbGRJZHgiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUyIiwidXBkYXRlZCIsImZpbHRlclRhYmxlIiwicmVjb25jaWxlZCIsIm5leHRGaWVsZHNUb1Nob3ciLCJmbGF0TWFwIiwiX3JlbmFtZXMkZiRuYW1lIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibG9hZEZpbGVzVXBkYXRlciIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsIm9uRmluaXNoIiwibG9hZEZpbGVzU3VjY2VzcyIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwiZmlsZUNhY2hlIiwiZmlsZXNUb0xvYWQiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsIl9zdGF0ZSRmaWxlTG9hZGluZyIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheTIiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiTE9BRF9GSUxFX1RBU0siLCJnZW4iLCJuZXh0RmlsZUJhdGNoIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiY29udGVudCIsImxvYWRGaWxlc0VyciIsInByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQyIiwiUFJPQ0VTU19GSUxFX0RBVEEiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiX3JlZjMzIiwiX2FjY3VtdWxhdGVkJGRhdGEiLCJfcmVmMzMkcGF5bG9hZCIsImFjY3VtdWxhdGVkIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJ1c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIlVOV1JBUF9UQVNLIiwiX3JlZjM0IiwibG9hZEZpbGVzRXJyVXBkYXRlciIsIl9yZWYzNSIsIl9zdGF0ZSRmaWxlTG9hZGluZzIiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmMzYiLCJkYXRhSWRzIiwiZmlsdGVyRGF0YXNldENQVSIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJmaW5kRmllbGRzVG9TaG93IiwibWVyZ2VkIiwiX3JlZjM4IiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlVGltZURvbWFpbnMiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJtZXJnZWRUaW1lU3RlcHMiLCJzb3J0IiwiQkFTRV9TUEVFRCIsIkZQUyIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsImlzSW5SYW5nZSIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjM5Iiwic2tldGNoZXNFbmFibGVkIiwiZW5hYmxlRHJhd09uTWFwU2tldGNoZXMiLCJEUkFXX1BPSU5UIiwiRFJBV19MSU5FU1RSSU5HIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjQwIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWY0MCRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImJib3giLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjQxIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsIm5leHRGZWF0dXJlIiwibWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMiLCJuZXh0RWRpdG9yIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWY0MiIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWY0MyIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsInNrZXRjaEZlYXR1cmUiLCJ0b1NrZXRjaEZlYXR1cmUiLCJzdGF0ZVdpdGhvdXRGaWx0ZXIiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlciIsInZpc2libGVMYXllcklkcyIsImFsbExheWVySWRzIiwic29ydFRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0NCIsImNvbHVtbiIsInNvcnRNb2RlIiwiY3VycmVudE1vZGUiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwic29ydGVkIiwic29ydERhdGFzZXRCeUNvbHVtbiIsInBpblRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0NSIsInBpblRhYmxlQ29sdW1ucyIsImNvcHlUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNDYiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInBhcnNlRmllbGRWYWx1ZSIsInZhbHVlQXQiLCJqb2luIiwiY29weSIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjQ3IiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnMiIsImNvbG9yRmllbGQiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjQ4IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJjb2xsZWN0Q29sdW1uVmFsdWVzIiwiZ2V0Q29sdW1uU3RhdGlzdGljcyIsImZpZWxkVHlwZSIsIkxPQURfQ09MVU1OX1NUQVRTX1RBU0siLCJsb2FkQ29sdW1uU3RhdHNVcGRhdGVyIiwiX3JlZjQ5IiwiZmllbGROYW1lIiwiZmllbGROYW1lc1RvTG9hZCIsImZpZWxkc1RvTG9hZCIsImlzTG9hZGluZ1N0YXRzIiwidGFza3MiLCJfcmVmNTAiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzIiwibG9hZENvbHVtblN0YXRzRXJyb3IiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlciIsIl9yZWY1MSIsIm5ld0ZpbHRlclByb3BzIiwiY29sdW1uU3RhdHMiLCJsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIiLCJfcmVmNTIiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsImNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyIiwiX2FjdGlvbiIsInByb2Nlc3NHZW9qc29uIiwiZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uIiwiY2xlYXJlZFN0YXRlIiwibGFiZWxJZCIsImZsb29yIiwicmFuZG9tIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNTMiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjU0IiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJ3bXNGZWF0dXJlSW5mb1VwZGF0ZXIiLCJmZWF0dXJlSW5mbyIsImNvbnNvbGUiLCJvYmplY3QiLCJ3bXNGZWF0dXJlSW5mbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbzIiLCJfYWN0aW9uJGVuYWJsZSIsImludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyIiwibmV3RmlsdGVyRG9tYWluIiwiQU5JTUFUSU9OX1dJTkRPVyIsImludGVydmFsIiwiYWRqdXN0VGltZUZpbHRlckludGVydmFsIiwibmV3RmlsdGVyVmFsdWUiLCJzeW5jVGltZWxpbmVNb2RlIiwiU1lOQ19USU1FTElORV9NT0RFUyIsImVuZCIsInZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUiLCJfcmVmNTUiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJzbmFwVG9NYXJrcyIsImZyZWUiLCJfZmlsdGVyJHN5bmNUaW1lbGluZU0iLCJuZXdNb2RlIiwic3RhcnQiLCJpbnRlcnZhbEluZGV4IiwiY3VycmVudEluZGV4IiwibWV0YSIsInRhcmdldFRpbWVJbnRlcnZhbCIsIm5ld0luZGV4IiwiVElNRV9JTlRFUlZBTFNfT1JERVJFRCIsImhleFRpbGVJbnRlcnZhbCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsInVwZGF0ZWRQbG90VHlwZSIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImlzT2JqZWN0IiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNTciLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiY29tcG9zZV8iLCJhcHBseV8iLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiX3NlcmlhbGl6ZWRTdGF0ZSRzcGxpIiwiX3JlZjU4IiwiYWNjdVN0YXRlIiwiX3JlZjU5IiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIiLCJtZXJnZXJPcHRpb25zIiwicmVwbGFjZWRJdGVtIiwicmVwbGFjZVByb3BWYWx1ZUluU3RhdGUiLCJfcmVmNjAiLCJjaGlsZERhdGFJZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtiYm94fSBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCB0eXBlIHtBbGxHZW9KU09OfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvZ2V0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvcGljayc7XG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCB4b3IgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQveG9yJztcbmltcG9ydCBUYXNrLCB7ZGlzYWJsZVN0YWNrQ2FwdHVyaW5nLCB3aXRoVGFza30gZnJvbSAncmVhY3QtcGFsbS90YXNrcyc7XG4vLyBUYXNrc1xuaW1wb3J0IHtcbiAgREVMQVlfVEFTSyxcbiAgQUNUSU9OX1RBU0ssXG4gIExPQURfRklMRV9UQVNLLFxuICBQUk9DRVNTX0ZJTEVfREFUQSxcbiAgVU5XUkFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGROb3RpZmljYXRpb24sXG4gIEFjdGlvblR5cGVzLFxuICBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFZpc1N0YXRlQWN0aW9ucyxcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MsXG4gIGxheWVyQ29uZmlnQ2hhbmdlLFxuICBsYXllclR5cGVDaGFuZ2UsXG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gIGxvYWRGaWxlU3RlcFN1Y2Nlc3MsXG4gIGxvYWRGaWxlc0VycixcbiAgbG9hZEZpbGVzU3VjY2VzcyxcbiAgbG9hZE5leHRGaWxlLFxuICBuZXh0RmlsZUJhdGNoLFxuICBzZXRGaWx0ZXIsXG4gIHByb2Nlc3NGaWxlQ29udGVudCxcbiAgZml0Qm91bmRzIGFzIGZpdE1hcEJvdW5kcyxcbiAgdG9nZ2xlTGF5ZXJGb3JNYXAsXG4gIGFwcGx5RmlsdGVyQ29uZmlnLFxuICBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZCxcbiAgbG9hZENvbHVtblN0YXRzU3VjY2VzcyxcbiAgbG9hZENvbHVtblN0YXRzRXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0U3VjY2VzcyxcbiAgcmVmcmVzaERhdGFzZXRFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRQcm9ncmVzc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgYXJyYXlJbnNlcnQsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbixcbiAgbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMsXG4gIHRvU2tldGNoRmVhdHVyZSxcbiAgZmVhdHVyZVRvRmlsdGVyVmFsdWUsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIGdlbmVyYXRlUG9seWdvbkZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlcixcbiAgZ2V0RmlsdGVySWRJbkZlYXR1cmUsXG4gIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcixcbiAgaXNJblJhbmdlLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZ2JDb2xvcixcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICByZW1vdmVMYXllckZyb21TcGxpdE1hcHMsXG4gIHNldCxcbiAgdXBkYXRlRmlsdGVyUGxvdCxcbiAgcmVtb3ZlRmlsdGVyUGxvdCxcbiAgaXNMYXllckFuaW1hdGFibGUsXG4gIGlzU2lkZUZpbHRlcixcbiAgZ2V0QXBwbGljYXRpb25Db25maWcsXG4gIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheSwgYXJyYXlNb3ZlfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZQUyxcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIERJU1RBTkNFX0ZPR19UWVBFLFxuICBTVVJGQUNFX0ZPR19UWVBFLFxuICBNQVhfREVGQVVMVF9UT09MVElQUyxcbiAgUExPVF9UWVBFUyxcbiAgU09SVF9PUkRFUixcbiAgU1lOQ19USU1FTElORV9NT0RFUyxcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIFNDQUxFX1RZUEVTLFxuICBJTklUSUFMX0FOTk9UQVRJT05fS0lORCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBBbm5vdGF0aW9uS2luZCxcbiAgRGF0YXNldFR5cGUsXG4gIGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyxcbiAgZ2V0UmVtb3RlU291cmNlRm9ybWF0XG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TEFZRVJfSURfTEVOR1RILCBMYXllciwgTGF5ZXJDbGFzc2VzfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBhcHBseV8sXG4gIGNvbXBvc2VfLFxuICBmaWx0ZXJPdXRCeUlkLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQsIHByb2Nlc3NHZW9qc29ufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEZlYXR1cmUsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbCxcbiAgUHJvdG9EYXRhc2V0XG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtMb2FkZXJ9IGZyb20gJ0Bsb2FkZXJzLmdsL2xvYWRlci11dGlscyc7XG5cbmltcG9ydCB7XG4gIERhdGFzZXRzLFxuICBLZXBsZXJUYWJsZSxcbiAgRmlsdGVyUHJvcHMsXG4gIGFzc2lnbkdwdUNoYW5uZWwsXG4gIGNvcHlUYWJsZUFuZFVwZGF0ZSxcbiAgY3JlYXRlTmV3RGF0YUVudHJ5LFxuICBwaW5UYWJsZUNvbHVtbnMsXG4gIHNldEZpbHRlckdwdU1vZGUsXG4gIHNvcnREYXRhc2V0QnlDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge2ZpbmRGaWVsZHNUb1Nob3d9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgY2FsY3VsYXRlTGF5ZXJEYXRhLFxuICBmaW5kRGVmYXVsdExheWVyLFxuICBnZXRMYXllck9yZGVyRnJvbUxheWVycyxcbiAgbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzLFxuICBnZXROZXdMYXllckdyb3VwLFxuICBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIsXG4gIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcixcbiAgZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyLFxuICBmaW5kUGFyZW50R3JvdXBGb3JMYXllcixcbiAgZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkLFxuICB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyLFxuICBnZXRGbGF0TGF5ZXJPcmRlcixcbiAgcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXJcbn0gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGZpeEVmZmVjdE9yZGVyLFxuICBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyxcbiAgZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyxcbiAgbWVyZ2VUaW1lRG9tYWlucyxcbiAgYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyxcbiAgdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlLFxuICBnZXREZWZhdWx0VGltZUZvcm1hdCxcbiAgTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCxcbiAgVElNRV9JTlRFUlZBTFNfT1JERVJFRCxcbiAgbWVyZ2VGaWx0ZXJEb21haW4sXG4gIGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSxcbiAgY29sbGVjdENvbHVtblZhbHVlcyxcbiAgZ2V0Q29sdW1uU3RhdGlzdGljc1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtQYXlsb2FkQWN0aW9ufSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuaW1wb3J0IHtmaW5kTWFwQm91bmRzfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuXG4vLyByZWFjdC1wYWxtXG4vLyBkaXNhYmxlIGNhcHR1cmUgZXhjZXB0aW9uIGZvciByZWFjdC1wYWxtIGNhbGwgdG8gd2l0aFRhc2tcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIGNvbXBhcmVNb2RlOiBmYWxzZSxcbiAgICAgIGNvbXBhcmVUeXBlOiBDT01QQVJFX1RZUEVTLkFCU09MVVRFXG4gICAgfVxuICB9LFxuICBnZW9jb2Rlcjoge1xuICAgIGlkOiAnZ2VvY29kZXInLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmdlb2NvZGVyJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbCxcbiAgICBjb25maWc6IHtcbiAgICAgIGxpbWl0U2VhcmNoOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAwLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG4gIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcblxuICAvLyBlZmZlY3RzXG4gIGVmZmVjdHM6IFtdLFxuICBlZmZlY3RPcmRlcjogW10sXG5cbiAgLy8gYW5ub3RhdGlvbnNcbiAgYW5ub3RhdGlvbnM6IFtdLFxuICBhbm5vdGF0aW9uc1RvQmVNZXJnZWQ6IFtdLFxuICBzZWxlY3RlZEFubm90YXRpb25JZDogbnVsbCxcbiAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlLFxuXG4gIGludGVyYWN0aW9uQ29uZmlnOiBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWcsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDoge30sXG5cbiAgbGF5ZXJCbGVuZGluZzogJ25vcm1hbCcsXG4gIG92ZXJsYXlCbGVuZGluZzogJ25vcm1hbCcsXG4gIGhvdmVySW5mbzogdW5kZWZpbmVkLFxuICBjbGlja2VkOiB1bmRlZmluZWQsXG4gIG1vdXNlUG9zOiB7fSxcbiAgbWF4RGVmYXVsdFRvb2x0aXBzOiBNQVhfREVGQVVMVF9UT09MVElQUyxcblxuICAvLyB0aGlzIGlzIHVzZWQgd2hlbiB1c2VyIHNwbGl0IG1hcHNcbiAgc3BsaXRNYXBzOiBbXG4gICAgLy8gdGhpcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIG9iamVjdHMgdG9cbiAgICAvLyBkZXNjcmliZSB0aGUgc3RhdGUgb2YgbGF5ZXIgYXZhaWxhYmlsaXR5IGFuZCB2aXNpYmlsaXR5IGZvciBlYWNoIG1hcFxuICAgIC8vIFtcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgIGxheWVyczoge2xheWVyX2lkOiB0cnVlIHwgZmFsc2V9XG4gICAgLy8gICB9XG4gICAgLy8gXVxuICBdLFxuICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbXSxcbiAgaXNNZXJnaW5nRGF0YXNldHM6IHt9LFxuICAvLyBkZWZhdWx0cyBsYXllciBjbGFzc2VzXG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzLFxuXG4gIC8vIGRlZmF1bHQgYW5pbWF0aW9uXG4gIC8vIHRpbWUgaW4gdW5peCB0aW1lc3RhbXAgKG1pbGxpc2Vjb25kcykgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaClcbiAgYW5pbWF0aW9uQ29uZmlnOiBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcsXG5cbiAgZWRpdG9yOiBERUZBVUxUX0VESVRPUixcblxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICAvLyBmb3IgbG9hZGluZyBkYXRhc2V0c1xuICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IDAsXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMgPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19GSVRfQk9VTkRTJ1xuKTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04gPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OJ1xuKTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBsYXllcjogTGF5ZXIpOiBTIHtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICA/IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICAgICAgOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyAob3IgYXJyYXlzKSBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBvbmx5IHRoZVxuICogcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gcGlja0NoYW5nZWRQcm9wczxUPihwcmV2OiBULCBuZXh0OiBUKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNoYW5nZWRQcm9wczogUGFydGlhbDxUPiA9IHt9O1xuICBjb25zdCBwaWNrUHJvcHNPZiA9IG9iaiA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlZFByb3BzLCBrZXkpICYmXG4gICAgICAgICFpc0VxdWFsKHByZXZba2V5XSwgbmV4dFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZWRQcm9wc1trZXldID0gbmV4dFtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBwaWNrUHJvcHNPZihwcmV2KTtcbiAgcGlja1Byb3BzT2YobmV4dCk7XG4gIHJldHVybiBjaGFuZ2VkUHJvcHM7XG59XG5cbmNvbnN0IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMgPSBbJ2ZpZWxkJywgJ3NjYWxlJywgJ2RvbWFpbicsICdhZ2dyZWdhdGlvbiddO1xuXG4vKipcbiAqIEFwcGx5IGxheWVyIGNvbmZpZ1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eSwgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJJZCwgbmV3TGF5ZXJDb25maWcsIGxheWVySW5kZXh9ID0gYWN0aW9uO1xuICBjb25zdCBuZXdQYXJzZWRMYXllciA9XG4gICAgLy8gd2lsbCBtb3ZlIHZpc3VhbENoYW5uZWxzIHRvIHRoZSBjb25maWcgcHJvcFxuICAgIHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBuZXdMYXllckNvbmZpZyk7XG4gIGNvbnN0IG9sZExheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgaWYgKCFvbGRMYXllciB8fCAhbmV3UGFyc2VkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVySW5kZXggIT09IG51bGwgJiYgbGF5ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmxheWVyc1tsYXllckluZGV4XSAhPT0gb2xkTGF5ZXIpIHtcbiAgICAvLyBsYXllckluZGV4IGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2xkTGF5ZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW25ld1BhcnNlZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyB2YWxpZCBhbmQgY29udmVydCBpdCB0byBMYXllclxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBuZXdQYXJzZWRMYXllciwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgaWYgKCFuZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAobmV3TGF5ZXIudHlwZSAmJiBuZXdMYXllci50eXBlICE9PSBvbGRMYXllci50eXBlKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgICBpZiAob2xkTGF5ZXJJbmRleCA+PSAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKG5leHRTdGF0ZSwgbGF5ZXJUeXBlQ2hhbmdlKG9sZExheWVyLCBuZXdMYXllci50eXBlKSk7XG4gICAgICAvLyBsYXllclR5cGVDaGFuZ2VVcGRhdGVyIGNoYW5nZXMgdGhlIGlkIG9mIHRoZSBsYXllciwgc28gd2UgbmVlZCB0byBvYnRhaW4gdGhlIG5ldyBpZFxuICAgICAgLy8gYnV0IGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXllciB3YXMgbm90IHJlbW92ZWRcbiAgICAgIGlmIChuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuZXdMYXllcklkID0gbmV4dFN0YXRlLmxheWVyc1tvbGRMYXllckluZGV4XS5pZDtcbiAgICAgICAgbmV4dFN0YXRlID0gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGFwcGx5TGF5ZXJDb25maWcobmV3TGF5ZXJJZCwgey4uLm5ld0xheWVyQ29uZmlnLCBpZDogbmV3TGF5ZXJJZH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICAvLyBzZXJpYWxpemVMYXllcigpIG1pZ2h0IHJldHVybiBudWxsIGlmIHRoZSBvbGQgbGF5ZXIgaXMgbm90IHZhbGlkLFxuICAvLyB3ZSBzaG91bGQgc3RpbGwgYXBwbHkgdGhlIGNoYW5nZXMgaW4gdGhhdCBjYXNlXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9sZExheWVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0xheWVyID0gc2VyaWFsaXplTGF5ZXIobmV3TGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghaXNFcXVhbChzZXJpYWxpemVkT2xkTGF5ZXIsIHNlcmlhbGl6ZWROZXdMYXllcikpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkTGF5ZXIuY29uZmlnLCBzZXJpYWxpemVkTmV3TGF5ZXIuY29uZmlnKTtcblxuICAgIGlmICgndmlzQ29uZmlnJyBpbiBjaGFuZ2VkKSB7XG4gICAgICBpZiAoY2hhbmdlZC52aXNDb25maWcpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc0NvbmZpZ0NoYW5nZShvbGRMYXllciwgY2hhbmdlZC52aXNDb25maWcpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWxldGUgY2hhbmdlZC52aXNDb25maWc7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMob2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbE5hbWUgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxOYW1lXTtcbiAgICAgIGNvbnN0IGNoYW5uZWxQcm9wTmFtZXMgPSBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTLm1hcChwcm9wID0+IGNoYW5uZWxbcHJvcF0pO1xuICAgICAgaWYgKGNoYW5uZWxQcm9wTmFtZXMuc29tZShwcm9wID0+IHByb3AgaW4gY2hhbmdlZCkpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICAgICAgICAgICAgb2xkTGF5ZXIsXG4gICAgICAgICAgICBwaWNrKG5ld0xheWVyLmNvbmZpZywgY2hhbm5lbFByb3BOYW1lcyksXG4gICAgICAgICAgICBjaGFubmVsTmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGNoYW5uZWxQcm9wTmFtZXMpIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlZFtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICBsYXllckNvbmZpZ0NoYW5nZShvbGRMYXllciwgcGljayhuZXdMYXllci5jb25maWcsIE9iamVjdC5rZXlzKGNoYW5nZWQpKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlbGF5ZXJWaXNpYmlsdHkoc3RhdGU6IFZpc1N0YXRlLCBuZXdMYXllcjogTGF5ZXIsIGlzVmlzaWJsZT86IGJvb2xlYW4pOiBWaXNTdGF0ZSB7XG4gIGxldCBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2Uoc3RhdGUsIG5ld0xheWVyKTtcbiAgY29uc3QgZmlsdGVySW5kZXggPSBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGUpO1xuICBpZiAoaXNMYXllckFuaW1hdGFibGUobmV3TGF5ZXIpICYmIGZpbHRlckluZGV4ICE9PSAtMSkge1xuICAgIC8vIGlmIGxheWVyIGlzIGdvaW5nIHRvIGJlIHZpc2libGUgd2Ugc3luYyB3aXRoIGZpbHRlciBvdGhlcndpc2Ugd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIG90aGVyIGFuaW1hdGFibGUgbGF5ZXJzIGV4aXN0cyBhbmQgYXJlIHZpc2libGVcbiAgICBuZXdTdGF0ZSA9IHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgZW5hYmxlOiBpc1Zpc2libGUgPyBpc1Zpc2libGUgOiBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpLmxlbmd0aCA+IDBcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3Q29uZmlnKTtcbiAgaWYgKFxuICAgIHR5cGVvZiBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCA9PT0gJ3N0cmluZycgJiZcbiAgICBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCAhPT0gb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICApIHtcbiAgICBjb25zdCB7ZGF0YUlkLCAuLi5yZXN0Q29uZmlnfSA9IGFjdGlvbi5uZXdDb25maWc7XG4gICAgY29uc3Qgc3RhdGVXaXRoRGF0YUlkID0gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld0NvbmZpZzoge2RhdGFJZH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TGF5ZXIgPSBzdGF0ZVdpdGhEYXRhSWQubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gICAgcmV0dXJuIG5leHRMYXllciAmJiBPYmplY3Qua2V5cyhyZXN0Q29uZmlnKS5sZW5ndGhcbiAgICAgID8gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlV2l0aERhdGFJZCwge29sZExheWVyOiBuZXh0TGF5ZXIsIG5ld0NvbmZpZzogcmVzdENvbmZpZ30pXG4gICAgICA6IHN0YXRlV2l0aERhdGFJZDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGFjdGlvbi5uZXdDb25maWcpO1xuXG4gIGxldCBsYXllckRhdGE7XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcblxuICAgIGNvbnN0IHVwZGF0ZUxheWVyRGF0YVJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgbmV3TGF5ZXIgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXI7XG4gICAgbGF5ZXJEYXRhID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyRGF0YTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoJ2lzVmlzaWJsZScgaW4gYWN0aW9uLm5ld0NvbmZpZykge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBhY3Rpb24ubmV3Q29uZmlnLmlzVmlzaWJsZSk7XG4gIH1cblxuICBpZiAoJ2NvbHVtbnMnIGluIGFjdGlvbi5uZXdDb25maWcgJiYgbmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgLy8gVE9ETzogU2hhbiwgbWFrZSB0aGUgYW5pbWF0aW9uIGNvbmZpZyBmdW5jdGlvbiBtb3JlIHJvYnVzdFxuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGlkeFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhY3Rpb24pOiBTIHtcbiAgY29uc3Qge29sZExheWVyLCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICAuLi5vbGRMYXllci5jb25maWcuYW5pbWF0aW9uLFxuICAgICAgW3Byb3BdOiB2YWx1ZVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2lkeF0pO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkXG4gKiBoYW5kbGVzIHR3byBjYXNlczpcbiAqIDEpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBsb2NhbCBTcGxpdE1hcCBsYXllciAodmlzU3RhdGUuc3BsaXRNYXAubGF5ZXJzKVxuICogMikgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGdsb2JhbCBsYXllciAodmlzU3RhdGUubGF5ZXJzKVxuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQoZCA9PiBkLmlkID09PSBsYXllcklkKTtcblxuICBpZiAoIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgaWYgKHNwbGl0TWFwSWQpIHtcbiAgICAvLyBbY2FzZSAxXTogdG9nZ2xlIGxvY2FsIGxheWVyIHZpc2liaWxpdHkgZm9yIGVhY2ggU3BsaXRNYXBcbiAgICBjb25zdCBtYXBJbmRleCA9IG5ld1N0YXRlLnNwbGl0TWFwcy5maW5kSW5kZXgoc20gPT4gc20uaWQgPT09IHNwbGl0TWFwSWQpO1xuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIC8vIDEpIGlmIHRoZSBsYXllciBpcyBpbnZpc2libGUgZ2xvYmFsbHlcbiAgICAgIC8vIC0+IHNldCBnbG9iYWwgdmlzaWJpbGl0eSB0byB0cnVlXG4gICAgICBuZXdTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihuZXdTdGF0ZSwgbGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIHtpc1Zpc2libGU6IHRydWV9KSk7XG5cbiAgICAgIC8vIC0+IHNldCBsb2NhbCB2aXNpYmlsaXR5IHRvIHRydWUgYW5kIHRoZSBsb2NhbCB2aXNpYmlsaXRpZXMgb2YgYWxsIG90aGVyIFNwbGl0TWFwcyB0byBmYWxzZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzbSA9PlxuICAgICAgICAgIHNtLmlkICE9PSBzcGxpdE1hcElkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIDIpIGVsc2Ugd2hlbiB0aGUgbGF5ZXIgaXMgdmlzaWJsZSBnbG9iYWxseVxuICAgIHJldHVybiB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIobmV3U3RhdGUsIHRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gW2Nhc2UgMl06IHRvZ2dsZSBnbG9iYWwgbGF5ZXIgdmlzaWJpbGl0eVxuICAgIGNvbnN0IG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2lzVmlzaWJsZX0pO1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcblxuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBpc1Zpc2libGUpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICAgIGxheWVyOiBuZXdMYXllcixcbiAgICAgIGlkeFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgaW5kZXggb2YgdGhlIGZpbHRlciBzeW5jZWQgdG8gdGltZWxpbmUgb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlOiBWaXNTdGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgaXNWYWxpZCBmbGFnIG9mIGEgbGF5ZXIuXG4gKiBVcGRhdGVzIGlzVmlzaWJsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgaXNWYWxpZC5cbiAqIFRyaWdnZXJzIHVwZGF0ZSBvZiBkYXRhIGZvciB0aGUgbGF5ZXIgaW4gb3JkZXIgdG8gZ2V0IGVycm9ycyBhZ2FpbiBkdXJpbmcgbmV4dCB1cGRhdGUgaXRlcmF0aW9uLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJTZXRJc1ZhbGlkVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaXNWYWxpZH0gPSBhY3Rpb247XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgbGF5ZXJUb1VwZGF0ZSA9IHN0YXRlLmxheWVyc1tpZHhdO1xuICBpZiAobGF5ZXJUb1VwZGF0ZSkge1xuICAgIGxldCBuZXdMYXllcjtcbiAgICBsZXQgbmV3RGF0YSA9IG51bGw7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gVHJpZ2dlciBkYXRhIHVwZGF0ZSBpbiBvcmRlciB0byBzaG93IGVycm9ycyBhZ2FpbiBpZiBwcmVzZW50LlxuICAgICAgY29uc3Qge2xheWVyLCBsYXllckRhdGF9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyVG9VcGRhdGUsIHN0YXRlLCB1bmRlZmluZWQpO1xuICAgICAgbmV3TGF5ZXIgPSBsYXllcjtcbiAgICAgIG5ld0RhdGEgPSBsYXllckRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXJUb1VwZGF0ZS51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgbmV3TGF5ZXIuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtpZHgsIGxheWVyOiBuZXdMYXllciwgbGF5ZXJEYXRhOiBuZXdEYXRhfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGFkZE9yUmVtb3ZlVGV4dExhYmVscyhuZXdGaWVsZHMsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCA9IERFRkFVTFRfVEVYVF9MQUJFTCkge1xuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgY29uc3QgY3VycmVudEZpZWxkcyA9IHRleHRMYWJlbC5tYXAodGwgPT4gdGwuZmllbGQgJiYgdGwuZmllbGQubmFtZSkuZmlsdGVyKGQgPT4gZCk7XG5cbiAgY29uc3QgYWRkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmID0+ICFjdXJyZW50RmllbGRzLmluY2x1ZGVzKGYubmFtZSkpO1xuICBjb25zdCBkZWxldGVGaWVsZHMgPSBjdXJyZW50RmllbGRzLmZpbHRlcihmID0+ICFuZXdGaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBmKSk7XG5cbiAgLy8gZGVsZXRlXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQgJiYgIWRlbGV0ZUZpZWxkcy5pbmNsdWRlcyh0bC5maWVsZC5uYW1lKSk7XG4gIG5ld1RleHRMYWJlbCA9ICFuZXdUZXh0TGFiZWwubGVuZ3RoID8gW2RlZmF1bHRUZXh0TGFiZWxdIDogbmV3VGV4dExhYmVsO1xuXG4gIC8vIGFkZFxuICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgLi4ubmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCksXG4gICAgLi4uYWRkRmllbGRzLm1hcChhZiA9PiAoe1xuICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgIGZpZWxkOiBhZlxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFsuLi50ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWxdO1xuICB9XG5cbiAgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCA9PT0gJ2ZpZWxkcycpIHtcbiAgICBuZXdUZXh0TGFiZWwgPSBhZGRPclJlbW92ZVRleHRMYWJlbHModmFsdWUsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3VGV4dExhYmVsID0gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIG5ld1RleHRMYWJlbCk7XG4gIH1cbiAgLy8gdXBkYXRlIHRleHQgbGFiZWwgcHJvcCBhbmQgdmFsdWVcbiAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZzoge3RleHRMYWJlbDogbmV3VGV4dExhYmVsfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgbGF5ZXJDbGFzc2VzLCBsYXllciwgc2NoZW1hKSB7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIobGF5ZXIsIHNjaGVtYSk7XG4gIHJldHVybiBsb2FkZWRMYXllclxuICAgID8gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxvYWRlZExheWVyLCBsYXllckNsYXNzZXMsIHtcbiAgICAgICAgYWxsb3dFbXB0eUNvbHVtbjogdHJ1ZVxuICAgICAgfSlcbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGNvbmZpZyBkYXRhSWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBvbGRMYXllcjogTGF5ZXI7XG4gICAgbmV3Q29uZmlnOiB7XG4gICAgICBkYXRhSWQ6IHN0cmluZztcbiAgICB9O1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdDb25maWc7XG5cbiAgaWYgKCFvbGRMYXllciB8fCAhc3RhdGUuZGF0YXNldHNbZGF0YUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWR9KTtcblxuICAvLyB0aGlzIG1heSBoYXBwZW4gd2hlbiBhIGxheWVyIGlzIG5ldyAodHlwZTogbnVsbCBhbmQgbm8gY29sdW1ucykgYnV0IGl0J3Mgbm90IHJlYWR5IHRvIGJlIHNhdmVkXG4gIGlmIChuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICAgIHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0sXG4gICAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgICBuZXdMYXllcixcbiAgICAgIHN0YXRlLnNjaGVtYVxuICAgICk7XG4gICAgLy8gaWYgY2FudCB2YWxpZGF0ZSBpdCB3aXRoIGRhdGEgY3JlYXRlIGEgbmV3IG9uZVxuICAgIGlmICghdmFsaWRhdGVkKSB7XG4gICAgICBjb25zdCBvbGRMYXllclR5cGUgPSBvbGRMYXllci50eXBlO1xuICAgICAgaWYgKG9sZExheWVyVHlwZSkge1xuICAgICAgICBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbb2xkTGF5ZXJUeXBlXSh7ZGF0YUlkLCBpZDogb2xkTGF5ZXIuaWR9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSB2YWxpZGF0ZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlIChlLmcuIG1pc3NpbmcgY29sdW1ucyksIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvXG4gICAgLy8gcmVtYXAgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBuZXcgZGF0YXNldCB0byBhdm9pZCBzdGFsZSBmaWVsZCByZWZlcmVuY2VzXG4gICAgLy8gdGhhdCBwb2ludCB0byByb3dzIGJleW9uZCB0aGUgbmV3IGRhdGFzZXQncyBsZW5ndGhcbiAgICBjb25zdCBuZXdEYXRhc2V0RmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHM7XG4gICAgY29uc3QgcmVtYXBwZWRGaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQ6IGZpZWxkS2V5fSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEZpZWxkID0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkS2V5XTtcbiAgICAgIGlmIChjdXJyZW50RmllbGQpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZCA9IG5ld0RhdGFzZXRGaWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gY3VycmVudEZpZWxkLm5hbWUpO1xuICAgICAgICByZW1hcHBlZEZpZWxkc1tmaWVsZEtleV0gPSBtYXRjaGVkIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKE9iamVjdC5rZXlzKHJlbWFwcGVkRmllbGRzKS5sZW5ndGgpIHtcbiAgICAgIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcocmVtYXBwZWRGaWVsZHMpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBmaWVsZCB0eXBlIGNvbXBhdGliaWxpdHkg4oCUIGNsZWFycyBmaWVsZHMgd2hvc2UgdHlwZSBpcyBpbmNvbXBhdGlibGVcbiAgICAvLyB3aXRoIHRoZSBjaGFubmVsJ3Mgc3VwcG9ydGVkIGZpZWxkIHR5cGVzIChlLmcuIHN0cmluZyBmaWVsZCBmb3IgYSBudW1lcmljIHNjYWxlKVxuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtrZXl9KSA9PiB7XG4gICAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGlzVmlzaWJsZTogb2xkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZVxuICB9KTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5pdGlhbExheWVyQ29uZmlnKGxheWVyLCBkYXRhc2V0cywgbGF5ZXJDbGFzc2VzKTogTGF5ZXIge1xuICBsZXQgbmV3TGF5ZXIgPSBsYXllcjtcbiAgaWYgKCFPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoKSB7XG4gICAgLy8gbm8gZGF0YSBpcyBsb2FkZWRcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cbiAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgLy8gc2V0IGxheWVyIGRhdGFJZFxuICAgIG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogT2JqZWN0LmtleXMoZGF0YXNldHMpWzBdfSk7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvLyBmaW5kIGRlZmF1dCBsYXllciBwcm9wc1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgW10pXG4gICAgICA6IHtwcm9wczogW119O1xuXG4gIC8vIGFuIGFycmF5IG9mIHBvc3NpYmxlIHByb3BzLCB1c2UgMXN0IG9uZVxuICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcblxuICBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW2xheWVyLnR5cGVdKHtcbiAgICAgIC4uLnByb3BzWzBdLFxuICAgICAgbGFiZWw6IG5ld0xheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgIGRhdGFJZDogbmV3TGF5ZXIuY29uZmlnLmRhdGFJZCxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBuZXdMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgICBpc1Zpc2libGU6IG5ld0xheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgOiBuZXdMYXllcjtcbn1cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSh7XG4gICAgLy8ga2VlcCBvbGQgbGF5ZXIgbGFibGUgYW5kIGlzQ29uZmlnQWN0aXZlXG4gICAgbGFiZWw6IG9sZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogb2xkTGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgIGRhdGFJZDogb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICB9KTtcblxuICBpZiAoIW9sZExheWVyLnR5cGUpIHtcbiAgICAvLyBpZiBzZXR0aW5nIGxheWVyIHR5cGUgb24gYW4gZW1wdHkgbGF5ZXJcbiAgICBuZXdMYXllciA9IHNldEluaXRpYWxMYXllckNvbmZpZyhuZXdMYXllciwgc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAgIC8vIElmIHR5cGUgaGFzIGNoYW5nZWQgYnV0IGlkIGlzIHRoZSBzYW1lLCBpdCB3aWxsIGJyZWFrXG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9XG4gICAgICB0eXBlb2Ygc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoc3RhdGUuZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIG5ld0xheWVyLmFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgICBvbGRMYXllci5jb25maWcsXG4gICAgICBvbGRMYXllci52aXNDb25maWdTZXR0aW5ncyxcbiAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgZGVmYXVsdExheWVyUHJvcHNcbiAgICApO1xuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBvbGRMYXllci5pZCwgbmV3TGF5ZXIuaWQpXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB2aXN1YWwgY2hhbm5lbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnLCBuZXdWaXNDb25maWcsIGNoYW5uZWx9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKTtcbiAgaWYgKG5ld1Zpc0NvbmZpZykgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsKTtcblxuICAvLyBjYWxsaW5nIHVwZGF0ZSBhbmltYXRpb24gZG9tYWluIGZpcnN0IHRvIG1lcmdlIGFsbCBsYXllciBhbmltYXRpb24gZG9tYWluXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4oc3RhdGUpO1xuXG4gIGNvbnN0IHZpc3VhbENoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgaWYgKHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSkge1xuICAgIC8vIGlmIGNvbG9yIGZpZWxkIGNoYW5nZWQsIHNldCBjdXN0b21CcmVha3MgdG8gZmFsc2VcbiAgICBuZXdMYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICBsYXllcnM6IHVwZGF0ZWRTdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gdXBkYXRlZFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHVwZGF0ZWRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcblxuICBpZiAoXG4gICAgdmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiZcbiAgICBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbD8uc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsICYmXG4gICAgIW5ld1Zpc0NvbmZpZ1xuICApIHtcbiAgICAvLyB3aGVuIHN3aXRjaGluZyB0byBjdXN0b21PcmRpbmFsIHNjYWxlLCBjcmVhdGUgYSBjdXN0b21QYWxldHRlIGluIGNvbG9yVUkgd2l0aCB1cGRhdGVkIGNvbG9yRG9tYWluXG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSh7XG4gICAgICBzY2FsZTogU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCxcbiAgICAgIGZpZWxkOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0sXG4gICAgICBvcmRpbmFsRG9tYWluOiBsYXllci5jb25maWdbbGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0uZG9tYWluXSxcbiAgICAgIHJhbmdlOiBsYXllci5jb25maWcudmlzQ29uZmlnW3Zpc3VhbENoYW5uZWwucmFuZ2VdLFxuICAgICAgY29sb3JCcmVha3M6IG51bGxcbiAgICB9KTtcbiAgICAvLyB1cGRhdGUgY29sb3JSYW5nZSB3aXRoIG5ldyBjdXN0b21QYWxldHRlXG4gICAgbGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIHNob3dDb2xvckNoYXJ0OiB0cnVlLFxuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IHRydWVcbiAgICAgIH0sXG4gICAgICBjdXN0b21QYWxldHRlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSh1cGRhdGVkU3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld1Zpc0NvbmZpZyk7XG5cbiAgY29uc3QgbmV3VmlzQ29uZmlnID0ge1xuICAgIC4uLm9sZExheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgLi4uYWN0aW9uLm5ld1Zpc0NvbmZpZ1xuICB9O1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe3Zpc0NvbmZpZzogbmV3VmlzQ29uZmlnfSk7XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIC8vIEV4Y2x1c2l2ZSBiaXRtYXAgZWRpdGluZzogd2hlbiBlZGl0Qm91bmRzIGlzIHR1cm5lZCBvbiBmb3Igb25lIGJpdG1hcCBsYXllcixcbiAgLy8gdHVybiBpdCBvZmYgZm9yIGFsbCBvdGhlciBiaXRtYXAgbGF5ZXJzXG4gIGlmIChuZXdMYXllci50eXBlID09PSAnYml0bWFwJyAmJiBhY3Rpb24ubmV3VmlzQ29uZmlnLmVkaXRCb3VuZHMgPT09IHRydWUpIHtcbiAgICBuZXh0U3RhdGUgPSB7XG4gICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICBsYXllcnM6IG5leHRTdGF0ZS5sYXllcnMubWFwKChsLCBpKSA9PiB7XG4gICAgICAgIGlmIChpICE9PSBpZHggJiYgbC50eXBlID09PSAnYml0bWFwJyAmJiBsLmNvbmZpZy52aXNDb25maWcuZWRpdEJvdW5kcykge1xuICAgICAgICAgIHJldHVybiBsLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIHZpc0NvbmZpZzogey4uLmwuY29uZmlnLnZpc0NvbmZpZywgZWRpdEJvdW5kczogZmFsc2V9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IG5leHRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5leHRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllcjogbmV3TGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvIGEgc3BlY2lmaWVkIHZhbHVlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIgPSA8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHt2YWx1ZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBTID0+IHtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGN1cnJlbnRUaW1lXG4gICAgfVxuICB9O1xuICAvLyB1cGRhdGUgYW5pbWF0aW9uIGNvbmZpZyBmb3IgZWFjaCBsYXllclxuICByZXR1cm4gc3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjdSwgbCkgPT4ge1xuICAgIGlmIChsLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCAmJiBsLnR5cGUgIT09ICd0cmlwJykge1xuICAgICAgcmV0dXJuIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcihhY2N1LCB7b2xkTGF5ZXI6IGwsIHByb3A6ICdjdXJyZW50VGltZScsIGN1cnJlbnRUaW1lfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1O1xuICB9LCBuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIGFjdGlvbik7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBhbmltYXRpb24gd2luZG93XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge2lkLCBhbmltYXRpb25XaW5kb3d9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGlkKTtcblxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgYW5pbWF0aW9uV2luZG93XG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgY29uc3QgbmV3U3luY1RpbWVsaW5lTW9kZSA9IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpO1xuXG4gIHJldHVybiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge2lkLCBtb2RlOiBuZXdTeW5jVGltZWxpbmVNb2RlfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmaWx0ZXJJZCwgbmV3RmlsdGVyfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIFNlcmlhbGl6ZSB0aGUgZmlsdGVycyB0byBvbmx5IGNvbXBhcmUgdGhlIHNhdmVkIHByb3BlcnRpZXNcbiAgY29uc3Qgc2VyaWFsaXplZE9sZEZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihvbGRGaWx0ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3RmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG5ld0ZpbHRlciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3RmlsdGVyIHx8IGlzRXF1YWwoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcikpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgYW55IGNoYW5nZXMgdG8gdGhlIGZpbHRlciwgYXBwbHkgdGhlbVxuICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKTtcbiAgZGVsZXRlIGNoYW5nZWRbJ2lkJ107IC8vIGlkIHNob3VsZCBub3QgYmUgY2hhbmdlZFxuXG4gIGNvbnN0IGZpbHRlckluZGV4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJbmRleCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoXG4gICAgc3RhdGUsXG4gICAgc2V0RmlsdGVyKGZpbHRlckluZGV4LCBPYmplY3Qua2V5cyhjaGFuZ2VkKSwgT2JqZWN0LnZhbHVlcyhjaGFuZ2VkKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHgsIHZhbHVlSW5kZXggPSAwfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoYWN0aW9uLnZhbHVlKSB8fCBhY3Rpb24ucHJvcC5sZW5ndGggIT09IGFjdGlvbi52YWx1ZS5sZW5ndGgpXG4gICkge1xuICAgIENvbnNvbGUuZXJyb3IoJ0V4cGVjdGluZyB2YWx1ZSB0byBiZSBhbiBhcnJheSBvZiB0aGUgc2FtZSBsZW5ndGgsIHNpbmNlIHByb3AgaXMgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gY29udmVydCBwcm9wIGFuZCB2YWx1ZSB0byBhcnJheVxuICBjb25zdCBwcm9wcyA9IHRvQXJyYXkoYWN0aW9uLnByb3ApO1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSA/IHRvQXJyYXkoYWN0aW9uLnZhbHVlKSA6IFthY3Rpb24udmFsdWVdO1xuXG4gIGxldCBuZXdGaWx0ZXIgPSBvbGRGaWx0ZXI7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNbaV07XG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IHBhc3NpbmcgaW4gbmFtZSBhcyBhbiBhcnJheSBpbnRvIF91cGRhdGVGaWx0ZXJQcm9wLCBzbyB3ZSBjYWxsIGl0IG11bHRpcGxlIHRpbWVzIHdpdGggZWFjaCBuYW1lXG4gICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZXJlIGFzIHRvIHdoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZFxuICAgIGxldCByZXM7XG4gICAgaWYgKHByb3AgPT09ICduYW1lJyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgcmVzID0gdmFsdWUucmVkdWNlKChhY2N1LCB2KSA9PiB7XG4gICAgICAgIHJldHVybiBfdXBkYXRlRmlsdGVyUHJvcChhY2N1LCBuZXdGaWx0ZXIsIHByb3AsIHYsIHZhbHVlSW5kZXgpO1xuICAgICAgfSwgbmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBfdXBkYXRlRmlsdGVyUHJvcChuZXdTdGF0ZSwgbmV3RmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgfVxuICAgIG5ld0ZpbHRlciA9IHJlcy5maWx0ZXI7XG4gICAgbmV3U3RhdGUgPSByZXMuc3RhdGU7XG4gICAgZGF0YXNldElkc1RvRmlsdGVyID0gZGF0YXNldElkc1RvRmlsdGVyLmNvbmNhdChyZXMuZGF0YXNldElkc1RvRmlsdGVyKTtcbiAgfVxuXG4gIGNvbnN0IGVubGFyZ2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCk7XG5cbiAgaWYgKGVubGFyZ2VkRmlsdGVyICYmIGVubGFyZ2VkRmlsdGVyLmlkICE9PSBuZXdGaWx0ZXIuaWQpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgZW5sYXJnZWQgZmlsdGVyXG4gICAgbmV3RmlsdGVyLnZpZXcgPSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xuICB9XG5cbiAgLy8gc2F2ZSBuZXcgZmlsdGVycyB0byBuZXdTdGF0ZVxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBuZXdGaWx0ZXIsIG5ld1N0YXRlKTtcblxuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICB1bmlxKGRhdGFzZXRJZHNUb0ZpbHRlciksXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcblxuICAvLyBuZWVkIHRvIHVwZGF0ZSBmaWx0ZXJQbG90IGFmdGVyIGZpbHRlciBEYXRhc2V0IGZvciBwbG90IHRvIHVwZGF0ZSBvbiBmaWx0ZXJlZCByZXN1bHRcbiAgY29uc3QgZmlsdGVyV2l0aFBMb3QgPSB1cGRhdGVGaWx0ZXJQbG90KG5ld1N0YXRlLmRhdGFzZXRzLCBuZXdTdGF0ZS5maWx0ZXJzW2lkeF0pO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIGZpbHRlcldpdGhQTG90LCBuZXdTdGF0ZSk7XG5cbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIC8vIElmIHRpbWUgcmFuZ2UgZmlsdGVyIHZhbHVlIHdhcyB1cGRhdGVkLCBhZGp1c3QgYW5pbWF0aW9uIGNvbmZpZ1xuICBpZiAobmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgcHJvcHMuaW5jbHVkZXMoJ3ZhbHVlJykpIHtcbiAgICBuZXdTdGF0ZSA9IGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGFjdGlvbi5pZHgpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIGRhdGFzZXRzKSB7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG4gIGlmIChmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdKSB7XG4gICAgLy8gaWYgZGF0YUlkIGFscmVhZHkgZXhpc3RcbiAgICBuZXdGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpO1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IG5ld0ZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0VmFsdWVbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICBuZXdGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dFZhbHVlLCBuZXdGaWx0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykge1xuICBjb25zdCBkYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuXG4gIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZUluZGV4ID09PSAwKSB7XG4gICAgLy8gaWYgcmVtb3ZlIHRoZSBvbmx5IGRhdGFJZCwgY3JlYXRlIGFuIGVtcHR5IGZpbHRlciBpbnN0ZWFkO1xuICAgIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtpZDogZmlsdGVyLmlkfSk7XG4gIH1cblxuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgWydkYXRhSWQnLCAnbmFtZScsICdmaWVsZElkeCcsICdncHVDaGFubmVsJ10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbcHJvcF0pKSB7XG4gICAgICBjb25zdCBuZXh0VmFsID0gZmlsdGVyW3Byb3BdLnNsaWNlKCk7XG4gICAgICBuZXh0VmFsLnNwbGljZSh2YWx1ZUluZGV4LCAxKTtcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIG5leHRWYWwsIGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2VGaWVsZERvbWFpbiBmb3IgdGhlIHJlbWFpbmluZyBmaWVsZHNcbiAgY29uc3QgZG9tYWluU3RlcHMgPSBtZXJnZUZpbHRlckRvbWFpbihmaWx0ZXIsIGRhdGFzZXRzKTtcblxuICBjb25zdCBuZXh0RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAvLyB2YWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihkb21haW5TdGVwcyA/IHtkb21haW46IGRvbWFpblN0ZXBzPy5kb21haW4sIHN0ZXA6IGRvbWFpblN0ZXBzPy5zdGVwfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV4dEZpbHRlci52YWx1ZSwgbmV4dEZpbHRlcik7XG4gIHJldHVybiB7XG4gICAgLi4ubmV4dEZpbHRlcixcbiAgICB2YWx1ZTogbmV4dFZhbHVlXG4gIH07XG59XG5cbi8qKiAqXG4gKiBVcGRhdGVzIGEgc2luZ2xlIHByb3BlcnR5IG9mIGEgZmlsdGVyXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJQcm9wKHN0YXRlLCBmaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4LCBkYXRhc2V0SWRzPykge1xuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzd2l0Y2ggKHByb3ApIHtcbiAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBpZiB3ZSB1cGRhdGUgZmlsdGVyRGF0YUlkLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHR3byBjYXNlczpcbiAgICAvLyAxLiBkYXRhSWQgaXMgZW1wdHk6IGNyZWF0ZSBhIGRlZmF1bHQgZmlsdGVyXG4gICAgLy8gMi4gQWRkIGEgbmV3IGRhdGFzZXQgaWRcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmRhdGFJZDoge1xuICAgICAgY29uc3Qgb2xkRGF0YUlkID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgZmlsdGVyID0gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1bmlxKFsuLi5vbGREYXRhSWQsIC4uLmZpbHRlci5kYXRhSWRdKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWU6IHtcbiAgICAgIC8vIHdlIGFyZSBzdXBwb3J0aW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uYWxpdHlcbiAgICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGZpbHRlciBuYW1lIHdpbGwgb25seSB1cGRhdGUgZmlsdGVyIG5hbWUgYnV0IGl0IHdvbid0IGhhdmUgc2lkZSBlZmZlY3RzXG4gICAgICAvLyB3ZSBhcmUgZ29ubmEgdXNlIHBhaXIgb2YgZGF0YXNldHMgYW5kIGZpZWxkSWR4IHRvIHVwZGF0ZSB0aGUgZmlsdGVyXG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleCxcbiAgICAgICAge21lcmdlRG9tYWluOiB2YWx1ZUluZGV4ID4gMH1cbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBpZiAoZmlsdGVyLmdwdSkge1xuICAgICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgLy8gcmVtb3ZlIGZpbHRlciBQbG90IGF0IGRhdGFzZXRJZCwgc28gaXQgd2lsbCBiZSByZWNhbGN1bGF0ZWRcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG5cbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICAvLyBvbmx5IGZpbHRlciB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmxheWVySWQ6IHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgZGF0YXNldElkL3MgaWYgd2UgaGF2ZSBhZGRlZC9yZW1vdmVkIGxheWVyc1xuICAgICAgLy8gLSBjaGVjayBmb3IgbGF5ZXJJZCBjaGFuZ2VzIChYT1Igd29ya3MgYmVjYXVzZSBvZiBzdHJpbmcgdmFsdWVzKVxuICAgICAgLy8gaWYgbm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBsYXllcklkcywgZG9uJ3QgZG8gYW55IGZpbHRlcmluZ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbGF5ZXJJZERpZmZlcmVuY2UgPSB4b3IodmFsdWUsIGZpbHRlci5sYXllcklkKTtcblxuICAgICAgY29uc3QgbGF5ZXJEYXRhSWRzID0gdW5pcTxzdHJpbmc+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/IElOSVRJQUxfQU5OT1RBVElPTl9LSU5EO1xuICBjb25zdCBiYXNlID0ge1xuICAgIGlkOiBjb25maWc/LmlkID8/IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGtpbmQsXG4gICAgaXNWaXNpYmxlOiBjb25maWc/LmlzVmlzaWJsZSA/PyB0cnVlLFxuICAgIGF1dG9TaXplOiBjb25maWc/LmF1dG9TaXplID8/IHRydWUsXG4gICAgYXV0b1NpemVZOiBjb25maWc/LmF1dG9TaXplWSA/PyB0cnVlLFxuICAgIGFuY2hvclBvaW50OiBjb25maWc/LmFuY2hvclBvaW50ID8/IChbMCwgMF0gYXMgW251bWJlciwgbnVtYmVyXSksXG4gICAgbGFiZWw6IGNvbmZpZz8ubGFiZWwgPz8gJ05ldyBBbm5vdGF0aW9uJyxcbiAgICBsaW5lQ29sb3I6IGNvbmZpZz8ubGluZUNvbG9yID8/IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICAgIGxpbmVXaWR0aDogY29uZmlnPy5saW5lV2lkdGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgdGV4dFdpZHRoOiBjb25maWc/LnRleHRXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgICB0ZXh0SGVpZ2h0OiBjb25maWc/LnRleHRIZWlnaHQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICAgIHRleHRWZXJ0aWNhbEFsaWduOiBjb25maWc/LnRleHRWZXJ0aWNhbEFsaWduID8/ICgnYm90dG9tJyBhcyBjb25zdCksXG4gICAgbWFwSW5kZXg6IGNvbmZpZz8ubWFwSW5kZXhcbiAgfTtcblxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlBPSU5UOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuUE9JTlQsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiAoY29uZmlnIGFzIGFueSk/LmFuZ2xlID8/IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkFSUk9XOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQVJST1csXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiAoY29uZmlnIGFzIGFueSk/LmFuZ2xlID8/IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkNJUkNMRTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkNJUkNMRSxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IChjb25maWcgYXMgYW55KT8uYW5nbGUgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICAgICAgICByYWRpdXNJbk1ldGVyczogKGNvbmZpZyBhcyBhbnkpPy5yYWRpdXNJbk1ldGVycyA/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/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSxcbiAgICAgICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgICAgIH0pXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpc0RhdGFVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGRhdGFzZXRzIGNhbiBiZSBhIHNpbmdsZSBkYXRhIGVudHJpZXMgb3IgYW4gYXJyYXkgb2YgbXVsdGlwbGUgZGF0YSBlbnRyaWVzXG4gIGNvbnN0IHtjb25maWcsIG9wdGlvbnN9ID0gYWN0aW9uO1xuXG4gIC8vIGFwcGx5IGNvbmZpZyBpZiBwYXNzZWQgZnJvbSBhY3Rpb25cbiAgLy8gVE9ETzogd2UgZG9uJ3QgaGFuZGxlIGFzeW5jIG1lcmdlcnMgaGVyZSB5ZXRcbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IGNvbmZpZ1xuICAgID8gcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtcbiAgICAgICAgcGF5bG9hZDoge2NvbmZpZywgb3B0aW9uc31cbiAgICAgIH0pXG4gICAgOiBzdGF0ZTtcblxuICBjb25zdCBkYXRhc2V0cyA9IHRvQXJyYXkoYWN0aW9uLmRhdGFzZXRzKTtcbiAgaWYgKCFkYXRhc2V0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdXBkYXRlZFN0YXRlO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlRGF0YXNldFRhc2tzOiBUYXNrW10gPSBbXTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gIGRhdGFzZXRzLmZvckVhY2goKHtpbmZvID0ge30sIC4uLnJlc3R9LCBkYXRhc2V0SW5kZXgpID0+IHtcbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayh7aW5mbywgLi4ucmVzdH0sIHN0YXRlLmRhdGFzZXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgY3JlYXRlRGF0YXNldFRhc2tzLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9yc2AsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1mYWlsZWQtJHtkYXRhc2V0SW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBkYXRhc2V0c0FsbFNldHRsZWRUYXNrID0gY3JlYXRlRGF0YXNldFRhc2tzLmxlbmd0aFxuICAgID8gVGFzay5hbGxTZXR0bGVkKGNyZWF0ZURhdGFzZXRUYXNrcykubWFwKHJlc3VsdHMgPT5cbiAgICAgICAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3Moe3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uczogb3B0aW9uc30pXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChkYXRhc2V0c0FsbFNldHRsZWRUYXNrKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAxLCB0eXBlOiAnJ30pKTtcbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi4oZGF0YXNldHNBbGxTZXR0bGVkVGFzayA/IFtkYXRhc2V0c0FsbFNldHRsZWRUYXNrXSA6IFtdKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uc30gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gcmVzdWx0cy5yZWR1Y2UoKGFjY3UsIHJlc3VsdCwgaWR4KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBbZGF0YXNldC5pZF06IGRhdGFzZXR9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IGVycm9yIG5vdGlmaWNhdGlvbiBvbiBVSVxuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0soKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBEYXRhc2V0IGVycm9yOiBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQ6XG4gICAgICAgICAgICAgICR7cmVzdWx0LnJlYXNvbiB8fCAocmVzdWx0IGFzIGFueSkudmFsdWV9YCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWNyZWF0ZS1mYWlsZWQtJHtpZHh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG4gIH0sIHt9IGFzIERhdGFzZXRzKTtcbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGUsIG5ld0RhdGFFbnRyaWVzKVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBsYXllck1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+IG0ud2FpdEZvckxheWVyRGF0YSk7XG4gIGNvbnN0IGRhdGFzZXRNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiAhbGF5ZXJNZXJnZXJzLmluY2x1ZGVzKG0pKTtcblxuICBjb25zdCBuZXdEYXRhSWRzID0gT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpO1xuICBjb25zdCBwb3N0TWVyZ2VyUGF5bG9hZCA9IHtcbiAgICBuZXdEYXRhSWRzLFxuICAgIG9wdGlvbnM6IGFkZFRvTWFwT3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkU3RhdGUgPSBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgbWVyZ2VyczogZGF0YXNldE1lcmdlcnMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogLTF9KSksXG4gICAgbm90aWZpY2F0aW9uVGFza3NcbiAgKTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1lcmdlcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG1lcmdlcnM6IE1lcmdlcjxhbnk+W107XG4gICAgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHttZXJnZXJzLCBwb3N0TWVyZ2VyUGF5bG9hZH0gPSBhY3Rpb247XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IG1lcmdlU3RhdGVSZXN1bHQgPSBtZXJnZVN0YXRlRnJvbU1lcmdlcnMoXG4gICAgc3RhdGUsXG4gICAge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICAuLi5zdGF0ZS5pbml0aWFsU3RhdGVcbiAgICB9LFxuICAgIG1lcmdlcnMsXG4gICAgLy8gbmV3RGF0YUlkcyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICApO1xuXG4gIC8vIGlmIGFsbCBtZXJnZWQsIGtpY2t1cCBwb3N0IG1lcmdlIHByb2Nlc3NcbiAgLy8gaWYgbm90IHdhaXRcbiAgcmV0dXJuIG1lcmdlU3RhdGVSZXN1bHQuYWxsTWVyZ2VkXG4gICAgPyBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkKVxuICAgIDogbWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZTtcbn1cblxuLyoqIFJlYWRzIGBvcHRpb25zLmxheWVyVmlzQ29uZmlnYCBmcm9tIGFkZC1kYXRhLXRvLW1hcCAoc2VlIGBBZGREYXRhVG9NYXBPcHRpb25zYCkuICovXG5mdW5jdGlvbiBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhcbiAgb3B0aW9uczogUG9zdE1lcmdlclBheWxvYWRbJ29wdGlvbnMnXSB8IHVuZGVmaW5lZFxuKTogUGFydGlhbDxMYXllclZpc0NvbmZpZz4gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wdGlvbnMgfHwgISgnbGF5ZXJWaXNDb25maWcnIGluIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBwYXRjaCA9IChvcHRpb25zIGFzIHtsYXllclZpc0NvbmZpZz86IHVua25vd259KS5sYXllclZpc0NvbmZpZztcbiAgaWYgKHBhdGNoID09IG51bGwgfHwgdHlwZW9mIHBhdGNoICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhdGNoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHBhdGNoIGFzIFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+O1xufVxuXG4vKipcbiAqIFBvbHlnb24gZmlsdGVycyBmb3IgdGhlc2UgbGF5ZXJzIHVzZSBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlIGZyb21cbiAqIGNhbGN1bGF0ZUxheWVyRGF0YS4gT3RoZXIgdHlwZXMgKGxhdC9sbmcgcG9pbnRzLCBIMywgYXJjcykgY2FuIGZpbHRlclxuICogZnJvbSBjb2x1bW5zIG9uIHRoZSBmaXJzdCBwYXNzIGFuZCBtdXN0IG5vdCBiZSByZWNhbGN1bGF0ZWQgaGVyZS5cbiAqL1xuZnVuY3Rpb24gcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGxheWVyLnR5cGUgPT09IExBWUVSX1RZUEVTLmdlb2pzb24gfHwgbGF5ZXIuY29uZmlnPy5jb2x1bW5Nb2RlID09PSAnZ2VvanNvbic7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmZ1bmN0aW9uIHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VkU3RhdGU6IFZpc1N0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtuZXdEYXRhSWRzLCBvcHRpb25zLCBsYXllck1lcmdlcnN9ID0gcG9zdE1lcmdlclBheWxvYWQ7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBtZXJnZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+XG4gICAgZi5kYXRhSWQuZmluZChmRGF0YUlkID0+IG5ld0RhdGFJZHMuaW5jbHVkZXMoZkRhdGFJZCkpXG4gICk7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJlZDogc3RyaW5nW10gPSB1bmlxKFxuICAgIG5ld0ZpbHRlcnMucmVkdWNlKChhY2N1LCBmKSA9PiBbLi4uYWNjdSwgLi4uZi5kYXRhSWRdLCBbXSBhcyBzdHJpbmdbXSlcbiAgKTtcbiAgY29uc3QgZGF0YUVtcHR5ID0gbmV3RGF0YUlkcy5sZW5ndGggPCAxO1xuXG4gIGxldCBuZXdMYXllcnMgPSAhZGF0YUVtcHR5XG4gICAgPyBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gbmV3RGF0YUlkcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGlkKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtpZF06IG1lcmdlZFN0YXRlLmRhdGFzZXRzW2lkXVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZClcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcnMpXG4gICAgfTtcbiAgfVxuXG4gIG1lcmdlZFN0YXRlID0gbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzKFxuICAgIG1lcmdlZFN0YXRlLFxuICAgIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKG9wdGlvbnMpLFxuICAgIG5ld0RhdGFJZHNcbiAgKTtcblxuICAvLyBpZiBubyB0b29sdGlwcyBtZXJnZWQgYWRkIGRlZmF1bHQgdG9vbHRpcHNcbiAgbmV3RGF0YUlkcy5mb3JFYWNoKGRhdGFJZCA9PiB7XG4gICAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IG1lcmdlZFN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIC8vIGxvYWRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIGZhbHNlIGFuZCB3ZSBkb24ndCB3YW50IHRvIHJ1biBhZGREZWZhdWx0VG9vbHRpcHMgd2hlbiB0b29sdGlwRmllbGRzIGlzIGVtcHR5XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucz8uYXV0b0NyZWF0ZVRvb2x0aXBzICE9PSBmYWxzZSAmJlxuICAgICAgKCFBcnJheS5pc0FycmF5KHRvb2x0aXBGaWVsZHMpIHx8ICF0b29sdGlwRmllbGRzLmxlbmd0aClcbiAgICApIHtcbiAgICAgIC8vIGFkZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgdHJ1ZVxuICAgICAgbWVyZ2VkU3RhdGUgPSBhZGREZWZhdWx0VG9vbHRpcHMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzW2RhdGFJZF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdXBkYXRlZERhdGFzZXRzID0gZGF0YUVtcHR5XG4gICAgPyBPYmplY3Qua2V5cyhtZXJnZWRTdGF0ZS5kYXRhc2V0cylcbiAgICA6IHVuaXEoT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpLmNvbmNhdChkYXRhc2V0RmlsdGVyZWQpKTtcblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG1lcmdlZFN0YXRlLCB1cGRhdGVkRGF0YXNldHMsIHVuZGVmaW5lZCk7XG5cbiAgLy8gUG9seWdvbiBwZXItbGF5ZXIgaW5kZXhlcyBuZWVkIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUsIHdoaWNoIGFyZSBvbmx5XG4gIC8vIHBvcHVsYXRlZCBieSB0aGUgbGF5ZXItZGF0YSBwYXNzIGFib3ZlLiBTa2lwIGRhdGFzZXRzIHdob3NlIHRhcmdldGVkIGxheWVyc1xuICAvLyBhbHJlYWR5IGZpbHRlcmVkIGZyb20gY29sdW1ucyAoZS5nLiBsYXQvbG5nIHBvaW50cykuXG4gIGNvbnN0IHBvbHlnb25GaWx0ZXJzID0gdXBkYXRlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKFxuICAgIGYgPT4gZi50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiBmLmVuYWJsZWQgIT09IGZhbHNlXG4gICk7XG4gIGNvbnN0IHBvbHlnb25NZXRhRGF0YUlkcyA9IHVuaXEoXG4gICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgbGF5ZXIgPT5cbiAgICAgICAgICBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyKSAmJlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJzLnNvbWUoZiA9PiBmLmxheWVySWQ/LmluY2x1ZGVzKGxheWVyLmlkKSlcbiAgICAgIClcbiAgICAgIC5tYXAobGF5ZXIgPT4gbGF5ZXIuY29uZmlnLmRhdGFJZClcbiAgICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpICYmIHVwZGF0ZWREYXRhc2V0cy5pbmNsdWRlcyhpZCkpXG4gICk7XG4gIGlmIChwb2x5Z29uTWV0YURhdGFJZHMubGVuZ3RoKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKFxuICAgICAge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICAgIGRhdGFzZXRzOiBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgICAgICAgIHBvbHlnb25NZXRhRGF0YUlkcyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZGF0YXNldHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmZpbHRlcnMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgICApXG4gICAgICB9LFxuICAgICAgcG9seWdvbk1ldGFEYXRhSWRzXG4gICAgKTtcbiAgfVxuXG4gIC8vIHJlZ2lzdGVyIGxheWVyIGFuaW1hdGlvbiBkb21haW4sXG4gIC8vIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGxheWVyIGRhdGEgaXMgY2FsY3VsYXRlZFxuICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4odXBkYXRlZFN0YXRlKTtcblxuICAvLyB0cnkgdG8gcHJvY2VzcyBsYXllck1lcmdlcnMgYWZ0ZXIgZGF0YXNldCtkYXRhc2V0TWVyZ2Vyc1xuICB1cGRhdGVkU3RhdGUgPVxuICAgIGxheWVyTWVyZ2VycyAmJiBsYXllck1lcmdlcnMubGVuZ3RoID4gMFxuICAgICAgPyBhcHBseU1lcmdlcnNVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwge1xuICAgICAgICAgIG1lcmdlcnM6IGxheWVyTWVyZ2VycyxcbiAgICAgICAgICBwb3N0TWVyZ2VyUGF5bG9hZDogey4uLnBvc3RNZXJnZXJQYXlsb2FkLCBsYXllck1lcmdlcnM6IFtdfVxuICAgICAgICB9KVxuICAgICAgOiB1cGRhdGVkU3RhdGU7XG5cbiAgLy8gY2VudGVyIHRoZSBtYXAgb25jZSB0aGUgZGF0YXNldCBpcyBjcmVhdGVkXG4gIGlmIChuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5jZW50ZXJNYXApIHtcbiAgICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKG5ld0xheWVycyk7XG4gICAgaWYgKGJvdW5kcykge1xuICAgICAgY29uc3QgcGFkZGluZyA9IG9wdGlvbnM/LnBhZGRpbmc7XG4gICAgICBjb25zdCBmaXRCb3VuZHNUYXNrID0gQUNUSU9OX1RBU0tfRklUX0JPVU5EUygpLm1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmaXRNYXBCb3VuZHMoYm91bmRzLCBwYWRkaW5nKTtcbiAgICAgIH0pO1xuICAgICAgdXBkYXRlZFN0YXRlID0gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBmaXRCb3VuZHNUYXNrKTtcbiAgICB9XG4gIH1cblxuICAvLyBuZWVkIHRvIGNlbnRlciBtYXAgaGVyZSBpZiB3ZSBoYXZlIG5ldyBsYXllcnNcbiAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbn1cblxuLyoqXG4gKiBSZW5hbWUgYW4gZXhpc3RpbmcgZGF0YXNldCBpbiBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7bGFiZWw6IGFjdGlvbi5sYWJlbH19KTtcbn1cblxuY29uc3QgQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyA9IFsnbGFiZWwnLCAnY29sb3InLCAnbWV0YWRhdGEnXTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgcHJvcGVydGllcyBiZWZvcmUgdXBkYXRpbmcgdGhlIGRhdGFzZXQuXG4gKiBNYWtlcyBzdXJlIGVhY2ggcHJvcGVydHkgaXMgaW4gdGhlIGFsbG93ZWQgbGlzdFxuICogTWFrZXMgc3VyZSBjb2xvciB2YWx1ZSBpcyBSR0JcbiAqIFBlcmZvcm1zIGRlZXAgbWVyZ2Ugd2hlbiB1cGRhdGluZyBtZXRhZGF0YVxuICovXG5jb25zdCB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyA9IChwcm9wcywgZGF0YXNldCkgPT4ge1xuICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzKS5yZWR1Y2UoKGFjYywgZW50cnkpID0+IHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBlbnRyeTtcbiAgICAvLyBpcyBpdCBhbGxvd2VkID9cbiAgICBpZiAoIUFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBhcmUgYWRkaW5nIGEgY29sb3IgYnV0IGl0IGlzIG5vdCBSR0Igd2UgZG9uJ3QgYWNjZXB0IHRoZSB2YWx1ZVxuICAgIC8vIGluIHRoZSBmdXR1cmUgYXMgd2UgYWRkIG1vcmUgcHJvcHMgd2Ugc2hvdWxkIGNoYW5nZSB0aGlzIGlmIGludG8gYSBzd2l0Y2hcbiAgICBpZiAoa2V5ID09PSAnY29sb3InICYmICFpc1JnYkNvbG9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBkbyB3ZSBuZWVkIGRlZXAgbWVyZ2UgP1xuICAgIHJldHVybiB7Li4uYWNjLCBba2V5XTogaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyBkZWVwbWVyZ2UoZGF0YXNldFtrZXldIHx8IHt9LCB2YWx1ZSkgOiB2YWx1ZX07XG4gIH0sIHt9KTtcblxuICByZXR1cm4gdmFsaWRhdGVkUHJvcHM7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBEYXRhc2V0IHByb3BzIChsYWJlbCwgY29sb3IsIG1ldGEpLiBEbyBub3QgdXNlIHRvIHVwZGF0ZSBkYXRhIG9yIGFueSByZWxhdGVkIHByb3BlcnRpZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgcHJvcHN9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGNvbnN0IGV4aXN0aW5nID0gZGF0YXNldHNbZGF0YUlkXTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzKHByb3BzLCBleGlzdGluZyk7XG4gICAgLy8gIHZhbGlkYXRlIHByb3BzOiBqdXN0IGNvbG9yIGZvciBub3dcbiAgICAvLyAgd2Ugb25seSBhbGxvdyBsYWJlbCwgY29sb3IgYW5kIG1ldGEgdG8gYmUgdXBkYXRlZFxuICAgIC8vIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogUmUtdmFsaWRhdGUgYSBsaXZlIGxheWVyIGFnYWluc3QgYSB0YWJsZSB3aG9zZSBzY2hlbWEganVzdCBjaGFuZ2VkLlxuICpcbiAqIFRoZSBsYXllcidzIGNvbHVtbnMgLyB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgLyB0ZXh0LWxhYmVsIGZpZWxkcyBhcmUgZmlyc3RcbiAqIHJlbWFwcGVkIHRvIHRoZWlyIG5ldyBuYW1lcyAodmlhIGByZW5hbWVzYCkgc28gdGhlIGxheWVyIGZvbGxvd3MgYSByZW5hbWVcbiAqIGluc3RlYWQgb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZCwgdGhlbiByZS12YWxpZGF0ZWQgd2l0aFxuICogYHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhYCDigJQgdGhlIHNhbWUgc2VyaWFsaXplICsgdmFsaWRhdGUgcGF0aCB1c2VkXG4gKiB3aGVuIGEgc2F2ZWQgY29uZmlnIGlzIGxvYWRlZCBhZ2FpbnN0IG5ldyBkYXRhLiBSZXR1cm5zIGBudWxsYCB3aGVuIGFcbiAqIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lICh0aGUgbGF5ZXIgY2FuIG5vIGxvbmdlciBiZSBidWlsdCkuXG4gKi9cbmZ1bmN0aW9uIHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShcbiAgbGF5ZXI6IExheWVyLFxuICByZW5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBuZXdUYWJsZTogS2VwbGVyVGFibGUsXG4gIHN0YXRlOiBWaXNTdGF0ZVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3QgY29uZmlnUGF0Y2g6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCBjb2x1bW5zXG4gIGNvbnN0IGNvbHVtbnNQYXRjaDogUmVjb3JkPHN0cmluZywge3ZhbHVlOiBzdHJpbmcgfCBudWxsOyBmaWVsZElkeDogbnVtYmVyfT4gPSB7fTtcbiAgbGV0IGNvbHVtbnNDaGFuZ2VkID0gZmFsc2U7XG4gIE9iamVjdC5lbnRyaWVzKGxheWVyLmNvbmZpZy5jb2x1bW5zIHx8IHt9KS5mb3JFYWNoKChbY2tleSwgY29sXSkgPT4ge1xuICAgIGlmIChjb2w/LnZhbHVlICYmIHJlbmFtZXNbY29sLnZhbHVlXSkge1xuICAgICAgY29sdW1uc1BhdGNoW2NrZXldID0gey4uLmNvbCwgdmFsdWU6IHJlbmFtZXNbY29sLnZhbHVlXX07XG4gICAgICBjb2x1bW5zQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9KTtcbiAgaWYgKGNvbHVtbnNDaGFuZ2VkKSB7XG4gICAgY29uZmlnUGF0Y2guY29sdW1ucyA9IHsuLi5sYXllci5jb25maWcuY29sdW1ucywgLi4uY29sdW1uc1BhdGNofTtcbiAgfVxuXG4gIC8vIGZvbGxvdyByZW5hbWVkIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAoY29sb3JGaWVsZCwgc2l6ZUZpZWxkLCAuLi4pXG4gIE9iamVjdC52YWx1ZXMobGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZH0pID0+IHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IGxheWVyLmNvbmZpZ1tmaWVsZF07XG4gICAgaWYgKGZpZWxkQ29uZmlnPy5uYW1lICYmIHJlbmFtZXNbZmllbGRDb25maWcubmFtZV0pIHtcbiAgICAgIGNvbmZpZ1BhdGNoW2ZpZWxkXSA9IHsuLi5maWVsZENvbmZpZywgbmFtZTogcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXX07XG4gICAgfVxuICB9KTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCB0ZXh0LWxhYmVsIGZpZWxkc1xuICBpZiAobGF5ZXIuY29uZmlnLnRleHRMYWJlbD8ubGVuZ3RoKSB7XG4gICAgY29uc3QgdGV4dExhYmVsID0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbC5tYXAodGwgPT5cbiAgICAgIHRsLmZpZWxkICYmIHJlbmFtZXNbdGwuZmllbGQubmFtZV1cbiAgICAgICAgPyB7Li4udGwsIGZpZWxkOiB7Li4udGwuZmllbGQsIG5hbWU6IHJlbmFtZXNbdGwuZmllbGQubmFtZV19fVxuICAgICAgICA6IHRsXG4gICAgKTtcbiAgICBpZiAodGV4dExhYmVsLnNvbWUoKHRsLCBpKSA9PiB0bCAhPT0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbFtpXSkpIHtcbiAgICAgIGNvbmZpZ1BhdGNoLnRleHRMYWJlbCA9IHRleHRMYWJlbDtcbiAgICB9XG4gIH1cblxuICAvLyBzaGFsbG93LWNvcHkgdGhlIGxheWVyIHNvIHdlIG5ldmVyIG11dGF0ZSByZWR1eCBzdGF0ZTsgdGhlIGNvcHkga2VlcHMgdGhlXG4gIC8vIHByb3RvdHlwZSBtZXRob2RzIChgdmlzdWFsQ2hhbm5lbHNgIGdldHRlciwgYGlzVmFsaWRUb1NhdmVgKSBzbyBpdFxuICAvLyBzZXJpYWxpemVzIGV4YWN0bHkgbGlrZSBhIGxpdmUgbGF5ZXIuXG4gIGNvbnN0IGxheWVyQ29weSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobGF5ZXIpKSwgbGF5ZXIpO1xuICBpZiAoT2JqZWN0LmtleXMoY29uZmlnUGF0Y2gpLmxlbmd0aCkge1xuICAgIGxheWVyQ29weS5jb25maWcgPSB7Li4ubGF5ZXIuY29uZmlnLCAuLi5jb25maWdQYXRjaH07XG4gIH1cblxuICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICBuZXdUYWJsZSxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgbGF5ZXJDb3B5LFxuICAgIHN0YXRlLnNjaGVtYVxuICApO1xuXG4gIHJldHVybiB2YWxpZGF0ZWQgJiYgdmFsaWRhdGVkLmhhc0FsbENvbHVtbnMoKSA/IHZhbGlkYXRlZCA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGFuIGV4aXN0aW5nIGRhdGFzZXQncyBzY2hlbWEgKGNvbHVtbnMvZmllbGRzKSBpbiBwbGFjZSBhbmQgcmVjb25jaWxlXG4gKiBldmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlZCB0aGUgb2xkIGNvbHVtbnM6IGZpbHRlcnMsIGxheWVycywgdG9vbHRpcCBmaWVsZHMsXG4gKiBwaW5uZWQgY29sdW1ucyBhbmQgc29ydCBzdGF0ZS4gVGhlIGRhdGFzZXQga2VlcHMgaXRzIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhLlxuICpcbiAqIGBhY3Rpb24uZGF0YWAgaXMgdGhlIHNhbWUgc2hhcGUgYEtlcGxlclRhYmxlLmltcG9ydERhdGFgIGFjY2VwdHMgKGB7Y29scyxcbiAqIGZpZWxkcywgYXJyb3dUYWJsZX1gIHdoZW4gcmVwbGFjaW5nIGNvbHVtbnMpLiBgYWN0aW9uLnJlbmFtZXNgIGlzIGFuIG9wdGlvbmFsXG4gKiBvbGQg4oaSIG5ldyBjb2x1bW4tbmFtZSBtYXAgc28gbGF5ZXJzL2ZpbHRlcnMvdG9vbHRpcHMgZm9sbG93IGEgcmVuYW1lIGluc3RlYWRcbiAqIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQuXG4gKlxuICogUmVjb25jaWxpYXRpb24gaXMgbmFtZS1iYXNlZCDigJQgdGhlIHNhbWUgd2F5IGtlcGxlci5nbCBsb2FkcyBhIHNhdmVkIGNvbmZpZ1xuICogYWdhaW5zdCBjaGFuZ2VkIGRhdGEuIEEgbGF5ZXIgd2hvc2UgcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgaXMgcmVtb3ZlZDsgYVxuICogZmlsdGVyIG9uIGEgZ29uZSBjb2x1bW4gaXMgZHJvcHBlZCAob3IgdGhlIGRhdGFzZXQgaXMgc3BsaWNlZCBvdXQgb2YgYSBzeW5jZWRcbiAqIGZpbHRlcik7IHRvb2x0aXAgZmllbGRzIGFyZSByZW1hcHBlZCAvIGRyb3BwZWQuXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIGRhdGEsIHJlbmFtZXMgPSB7fX0gPSBhY3Rpb247XG4gIGNvbnN0IGV4aXN0aW5nID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFleGlzdGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIDEuIHJlYnVpbGQgdGhlIHRhYmxlIHNjaGVtYSBpbiBwbGFjZSAoc2FtZSBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YSlcbiAgY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHt9KTtcbiAgbmV3VGFibGUudXBkYXRlU2NoZW1hKGRhdGEpO1xuXG4gIC8vIFRoZSBkYXRhIGNvbnRhaW5lciBpcyByZWJ1aWx0IHVuc29ydGVkIGFuZCB1bmZpbHRlcmVkOyByZXNldCB0aGUgdGFibGUnc1xuICAvLyB2aWV3IHN0YXRlIHRoYXQgaW5kZXhlcyBpbnRvIHRoZSBvbGQgY29udGFpbmVyLlxuICBuZXdUYWJsZS5maWx0ZXJlZElkeENQVSA9IG5ld1RhYmxlLmFsbEluZGV4ZXM7XG4gIG5ld1RhYmxlLmZpbHRlclJlY29yZENQVSA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydENvbHVtbiA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydE9yZGVyID0gbnVsbDtcbiAgbmV3VGFibGUucGlubmVkQ29sdW1ucyA9IChleGlzdGluZy5waW5uZWRDb2x1bW5zIHx8IFtdKVxuICAgIC5tYXAobmFtZSA9PiByZW5hbWVzW25hbWVdID8/IG5hbWUpXG4gICAgLmZpbHRlcihuYW1lID0+IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5hbWUpID4gLTEpO1xuXG4gIGNvbnN0IG5ld0ZpZWxkc0J5TmFtZSA9IG5ldyBTZXQobmV3VGFibGUuZmllbGRzLm1hcChmID0+IGYubmFtZSkpO1xuICBjb25zdCBuZXdEYXRhc2V0cyA9IHsuLi5zdGF0ZS5kYXRhc2V0cywgW2RhdGFJZF06IG5ld1RhYmxlfTtcblxuICAvLyAyLiByZWNvbmNpbGUgZmlsdGVyc1xuICBsZXQgbmV3RmlsdGVycyA9IHN0YXRlLmZpbHRlcnNcbiAgICAubWFwKGZpbHRlciA9PiB7XG4gICAgICBjb25zdCB2aSA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhSWQpO1xuICAgICAgaWYgKHZpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROYW1lID0gZmlsdGVyLm5hbWVbdmldO1xuICAgICAgY29uc3QgbmV3TmFtZSA9IHJlbmFtZXNbb2xkTmFtZV0gPz8gb2xkTmFtZTtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gbmV3VGFibGUuZ2V0Q29sdW1uRmllbGRJZHgobmV3TmFtZSk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA9PT0gLTEpIHtcbiAgICAgICAgLy8gY29sdW1uIGlzIGdvbmU6IGRyb3AgYSBzaW5nbGUtZGF0YXNldCBmaWx0ZXIsIHNwbGljZSBpdCBvdXQgb2YgYSBzeW5jZWQgb25lXG4gICAgICAgIHJldHVybiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZpLCBuZXdEYXRhc2V0cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbHVtbiBwcmVzZW50IChwb3NzaWJseSByZW5hbWVkKTogcmUtcmVzb2x2ZSBuYW1lL2ZpZWxkSWR4L2RvbWFpblxuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShmaWx0ZXIsIG5ld0RhdGFzZXRzLCBkYXRhSWQsIG5ld05hbWUsIHZpLCB7XG4gICAgICAgIG1lcmdlRG9tYWluOiB2aSA+IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCF1cGRhdGVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBicnVzaCBmaWx0ZXJzIGNhcnJ5IGEgc2Vjb25kIHktYXhpcyBmaWVsZDsgZm9sbG93IGEgcmVuYW1lIHRoZXJlIHRvb1xuICAgICAgY29uc3QgeUF4aXMgPVxuICAgICAgICB1cGRhdGVkLnlBeGlzPy5uYW1lICYmXG4gICAgICAgIChyZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV1cbiAgICAgICAgICA/IHsuLi51cGRhdGVkLnlBeGlzLCBuYW1lOiByZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV19XG4gICAgICAgICAgOiBuZXdGaWVsZHNCeU5hbWUuaGFzKHVwZGF0ZWQueUF4aXMubmFtZSlcbiAgICAgICAgICA/IHVwZGF0ZWQueUF4aXNcbiAgICAgICAgICA6IG51bGwpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi51cGRhdGVkLFxuICAgICAgICB5QXhpcyxcbiAgICAgICAgLy8gY2xhbXAgdGhlIHVzZXIncyBwcmV2aW91cyBzZWxlY3Rpb24gaW50byB0aGUgbmV3IGRvbWFpbiBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHJlc2V0dGluZyBpdCB0byB0aGUgZnVsbCByYW5nZVxuICAgICAgICB2YWx1ZTogYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihmaWx0ZXIudmFsdWUsIHVwZGF0ZWQpXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKSBhcyBGaWx0ZXJbXTtcblxuICAvLyByZWFzc2lnbiBHUFUgY2hhbm5lbHMgbm93IHRoYXQgdGhlIGZpbHRlciBsaXN0IGlzIHNldHRsZWRcbiAgbmV3RmlsdGVycyA9IG5ld0ZpbHRlcnMubWFwKGZpbHRlciA9PlxuICAgIGZpbHRlci5ncHUgPyBhc3NpZ25HcHVDaGFubmVsKHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBuZXdGaWx0ZXJzKSwgbmV3RmlsdGVycykgOiBmaWx0ZXJcbiAgKTtcblxuICAvLyAzLiByZWJ1aWxkIHRoZSB0YWJsZSdzIGZpbHRlciBzdGF0ZSAoZ3B1RmlsdGVyIC8gZmlsdGVyUmVjb3JkIC8gZmlsdGVyZWRJbmRleClcbiAgbmV3VGFibGUuZmlsdGVyVGFibGUoXG4gICAgbmV3RmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhSWQpLFxuICAgIHt9XG4gICk7XG5cbiAgLy8gNC4gcmVjb25jaWxlIGxheWVyc1xuICBjb25zdCBsYXllcnNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gc3RhdGUubGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH1cbiAgICBjb25zdCByZWNvbmNpbGVkID0gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKGxheWVyLCByZW5hbWVzLCBuZXdUYWJsZSwgc3RhdGUpO1xuICAgIGlmIChyZWNvbmNpbGVkKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlZDtcbiAgICB9XG4gICAgbGF5ZXJzVG9SZW1vdmUucHVzaChsYXllci5pZCk7XG4gICAgcmV0dXJuIGxheWVyOyAvLyBwbGFjZWhvbGRlciwgZHJvcHBlZCB2aWEgcmVtb3ZlTGF5ZXJVcGRhdGVyIGJlbG93XG4gIH0pO1xuXG4gIC8vIDUuIHJlY29uY2lsZSB0b29sdGlwIGZpZWxkc1RvU2hvd1xuICBsZXQgaW50ZXJhY3Rpb25Db25maWcgPSBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZztcbiAgY29uc3QgdG9vbHRpcCA9IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwO1xuICBjb25zdCBmaWVsZHNUb1Nob3cgPSB0b29sdGlwPy5jb25maWc/LmZpZWxkc1RvU2hvdz8uW2RhdGFJZF07XG4gIGlmIChmaWVsZHNUb1Nob3cpIHtcbiAgICBjb25zdCBuZXh0RmllbGRzVG9TaG93ID0gZmllbGRzVG9TaG93LmZsYXRNYXAoZiA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gcmVuYW1lc1tmLm5hbWVdID8/IGYubmFtZTtcbiAgICAgIHJldHVybiBuZXdGaWVsZHNCeU5hbWUuaGFzKG5hbWUpID8gW3suLi5mLCBuYW1lfV0gOiBbXTtcbiAgICB9KTtcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi50b29sdGlwLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAuLi50b29sdGlwLmNvbmZpZyxcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHsuLi50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csIFtkYXRhSWRdOiBuZXh0RmllbGRzVG9TaG93fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG5ld0RhdGFzZXRzLFxuICAgIGZpbHRlcnM6IG5ld0ZpbHRlcnMsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICAvLyA2LiBkcm9wIGxheWVycyB0aGF0IGxvc3QgdGhlaXIgcmVxdWlyZWQgY29sdW1uc1xuICBuZXh0U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIG5leHRTdGF0ZSk7XG5cbiAgLy8gNy4gcmVjb21wdXRlIGxheWVyIGRvbWFpbnMgKyBkYXRhIGZvciB0aGUgdXBkYXRlZCBkYXRhc2V0XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIGRhdGFJZCk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IEFycmF5LmZyb20oZmlsZXMpLnJlZHVjZShcbiAgICAoYWNjdSwgZiwgaSkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGYsIGkpKShhY2N1KSxcbiAgICB7fVxuICApO1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nID0ge1xuICAgIGZpbGVDYWNoZTogW10sXG4gICAgZmlsZXNUb0xvYWQ6IGZpbGVzLFxuICAgIG9uRmluaXNoXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gbWVyZ2VfKHtmaWxlTG9hZGluZ1Byb2dyZXNzLCBmaWxlTG9hZGluZ30pKHN0YXRlKTtcblxuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ0RvbmUnfVxuICB9KTtcblxuICAvLyBzYXZlIHByb2Nlc3NlZCBmaWxlIHRvIGZpbGVDYWNoZVxuICBjb25zdCBzdGF0ZVdpdGhDYWNoZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZUNhY2hlfSkpKHN0YXRlV2l0aFByb2dyZXNzKTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufVxuXG4vLyB3aXRoVGFzazxUPihzdGF0ZTogVCwgdGFzazogYW55KTogVFxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlVXBkYXRlcihzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBbZmlsZSwgLi4ucmVtYWluaW5nRmlsZXNUb0xvYWRdID0gZmlsZXNUb0xvYWQ7XG5cbiAgLy8gc2F2ZSBmaWxlc1RvTG9hZCB0byBzdGF0ZVxuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVzVG9Mb2FkOiByZW1haW5pbmdGaWxlc1RvTG9hZH0pKShzdGF0ZSk7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMCwgbWVzc2FnZTogJ2xvYWRpbmcuLi4nfVxuICB9KTtcblxuICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgZmlsZSxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgbG9hZGVycyxcbiAgICAgIGxvYWRPcHRpb25zXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnM6IExvYWRlcltdID0gW10sIGxvYWRPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnMsIGxvYWRPcHRpb25zfSkuYmltYXAoXG4gICAgLy8gcHJldHRpZXIgaWdub3JlXG4gICAgLy8gc3VjY2Vzc1xuICAgIGdlbiA9PlxuICAgICAgbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgIGdlbixcbiAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgb25GaW5pc2g6IHJlc3VsdCA9PlxuICAgICAgICAgIHByb2Nlc3NGaWxlQ29udGVudCh7XG4gICAgICAgICAgICBjb250ZW50OiByZXN1bHQsXG4gICAgICAgICAgICBmaWxlQ2FjaGVcbiAgICAgICAgICB9KVxuICAgICAgfSksXG5cbiAgICAvLyBlcnJvclxuICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZS5uYW1lLCBlcnIpXG4gICk7XG59XG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbnRlbnQsIGZpbGVDYWNoZX0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAncHJvY2Vzc2luZy4uLid9XG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudCwgZmlsZUNhY2hlfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gbG9hZEZpbGVTdGVwU3VjY2Vzcyh7ZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsIGZpbGVDYWNoZTogcmVzdWx0fSksXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGNvbnRlbnQuZmlsZU5hbWUsIGVycilcbiAgICApXG4gICk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb2dyZXNzKHByZXZQcm9ncmVzcyA9IHt9LCBwcm9ncmVzcykge1xuICAvLyBUaGlzIGhhcHBlbnMgd2hlbiByZWNlaXZpbmcgcXVlcnkgbWV0YWRhdGEgb3Igb3RoZXIgY2FzZXMgd2UgZG9uJ3RcbiAgLy8gaGF2ZSBhbiB1cGRhdGUgZm9yIHRoZSB1c2VyLlxuICBpZiAoIXByb2dyZXNzIHx8ICFwcm9ncmVzcy5wZXJjZW50KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwZXJjZW50OiBwcm9ncmVzcy5wZXJjZW50XG4gIH07XG59XG5cbi8qKlxuICogZ2V0cyBjYWxsZWQgd2l0aCBwYXlsb2FkID0gQXN5bmNHZW5lcmF0b3I8Pz8/PlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG5leHRGaWxlQmF0Y2hVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Z2VuLCBmaWxlTmFtZSwgcHJvZ3Jlc3MsIGFjY3VtdWxhdGVkLCBvbkZpbmlzaH1cbiAgfTogVmlzU3RhdGVBY3Rpb25zLk5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczogcGFyc2VQcm9ncmVzcyhzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzW2ZpbGVOYW1lXSwgcHJvZ3Jlc3MpXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhzdGF0ZVdpdGhQcm9ncmVzcywgW1xuICAgIC4uLihnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nICYmXG4gICAgZmlsZU5hbWUuZW5kc1dpdGgoJ2Fycm93JykgJiZcbiAgICBhY2N1bXVsYXRlZD8uZGF0YT8ubGVuZ3RoID4gMFxuICAgICAgPyBbXG4gICAgICAgICAgLy8gU2tpcCBjb21wYWN0aW9uIHdoaWxlIGJhdGNoZXMgYXJlIHN0aWxsIGFycml2aW5nLiBUaGUgY29tcGxldGVkXG4gICAgICAgICAgLy8gZmlsZSBpcyBjb21wYWN0ZWQgb25jZSBpbiBwcm9jZXNzRmlsZUNvbnRlbnQuXG4gICAgICAgICAgUFJPQ0VTU19GSUxFX0RBVEEoe1xuICAgICAgICAgICAgY29udGVudDogey4uLmFjY3VtdWxhdGVkLCBza2lwQXJyb3dDb21wYWN0OiB0cnVlfSxcbiAgICAgICAgICAgIGZpbGVDYWNoZTogW11cbiAgICAgICAgICB9KS5iaW1hcChcbiAgICAgICAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZXNTdWNjZXNzKHJlc3VsdCksXG4gICAgICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICA6IFtdKSxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2hcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICApXG4gIF0pO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxvYWRpbmcgZmlsZSBlcnJvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBmaWxlTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIHVwZGF0ZSB1aSB3aXRoIGVycm9yIG1lc3NhZ2VcbiAgQ29uc29sZS53YXJuKGVycm9yKTtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGV9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBraWNrIG9mZiBuZXh0IGZpbGUgb3IgZmluaXNoXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufTtcblxuLyoqXG4gKiBXaGVuIHNlbGVjdCBkYXRhc2V0IGZvciBleHBvcnQsIGFwcGx5IGNwdSBmaWx0ZXIgdG8gc2VsZWN0ZWQgZGF0YXNldFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5Q1BVRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLkFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhcHBseSBjcHVGaWx0ZXJcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjY3UsIGlkKSA9PiBmaWx0ZXJEYXRhc2V0Q1BVKGFjY3UsIGlkKSwgc3RhdGUpO1xufTtcblxuLyoqXG4gKiBVc2VyIGlucHV0IHRvIHVwZGF0ZSB0aGUgaW5mbyBvZiB0aGUgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwSW5mb1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtYXBJbmZvOiB7XG4gICAgLi4uc3RhdGUubWFwSW5mbyxcbiAgICAuLi5hY3Rpb24uaW5mb1xuICB9XG59KTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBBbGwgbGF5ZXIgZG9tYWluIGFuZCBsYXllciBkYXRhIG9mIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0TGF5ZXJzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFzZXRzOiBEYXRhc2V0c1xuKToge3N0YXRlOiBWaXNTdGF0ZTsgbmV3TGF5ZXJzOiBMYXllcltdfSB7XG4gIGNvbnN0IGVtcHR5OiBMYXllcltdID0gW107XG4gIGNvbnN0IGRlZmF1bHRMYXllcnMgPSBPYmplY3QudmFsdWVzKGRhdGFzZXRzKS5yZWR1Y2UoKGFjY3U6IExheWVyW10sIGRhdGFzZXQpID0+IHtcbiAgICBjb25zdCBmb3VuZExheWVycyA9IGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgICByZXR1cm4gZm91bmRMYXllcnMgJiYgZm91bmRMYXllcnMubGVuZ3RoID8gYWNjdS5jb25jYXQoZm91bmRMYXllcnMpIDogYWNjdTtcbiAgfSwgZW1wdHkpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCAuLi5kZWZhdWx0TGF5ZXJzXSxcbiAgICAgIGxheWVyT3JkZXI6IFtcbiAgICAgICAgLy8gcHV0IG5ldyBsYXllcnMgb24gdG9wIG9mIG9sZCBvbmVzIGluIHJldmVyc2VcbiAgICAgICAgLi4uZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMoZGVmYXVsdExheWVycyksXG4gICAgICAgIC4uLnN0YXRlLmxheWVyT3JkZXJcbiAgICAgIF1cbiAgICB9LFxuICAgIG5ld0xheWVyczogZGVmYXVsdExheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRlZmF1bHQgdG9vbHRpcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFRvb2x0aXBzKHN0YXRlLCBkYXRhc2V0KSB7XG4gIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBmaW5kRmllbGRzVG9TaG93KHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIG1heERlZmF1bHRUb29sdGlwczogc3RhdGUubWF4RGVmYXVsdFRvb2x0aXBzXG4gIH0pO1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LFxuICAgIC4uLnRvb2x0aXBGaWVsZHNcbiAgfTtcblxuICByZXR1cm4gc2V0KFsnaW50ZXJhY3Rpb25Db25maWcnLCAndG9vbHRpcCcsICdjb25maWcnLCAnZmllbGRzVG9TaG93J10sIG1lcmdlZCwgc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUgfHwgYFVudGl0bGVkIEZpbGUgJHtpbmRleH1gO1xuICByZXR1cm4ge1xuICAgIFtmaWxlTmFtZV06IHtcbiAgICAgIC8vIHBlcmNlbnQgb2YgY3VycmVudCBmaWxlXG4gICAgICBwZXJjZW50OiAwLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtmaWxlTmFtZSwgcHJvZ3Jlc3N9KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIHBpY2tfKCdmaWxlTG9hZGluZ1Byb2dyZXNzJykocGlja18oZmlsZU5hbWUpKG1lcmdlXyhwcm9ncmVzcykpKShzdGF0ZSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgbGF5ZXIgZG9tYWlucyBmb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YTxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdXBkYXRlZEZpbHRlcj86IEZpbHRlclxuKTogUyB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0eXBlb2YgZGF0YUlkID09PSAnc3RyaW5nJyA/IFtkYXRhSWRdIDogZGF0YUlkO1xuICBjb25zdCBuZXdMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKChvbGRMYXllciwgaSkgPT4ge1xuICAgIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkICYmIGRhdGFJZHMuaW5jbHVkZXMob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGF5ZXIgZG9tYWluIGlmIGZpbHRlciBoYXMgZml4ZWQgZG9tYWluXG4gICAgICBjb25zdCBuZXdMYXllciA9XG4gICAgICAgIHVwZGF0ZWRGaWx0ZXIgJiYgdXBkYXRlZEZpbHRlci5maXhlZERvbWFpblxuICAgICAgICAgID8gb2xkTGF5ZXJcbiAgICAgICAgICA6IG9sZExheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzLCB1cGRhdGVkRmlsdGVyKTtcblxuICAgICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2ldKTtcblxuICAgICAgbmV3TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2gobGF5ZXJEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJzLnB1c2gob2xkTGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2goc3RhdGUubGF5ZXJEYXRhW2ldKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV3TGF5ZXJEYXRhXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQW5pbWF0aW9uRG9tYWluPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMpOiBTIHtcbiAgLy8gbWVyZ2UgYWxsIGFuaW1hdGFibGUgbGF5ZXIgZG9tYWluIGFuZCB1cGRhdGUgZ2xvYmFsIGNvbmZpZ1xuICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgZG9tYWluOiBudWxsLFxuICAgICAgICBpc0FuaW1hdGluZzogZmFsc2UsXG4gICAgICAgIHRpbWVTdGVwczogbnVsbCxcbiAgICAgICAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF5ZXJEb21haW5zID0gYW5pbWF0YWJsZUxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5hbmltYXRpb24uZG9tYWluIHx8IFtdKTtcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBtZXJnZWREb21haW4gPSBtZXJnZVRpbWVEb21haW5zKGxheWVyRG9tYWlucyk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKG1lcmdlZERvbWFpbik7XG5cbiAgLy8gbWVyZ2UgdGltZVN0ZXBzXG4gIGxldCBtZXJnZWRUaW1lU3RlcHM6IG51bWJlcltdIHwgbnVsbCA9IHVuaXE8bnVtYmVyPihcbiAgICBhbmltYXRhYmxlTGF5ZXJzLnJlZHVjZSgoYWNjdSwgbGF5ZXIpID0+IHtcbiAgICAgIGFjY3UucHVzaCguLi4obGF5ZXIuY29uZmlnLmFuaW1hdGlvbi50aW1lU3RlcHMgfHwgW10pKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKVxuICApLnNvcnQoKTtcblxuICBtZXJnZWRUaW1lU3RlcHMgPSBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoID8gbWVyZ2VkVGltZVN0ZXBzIDogbnVsbDtcblxuICAvLyBUT0RPOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZHVyYXRpb24gY2FsY3VsYXRpb25cbiAgY29uc3QgZHVyYXRpb24gPSBtZXJnZWRUaW1lU3RlcHNcbiAgICA/IChCQVNFX1NQRUVEICogKDEwMDAgLyBGUFMpKSAvIG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggLyAoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnNwZWVkIHx8IDEpXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGRvbWFpbjogbWVyZ2VkRG9tYWluLFxuICAgICAgZGVmYXVsdFRpbWVGb3JtYXQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRpbWVTdGVwczogbWVyZ2VkVGltZVN0ZXBzXG4gICAgfVxuICB9O1xuXG4gIC8vIHJlc2V0IGN1cnJlbnRUaW1lIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgY29uc3Qgc3luY2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycz8uZmluZChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIGFzXG4gICAgfCBUaW1lUmFuZ2VGaWx0ZXJcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvLyBpZiBzeW5jZWQgZmlsdGVyIGV4aXN0IHdlZSBuZWVkIHRvIG1lcmdlIGFuaW1hdGlvbkNvbmZpZyBhbmQgZmlsdGVyIGRvbWFpbnNcbiAgLy8gYW5kIHZhbGlkYXRlIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0aGUgbmV3IG1lcmdlZCBkb21haW5cbiAgY29uc3QgbmV3QW5pbWF0aW9uRG9tYWluID0gc3luY2VkRmlsdGVyXG4gICAgPyBtZXJnZVRpbWVEb21haW5zKFttZXJnZWREb21haW4sIHN5bmNlZEZpbHRlci5kb21haW5dKVxuICAgIDogbWVyZ2VkRG9tYWluO1xuICBjb25zdCBjdXJyZW50VGltZSA9IGlzSW5SYW5nZShzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsIG5ld0FuaW1hdGlvbkRvbWFpbilcbiAgICA/IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgIDogbmV3QW5pbWF0aW9uRG9tYWluWzBdO1xuXG4gIGlmIChjdXJyZW50VGltZSAhPT0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lKSB7XG4gICAgLy8gaWYgY3VycmVudFRpbWUgY2hhbmdlZCwgbmVlZCB0byBjYWxsIGFuaW1hdGlvblRpbWVVcGRhdGVyIHRvIHJlIGNhbGwgZm9ybWF0TGF5ZXJEYXRhXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV4dFN0YXRlLCB7dmFsdWU6IGN1cnJlbnRUaW1lfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlZGl0b3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFZGl0b3JNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bW9kZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JNb2RlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBza2V0Y2hlc0VuYWJsZWQgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzO1xuICBpZiAoXG4gICAgIXNrZXRjaGVzRW5hYmxlZCAmJlxuICAgIChtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19QT0lOVCB8fCBtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19MSU5FU1RSSU5HKVxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgbW9kZSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcbn07XG5cbi8vIGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKGZlYXR1cmUpID0+ICh7Li4uZmVhdHVyZSwgaWQ6IGZlYXR1cmUuaWR9KTtcbi8qKlxuICogVXBkYXRlIGVkaXRvciBmZWF0dXJlc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZXMgPSBbXX06IFZpc1N0YXRlQWN0aW9ucy5TZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbGFzdEZlYXR1cmUgPSBmZWF0dXJlcy5sZW5ndGggJiYgZmVhdHVyZXNbZmVhdHVyZXMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAvLyBvbmx5IHNhdmUgbm9uZSBmaWx0ZXIgZmVhdHVyZXMgdG8gZWRpdG9yXG4gICAgICBmZWF0dXJlczogZmVhdHVyZXMuZmlsdGVyKGYgPT4gIWdldEZpbHRlcklkSW5GZWF0dXJlKGYpKSxcbiAgICAgIG1vZGU6XG4gICAgICAgIGxhc3RGZWF0dXJlICYmIGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LmlzQ2xvc2VkXG4gICAgICAgICAgPyBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5zaGFwZSA9PT0gJ1JlY3RhbmdsZSdcbiAgICAgICAgICAgID8gc3RhdGUuZWRpdG9yLm1vZGVcbiAgICAgICAgICAgIDogRURJVE9SX01PREVTLkVESVRcbiAgICAgICAgICA6IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHJpZXZlIGV4aXN0aW5nIGZlYXR1cmVcbiAgY29uc3Qge3NlbGVjdGVkRmVhdHVyZX0gPSBzdGF0ZS5lZGl0b3I7XG5cbiAgLy8gSWYgbm8gZmVhdHVyZSBpcyBzZWxlY3RlZCB3ZSBjYW4gc2ltcGx5IHJldHVybiBzaW5jZSBubyBvcGVyYXRpb25zXG4gIGlmICghc2VsZWN0ZWRGZWF0dXJlKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gVE9ETzogY2hlY2sgaWYgdGhlIGZlYXR1cmUgaGFzIGNoYW5nZWRcbiAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzLmZpbmQoZiA9PiBmLmlkID09PSBzZWxlY3RlZEZlYXR1cmUuaWQpO1xuXG4gIC8vIGlmIGZlYXR1cmUgaXMgcGFydCBvZiBhIGZpbHRlclxuICBjb25zdCBmaWx0ZXJJZCA9IGZlYXR1cmUgJiYgZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCAmJiBmZWF0dXJlKSB7XG4gICAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICAgIGlmIChmZWF0dXJlLnByb3BlcnRpZXMpIGZlYXR1cmUucHJvcGVydGllcy5iYm94ID0gYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTik7XG4gICAgY29uc3QgZmVhdHVyZVZhbHVlID0gZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVySWQpO1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGZpbCA9PiBmaWwuaWQgPT09IGZpbHRlcklkKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBmZWF0dXJlVmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gZmluZEVkaXRvckZlYXR1cmUoc3RhdGU6IFZpc1N0YXRlLCBmZWF0dXJlPzogRmVhdHVyZSB8IG51bGwpOiBGZWF0dXJlIHwgbnVsbCB7XG4gIGlmICghZmVhdHVyZT8uaWQpIHtcbiAgICByZXR1cm4gZmVhdHVyZSB8fCBudWxsO1xuICB9XG4gIGlmIChzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gZmVhdHVyZS5pZCkge1xuICAgIHJldHVybiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICB9XG4gIGNvbnN0IGZyb21FZGl0b3IgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZlYXR1cmUuaWQpO1xuICBpZiAoZnJvbUVkaXRvcikge1xuICAgIHJldHVybiBmcm9tRWRpdG9yO1xuICB9XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgICBpZiAoZmlsdGVyPy52YWx1ZSkge1xuICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZlYXR1cmU7XG59XG5cbi8qKlxuICogU2V0IHVzZXItZmFjaW5nIEdlb0pTT04gcHJvcGVydGllcyBvbiBhIHNrZXRjaCBvciBwb2x5Z29uLWZpbHRlciBmZWF0dXJlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgcHJvcGVydGllc306IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgc291cmNlID0gZmluZEVkaXRvckZlYXR1cmUoc3RhdGUsIGZlYXR1cmUpO1xuICBpZiAoIXNvdXJjZT8uaWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RmVhdHVyZSA9IG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzKHNvdXJjZSwgcHJvcGVydGllcyk7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUobmV4dEZlYXR1cmUpO1xuICBjb25zdCBuZXh0RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogZmlsdGVySWRcbiAgICAgID8gc3RhdGUuZWRpdG9yLmZlYXR1cmVzXG4gICAgICA6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5tYXAoaXRlbSA9PiAoaXRlbS5pZCA9PT0gbmV4dEZlYXR1cmUuaWQgPyBuZXh0RmVhdHVyZSA6IGl0ZW0pKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6XG4gICAgICBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gbmV4dEZlYXR1cmUuaWRcbiAgICAgICAgPyBuZXh0RmVhdHVyZVxuICAgICAgICA6IHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmVcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXh0RWRpdG9yXG4gIH07XG5cbiAgaWYgKCFmaWx0ZXJJZCkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA8IDApIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUobmV4dEZlYXR1cmUsIGZpbHRlcklkKVxuICB9KTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmVhdHVyZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgc2VsZWN0aW9uQ29udGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgbGV0IHNlbGVjdGVkRmVhdHVyZSA9IGZlYXR1cmU7XG4gIGlmIChmZWF0dXJlPy5wcm9wZXJ0aWVzKSB7XG4gICAgc2VsZWN0ZWRGZWF0dXJlID0ge1xuICAgICAgLi4uZmVhdHVyZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICBiYm94OiBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZSxcbiAgICAgIHNlbGVjdGlvbkNvbnRleHRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIERlbGV0ZSBleGlzdGluZyBmZWF0dXJlIGZyb20gZmlsdGVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlfTogVmlzU3RhdGVBY3Rpb25zLkRlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZmVhdHVyZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xuXG4gIGlmIChnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSkge1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpO1xuXG4gICAgcmV0dXJuIGZpbHRlcklkeCA+IC0xID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSkgOiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIG1vZGlmeSBlZGl0b3Igb2JqZWN0XG4gIGNvbnN0IG5ld0VkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV3RWRpdG9yXG4gIH07XG59XG5cbi8qKlxuICogVG9nZ2xlIGZlYXR1cmUgYXMgbGF5ZXIgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmV9ID0gcGF5bG9hZDtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcblxuICAvLyBsZXQgbmV3RmlsdGVyID0gbnVsbDtcbiAgbGV0IGZpbHRlcklkeDtcbiAgbGV0IG5ld0xheWVySWQgPSBbbGF5ZXIuaWRdO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgLy8gSWYgcG9seWdvbiBmaWx0ZXIgYWxyZWFkeSBleGlzdHMsIHdlIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlIGN1cnJlbnQgbGF5ZXIgaXMgYWxyZWFkeSBpbmNsdWRlZFxuICBpZiAoZmlsdGVySWQpIHtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcblxuICAgIGlmICghc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdKSB7XG4gICAgICAvLyB3aGF0IGlmIGZpbHRlciBkb2Vzbid0IGV4aXN0Py4uLiBub3QgcG9zc2libGUuXG4gICAgICAvLyBiZWNhdXNlIGZlYXR1cmVzIGluIHRoZSBlZGl0b3IgaXMgcGFzc2VkIGluIGZyb20gZmlsdGVycyBhbmQgZWRpdG9ycy5cbiAgICAgIC8vIGJ1dCB3ZSB3aWxsIG1vdmUgdGhpcyBmZWF0dXJlIGJhY2sgdG8gZWRpdG9yIGp1c3QgaW4gY2FzZVxuICAgICAgY29uc3Qgbm9uZUZpbHRlckZlYXR1cmUgPSB7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgZmlsdGVySWQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgbm9uZUZpbHRlckZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbm9uZUZpbHRlckZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICAgIGNvbnN0IHtsYXllcklkID0gW119ID0gZmlsdGVyO1xuICAgIGNvbnN0IGlzTGF5ZXJJbmNsdWRlZCA9IGxheWVySWQuaW5jbHVkZXMobGF5ZXIuaWQpO1xuXG4gICAgbmV3TGF5ZXJJZCA9IGlzTGF5ZXJJbmNsdWRlZFxuICAgICAgPyAvLyBpZiBsYXllciBpcyBpbmNsdWRlZCwgcmVtb3ZlIGl0XG4gICAgICAgIGxheWVySWQuZmlsdGVyKGwgPT4gbCAhPT0gbGF5ZXIuaWQpXG4gICAgICA6IFsuLi5sYXllcklkLCBsYXllci5pZF07XG5cbiAgICAvLyBMYXN0IGxheWVyIHJlbW92ZWQ6IHR1cm4gdGhlIGZpbHRlciBwb2x5Z29uIGJhY2sgaW50byBhIHNrZXRjaFxuICAgIGlmICghbmV3TGF5ZXJJZC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNrZXRjaEZlYXR1cmUgPSB0b1NrZXRjaEZlYXR1cmUoZmVhdHVyZSk7XG4gICAgICBjb25zdCBzdGF0ZVdpdGhvdXRGaWx0ZXIgPSByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlcixcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGVXaXRob3V0RmlsdGVyLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IuZmVhdHVyZXMsIHNrZXRjaEZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogc2tldGNoRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB3ZSBoYXZlbid0IGNyZWF0ZSB0aGUgcG9seWdvbiBmaWx0ZXIsIGNyZWF0ZSBpdFxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgICAvLyBhZGQgZmVhdHVyZSwgcmVtb3ZlIGZlYXR1cmUgZnJvbSBlaWR0b3JcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgICBlZGl0b3I6IHtcbiAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogbmV3TGF5ZXJJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBseSBwb2x5Z29uIGZpbHRlciB0byBhbGwgdmlzaWJsZSBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZlYXR1cmV9ID0gcGF5bG9hZDtcblxuICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICBjb25zdCBuZXdTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWUsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCB2aXNpYmxlTGF5ZXJJZHMgPSBnZXQocGF5bG9hZCwgJ3Zpc2libGVMYXllcklkcycpO1xuICBjb25zdCBhbGxMYXllcklkcyA9IEFycmF5LmlzQXJyYXkodmlzaWJsZUxheWVySWRzKVxuICAgID8gdmlzaWJsZUxheWVySWRzXG4gICAgOiBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuaXNWaXNpYmxlKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogYWxsTGF5ZXJJZHNcbiAgfSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1uLCBtb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgc29ydE1vZGUgPSBtb2RlO1xuICBpZiAoIXNvcnRNb2RlKSB7XG4gICAgY29uc3QgY3VycmVudE1vZGUgPSBnZXQoZGF0YXNldCwgWydzb3J0Q29sdW1uJywgY29sdW1uXSk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNob3VsZCBiZSBmaXhhYmxlIGluIGEgVFMgZmlsZVxuICAgIHNvcnRNb2RlID0gY3VycmVudE1vZGVcbiAgICAgID8gT2JqZWN0LmtleXMoU09SVF9PUkRFUikuZmluZChtID0+IG0gIT09IGN1cnJlbnRNb2RlKVxuICAgICAgOiBTT1JUX09SREVSLkFTQ0VORElORztcbiAgfVxuXG4gIGNvbnN0IHNvcnRlZCA9IHNvcnREYXRhc2V0QnlDb2x1bW4oZGF0YXNldCwgY29sdW1uLCBzb3J0TW9kZSk7XG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIHNvcnRlZCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaW5UYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLlBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBwaW5UYWJsZUNvbHVtbnMoZGF0YXNldCwgY29sdW1uKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQ29weSBjb2x1bW4gY29udGVudCBhcyBzdHJpbmdzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuQ29weVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHt0eXBlfSA9IGRhdGFzZXQuZmllbGRzW2ZpZWxkSWR4XTtcbiAgY29uc3QgdGV4dCA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAocm93ID0+IHBhcnNlRmllbGRWYWx1ZShyb3cudmFsdWVBdChmaWVsZElkeCksIHR5cGUpLCB0cnVlKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICBjb3B5KHRleHQpO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgZGlzcGxheSBmb3JtYXQgZnJvbSBjb2x1bW5zIGZyb20gdXNlciBzZWxlY3Rpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmb3JtYXRzfTogVmlzU3RhdGVBY3Rpb25zLlNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzO1xuICBPYmplY3Qua2V5cyhmb3JtYXRzKS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gICAgaWYgKGZpZWxkSWR4ID49IDApIHtcbiAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXQgPSBmb3JtYXRzW2NvbHVtbl07XG4gICAgICBjb25zdCBmaWVsZCA9IG5ld0ZpZWxkc1tmaWVsZElkeF07XG4gICAgICBuZXdGaWVsZHMgPSBzd2FwXyhtZXJnZV8oe2Rpc3BsYXlGb3JtYXR9KShmaWVsZCkgYXMge2lkOiBzdHJpbmd9KShcbiAgICAgICAgbmV3RmllbGRzIGFzIHtpZDogc3RyaW5nfVtdXG4gICAgICApIGFzIEZpZWxkW107XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkcyBhcyBGaWVsZFtdfSk7XG4gIGxldCBuZXdTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIC8vIHVwZGF0ZSBjb2xvckZpZWxkIGRpc3BsYXlGb3JtYXRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdTdGF0ZS5sYXllcnMubWFwKGxheWVyID0+XG4gICAgICBsYXllci5jb25maWc/LmNvbG9yRmllbGQ/Lm5hbWUgJiYgbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZSBpbiBmb3JtYXRzXG4gICAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgY29sb3JGaWVsZDoge1xuICAgICAgICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JGaWVsZCxcbiAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdDogZm9ybWF0c1tsYXllci5jb25maWcuY29sb3JGaWVsZC5uYW1lXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogbGF5ZXJcbiAgICApXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG50eXBlIExvYWRDb2x1bW5TdGF0c1Rhc2tQYXlsb2FkID0ge1xuICBkYXRhc2V0OiBWaXNTdGF0ZVsnZGF0YXNldHMnXVtzdHJpbmddO1xuICBmaWVsZDogRmllbGQ7XG59O1xuXG5mdW5jdGlvbiBnZXRNYXBwZWRWYWx1ZShmaWx0ZXJQcm9wcz86IEZpbHRlclByb3BzIHwgbnVsbCk6IHVua25vd25bXSB8IHVuZGVmaW5lZCB7XG4gIGlmIChmaWx0ZXJQcm9wcyAmJiAnbWFwcGVkVmFsdWUnIGluIGZpbHRlclByb3BzICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyUHJvcHMubWFwcGVkVmFsdWUpKSB7XG4gICAgcmV0dXJuIGZpbHRlclByb3BzLm1hcHBlZFZhbHVlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHlpZWxkRm9yUGFpbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzKHtkYXRhc2V0LCBmaWVsZH06IExvYWRDb2x1bW5TdGF0c1Rhc2tQYXlsb2FkKSB7XG4gIC8vIFlpZWxkIHNvIHRoZSBkYXRhIHRhYmxlIGFuZCBwZXItY29sdW1uIGxvYWRpbmcgc3Bpbm5lcnMgY2FuIHBhaW50IGZpcnN0LlxuICBhd2FpdCB5aWVsZEZvclBhaW50KCk7XG4gIGNvbnN0IGZpbHRlclByb3BzID0gZmllbGQuZmlsdGVyUHJvcHMgfHwgZGF0YXNldC5nZXRDb2x1bW5GaWx0ZXJQcm9wcyhmaWVsZC5uYW1lKTtcbiAgY29uc3QgbWFwcGVkVmFsdWUgPSBnZXRNYXBwZWRWYWx1ZShmaWx0ZXJQcm9wcyk7XG4gIGNvbnN0IHZhbHVlcyA9IG1hcHBlZFZhbHVlID8/IGNvbGxlY3RDb2x1bW5WYWx1ZXMoZGF0YXNldC5kYXRhQ29udGFpbmVyLCBmaWVsZC5maWVsZElkeCk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldENvbHVtblN0YXRpc3RpY3Moe1xuICAgIHZhbHVlcyxcbiAgICBmaWVsZFR5cGU6IGZpZWxkLnR5cGVcbiAgfSk7XG5cbiAgcmV0dXJuIHtyZXN1bHQsIGZpbHRlclByb3BzfTtcbn1cblxuY29uc3QgTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoXG4gIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyxcbiAgJ0xPQURfQ09MVU1OX1NUQVRTX1RBU0snXG4pO1xuXG4vKipcbiAqIFN0YXJ0IGxvYWRpbmcgY29sdW1uIHN0YXRpc3RpY3MgZm9yIG9uZSBvciBtb3JlIGZpZWxkcy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZpZWxkTmFtZXNUb0xvYWQgPSB0b0FycmF5KGZpZWxkTmFtZSk7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZHNUb0xvYWQgPSBkYXRhc2V0Py5maWVsZHMuZmlsdGVyKGYgPT4gZmllbGROYW1lc1RvTG9hZC5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZHNUb0xvYWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGZpZWxkID0+XG4gICAgZmllbGROYW1lc1RvTG9hZC5pbmNsdWRlcyhmaWVsZC5uYW1lKSA/IHsuLi5maWVsZCwgaXNMb2FkaW5nU3RhdHM6IHRydWV9IDogZmllbGRcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcblxuICBjb25zdCB0YXNrcyA9IGZpZWxkc1RvTG9hZC5tYXAoZiA9PlxuICAgIExPQURfQ09MVU1OX1NUQVRTX1RBU0soe2RhdGFzZXQ6IG5ld0RhdGFzZXQsIGZpZWxkOiBmfSkuYmltYXAoXG4gICAgICAoe3Jlc3VsdCwgZmlsdGVyUHJvcHN9KSA9PiBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzKG5ld0RhdGFzZXQuaWQsIGYubmFtZSwgcmVzdWx0LCBmaWx0ZXJQcm9wcyksXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PiBsb2FkQ29sdW1uU3RhdHNFcnJvcihuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIGVycm9yKVxuICAgIClcbiAgKTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKG5leHRTdGF0ZSwgdGFza3MpO1xufVxuXG4vKipcbiAqIFBlcnNpc3QgbG9hZGVkIGNvbHVtbiBzdGF0aXN0aWNzIG9uIHRoZSBmaWVsZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cmVzdWx0LCBmaWx0ZXJQcm9wcywgZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlclByb3BzID0ge1xuICAgIC4uLmZpbHRlclByb3BzLFxuICAgIGNvbHVtblN0YXRzOiByZXN1bHRcbiAgfTtcbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBmaWx0ZXJQcm9wczogbmV3RmlsdGVyUHJvcHMsIGlzTG9hZGluZ1N0YXRzOiBmYWxzZX0gOiBmXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBDbGVhciBsb2FkaW5nIGZsYWcgd2hlbiBjb2x1bW4gc3RhdGlzdGljcyBmYWlsLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXJyb3IsIGRhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBDb25zb2xlLmVycm9yKGVycm9yKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZiA9PlxuICAgIGYubmFtZSA9PT0gZmllbGROYW1lID8gey4uLmYsIGlzTG9hZGluZ1N0YXRzOiBmYWxzZX0gOiBmXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICB2aXNpYmxlOiAhc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydCBlZGl0b3Igc2tldGNoIGZlYXR1cmVzIGludG8gYSBHZW9KU09OIGRhdGFzZXQvbGF5ZXIgYW5kIGNsZWFyIHRoZSBza2V0Y2hlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgX2FjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZlYXR1cmVzID0gc3RhdGUuZWRpdG9yLmZlYXR1cmVzO1xuICBpZiAoIWZlYXR1cmVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBkYXRhO1xuICB0cnkge1xuICAgIGRhdGEgPSBwcm9jZXNzR2VvanNvbihlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24oZmVhdHVyZXMpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY29udmVydCBkcmF3biBnZW9tZXRyeSB0byBhIGxheWVyOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnY29udmVydC1lZGl0b3ItZmVhdHVyZXMnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjb25zdCBjbGVhcmVkU3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbGFiZWxJZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDkwKSArIDEwO1xuXG4gIHJldHVybiB1cGRhdGVWaXNEYXRhVXBkYXRlcihjbGVhcmVkU3RhdGUsIHtcbiAgICBkYXRhc2V0czoge1xuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogYGRyYXduLWdlb21ldHJ5LSR7Z2VuZXJhdGVIYXNoSWQoNil9YCxcbiAgICAgICAgbGFiZWw6IGBEcmF3biBHZW9tZXRyeSAke2xhYmVsSWR9YFxuICAgICAgfSxcbiAgICAgIGRhdGFcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlXG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2V2ZW50LCBsYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IHtpZDogZGVja2dsTGF5ZXJJZCwgY291bnR9ID0gZXZlbnQ7XG4gIGlmICghbGF5ZXIpIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyRmlsdGVyZWRJdGVtcyBsYXllciBkb2VzbnQgZXhpc3RzYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllci5maWx0ZXJlZEl0ZW1Db3VudD8uW2RlY2tnbExheWVySWRdID09PSBjb3VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxheWVyLmZpbHRlcmVkSXRlbUNvdW50ID0ge1xuICAgIC4uLmxheWVyLmZpbHRlcmVkSXRlbUNvdW50LFxuICAgIFtkZWNrZ2xMYXllcklkXTogY291bnRcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3dhcF8obGF5ZXIpKHN0YXRlLmxheWVycylcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgV01TIGZlYXR1cmUgaW5mbyBhbmQgcGluIHRvb2x0aXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdtc0ZlYXR1cmVJbmZvVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuV01TRmVhdHVyZUluZm9BY3Rpb25cbik6IFMge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmVJbmZvLCBjb29yZGluYXRlfSA9IGFjdGlvbjtcbiAgaWYgKCFsYXllcikge1xuICAgIGNvbnNvbGUud2FybihgV01TIGZlYXR1cmUgaW5mbyBsYXllciBkb2Vzbid0IGV4aXN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgY2xpY2tlZCBvYmplY3Qgc2ltaWxhciB0byBsYXllckNsaWNrVXBkYXRlciB0byBwaW4gdGhlIHRvb2x0aXBcbiAgY29uc3QgY2xpY2tlZCA9IGZlYXR1cmVJbmZvXG4gICAgPyB7XG4gICAgICAgIHBpY2tlZDogdHJ1ZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgd21zRmVhdHVyZUluZm86IGZlYXR1cmVJbmZvXG4gICAgICAgIH0sXG4gICAgICAgIGNvb3JkaW5hdGU6IGNvb3JkaW5hdGUgfHwgWzAsIDBdLFxuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpZHg6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllci5pZCksXG4gICAgICAgICAgICBpZDogbGF5ZXIuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKVxuICB9O1xufTtcblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBoZXhUaWxlSW50ZXJ2YWwgPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVEW2ludGVydmFsSW5kZXhdO1xuICAgIGludGVydmFsID0gTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbFtoZXhUaWxlSW50ZXJ2YWxdO1xuICB9XG5cbiAgaWYgKCFpbnRlcnZhbCkge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvLyBhZGp1c3QgZmlsdGVyXG4gIGNvbnN0IHRpbWVGb3JtYXQgPSBnZXREZWZhdWx0VGltZUZvcm1hdChpbnRlcnZhbCk7XG4gIGNvbnN0IHVwZGF0ZWRQbG90VHlwZSA9IHsuLi5maWx0ZXIucGxvdFR5cGUsIGludGVydmFsLCB0aW1lRm9ybWF0fTtcbiAgY29uc3QgbmV3RmlsdGVyID0gdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlKGZpbHRlciwgdXBkYXRlZFBsb3RUeXBlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KHN0YXRlLCBuZXdGaWx0ZXIpO1xufVxuXG4vLyBGaW5kIGRhdGFJZCBmcm9tIGEgc2F2ZWQgdmlzU3RhdGUgcHJvcGVydHk6XG4vLyBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9ucywgbGF5ZXJCbGVuZGluZywgb3ZlcmxheUJsZW5kaW5nLCBzcGxpdE1hcHMsIGFuaW1hdGlvbkNvbmZpZywgZWRpdG9yXG4vLyByZXBsYWNlIGl0IHdpdGggYW5vdGhlciBkYXRhSWRcbmZ1bmN0aW9uIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2YWx1ZTogYW55LCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgcmVwbGFjZWQgPSB2YWx1ZVxuICAgICAgLm1hcCh2ID0+IGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2LCBkYXRhSWQsIGRhdGFJZFRvUmVwbGFjZSkpXG4gICAgICAuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBvdGhlcnNcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhSWQpICYmIHZhbHVlLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgLy8gZmlsdGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiB2YWx1ZS5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvUmVwbGFjZSA6IGQpKVxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUuY29uZmlnPy5kYXRhSWQgJiYgdmFsdWUuY29uZmlnPy5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnZhbHVlLmNvbmZpZyxcbiAgICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGRhdGFJZCkpIHtcbiAgICAvLyBmb3IgdmFsdWUgc2F2ZWQgYXMge1tkYXRhSWRdOiB7Li4ufX1cbiAgICByZXR1cm4ge1tkYXRhSWRUb1JlcGxhY2VdOiB2YWx1ZVtkYXRhSWRdfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBGaW5kIGRhdGFzZXRJZHMgZGVyaXZlZCBhIHNhdmVkIHZpc1N0YXRlIFByb3BlcnR5O1xuZnVuY3Rpb24gZmluZENoaWxkRGF0YXNldElkcyh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCBjaGlsZERhdGFJZHMgPSB2YWx1ZS5tYXAoZmluZENoaWxkRGF0YXNldElkcykuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIGNoaWxkRGF0YUlkcy5sZW5ndGggPyBjaGlsZERhdGFJZHMgOiBudWxsO1xuICB9XG5cbiAgLy8gY2hpbGQgZGF0YSBpZCB1c3VhbGx5IHN0b3JlcyBpbiB0aGUgZGVyaXZlZCBkYXRhc2V0IGluZm9cbiAgcmV0dXJuIHZhbHVlPy5uZXdEYXRhc2V0Py5pbmZvLmlkIHx8IG51bGw7XG59XG5cbi8vIG1vdmVkIHVubWVyZ2VkIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zXG5mdW5jdGlvbiBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCBwcm9wVmFsdWVzLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pIHtcbiAgLy8gcmVtb3ZlIHByb3AgdmFsdWUgZnJvbSBzdGF0ZVxuICAvLyBUT0RPOiBzaG91bGQgd2UgYWRkIHJlbW92ZSB1cGRhdGVyIHRvIG1lcmdlciBhcyB3ZWxsP1xuICBpZiAoIXByb3BWYWx1ZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgc3RhdGVSZW1vdmVkID1cbiAgICBwcm9wID09PSAnbGF5ZXJzJ1xuICAgICAgPyBwcm9wVmFsdWVzLnJlZHVjZSgoYWNjdSwgcHJvcFZhbHVlKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkOiBwcm9wVmFsdWUuaWR9KSwgc3RhdGUpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoc3RhdGVbcHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBbcHJvcF06IHN0YXRlW3Byb3BdLmZpbHRlcihwID0+ICFwcm9wVmFsdWVzLmZpbmQocHJvcFZhbHVlID0+IHAuaWQgPT09IHByb3BWYWx1ZS5pZCkpXG4gICAgICAgIH1cbiAgICAgIDogLy8gaWYgbm90IGFycmF5LCB3ZSB3b24ndCByZW1vdmUgaXQsIHJlbW92ZSBkYXRhc2V0IHNob3VsZCBoYW5kbGUgaXRcbiAgICAgICAgc3RhdGU7XG5cbiAgLy8gbW92ZSB0byBzdGF0ZVRvQmVNZXJnZWRcbiAgY29uc3QgdG9CZU1lcmdlZCA9IHtcbiAgICBbdG9NZXJnZVByb3BdOiBzYXZlVW5tZXJnZWRcbiAgICAgID8gLy8gY2FsbCBtZXJnZSBzYXZlVW5tZXJnZWQgbWV0aG9kXG4gICAgICAgIHNhdmVVbm1lcmdlZChzdGF0ZVJlbW92ZWQsIHByb3BWYWx1ZXMpXG4gICAgICA6IC8vIGlmIHRvTWVyZ2VQcm9wIGlzIGFyYWF5LCBhcHBlbmQgdG8gaXRcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8gWy4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sIC4uLnByb3BWYWx1ZXNdXG4gICAgICA6IC8vIHNhdmUgcHJvcFZhbHVlcyB0byB0b01lcmdlXG4gICAgICBpc09iamVjdChzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSxcbiAgICAgICAgICAuLi5wcm9wVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGVSZW1vdmVkLFxuICAgIC4uLnRvQmVNZXJnZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZURhdGFzZXRBbmREZXBzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIHJldHVybiBjb21wb3NlXzxUPihbXG4gICAgYXBwbHlfKHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUsIHtkYXRhSWQsIGRhdGFJZFRvVXNlfSksXG4gICAgYXBwbHlfKHJlbW92ZURhdGFzZXRVcGRhdGVyLCB7ZGF0YUlkfSlcbiAgXSkoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2U8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhzdGF0ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gIC8vIG1ha2UgYSBjb3B5IG9mIGxheWVyT3JkZXIsIGJlY2F1c2UgbGF5ZXIgaWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgYnkgY2FsbGluZyByZW1vdmVMYXllclVwZGF0ZXJcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIC8vIHByZXNlcnZlIGRhdGFzZXQgb3JkZXJcbiAgbmV4dFN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyID0gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpLm1hcChkID0+XG4gICAgZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkXG4gICk7XG5cbiAgLy8gcHJlc2VydmVMYXllck9yZGVyXG4gIGlmIChuZXh0U3RhdGUubGF5ZXJUb0JlTWVyZ2VkPy5sZW5ndGgpIHtcbiAgICAvLyBjb3B5IHNwbGl0IG1hcHMgdG8gYmUgbWVyZ2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzZXQgaW4gcmVtb3ZlIGxheWVyXG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQgPSBzZXJpYWxpemVkU3RhdGU/LnNwbGl0TWFwcyA/PyBbXTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcm9wVmFsdWUubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVwbGFjZWRTdGF0ZTtcbiAgICB9LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUoXG4gIHN0YXRlLFxuICByZXBsYWNlZEl0ZW0sXG4gIHtwcm9wLCB0b01lcmdlUHJvcCwgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWR9XG4pIHtcbiAgLy8gcHJvcCBpcyBkZXBlbmRzIG9uIHRoZSBkYXRhc2V0IHRvIGJlIHJlcGxhY2VkXG4gIC8vIHJlbW92ZSBwcm9wIGZyb20gc3RhdGUsIGFuZCBtb3ZlIGl0IHRvIHRvQmVNZXJnZWRcbiAgbGV0IG5leHRTdGF0ZSA9IG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHJlcGxhY2VkSXRlbSwge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KTtcbiAgY29uc3QgY2hpbGREYXRhSWRzID0gZ2V0Q2hpbGREYXRhc2V0SWRzPy4ocmVwbGFjZWRJdGVtKSB8fCBmaW5kQ2hpbGREYXRhc2V0SWRzKHJlcGxhY2VkSXRlbSk7XG5cbiAgaWYgKGNoaWxkRGF0YUlkcykge1xuICAgIG5leHRTdGF0ZSA9IHRvQXJyYXkoY2hpbGREYXRhSWRzKS5yZWR1Y2UoKGFjY3UsIGNoaWxkRGF0YUlkKSA9PiB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgY2hpbGQgZGF0YXNldCBpZCxcbiAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIG1vdmUgb3V0IG9mIHN0YXRlIGFuZCBtZXJnZSBiYWNrIGluXG4gICAgICByZXR1cm4gcmVwbGFjZURhdGFzZXRBbmREZXBzKGFjY3UsIGNoaWxkRGF0YUlkLCBjaGlsZERhdGFJZCk7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxnQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sSUFBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVEsS0FBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsS0FBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVUsSUFBQSxHQUFBUixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVcsTUFBQSxHQUFBQyx1QkFBQSxDQUFBWixPQUFBO0FBRUEsSUFBQWEsT0FBQSxHQUFBYixPQUFBO0FBUUEsSUFBQWMsUUFBQSxHQUFBZCxPQUFBO0FBZ0NBLElBQUFlLE1BQUEsR0FBQWYsT0FBQTtBQWlDQSxJQUFBZ0Is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