@kepler.gl/reducers 3.1.0-alpha.3 → 3.1.0-alpha.5

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.
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
@@ -22,6 +23,7 @@ exports.mergeSplitMaps = mergeSplitMaps;
22
23
  exports.parseLayerConfig = parseLayerConfig;
23
24
  exports.replaceFilterDatasetIds = replaceFilterDatasetIds;
24
25
  exports.serializeEffect = serializeEffect;
26
+ exports.serializeFilter = serializeFilter;
25
27
  exports.serializeLayer = serializeLayer;
26
28
  exports.serializeVisState = serializeVisState;
27
29
  exports.validateColumn = validateColumn;
@@ -40,6 +42,7 @@ var _lodash3 = _interopRequireDefault(require("lodash.flattendeep"));
40
42
  var _deepmerge = _interopRequireDefault(require("deepmerge"));
41
43
  var _utils = require("@kepler.gl/utils");
42
44
  var _effects = require("@kepler.gl/effects");
45
+ var _commonUtils = require("@kepler.gl/common-utils");
43
46
  var _constants = require("@kepler.gl/constants");
44
47
  var _schemas = require("@kepler.gl/schemas");
45
48
  var _table = require("@kepler.gl/table");
@@ -48,6 +51,8 @@ var _excluded = ["enabled"];
48
51
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
49
52
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
50
53
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
54
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
55
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
51
56
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
52
57
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
53
58
  // Copyright contributors to the kepler.gl project
@@ -90,12 +95,27 @@ function replaceFilterDatasetIds(savedFilter, dataId, dataIdToUse) {
90
95
  var replaced = [];
91
96
  savedFilter.forEach(function (filter) {
92
97
  if (filter.dataId.includes(dataId)) {
98
+ var _filter$plotType;
93
99
  var newDataId = filter.dataId.map(function (d) {
94
100
  return d === dataId ? dataIdToUse : d;
95
101
  });
102
+ var plotType;
103
+ // TODO: more generic approach to save plotType.colorsByDataId
104
+ if ((_filter$plotType = filter.plotType) !== null && _filter$plotType !== void 0 && (_filter$plotType = _filter$plotType.colorsByDataId) !== null && _filter$plotType !== void 0 && _filter$plotType[dataId]) {
105
+ var _filter$plotType2;
106
+ // replace colorByDataId in filter.plotType
107
+ var _ref = ((_filter$plotType2 = filter.plotType) === null || _filter$plotType2 === void 0 ? void 0 : _filter$plotType2.colorsByDataId) || {},
108
+ color = _ref[dataId],
109
+ rest = (0, _objectWithoutProperties2["default"])(_ref, [dataId].map(_toPropertyKey));
110
+ plotType = _objectSpread(_objectSpread({}, filter.plotType), {}, {
111
+ colorsByDataId: _objectSpread(_objectSpread({}, rest), {}, (0, _defineProperty2["default"])({}, dataIdToUse, color))
112
+ });
113
+ }
96
114
  replaced.push(_objectSpread(_objectSpread({}, filter), {}, {
97
115
  dataId: newDataId
98
- }));
116
+ }, plotType ? {
117
+ plotType: plotType
118
+ } : {}));
99
119
  }
100
120
  });
101
121
  return replaced.length ? replaced : null;
@@ -179,6 +199,17 @@ function createLayerFromConfig(state, layerConfig) {
179
199
  return newLayer;
180
200
  }
181
201
 
202
+ /**
203
+ * Get loaded filter from state
204
+ */
205
+ function serializeFilter(newFilter, schema) {
206
+ var _serializedVisState$f;
207
+ var serializedVisState = serializeVisState({
208
+ filters: [newFilter]
209
+ }, schema);
210
+ return serializedVisState === null || serializedVisState === void 0 || (_serializedVisState$f = serializedVisState.filters) === null || _serializedVisState$f === void 0 ? void 0 : _serializedVisState$f[0];
211
+ }
212
+
182
213
  /**
183
214
  * Get loaded layer from state
184
215
  */
@@ -290,9 +321,9 @@ function mergeInteractions(state, interactionToBeMerged) {
290
321
  return;
291
322
  }
292
323
  var currentConfig = key === 'tooltip' || key === 'brush' ? state.interactionConfig[key].config : null;
293
- var _ref = interactionToBeMerged[key] || {},
294
- enabled = _ref.enabled,
295
- configSaved = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
324
+ var _ref2 = interactionToBeMerged[key] || {},
325
+ enabled = _ref2.enabled,
326
+ configSaved = (0, _objectWithoutProperties2["default"])(_ref2, _excluded);
296
327
  var configToMerge = configSaved;
297
328
  if (key === 'tooltip') {
298
329
  var _mergeInteractionTool = mergeInteractionTooltipConfig(state, configSaved),
@@ -324,6 +355,76 @@ function mergeInteractions(state, interactionToBeMerged) {
324
355
  });
325
356
  return nextState;
326
357
  }
358
+ function combineInteractionConfigs(configs) {
359
+ var combined = _objectSpread({}, configs[0]);
360
+ // handle each property key of an `InteractionConfig`, e.g. tooltip, geocoder, brush, coordinate
361
+ // by combining values for each among all passed in configs
362
+ var _loop2 = function _loop2(key) {
363
+ var toBeCombinedProps = configs.map(function (c) {
364
+ return c[key];
365
+ });
366
+
367
+ // all of these have an enabled boolean
368
+ combined[key] = {
369
+ // are any of the configs' enabled values true?
370
+ enabled: toBeCombinedProps.some(function (p) {
371
+ return p === null || p === void 0 ? void 0 : p.enabled;
372
+ })
373
+ };
374
+ if (key === 'tooltip') {
375
+ // are any of the configs' compareMode values true?
376
+ combined[key].compareMode = toBeCombinedProps.some(function (p) {
377
+ return p === null || p === void 0 ? void 0 : p.compareMode;
378
+ });
379
+
380
+ // return the compare type mode, it will be either absolute or relative
381
+ combined[key].compareType = getValueWithHighestOccurrence(toBeCombinedProps.map(function (p) {
382
+ return p.compareType;
383
+ }));
384
+
385
+ // combine fieldsToShow among all dataset ids
386
+ combined[key].fieldsToShow = toBeCombinedProps.map(function (p) {
387
+ return p.fieldsToShow;
388
+ }).reduce(function (acc, nextFieldsToShow) {
389
+ var _loop3 = function _loop3(nextDataIdKey) {
390
+ var nextTooltipFields = nextFieldsToShow[nextDataIdKey];
391
+ if (!acc[nextDataIdKey]) {
392
+ // if the dataset id is not present in the accumulator
393
+ // then add it with its tooltip fields
394
+ acc[nextDataIdKey] = nextTooltipFields;
395
+ } else {
396
+ // otherwise the dataset id is already present in the accumulator
397
+ // so only add the next tooltip fields for this dataset's array if they are not already present,
398
+ // using the tooltipField.name property for uniqueness
399
+ nextTooltipFields.forEach(function (nextTF) {
400
+ if (!acc[nextDataIdKey].find(function (_ref3) {
401
+ var name = _ref3.name;
402
+ return nextTF.name === name;
403
+ })) {
404
+ acc[nextDataIdKey].push(nextTF);
405
+ }
406
+ });
407
+ }
408
+ };
409
+ for (var nextDataIdKey in nextFieldsToShow) {
410
+ _loop3(nextDataIdKey);
411
+ }
412
+ return acc;
413
+ }, {});
414
+ }
415
+ if (key === 'brush') {
416
+ var _aggregate;
417
+ // keep the biggest brush size
418
+ combined[key].size = (_aggregate = (0, _utils.aggregate)(toBeCombinedProps, _constants.AGGREGATION_TYPES.maximum, function (p) {
419
+ return p.size;
420
+ })) !== null && _aggregate !== void 0 ? _aggregate : null;
421
+ }
422
+ };
423
+ for (var key in combined) {
424
+ _loop2(key);
425
+ }
426
+ return combined;
427
+ }
327
428
  function savedUnmergedInteraction(state, unmerged) {
328
429
  var _unmerged$tooltip, _unmerged$tooltip2, _state$interactionToB, _unmerged$tooltip3;
329
430
  if (!(unmerged !== null && unmerged !== void 0 && (_unmerged$tooltip = unmerged.tooltip) !== null && _unmerged$tooltip !== void 0 && _unmerged$tooltip.fieldsToShow)) {
@@ -349,6 +450,7 @@ function replaceInteractionDatasetIds(interactionConfig, dataId, dataIdToReplace
349
450
  }
350
451
  return null;
351
452
  }
453
+
352
454
  /**
353
455
  * Merge splitMaps config with current visStete.
354
456
  * 1. if current map is split, but splitMap DOESNOT contain maps
@@ -363,10 +465,10 @@ function mergeSplitMaps(state) {
363
465
  splitMaps.forEach(function (sm, i) {
364
466
  var entries = Object.entries(sm.layers);
365
467
  if (entries.length > 0) {
366
- entries.forEach(function (_ref2) {
367
- var _ref3 = (0, _slicedToArray2["default"])(_ref2, 2),
368
- id = _ref3[0],
369
- value = _ref3[1];
468
+ entries.forEach(function (_ref4) {
469
+ var _ref5 = (0, _slicedToArray2["default"])(_ref4, 2),
470
+ id = _ref5[0],
471
+ value = _ref5[1];
370
472
  // check if layer exists
371
473
  var pushTo = state.layers.find(function (l) {
372
474
  return l.id === id;
@@ -427,7 +529,7 @@ function mergeInteractionTooltipConfig(state) {
427
529
  unmergedTooltip: unmergedTooltip
428
530
  };
429
531
  }
430
- var _loop2 = function _loop2() {
532
+ var _loop4 = function _loop4() {
431
533
  if (!state.datasets[dataId] || state.isMergingDatasets[dataId]) {
432
534
  // is not yet loaded
433
535
  unmergedTooltip[dataId] = tooltipConfig.fieldsToShow[dataId];
@@ -443,7 +545,7 @@ function mergeInteractionTooltipConfig(state) {
443
545
  }
444
546
  };
445
547
  for (var dataId in tooltipConfig.fieldsToShow) {
446
- _loop2();
548
+ _loop4();
447
549
  }
448
550
  return {
449
551
  mergedTooltip: mergedTooltip,
@@ -463,6 +565,15 @@ function mergeLayerBlending(state, layerBlending) {
463
565
  return state;
464
566
  }
465
567
 
568
+ /**
569
+ * Combines multiple layer blending configs into a single string
570
+ * by returning the one with the highest occurrence
571
+ */
572
+ function combineLayerBlendingConfigs(configs) {
573
+ // return the mode of the layer blending type
574
+ return getValueWithHighestOccurrence(configs);
575
+ }
576
+
466
577
  /**
467
578
  * Merge overlayBlending with saved
468
579
  */
@@ -475,6 +586,15 @@ function mergeOverlayBlending(state, overlayBlending) {
475
586
  return state;
476
587
  }
477
588
 
589
+ /**
590
+ * Combines multiple overlay blending configs into a single string
591
+ * by returning the one with the highest occurrence
592
+ **/
593
+ function combineOverlayBlendingConfigs(configs) {
594
+ // return the mode of the overlay blending type
595
+ return getValueWithHighestOccurrence(configs);
596
+ }
597
+
478
598
  /**
479
599
  * Merge animation config
480
600
  */
@@ -488,6 +608,18 @@ function mergeAnimationConfig(state, animation) {
488
608
  }
489
609
  return state;
490
610
  }
611
+ function combineAnimationConfigs(configs) {
612
+ var _aggregate2, _aggregate3;
613
+ // get the smallest values of currentTime and speed among all configs
614
+ return {
615
+ currentTime: (_aggregate2 = (0, _utils.aggregate)(configs, _constants.AGGREGATION_TYPES.minimum, function (c) {
616
+ return c.currentTime;
617
+ })) !== null && _aggregate2 !== void 0 ? _aggregate2 : null,
618
+ speed: (_aggregate3 = (0, _utils.aggregate)(configs, _constants.AGGREGATION_TYPES.minimum, function (c) {
619
+ return c.speed;
620
+ })) !== null && _aggregate3 !== void 0 ? _aggregate3 : null
621
+ };
622
+ }
491
623
 
492
624
  /**
493
625
  * Validate saved layer columns with new data,
@@ -506,13 +638,13 @@ function validateSavedLayerColumns(fields) {
506
638
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
507
639
  // Prepare columns for the validator
508
640
  var columns = {};
509
- var _loop3 = function _loop3() {
641
+ var _loop5 = function _loop5() {
510
642
  var key = _Object$keys[_i];
511
643
  columns[key] = _objectSpread({}, emptyCols[key]);
512
644
  var saved = savedCols[key];
513
645
  if (saved) {
514
- var fieldIdx = fields.findIndex(function (_ref4) {
515
- var name = _ref4.name;
646
+ var fieldIdx = fields.findIndex(function (_ref6) {
647
+ var name = _ref6.name;
516
648
  return name === saved;
517
649
  });
518
650
  if (fieldIdx > -1) {
@@ -523,7 +655,7 @@ function validateSavedLayerColumns(fields) {
523
655
  }
524
656
  };
525
657
  for (var _i = 0, _Object$keys = Object.keys(emptyCols); _i < _Object$keys.length; _i++) {
526
- _loop3();
658
+ _loop5();
527
659
  }
528
660
 
529
661
  // find actual column fieldIdx, in case it has changed
@@ -575,9 +707,9 @@ function validateColumn(column, columns, allFields) {
575
707
  * @param {Object} options
576
708
  * @return {Object} - validated textlabel
577
709
  */
578
- function validateSavedTextLabel(fields, _ref5, savedTextLabel) {
579
- var _ref6 = (0, _slicedToArray2["default"])(_ref5, 1),
580
- layerTextLabel = _ref6[0];
710
+ function validateSavedTextLabel(fields, _ref7, savedTextLabel) {
711
+ var _ref8 = (0, _slicedToArray2["default"])(_ref7, 1),
712
+ layerTextLabel = _ref8[0];
581
713
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
582
714
  var savedTextLabels = Array.isArray(savedTextLabel) ? savedTextLabel : [savedTextLabel];
583
715
 
@@ -603,10 +735,10 @@ function validateSavedTextLabel(fields, _ref5, savedTextLabel) {
603
735
  */
604
736
  function validateSavedVisualChannels(fields, newLayer, savedLayer) {
605
737
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
606
- Object.values(newLayer.visualChannels).forEach(function (_ref7) {
607
- var field = _ref7.field,
608
- scale = _ref7.scale,
609
- key = _ref7.key;
738
+ Object.values(newLayer.visualChannels).forEach(function (_ref9) {
739
+ var field = _ref9.field,
740
+ scale = _ref9.scale,
741
+ key = _ref9.key;
610
742
  var foundField;
611
743
  if (savedLayer.config) {
612
744
  if (savedLayer.config[field]) {
@@ -753,6 +885,21 @@ function mergeEditor(state, savedEditor) {
753
885
  })
754
886
  });
755
887
  }
888
+ function combineEditorConfigs(configs) {
889
+ return configs.reduce(function (acc, nextConfig) {
890
+ return _objectSpread(_objectSpread({}, acc), {}, {
891
+ features: [].concat((0, _toConsumableArray2["default"])(acc.features), (0, _toConsumableArray2["default"])(nextConfig.features || []))
892
+ });
893
+ }, {
894
+ // start with:
895
+ // - empty array for features accumulation
896
+ // - and are any of the configs' visible values true?
897
+ features: [],
898
+ visible: configs.some(function (c) {
899
+ return c === null || c === void 0 ? void 0 : c.visible;
900
+ })
901
+ });
902
+ }
756
903
 
757
904
  /**
758
905
  * Validate saved layer config with new data,
@@ -772,6 +919,32 @@ function mergeDatasetsByOrder(state, newDataEntries) {
772
919
  }
773
920
  return merged;
774
921
  }
922
+
923
+ /**
924
+ * Simliar purpose to aggregation utils `getMode` function,
925
+ * but returns the mode in the same value type without coercing to a string.
926
+ * It ignores `undefined` or `null` values, but returns `null` if no mode could be calculated.
927
+ */
928
+ function getValueWithHighestOccurrence(arr) {
929
+ var _ref13;
930
+ var tallys = new Map();
931
+ arr.forEach(function (value) {
932
+ if ((0, _commonUtils.notNullorUndefined)(value)) {
933
+ if (!tallys.has(value)) {
934
+ tallys.set(value, 1);
935
+ } else {
936
+ tallys.set(value, tallys.get(value) + 1);
937
+ }
938
+ }
939
+ });
940
+ // return the value with the highest total occurrence count
941
+ if (tallys.size === 0) {
942
+ return null;
943
+ }
944
+ return (_ref13 = (0, _toConsumableArray2["default"])(tallys.entries())) === null || _ref13 === void 0 ? void 0 : _ref13.reduce(function (acc, next) {
945
+ return next[1] > acc[1] ? next : acc;
946
+ })[0];
947
+ }
775
948
  var VIS_STATE_MERGERS = exports.VIS_STATE_MERGERS = [{
776
949
  merge: mergeLayers,
777
950
  prop: 'layers',
@@ -791,22 +964,27 @@ var VIS_STATE_MERGERS = exports.VIS_STATE_MERGERS = [{
791
964
  prop: 'interactionConfig',
792
965
  toMergeProp: 'interactionToBeMerged',
793
966
  replaceParentDatasetIds: replaceInteractionDatasetIds,
794
- saveUnmerged: savedUnmergedInteraction
967
+ saveUnmerged: savedUnmergedInteraction,
968
+ combineConfigs: combineInteractionConfigs
795
969
  }, {
796
970
  merge: mergeLayerBlending,
797
- prop: 'layerBlending'
971
+ prop: 'layerBlending',
972
+ combineConfigs: combineLayerBlendingConfigs
798
973
  }, {
799
974
  merge: mergeOverlayBlending,
800
- prop: 'overlayBlending'
975
+ prop: 'overlayBlending',
976
+ combineConfigs: combineOverlayBlendingConfigs
801
977
  }, {
802
978
  merge: mergeSplitMaps,
803
979
  prop: 'splitMaps',
804
980
  toMergeProp: 'splitMapsToBeMerged'
805
981
  }, {
806
982
  merge: mergeAnimationConfig,
807
- prop: 'animationConfig'
983
+ prop: 'animationConfig',
984
+ combineConfigs: combineAnimationConfigs
808
985
  }, {
809
986
  merge: mergeEditor,
810
- prop: 'editor'
987
+ prop: 'editor',
988
+ combineConfigs: combineEditorConfigs
811
989
  }];
812
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbG9kYXNoMiIsIl9sb2Rhc2gzIiwiX2RlZXBtZXJnZSIsIl91dGlscyIsIl9lZmZlY3RzIiwiX2NvbnN0YW50cyIsIl9zY2hlbWFzIiwiX3RhYmxlIiwiX2xheWVyVXRpbHMiLCJfZXhjbHVkZWQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJtZXJnZUZpbHRlcnMiLCJzdGF0ZSIsImZpbHRlcnNUb01lcmdlIiwiZnJvbUNvbmZpZyIsInByZXNlcnZlRmlsdGVyT3JkZXIiLCJtYXAiLCJsIiwiaWQiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsInZhbGlkYXRlZCIsImZhaWxlZCIsInVwZGF0ZWREYXRhc2V0cyIsInVwZGF0ZWRGaWx0ZXJzIiwiaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlciIsImZpbHRlcnMiLCJyZXNldEZpbHRlckdwdU1vZGUiLCJhc3NpZ25HcHVDaGFubmVscyIsImRhdGFzZXRzVG9GaWx0ZXIiLCJ1bmlxIiwiZmxhdHRlbkRlZXAiLCJkYXRhSWQiLCJmaWx0ZXJlZCIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJsYXllcnMiLCJkYXRhc2V0cyIsImZpbHRlclRvQmVNZXJnZWQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwicmVwbGFjZUZpbHRlckRhdGFzZXRJZHMiLCJzYXZlZEZpbHRlciIsImRhdGFJZFRvVXNlIiwicmVwbGFjZWQiLCJpbmNsdWRlcyIsIm5ld0RhdGFJZCIsImQiLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsImxheWVyQ29uZmlnIiwidmlzdWFsQ2hhbm5lbHMiLCJwYXJzZUxheWVyQ29uZmlnIiwic2NoZW1hIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uIiwic2F2ZWRDb25maWciLCJ2ZXJzaW9uIiwiQ1VSUkVOVF9WRVJTSU9OIiwiY29uZmlnIiwidmlzU3RhdGUiLCJsYXllck9yZGVyIiwicGFyc2VTYXZlZENvbmZpZyIsImN1cnJlbnRJdGVtcyIsIml0ZW1zIiwicHJlc2VydmVkT3JkZXIiLCJ1bmRlZmluZWQiLCJkZWZhdWx0U3RhcnQiLCJuZXdJdGVtcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiaXRlbSIsImV4cGVjdGVkSWR4IiwiaW5kZXhPZiIsImluc2VydEF0IiwiaSIsInByZWNlZWRJZHgiLCJfbG9vcCIsInByZWNlZWRJdGVtSWQiLCJmaW5kSW5kZXgiLCJhcnJheUluc2VydCIsImVyciIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsInBhcnNlZExheWVyQ29uZmlnIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhIiwidmFsaWRhdGVMYXllcnNCeURhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiYWxsb3dFbXB0eUNvbHVtbiIsIm5ld0xheWVyIiwidXBkYXRlTGF5ZXJEb21haW4iLCJzZXJpYWxpemVMYXllciIsIl9zZXJpYWxpemVkVmlzU3RhdGUkbCIsInNlcmlhbGl6ZWRWaXNTdGF0ZSIsInNlcmlhbGl6ZVZpc1N0YXRlIiwic2VyaWFsaXplRWZmZWN0IiwibmV3RWZmZWN0IiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRlIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uMiIsInNhdmVkU3RhdGUiLCJnZXRDb25maWdUb1NhdmUiLCJtZXJnZUxheWVycyIsImxheWVyc1RvTWVyZ2UiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsInVubWVyZ2VkIiwidG9NZXJnZSIsIl9sJGNvbmZpZyIsImlzTWVyZ2luZ0RhdGFzZXRzIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhMiIsIm1lcmdlZExheWVyIiwiX2luc2VydExheWVyQXRSaWdodE9yIiwiaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIiLCJuZXdMYXllck9yZGVyIiwibmV3TGF5ZXJzIiwibGF5ZXJUb0JlTWVyZ2VkIiwiY3VycmVudExheWVycyIsImxheWVyc1RvSW5zZXJ0IiwiY3VycmVudE9yZGVyIiwiY3VycmVudExheWVyUXVldWUiLCJmaW5kQnlJZCIsImxheWVyIiwiQm9vbGVhbiIsIm5ld0xheWVyT3JkZXJRdWV1ZSIsIm1lcmdlSW50ZXJhY3Rpb25zIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibWVyZ2VkIiwia2V5IiwiaW50ZXJhY3Rpb25Db25maWciLCJjdXJyZW50Q29uZmlnIiwiX3JlZiIsImVuYWJsZWQiLCJjb25maWdTYXZlZCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJjb25maWdUb01lcmdlIiwiX21lcmdlSW50ZXJhY3Rpb25Ub29sIiwibWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWciLCJtZXJnZWRUb29sdGlwIiwidW5tZXJnZWRUb29sdGlwIiwiZmllbGRzVG9TaG93IiwidG9vbHRpcCIsInBpY2siLCJuZXh0U3RhdGUiLCJzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24iLCJfdW5tZXJnZWQkdG9vbHRpcCIsIl91bm1lcmdlZCR0b29sdGlwMiIsIl9zdGF0ZSRpbnRlcmFjdGlvblRvQiIsIl91bm1lcmdlZCR0b29sdGlwMyIsInJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfaW50ZXJhY3Rpb25Db25maWckdG8iLCJfaW50ZXJhY3Rpb25Db25maWckdG8yIiwibWVyZ2VTcGxpdE1hcHMiLCJzcGxpdE1hcHMiLCJzbSIsImVudHJpZXMiLCJfcmVmMiIsIl9yZWYzIiwiX3NsaWNlZFRvQXJyYXkyIiwicHVzaFRvIiwiZmluZCIsImdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJtZXJnZUVmZmVjdHMiLCJuZXdFZmZlY3RzIiwiZWZmZWN0IiwiY3JlYXRlRWZmZWN0IiwiZGVlcG1lcmdlIiwiYWxsIiwiaXNDb25maWdBY3RpdmUiLCJpc1ZhbGlkVG9TYXZlIiwidG9vbHRpcENvbmZpZyIsIl9sb29wMiIsImFsbEZpZWxkcyIsImZpZWxkcyIsImZvdW5kRmllbGRzVG9TaG93IiwiZmllbGQiLCJtZXJnZUxheWVyQmxlbmRpbmciLCJsYXllckJsZW5kaW5nIiwiTEFZRVJfQkxFTkRJTkdTIiwibWVyZ2VPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJPVkVSTEFZX0JMRU5ESU5HUyIsIm1lcmdlQW5pbWF0aW9uQ29uZmlnIiwiYW5pbWF0aW9uIiwiY3VycmVudFRpbWUiLCJhbmltYXRpb25Db25maWciLCJkb21haW4iLCJ2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zIiwic2F2ZWRDb2xzIiwiZW1wdHlDb2xzIiwib3B0aW9ucyIsImNvbHVtbnMiLCJfbG9vcDMiLCJfT2JqZWN0JGtleXMiLCJfaSIsInNhdmVkIiwiZmllbGRJZHgiLCJfcmVmNCIsImFsbENvbEZvdW5kIiwiZXZlcnkiLCJ2YWxpZGF0ZUNvbHVtbiIsInJ2IiwidGhyb3dPbkVycm9yIiwicmVxdWlyZWRDb2x1bW5zIiwiayIsIm9wdGlvbmFsIiwibWlzc2luZ0NvbHVtbnMiLCJFcnJvciIsImpvaW4iLCJjb25maWdDb2x1bW5zIiwiaW52YWxpZENvbHVtbnMiLCJfY29sdW1ucyRrIiwiY29sdW1uIiwidmFsaWRhdG9yIiwidmFsaWRhdGVTYXZlZFRleHRMYWJlbCIsIl9yZWY1Iiwic2F2ZWRUZXh0TGFiZWwiLCJfcmVmNiIsImxheWVyVGV4dExhYmVsIiwic2F2ZWRUZXh0TGFiZWxzIiwidGV4dExhYmVsIiwiZmQiLCJKU09OIiwic3RyaW5naWZ5IiwicmVkdWNlIiwiYWNjdSIsInZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyIsInNhdmVkTGF5ZXIiLCJ2YWx1ZXMiLCJfcmVmNyIsInNjYWxlIiwiZm91bmRGaWVsZCIsImZvdW5kQ2hhbm5lbCIsInVwZGF0ZUxheWVyQ29uZmlnIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiX3NhdmVkTGF5ZXIkY29uZmlnIiwiX25ld0xheWVyJGNvbmZpZyRmaWVsIiwiZmllbGROYW1lIiwiX2xheWVyJGNvbmZpZyIsInZhbGlkYXRlTGF5ZXIiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbiIsImNvbHVtbkNvbmZpZyIsImdldExheWVyQ29sdW1ucyIsImNvbE1vZGVDb25maWciLCJjb2x1bW5Nb2RlIiwic3VwcG9ydGVkQ29sdW1uTW9kZXMiLCJjb2xNb2RlIiwib3B0aW9uYWxDb2x1bW5zIiwiZGF0YXNldCIsInR5cGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImxhYmVsIiwiY29sb3IiLCJpc1Zpc2libGUiLCJoaWRkZW4iLCJoaWdobGlnaHRDb2xvciIsImNvcGllZFZpc0NvbmZpZyIsImNvcHlMYXllckNvbmZpZyIsInZpc0NvbmZpZyIsInNoYWxsb3dDb3B5IiwidmFsaWRhdGVWaXNDb25maWciLCJtZXJnZUVkaXRvciIsInNhdmVkRWRpdG9yIiwiX3NhdmVkRWRpdG9yJHZpc2libGUiLCJlZGl0b3IiLCJmZWF0dXJlcyIsInZpc2libGUiLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsIm5ld0RhdGFFbnRyaWVzIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJuZXdEYXRhc2V0SWRzIiwiX3N0YXRlJHByZXNlcnZlRGF0YXNlIiwiVklTX1NUQVRFX01FUkdFUlMiLCJleHBvcnRzIiwibWVyZ2UiLCJwcm9wIiwidG9NZXJnZVByb3AiLCJwcmVzZXJ2ZU9yZGVyIiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJzYXZlVW5tZXJnZWQiXSwic291cmNlcyI6WyIuLi9zcmMvdmlzLXN0YXRlLW1lcmdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gudW5pcSc7XG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gucGljayc7XG5pbXBvcnQgZmxhdHRlbkRlZXAgZnJvbSAnbG9kYXNoLmZsYXR0ZW5kZWVwJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7XG4gIGFycmF5SW5zZXJ0LFxuICBnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzLFxuICBmaW5kQnlJZFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHtMYXllciwgVmlzdWFsQ2hhbm5lbH0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge0xBWUVSX0JMRU5ESU5HUywgT1ZFUkxBWV9CTEVORElOR1N9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Q1VSUkVOVF9WRVJTSU9OLCBWaXNTdGF0ZSwgVmlzU3RhdGVNZXJnZXJzLCBLZXBsZXJHTFNjaGVtYUNsYXNzfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge1xuICBQYXJzZWRMYXllcixcbiAgUGFyc2VkVmlzU3RhdGUsXG4gIFNhdmVkSW50ZXJhY3Rpb25Db25maWcsXG4gIFRvb2x0aXBJbmZvLFxuICBTYXZlZEVkaXRvcixcbiAgUGFyc2VkQ29uZmlnLFxuICBGaWx0ZXIsXG4gIEVmZmVjdCBhcyBFZmZlY3RUeXBlLFxuICBQYXJzZWRFZmZlY3QsXG4gIExheWVyQ29sdW1ucyxcbiAgTGF5ZXJDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0tlcGxlclRhYmxlLCBEYXRhc2V0cywgYXNzaWduR3B1Q2hhbm5lbHMsIHJlc2V0RmlsdGVyR3B1TW9kZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5cbmltcG9ydCB7Z2V0TGF5ZXJPcmRlckZyb21MYXllcnN9IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuXG4vKipcbiAqIE1lcmdlIGxvYWRlZCBmaWx0ZXJzIHdpdGggY3VycmVudCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUZpbHRlcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGZpbHRlcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydmaWx0ZXJzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVGaWx0ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGZpbHRlcnNUb01lcmdlPy5tYXAobCA9PiBsLmlkKVxuICAgIDogc3RhdGUucHJlc2VydmVGaWx0ZXJPcmRlcjtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVyc1RvTWVyZ2UpIHx8ICFmaWx0ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhzdGF0ZSwgZmlsdGVyc1RvTWVyZ2UpO1xuICBsZXQgdXBkYXRlZEZpbHRlcnMgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgdmFsaWRhdGVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXJcbiAgKTtcblxuICAvLyBtZXJnZSBmaWx0ZXIgd2l0aCBleGlzdGluZ1xuICB1cGRhdGVkRmlsdGVycyA9IHJlc2V0RmlsdGVyR3B1TW9kZSh1cGRhdGVkRmlsdGVycyk7XG4gIHVwZGF0ZWRGaWx0ZXJzID0gYXNzaWduR3B1Q2hhbm5lbHModXBkYXRlZEZpbHRlcnMpO1xuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBkYXRhc2V0c1RvRmlsdGVyID0gdW5pcShmbGF0dGVuRGVlcCh2YWxpZGF0ZWQubWFwKGYgPT4gZi5kYXRhSWQpKSk7XG5cbiAgY29uc3QgZmlsdGVyZWQgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIGRhdGFzZXRzVG9GaWx0ZXIsXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIHVwZGF0ZWRGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnMsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXIsXG4gICAgZmlsdGVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmZpbHRlclRvQmVNZXJnZWQsIC4uLmZhaWxlZF1cbiAgfTtcbn1cblxuLy8gcmVwbGFjZSBkYXRhSWQgaW4gc2F2ZWQgRmlsdGVyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUZpbHRlckRhdGFzZXRJZHMoXG4gIHNhdmVkRmlsdGVyOiBGaWx0ZXJbXSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbikge1xuICBjb25zdCByZXBsYWNlZDogRmlsdGVyW10gPSBbXTtcbiAgc2F2ZWRGaWx0ZXIuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgIGlmIChmaWx0ZXIuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGFJZCA9IGZpbHRlci5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZCkpO1xuICAgICAgcmVwbGFjZWQucHVzaCh7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NhdmVkTGF5ZXJDb25maWdWMShsYXllckNvbmZpZzogYW55KTogYm9vbGVhbiB7XG4gIC8vIGV4cG9ydGVkIGxheWVyIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgdmlzdWFsQ2hhbm5lbHMgcHJvcGVydHlcbiAgcmV0dXJuIGxheWVyQ29uZmlnPy52aXN1YWxDaGFubmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGF5ZXJDb25maWcoXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzcyxcbiAgbGF5ZXJDb25maWc6IGFueVxuKTogUGFyc2VkTGF5ZXIgfCB1bmRlZmluZWQge1xuICAvLyBhc3N1bWUgdGhlIGxheWVyIGNvbmZpZyBpcyBjdXJyZW50IHZlcnNpb25cbiAgY29uc3Qgc2F2ZWRDb25maWcgPSB7XG4gICAgdmVyc2lvbjogQ1VSUkVOVF9WRVJTSU9OLFxuICAgIGNvbmZpZzoge1xuICAgICAgdmlzU3RhdGU6IHtsYXllcnM6IFtsYXllckNvbmZpZ10sIGxheWVyT3JkZXI6IFtsYXllckNvbmZpZy5pZF19XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZENvbmZpZyk/LnZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgY3VycmVudEl0ZW1zOiBGaWx0ZXJbXSxcbiAgaXRlbXM6IEZpbHRlcltdLFxuICBwcmVzZXJ2ZWRPcmRlcjogYW55W10gPSBbXSxcbiAgZGVmYXVsdFN0YXJ0PzogYm9vbGVhblxuKSB7XG4gIGxldCBuZXdJdGVtcyA9IFsuLi5jdXJyZW50SXRlbXNdO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IGV4cGVjdGVkSWR4ID0gcHJlc2VydmVkT3JkZXIuaW5kZXhPZihpdGVtLmlkKTtcbiAgICAvLyBpbnNlcnRBdCB0aGUgZW5kIGJ5IGRlZmF1bHRcbiAgICBsZXQgaW5zZXJ0QXQgPSBkZWZhdWx0U3RhcnQgPyAwIDogbmV3SXRlbXMubGVuZ3RoO1xuICAgIGlmIChleHBlY3RlZElkeCA+IDApIHtcbiAgICAgIC8vIGxvb2sgZm9yIGxheWVyIHRvIGluc2VydCBhZnRlclxuICAgICAgbGV0IGkgPSBleHBlY3RlZElkeCArIDE7XG4gICAgICBsZXQgcHJlY2VlZElkeCA9IC0xO1xuICAgICAgd2hpbGUgKGktLSA+IDAgJiYgcHJlY2VlZElkeCA8IDApIHtcbiAgICAgICAgLy8ga2VlcCBsb29raW5nIGZvciBwcmVjZWVkIGxheWVyIHRoYXQgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgY29uc3QgcHJlY2VlZEl0ZW1JZCA9IHByZXNlcnZlZE9yZGVyW2kgLSAxXTtcbiAgICAgICAgcHJlY2VlZElkeCA9IG5ld0l0ZW1zLmZpbmRJbmRleChkID0+IGQuaWQgPT09IHByZWNlZWRJdGVtSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHByZWNlZWRJZHggPiAtMSkge1xuICAgICAgICAvLyBpZiBmb3VuZFxuICAgICAgICBpbnNlcnRBdCA9IHByZWNlZWRJZHggKyAxO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXdJdGVtcyA9IGFycmF5SW5zZXJ0KG5ld0l0ZW1zLCBpbnNlcnRBdCwgaXRlbSk7XG4gIH1cbiAgcmV0dXJuIG5ld0l0ZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlOiBWaXNTdGF0ZSwgbGF5ZXJDb25maWc6IGFueSk6IExheWVyIHwgbnVsbCB7XG4gIC8vIGNoZWNrIGlmIHRoZSBsYXllciBjb25maWcgaXMgcGFyc2VkXG4gIGNvbnN0IHBhcnNlZExheWVyQ29uZmlnID0gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWcpXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbGF5ZXJDb25maWcpXG4gICAgOiBsYXllckNvbmZpZztcblxuICBpZiAoIXBhcnNlZExheWVyQ29uZmlnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gZmlyc3QgdmFsaWRhdGUgY29uZmlnIGFnYWluc3QgZGF0YXNldFxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBbcGFyc2VkTGF5ZXJDb25maWddLFxuICAgIHthbGxvd0VtcHR5Q29sdW1uOiB0cnVlfVxuICApO1xuXG4gIGlmIChmYWlsZWQ/Lmxlbmd0aCB8fCAhdmFsaWRhdGVkLmxlbmd0aCkge1xuICAgIC8vIGZhaWxlZFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZWRbMF07XG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgbGF5ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTGF5ZXIoXG4gIG5ld0xheWVyOiBMYXllcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtsYXllcnM6IFtuZXdMYXllcl0sIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZF19LFxuICAgIHNjaGVtYVxuICApO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGVmZmVjdCBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVFZmZlY3QoXG4gIG5ld0VmZmVjdDogRWZmZWN0VHlwZSxcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRFZmZlY3QgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShcbiAgICB7ZWZmZWN0czogW25ld0VmZmVjdF0sIGVmZmVjdE9yZGVyOiBbbmV3RWZmZWN0LmlkXX0sXG4gICAgc2NoZW1hXG4gICk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmVmZmVjdHM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgdmlzIHN0YXRlIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplVmlzU3RhdGUoXG4gIHZpc1N0YXRlOiBQYXJ0aWFsPFZpc1N0YXRlPixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRWaXNTdGF0ZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNhdmVkU3RhdGUgPSBzY2hlbWEuZ2V0Q29uZmlnVG9TYXZlKHtcbiAgICB2aXNTdGF0ZVxuICB9KTtcbiAgcmV0dXJuIHNhdmVkU3RhdGUgPyBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZFN0YXRlKT8udmlzU3RhdGUgOiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIE1lcmdlIGxheWVycyBmcm9tIGRlLXNlcmlhbGl6ZWQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGxheWVyc1RvTWVyZ2U6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gZnJvbUNvbmZpZ1xuICAgID8gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobGF5ZXJzVG9NZXJnZSlcbiAgICA6IHN0YXRlLnByZXNlcnZlTGF5ZXJPcmRlcjtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxheWVyc1RvTWVyZ2UpIHx8ICFsYXllcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBkb24ndCBtZXJnZSBsYXllciBpZiBkYXRhc2V0IGlzIGJlaW5nIG1lcmdlZFxuICBjb25zdCB1bm1lcmdlZDogUGFyc2VkTGF5ZXJbXSA9IFtdO1xuICBjb25zdCB0b01lcmdlOiBQYXJzZWRMYXllcltdID0gW107XG4gIGxheWVyc1RvTWVyZ2UuZm9yRWFjaCgobDogUGFyc2VkTGF5ZXIpID0+IHtcbiAgICBpZiAobD8uY29uZmlnPy5kYXRhSWQgJiYgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbbC5jb25maWcuZGF0YUlkXSkge1xuICAgICAgdW5tZXJnZWQucHVzaChsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9NZXJnZS5wdXNoKGwpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZDogbWVyZ2VkTGF5ZXIsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIHRvTWVyZ2VcbiAgKTtcbiAgdW5tZXJnZWQucHVzaCguLi5mYWlsZWQpO1xuICAvLyBwdXQgbmV3IGxheWVycyBpbiBmcm9udCBvZiBjdXJyZW50IGxheWVyc1xuICBjb25zdCB7bmV3TGF5ZXJPcmRlciwgbmV3TGF5ZXJzfSA9IGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICAgIHN0YXRlLmxheWVycyxcbiAgICBtZXJnZWRMYXllcixcbiAgICBzdGF0ZS5sYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlclxuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXIsXG4gICAgbGF5ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUubGF5ZXJUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICBjdXJyZW50TGF5ZXJzLFxuICBsYXllcnNUb0luc2VydCxcbiAgY3VycmVudE9yZGVyLFxuICBwcmVzZXJ2ZWRPcmRlcjogc3RyaW5nW10gPSBbXVxuKSB7XG4gIGlmICghbGF5ZXJzVG9JbnNlcnQ/Lmxlbmd0aCkge1xuICAgIHJldHVybiB7bmV3TGF5ZXJzOiBjdXJyZW50TGF5ZXJzLCBuZXdMYXllck9yZGVyOiBjdXJyZW50T3JkZXJ9O1xuICB9XG4gIC8vIHBlcnNlcnZlZE9yZGVyIFsnYScsICdiJywgJ2MnXTtcbiAgLy8gbGF5ZXJPcmRlciBbJ2EnLCAnYicsICdjJ11cbiAgY29uc3QgY3VycmVudExheWVyUXVldWUgPSBjdXJyZW50T3JkZXJcbiAgICAubWFwKGlkID0+IGZpbmRCeUlkKGlkKShjdXJyZW50TGF5ZXJzKSlcbiAgICAuZmlsdGVyKGxheWVyID0+IEJvb2xlYW4obGF5ZXIpKTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gY3VycmVudExheWVycy5jb25jYXQobGF5ZXJzVG9JbnNlcnQpO1xuICBjb25zdCBuZXdMYXllck9yZGVyUXVldWUgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIGN1cnJlbnRMYXllclF1ZXVlLFxuICAgIGxheWVyc1RvSW5zZXJ0LFxuICAgIHByZXNlcnZlZE9yZGVyLFxuICAgIHRydWVcbiAgKTtcblxuICAvLyByZWNvbnN0cnVjdCBsYXllck9yZGVyIGFmdGVyIGluc2VydFxuICBjb25zdCBuZXdMYXllck9yZGVyID0gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobmV3TGF5ZXJPcmRlclF1ZXVlKTtcblxuICByZXR1cm4ge1xuICAgIG5ld0xheWVyT3JkZXIsXG4gICAgbmV3TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25zIHdpdGggc2F2ZWQgY29uZmlnXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvbnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiB8IHVuZGVmaW5lZFxuKTogUyB7XG4gIGNvbnN0IG1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuICBjb25zdCB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuXG4gIGlmIChpbnRlcmFjdGlvblRvQmVNZXJnZWQpIHtcbiAgICAoT2JqZWN0LmtleXMoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSBhcyBBcnJheTxrZXlvZiBTYXZlZEludGVyYWN0aW9uQ29uZmlnPikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKCFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudENvbmZpZyA9XG4gICAgICAgIGtleSA9PT0gJ3Rvb2x0aXAnIHx8IGtleSA9PT0gJ2JydXNoJyA/IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnIDogbnVsbDtcblxuICAgICAgY29uc3Qge2VuYWJsZWQsIC4uLmNvbmZpZ1NhdmVkfSA9IGludGVyYWN0aW9uVG9CZU1lcmdlZFtrZXldIHx8IHt9O1xuXG4gICAgICBsZXQgY29uZmlnVG9NZXJnZSA9IGNvbmZpZ1NhdmVkO1xuXG4gICAgICBpZiAoa2V5ID09PSAndG9vbHRpcCcpIHtcbiAgICAgICAgY29uc3Qge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH0gPSBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb25maWdTYXZlZCBhcyBTYXZlZEludGVyYWN0aW9uQ29uZmlnWyd0b29sdGlwJ11cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBtZXJnZSBuZXcgZGF0YXNldCB0b29sdGlwcyB3aXRoIG9yaWdpbmFsIGRhdGFzZXQgdG9vbHRpcHNcbiAgICAgICAgY29uZmlnVG9NZXJnZSA9IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICAgIC4uLihjdXJyZW50Q29uZmlnIGFzIFRvb2x0aXBJbmZvWydjb25maWcnXSkuZmllbGRzVG9TaG93LFxuICAgICAgICAgICAgLi4ubWVyZ2VkVG9vbHRpcFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModW5tZXJnZWRUb29sdGlwKS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgdW5tZXJnZWQudG9vbHRpcCA9IHtmaWVsZHNUb1Nob3c6IHVubWVyZ2VkVG9vbHRpcCwgZW5hYmxlZDogQm9vbGVhbihlbmFibGVkKX07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVyZ2VkW2tleV0gPSB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0sXG4gICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCksXG4gICAgICAgIC4uLihjdXJyZW50Q29uZmlnXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmZpZzogcGljayhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5jdXJyZW50Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgLi4uY29uZmlnVG9NZXJnZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudENvbmZpZylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIC4uLm1lcmdlZFxuICAgIH0sXG4gICAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24oc3RhdGUsIHVubWVyZ2VkKVxuICB9O1xuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb248UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+XG4pIHtcbiAgaWYgKCF1bm1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93KSB7XG4gICAgcmV0dXJuIHN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHRvb2x0aXA6IHtcbiAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZC50b29sdGlwLFxuICAgICAgLi4uKHR5cGVvZiB1bm1lcmdlZD8udG9vbHRpcD8uZW5hYmxlZCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8ge2VuYWJsZWQ6IHVubWVyZ2VkLnRvb2x0aXAuZW5hYmxlZH1cbiAgICAgICAgOiB7fSksXG4gICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3csXG4gICAgICAgIC4uLnVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3dcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMoaW50ZXJhY3Rpb25Db25maWcsIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAoaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLFxuICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICBbZGF0YUlkVG9SZXBsYWNlXTogaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBNZXJnZSBzcGxpdE1hcHMgY29uZmlnIHdpdGggY3VycmVudCB2aXNTdGV0ZS5cbiAqIDEuIGlmIGN1cnJlbnQgbWFwIGlzIHNwbGl0LCBidXQgc3BsaXRNYXAgRE9FU05PVCBjb250YWluIG1hcHNcbiAqICAgIDogZG9uJ3QgbWVyZ2UgYW55dGhpbmdcbiAqIDIuIGlmIGN1cnJlbnQgbWFwIGlzIE5PVCBzcGxpdCwgYnV0IHNwbGl0TWFwcyBjb250YWluIG1hcHNcbiAqICAgIDogYWRkIHRvIHNwbGl0TWFwcywgYW5kIGFkZCBjdXJyZW50IGxheWVycyB0byBzcGxpdE1hcHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlU3BsaXRNYXBzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBzcGxpdE1hcHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ3NwbGl0TWFwcyddID0gW11cbik6IFMge1xuICBjb25zdCBtZXJnZWQgPSBbLi4uc3RhdGUuc3BsaXRNYXBzXTtcbiAgY29uc3QgdW5tZXJnZWQgPSBbXTtcbiAgc3BsaXRNYXBzLmZvckVhY2goKHNtLCBpKSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHNtLmxheWVycyk7XG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChbaWQsIHZhbHVlXSkgPT4ge1xuICAgICAgICAvLyBjaGVjayBpZiBsYXllciBleGlzdHNcbiAgICAgICAgY29uc3QgcHVzaFRvID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBpZCkgPyBtZXJnZWQgOiB1bm1lcmdlZDtcblxuICAgICAgICAvLyBjcmVhdGUgbWFwIHBhbmVsIGlmIGN1cnJlbnQgbWFwIGlzIG5vdCBzcGxpdFxuICAgICAgICBwdXNoVG9baV0gPSBwdXNoVG9baV0gfHwge1xuICAgICAgICAgIC8vIGtlZXAgaWRcbiAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICBsYXllcnM6IHB1c2hUbyA9PT0gbWVyZ2VkID8gZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwKHN0YXRlLmxheWVycykgOiBbXVxuICAgICAgICB9O1xuICAgICAgICBwdXNoVG9baV0ubGF5ZXJzID0ge1xuICAgICAgICAgIC4uLnB1c2hUb1tpXS5sYXllcnMsXG4gICAgICAgICAgW2lkXTogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSBhcmUgbWVyZ2luZyBpZiB0aGVyZSBhcmUgbm8gbGF5ZXJzIGluIGJvdGggc3BsaXQgbWFwXG4gICAgICBtZXJnZWQucHVzaChzbSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogbWVyZ2VkLFxuICAgIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBlZmZlY3RzIHdpdGggc2F2ZWQgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVmZmVjdHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGVmZmVjdHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2VmZmVjdHMnXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBuZXdFZmZlY3RzID0gW1xuICAgIC4uLnN0YXRlLmVmZmVjdHMsXG4gICAgLi4uKGVmZmVjdHMgfHwgW10pXG4gICAgICAubWFwKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBmcm9tQ29uZmlnXG4gICAgICAgICAgPyBjcmVhdGVFZmZlY3QoXG4gICAgICAgICAgICAgIGRlZXBtZXJnZS5hbGwoW1xuICAgICAgICAgICAgICAgIGVmZmVjdCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAvLyBjb2xsYXBzZSBhbGwgcGFuZWxzIHdoZW4gbG9hZGluZyBlZmZlY3RzXG4gICAgICAgICAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiAoZWZmZWN0IGFzIEVmZmVjdFR5cGUpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoZWZmZWN0ID0+IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZWZmZWN0ICYmIGVmZmVjdC5pc1ZhbGlkVG9TYXZlKCkpO1xuICAgICAgfSlcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyOiBuZXdFZmZlY3RzLm1hcChlZmZlY3QgPT4gZWZmZWN0LmlkKVxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAgd2l0aCBzYXZlZCBjb25maWcsXG4gKiB2YWxpZGF0ZSBmaWVsZHNUb1Nob3dcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEBwYXJhbSB0b29sdGlwQ29uZmlnXG4gKiBAcmV0dXJuIC0ge21lcmdlZFRvb2x0aXA6IHt9LCB1bm1lcmdlZFRvb2x0aXA6IHt9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgdG9vbHRpcENvbmZpZzogUGljazxUb29sdGlwSW5mb1snY29uZmlnJ10sICdmaWVsZHNUb1Nob3cnPiB8IG51bGwgPSBudWxsXG4pIHtcbiAgY29uc3QgdW5tZXJnZWRUb29sdGlwOiBUb29sdGlwSW5mb1snY29uZmlnJ11bJ2ZpZWxkc1RvU2hvdyddID0ge307XG4gIGNvbnN0IG1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcblxuICBpZiAoXG4gICAgIXRvb2x0aXBDb25maWcgfHxcbiAgICAhdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cgfHxcbiAgICAhT2JqZWN0LmtleXModG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpLmxlbmd0aFxuICApIHtcbiAgICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG4gIH1cblxuICBmb3IgKGNvbnN0IGRhdGFJZCBpbiB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykge1xuICAgIGlmICghc3RhdGUuZGF0YXNldHNbZGF0YUlkXSB8fCBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgICAvLyBpcyBub3QgeWV0IGxvYWRlZFxuICAgICAgdW5tZXJnZWRUb29sdGlwW2RhdGFJZF0gPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBkYXRhc2V0IGlzIGxvYWRlZFxuICAgICAgY29uc3QgYWxsRmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHMubWFwKGQgPT4gZC5uYW1lKTtcbiAgICAgIGNvbnN0IGZvdW5kRmllbGRzVG9TaG93ID0gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXS5maWx0ZXIoZmllbGQgPT5cbiAgICAgICAgYWxsRmllbGRzLmluY2x1ZGVzKGZpZWxkLm5hbWUpXG4gICAgICApO1xuXG4gICAgICBtZXJnZWRUb29sdGlwW2RhdGFJZF0gPSBmb3VuZEZpZWxkc1RvU2hvdztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG59XG4vKipcbiAqIE1lcmdlIGxheWVyQmxlbmRpbmcgd2l0aCBzYXZlZFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJCbGVuZGluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJCbGVuZGluZzogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKGxheWVyQmxlbmRpbmcgJiYgTEFZRVJfQkxFTkRJTkdTW2xheWVyQmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJCbGVuZGluZ1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogTWVyZ2Ugb3ZlcmxheUJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3ZlcmxheUJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBvdmVybGF5QmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ292ZXJsYXlCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKG92ZXJsYXlCbGVuZGluZyAmJiBPVkVSTEFZX0JMRU5ESU5HU1tvdmVybGF5QmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb3ZlcmxheUJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbmltYXRpb24gY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFuaW1hdGlvbkNvbmZpZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYW5pbWF0aW9uOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydhbmltYXRpb25Db25maWcnXVxuKTogUyB7XG4gIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLmN1cnJlbnRUaW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uYW5pbWF0aW9uLFxuICAgICAgICBkb21haW46IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbHVtbnMgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKlxuICogQHBhcmFtIGZpZWxkc1xuICogQHBhcmFtIHNhdmVkQ29sc1xuICogQHBhcmFtIGVtcHR5Q29sc1xuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm4gLSB2YWxpZGF0ZWQgY29sdW1ucyBvciBudWxsXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBzYXZlZENvbHM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH0gPSB7fSxcbiAgZW1wdHlDb2xzOiBMYXllckNvbHVtbnMsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pIHtcbiAgLy8gUHJlcGFyZSBjb2x1bW5zIGZvciB0aGUgdmFsaWRhdG9yXG4gIGNvbnN0IGNvbHVtbnM6IHR5cGVvZiBlbXB0eUNvbHMgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZW1wdHlDb2xzKSkge1xuICAgIGNvbHVtbnNba2V5XSA9IHsuLi5lbXB0eUNvbHNba2V5XX07XG5cbiAgICBjb25zdCBzYXZlZCA9IHNhdmVkQ29sc1trZXldO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgY29uc3QgZmllbGRJZHggPSBmaWVsZHMuZmluZEluZGV4KCh7bmFtZX0pID0+IG5hbWUgPT09IHNhdmVkKTtcblxuICAgICAgaWYgKGZpZWxkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZvdW5kIGNvbHVtbnNcbiAgICAgICAgY29sdW1uc1trZXldLmZpZWxkSWR4ID0gZmllbGRJZHg7XG4gICAgICAgIGNvbHVtbnNba2V5XS52YWx1ZSA9IHNhdmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGZpbmQgYWN0dWFsIGNvbHVtbiBmaWVsZElkeCwgaW4gY2FzZSBpdCBoYXMgY2hhbmdlZFxuICBjb25zdCBhbGxDb2xGb3VuZCA9IE9iamVjdC5rZXlzKGNvbHVtbnMpLmV2ZXJ5KGtleSA9PlxuICAgIHZhbGlkYXRlQ29sdW1uKGNvbHVtbnNba2V5XSwgY29sdW1ucywgZmllbGRzKVxuICApO1xuXG4gIGNvbnN0IHJ2ID0gYWxsQ29sRm91bmQgPyBjb2x1bW5zIDogbnVsbDtcbiAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgY29uc3QgcmVxdWlyZWRDb2x1bW5zID0gT2JqZWN0LmtleXMoZW1wdHlDb2xzKS5maWx0ZXIoayA9PiAhZW1wdHlDb2xzW2tdLm9wdGlvbmFsKTtcbiAgICBjb25zdCBtaXNzaW5nQ29sdW1ucyA9IHJlcXVpcmVkQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdLnZhbHVlKTtcbiAgICBpZiAobWlzc2luZ0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBtaXNzaW5nIG9yIGludmFsaWQgY29sdW1uczogJHttaXNzaW5nQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBjb25zdCBjb25maWdDb2x1bW5zID0gT2JqZWN0LmtleXMoc2F2ZWRDb2xzKTtcbiAgICBjb25zdCBpbnZhbGlkQ29sdW1ucyA9IGNvbmZpZ0NvbHVtbnMuZmlsdGVyKGsgPT4gIWNvbHVtbnM/LltrXT8udmFsdWUpO1xuICAgIGlmIChpbnZhbGlkQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgY29sdW1uczogJHtpbnZhbGlkQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBydjtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBsYXllciBjb2x1bW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29sdW1uKFxuICBjb2x1bW46IExheWVyQ29sdW1uICYge3ZhbGlkYXRvcj86IHR5cGVvZiB2YWxpZGF0ZUNvbHVtbn0sXG4gIGNvbHVtbnM6IExheWVyQ29sdW1ucyxcbiAgYWxsRmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ11cbik6IGJvb2xlYW4ge1xuICBpZiAoY29sdW1uLm9wdGlvbmFsIHx8IGNvbHVtbi52YWx1ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChjb2x1bW4udmFsaWRhdG9yKSB7XG4gICAgcmV0dXJuIGNvbHVtbi52YWxpZGF0b3IoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB0ZXh0IGxhYmVsIGNvbmZpZyB3aXRoIG5ldyBkYXRhXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFRleHRMYWJlbFNjaGVtYVYxXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBmaWVsZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzYXZlZFRleHRMYWJlbFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH0gLSB2YWxpZGF0ZWQgdGV4dGxhYmVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKFxuICBmaWVsZHMsXG4gIFtsYXllclRleHRMYWJlbF0sXG4gIHNhdmVkVGV4dExhYmVsLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKSB7XG4gIGNvbnN0IHNhdmVkVGV4dExhYmVscyA9IEFycmF5LmlzQXJyYXkoc2F2ZWRUZXh0TGFiZWwpID8gc2F2ZWRUZXh0TGFiZWwgOiBbc2F2ZWRUZXh0TGFiZWxdO1xuXG4gIC8vIHZhbGlkYXRlIGZpZWxkXG4gIHJldHVybiBzYXZlZFRleHRMYWJlbHMubWFwKHRleHRMYWJlbCA9PiB7XG4gICAgY29uc3QgZmllbGQgPSB0ZXh0TGFiZWwuZmllbGRcbiAgICAgID8gZmllbGRzLmZpbmQoZmQgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyh0ZXh0TGFiZWwuZmllbGQpLmV2ZXJ5KGtleSA9PiB0ZXh0TGFiZWwuZmllbGRba2V5XSA9PT0gZmRba2V5XSlcbiAgICAgICAgKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdGV4dCBsYWJlbCBmaWVsZDogJHtKU09OLnN0cmluZ2lmeSh0ZXh0TGFiZWwuZmllbGQpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYXllclRleHRMYWJlbCkucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGtleSA9PT0gJ2ZpZWxkJyA/IGZpZWxkIDogdGV4dExhYmVsW2tleV0gfHwgbGF5ZXJUZXh0TGFiZWxba2V5XVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHZpc3VhbCBjaGFubmVscyBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKTogbnVsbCB8IExheWVyIHtcbiAgKE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpIGFzIFZpc3VhbENoYW5uZWxbXSkuZm9yRWFjaCgoe2ZpZWxkLCBzY2FsZSwga2V5fSkgPT4ge1xuICAgIGxldCBmb3VuZEZpZWxkO1xuICAgIGlmIChzYXZlZExheWVyLmNvbmZpZykge1xuICAgICAgaWYgKHNhdmVkTGF5ZXIuY29uZmlnW2ZpZWxkXSkge1xuICAgICAgICBmb3VuZEZpZWxkID0gZmllbGRzLmZpbmQoXG4gICAgICAgICAgZmQgPT4gc2F2ZWRMYXllci5jb25maWcgJiYgZmQubmFtZSA9PT0gc2F2ZWRMYXllci5jb25maWdbZmllbGRdLm5hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm91bmRDaGFubmVsID0ge1xuICAgICAgICAuLi4oZm91bmRGaWVsZCA/IHtbZmllbGRdOiBmb3VuZEZpZWxkfSA6IHt9KSxcbiAgICAgICAgLi4uKHNhdmVkTGF5ZXIuY29uZmlnW3NjYWxlXSA/IHtbc2NhbGVdOiBzYXZlZExheWVyLmNvbmZpZ1tzY2FsZV19IDoge30pXG4gICAgICB9O1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGZvdW5kQ2hhbm5lbCkubGVuZ3RoKSB7XG4gICAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGZvdW5kQ2hhbm5lbCk7XG4gICAgICB9XG5cbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgICAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHNhdmVkTGF5ZXIuY29uZmlnPy5bZmllbGRdPy5uYW1lO1xuICAgICAgICBpZiAoZmllbGROYW1lICYmIGZpZWxkTmFtZSAhPT0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkXT8ubmFtZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdmlzdWFsIGNoYW5uZWwgZmllbGQ6ICR7ZmllbGR9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbnR5cGUgVmFsaWRhdGVMYXllck9wdGlvbiA9IHtcbiAgYWxsb3dFbXB0eUNvbHVtbj86IGJvb2xlYW47XG4gIHRocm93T25FcnJvcj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBsYXllcnM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIG9wdGlvbnM/OiBWYWxpZGF0ZUxheWVyT3B0aW9uXG4pIHtcbiAgY29uc3QgdmFsaWRhdGVkOiBMYXllcltdID0gW107XG4gIGNvbnN0IGZhaWxlZDogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXTtcblxuICBsYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbGV0IHZhbGlkYXRlTGF5ZXI6IExheWVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAobGF5ZXI/LmNvbmZpZz8uZGF0YUlkKSB7XG4gICAgICBpZiAoZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgICAgLy8gZGF0YXNldHMgYXJlIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIHZhbGlkYXRlTGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gICAgICAgICAgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0sXG4gICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgbGF5ZXJDbGFzc2VzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVMYXllcikge1xuICAgICAgdmFsaWRhdGVkLnB1c2godmFsaWRhdGVMYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRhdGFzZXRzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICBmYWlsZWQucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge3ZhbGlkYXRlZCwgZmFpbGVkfTtcbn1cblxuLyoqXG4gKiBHZXQgcmVxdWlyZWQgY29sdW1ucyBmb3IgdmFsaWRhdGlvbiBiYXNlZCBvbiBjb2x1bW4gbW9kZVxuICovXG5mdW5jdGlvbiBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcikge1xuICAvLyBmaW5kIGNvbHVtbiBmaWVsZElkeFxuICBsZXQgY29sdW1uQ29uZmlnID0gbmV3TGF5ZXIuZ2V0TGF5ZXJDb2x1bW5zKCk7XG4gIC8vIGlmIGNvbHVtbk1vZGUgaXMgZGVmaW5lZCwgZmluZCBjb2x1bW4gbW9kZSBjb25maWdcbiAgY29uc3QgY29sTW9kZUNvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgPyAobmV3TGF5ZXIuc3VwcG9ydGVkQ29sdW1uTW9kZXMgfHwgW10pLmZpbmQoXG4gICAgICAgIGNvbE1vZGUgPT4gY29sTW9kZS5rZXkgPT09IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChjb2xNb2RlQ29uZmlnKSB7XG4gICAgLy8gb25seSB2YWxpZGF0ZSBjb2x1bW5zIGluIGNvbHVtbiBtb2RlXG4gICAgY29sdW1uQ29uZmlnID0gW1xuICAgICAgLi4uKGNvbE1vZGVDb25maWcucmVxdWlyZWRDb2x1bW5zIHx8IFtdKSxcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLm9wdGlvbmFsQ29sdW1ucyB8fCBbXSlcbiAgICBdLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiBjb2x1bW5Db25maWdba2V5XVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29sdW1uQ29uZmlnO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIG9wdGlvbnM6IFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7fVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3Qge2ZpZWxkcywgaWQ6IGRhdGFJZH0gPSBkYXRhc2V0O1xuICBjb25zdCB7dHlwZX0gPSBzYXZlZExheWVyO1xuICBjb25zdCB7dGhyb3dPbkVycm9yfSA9IG9wdGlvbnM7XG4gIC8vIGxheWVyIGRvZXNudCBoYXZlIGEgdmFsaWQgdHlwZVxuICBpZiAoIXR5cGUgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYXllckNsYXNzZXMsIHR5cGUpIHx8ICFzYXZlZExheWVyLmNvbmZpZykge1xuICAgIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdHlwZSBcIiR7dHlwZX1cIiBvciBjb25maWcgaXMgbWlzc2luZ2ApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbdHlwZV0oe1xuICAgIGlkOiBzYXZlZExheWVyLmlkLFxuICAgIGRhdGFJZCxcbiAgICBsYWJlbDogc2F2ZWRMYXllci5jb25maWcubGFiZWwsXG4gICAgY29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbG9yLFxuICAgIGlzVmlzaWJsZTogc2F2ZWRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGhpZGRlbjogc2F2ZWRMYXllci5jb25maWcuaGlkZGVuLFxuICAgIGNvbHVtbk1vZGU6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbk1vZGUsXG4gICAgaGlnaGxpZ2h0Q29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmhpZ2hsaWdodENvbG9yXG4gIH0pO1xuXG4gIGNvbnN0IGNvbHVtbkNvbmZpZyA9IF9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uKG5ld0xheWVyKTtcblxuICBpZiAoT2JqZWN0LmtleXMoY29sdW1uQ29uZmlnKSkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICAgICAgZmllbGRzLFxuICAgICAgc2F2ZWRMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgIGNvbHVtbkNvbmZpZyxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgICAgICAuLi5jb2x1bW5zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuYWxsb3dFbXB0eUNvbHVtbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGV4dExhYmVsID1cbiAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwgJiYgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbFxuICAgICAgPyB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKFxuICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICBuZXdMYXllci5jb25maWcudGV4dExhYmVsLFxuICAgICAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIClcbiAgICAgIDogbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbDtcblxuICAvLyBjb3B5IHZpc0NvbmZpZyBvdmVyIHRvIGVtcHR5TGF5ZXIgdG8gbWFrZSBzdXJlIGl0IGhhcyBhbGwgdGhlIHByb3BzXG4gIGNvbnN0IGNvcGllZFZpc0NvbmZpZyA9IG5ld0xheWVyLmNvcHlMYXllckNvbmZpZyhcbiAgICBuZXdMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIHNhdmVkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyB8fCB7fSxcbiAgICB7XG4gICAgICBzaGFsbG93Q29weTogWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXVxuICAgIH1cbiAgKTtcblxuICAvLyBjYWxsIGxheWVyIG1ldGhvZHMgdG8gdmFsaWRhdGUgdmlzQ29uZmlnIHdoZW4gc3dpdGNoaW5nIGRhdGFzZXRcbiAgY29uc3QgdmlzQ29uZmlnID0gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWdcbiAgICA/IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnKGRhdGFzZXQsIGNvcGllZFZpc0NvbmZpZylcbiAgICA6IGNvcGllZFZpc0NvbmZpZztcblxuICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgdmlzQ29uZmlnLFxuICAgIHRleHRMYWJlbFxuICB9KTtcblxuICAvLyB2aXN1YWwgY2hhbm5lbCBmaWVsZCBpcyBzYXZlZCB0byBiZSB7bmFtZSwgdHlwZX1cbiAgLy8gZmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZCBieSBtYXRjaGluZyBib3RoIG5hbWUgYW5kIHR5cGVcbiAgLy8gcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgbmV3TGF5ZXIgPSB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoZmllbGRzLCBuZXdMYXllciwgc2F2ZWRMYXllciwgb3B0aW9ucyk7XG5cbiAgaWYgKHRocm93T25FcnJvcikge1xuICAgIGlmICghbmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlOiAke25ld0xheWVyLmlkfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWRpdG9yPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIHNhdmVkRWRpdG9yOiBTYXZlZEVkaXRvcikge1xuICBpZiAoIXNhdmVkRWRpdG9yKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgLi4uKHNhdmVkRWRpdG9yLmZlYXR1cmVzIHx8IFtdKV0sXG4gICAgICAvLyBpZiBzYXZlZEVkaXRvci52aXNpYmxlIGlzIHVuZGVmaW5lZCBrZWVwIHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgICB2aXNpYmxlOiBzYXZlZEVkaXRvci52aXNpYmxlID8/IHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlOiBWaXNTdGF0ZSwgbmV3RGF0YUVudHJpZXM6IERhdGFzZXRzKTogRGF0YXNldHMge1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgLi4ubmV3RGF0YUVudHJpZXNcbiAgfTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlcikpIHtcbiAgICAvLyBwcmVzZXJ2ZURhdGFzZXRPcmRlciAgbWlnaHQgbm90IGluY2x1ZGUgdGhlICBuZXcgZGF0YXNldHNcbiAgICBjb25zdCBuZXdEYXRhc2V0SWRzID0gT2JqZWN0LmtleXMobWVyZ2VkKS5maWx0ZXIoXG4gICAgICBpZCA9PiAhc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXI/LmluY2x1ZGVzKGlkKVxuICAgICk7XG4gICAgcmV0dXJuIFsuLi5zdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciwgLi4ubmV3RGF0YXNldElkc10ucmVkdWNlKFxuICAgICAgKGFjY3UsIGRhdGFJZCkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgLi4uKG1lcmdlZFtkYXRhSWRdID8ge1tkYXRhSWRdOiBtZXJnZWRbZGF0YUlkXX0gOiB7fSlcbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZXhwb3J0IGNvbnN0IFZJU19TVEFURV9NRVJHRVJTOiBWaXNTdGF0ZU1lcmdlcnM8YW55PiA9IFtcbiAge1xuICAgIG1lcmdlOiBtZXJnZUxheWVycyxcbiAgICBwcm9wOiAnbGF5ZXJzJyxcbiAgICB0b01lcmdlUHJvcDogJ2xheWVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlTGF5ZXJPcmRlcidcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUZpbHRlcnMsXG4gICAgcHJvcDogJ2ZpbHRlcnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnZmlsdGVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlRmlsdGVyT3JkZXInLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlRmlsdGVyRGF0YXNldElkc1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRWZmZWN0cyxcbiAgICBwcm9wOiAnZWZmZWN0cydcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUludGVyYWN0aW9ucyxcbiAgICBwcm9wOiAnaW50ZXJhY3Rpb25Db25maWcnLFxuICAgIHRvTWVyZ2VQcm9wOiAnaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyxcbiAgICBzYXZlVW5tZXJnZWQ6IHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvblxuICB9LFxuICB7bWVyZ2U6IG1lcmdlTGF5ZXJCbGVuZGluZywgcHJvcDogJ2xheWVyQmxlbmRpbmcnfSxcbiAge21lcmdlOiBtZXJnZU92ZXJsYXlCbGVuZGluZywgcHJvcDogJ292ZXJsYXlCbGVuZGluZyd9LFxuICB7bWVyZ2U6IG1lcmdlU3BsaXRNYXBzLCBwcm9wOiAnc3BsaXRNYXBzJywgdG9NZXJnZVByb3A6ICdzcGxpdE1hcHNUb0JlTWVyZ2VkJ30sXG4gIHttZXJnZTogbWVyZ2VBbmltYXRpb25Db25maWcsIHByb3A6ICdhbmltYXRpb25Db25maWcnfSxcbiAge21lcmdlOiBtZXJnZUVkaXRvciwgcHJvcDogJ2VkaXRvcid9XG5dO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFTQSxJQUFBSyxRQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxRQUFBLEdBQUFQLE9BQUE7QUFlQSxJQUFBUSxNQUFBLEdBQUFSLE9BQUE7QUFFQSxJQUFBUyxXQUFBLEdBQUFULE9BQUE7QUFBc0QsSUFBQVUsU0FBQTtBQUFBLFNBQUFDLDJCQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBSCxDQUFBLENBQUFHLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSixDQUFBLHFCQUFBRSxDQUFBLFFBQUFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBTixDQUFBLE1BQUFFLENBQUEsR0FBQUss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
990
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbG9kYXNoMiIsIl9sb2Rhc2gzIiwiX2RlZXBtZXJnZSIsIl91dGlscyIsIl9lZmZlY3RzIiwiX2NvbW1vblV0aWxzIiwiX2NvbnN0YW50cyIsIl9zY2hlbWFzIiwiX3RhYmxlIiwiX2xheWVyVXRpbHMiLCJfZXhjbHVkZWQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl90b1Byb3BlcnR5S2V5IiwiaSIsIl90b1ByaW1pdGl2ZSIsIl90eXBlb2YiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIm93bktleXMiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJtZXJnZUZpbHRlcnMiLCJzdGF0ZSIsImZpbHRlcnNUb01lcmdlIiwiZnJvbUNvbmZpZyIsInByZXNlcnZlRmlsdGVyT3JkZXIiLCJtYXAiLCJsIiwiaWQiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsInZhbGlkYXRlZCIsImZhaWxlZCIsInVwZGF0ZWREYXRhc2V0cyIsInVwZGF0ZWRGaWx0ZXJzIiwiaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlciIsImZpbHRlcnMiLCJyZXNldEZpbHRlckdwdU1vZGUiLCJhc3NpZ25HcHVDaGFubmVscyIsImRhdGFzZXRzVG9GaWx0ZXIiLCJ1bmlxIiwiZmxhdHRlbkRlZXAiLCJkYXRhSWQiLCJmaWx0ZXJlZCIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJsYXllcnMiLCJkYXRhc2V0cyIsImZpbHRlclRvQmVNZXJnZWQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwicmVwbGFjZUZpbHRlckRhdGFzZXRJZHMiLCJzYXZlZEZpbHRlciIsImRhdGFJZFRvVXNlIiwicmVwbGFjZWQiLCJpbmNsdWRlcyIsIl9maWx0ZXIkcGxvdFR5cGUiLCJuZXdEYXRhSWQiLCJkIiwicGxvdFR5cGUiLCJjb2xvcnNCeURhdGFJZCIsIl9maWx0ZXIkcGxvdFR5cGUyIiwiX3JlZiIsImNvbG9yIiwicmVzdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsImxheWVyQ29uZmlnIiwidmlzdWFsQ2hhbm5lbHMiLCJwYXJzZUxheWVyQ29uZmlnIiwic2NoZW1hIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uIiwic2F2ZWRDb25maWciLCJ2ZXJzaW9uIiwiQ1VSUkVOVF9WRVJTSU9OIiwiY29uZmlnIiwidmlzU3RhdGUiLCJsYXllck9yZGVyIiwicGFyc2VTYXZlZENvbmZpZyIsImN1cnJlbnRJdGVtcyIsIml0ZW1zIiwicHJlc2VydmVkT3JkZXIiLCJ1bmRlZmluZWQiLCJkZWZhdWx0U3RhcnQiLCJuZXdJdGVtcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiaXRlbSIsImV4cGVjdGVkSWR4IiwiaW5kZXhPZiIsImluc2VydEF0IiwicHJlY2VlZElkeCIsIl9sb29wIiwicHJlY2VlZEl0ZW1JZCIsImZpbmRJbmRleCIsImFycmF5SW5zZXJ0IiwiZXJyIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwicGFyc2VkTGF5ZXJDb25maWciLCJfdmFsaWRhdGVMYXllcnNCeURhdGEiLCJ2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJhbGxvd0VtcHR5Q29sdW1uIiwibmV3TGF5ZXIiLCJ1cGRhdGVMYXllckRvbWFpbiIsInNlcmlhbGl6ZUZpbHRlciIsIm5ld0ZpbHRlciIsIl9zZXJpYWxpemVkVmlzU3RhdGUkZiIsInNlcmlhbGl6ZWRWaXNTdGF0ZSIsInNlcmlhbGl6ZVZpc1N0YXRlIiwic2VyaWFsaXplTGF5ZXIiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGwiLCJzZXJpYWxpemVFZmZlY3QiLCJuZXdFZmZlY3QiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGUiLCJlZmZlY3RzIiwiZWZmZWN0T3JkZXIiLCJfc2NoZW1hJHBhcnNlU2F2ZWRDb24yIiwic2F2ZWRTdGF0ZSIsImdldENvbmZpZ1RvU2F2ZSIsIm1lcmdlTGF5ZXJzIiwibGF5ZXJzVG9NZXJnZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwidW5tZXJnZWQiLCJ0b01lcmdlIiwiX2wkY29uZmlnIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJfdmFsaWRhdGVMYXllcnNCeURhdGEyIiwibWVyZ2VkTGF5ZXIiLCJfaW5zZXJ0TGF5ZXJBdFJpZ2h0T3IiLCJpbnNlcnRMYXllckF0UmlnaHRPcmRlciIsIm5ld0xheWVyT3JkZXIiLCJuZXdMYXllcnMiLCJsYXllclRvQmVNZXJnZWQiLCJjdXJyZW50TGF5ZXJzIiwibGF5ZXJzVG9JbnNlcnQiLCJjdXJyZW50T3JkZXIiLCJjdXJyZW50TGF5ZXJRdWV1ZSIsImZpbmRCeUlkIiwibGF5ZXIiLCJCb29sZWFuIiwibmV3TGF5ZXJPcmRlclF1ZXVlIiwibWVyZ2VJbnRlcmFjdGlvbnMiLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJtZXJnZWQiLCJrZXkiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImN1cnJlbnRDb25maWciLCJfcmVmMiIsImVuYWJsZWQiLCJjb25maWdTYXZlZCIsImNvbmZpZ1RvTWVyZ2UiLCJfbWVyZ2VJbnRlcmFjdGlvblRvb2wiLCJtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyIsIm1lcmdlZFRvb2x0aXAiLCJ1bm1lcmdlZFRvb2x0aXAiLCJmaWVsZHNUb1Nob3ciLCJ0b29sdGlwIiwicGljayIsIm5leHRTdGF0ZSIsInNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbiIsImNvbWJpbmVJbnRlcmFjdGlvbkNvbmZpZ3MiLCJjb25maWdzIiwiY29tYmluZWQiLCJfbG9vcDIiLCJ0b0JlQ29tYmluZWRQcm9wcyIsImMiLCJzb21lIiwicCIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZSIsInJlZHVjZSIsImFjYyIsIm5leHRGaWVsZHNUb1Nob3ciLCJfbG9vcDMiLCJuZXh0RGF0YUlkS2V5IiwibmV4dFRvb2x0aXBGaWVsZHMiLCJuZXh0VEYiLCJmaW5kIiwiX3JlZjMiLCJfYWdncmVnYXRlIiwic2l6ZSIsImFnZ3JlZ2F0ZSIsIkFHR1JFR0FUSU9OX1RZUEVTIiwibWF4aW11bSIsIl91bm1lcmdlZCR0b29sdGlwIiwiX3VubWVyZ2VkJHRvb2x0aXAyIiwiX3N0YXRlJGludGVyYWN0aW9uVG9CIiwiX3VubWVyZ2VkJHRvb2x0aXAzIiwicmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl9pbnRlcmFjdGlvbkNvbmZpZyR0byIsIl9pbnRlcmFjdGlvbkNvbmZpZyR0bzIiLCJtZXJnZVNwbGl0TWFwcyIsInNwbGl0TWFwcyIsInNtIiwiZW50cmllcyIsIl9yZWY0IiwiX3JlZjUiLCJfc2xpY2VkVG9BcnJheTIiLCJwdXNoVG8iLCJnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwibWVyZ2VFZmZlY3RzIiwibmV3RWZmZWN0cyIsImVmZmVjdCIsImNyZWF0ZUVmZmVjdCIsImRlZXBtZXJnZSIsImFsbCIsImlzQ29uZmlnQWN0aXZlIiwiaXNWYWxpZFRvU2F2ZSIsInRvb2x0aXBDb25maWciLCJfbG9vcDQiLCJhbGxGaWVsZHMiLCJmaWVsZHMiLCJmb3VuZEZpZWxkc1RvU2hvdyIsImZpZWxkIiwibWVyZ2VMYXllckJsZW5kaW5nIiwibGF5ZXJCbGVuZGluZyIsIkxBWUVSX0JMRU5ESU5HUyIsImNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlncyIsIm1lcmdlT3ZlcmxheUJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiT1ZFUkxBWV9CTEVORElOR1MiLCJjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlncyIsIm1lcmdlQW5pbWF0aW9uQ29uZmlnIiwiYW5pbWF0aW9uIiwiY3VycmVudFRpbWUiLCJhbmltYXRpb25Db25maWciLCJkb21haW4iLCJjb21iaW5lQW5pbWF0aW9uQ29uZmlncyIsIl9hZ2dyZWdhdGUyIiwiX2FnZ3JlZ2F0ZTMiLCJtaW5pbXVtIiwic3BlZWQiLCJ2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zIiwic2F2ZWRDb2xzIiwiZW1wdHlDb2xzIiwib3B0aW9ucyIsImNvbHVtbnMiLCJfbG9vcDUiLCJfT2JqZWN0JGtleXMiLCJfaSIsInNhdmVkIiwiZmllbGRJZHgiLCJfcmVmNiIsImFsbENvbEZvdW5kIiwiZXZlcnkiLCJ2YWxpZGF0ZUNvbHVtbiIsInJ2IiwidGhyb3dPbkVycm9yIiwicmVxdWlyZWRDb2x1bW5zIiwiayIsIm9wdGlvbmFsIiwibWlzc2luZ0NvbHVtbnMiLCJFcnJvciIsImpvaW4iLCJjb25maWdDb2x1bW5zIiwiaW52YWxpZENvbHVtbnMiLCJfY29sdW1ucyRrIiwiY29sdW1uIiwidmFsaWRhdG9yIiwidmFsaWRhdGVTYXZlZFRleHRMYWJlbCIsIl9yZWY3Iiwic2F2ZWRUZXh0TGFiZWwiLCJfcmVmOCIsImxheWVyVGV4dExhYmVsIiwic2F2ZWRUZXh0TGFiZWxzIiwidGV4dExhYmVsIiwiZmQiLCJKU09OIiwic3RyaW5naWZ5IiwiYWNjdSIsInZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyIsInNhdmVkTGF5ZXIiLCJ2YWx1ZXMiLCJfcmVmOSIsInNjYWxlIiwiZm91bmRGaWVsZCIsImZvdW5kQ2hhbm5lbCIsInVwZGF0ZUxheWVyQ29uZmlnIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiX3NhdmVkTGF5ZXIkY29uZmlnIiwiX25ld0xheWVyJGNvbmZpZyRmaWVsIiwiZmllbGROYW1lIiwiX2xheWVyJGNvbmZpZyIsInZhbGlkYXRlTGF5ZXIiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbiIsImNvbHVtbkNvbmZpZyIsImdldExheWVyQ29sdW1ucyIsImNvbE1vZGVDb25maWciLCJjb2x1bW5Nb2RlIiwic3VwcG9ydGVkQ29sdW1uTW9kZXMiLCJjb2xNb2RlIiwib3B0aW9uYWxDb2x1bW5zIiwiZGF0YXNldCIsInR5cGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImxhYmVsIiwiaXNWaXNpYmxlIiwiaGlkZGVuIiwiaGlnaGxpZ2h0Q29sb3IiLCJjb3BpZWRWaXNDb25maWciLCJjb3B5TGF5ZXJDb25maWciLCJ2aXNDb25maWciLCJzaGFsbG93Q29weSIsInZhbGlkYXRlVmlzQ29uZmlnIiwibWVyZ2VFZGl0b3IiLCJzYXZlZEVkaXRvciIsIl9zYXZlZEVkaXRvciR2aXNpYmxlIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJ2aXNpYmxlIiwiY29tYmluZUVkaXRvckNvbmZpZ3MiLCJuZXh0Q29uZmlnIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJuZXdEYXRhRW50cmllcyIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwibmV3RGF0YXNldElkcyIsIl9zdGF0ZSRwcmVzZXJ2ZURhdGFzZSIsImFyciIsIl9yZWYxMyIsInRhbGx5cyIsIk1hcCIsIm5vdE51bGxvclVuZGVmaW5lZCIsImhhcyIsInNldCIsImdldCIsIlZJU19TVEFURV9NRVJHRVJTIiwiZXhwb3J0cyIsIm1lcmdlIiwicHJvcCIsInRvTWVyZ2VQcm9wIiwicHJlc2VydmVPcmRlciIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwic2F2ZVVubWVyZ2VkIiwiY29tYmluZUNvbmZpZ3MiXSwic291cmNlcyI6WyIuLi9zcmMvdmlzLXN0YXRlLW1lcmdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gudW5pcSc7XG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gucGljayc7XG5pbXBvcnQgZmxhdHRlbkRlZXAgZnJvbSAnbG9kYXNoLmZsYXR0ZW5kZWVwJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7XG4gIGFycmF5SW5zZXJ0LFxuICBnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzLFxuICBmaW5kQnlJZCxcbiAgYWdncmVnYXRlXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge0xheWVyfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge0FHR1JFR0FUSU9OX1RZUEVTLCBMQVlFUl9CTEVORElOR1MsIE9WRVJMQVlfQkxFTkRJTkdTfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0NVUlJFTlRfVkVSU0lPTiwgVmlzU3RhdGUsIFZpc1N0YXRlTWVyZ2VycywgS2VwbGVyR0xTY2hlbWFDbGFzc30gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IHtcbiAgUGFyc2VkTGF5ZXIsXG4gIFBhcnNlZFZpc1N0YXRlLFxuICBTYXZlZEludGVyYWN0aW9uQ29uZmlnLFxuICBUb29sdGlwSW5mbyxcbiAgU2F2ZWRFZGl0b3IsXG4gIFBhcnNlZENvbmZpZyxcbiAgRmlsdGVyLFxuICBFZmZlY3QgYXMgRWZmZWN0VHlwZSxcbiAgUGFyc2VkRWZmZWN0LFxuICBMYXllckNvbHVtbnMsXG4gIExheWVyQ29sdW1uLFxuICBQYXJzZWRGaWx0ZXIsXG4gIE5lc3RlZFBhcnRpYWwsXG4gIFNhdmVkQW5pbWF0aW9uQ29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZSwgRGF0YXNldHMsIGFzc2lnbkdwdUNoYW5uZWxzLCByZXNldEZpbHRlckdwdU1vZGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge2dldExheWVyT3JkZXJGcm9tTGF5ZXJzfSBmcm9tICcuL2xheWVyLXV0aWxzJztcblxuLyoqXG4gKiBNZXJnZSBsb2FkZWQgZmlsdGVycyB3aXRoIGN1cnJlbnQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBmaWx0ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnZmlsdGVycyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IHByZXNlcnZlRmlsdGVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBmaWx0ZXJzVG9NZXJnZT8ubWFwKGwgPT4gbC5pZClcbiAgICA6IHN0YXRlLnByZXNlcnZlRmlsdGVyT3JkZXI7XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcnNUb01lcmdlKSB8fCAhZmlsdGVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkLCB1cGRhdGVkRGF0YXNldHN9ID0gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMoc3RhdGUsIGZpbHRlcnNUb01lcmdlKTtcbiAgbGV0IHVwZGF0ZWRGaWx0ZXJzID0gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHZhbGlkYXRlZCxcbiAgICBwcmVzZXJ2ZUZpbHRlck9yZGVyXG4gICk7XG5cbiAgLy8gbWVyZ2UgZmlsdGVyIHdpdGggZXhpc3RpbmdcbiAgdXBkYXRlZEZpbHRlcnMgPSByZXNldEZpbHRlckdwdU1vZGUodXBkYXRlZEZpbHRlcnMpO1xuICB1cGRhdGVkRmlsdGVycyA9IGFzc2lnbkdwdUNoYW5uZWxzKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZGF0YXNldHNUb0ZpbHRlciA9IHVuaXEoZmxhdHRlbkRlZXAodmFsaWRhdGVkLm1hcChmID0+IGYuZGF0YUlkKSkpO1xuXG4gIGNvbnN0IGZpbHRlcmVkID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBkYXRhc2V0c1RvRmlsdGVyLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICB1cGRhdGVkRmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHVwZGF0ZWRGaWx0ZXJzLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZCxcbiAgICBwcmVzZXJ2ZUZpbHRlck9yZGVyLFxuICAgIGZpbHRlclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5maWx0ZXJUb0JlTWVyZ2VkLCAuLi5mYWlsZWRdXG4gIH07XG59XG5cbi8vIHJlcGxhY2UgZGF0YUlkIGluIHNhdmVkIEZpbHRlclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzKFxuICBzYXZlZEZpbHRlcjogRmlsdGVyW10sXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pIHtcbiAgY29uc3QgcmVwbGFjZWQ6IEZpbHRlcltdID0gW107XG4gIHNhdmVkRmlsdGVyLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICBpZiAoZmlsdGVyLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgICBjb25zdCBuZXdEYXRhSWQgPSBmaWx0ZXIuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1VzZSA6IGQpKTtcbiAgICAgIGxldCBwbG90VHlwZTtcbiAgICAgIC8vIFRPRE86IG1vcmUgZ2VuZXJpYyBhcHByb2FjaCB0byBzYXZlIHBsb3RUeXBlLmNvbG9yc0J5RGF0YUlkXG4gICAgICBpZiAoZmlsdGVyLnBsb3RUeXBlPy5jb2xvcnNCeURhdGFJZD8uW2RhdGFJZF0pIHtcbiAgICAgICAgLy8gcmVwbGFjZSBjb2xvckJ5RGF0YUlkIGluIGZpbHRlci5wbG90VHlwZVxuICAgICAgICBjb25zdCB7W2RhdGFJZF06IGNvbG9yLCAuLi5yZXN0fSA9IGZpbHRlci5wbG90VHlwZT8uY29sb3JzQnlEYXRhSWQgfHwge307XG4gICAgICAgIHBsb3RUeXBlID0ge1xuICAgICAgICAgIC4uLmZpbHRlci5wbG90VHlwZSxcbiAgICAgICAgICBjb2xvcnNCeURhdGFJZDoge1xuICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICAgIFtkYXRhSWRUb1VzZV06IGNvbG9yXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmVwbGFjZWQucHVzaCh7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWQsXG4gICAgICAgIC4uLihwbG90VHlwZSA/IHtwbG90VHlwZX0gOiB7fSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NhdmVkTGF5ZXJDb25maWdWMShsYXllckNvbmZpZzogYW55KTogYm9vbGVhbiB7XG4gIC8vIGV4cG9ydGVkIGxheWVyIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgdmlzdWFsQ2hhbm5lbHMgcHJvcGVydHlcbiAgcmV0dXJuIGxheWVyQ29uZmlnPy52aXN1YWxDaGFubmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGF5ZXJDb25maWcoXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzcyxcbiAgbGF5ZXJDb25maWc6IGFueVxuKTogUGFyc2VkTGF5ZXIgfCB1bmRlZmluZWQge1xuICAvLyBhc3N1bWUgdGhlIGxheWVyIGNvbmZpZyBpcyBjdXJyZW50IHZlcnNpb25cbiAgY29uc3Qgc2F2ZWRDb25maWcgPSB7XG4gICAgdmVyc2lvbjogQ1VSUkVOVF9WRVJTSU9OLFxuICAgIGNvbmZpZzoge1xuICAgICAgdmlzU3RhdGU6IHtsYXllcnM6IFtsYXllckNvbmZpZ10sIGxheWVyT3JkZXI6IFtsYXllckNvbmZpZy5pZF19XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZENvbmZpZyk/LnZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgY3VycmVudEl0ZW1zOiBGaWx0ZXJbXSxcbiAgaXRlbXM6IEZpbHRlcltdLFxuICBwcmVzZXJ2ZWRPcmRlcjogYW55W10gPSBbXSxcbiAgZGVmYXVsdFN0YXJ0PzogYm9vbGVhblxuKSB7XG4gIGxldCBuZXdJdGVtcyA9IFsuLi5jdXJyZW50SXRlbXNdO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IGV4cGVjdGVkSWR4ID0gcHJlc2VydmVkT3JkZXIuaW5kZXhPZihpdGVtLmlkKTtcbiAgICAvLyBpbnNlcnRBdCB0aGUgZW5kIGJ5IGRlZmF1bHRcbiAgICBsZXQgaW5zZXJ0QXQgPSBkZWZhdWx0U3RhcnQgPyAwIDogbmV3SXRlbXMubGVuZ3RoO1xuICAgIGlmIChleHBlY3RlZElkeCA+IDApIHtcbiAgICAgIC8vIGxvb2sgZm9yIGxheWVyIHRvIGluc2VydCBhZnRlclxuICAgICAgbGV0IGkgPSBleHBlY3RlZElkeCArIDE7XG4gICAgICBsZXQgcHJlY2VlZElkeCA9IC0xO1xuICAgICAgd2hpbGUgKGktLSA+IDAgJiYgcHJlY2VlZElkeCA8IDApIHtcbiAgICAgICAgLy8ga2VlcCBsb29raW5nIGZvciBwcmVjZWVkIGxheWVyIHRoYXQgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgY29uc3QgcHJlY2VlZEl0ZW1JZCA9IHByZXNlcnZlZE9yZGVyW2kgLSAxXTtcbiAgICAgICAgcHJlY2VlZElkeCA9IG5ld0l0ZW1zLmZpbmRJbmRleChkID0+IGQuaWQgPT09IHByZWNlZWRJdGVtSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHByZWNlZWRJZHggPiAtMSkge1xuICAgICAgICAvLyBpZiBmb3VuZFxuICAgICAgICBpbnNlcnRBdCA9IHByZWNlZWRJZHggKyAxO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXdJdGVtcyA9IGFycmF5SW5zZXJ0KG5ld0l0ZW1zLCBpbnNlcnRBdCwgaXRlbSk7XG4gIH1cbiAgcmV0dXJuIG5ld0l0ZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlOiBWaXNTdGF0ZSwgbGF5ZXJDb25maWc6IGFueSk6IExheWVyIHwgbnVsbCB7XG4gIC8vIGNoZWNrIGlmIHRoZSBsYXllciBjb25maWcgaXMgcGFyc2VkXG4gIGNvbnN0IHBhcnNlZExheWVyQ29uZmlnID0gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWcpXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbGF5ZXJDb25maWcpXG4gICAgOiBsYXllckNvbmZpZztcblxuICBpZiAoIXBhcnNlZExheWVyQ29uZmlnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gZmlyc3QgdmFsaWRhdGUgY29uZmlnIGFnYWluc3QgZGF0YXNldFxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBbcGFyc2VkTGF5ZXJDb25maWddLFxuICAgIHthbGxvd0VtcHR5Q29sdW1uOiB0cnVlfVxuICApO1xuXG4gIGlmIChmYWlsZWQ/Lmxlbmd0aCB8fCAhdmFsaWRhdGVkLmxlbmd0aCkge1xuICAgIC8vIGZhaWxlZFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZWRbMF07XG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgZmlsdGVyIGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUZpbHRlcihcbiAgbmV3RmlsdGVyOiBGaWx0ZXIsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkRmlsdGVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoe2ZpbHRlcnM6IFtuZXdGaWx0ZXJdfSwgc2NoZW1hKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8uZmlsdGVycz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgbGF5ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTGF5ZXIoXG4gIG5ld0xheWVyOiBMYXllcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtsYXllcnM6IFtuZXdMYXllcl0sIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZF19LFxuICAgIHNjaGVtYVxuICApO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGVmZmVjdCBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVFZmZlY3QoXG4gIG5ld0VmZmVjdDogRWZmZWN0VHlwZSxcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRFZmZlY3QgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShcbiAgICB7ZWZmZWN0czogW25ld0VmZmVjdF0sIGVmZmVjdE9yZGVyOiBbbmV3RWZmZWN0LmlkXX0sXG4gICAgc2NoZW1hXG4gICk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmVmZmVjdHM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgdmlzIHN0YXRlIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplVmlzU3RhdGUoXG4gIHZpc1N0YXRlOiBQYXJ0aWFsPFZpc1N0YXRlPixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRWaXNTdGF0ZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNhdmVkU3RhdGUgPSBzY2hlbWEuZ2V0Q29uZmlnVG9TYXZlKHtcbiAgICB2aXNTdGF0ZVxuICB9KTtcbiAgcmV0dXJuIHNhdmVkU3RhdGUgPyBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZFN0YXRlKT8udmlzU3RhdGUgOiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIE1lcmdlIGxheWVycyBmcm9tIGRlLXNlcmlhbGl6ZWQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGxheWVyc1RvTWVyZ2U6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gZnJvbUNvbmZpZ1xuICAgID8gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobGF5ZXJzVG9NZXJnZSlcbiAgICA6IHN0YXRlLnByZXNlcnZlTGF5ZXJPcmRlcjtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxheWVyc1RvTWVyZ2UpIHx8ICFsYXllcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBkb24ndCBtZXJnZSBsYXllciBpZiBkYXRhc2V0IGlzIGJlaW5nIG1lcmdlZFxuICBjb25zdCB1bm1lcmdlZDogUGFyc2VkTGF5ZXJbXSA9IFtdO1xuICBjb25zdCB0b01lcmdlOiBQYXJzZWRMYXllcltdID0gW107XG4gIGxheWVyc1RvTWVyZ2UuZm9yRWFjaCgobDogUGFyc2VkTGF5ZXIpID0+IHtcbiAgICBpZiAobD8uY29uZmlnPy5kYXRhSWQgJiYgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbbC5jb25maWcuZGF0YUlkXSkge1xuICAgICAgdW5tZXJnZWQucHVzaChsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9NZXJnZS5wdXNoKGwpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZDogbWVyZ2VkTGF5ZXIsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIHRvTWVyZ2VcbiAgKTtcbiAgdW5tZXJnZWQucHVzaCguLi5mYWlsZWQpO1xuICAvLyBwdXQgbmV3IGxheWVycyBpbiBmcm9udCBvZiBjdXJyZW50IGxheWVyc1xuICBjb25zdCB7bmV3TGF5ZXJPcmRlciwgbmV3TGF5ZXJzfSA9IGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICAgIHN0YXRlLmxheWVycyxcbiAgICBtZXJnZWRMYXllcixcbiAgICBzdGF0ZS5sYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlclxuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXIsXG4gICAgbGF5ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUubGF5ZXJUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICBjdXJyZW50TGF5ZXJzLFxuICBsYXllcnNUb0luc2VydCxcbiAgY3VycmVudE9yZGVyLFxuICBwcmVzZXJ2ZWRPcmRlcjogc3RyaW5nW10gPSBbXVxuKSB7XG4gIGlmICghbGF5ZXJzVG9JbnNlcnQ/Lmxlbmd0aCkge1xuICAgIHJldHVybiB7bmV3TGF5ZXJzOiBjdXJyZW50TGF5ZXJzLCBuZXdMYXllck9yZGVyOiBjdXJyZW50T3JkZXJ9O1xuICB9XG4gIC8vIHBlcnNlcnZlZE9yZGVyIFsnYScsICdiJywgJ2MnXTtcbiAgLy8gbGF5ZXJPcmRlciBbJ2EnLCAnYicsICdjJ11cbiAgY29uc3QgY3VycmVudExheWVyUXVldWUgPSBjdXJyZW50T3JkZXJcbiAgICAubWFwKGlkID0+IGZpbmRCeUlkKGlkKShjdXJyZW50TGF5ZXJzKSlcbiAgICAuZmlsdGVyKGxheWVyID0+IEJvb2xlYW4obGF5ZXIpKTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gY3VycmVudExheWVycy5jb25jYXQobGF5ZXJzVG9JbnNlcnQpO1xuICBjb25zdCBuZXdMYXllck9yZGVyUXVldWUgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIGN1cnJlbnRMYXllclF1ZXVlLFxuICAgIGxheWVyc1RvSW5zZXJ0LFxuICAgIHByZXNlcnZlZE9yZGVyLFxuICAgIHRydWVcbiAgKTtcblxuICAvLyByZWNvbnN0cnVjdCBsYXllck9yZGVyIGFmdGVyIGluc2VydFxuICBjb25zdCBuZXdMYXllck9yZGVyID0gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobmV3TGF5ZXJPcmRlclF1ZXVlKTtcblxuICByZXR1cm4ge1xuICAgIG5ld0xheWVyT3JkZXIsXG4gICAgbmV3TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25zIHdpdGggc2F2ZWQgY29uZmlnXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvbnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiB8IHVuZGVmaW5lZFxuKTogUyB7XG4gIGNvbnN0IG1lcmdlZDogTmVzdGVkUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuICBjb25zdCB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuXG4gIGlmIChpbnRlcmFjdGlvblRvQmVNZXJnZWQpIHtcbiAgICAoT2JqZWN0LmtleXMoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSBhcyBBcnJheTxrZXlvZiBTYXZlZEludGVyYWN0aW9uQ29uZmlnPikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKCFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudENvbmZpZyA9XG4gICAgICAgIGtleSA9PT0gJ3Rvb2x0aXAnIHx8IGtleSA9PT0gJ2JydXNoJyA/IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnIDogbnVsbDtcblxuICAgICAgY29uc3Qge2VuYWJsZWQsIC4uLmNvbmZpZ1NhdmVkfSA9IGludGVyYWN0aW9uVG9CZU1lcmdlZFtrZXldIHx8IHt9O1xuXG4gICAgICBsZXQgY29uZmlnVG9NZXJnZSA9IGNvbmZpZ1NhdmVkO1xuXG4gICAgICBpZiAoa2V5ID09PSAndG9vbHRpcCcpIHtcbiAgICAgICAgY29uc3Qge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH0gPSBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb25maWdTYXZlZCBhcyBTYXZlZEludGVyYWN0aW9uQ29uZmlnWyd0b29sdGlwJ11cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBtZXJnZSBuZXcgZGF0YXNldCB0b29sdGlwcyB3aXRoIG9yaWdpbmFsIGRhdGFzZXQgdG9vbHRpcHNcbiAgICAgICAgY29uZmlnVG9NZXJnZSA9IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICAgIC4uLihjdXJyZW50Q29uZmlnIGFzIFRvb2x0aXBJbmZvWydjb25maWcnXSkuZmllbGRzVG9TaG93LFxuICAgICAgICAgICAgLi4ubWVyZ2VkVG9vbHRpcFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModW5tZXJnZWRUb29sdGlwKS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgdW5tZXJnZWQudG9vbHRpcCA9IHtmaWVsZHNUb1Nob3c6IHVubWVyZ2VkVG9vbHRpcCwgZW5hYmxlZDogQm9vbGVhbihlbmFibGVkKX07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVyZ2VkW2tleV0gPSB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0sXG4gICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCksXG4gICAgICAgIC4uLihjdXJyZW50Q29uZmlnXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmZpZzogcGljayhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5jdXJyZW50Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgLi4uY29uZmlnVG9NZXJnZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudENvbmZpZylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIC4uLm1lcmdlZFxuICAgIH0sXG4gICAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24oc3RhdGUsIHVubWVyZ2VkKVxuICB9O1xuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkSW50ZXJhY3Rpb25Db25maWdbXSk6IFNhdmVkSW50ZXJhY3Rpb25Db25maWcge1xuICBjb25zdCBjb21iaW5lZCA9IHsuLi5jb25maWdzWzBdfTtcbiAgLy8gaGFuZGxlIGVhY2ggcHJvcGVydHkga2V5IG9mIGFuIGBJbnRlcmFjdGlvbkNvbmZpZ2AsIGUuZy4gdG9vbHRpcCwgZ2VvY29kZXIsIGJydXNoLCBjb29yZGluYXRlXG4gIC8vIGJ5IGNvbWJpbmluZyB2YWx1ZXMgZm9yIGVhY2ggYW1vbmcgYWxsIHBhc3NlZCBpbiBjb25maWdzXG5cbiAgZm9yIChjb25zdCBrZXkgaW4gY29tYmluZWQpIHtcbiAgICBjb25zdCB0b0JlQ29tYmluZWRQcm9wcyA9IGNvbmZpZ3MubWFwKGMgPT4gY1trZXldKTtcblxuICAgIC8vIGFsbCBvZiB0aGVzZSBoYXZlIGFuIGVuYWJsZWQgYm9vbGVhblxuICAgIGNvbWJpbmVkW2tleV0gPSB7XG4gICAgICAvLyBhcmUgYW55IG9mIHRoZSBjb25maWdzJyBlbmFibGVkIHZhbHVlcyB0cnVlP1xuICAgICAgZW5hYmxlZDogdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmVuYWJsZWQpXG4gICAgfTtcblxuICAgIGlmIChrZXkgPT09ICd0b29sdGlwJykge1xuICAgICAgLy8gYXJlIGFueSBvZiB0aGUgY29uZmlncycgY29tcGFyZU1vZGUgdmFsdWVzIHRydWU/XG4gICAgICBjb21iaW5lZFtrZXldLmNvbXBhcmVNb2RlID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmNvbXBhcmVNb2RlKTtcblxuICAgICAgLy8gcmV0dXJuIHRoZSBjb21wYXJlIHR5cGUgbW9kZSwgaXQgd2lsbCBiZSBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmVcbiAgICAgIGNvbWJpbmVkW2tleV0uY29tcGFyZVR5cGUgPSBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShcbiAgICAgICAgdG9CZUNvbWJpbmVkUHJvcHMubWFwKHAgPT4gcC5jb21wYXJlVHlwZSlcbiAgICAgICk7XG5cbiAgICAgIC8vIGNvbWJpbmUgZmllbGRzVG9TaG93IGFtb25nIGFsbCBkYXRhc2V0IGlkc1xuICAgICAgY29tYmluZWRba2V5XS5maWVsZHNUb1Nob3cgPSB0b0JlQ29tYmluZWRQcm9wc1xuICAgICAgICAubWFwKHAgPT4gcC5maWVsZHNUb1Nob3cpXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgbmV4dEZpZWxkc1RvU2hvdykgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgbmV4dERhdGFJZEtleSBpbiBuZXh0RmllbGRzVG9TaG93KSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0VG9vbHRpcEZpZWxkcyA9IG5leHRGaWVsZHNUb1Nob3dbbmV4dERhdGFJZEtleV07XG4gICAgICAgICAgICBpZiAoIWFjY1tuZXh0RGF0YUlkS2V5XSkge1xuICAgICAgICAgICAgICAvLyBpZiB0aGUgZGF0YXNldCBpZCBpcyBub3QgcHJlc2VudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgICAgICAgICAgLy8gdGhlbiBhZGQgaXQgd2l0aCBpdHMgdG9vbHRpcCBmaWVsZHNcbiAgICAgICAgICAgICAgYWNjW25leHREYXRhSWRLZXldID0gbmV4dFRvb2x0aXBGaWVsZHM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhlIGRhdGFzZXQgaWQgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAgICAgICAgICAvLyBzbyBvbmx5IGFkZCB0aGUgbmV4dCB0b29sdGlwIGZpZWxkcyBmb3IgdGhpcyBkYXRhc2V0J3MgYXJyYXkgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgcHJlc2VudCxcbiAgICAgICAgICAgICAgLy8gdXNpbmcgdGhlIHRvb2x0aXBGaWVsZC5uYW1lIHByb3BlcnR5IGZvciB1bmlxdWVuZXNzXG4gICAgICAgICAgICAgIG5leHRUb29sdGlwRmllbGRzLmZvckVhY2gobmV4dFRGID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWFjY1tuZXh0RGF0YUlkS2V5XS5maW5kKCh7bmFtZX0pID0+IG5leHRURi5uYW1lID09PSBuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgYWNjW25leHREYXRhSWRLZXldLnB1c2gobmV4dFRGKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JydXNoJykge1xuICAgICAgLy8ga2VlcCB0aGUgYmlnZ2VzdCBicnVzaCBzaXplXG4gICAgICBjb21iaW5lZFtrZXldLnNpemUgPVxuICAgICAgICBhZ2dyZWdhdGUodG9CZUNvbWJpbmVkUHJvcHMsIEFHR1JFR0FUSU9OX1RZUEVTLm1heGltdW0sIHAgPT4gcC5zaXplKSA/PyBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZDtcbn1cblxuZnVuY3Rpb24gc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPlxuKSB7XG4gIGlmICghdW5tZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvdykge1xuICAgIHJldHVybiBzdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0b29sdGlwOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQudG9vbHRpcCxcbiAgICAgIC4uLih0eXBlb2YgdW5tZXJnZWQ/LnRvb2x0aXA/LmVuYWJsZWQgPT09ICdib29sZWFuJ1xuICAgICAgICA/IHtlbmFibGVkOiB1bm1lcmdlZC50b29sdGlwLmVuYWJsZWR9XG4gICAgICAgIDoge30pLFxuICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93LFxuICAgICAgICAuLi51bm1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzKGludGVyYWN0aW9uQ29uZmlnLCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwPy5maWVsZHNUb1Nob3dbZGF0YUlkXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCxcbiAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgW2RhdGFJZFRvUmVwbGFjZV06IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwPy5maWVsZHNUb1Nob3dbZGF0YUlkXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBNZXJnZSBzcGxpdE1hcHMgY29uZmlnIHdpdGggY3VycmVudCB2aXNTdGV0ZS5cbiAqIDEuIGlmIGN1cnJlbnQgbWFwIGlzIHNwbGl0LCBidXQgc3BsaXRNYXAgRE9FU05PVCBjb250YWluIG1hcHNcbiAqICAgIDogZG9uJ3QgbWVyZ2UgYW55dGhpbmdcbiAqIDIuIGlmIGN1cnJlbnQgbWFwIGlzIE5PVCBzcGxpdCwgYnV0IHNwbGl0TWFwcyBjb250YWluIG1hcHNcbiAqICAgIDogYWRkIHRvIHNwbGl0TWFwcywgYW5kIGFkZCBjdXJyZW50IGxheWVycyB0byBzcGxpdE1hcHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlU3BsaXRNYXBzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBzcGxpdE1hcHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ3NwbGl0TWFwcyddID0gW11cbik6IFMge1xuICBjb25zdCBtZXJnZWQgPSBbLi4uc3RhdGUuc3BsaXRNYXBzXTtcbiAgY29uc3QgdW5tZXJnZWQgPSBbXTtcbiAgc3BsaXRNYXBzLmZvckVhY2goKHNtLCBpKSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHNtLmxheWVycyk7XG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChbaWQsIHZhbHVlXSkgPT4ge1xuICAgICAgICAvLyBjaGVjayBpZiBsYXllciBleGlzdHNcbiAgICAgICAgY29uc3QgcHVzaFRvID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBpZCkgPyBtZXJnZWQgOiB1bm1lcmdlZDtcblxuICAgICAgICAvLyBjcmVhdGUgbWFwIHBhbmVsIGlmIGN1cnJlbnQgbWFwIGlzIG5vdCBzcGxpdFxuICAgICAgICBwdXNoVG9baV0gPSBwdXNoVG9baV0gfHwge1xuICAgICAgICAgIC8vIGtlZXAgaWRcbiAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICBsYXllcnM6IHB1c2hUbyA9PT0gbWVyZ2VkID8gZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwKHN0YXRlLmxheWVycykgOiBbXVxuICAgICAgICB9O1xuICAgICAgICBwdXNoVG9baV0ubGF5ZXJzID0ge1xuICAgICAgICAgIC4uLnB1c2hUb1tpXS5sYXllcnMsXG4gICAgICAgICAgW2lkXTogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSBhcmUgbWVyZ2luZyBpZiB0aGVyZSBhcmUgbm8gbGF5ZXJzIGluIGJvdGggc3BsaXQgbWFwXG4gICAgICBtZXJnZWQucHVzaChzbSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogbWVyZ2VkLFxuICAgIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBlZmZlY3RzIHdpdGggc2F2ZWQgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVmZmVjdHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGVmZmVjdHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2VmZmVjdHMnXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBuZXdFZmZlY3RzID0gW1xuICAgIC4uLnN0YXRlLmVmZmVjdHMsXG4gICAgLi4uKGVmZmVjdHMgfHwgW10pXG4gICAgICAubWFwKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBmcm9tQ29uZmlnXG4gICAgICAgICAgPyBjcmVhdGVFZmZlY3QoXG4gICAgICAgICAgICAgIGRlZXBtZXJnZS5hbGwoW1xuICAgICAgICAgICAgICAgIGVmZmVjdCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAvLyBjb2xsYXBzZSBhbGwgcGFuZWxzIHdoZW4gbG9hZGluZyBlZmZlY3RzXG4gICAgICAgICAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiAoZWZmZWN0IGFzIEVmZmVjdFR5cGUpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoZWZmZWN0ID0+IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZWZmZWN0ICYmIGVmZmVjdC5pc1ZhbGlkVG9TYXZlKCkpO1xuICAgICAgfSlcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyOiBuZXdFZmZlY3RzLm1hcChlZmZlY3QgPT4gZWZmZWN0LmlkKVxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAgd2l0aCBzYXZlZCBjb25maWcsXG4gKiB2YWxpZGF0ZSBmaWVsZHNUb1Nob3dcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEBwYXJhbSB0b29sdGlwQ29uZmlnXG4gKiBAcmV0dXJuIC0ge21lcmdlZFRvb2x0aXA6IHt9LCB1bm1lcmdlZFRvb2x0aXA6IHt9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgdG9vbHRpcENvbmZpZzogUGljazxUb29sdGlwSW5mb1snY29uZmlnJ10sICdmaWVsZHNUb1Nob3cnPiB8IG51bGwgPSBudWxsXG4pIHtcbiAgY29uc3QgdW5tZXJnZWRUb29sdGlwOiBUb29sdGlwSW5mb1snY29uZmlnJ11bJ2ZpZWxkc1RvU2hvdyddID0ge307XG4gIGNvbnN0IG1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcblxuICBpZiAoXG4gICAgIXRvb2x0aXBDb25maWcgfHxcbiAgICAhdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cgfHxcbiAgICAhT2JqZWN0LmtleXModG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpLmxlbmd0aFxuICApIHtcbiAgICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG4gIH1cblxuICBmb3IgKGNvbnN0IGRhdGFJZCBpbiB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykge1xuICAgIGlmICghc3RhdGUuZGF0YXNldHNbZGF0YUlkXSB8fCBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgICAvLyBpcyBub3QgeWV0IGxvYWRlZFxuICAgICAgdW5tZXJnZWRUb29sdGlwW2RhdGFJZF0gPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBkYXRhc2V0IGlzIGxvYWRlZFxuICAgICAgY29uc3QgYWxsRmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHMubWFwKGQgPT4gZC5uYW1lKTtcbiAgICAgIGNvbnN0IGZvdW5kRmllbGRzVG9TaG93ID0gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXS5maWx0ZXIoZmllbGQgPT5cbiAgICAgICAgYWxsRmllbGRzLmluY2x1ZGVzKGZpZWxkLm5hbWUpXG4gICAgICApO1xuXG4gICAgICBtZXJnZWRUb29sdGlwW2RhdGFJZF0gPSBmb3VuZEZpZWxkc1RvU2hvdztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG59XG4vKipcbiAqIE1lcmdlIGxheWVyQmxlbmRpbmcgd2l0aCBzYXZlZFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJCbGVuZGluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJCbGVuZGluZzogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKGxheWVyQmxlbmRpbmcgJiYgTEFZRVJfQkxFTkRJTkdTW2xheWVyQmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJCbGVuZGluZ1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogQ29tYmluZXMgbXVsdGlwbGUgbGF5ZXIgYmxlbmRpbmcgY29uZmlncyBpbnRvIGEgc2luZ2xlIHN0cmluZ1xuICogYnkgcmV0dXJuaW5nIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCBvY2N1cnJlbmNlXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlncyhjb25maWdzOiBzdHJpbmdbXSk6IHN0cmluZyB8IG51bGwge1xuICAvLyByZXR1cm4gdGhlIG1vZGUgb2YgdGhlIGxheWVyIGJsZW5kaW5nIHR5cGVcbiAgcmV0dXJuIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MpO1xufVxuXG4vKipcbiAqIE1lcmdlIG92ZXJsYXlCbGVuZGluZyB3aXRoIHNhdmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU92ZXJsYXlCbGVuZGluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgb3ZlcmxheUJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydvdmVybGF5QmxlbmRpbmcnXVxuKTogUyB7XG4gIGlmIChvdmVybGF5QmxlbmRpbmcgJiYgT1ZFUkxBWV9CTEVORElOR1Nbb3ZlcmxheUJsZW5kaW5nXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG92ZXJsYXlCbGVuZGluZ1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogQ29tYmluZXMgbXVsdGlwbGUgb3ZlcmxheSBibGVuZGluZyBjb25maWdzIGludG8gYSBzaW5nbGUgc3RyaW5nXG4gKiBieSByZXR1cm5pbmcgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IG9jY3VycmVuY2VcbiAqKi9cbmZ1bmN0aW9uIGNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzKGNvbmZpZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgb3ZlcmxheSBibGVuZGluZyB0eXBlXG4gIHJldHVybiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShjb25maWdzKTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbmltYXRpb24gY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFuaW1hdGlvbkNvbmZpZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYW5pbWF0aW9uOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydhbmltYXRpb25Db25maWcnXVxuKTogUyB7XG4gIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLmN1cnJlbnRUaW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uYW5pbWF0aW9uLFxuICAgICAgICBkb21haW46IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lQW5pbWF0aW9uQ29uZmlncyhjb25maWdzOiBTYXZlZEFuaW1hdGlvbkNvbmZpZ1tdKTogU2F2ZWRBbmltYXRpb25Db25maWcge1xuICAvLyBnZXQgdGhlIHNtYWxsZXN0IHZhbHVlcyBvZiBjdXJyZW50VGltZSBhbmQgc3BlZWQgYW1vbmcgYWxsIGNvbmZpZ3NcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VGltZTogYWdncmVnYXRlKGNvbmZpZ3MsIEFHR1JFR0FUSU9OX1RZUEVTLm1pbmltdW0sIGMgPT4gYy5jdXJyZW50VGltZSkgPz8gbnVsbCxcbiAgICBzcGVlZDogYWdncmVnYXRlKGNvbmZpZ3MsIEFHR1JFR0FUSU9OX1RZUEVTLm1pbmltdW0sIGMgPT4gYy5zcGVlZCkgPz8gbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbHVtbnMgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKlxuICogQHBhcmFtIGZpZWxkc1xuICogQHBhcmFtIHNhdmVkQ29sc1xuICogQHBhcmFtIGVtcHR5Q29sc1xuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm4gLSB2YWxpZGF0ZWQgY29sdW1ucyBvciBudWxsXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBzYXZlZENvbHM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH0gPSB7fSxcbiAgZW1wdHlDb2xzOiBMYXllckNvbHVtbnMsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pIHtcbiAgLy8gUHJlcGFyZSBjb2x1bW5zIGZvciB0aGUgdmFsaWRhdG9yXG4gIGNvbnN0IGNvbHVtbnM6IHR5cGVvZiBlbXB0eUNvbHMgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZW1wdHlDb2xzKSkge1xuICAgIGNvbHVtbnNba2V5XSA9IHsuLi5lbXB0eUNvbHNba2V5XX07XG5cbiAgICBjb25zdCBzYXZlZCA9IHNhdmVkQ29sc1trZXldO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgY29uc3QgZmllbGRJZHggPSBmaWVsZHMuZmluZEluZGV4KCh7bmFtZX0pID0+IG5hbWUgPT09IHNhdmVkKTtcblxuICAgICAgaWYgKGZpZWxkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZvdW5kIGNvbHVtbnNcbiAgICAgICAgY29sdW1uc1trZXldLmZpZWxkSWR4ID0gZmllbGRJZHg7XG4gICAgICAgIGNvbHVtbnNba2V5XS52YWx1ZSA9IHNhdmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGZpbmQgYWN0dWFsIGNvbHVtbiBmaWVsZElkeCwgaW4gY2FzZSBpdCBoYXMgY2hhbmdlZFxuICBjb25zdCBhbGxDb2xGb3VuZCA9IE9iamVjdC5rZXlzKGNvbHVtbnMpLmV2ZXJ5KGtleSA9PlxuICAgIHZhbGlkYXRlQ29sdW1uKGNvbHVtbnNba2V5XSwgY29sdW1ucywgZmllbGRzKVxuICApO1xuXG4gIGNvbnN0IHJ2ID0gYWxsQ29sRm91bmQgPyBjb2x1bW5zIDogbnVsbDtcbiAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgY29uc3QgcmVxdWlyZWRDb2x1bW5zID0gT2JqZWN0LmtleXMoZW1wdHlDb2xzKS5maWx0ZXIoayA9PiAhZW1wdHlDb2xzW2tdLm9wdGlvbmFsKTtcbiAgICBjb25zdCBtaXNzaW5nQ29sdW1ucyA9IHJlcXVpcmVkQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdLnZhbHVlKTtcbiAgICBpZiAobWlzc2luZ0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBtaXNzaW5nIG9yIGludmFsaWQgY29sdW1uczogJHttaXNzaW5nQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBjb25zdCBjb25maWdDb2x1bW5zID0gT2JqZWN0LmtleXMoc2F2ZWRDb2xzKTtcbiAgICBjb25zdCBpbnZhbGlkQ29sdW1ucyA9IGNvbmZpZ0NvbHVtbnMuZmlsdGVyKGsgPT4gIWNvbHVtbnM/LltrXT8udmFsdWUpO1xuICAgIGlmIChpbnZhbGlkQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgY29sdW1uczogJHtpbnZhbGlkQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBydjtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBsYXllciBjb2x1bW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29sdW1uKFxuICBjb2x1bW46IExheWVyQ29sdW1uICYge3ZhbGlkYXRvcj86IHR5cGVvZiB2YWxpZGF0ZUNvbHVtbn0sXG4gIGNvbHVtbnM6IExheWVyQ29sdW1ucyxcbiAgYWxsRmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ11cbik6IGJvb2xlYW4ge1xuICBpZiAoY29sdW1uLm9wdGlvbmFsIHx8IGNvbHVtbi52YWx1ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChjb2x1bW4udmFsaWRhdG9yKSB7XG4gICAgcmV0dXJuIGNvbHVtbi52YWxpZGF0b3IoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB0ZXh0IGxhYmVsIGNvbmZpZyB3aXRoIG5ldyBkYXRhXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFRleHRMYWJlbFNjaGVtYVYxXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBmaWVsZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzYXZlZFRleHRMYWJlbFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH0gLSB2YWxpZGF0ZWQgdGV4dGxhYmVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKFxuICBmaWVsZHMsXG4gIFtsYXllclRleHRMYWJlbF0sXG4gIHNhdmVkVGV4dExhYmVsLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKSB7XG4gIGNvbnN0IHNhdmVkVGV4dExhYmVscyA9IEFycmF5LmlzQXJyYXkoc2F2ZWRUZXh0TGFiZWwpID8gc2F2ZWRUZXh0TGFiZWwgOiBbc2F2ZWRUZXh0TGFiZWxdO1xuXG4gIC8vIHZhbGlkYXRlIGZpZWxkXG4gIHJldHVybiBzYXZlZFRleHRMYWJlbHMubWFwKHRleHRMYWJlbCA9PiB7XG4gICAgY29uc3QgZmllbGQgPSB0ZXh0TGFiZWwuZmllbGRcbiAgICAgID8gZmllbGRzLmZpbmQoZmQgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyh0ZXh0TGFiZWwuZmllbGQpLmV2ZXJ5KGtleSA9PiB0ZXh0TGFiZWwuZmllbGRba2V5XSA9PT0gZmRba2V5XSlcbiAgICAgICAgKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdGV4dCBsYWJlbCBmaWVsZDogJHtKU09OLnN0cmluZ2lmeSh0ZXh0TGFiZWwuZmllbGQpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYXllclRleHRMYWJlbCkucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGtleSA9PT0gJ2ZpZWxkJyA/IGZpZWxkIDogdGV4dExhYmVsW2tleV0gfHwgbGF5ZXJUZXh0TGFiZWxba2V5XVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHZpc3VhbCBjaGFubmVscyBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKTogbnVsbCB8IExheWVyIHtcbiAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkLCBzY2FsZSwga2V5fSkgPT4ge1xuICAgIGxldCBmb3VuZEZpZWxkO1xuICAgIGlmIChzYXZlZExheWVyLmNvbmZpZykge1xuICAgICAgaWYgKHNhdmVkTGF5ZXIuY29uZmlnW2ZpZWxkXSkge1xuICAgICAgICBmb3VuZEZpZWxkID0gZmllbGRzLmZpbmQoXG4gICAgICAgICAgZmQgPT4gc2F2ZWRMYXllci5jb25maWcgJiYgZmQubmFtZSA9PT0gc2F2ZWRMYXllci5jb25maWdbZmllbGRdLm5hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm91bmRDaGFubmVsID0ge1xuICAgICAgICAuLi4oZm91bmRGaWVsZCA/IHtbZmllbGRdOiBmb3VuZEZpZWxkfSA6IHt9KSxcbiAgICAgICAgLi4uKHNhdmVkTGF5ZXIuY29uZmlnW3NjYWxlXSA/IHtbc2NhbGVdOiBzYXZlZExheWVyLmNvbmZpZ1tzY2FsZV19IDoge30pXG4gICAgICB9O1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGZvdW5kQ2hhbm5lbCkubGVuZ3RoKSB7XG4gICAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGZvdW5kQ2hhbm5lbCk7XG4gICAgICB9XG5cbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgICAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHNhdmVkTGF5ZXIuY29uZmlnPy5bZmllbGRdPy5uYW1lO1xuICAgICAgICBpZiAoZmllbGROYW1lICYmIGZpZWxkTmFtZSAhPT0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkXT8ubmFtZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdmlzdWFsIGNoYW5uZWwgZmllbGQ6ICR7ZmllbGR9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbnR5cGUgVmFsaWRhdGVMYXllck9wdGlvbiA9IHtcbiAgYWxsb3dFbXB0eUNvbHVtbj86IGJvb2xlYW47XG4gIHRocm93T25FcnJvcj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBsYXllcnM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIG9wdGlvbnM/OiBWYWxpZGF0ZUxheWVyT3B0aW9uXG4pIHtcbiAgY29uc3QgdmFsaWRhdGVkOiBMYXllcltdID0gW107XG4gIGNvbnN0IGZhaWxlZDogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXTtcblxuICBsYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbGV0IHZhbGlkYXRlTGF5ZXI6IExheWVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAobGF5ZXI/LmNvbmZpZz8uZGF0YUlkKSB7XG4gICAgICBpZiAoZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgICAgLy8gZGF0YXNldHMgYXJlIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIHZhbGlkYXRlTGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gICAgICAgICAgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0sXG4gICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgbGF5ZXJDbGFzc2VzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVMYXllcikge1xuICAgICAgdmFsaWRhdGVkLnB1c2godmFsaWRhdGVMYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRhdGFzZXRzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICBmYWlsZWQucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge3ZhbGlkYXRlZCwgZmFpbGVkfTtcbn1cblxuLyoqXG4gKiBHZXQgcmVxdWlyZWQgY29sdW1ucyBmb3IgdmFsaWRhdGlvbiBiYXNlZCBvbiBjb2x1bW4gbW9kZVxuICovXG5mdW5jdGlvbiBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcikge1xuICAvLyBmaW5kIGNvbHVtbiBmaWVsZElkeFxuICBsZXQgY29sdW1uQ29uZmlnID0gbmV3TGF5ZXIuZ2V0TGF5ZXJDb2x1bW5zKCk7XG4gIC8vIGlmIGNvbHVtbk1vZGUgaXMgZGVmaW5lZCwgZmluZCBjb2x1bW4gbW9kZSBjb25maWdcbiAgY29uc3QgY29sTW9kZUNvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgPyAobmV3TGF5ZXIuc3VwcG9ydGVkQ29sdW1uTW9kZXMgfHwgW10pLmZpbmQoXG4gICAgICAgIGNvbE1vZGUgPT4gY29sTW9kZS5rZXkgPT09IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChjb2xNb2RlQ29uZmlnKSB7XG4gICAgLy8gb25seSB2YWxpZGF0ZSBjb2x1bW5zIGluIGNvbHVtbiBtb2RlXG4gICAgY29sdW1uQ29uZmlnID0gW1xuICAgICAgLi4uKGNvbE1vZGVDb25maWcucmVxdWlyZWRDb2x1bW5zIHx8IFtdKSxcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLm9wdGlvbmFsQ29sdW1ucyB8fCBbXSlcbiAgICBdLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiBjb2x1bW5Db25maWdba2V5XVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29sdW1uQ29uZmlnO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIG9wdGlvbnM6IFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7fVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3Qge2ZpZWxkcywgaWQ6IGRhdGFJZH0gPSBkYXRhc2V0O1xuICBjb25zdCB7dHlwZX0gPSBzYXZlZExheWVyO1xuICBjb25zdCB7dGhyb3dPbkVycm9yfSA9IG9wdGlvbnM7XG4gIC8vIGxheWVyIGRvZXNudCBoYXZlIGEgdmFsaWQgdHlwZVxuICBpZiAoIXR5cGUgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYXllckNsYXNzZXMsIHR5cGUpIHx8ICFzYXZlZExheWVyLmNvbmZpZykge1xuICAgIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdHlwZSBcIiR7dHlwZX1cIiBvciBjb25maWcgaXMgbWlzc2luZ2ApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbdHlwZV0oe1xuICAgIGlkOiBzYXZlZExheWVyLmlkLFxuICAgIGRhdGFJZCxcbiAgICBsYWJlbDogc2F2ZWRMYXllci5jb25maWcubGFiZWwsXG4gICAgY29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbG9yLFxuICAgIGlzVmlzaWJsZTogc2F2ZWRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGhpZGRlbjogc2F2ZWRMYXllci5jb25maWcuaGlkZGVuLFxuICAgIGNvbHVtbk1vZGU6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbk1vZGUsXG4gICAgaGlnaGxpZ2h0Q29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmhpZ2hsaWdodENvbG9yXG4gIH0pO1xuXG4gIGNvbnN0IGNvbHVtbkNvbmZpZyA9IF9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uKG5ld0xheWVyKTtcblxuICBpZiAoT2JqZWN0LmtleXMoY29sdW1uQ29uZmlnKSkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICAgICAgZmllbGRzLFxuICAgICAgc2F2ZWRMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgIGNvbHVtbkNvbmZpZyxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgICAgICAuLi5jb2x1bW5zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuYWxsb3dFbXB0eUNvbHVtbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGV4dExhYmVsID1cbiAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwgJiYgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbFxuICAgICAgPyB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKFxuICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICBuZXdMYXllci5jb25maWcudGV4dExhYmVsLFxuICAgICAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIClcbiAgICAgIDogbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbDtcblxuICAvLyBjb3B5IHZpc0NvbmZpZyBvdmVyIHRvIGVtcHR5TGF5ZXIgdG8gbWFrZSBzdXJlIGl0IGhhcyBhbGwgdGhlIHByb3BzXG4gIGNvbnN0IGNvcGllZFZpc0NvbmZpZyA9IG5ld0xheWVyLmNvcHlMYXllckNvbmZpZyhcbiAgICBuZXdMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIHNhdmVkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyB8fCB7fSxcbiAgICB7XG4gICAgICBzaGFsbG93Q29weTogWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXVxuICAgIH1cbiAgKTtcblxuICAvLyBjYWxsIGxheWVyIG1ldGhvZHMgdG8gdmFsaWRhdGUgdmlzQ29uZmlnIHdoZW4gc3dpdGNoaW5nIGRhdGFzZXRcbiAgY29uc3QgdmlzQ29uZmlnID0gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWdcbiAgICA/IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnKGRhdGFzZXQsIGNvcGllZFZpc0NvbmZpZylcbiAgICA6IGNvcGllZFZpc0NvbmZpZztcblxuICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgdmlzQ29uZmlnLFxuICAgIHRleHRMYWJlbFxuICB9KTtcblxuICAvLyB2aXN1YWwgY2hhbm5lbCBmaWVsZCBpcyBzYXZlZCB0byBiZSB7bmFtZSwgdHlwZX1cbiAgLy8gZmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZCBieSBtYXRjaGluZyBib3RoIG5hbWUgYW5kIHR5cGVcbiAgLy8gcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgbmV3TGF5ZXIgPSB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoZmllbGRzLCBuZXdMYXllciwgc2F2ZWRMYXllciwgb3B0aW9ucyk7XG5cbiAgaWYgKHRocm93T25FcnJvcikge1xuICAgIGlmICghbmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlOiAke25ld0xheWVyLmlkfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWRpdG9yPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIHNhdmVkRWRpdG9yOiBTYXZlZEVkaXRvcikge1xuICBpZiAoIXNhdmVkRWRpdG9yKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgLi4uKHNhdmVkRWRpdG9yLmZlYXR1cmVzIHx8IFtdKV0sXG4gICAgICAvLyBpZiBzYXZlZEVkaXRvci52aXNpYmxlIGlzIHVuZGVmaW5lZCBrZWVwIHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgICB2aXNpYmxlOiBzYXZlZEVkaXRvci52aXNpYmxlID8/IHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lRWRpdG9yQ29uZmlncyhjb25maWdzOiBTYXZlZEVkaXRvcltdKTogU2F2ZWRFZGl0b3Ige1xuICByZXR1cm4gY29uZmlncy5yZWR1Y2UoXG4gICAgKGFjYywgbmV4dENvbmZpZykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBmZWF0dXJlczogWy4uLmFjYy5mZWF0dXJlcywgLi4uKG5leHRDb25maWcuZmVhdHVyZXMgfHwgW10pXVxuICAgICAgfTtcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIHN0YXJ0IHdpdGg6XG4gICAgICAvLyAtIGVtcHR5IGFycmF5IGZvciBmZWF0dXJlcyBhY2N1bXVsYXRpb25cbiAgICAgIC8vIC0gYW5kIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIHZpc2libGUgdmFsdWVzIHRydWU/XG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICB2aXNpYmxlOiBjb25maWdzLnNvbWUoYyA9PiBjPy52aXNpYmxlKVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZTogVmlzU3RhdGUsIG5ld0RhdGFFbnRyaWVzOiBEYXRhc2V0cyk6IERhdGFzZXRzIHtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIC4uLm5ld0RhdGFFbnRyaWVzXG4gIH07XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIpKSB7XG4gICAgLy8gcHJlc2VydmVEYXRhc2V0T3JkZXIgIG1pZ2h0IG5vdCBpbmNsdWRlIHRoZSAgbmV3IGRhdGFzZXRzXG4gICAgY29uc3QgbmV3RGF0YXNldElkcyA9IE9iamVjdC5rZXlzKG1lcmdlZCkuZmlsdGVyKFxuICAgICAgaWQgPT4gIXN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyPy5pbmNsdWRlcyhpZClcbiAgICApO1xuICAgIHJldHVybiBbLi4uc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIsIC4uLm5ld0RhdGFzZXRJZHNdLnJlZHVjZShcbiAgICAgIChhY2N1LCBkYXRhSWQpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC4uLihtZXJnZWRbZGF0YUlkXSA/IHtbZGF0YUlkXTogbWVyZ2VkW2RhdGFJZF19IDoge30pXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogU2ltbGlhciBwdXJwb3NlIHRvIGFnZ3JlZ2F0aW9uIHV0aWxzIGBnZXRNb2RlYCBmdW5jdGlvbixcbiAqIGJ1dCByZXR1cm5zIHRoZSBtb2RlIGluIHRoZSBzYW1lIHZhbHVlIHR5cGUgd2l0aG91dCBjb2VyY2luZyB0byBhIHN0cmluZy5cbiAqIEl0IGlnbm9yZXMgYHVuZGVmaW5lZGAgb3IgYG51bGxgIHZhbHVlcywgYnV0IHJldHVybnMgYG51bGxgIGlmIG5vIG1vZGUgY291bGQgYmUgY2FsY3VsYXRlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2U8VD4oYXJyOiBUW10pOiBUIHwgbnVsbCB7XG4gIGNvbnN0IHRhbGx5cyA9IG5ldyBNYXAoKTtcbiAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgIGlmIChub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICBpZiAoIXRhbGx5cy5oYXModmFsdWUpKSB7XG4gICAgICAgIHRhbGx5cy5zZXQodmFsdWUsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgdGFsbHlzLmdldCh2YWx1ZSkgKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvLyByZXR1cm4gdGhlIHZhbHVlIHdpdGggdGhlIGhpZ2hlc3QgdG90YWwgb2NjdXJyZW5jZSBjb3VudFxuICBpZiAodGFsbHlzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gWy4uLnRhbGx5cy5lbnRyaWVzKCldPy5yZWR1Y2UoKGFjYywgbmV4dCkgPT4gKG5leHRbMV0gPiBhY2NbMV0gPyBuZXh0IDogYWNjKSlbMF07XG59XG5cbmV4cG9ydCBjb25zdCBWSVNfU1RBVEVfTUVSR0VSUzogVmlzU3RhdGVNZXJnZXJzPGFueT4gPSBbXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllcnMsXG4gICAgcHJvcDogJ2xheWVycycsXG4gICAgdG9NZXJnZVByb3A6ICdsYXllclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUxheWVyT3JkZXInXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VGaWx0ZXJzLFxuICAgIHByb3A6ICdmaWx0ZXJzJyxcbiAgICB0b01lcmdlUHJvcDogJ2ZpbHRlclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUZpbHRlck9yZGVyJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUZpbHRlckRhdGFzZXRJZHNcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUVmZmVjdHMsXG4gICAgcHJvcDogJ2VmZmVjdHMnXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VJbnRlcmFjdGlvbnMsXG4gICAgcHJvcDogJ2ludGVyYWN0aW9uQ29uZmlnJyxcbiAgICB0b01lcmdlUHJvcDogJ2ludGVyYWN0aW9uVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMsXG4gICAgc2F2ZVVubWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24sXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVJbnRlcmFjdGlvbkNvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZUxheWVyQmxlbmRpbmcsIHByb3A6ICdsYXllckJsZW5kaW5nJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlnc30sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VPdmVybGF5QmxlbmRpbmcsXG4gICAgcHJvcDogJ292ZXJsYXlCbGVuZGluZycsXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzXG4gIH0sXG4gIHttZXJnZTogbWVyZ2VTcGxpdE1hcHMsIHByb3A6ICdzcGxpdE1hcHMnLCB0b01lcmdlUHJvcDogJ3NwbGl0TWFwc1RvQmVNZXJnZWQnfSxcbiAge21lcmdlOiBtZXJnZUFuaW1hdGlvbkNvbmZpZywgcHJvcDogJ2FuaW1hdGlvbkNvbmZpZycsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lQW5pbWF0aW9uQ29uZmlnc30sXG4gIHttZXJnZTogbWVyZ2VFZGl0b3IsIHByb3A6ICdlZGl0b3InLCBjb21iaW5lQ29uZmlnczogY29tYmluZUVkaXRvckNvbmZpZ3N9XG5dO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQVVBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFlBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFVBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFFBQUEsR0FBQVIsT0FBQTtBQWtCQSxJQUFBUyxNQUFBLEdBQUFULE9BQUE7QUFFQSxJQUFBVSxXQUFBLEdBQUFWLE9BQUE7QUFBc0QsSUFBQVcsU0FBQTtBQUFBLFNBQUFDLDJCQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBSCxDQUFBLENBQUFHLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSixDQUFBLHFCQUFBRSxDQUFBLFFBQUFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBTixDQUFBLE1BQUFFLENBQUEsR0FBQUssMkJBQUEsQ0FBQVAsQ0FBQSxNQUFBQyxDQUFBLElBQUFELENBQUEsdUJBQUFBLENBQUEsQ0FBQVEsTUFBQSxJQUFBTixDQUFBLEtBQUFGLENBQUEsR0FBQUUsQ0FBQSxPQUFBTyxFQUFBLE1BQUFDLENBQUEsWUFBQUEsRUFBQSxlQUFBQyxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBQSxFQUFBLFdBQUFILEVBQUEsSUFBQVQsQ0FBQSxDQUFBUSxNQUFBLEtBQUFLLElBQUEsV0FBQUEsSUFBQSxNQUFBQyxLQUFBLEVBQUFkLENBQUEsQ0FBQVMsRUFBQSxVQUFBUixDQUFBLFdBQUFBLEVBQUFELENBQUEsVUFBQUEsQ0FBQSxLQUFBZSxDQUFBLEVBQUFMLENBQUEsZ0JBQUFNLFNBQUEsaUpBQUFDLENBQUEsRUFBQUMsQ0FBQSxPQUFBQyxDQUFBLGdCQUFBUixDQUFBLFdBQUFBLEVBQUEsSUFBQVQsQ0FBQSxHQUFBQSxDQUFBLENBQUFrQixJQUFBLENBQUFwQixDQUFBLE1BQUFZLENBQUEsV0FBQUEsRUFBQSxRQUFBWixDQUFBLEdBQUFFLENBQUEsQ0FBQW1CLElBQUEsV0FBQUgsQ0FBQSxHQUFBbEIsQ0FBQSxDQUFBYSxJQUFBLEVBQUFiLENBQUEsS0FBQUMsQ0FBQSxXQUFBQSxFQUFBRCxDQUFBLElBQUFtQixDQUFBLE9BQUFGLENBQUEsR0FBQWpCLENBQUEsS0FBQWUsQ0FBQSxXQUFBQSxFQUFBLFVBQUFHLENBQUEsWUFBQWhCLENBQUEsY0FBQUEsQ0FBQSw4QkFBQWlCLENBQUEsUUFBQUYsQ0FBQTtBQUFBLFNBQUFWLDRCQUFBUCxDQUFBLEVBQUFrQixDQUFBLFFBQUFsQixDQUFBLDJCQUFBQSxDQUFBLFNBQUFzQixpQkFBQSxDQUFBdEIsQ0FBQSxFQUFBa0IsQ0FBQSxPQUFBaEIsQ0FBQSxNQUFBcUIsUUFBQSxDQUFBSCxJQUFBLENBQUFwQixDQUFBLEVBQUF3QixLQUFBLDZCQUFBdEIsQ0FBQSxJQUFBRixDQUFBLENBQUF5QixXQUFBLEtBQUF2QixDQUFBLEdBQUFGLENBQUEsQ0FBQXlCLFdBQUEsQ0FBQUMsSUFBQSxhQUFBeEIsQ0FBQSxjQUFBQSxDQUFBLEdBQUFHLEtBQUEsQ0FBQXNCLElBQUEsQ0FBQTNCLENBQUEsb0JBQUFFLENBQUEsK0NBQUEwQixJQUFBLENBQUExQixDQUFBLElBQUFvQixpQkFBQSxDQUFBdEIsQ0FBQSxFQUFBa0IsQ0FBQTtBQUFBLFNBQUFJLGtCQUFBdEIsQ0FBQSxFQUFBa0IsQ0FBQSxhQUFBQSxDQUFBLElBQUFBLENBQUEsR0FBQWxCLENBQUEsQ0FBQVEsTUFBQSxNQUFBVSxDQUFBLEdBQUFsQixDQUFBLENBQUFRLE1BQUEsWUFBQVAsQ0FBQSxNQUFBVyxDQUFBLEdBQUFQLEtBQUEsQ0FBQWEsQ0FBQSxHQUFBakIsQ0FBQSxHQUFBaUIsQ0FBQSxFQUFBakIsQ0FBQSxJQUFBVyxDQUFBLENBQUFYLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFVBQUFXLENBQUE7QUFBQSxTQUFBaUIsZUFBQTNCLENBQUEsUUFBQTRCLENBQUEsR0FBQUMsWUFBQSxDQUFBN0IsQ0FBQSxnQ0FBQThCLE9BQUEsQ0FBQUYsQ0FBQSxJQUFBQSxDQUFBLEdBQUFBLENBQUE7QUFBQSxTQUFBQyxhQUFBN0IsQ0FBQSxFQUFBRixDQUFBLG9CQUFBZ0MsT0FBQSxDQUFBOUIsQ0FBQSxNQUFBQSxDQUFBLFNBQUFBLENBQUEsTUFBQUQsQ0FBQSxHQUFBQyxDQUFBLENBQUFDLE1BQUEsQ0FBQThCLFdBQUEsa0JBQUFoQyxDQUFBLFFBQUE2QixDQUFBLEdBQUE3QixDQUFBLENBQUFtQixJQUFBLENBQUFsQixDQUFBLEVBQUFGLENBQUEsZ0NBQUFnQyxPQUFBLENBQUFGLENBQUEsVUFBQUEsQ0FBQSxZQUFBZCxTQUFBLHlFQUFBaEIsQ0FBQSxHQUFBa0MsTUFBQSxHQUFBQyxNQUFBLEVBQUFqQyxDQUFBO0FBQUEsU0FBQWtDLFFBQUFuQyxDQUFBLEVBQUFELENBQUEsUUFBQUUsQ0FBQSxHQUFBbUMsTUFBQSxDQUFBQyxJQUFBLENBQUFyQyxDQUFBLE9BQUFvQyxNQUFBLENBQUFFLHFCQUFBLFFBQUF0QixDQUFBLEdBQUFvQixNQUFBLENBQUFFLHFCQUFBLENBQUF0QyxDQUFBLEdBQUFELENBQUEsS0FBQWlCLENBQUEsR0FBQUEsQ0FBQSxDQUFBdUIsTUFBQSxXQUFBeEMsQ0FBQSxXQUFBcUMsTUFBQSxDQUFBSSx3QkFBQSxDQUFBeEMsQ0FBQSxFQUFBRCxDQUFBLEVBQUEwQyxVQUFBLE9BQUF4QyxDQUFBLENBQUF5QyxJQUFBLENBQUFDLEtBQUEsQ0FBQTFDLENBQUEsRUFBQWUsQ0FBQSxZQUFBZixDQUFBO0FBQUEsU0FBQTJDLGNBQUE1QyxDQUFBLGFBQUFELENBQUEsTUFBQUEsQ0FBQSxHQUFBOEMsU0FBQSxDQUFBdEMsTUFBQSxFQUFBUixDQUFBLFVBQUFFLENBQUEsV0FBQTRDLFNBQUEsQ0FBQTlDLENBQUEsSUFBQThDLFNBQUEsQ0FBQTlDLENBQUEsUUFBQUEsQ0FBQSxPQUFBb0MsT0FBQSxDQUFBQyxNQUFBLENBQUFuQyxDQUFBLE9BQUE2QyxPQUFBLFdBQUEvQyxDQUFBLFFBQUFnRCxnQkFBQSxhQUFBL0MsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsQ0FBQUYsQ0FBQSxTQUFBcUMsTUFBQSxDQUFBWSx5QkFBQSxHQUFBWixNQUFBLENBQUFhLGdCQUFBLENBQUFqRCxDQUFBLEVBQUFvQyxNQUFBLENBQUFZLHlCQUFBLENBQUEvQyxDQUFBLEtBQUFrQyxPQUFBLENBQUFDLE1BQUEsQ0FBQW5DLENBQUEsR0FBQTZDLE9BQUEsV0FBQS9DLENBQUEsSUFBQXFDLE1BQUEsQ0FBQWMsY0FBQSxDQUFBbEQsQ0FBQSxFQUFBRCxDQUFBLEVBQUFxQyxNQUFBLENBQUFJLHdCQUFBLENBQUF2QyxDQUFBLEVBQUFGLENBQUEsaUJBQUFDLENBQUEsSUF4Q3REO0FBQ0E7QUF5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNtRCxZQUFZQSxDQUMxQkMsS0FBUSxFQUNSQyxjQUFnRSxFQUNoRUMsVUFBb0IsRUFDakI7RUFDSCxJQUFNQyxtQkFBbUIsR0FBR0QsVUFBVSxHQUNsQ0QsY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUVHLEdBQUcsQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDQyxFQUFFO0VBQUEsRUFBQyxHQUM5Qk4sS0FBSyxDQUFDRyxtQkFBbUI7RUFFN0IsSUFBSSxDQUFDbkQsS0FBSyxDQUFDQyxPQUFPLENBQUNnRCxjQUFjLENBQUMsSUFBSSxDQUFDQSxjQUFjLENBQUM5QyxNQUFNLEVBQUU7SUFDNUQsT0FBTzZDLEtBQUs7RUFDZDtFQUVBLElBQUFPLHFCQUFBLEdBQTZDLElBQUFDLG9DQUE2QixFQUFDUixLQUFLLEVBQUVDLGNBQWMsQ0FBQztJQUExRlEsU0FBUyxHQUFBRixxQkFBQSxDQUFURSxTQUFTO0lBQUVDLE1BQU0sR0FBQUgscUJBQUEsQ0FBTkcsTUFBTTtJQUFFQyxlQUFlLEdBQUFKLHFCQUFBLENBQWZJLGVBQWU7RUFDekMsSUFBSUMsY0FBYyxHQUFHQywrQkFBK0IsQ0FDbERiLEtBQUssQ0FBQ2MsT0FBTyxFQUNiTCxTQUFTLEVBQ1ROLG1CQUNGLENBQUM7O0VBRUQ7RUFDQVMsY0FBYyxHQUFHLElBQUFHLHlCQUFrQixFQUFDSCxjQUFjLENBQUM7RUFDbkRBLGNBQWMsR0FBRyxJQUFBSSx3QkFBaUIsRUFBQ0osY0FBYyxDQUFDO0VBQ2xEO0VBQ0EsSUFBTUssZ0JBQWdCLEdBQUcsSUFBQUMsa0JBQUksRUFBQyxJQUFBQyxtQkFBVyxFQUFDVixTQUFTLENBQUNMLEdBQUcsQ0FBQyxVQUFBMUMsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQzBELE1BQU07RUFBQSxFQUFDLENBQUMsQ0FBQztFQUV4RSxJQUFNQyxRQUFRLEdBQUcsSUFBQUMsNkJBQXNCLEVBQ3JDTCxnQkFBZ0IsRUFDaEJOLGVBQWUsRUFDZkMsY0FBYyxFQUNkWixLQUFLLENBQUN1QixNQUNSLENBQUM7RUFFRCxPQUFBL0IsYUFBQSxDQUFBQSxhQUFBLEtBQ0tRLEtBQUs7SUFDUmMsT0FBTyxFQUFFRixjQUFjO0lBQ3ZCWSxRQUFRLEVBQUVILFFBQVE7SUFDbEJsQixtQkFBbUIsRUFBbkJBLG1CQUFtQjtJQUNuQnNCLGdCQUFnQixLQUFBQyxNQUFBLEtBQUFDLG1CQUFBLGFBQU0zQixLQUFLLENBQUN5QixnQkFBZ0IsT0FBQUUsbUJBQUEsYUFBS2pCLE1BQU07RUFBQztBQUU1RDs7QUFFQTtBQUNPLFNBQVNrQix1QkFBdUJBLENBQ3JDQyxXQUFxQixFQUNyQlQsTUFBYyxFQUNkVSxXQUFtQixFQUNuQjtFQUNBLElBQU1DLFFBQWtCLEdBQUcsRUFBRTtFQUM3QkYsV0FBVyxDQUFDbkMsT0FBTyxDQUFDLFVBQUFQLE1BQU0sRUFBSTtJQUM1QixJQUFJQSxNQUFNLENBQUNpQyxNQUFNLENBQUNZLFFBQVEsQ0FBQ1osTUFBTSxDQUFDLEVBQUU7TUFBQSxJQUFBYSxnQkFBQTtNQUNsQyxJQUFNQyxTQUFTLEdBQUcvQyxNQUFNLENBQUNpQyxNQUFNLENBQUNoQixHQUFHLENBQUMsVUFBQStCLENBQUM7UUFBQSxPQUFLQSxDQUFDLEtBQUtmLE1BQU0sR0FBR1UsV0FBVyxHQUFHSyxDQUFDO01BQUEsQ0FBQyxDQUFDO01BQzFFLElBQUlDLFFBQVE7TUFDWjtNQUNBLEtBQUFILGdCQUFBLEdBQUk5QyxNQUFNLENBQUNpRCxRQUFRLGNBQUFILGdCQUFBLGdCQUFBQSxnQkFBQSxHQUFmQSxnQkFBQSxDQUFpQkksY0FBYyxjQUFBSixnQkFBQSxlQUEvQkEsZ0JBQUEsQ0FBa0NiLE1BQU0sQ0FBQyxFQUFFO1FBQUEsSUFBQWtCLGlCQUFBO1FBQzdDO1FBQ0EsSUFBQUMsSUFBQSxHQUFtQyxFQUFBRCxpQkFBQSxHQUFBbkQsTUFBTSxDQUFDaUQsUUFBUSxjQUFBRSxpQkFBQSx1QkFBZkEsaUJBQUEsQ0FBaUJELGNBQWMsS0FBSSxDQUFDLENBQUM7VUFBdkRHLEtBQUssR0FBQUQsSUFBQSxDQUFkbkIsTUFBTTtVQUFhcUIsSUFBSSxPQUFBQyx5QkFBQSxhQUFBSCxJQUFBLEdBQXZCbkIsTUFBTSxFQUFBaEIsR0FBQSxDQUFBNUIsY0FBQTtRQUNkNEQsUUFBUSxHQUFBNUMsYUFBQSxDQUFBQSxhQUFBLEtBQ0hMLE1BQU0sQ0FBQ2lELFFBQVE7VUFDbEJDLGNBQWMsRUFBQTdDLGFBQUEsQ0FBQUEsYUFBQSxLQUNUaUQsSUFBSSxXQUFBOUMsZ0JBQUEsaUJBQ05tQyxXQUFXLEVBQUdVLEtBQUs7UUFDckIsRUFDRjtNQUNIO01BQ0FULFFBQVEsQ0FBQ3pDLElBQUksQ0FBQUUsYUFBQSxDQUFBQSxhQUFBLEtBQ1JMLE1BQU07UUFDVGlDLE1BQU0sRUFBRWM7TUFBUyxHQUNiRSxRQUFRLEdBQUc7UUFBQ0EsUUFBUSxFQUFSQTtNQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDL0IsQ0FBQztJQUNKO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsT0FBT0wsUUFBUSxDQUFDNUUsTUFBTSxHQUFHNEUsUUFBUSxHQUFHLElBQUk7QUFDMUM7QUFFTyxTQUFTWSxvQkFBb0JBLENBQUNDLFdBQWdCLEVBQVc7RUFDOUQ7RUFDQSxPQUFPQSxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRUMsY0FBYztBQUNwQztBQUVPLFNBQVNDLGdCQUFnQkEsQ0FDOUJDLE1BQTJCLEVBQzNCSCxXQUFnQixFQUNTO0VBQUEsSUFBQUkscUJBQUE7RUFDekI7RUFDQSxJQUFNQyxXQUFXLEdBQUc7SUFDbEJDLE9BQU8sRUFBRUMsd0JBQWU7SUFDeEJDLE1BQU0sRUFBRTtNQUNOQyxRQUFRLEVBQUU7UUFBQzlCLE1BQU0sRUFBRSxDQUFDcUIsV0FBVyxDQUFDO1FBQUVVLFVBQVUsRUFBRSxDQUFDVixXQUFXLENBQUN0QyxFQUFFO01BQUM7SUFDaEU7RUFDRixDQUFDO0VBRUQsUUFBQTBDLHFCQUFBLEdBQU9ELE1BQU0sQ0FBQ1EsZ0JBQWdCLENBQUNOLFdBQVcsQ0FBQyxjQUFBRCxxQkFBQSxnQkFBQUEscUJBQUEsR0FBcENBLHFCQUFBLENBQXNDSyxRQUFRLGNBQUFMLHFCQUFBLGdCQUFBQSxxQkFBQSxHQUE5Q0EscUJBQUEsQ0FBZ0R6QixNQUFNLGNBQUF5QixxQkFBQSx1QkFBdERBLHFCQUFBLENBQXlELENBQUMsQ0FBQztBQUNwRTtBQUVBLFNBQVNuQywrQkFBK0JBLENBQ3RDMkMsWUFBc0IsRUFDdEJDLEtBQWUsRUFHZjtFQUFBLElBRkFDLGNBQXFCLEdBQUFqRSxTQUFBLENBQUF0QyxNQUFBLFFBQUFzQyxTQUFBLFFBQUFrRSxTQUFBLEdBQUFsRSxTQUFBLE1BQUcsRUFBRTtFQUFBLElBQzFCbUUsWUFBc0IsR0FBQW5FLFNBQUEsQ0FBQXRDLE1BQUEsT0FBQXNDLFNBQUEsTUFBQWtFLFNBQUE7RUFFdEIsSUFBSUUsUUFBUSxPQUFBbEMsbUJBQUEsYUFBTzZCLFlBQVksQ0FBQztFQUFDLElBQUFNLFNBQUEsR0FBQXBILDBCQUFBLENBRWQrRyxLQUFLO0lBQUFNLEtBQUE7RUFBQTtJQUF4QixLQUFBRCxTQUFBLENBQUF4RyxDQUFBLE1BQUF5RyxLQUFBLEdBQUFELFNBQUEsQ0FBQXZHLENBQUEsSUFBQUMsSUFBQSxHQUEwQjtNQUFBLElBQWZ3RyxJQUFJLEdBQUFELEtBQUEsQ0FBQXRHLEtBQUE7TUFDYixJQUFNd0csV0FBVyxHQUFHUCxjQUFjLENBQUNRLE9BQU8sQ0FBQ0YsSUFBSSxDQUFDMUQsRUFBRSxDQUFDO01BQ25EO01BQ0EsSUFBSTZELFFBQVEsR0FBR1AsWUFBWSxHQUFHLENBQUMsR0FBR0MsUUFBUSxDQUFDMUcsTUFBTTtNQUNqRCxJQUFJOEcsV0FBVyxHQUFHLENBQUMsRUFBRTtRQUNuQjtRQUNBLElBQUl4RixDQUFDLEdBQUd3RixXQUFXLEdBQUcsQ0FBQztRQUN2QixJQUFJRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQUMsSUFBQUMsS0FBQSxZQUFBQSxNQUFBLEVBQ2M7VUFDaEM7VUFDQSxJQUFNQyxhQUFhLEdBQUdaLGNBQWMsQ0FBQ2pGLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDM0MyRixVQUFVLEdBQUdQLFFBQVEsQ0FBQ1UsU0FBUyxDQUFDLFVBQUFwQyxDQUFDO1lBQUEsT0FBSUEsQ0FBQyxDQUFDN0IsRUFBRSxLQUFLZ0UsYUFBYTtVQUFBLEVBQUM7UUFDOUQsQ0FBQztRQUpELE9BQU83RixDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUkyRixVQUFVLEdBQUcsQ0FBQztVQUFBQyxLQUFBO1FBQUE7UUFLaEMsSUFBSUQsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFO1VBQ25CO1VBQ0FELFFBQVEsR0FBR0MsVUFBVSxHQUFHLENBQUM7UUFDM0I7TUFDRjtNQUNBUCxRQUFRLEdBQUcsSUFBQVcsa0JBQVcsRUFBQ1gsUUFBUSxFQUFFTSxRQUFRLEVBQUVILElBQUksQ0FBQztJQUNsRDtFQUFDLFNBQUFTLEdBQUE7SUFBQVgsU0FBQSxDQUFBbEgsQ0FBQSxDQUFBNkgsR0FBQTtFQUFBO0lBQUFYLFNBQUEsQ0FBQXBHLENBQUE7RUFBQTtFQUNELE9BQU9tRyxRQUFRO0FBQ2pCO0FBRU8sU0FBU2EscUJBQXFCQSxDQUFDMUUsS0FBZSxFQUFFNEMsV0FBZ0IsRUFBZ0I7RUFDckY7RUFDQSxJQUFNK0IsaUJBQWlCLEdBQUdoQyxvQkFBb0IsQ0FBQ0MsV0FBVyxDQUFDLEdBQ3ZERSxnQkFBZ0IsQ0FBQzlDLEtBQUssQ0FBQytDLE1BQU0sRUFBRUgsV0FBVyxDQUFDLEdBQzNDQSxXQUFXO0VBRWYsSUFBSSxDQUFDK0IsaUJBQWlCLEVBQUU7SUFDdEIsT0FBTyxJQUFJO0VBQ2I7RUFDQTtFQUNBLElBQUFDLHFCQUFBLEdBQTRCQyx3QkFBd0IsQ0FDbEQ3RSxLQUFLLENBQUN3QixRQUFRLEVBQ2R4QixLQUFLLENBQUM4RSxZQUFZLEVBQ2xCLENBQUNILGlCQUFpQixDQUFDLEVBQ25CO01BQUNJLGdCQUFnQixFQUFFO0lBQUksQ0FDekIsQ0FBQztJQUxNdEUsU0FBUyxHQUFBbUUscUJBQUEsQ0FBVG5FLFNBQVM7SUFBRUMsTUFBTSxHQUFBa0UscUJBQUEsQ0FBTmxFLE1BQU07RUFPeEIsSUFBSUEsTUFBTSxhQUFOQSxNQUFNLGVBQU5BLE1BQU0sQ0FBRXZELE1BQU0sSUFBSSxDQUFDc0QsU0FBUyxDQUFDdEQsTUFBTSxFQUFFO0lBQ3ZDO0lBQ0EsT0FBTyxJQUFJO0VBQ2I7RUFFQSxJQUFNNkgsUUFBUSxHQUFHdkUsU0FBUyxDQUFDLENBQUMsQ0FBQztFQUM3QnVFLFFBQVEsQ0FBQ0MsaUJBQWlCLENBQUNqRixLQUFLLENBQUN3QixRQUFRLENBQUM7RUFDMUMsT0FBT3dELFFBQVE7QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBU0UsZUFBZUEsQ0FDN0JDLFNBQWlCLEVBQ2pCcEMsTUFBMkIsRUFDRDtFQUFBLElBQUFxQyxxQkFBQTtFQUMxQixJQUFNQyxrQkFBa0IsR0FBR0MsaUJBQWlCLENBQUM7SUFBQ3hFLE9BQU8sRUFBRSxDQUFDcUUsU0FBUztFQUFDLENBQUMsRUFBRXBDLE1BQU0sQ0FBQztFQUM1RSxPQUFPc0Msa0JBQWtCLGFBQWxCQSxrQkFBa0IsZ0JBQUFELHFCQUFBLEdBQWxCQyxrQkFBa0IsQ0FBRXZFLE9BQU8sY0FBQXNFLHFCQUFBLHVCQUEzQkEscUJBQUEsQ0FBOEIsQ0FBQyxDQUFDO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNHLGNBQWNBLENBQzVCUCxRQUFlLEVBQ2ZqQyxNQUEyQixFQUNGO0VBQUEsSUFBQXlDLHFCQUFBO0VBQ3pCLElBQU1ILGtCQUFrQixHQUFHQyxpQkFBaUIsQ0FDMUM7SUFBQy9ELE1BQU0sRUFBRSxDQUFDeUQsUUFBUSxDQUFDO0lBQUUxQixVQUFVLEVBQUUsQ0FBQzBCLFFBQVEsQ0FBQzFFLEVBQUU7RUFBQyxDQUFDLEVBQy9DeUMsTUFDRixDQUFDO0VBQ0QsT0FBT3NDLGtCQUFrQixhQUFsQkEsa0JBQWtCLGdCQUFBRyxxQkFBQSxHQUFsQkgsa0JBQWtCLENBQUU5RCxNQUFNLGNBQUFpRSxxQkFBQSx1QkFBMUJBLHFCQUFBLENBQTZCLENBQUMsQ0FBQztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxlQUFlQSxDQUM3QkMsU0FBcUIsRUFDckIzQyxNQUEyQixFQUNEO0VBQUEsSUFBQTRDLHFCQUFBO0VBQzFCLElBQU1OLGtCQUFrQixHQUFHQyxpQkFBaUIsQ0FDMUM7SUFBQ00sT0FBTyxFQUFFLENBQUNGLFNBQVMsQ0FBQztJQUFFRyxXQUFXLEVBQUUsQ0FBQ0gsU0FBUyxDQUFDcEYsRUFBRTtFQUFDLENBQUMsRUFDbkR5QyxNQUNGLENBQUM7RUFDRCxPQUFPc0Msa0JBQWtCLGFBQWxCQSxrQkFBa0IsZ0JBQUFNLHFCQUFBLEdBQWxCTixrQkFBa0IsQ0FBRU8sT0FBTyxjQUFBRCxxQkFBQSx1QkFBM0JBLHFCQUFBLENBQThCLENBQUMsQ0FBQztBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxTQUFTTCxpQkFBaUJBLENBQy9CakMsUUFBMkIsRUFDM0JOLE1BQTJCLEVBQ0M7RUFBQSxJQUFBK0Msc0JBQUE7RUFDNUIsSUFBTUMsVUFBVSxHQUFHaEQsTUFBTSxDQUFDaUQsZUFBZSxDQUFDO0lBQ3hDM0MsUUFBUSxFQUFSQTtFQUNGLENBQUMsQ0FBQztFQUNGLE9BQU8wQyxVQUFVLElBQUFELHNCQUFBLEdBQUcvQyxNQUFNLENBQUNRLGdCQUFnQixDQUFDd0MsVUFBVSxDQUFDLGNBQUFELHNCQUFBLHVCQUFuQ0Esc0JBQUEsQ0FBcUN6QyxRQUFRLEdBQUdNLFNBQVM7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU3NDLFdBQVdBLENBQ3pCakcsS0FBUSxFQUdMO0VBQUEsSUFGSGtHLGFBQThELEdBQUF6RyxTQUFBLENBQUF0QyxNQUFBLFFBQUFzQyxTQUFBLFFBQUFrRSxTQUFBLEdBQUFsRSxTQUFBLE1BQUcsRUFBRTtFQUFBLElBQ25FUyxVQUFvQixHQUFBVCxTQUFBLENBQUF0QyxNQUFBLE9BQUFzQyxTQUFBLE1BQUFrRSxTQUFBO0VBRXBCLElBQU13QyxrQkFBa0IsR0FBR2pHLFVBQVUsR0FDakMsSUFBQWtHLG1DQUF1QixFQUFDRixhQUFhLENBQUMsR0FDdENsRyxLQUFLLENBQUNtRyxrQkFBa0I7RUFDNUIsSUFBSSxDQUFDbkosS0FBSyxDQUFDQyxPQUFPLENBQUNpSixhQUFhLENBQUMsSUFBSSxDQUFDQSxhQUFhLENBQUMvSSxNQUFNLEVBQUU7SUFDMUQsT0FBTzZDLEtBQUs7RUFDZDtFQUNBO0VBQ0EsSUFBTXFHLFFBQXVCLEdBQUcsRUFBRTtFQUNsQyxJQUFNQyxPQUFzQixHQUFHLEVBQUU7RUFDakNKLGFBQWEsQ0FBQ3hHLE9BQU8sQ0FBQyxVQUFDVyxDQUFjLEVBQUs7SUFBQSxJQUFBa0csU0FBQTtJQUN4QyxJQUFJbEcsQ0FBQyxhQUFEQSxDQUFDLGdCQUFBa0csU0FBQSxHQUFEbEcsQ0FBQyxDQUFFK0MsTUFBTSxjQUFBbUQsU0FBQSxlQUFUQSxTQUFBLENBQVduRixNQUFNLElBQUlwQixLQUFLLENBQUN3RyxpQkFBaUIsQ0FBQ25HLENBQUMsQ0FBQytDLE1BQU0sQ0FBQ2hDLE1BQU0sQ0FBQyxFQUFFO01BQ2pFaUYsUUFBUSxDQUFDL0csSUFBSSxDQUFDZSxDQUFDLENBQUM7SUFDbEIsQ0FBQyxNQUFNO01BQ0xpRyxPQUFPLENBQUNoSCxJQUFJLENBQUNlLENBQUMsQ0FBQztJQUNqQjtFQUNGLENBQUMsQ0FBQztFQUVGLElBQUFvRyxzQkFBQSxHQUF5QzVCLHdCQUF3QixDQUMvRDdFLEtBQUssQ0FBQ3dCLFFBQVEsRUFDZHhCLEtBQUssQ0FBQzhFLFlBQVksRUFDbEJ3QixPQUNGLENBQUM7SUFKaUJJLFdBQVcsR0FBQUQsc0JBQUEsQ0FBdEJoRyxTQUFTO0lBQWVDLE1BQU0sR0FBQStGLHNCQUFBLENBQU4vRixNQUFNO0VBS3JDMkYsUUFBUSxDQUFDL0csSUFBSSxDQUFBQyxLQUFBLENBQWI4RyxRQUFRLE1BQUExRSxtQkFBQSxhQUFTakIsTUFBTSxFQUFDO0VBQ3hCO0VBQ0EsSUFBQWlHLHFCQUFBLEdBQW1DQyx1QkFBdUIsQ0FDeEQ1RyxLQUFLLENBQUN1QixNQUFNLEVBQ1ptRixXQUFXLEVBQ1gxRyxLQUFLLENBQUNzRCxVQUFVLEVBQ2hCNkMsa0JBQ0YsQ0FBQztJQUxNVSxhQUFhLEdBQUFGLHFCQUFBLENBQWJFLGFBQWE7SUFBRUMsU0FBUyxHQUFBSCxxQkFBQSxDQUFURyxTQUFTO0VBTy9CLE9BQUF0SCxhQUFBLENBQUFBLGFBQUEsS0FDS1EsS0FBSztJQUNSdUIsTUFBTSxFQUFFdUYsU0FBUztJQUNqQnhELFVBQVUsRUFBRXVELGFBQWE7SUFDekJWLGtCQUFrQixFQUFsQkEsa0JBQWtCO0lBQ2xCWSxlQUFlLEtBQUFyRixNQUFBLEtBQUFDLG1CQUFBLGFBQU0zQixLQUFLLENBQUMrRyxlQUFlLEdBQUtWLFFBQVE7RUFBQztBQUU1RDtBQUVPLFNBQVNPLHVCQUF1QkEsQ0FDckNJLGFBQWEsRUFDYkMsY0FBYyxFQUNkQyxZQUFZLEVBRVo7RUFBQSxJQURBeEQsY0FBd0IsR0FBQWpFLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQWtFLFNBQUEsR0FBQWxFLFNBQUEsTUFBRyxFQUFFO0VBRTdCLElBQUksRUFBQ3dILGNBQWMsYUFBZEEsY0FBYyxlQUFkQSxjQUFjLENBQUU5SixNQUFNLEdBQUU7SUFDM0IsT0FBTztNQUFDMkosU0FBUyxFQUFFRSxhQUFhO01BQUVILGFBQWEsRUFBRUs7SUFBWSxDQUFDO0VBQ2hFO0VBQ0E7RUFDQTtFQUNBLElBQU1DLGlCQUFpQixHQUFHRCxZQUFZLENBQ25DOUcsR0FBRyxDQUFDLFVBQUFFLEVBQUU7SUFBQSxPQUFJLElBQUE4RyxlQUFRLEVBQUM5RyxFQUFFLENBQUMsQ0FBQzBHLGFBQWEsQ0FBQztFQUFBLEVBQUMsQ0FDdEM3SCxNQUFNLENBQUMsVUFBQWtJLEtBQUs7SUFBQSxPQUFJQyxPQUFPLENBQUNELEtBQUssQ0FBQztFQUFBLEVBQUM7RUFDbEMsSUFBTVAsU0FBUyxHQUFHRSxhQUFhLENBQUN0RixNQUFNLENBQUN1RixjQUFjLENBQUM7RUFDdEQsSUFBTU0sa0JBQWtCLEdBQUcxRywrQkFBK0IsQ0FDeERzRyxpQkFBaUIsRUFDakJGLGNBQWMsRUFDZHZELGNBQWMsRUFDZCxJQUNGLENBQUM7O0VBRUQ7RUFDQSxJQUFNbUQsYUFBYSxHQUFHLElBQUFULG1DQUF1QixFQUFDbUIsa0JBQWtCLENBQUM7RUFFakUsT0FBTztJQUNMVixhQUFhLEVBQWJBLGFBQWE7SUFDYkMsU0FBUyxFQUFUQTtFQUNGLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNVLGlCQUFpQkEsQ0FDL0J4SCxLQUFRLEVBQ1J5SCxxQkFBa0UsRUFDL0Q7RUFDSCxJQUFNQyxNQUE2QyxHQUFHLENBQUMsQ0FBQztFQUN4RCxJQUFNckIsUUFBeUMsR0FBRyxDQUFDLENBQUM7RUFFcEQsSUFBSW9CLHFCQUFxQixFQUFFO0lBQ3hCekksTUFBTSxDQUFDQyxJQUFJLENBQUN3SSxxQkFBcUIsQ0FBQyxDQUF5Qy9ILE9BQU8sQ0FBQyxVQUFBaUksR0FBRyxFQUFJO01BQ3pGLElBQUksQ0FBQzNILEtBQUssQ0FBQzRILGlCQUFpQixDQUFDRCxHQUFHLENBQUMsRUFBRTtRQUNqQztNQUNGO01BRUEsSUFBTUUsYUFBYSxHQUNqQkYsR0FBRyxLQUFLLFNBQVMsSUFBSUEsR0FBRyxLQUFLLE9BQU8sR0FBRzNILEtBQUssQ0FBQzRILGlCQUFpQixDQUFDRCxHQUFHLENBQUMsQ0FBQ3ZFLE1BQU0sR0FBRyxJQUFJO01BRW5GLElBQUEwRSxLQUFBLEdBQWtDTCxxQkFBcUIsQ0FBQ0UsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQTNESSxPQUFPLEdBQUFELEtBQUEsQ0FBUEMsT0FBTztRQUFLQyxXQUFXLE9BQUF0Rix5QkFBQSxhQUFBb0YsS0FBQSxFQUFBckwsU0FBQTtNQUU5QixJQUFJd0wsYUFBYSxHQUFHRCxXQUFXO01BRS9CLElBQUlMLEdBQUcsS0FBSyxTQUFTLEVBQUU7UUFDckIsSUFBQU8scUJBQUEsR0FBeUNDLDZCQUE2QixDQUNwRW5JLEtBQUssRUFDTGdJLFdBQ0YsQ0FBQztVQUhNSSxhQUFhLEdBQUFGLHFCQUFBLENBQWJFLGFBQWE7VUFBRUMsZUFBZSxHQUFBSCxxQkFBQSxDQUFmRyxlQUFlOztRQUtyQztRQUNBSixhQUFhLEdBQUc7VUFDZEssWUFBWSxFQUFBOUksYUFBQSxDQUFBQSxhQUFBLEtBQ05xSSxhQUFhLENBQTJCUyxZQUFZLEdBQ3JERixhQUFhO1FBRXBCLENBQUM7UUFFRCxJQUFJcEosTUFBTSxDQUFDQyxJQUFJLENBQUNvSixlQUFlLENBQUMsQ0FBQ2xMLE1BQU0sRUFBRTtVQUN2QztVQUNBa0osUUFBUSxDQUFDa0MsT0FBTyxHQUFHO1lBQUNELFlBQVksRUFBRUQsZUFBZTtZQUFFTixPQUFPLEVBQUVULE9BQU8sQ0FBQ1MsT0FBTztVQUFDLENBQUM7UUFDL0U7TUFDRjtNQUVBTCxNQUFNLENBQUNDLEdBQUcsQ0FBQyxHQUFBbkksYUFBQSxDQUFBQSxhQUFBLEtBQ05RLEtBQUssQ0FBQzRILGlCQUFpQixDQUFDRCxHQUFHLENBQUM7UUFDL0JJLE9BQU8sRUFBRVQsT0FBTyxDQUFDUyxPQUFPO01BQUMsR0FDckJGLGFBQWEsR0FDYjtRQUNFekUsTUFBTSxFQUFFLElBQUFvRixtQkFBSSxFQUFBaEosYUFBQSxDQUFBQSxhQUFBLEtBRUxxSSxhQUFhLEdBQ2JJLGFBQWEsR0FFbEJqSixNQUFNLENBQUNDLElBQUksQ0FBQzRJLGFBQWEsQ0FDM0I7TUFDRixDQUFDLEdBQ0QsQ0FBQyxDQUFDLENBQ1A7SUFDSCxDQUFDLENBQUM7RUFDSjtFQUVBLElBQU1ZLFNBQVMsR0FBQWpKLGFBQUEsQ0FBQUEsYUFBQSxLQUNWUSxLQUFLO0lBQ1I0SCxpQkFBaUIsRUFBQXBJLGFBQUEsQ0FBQUEsYUFBQSxLQUNaUSxLQUFLLENBQUM0SCxpQkFBaUIsR0FDdkJGLE1BQU0sQ0FDVjtJQUNERCxxQkFBcUIsRUFBRWlCLHdCQUF3QixDQUFDMUksS0FBSyxFQUFFcUcsUUFBUTtFQUFDLEVBQ2pFO0VBQ0QsT0FBT29DLFNBQVM7QUFDbEI7QUFFQSxTQUFTRSx5QkFBeUJBLENBQUNDLE9BQWlDLEVBQTBCO0VBQzVGLElBQU1DLFFBQVEsR0FBQXJKLGFBQUEsS0FBT29KLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQztFQUNBO0VBQUEsSUFBQUUsTUFBQSxZQUFBQSxPQUFBbkIsR0FBQSxFQUU0QjtJQUMxQixJQUFNb0IsaUJBQWlCLEdBQUdILE9BQU8sQ0FBQ3hJLEdBQUcsQ0FBQyxVQUFBNEksQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ3JCLEdBQUcsQ0FBQztJQUFBLEVBQUM7O0lBRWxEO0lBQ0FrQixRQUFRLENBQUNsQixHQUFHLENBQUMsR0FBRztNQUNkO01BQ0FJLE9BQU8sRUFBRWdCLGlCQUFpQixDQUFDRSxJQUFJLENBQUMsVUFBQUMsQ0FBQztRQUFBLE9BQUlBLENBQUMsYUFBREEsQ0FBQyx1QkFBREEsQ0FBQyxDQUFFbkIsT0FBTztNQUFBO0lBQ2pELENBQUM7SUFFRCxJQUFJSixHQUFHLEtBQUssU0FBUyxFQUFFO01BQ3JCO01BQ0FrQixRQUFRLENBQUNsQixHQUFHLENBQUMsQ0FBQ3dCLFdBQVcsR0FBR0osaUJBQWlCLENBQUNFLElBQUksQ0FBQyxVQUFBQyxDQUFDO1FBQUEsT0FBSUEsQ0FBQyxhQUFEQSxDQUFDLHVCQUFEQSxDQUFDLENBQUVDLFdBQVc7TUFBQSxFQUFDOztNQUV2RTtNQUNBTixRQUFRLENBQUNsQixHQUFHLENBQUMsQ0FBQ3lCLFdBQVcsR0FBR0MsNkJBQTZCLENBQ3ZETixpQkFBaUIsQ0FBQzNJLEdBQUcsQ0FBQyxVQUFBOEksQ0FBQztRQUFBLE9BQUlBLENBQUMsQ0FBQ0UsV0FBVztNQUFBLEVBQzFDLENBQUM7O01BRUQ7TUFDQVAsUUFBUSxDQUFDbEIsR0FBRyxDQUFDLENBQUNXLFlBQVksR0FBR1MsaUJBQWlCLENBQzNDM0ksR0FBRyxDQUFDLFVBQUE4SSxDQUFDO1FBQUEsT0FBSUEsQ0FBQyxDQUFDWixZQUFZO01BQUEsRUFBQyxDQUN4QmdCLE1BQU0sQ0FBQyxVQUFDQyxHQUFHLEVBQUVDLGdCQUFnQixFQUFLO1FBQUEsSUFBQUMsTUFBQSxZQUFBQSxPQUFBQyxhQUFBLEVBQ2E7VUFDNUMsSUFBTUMsaUJBQWlCLEdBQUdILGdCQUFnQixDQUFDRSxhQUFhLENBQUM7VUFDekQsSUFBSSxDQUFDSCxHQUFHLENBQUNHLGFBQWEsQ0FBQyxFQUFFO1lBQ3ZCO1lBQ0E7WUFDQUgsR0FBRyxDQUFDRyxhQUFhLENBQUMsR0FBR0MsaUJBQWlCO1VBQ3hDLENBQUMsTUFBTTtZQUNMO1lBQ0E7WUFDQTtZQUNBQSxpQkFBaUIsQ0FBQ2pLLE9BQU8sQ0FBQyxVQUFBa0ssTUFBTSxFQUFJO2NBQ2xDLElBQUksQ0FBQ0wsR0FBRyxDQUFDRyxhQUFhLENBQUMsQ0FBQ0csSUFBSSxDQUFDLFVBQUFDLEtBQUE7Z0JBQUEsSUFBRXpMLElBQUksR0FBQXlMLEtBQUEsQ0FBSnpMLElBQUk7Z0JBQUEsT0FBTXVMLE1BQU0sQ0FBQ3ZMLElBQUksS0FBS0EsSUFBSTtjQUFBLEVBQUMsRUFBRTtnQkFDOURrTCxHQUFHLENBQUNHLGFBQWEsQ0FBQyxDQUFDcEssSUFBSSxDQUFDc0ssTUFBTSxDQUFDO2NBQ2pDO1lBQ0YsQ0FBQyxDQUFDO1VBQ0o7UUFDRixDQUFDO1FBaEJELEtBQUssSUFBTUYsYUFBYSxJQUFJRixnQkFBZ0I7VUFBQUMsTUFBQSxDQUFBQyxhQUFBO1FBQUE7UUFpQjVDLE9BQU9ILEdBQUc7TUFDWixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDVjtJQUVBLElBQUk1QixHQUFHLEtBQUssT0FBTyxFQUFFO01BQUEsSUFBQW9DLFVBQUE7TUFDbkI7TUFDQWxCLFFBQVEsQ0FBQ2xCLEdBQUcsQ0FBQyxDQUFDcUMsSUFBSSxJQUFBRCxVQUFBLEdBQ2hCLElBQUFFLGdCQUFTLEVBQUNsQixpQkFBaUIsRUFBRW1CLDRCQUFpQixDQUFDQyxPQUFPLEVBQUUsVUFBQWpCLENBQUM7UUFBQSxPQUFJQSxDQUFDLENBQUNjLElBQUk7TUFBQSxFQUFDLGNBQUFELFVBQUEsY0FBQUEsVUFBQSxHQUFJLElBQUk7SUFDaEY7RUFDRixDQUFDO0VBaERELEtBQUssSUFBTXBDLEdBQUcsSUFBSWtCLFFBQVE7SUFBQUMsTUFBQSxDQUFBbkIsR0FBQTtFQUFBO0VBa0QxQixPQUFPa0IsUUFBUTtBQUNqQjtBQUVBLFNBQVNILHdCQUF3QkEsQ0FDL0IxSSxLQUFRLEVBQ1JxRyxRQUF5QyxFQUN6QztFQUFBLElBQUErRCxpQkFBQSxFQUFBQyxrQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxrQkFBQTtFQUNBLElBQUksRUFBQ2xFLFFBQVEsYUFBUkEsUUFBUSxnQkFBQStELGlCQUFBLEdBQVIvRCxRQUFRLENBQUVrQyxPQUFPLGNBQUE2QixpQkFBQSxlQUFqQkEsaUJBQUEsQ0FBbUI5QixZQUFZLEdBQUU7SUFDcEMsT0FBT3RJLEtBQUssQ0FBQ3lILHFCQUFxQjtFQUNwQztFQUNBLE9BQU87SUFDTGMsT0FBTyxFQUFBL0ksYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsS0FDRlEsS0FBSyxDQUFDeUgscUJBQXFCLENBQUNjLE9BQU8sR0FDbEMsUUFBT2xDLFFBQVEsYUFBUkEsUUFBUSxnQkFBQWdFLGtCQUFBLEdBQVJoRSxRQUFRLENBQUVrQyxPQUFPLGNBQUE4QixrQkFBQSx1QkFBakJBLGtCQUFBLENBQW1CdEMsT0FBTyxNQUFLLFNBQVMsR0FDL0M7TUFBQ0EsT0FBTyxFQUFFMUIsUUFBUSxDQUFDa0MsT0FBTyxDQUFDUjtJQUFPLENBQUMsR0FDbkMsQ0FBQyxDQUFDO01BQ05PLFlBQVksRUFBQTlJLGFBQUEsQ0FBQUEsYUFBQSxNQUFBOEsscUJBQUEsR0FDUHRLLEtBQUssQ0FBQ3lILHFCQUFxQixjQUFBNkMscUJBQUEsZ0JBQUFBLHFCQUFBLEdBQTNCQSxxQkFBQSxDQUE2Qi9CLE9BQU8sY0FBQStCLHFCQUFBLHVCQUFwQ0EscUJBQUEsQ0FBc0NoQyxZQUFZLEdBQ2xEakMsUUFBUSxhQUFSQSxRQUFRLGdCQUFBa0Usa0JBQUEsR0FBUmxFLFFBQVEsQ0FBRWtDLE9BQU8sY0FBQWdDLGtCQUFBLHVCQUFqQkEsa0JBQUEsQ0FBbUJqQyxZQUFZO0lBQ25DO0VBRUwsQ0FBQztBQUNIO0FBRUEsU0FBU2tDLDRCQUE0QkEsQ0FBQzVDLGlCQUFpQixFQUFFeEcsTUFBYyxFQUFFcUosZUFBdUIsRUFBRTtFQUFBLElBQUFDLHFCQUFBO0VBQ2hHLElBQUk5QyxpQkFBaUIsYUFBakJBLGlCQUFpQixnQkFBQThDLHFCQUFBLEdBQWpCOUMsaUJBQWlCLENBQUVXLE9BQU8sY0FBQW1DLHFCQUFBLGVBQTFCQSxxQkFBQSxDQUE0QnBDLFlBQVksQ0FBQ2xILE1BQU0sQ0FBQyxFQUFFO0lBQUEsSUFBQXVKLHNCQUFBO0lBQ3BELE9BQUFuTCxhQUFBLENBQUFBLGFBQUEsS0FDS29JLGlCQUFpQjtNQUNwQlcsT0FBTyxFQUFBL0ksYUFBQSxDQUFBQSxhQUFBLEtBQ0ZvSSxpQkFBaUIsQ0FBQ1csT0FBTztRQUM1QkQsWUFBWSxNQUFBM0ksZ0JBQUEsaUJBQ1Q4SyxlQUFlLEVBQUc3QyxpQkFBaUIsYUFBakJBLGlCQUFpQixnQkFBQStDLHNCQUFBLEdBQWpCL0MsaUJBQWlCLENBQUVXLE9BQU8sY0FBQW9DLHNCQUFBLHVCQUExQkEsc0JBQUEsQ0FBNEJyQyxZQUFZLENBQUNsSCxNQUFNLENBQUM7TUFDcEU7SUFDRjtFQUVMO0VBQ0EsT0FBTyxJQUFJO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTd0osY0FBY0EsQ0FDNUI1SyxLQUFRLEVBRUw7RUFBQSxJQURINkssU0FBNkQsR0FBQXBMLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQWtFLFNBQUEsR0FBQWxFLFNBQUEsTUFBRyxFQUFFO0VBRWxFLElBQU1pSSxNQUFNLE9BQUEvRixtQkFBQSxhQUFPM0IsS0FBSyxDQUFDNkssU0FBUyxDQUFDO0VBQ25DLElBQU14RSxRQUFRLEdBQUcsRUFBRTtFQUNuQndFLFNBQVMsQ0FBQ25MLE9BQU8sQ0FBQyxVQUFDb0wsRUFBRSxFQUFFck0sQ0FBQyxFQUFLO0lBQzNCLElBQU1zTSxPQUFPLEdBQUcvTCxNQUFNLENBQUMrTCxPQUFPLENBQUNELEVBQUUsQ0FBQ3ZKLE1BQU0sQ0FBQztJQUN6QyxJQUFJd0osT0FBTyxDQUFDNU4sTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN0QjROLE9BQU8sQ0FBQ3JMLE9BQU8sQ0FBQyxVQUFBc0wsS0FBQSxFQUFpQjtRQUFBLElBQUFDLEtBQUEsT0FBQUMsZUFBQSxhQUFBRixLQUFBO1VBQWYxSyxFQUFFLEdBQUEySyxLQUFBO1VBQUV4TixLQUFLLEdBQUF3TixLQUFBO1FBQ3pCO1FBQ0EsSUFBTUUsTUFBTSxHQUFHbkwsS0FBSyxDQUFDdUIsTUFBTSxDQUFDc0ksSUFBSSxDQUFDLFVBQUF4SixDQUFDO1VBQUEsT0FBSUEsQ0FBQyxDQUFDQyxFQUFFLEtBQUtBLEVBQUU7UUFBQSxFQUFDLEdBQUdvSCxNQUFNLEdBQUdyQixRQUFROztRQUV0RTtRQUNBOEUsTUFBTSxDQUFDMU0sQ0FBQyxDQUFDLEdBQUcwTSxNQUFNLENBQUMxTSxDQUFDLENBQUMsSUFBQWUsYUFBQSxDQUFBQSxhQUFBLEtBRWhCc0wsRUFBRTtVQUNMdkosTUFBTSxFQUFFNEosTUFBTSxLQUFLekQsTUFBTSxHQUFHLElBQUEwRCxxQ0FBOEIsRUFBQ3BMLEtBQUssQ0FBQ3VCLE1BQU0sQ0FBQyxHQUFHO1FBQUUsRUFDOUU7UUFDRDRKLE1BQU0sQ0FBQzFNLENBQUMsQ0FBQyxDQUFDOEMsTUFBTSxHQUFBL0IsYUFBQSxDQUFBQSxhQUFBLEtBQ1gyTCxNQUFNLENBQUMxTSxDQUFDLENBQUMsQ0FBQzhDLE1BQU0sV0FBQTVCLGdCQUFBLGlCQUNsQlcsRUFBRSxFQUFHN0MsS0FBSyxFQUNaO01BQ0gsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxNQUFNO01BQ0w7TUFDQWlLLE1BQU0sQ0FBQ3BJLElBQUksQ0FBQ3dMLEVBQUUsQ0FBQztJQUNqQjtFQUNGLENBQUMsQ0FBQztFQUVGLE9BQUF0TCxhQUFBLENBQUFBLGFBQUEsS0FDS1EsS0FBSztJQUNSNkssU0FBUyxFQUFFbkQsTUFBTTtJQUNqQjJELG1CQUFtQixLQUFBM0osTUFBQSxLQUFBQyxtQkFBQSxhQUFNM0IsS0FBSyxDQUFDcUwsbUJBQW1CLEdBQUtoRixRQUFRO0VBQUM7QUFFcEU7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBU2lGLFlBQVlBLENBQzFCdEwsS0FBUSxFQUNSNEYsT0FBeUQsRUFDekQxRixVQUFvQixFQUNqQjtFQUNILElBQU1xTCxVQUFVLE1BQUE3SixNQUFBLEtBQUFDLG1CQUFBLGFBQ1gzQixLQUFLLENBQUM0RixPQUFPLE9BQUFqRSxtQkFBQSxhQUNiLENBQUNpRSxPQUFPLElBQUksRUFBRSxFQUNkeEYsR0FBRyxDQUFDLFVBQUFvTCxNQUFNLEVBQUk7SUFDYixPQUFPdEwsVUFBVSxHQUNiLElBQUF1TCxxQkFBWSxFQUNWQyxxQkFBUyxDQUFDQyxHQUFHLENBQUMsQ0FDWkgsTUFBTSxFQUNOO01BQ0U7TUFDQUksY0FBYyxFQUFFO0lBQ2xCLENBQUMsQ0FDRixDQUNILENBQUMsR0FDQUosTUFBcUI7RUFDNUIsQ0FBQyxDQUFDLENBQ0RyTSxNQUFNLENBQUMsVUFBQXFNLE1BQU0sRUFBSTtJQUNoQixPQUFPbEUsT0FBTyxDQUFDa0UsTUFBTSxJQUFJQSxNQUFNLENBQUNLLGFBQWEsQ0FBQyxDQUFDLENBQUM7RUFDbEQsQ0FBQyxDQUFDLEVBQ0w7RUFDRCxPQUFBck0sYUFBQSxDQUFBQSxhQUFBLEtBQ0tRLEtBQUs7SUFDUjRGLE9BQU8sRUFBRTJGLFVBQVU7SUFDbkIxRixXQUFXLEVBQUUwRixVQUFVLENBQUNuTCxHQUFHLENBQUMsVUFBQW9MLE1BQU07TUFBQSxPQUFJQSxNQUFNLENBQUNsTCxFQUFFO0lBQUE7RUFBQztBQUVwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzZILDZCQUE2QkEsQ0FDM0NuSSxLQUFlLEVBRWY7RUFBQSxJQURBOEwsYUFBaUUsR0FBQXJNLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQWtFLFNBQUEsR0FBQWxFLFNBQUEsTUFBRyxJQUFJO0VBRXhFLElBQU00SSxlQUFzRCxHQUFHLENBQUMsQ0FBQztFQUNqRSxJQUFNRCxhQUFvRCxHQUFHLENBQUMsQ0FBQztFQUUvRCxJQUNFLENBQUMwRCxhQUFhLElBQ2QsQ0FBQ0EsYUFBYSxDQUFDeEQsWUFBWSxJQUMzQixDQUFDdEosTUFBTSxDQUFDQyxJQUFJLENBQUM2TSxhQUFhLENBQUN4RCxZQUFZLENBQUMsQ0FBQ25MLE1BQU0sRUFDL0M7SUFDQSxPQUFPO01BQUNpTCxhQUFhLEVBQWJBLGFBQWE7TUFBRUMsZUFBZSxFQUFmQTtJQUFlLENBQUM7RUFDekM7RUFBQyxJQUFBMEQsTUFBQSxZQUFBQSxPQUFBLEVBRWdEO0lBQy9DLElBQUksQ0FBQy9MLEtBQUssQ0FBQ3dCLFFBQVEsQ0FBQ0osTUFBTSxDQUFDLElBQUlwQixLQUFLLENBQUN3RyxpQkFBaUIsQ0FBQ3BGLE1BQU0sQ0FBQyxFQUFFO01BQzlEO01BQ0FpSCxlQUFlLENBQUNqSCxNQUFNLENBQUMsR0FBRzBLLGFBQWEsQ0FBQ3hELFlBQVksQ0FBQ2xILE1BQU0sQ0FBQztJQUM5RCxDQUFDLE1BQU07TUFDTDtNQUNBLElBQU00SyxTQUFTLEdBQUdoTSxLQUFLLENBQUN3QixRQUFRLENBQUNKLE1BQU0sQ0FBQyxDQUFDNkssTUFBTSxDQUFDN0wsR0FBRyxDQUFDLFVBQUErQixDQUFDO1FBQUEsT0FBSUEsQ0FBQyxDQUFDOUQsSUFBSTtNQUFBLEVBQUM7TUFDaEUsSUFBTTZOLGlCQUFpQixHQUFHSixhQUFhLENBQUN4RCxZQUFZLENBQUNsSCxNQUFNLENBQUMsQ0FBQ2pDLE1BQU0sQ0FBQyxVQUFBZ04sS0FBSztRQUFBLE9BQ3ZFSCxTQUFTLENBQUNoSyxRQUFRLENBQUNtSyxLQUFLLENBQUM5TixJQUFJLENBQUM7TUFBQSxDQUNoQyxDQUFDO01BRUQrSixhQUFhLENBQUNoSCxNQUFNLENBQUMsR0FBRzhLLGlCQUFpQjtJQUMzQztFQUNGLENBQUM7RUFiRCxLQUFLLElBQU05SyxNQUFNLElBQUkwSyxhQUFhLENBQUN4RCxZQUFZO0lBQUF5RCxNQUFBO0VBQUE7RUFlL0MsT0FBTztJQUFDM0QsYUFBYSxFQUFiQSxhQUFhO0lBQUVDLGVBQWUsRUFBZkE7RUFBZSxDQUFDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTK0Qsa0JBQWtCQSxDQUNoQ3BNLEtBQVEsRUFDUnFNLGFBQXFFLEVBQ2xFO0VBQ0gsSUFBSUEsYUFBYSxJQUFJQywwQkFBZSxDQUFDRCxhQUFhLENBQUMsRUFBRTtJQUNuRCxPQUFBN00sYUFBQSxDQUFBQSxhQUFBLEtBQ0tRLEtBQUs7TUFDUnFNLGFBQWEsRUFBYkE7SUFBYTtFQUVqQjtFQUVBLE9BQU9yTSxLQUFLO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTdU0sMkJBQTJCQSxDQUFDM0QsT0FBaUIsRUFBaUI7RUFDckU7RUFDQSxPQUFPUyw2QkFBNkIsQ0FBQ1QsT0FBTyxDQUFDO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVM0RCxvQkFBb0JBLENBQ2xDeE0sS0FBUSxFQUNSeU0sZUFBeUUsRUFDdEU7RUFDSCxJQUFJQSxlQUFlLElBQUlDLDRCQUFpQixDQUFDRCxlQUFlLENBQUMsRUFBRTtJQUN6RCxPQUFBak4sYUFBQSxDQUFBQSxhQUFBLEtBQ0tRLEtBQUs7TUFDUnlNLGVBQWUsRUFBZkE7SUFBZTtFQUVuQjtFQUVBLE9BQU96TSxLQUFLO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTMk0sNkJBQTZCQSxDQUFDL0QsT0FBaUIsRUFBaUI7RUFDdkU7RUFDQSxPQUFPUyw2QkFBNkIsQ0FBQ1QsT0FBTyxDQUFDO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNnRSxvQkFBb0JBLENBQ2xDNU0sS0FBUSxFQUNSNk0sU0FBbUUsRUFDaEU7RUFDSCxJQUFJQSxTQUFTLElBQUlBLFNBQVMsQ0FBQ0MsV0FBVyxFQUFFO0lBQ3RDLE9BQUF0TixhQUFBLENBQUFBLGFBQUEsS0FDS1EsS0FBSztNQUNSK00sZUFBZSxFQUFBdk4sYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsS0FDVlEsS0FBSyxDQUFDK00sZUFBZSxHQUNyQkYsU0FBUztRQUNaRyxNQUFNLEVBQUU7TUFBSTtJQUNiO0VBRUw7RUFFQSxPQUFPaE4sS0FBSztBQUNkO0FBRUEsU0FBU2lOLHVCQUF1QkEsQ0FBQ3JFLE9BQStCLEVBQXdCO0VBQUEsSUFBQXNFLFdBQUEsRUFBQUMsV0FBQTtFQUN0RjtFQUNBLE9BQU87SUFDTEwsV0FBVyxHQUFBSSxXQUFBLEdBQUUsSUFBQWpELGdCQUFTLEVBQUNyQixPQUFPLEVBQUVzQiw0QkFBaUIsQ0FBQ2tELE9BQU8sRUFBRSxVQUFBcEUsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQzhELFdBQVc7SUFBQSxFQUFDLGNBQUFJLFdBQUEsY0FBQUEsV0FBQSxHQUFJLElBQUk7SUFDdEZHLEtBQUssR0FBQUYsV0FBQSxHQUFFLElBQUFsRCxnQkFBUyxFQUFDckIsT0FBTyxFQUFFc0IsNEJBQWlCLENBQUNrRCxPQUFPLEVBQUUsVUFBQXBFLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUNxRSxLQUFLO0lBQUEsRUFBQyxjQUFBRixXQUFBLGNBQUFBLFdBQUEsR0FBSTtFQUN4RSxDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU8sU0FBU0cseUJBQXlCQSxDQUN2Q3JCLE1BQTZCLEVBTTdCO0VBQUEsSUFMQXNCLFNBRUMsR0FBQTlOLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQWtFLFNBQUEsR0FBQWxFLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFBQSxJQUNOK04sU0FBdUIsR0FBQS9OLFNBQUEsQ0FBQXRDLE1BQUEsT0FBQXNDLFNBQUEsTUFBQWtFLFNBQUE7RUFBQSxJQUN2QjhKLE9BQWlDLEdBQUFoTyxTQUFBLENBQUF0QyxNQUFBLFFBQUFzQyxTQUFBLFFBQUFrRSxTQUFBLEdBQUFsRSxTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBRXRDO0VBQ0EsSUFBTWlPLE9BQXlCLEdBQUcsQ0FBQyxDQUFDO0VBQUMsSUFBQUMsTUFBQSxZQUFBQSxPQUFBLEVBQ0s7SUFBckMsSUFBTWhHLEdBQUcsR0FBQWlHLFlBQUEsQ0FBQUMsRUFBQTtJQUNaSCxPQUFPLENBQUMvRixHQUFHLENBQUMsR0FBQW5JLGFBQUEsS0FBT2dPLFNBQVMsQ0FBQzdGLEdBQUcsQ0FBQyxDQUFDO0lBRWxDLElBQU1tRyxLQUFLLEdBQUdQLFNBQVMsQ0FBQzVGLEdBQUcsQ0FBQztJQUM1QixJQUFJbUcsS0FBSyxFQUFFO01BQ1QsSUFBTUMsUUFBUSxHQUFHOUIsTUFBTSxDQUFDMUgsU0FBUyxDQUFDLFVBQUF5SixLQUFBO1FBQUEsSUFBRTNQLElBQUksR0FBQTJQLEtBQUEsQ0FBSjNQLElBQUk7UUFBQSxPQUFNQSxJQUFJLEtBQUt5UCxLQUFLO01BQUEsRUFBQztNQUU3RCxJQUFJQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDakI7UUFDQUwsT0FBTyxDQUFDL0YsR0FBRyxDQUFDLENBQUNvRyxRQUFRLEdBQUdBLFFBQVE7UUFDaENMLE9BQU8sQ0FBQy9GLEdBQUcsQ0FBQyxDQUFDbEssS0FBSyxHQUFHcVEsS0FBSztNQUM1QjtJQUNGO0VBQ0YsQ0FBQztFQWJELFNBQUFELEVBQUEsTUFBQUQsWUFBQSxHQUFrQjVPLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDdU8sU0FBUyxDQUFDLEVBQUFLLEVBQUEsR0FBQUQsWUFBQSxDQUFBelEsTUFBQSxFQUFBMFEsRUFBQTtJQUFBRixNQUFBO0VBQUE7O0VBZXhDO0VBQ0EsSUFBTU0sV0FBVyxHQUFHalAsTUFBTSxDQUFDQyxJQUFJLENBQUN5TyxPQUFPLENBQUMsQ0FBQ1EsS0FBSyxDQUFDLFVBQUF2RyxHQUFHO0lBQUEsT0FDaER3RyxjQUFjLENBQUNULE9BQU8sQ0FBQy9GLEdBQUcsQ0FBQyxFQUFFK0YsT0FBTyxFQUFFekIsTUFBTSxDQUFDO0VBQUEsQ0FDL0MsQ0FBQztFQUVELElBQU1tQyxFQUFFLEdBQUdILFdBQVcsR0FBR1AsT0FBTyxHQUFHLElBQUk7RUFDdkMsSUFBSUQsT0FBTyxDQUFDWSxZQUFZLEVBQUU7SUFDeEIsSUFBTUMsZUFBZSxHQUFHdFAsTUFBTSxDQUFDQyxJQUFJLENBQUN1TyxTQUFTLENBQUMsQ0FBQ3JPLE1BQU0sQ0FBQyxVQUFBb1AsQ0FBQztNQUFBLE9BQUksQ0FBQ2YsU0FBUyxDQUFDZSxDQUFDLENBQUMsQ0FBQ0MsUUFBUTtJQUFBLEVBQUM7SUFDbEYsSUFBTUMsY0FBYyxHQUFHSCxlQUFlLENBQUNuUCxNQUFNLENBQUMsVUFBQW9QLENBQUM7TUFBQSxPQUFJLEVBQUNiLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUdhLENBQUMsQ0FBQyxDQUFDOVEsS0FBSztJQUFBLEVBQUM7SUFDdkUsSUFBSWdSLGNBQWMsQ0FBQ3RSLE1BQU0sRUFBRTtNQUN6QixNQUFNLElBQUl1UixLQUFLLDBDQUFBaE4sTUFBQSxDQUEwQytNLGNBQWMsQ0FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFFLENBQUM7SUFDdkY7SUFDQSxJQUFNQyxhQUFhLEdBQUc1UCxNQUFNLENBQUNDLElBQUksQ0FBQ3NPLFNBQVMsQ0FBQztJQUM1QyxJQUFNc0IsY0FBYyxHQUFHRCxhQUFhLENBQUN6UCxNQUFNLENBQUMsVUFBQW9QLENBQUM7TUFBQSxJQUFBTyxVQUFBO01BQUEsT0FBSSxFQUFDcEIsT0FBTyxhQUFQQSxPQUFPLGdCQUFBb0IsVUFBQSxHQUFQcEIsT0FBTyxDQUFHYSxDQUFDLENBQUMsY0FBQU8sVUFBQSxlQUFaQSxVQUFBLENBQWNyUixLQUFLO0lBQUEsRUFBQztJQUN0RSxJQUFJb1IsY0FBYyxDQUFDMVIsTUFBTSxFQUFFO01BQ3pCLE1BQU0sSUFBSXVSLEtBQUssK0JBQUFoTixNQUFBLENBQStCbU4sY0FBYyxDQUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUUsQ0FBQztJQUM1RTtFQUNGO0VBRUEsT0FBT1AsRUFBRTtBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNELGNBQWNBLENBQzVCWSxNQUF5RCxFQUN6RHJCLE9BQXFCLEVBQ3JCMUIsU0FBZ0MsRUFDdkI7RUFDVCxJQUFJK0MsTUFBTSxDQUFDUCxRQUFRLElBQUlPLE1BQU0sQ0FBQ3RSLEtBQUssRUFBRTtJQUNuQyxPQUFPLElBQUk7RUFDYjtFQUNBLElBQUlzUixNQUFNLENBQUNDLFNBQVMsRUFBRTtJQUNwQixPQUFPRCxNQUFNLENBQUNDLFNBQVMsQ0FBQ0QsTUFBTSxFQUFFckIsT0FBTyxFQUFFMUIsU0FBUyxDQUFDO0VBQ3JEO0VBQ0EsT0FBTyxLQUFLO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2lELHNCQUFzQkEsQ0FDcENoRCxNQUFNLEVBQUFpRCxLQUFBLEVBRU5DLGNBQWMsRUFFZDtFQUFBLElBQUFDLEtBQUEsT0FBQWxFLGVBQUEsYUFBQWdFLEtBQUE7SUFIQ0csY0FBYyxHQUFBRCxLQUFBO0VBQUEsSUFFZjNCLE9BQWlDLEdBQUFoTyxTQUFBLENBQUF0QyxNQUFBLFFBQUFzQyxTQUFBLFFBQUFrRSxTQUFBLEdBQUFsRSxTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBRXRDLElBQU02UCxlQUFlLEdBQUd0UyxLQUFLLENBQUNDLE9BQU8sQ0FBQ2tTLGNBQWMsQ0FBQyxHQUFHQSxjQUFjLEdBQUcsQ0FBQ0EsY0FBYyxDQUFDOztFQUV6RjtFQUNBLE9BQU9HLGVBQWUsQ0FBQ2xQLEdBQUcsQ0FBQyxVQUFBbVAsU0FBUyxFQUFJO0lBQ3RDLElBQU1wRCxLQUFLLEdBQUdvRCxTQUFTLENBQUNwRCxLQUFLLEdBQ3pCRixNQUFNLENBQUNwQyxJQUFJLENBQUMsVUFBQTJGLEVBQUU7TUFBQSxPQUNaeFEsTUFBTSxDQUFDQyxJQUFJLENBQUNzUSxTQUFTLENBQUNwRCxLQUFLLENBQUMsQ0FBQytCLEtBQUssQ0FBQyxVQUFBdkcsR0FBRztRQUFBLE9BQUk0SCxTQUFTLENBQUNwRCxLQUFLLENBQUN4RSxHQUFHLENBQUMsS0FBSzZILEVBQUUsQ0FBQzdILEdBQUcsQ0FBQztNQUFBLEVBQUM7SUFBQSxDQUM3RSxDQUFDLEdBQ0QsSUFBSTtJQUVSLElBQUl3RSxLQUFLLEtBQUt4SSxTQUFTLElBQUk4SixPQUFPLENBQUNZLFlBQVksRUFBRTtNQUMvQyxNQUFNLElBQUlLLEtBQUssd0NBQUFoTixNQUFBLENBQXdDK04sSUFBSSxDQUFDQyxTQUFTLENBQUNILFNBQVMsQ0FBQ3BELEtBQUssQ0FBQyxDQUFFLENBQUM7SUFDM0Y7SUFFQSxPQUFPbk4sTUFBTSxDQUFDQyxJQUFJLENBQUNvUSxjQUFjLENBQUMsQ0FBQy9GLE1BQU0sQ0FDdkMsVUFBQ3FHLElBQUksRUFBRWhJLEdBQUc7TUFBQSxPQUFBbkksYUFBQSxDQUFBQSxhQUFBLEtBQ0xtUSxJQUFJLFdBQUFoUSxnQkFBQSxpQkFDTmdJLEdBQUcsRUFBR0EsR0FBRyxLQUFLLE9BQU8sR0FBR3dFLEtBQUssR0FBR29ELFNBQVMsQ0FBQzVILEdBQUcsQ0FBQyxJQUFJMEgsY0FBYyxDQUFDMUgsR0FBRyxDQUFDO0lBQUEsQ0FDdEUsRUFDRixDQUFDLENBQ0gsQ0FBQztFQUNILENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2lJLDJCQUEyQkEsQ0FDekMzRCxNQUE2QixFQUM3QmpILFFBQWUsRUFDZjZLLFVBQXVCLEVBRVQ7RUFBQSxJQURkcEMsT0FBaUMsR0FBQWhPLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQWtFLFNBQUEsR0FBQWxFLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFFdENULE1BQU0sQ0FBQzhRLE1BQU0sQ0FBQzlLLFFBQVEsQ0FBQ25DLGNBQWMsQ0FBQyxDQUFDbkQsT0FBTyxDQUFDLFVBQUFxUSxLQUFBLEVBQXlCO0lBQUEsSUFBdkI1RCxLQUFLLEdBQUE0RCxLQUFBLENBQUw1RCxLQUFLO01BQUU2RCxLQUFLLEdBQUFELEtBQUEsQ0FBTEMsS0FBSztNQUFFckksR0FBRyxHQUFBb0ksS0FBQSxDQUFIcEksR0FBRztJQUNoRSxJQUFJc0ksVUFBVTtJQUNkLElBQUlKLFVBQVUsQ0FBQ3pNLE1BQU0sRUFBRTtNQUNyQixJQUFJeU0sVUFBVSxDQUFDek0sTUFBTSxDQUFDK0ksS0FBSyxDQUFDLEVBQUU7UUFDNUI4RCxVQUFVLEdBQUdoRSxNQUFNLENBQUNwQyxJQUFJLENBQ3RCLFVBQUEyRixFQUFFO1VBQUEsT0FBSUssVUFBVSxDQUFDek0sTUFBTSxJQUFJb00sRUFBRSxDQUFDblIsSUFBSSxLQUFLd1IsVUFBVSxDQUFDek0sTUFBTSxDQUFDK0ksS0FBSyxDQUFDLENBQUM5TixJQUFJO1FBQUEsQ0FDdEUsQ0FBQztNQUNIO01BRUEsSUFBTTZSLFlBQVksR0FBQTFRLGFBQUEsQ0FBQUEsYUFBQSxLQUNaeVEsVUFBVSxPQUFBdFEsZ0JBQUEsaUJBQUt3TSxLQUFLLEVBQUc4RCxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQ3ZDSixVQUFVLENBQUN6TSxNQUFNLENBQUM0TSxLQUFLLENBQUMsT0FBQXJRLGdCQUFBLGlCQUFLcVEsS0FBSyxFQUFHSCxVQUFVLENBQUN6TSxNQUFNLENBQUM0TSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDeEU7TUFDRCxJQUFJaFIsTUFBTSxDQUFDQyxJQUFJLENBQUNpUixZQUFZLENBQUMsQ0FBQy9TLE1BQU0sRUFBRTtRQUNwQzZILFFBQVEsQ0FBQ21MLGlCQUFpQixDQUFDRCxZQUFZLENBQUM7TUFDMUM7TUFFQWxMLFFBQVEsQ0FBQ29MLHFCQUFxQixDQUFDekksR0FBRyxDQUFDO01BQ25DLElBQUk4RixPQUFPLENBQUNZLFlBQVksRUFBRTtRQUFBLElBQUFnQyxrQkFBQSxFQUFBQyxxQkFBQTtRQUN4QixJQUFNQyxTQUFTLElBQUFGLGtCQUFBLEdBQUdSLFVBQVUsQ0FBQ3pNLE1BQU0sY0FBQWlOLGtCQUFBLGdCQUFBQSxrQkFBQSxHQUFqQkEsa0JBQUEsQ0FBb0JsRSxLQUFLLENBQUMsY0FBQWtFLGtCQUFBLHVCQUExQkEsa0JBQUEsQ0FBNEJoUyxJQUFJO1FBQ2xELElBQUlrUyxTQUFTLElBQUlBLFNBQVMsT0FBQUQscUJBQUEsR0FBS3RMLFFBQVEsQ0FBQzVCLE1BQU0sQ0FBQytJLEtBQUssQ0FBQyxjQUFBbUUscUJBQUEsdUJBQXRCQSxxQkFBQSxDQUF3QmpTLElBQUksR0FBRTtVQUMzRCxNQUFNLElBQUlxUSxLQUFLLDRDQUFBaE4sTUFBQSxDQUE0Q3lLLEtBQUssQ0FBRSxDQUFDO1FBQ3JFO01BQ0Y7SUFDRjtFQUNGLENBQUMsQ0FBQztFQUNGLE9BQU9uSCxRQUFRO0FBQ2pCO0FBT08sU0FBU0gsd0JBQXdCQSxDQUN0Q3JELFFBQWtCLEVBQ2xCc0QsWUFBc0MsRUFHdEM7RUFBQSxJQUZBdkQsTUFBdUQsR0FBQTlCLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQWtFLFNBQUEsR0FBQWxFLFNBQUEsTUFBRyxFQUFFO0VBQUEsSUFDNURnTyxPQUE2QixHQUFBaE8sU0FBQSxDQUFBdEMsTUFBQSxPQUFBc0MsU0FBQSxNQUFBa0UsU0FBQTtFQUU3QixJQUFNbEQsU0FBa0IsR0FBRyxFQUFFO0VBQzdCLElBQU1DLE1BQXVELEdBQUcsRUFBRTtFQUVsRWEsTUFBTSxDQUFDN0IsT0FBTyxDQUFDLFVBQUEySCxLQUFLLEVBQUk7SUFBQSxJQUFBbUosYUFBQTtJQUN0QixJQUFJQyxhQUEyQixHQUFHLElBQUk7SUFFdEMsSUFBSXBKLEtBQUssYUFBTEEsS0FBSyxnQkFBQW1KLGFBQUEsR0FBTG5KLEtBQUssQ0FBRWpFLE1BQU0sY0FBQW9OLGFBQUEsZUFBYkEsYUFBQSxDQUFlcFAsTUFBTSxFQUFFO01BQ3pCLElBQUlJLFFBQVEsQ0FBQzZGLEtBQUssQ0FBQ2pFLE1BQU0sQ0FBQ2hDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pDO1FBQ0FxUCxhQUFhLEdBQUdDLHFCQUFxQixDQUNuQ2xQLFFBQVEsQ0FBQzZGLEtBQUssQ0FBQ2pFLE1BQU0sQ0FBQ2hDLE1BQU0sQ0FBQyxFQUM3QmlHLEtBQUssRUFDTHZDLFlBQVksRUFDWjJJLE9BQ0YsQ0FBQztNQUNIO0lBQ0Y7SUFFQSxJQUFJZ0QsYUFBYSxFQUFFO01BQ2pCaFEsU0FBUyxDQUFDbkIsSUFBSSxDQUFDbVIsYUFBYSxDQUFDO0lBQy9CLENBQUMsTUFBTTtNQUNMO01BQ0EvUCxNQUFNLENBQUNwQixJQUFJLENBQUMrSCxLQUFLLENBQUM7SUFDcEI7RUFDRixDQUFDLENBQUM7RUFFRixPQUFPO0lBQUM1RyxTQUFTLEVBQVRBLFNBQVM7SUFBRUMsTUFBTSxFQUFOQTtFQUFNLENBQUM7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBU2lRLDZCQUE2QkEsQ0FBQzNMLFFBQVEsRUFBRTtFQUMvQztFQUNBLElBQUk0TCxZQUFZLEdBQUc1TCxRQUFRLENBQUM2TCxlQUFlLENBQUMsQ0FBQztFQUM3QztFQUNBLElBQU1DLGFBQWEsR0FBRzlMLFFBQVEsQ0FBQzVCLE1BQU0sQ0FBQzJOLFVBQVUsR0FDNUMsQ0FBQy9MLFFBQVEsQ0FBQ2dNLG9CQUFvQixJQUFJLEVBQUUsRUFBRW5ILElBQUksQ0FDeEMsVUFBQW9ILE9BQU87SUFBQSxPQUFJQSxPQUFPLENBQUN0SixHQUFHLEtBQUszQyxRQUFRLENBQUM1QixNQUFNLENBQUMyTixVQUFVO0VBQUEsQ0FDdkQsQ0FBQyxHQUNELElBQUk7RUFFUixJQUFJRCxhQUFhLEVBQUU7SUFDakI7SUFDQUYsWUFBWSxHQUFHLEdBQUFsUCxNQUFBLEtBQUFDLG1CQUFBLGFBQ1RtUCxhQUFhLENBQUN4QyxlQUFlLElBQUksRUFBRSxPQUFBM00sbUJBQUEsYUFDbkNtUCxhQUFhLENBQUNJLGVBQWUsSUFBSSxFQUFFLEdBQ3ZDNUgsTUFBTSxDQUNOLFVBQUNxRyxJQUFJLEVBQUVoSSxHQUFHO01BQUEsT0FBQW5JLGFBQUEsQ0FBQUEsYUFBQSxLQUNMbVEsSUFBSSxXQUFBaFEsZ0JBQUEsaUJBQ05nSSxHQUFHLEVBQUdpSixZQUFZLENBQUNqSixHQUFHLENBQUM7SUFBQSxDQUN4QixFQUNGLENBQUMsQ0FDSCxDQUFDO0VBQ0g7RUFFQSxPQUFPaUosWUFBWTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0YscUJBQXFCQSxDQUNuQ1MsT0FBb0IsRUFDcEJ0QixVQUF1QixFQUN2Qi9LLFlBQXNDLEVBRXhCO0VBQUEsSUFEZDJJLE9BQTRCLEdBQUFoTyxTQUFBLENBQUF0QyxNQUFBLFFBQUFzQyxTQUFBLFFBQUFrRSxTQUFBLEdBQUFsRSxTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBRWpDLElBQU93TSxNQUFNLEdBQWdCa0YsT0FBTyxDQUE3QmxGLE1BQU07SUFBTTdLLE1BQU0sR0FBSStQLE9BQU8sQ0FBckI3USxFQUFFO0VBQ2pCLElBQU84USxJQUFJLEdBQUl2QixVQUFVLENBQWxCdUIsSUFBSTtFQUNYLElBQU8vQyxZQUFZLEdBQUlaLE9BQU8sQ0FBdkJZLFlBQVk7RUFDbkI7RUFDQSxJQUFJLENBQUMrQyxJQUFJLElBQUksQ0FBQ3BTLE1BQU0sQ0FBQ3FTLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDdlQsSUFBSSxDQUFDK0csWUFBWSxFQUFFc00sSUFBSSxDQUFDLElBQUksQ0FBQ3ZCLFVBQVUsQ0FBQ3pNLE1BQU0sRUFBRTtJQUM1RixJQUFJaUwsWUFBWSxFQUFFO01BQ2hCLE1BQU0sSUFBSUssS0FBSyw2QkFBQWhOLE1BQUEsQ0FBNEIwUCxJQUFJLDRCQUF3QixDQUFDO0lBQzFFO0lBQ0EsT0FBTyxJQUFJO0VBQ2I7RUFFQSxJQUFJcE0sUUFBUSxHQUFHLElBQUlGLFlBQVksQ0FBQ3NNLElBQUksQ0FBQyxDQUFDO0lBQ3BDOVEsRUFBRSxFQUFFdVAsVUFBVSxDQUFDdlAsRUFBRTtJQUNqQmMsTUFBTSxFQUFOQSxNQUFNO0lBQ05tUSxLQUFLLEVBQUUxQixVQUFVLENBQUN6TSxNQUFNLENBQUNtTyxLQUFLO0lBQzlCL08sS0FBSyxFQUFFcU4sVUFBVSxDQUFDek0sTUFBTSxDQUFDWixLQUFLO0lBQzlCZ1AsU0FBUyxFQUFFM0IsVUFBVSxDQUFDek0sTUFBTSxDQUFDb08sU0FBUztJQUN0Q0MsTUFBTSxFQUFFNUIsVUFBVSxDQUFDek0sTUFBTSxDQUFDcU8sTUFBTTtJQUNoQ1YsVUFBVSxFQUFFbEIsVUFBVSxDQUFDek0sTUFBTSxDQUFDMk4sVUFBVTtJQUN4Q1csY0FBYyxFQUFFN0IsVUFBVSxDQUFDek0sTUFBTSxDQUFDc087RUFDcEMsQ0FBQyxDQUFDO0VBRUYsSUFBTWQsWUFBWSxHQUFHRCw2QkFBNkIsQ0FBQzNMLFFBQVEsQ0FBQztFQUU1RCxJQUFJaEcsTUFBTSxDQUFDQyxJQUFJLENBQUMyUixZQUFZLENBQUMsRUFBRTtJQUM3QixJQUFNbEQsT0FBTyxHQUFHSix5QkFBeUIsQ0FDdkNyQixNQUFNLEVBQ040RCxVQUFVLENBQUN6TSxNQUFNLENBQUNzSyxPQUFPLEVBQ3pCa0QsWUFBWSxFQUNabkQsT0FDRixDQUFDO0lBQ0QsSUFBSUMsT0FBTyxFQUFFO01BQ1gxSSxRQUFRLENBQUNtTCxpQkFBaUIsQ0FBQztRQUN6QnpDLE9BQU8sRUFBQWxPLGFBQUEsQ0FBQUEsYUFBQSxLQUNGd0YsUUFBUSxDQUFDNUIsTUFBTSxDQUFDc0ssT0FBTyxHQUN2QkEsT0FBTztNQUVkLENBQUMsQ0FBQztJQUNKLENBQUMsTUFBTSxJQUFJLENBQUNELE9BQU8sQ0FBQzFJLGdCQUFnQixFQUFFO01BQ3BDLE9BQU8sSUFBSTtJQUNiO0VBQ0Y7RUFFQSxJQUFNd0ssU0FBUyxHQUNiTSxVQUFVLENBQUN6TSxNQUFNLENBQUNtTSxTQUFTLElBQUl2SyxRQUFRLENBQUM1QixNQUFNLENBQUNtTSxTQUFTLEdBQ3BETixzQkFBc0IsQ0FDcEJoRCxNQUFNLEVBQ05qSCxRQUFRLENBQUM1QixNQUFNLENBQUNtTSxTQUFTLEVBQ3pCTSxVQUFVLENBQUN6TSxNQUFNLENBQUNtTSxTQUFTLEVBQzNCOUIsT0FDRixDQUFDLEdBQ0R6SSxRQUFRLENBQUM1QixNQUFNLENBQUNtTSxTQUFTOztFQUUvQjtFQUNBLElBQU1vQyxlQUFlLEdBQUczTSxRQUFRLENBQUM0TSxlQUFlLENBQzlDNU0sUUFBUSxDQUFDNUIsTUFBTSxDQUFDeU8sU0FBUyxFQUN6QmhDLFVBQVUsQ0FBQ3pNLE1BQU0sQ0FBQ3lPLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFDakM7SUFDRUMsV0FBVyxFQUFFLENBQUMsWUFBWSxFQUFFLGtCQUFrQjtFQUNoRCxDQUNGLENBQUM7O0VBRUQ7RUFDQSxJQUFNRCxTQUFTLEdBQUc3TSxRQUFRLENBQUMrTSxpQkFBaUIsR0FDeEMvTSxRQUFRLENBQUMrTSxpQkFBaUIsQ0FBQ1osT0FBTyxFQUFFUSxlQUFlLENBQUMsR0FDcERBLGVBQWU7RUFFbkIzTSxRQUFRLENBQUNtTCxpQkFBaUIsQ0FBQztJQUN6QjBCLFNBQVMsRUFBVEEsU0FBUztJQUNUdEMsU0FBUyxFQUFUQTtFQUNGLENBQUMsQ0FBQzs7RUFFRjtFQUNBO0VBQ0E7RUFDQXZLLFFBQVEsR0FBRzRLLDJCQUEyQixDQUFDM0QsTUFBTSxFQUFFakgsUUFBUSxFQUFFNkssVUFBVSxFQUFFcEMsT0FBTyxDQUFDO0VBRTdFLElBQUlZLFlBQVksRUFBRTtJQUNoQixJQUFJLENBQUNySixRQUFRLENBQUM2RyxhQUFhLENBQUMsQ0FBQyxFQUFFO01BQzdCLE1BQU0sSUFBSTZDLEtBQUssZ0NBQUFoTixNQUFBLENBQWdDc0QsUUFBUSxDQUFDMUUsRUFBRSxDQUFFLENBQUM7SUFDL0Q7RUFDRjtFQUVBLE9BQU8wRSxRQUFRO0FBQ2pCO0FBRU8sU0FBU2dOLFdBQVdBLENBQXFCaFMsS0FBUSxFQUFFaVMsV0FBd0IsRUFBRTtFQUFBLElBQUFDLG9CQUFBO0VBQ2xGLElBQUksQ0FBQ0QsV0FBVyxFQUFFO0lBQ2hCLE9BQU9qUyxLQUFLO0VBQ2Q7RUFDQSxPQUFBUixhQUFBLENBQUFBLGFBQUEsS0FDS1EsS0FBSztJQUNSbVMsTUFBTSxFQUFBM1MsYUFBQSxDQUFBQSxhQUFBLEtBQ0RRLEtBQUssQ0FBQ21TLE1BQU07TUFDZkMsUUFBUSxLQUFBMVEsTUFBQSxLQUFBQyxtQkFBQSxhQUFNM0IsS0FBSyxDQUFDbVMsTUFBTSxDQUFDQyxRQUFRLE9BQUF6USxtQkFBQSxhQUFNc1EsV0FBVyxDQUFDRyxRQUFRLElBQUksRUFBRSxFQUFFO01BQ3JFO01BQ0FDLE9BQU8sR0FBQUgsb0JBQUEsR0FBRUQsV0FBVyxDQUFDSSxPQUFPLGNBQUFILG9CQUFBLGNBQUFBLG9CQUFBLEdBQUlsUyxLQUFLLENBQUNtUyxNQUFNLENBQUNFO0lBQU87RUFDckQ7QUFFTDtBQUVBLFNBQVNDLG9CQUFvQkEsQ0FBQzFKLE9BQXNCLEVBQWU7RUFDakUsT0FBT0EsT0FBTyxDQUFDVSxNQUFNLENBQ25CLFVBQUNDLEdBQUcsRUFBRWdKLFVBQVUsRUFBSztJQUNuQixPQUFBL1MsYUFBQSxDQUFBQSxhQUFBLEtBQ0srSixHQUFHO01BQ042SSxRQUFRLEtBQUExUSxNQUFBLEtBQUFDLG1CQUFBLGFBQU00SCxHQUFHLENBQUM2SSxRQUFRLE9BQUF6USxtQkFBQSxhQUFNNFEsVUFBVSxDQUFDSCxRQUFRLElBQUksRUFBRTtJQUFFO0VBRS9ELENBQUMsRUFDRDtJQUNFO0lBQ0E7SUFDQTtJQUNBQSxRQUFRLEVBQUUsRUFBRTtJQUNaQyxPQUFPLEVBQUV6SixPQUFPLENBQUNLLElBQUksQ0FBQyxVQUFBRCxDQUFDO01BQUEsT0FBSUEsQ0FBQyxhQUFEQSxDQUFDLHVCQUFEQSxDQUFDLENBQUVxSixPQUFPO0lBQUE7RUFDdkMsQ0FDRixDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRyxvQkFBb0JBLENBQUN4UyxLQUFlLEVBQUV5UyxjQUF3QixFQUFZO0VBQ3hGLElBQU0vSyxNQUFNLEdBQUFsSSxhQUFBLENBQUFBLGFBQUEsS0FDUFEsS0FBSyxDQUFDd0IsUUFBUSxHQUNkaVIsY0FBYyxDQUNsQjtFQUVELElBQUl6VixLQUFLLENBQUNDLE9BQU8sQ0FBQytDLEtBQUssQ0FBQzBTLG9CQUFvQixDQUFDLEVBQUU7SUFDN0M7SUFDQSxJQUFNQyxhQUFhLEdBQUczVCxNQUFNLENBQUNDLElBQUksQ0FBQ3lJLE1BQU0sQ0FBQyxDQUFDdkksTUFBTSxDQUM5QyxVQUFBbUIsRUFBRTtNQUFBLElBQUFzUyxxQkFBQTtNQUFBLE9BQUksR0FBQUEscUJBQUEsR0FBQzVTLEtBQUssQ0FBQzBTLG9CQUFvQixjQUFBRSxxQkFBQSxlQUExQkEscUJBQUEsQ0FBNEI1USxRQUFRLENBQUMxQixFQUFFLENBQUM7SUFBQSxDQUNqRCxDQUFDO0lBQ0QsT0FBTyxHQUFBb0IsTUFBQSxLQUFBQyxtQkFBQSxhQUFJM0IsS0FBSyxDQUFDMFMsb0JBQW9CLE9BQUEvUSxtQkFBQSxhQUFLZ1IsYUFBYSxHQUFFckosTUFBTSxDQUM3RCxVQUFDcUcsSUFBSSxFQUFFdk8sTUFBTTtNQUFBLE9BQUE1QixhQUFBLENBQUFBLGFBQUEsS0FDUm1RLElBQUksR0FDSGpJLE1BQU0sQ0FBQ3RHLE1BQU0sQ0FBQyxPQUFBekIsZ0JBQUEsaUJBQUt5QixNQUFNLEVBQUdzRyxNQUFNLENBQUN0RyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFBQSxDQUNwRCxFQUNGLENBQUMsQ0FDSCxDQUFDO0VBQ0g7RUFFQSxPQUFPc0csTUFBTTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTMkIsNkJBQTZCQSxDQUFJd0osR0FBUSxFQUFZO0VBQUEsSUFBQUMsTUFBQTtFQUM1RCxJQUFNQyxNQUFNLEdBQUcsSUFBSUMsR0FBRyxDQUFDLENBQUM7RUFDeEJILEdBQUcsQ0FBQ25ULE9BQU8sQ0FBQyxVQUFBakMsS0FBSyxFQUFJO0lBQ25CLElBQUksSUFBQXdWLCtCQUFrQixFQUFDeFYsS0FBSyxDQUFDLEVBQUU7TUFDN0IsSUFBSSxDQUFDc1YsTUFBTSxDQUFDRyxHQUFHLENBQUN6VixLQUFLLENBQUMsRUFBRTtRQUN0QnNWLE1BQU0sQ0FBQ0ksR0FBRyxDQUFDMVYsS0FBSyxFQUFFLENBQUMsQ0FBQztNQUN0QixDQUFDLE1BQU07UUFDTHNWLE1BQU0sQ0FBQ0ksR0FBRyxDQUFDMVYsS0FBSyxFQUFFc1YsTUFBTSxDQUFDSyxHQUFHLENBQUMzVixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDMUM7SUFDRjtFQUNGLENBQUMsQ0FBQztFQUNGO0VBQ0EsSUFBSXNWLE1BQU0sQ0FBQy9JLElBQUksS0FBSyxDQUFDLEVBQUU7SUFDckIsT0FBTyxJQUFJO0VBQ2I7RUFDQSxRQUFBOEksTUFBQSxPQUFBblIsbUJBQUEsYUFBV29SLE1BQU0sQ0FBQ2hJLE9BQU8sQ0FBQyxDQUFDLGVBQUErSCxNQUFBLHVCQUFwQkEsTUFBQSxDQUF1QnhKLE1BQU0sQ0FBQyxVQUFDQyxHQUFHLEVBQUV2TCxJQUFJO0lBQUEsT0FBTUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHdUwsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHdkwsSUFBSSxHQUFHdUwsR0FBRztFQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RjtBQUVPLElBQU04SixpQkFBdUMsR0FBQUMsT0FBQSxDQUFBRCxpQkFBQSxHQUFHLENBQ3JEO0VBQ0VFLEtBQUssRUFBRXROLFdBQVc7RUFDbEJ1TixJQUFJLEVBQUUsUUFBUTtFQUNkQyxXQUFXLEVBQUUsaUJBQWlCO0VBQzlCQyxhQUFhLEVBQUU7QUFDakIsQ0FBQyxFQUNEO0VBQ0VILEtBQUssRUFBRXhULFlBQVk7RUFDbkJ5VCxJQUFJLEVBQUUsU0FBUztFQUNmQyxXQUFXLEVBQUUsa0JBQWtCO0VBQy9CQyxhQUFhLEVBQUUscUJBQXFCO0VBQ3BDQyx1QkFBdUIsRUFBRS9SO0FBQzNCLENBQUMsRUFDRDtFQUNFMlIsS0FBSyxFQUFFakksWUFBWTtFQUNuQmtJLElBQUksRUFBRTtBQUNSLENBQUMsRUFDRDtFQUNFRCxLQUFLLEVBQUUvTCxpQkFBaUI7RUFDeEJnTSxJQUFJLEVBQUUsbUJBQW1CO0VBQ3pCQyxXQUFXLEVBQUUsdUJBQXVCO0VBQ3BDRSx1QkFBdUIsRUFBRW5KLDRCQUE0QjtFQUNyRG9KLFlBQVksRUFBRWxMLHdCQUF3QjtFQUN0Q21MLGNBQWMsRUFBRWxMO0FBQ2xCLENBQUMsRUFDRDtFQUFDNEssS0FBSyxFQUFFbkgsa0JBQWtCO0VBQUVvSCxJQUFJLEVBQUUsZUFBZTtFQUFFSyxjQUFjLEVBQUV0SDtBQUEyQixDQUFDLEVBQy9GO0VBQ0VnSCxLQUFLLEVBQUUvRyxvQkFBb0I7RUFDM0JnSCxJQUFJLEVBQUUsaUJBQWlCO0VBQ3ZCSyxjQUFjLEVBQUVsSDtBQUNsQixDQUFDLEVBQ0Q7RUFBQzRHLEtBQUssRUFBRTNJLGNBQWM7RUFBRTRJLElBQUksRUFBRSxXQUFXO0VBQUVDLFdBQVcsRUFBRTtBQUFxQixDQUFDLEVBQzlFO0VBQUNGLEtBQUssRUFBRTNHLG9CQUFvQjtFQUFFNEcsSUFBSSxFQUFFLGlCQUFpQjtFQUFFSyxjQUFjLEVBQUU1RztBQUF1QixDQUFDLEVBQy9GO0VBQUNzRyxLQUFLLEVBQUV2QixXQUFXO0VBQUV3QixJQUFJLEVBQUUsUUFBUTtFQUFFSyxjQUFjLEVBQUV2QjtBQUFvQixDQUFDLENBQzNFIiwiaWdub3JlTGlzdCI6W119