@carto/kepler.gl 0.0.71-alpha.4 → 0.0.71-alpha.6

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.
@@ -566,6 +566,37 @@ var VisualChannelSchemaV1 = /*#__PURE__*/function (_Schema10) {
566
566
  }]);
567
567
  return VisualChannelSchemaV1;
568
568
  }(_schema["default"]);
569
+ /**
570
+ * V1: save [channel]: [{ label, color }, ...] for legend
571
+ */
572
+
573
+
574
+ var LegendSettingsV1 = /*#__PURE__*/function (_Schema11) {
575
+ (0, _inherits2["default"])(LegendSettingsV1, _Schema11);
576
+
577
+ var _super11 = _createSuper(LegendSettingsV1);
578
+
579
+ function LegendSettingsV1() {
580
+ (0, _classCallCheck2["default"])(this, LegendSettingsV1);
581
+ return _super11.apply(this, arguments);
582
+ }
583
+
584
+ (0, _createClass2["default"])(LegendSettingsV1, [{
585
+ key: "save",
586
+ value: function save(legendSettings, parents) {
587
+ return (0, _defineProperty2["default"])({}, this.key, Object.keys(legendSettings).reduce(function (accu, key) {
588
+ accu[key] = legendSettings[key];
589
+ return accu;
590
+ }, {}));
591
+ }
592
+ }, {
593
+ key: "load",
594
+ value: function load(ls, parents, accumulator) {
595
+ return _objectSpread(_objectSpread({}, accumulator), {}, (0, _defineProperty2["default"])({}, this.key, ls));
596
+ }
597
+ }]);
598
+ return LegendSettingsV1;
599
+ }(_schema["default"]);
569
600
 
570
601
  var visConfigModificationV1 = {
571
602
  point: function point(visConfig, parents, accumulated) {
@@ -620,10 +651,10 @@ var visConfigModificationV1 = {
620
651
  }
621
652
  };
622
653
 
623
- var VisConfigSchemaV1 = /*#__PURE__*/function (_Schema11) {
624
- (0, _inherits2["default"])(VisConfigSchemaV1, _Schema11);
654
+ var VisConfigSchemaV1 = /*#__PURE__*/function (_Schema12) {
655
+ (0, _inherits2["default"])(VisConfigSchemaV1, _Schema12);
625
656
 
626
- var _super11 = _createSuper(VisConfigSchemaV1);
657
+ var _super12 = _createSuper(VisConfigSchemaV1);
627
658
 
628
659
  function VisConfigSchemaV1() {
629
660
  var _this8;
@@ -634,7 +665,7 @@ var VisConfigSchemaV1 = /*#__PURE__*/function (_Schema11) {
634
665
  args[_key8] = arguments[_key8];
635
666
  }
636
667
 
637
- _this8 = _super11.call.apply(_super11, [this].concat(args));
668
+ _this8 = _super12.call.apply(_super12, [this].concat(args));
638
669
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this8), "key", 'visConfig');
639
670
  return _this8;
640
671
  }
@@ -682,6 +713,10 @@ var layerPropsV1 = {
682
713
  })
683
714
  }
684
715
  }),
716
+ legendSettings: new LegendSettingsV1({
717
+ version: _versions.VERSIONS.v1,
718
+ key: 'legendSettings'
719
+ }),
685
720
  visualChannels: new VisualChannelSchemaV1({
686
721
  version: _versions.VERSIONS.v1,
687
722
  key: 'visualChannels'
@@ -689,10 +724,10 @@ var layerPropsV1 = {
689
724
  };
690
725
  exports.layerPropsV1 = layerPropsV1;
691
726
 
692
- var LayerSchemaV0 = /*#__PURE__*/function (_Schema12) {
693
- (0, _inherits2["default"])(LayerSchemaV0, _Schema12);
727
+ var LayerSchemaV0 = /*#__PURE__*/function (_Schema13) {
728
+ (0, _inherits2["default"])(LayerSchemaV0, _Schema13);
694
729
 
695
- var _super12 = _createSuper(LayerSchemaV0);
730
+ var _super13 = _createSuper(LayerSchemaV0);
696
731
 
697
732
  function LayerSchemaV0() {
698
733
  var _this9;
@@ -703,7 +738,7 @@ var LayerSchemaV0 = /*#__PURE__*/function (_Schema12) {
703
738
  args[_key9] = arguments[_key9];
704
739
  }
705
740
 
706
- _this9 = _super12.call.apply(_super12, [this].concat(args));
741
+ _this9 = _super13.call.apply(_super13, [this].concat(args));
707
742
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this9), "key", 'layers');
708
743
  return _this9;
709
744
  }
@@ -743,10 +778,10 @@ var LayerSchemaV0 = /*#__PURE__*/function (_Schema12) {
743
778
 
744
779
  exports.LayerSchemaV0 = LayerSchemaV0;
745
780
 
746
- var FilterSchemaV0 = /*#__PURE__*/function (_Schema13) {
747
- (0, _inherits2["default"])(FilterSchemaV0, _Schema13);
781
+ var FilterSchemaV0 = /*#__PURE__*/function (_Schema14) {
782
+ (0, _inherits2["default"])(FilterSchemaV0, _Schema14);
748
783
 
749
- var _super13 = _createSuper(FilterSchemaV0);
784
+ var _super14 = _createSuper(FilterSchemaV0);
750
785
 
751
786
  function FilterSchemaV0() {
752
787
  var _this12;
@@ -757,7 +792,7 @@ var FilterSchemaV0 = /*#__PURE__*/function (_Schema13) {
757
792
  args[_key10] = arguments[_key10];
758
793
  }
759
794
 
760
- _this12 = _super13.call.apply(_super13, [this].concat(args));
795
+ _this12 = _super14.call.apply(_super14, [this].concat(args));
761
796
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this12), "key", 'filters');
762
797
  return _this12;
763
798
  }
@@ -787,10 +822,10 @@ var FilterSchemaV0 = /*#__PURE__*/function (_Schema13) {
787
822
  exports.FilterSchemaV0 = FilterSchemaV0;
788
823
  var interactionPropsV0 = ['tooltip', 'brush'];
789
824
 
790
- var InteractionSchemaV0 = /*#__PURE__*/function (_Schema14) {
791
- (0, _inherits2["default"])(InteractionSchemaV0, _Schema14);
825
+ var InteractionSchemaV0 = /*#__PURE__*/function (_Schema15) {
826
+ (0, _inherits2["default"])(InteractionSchemaV0, _Schema15);
792
827
 
793
- var _super14 = _createSuper(InteractionSchemaV0);
828
+ var _super15 = _createSuper(InteractionSchemaV0);
794
829
 
795
830
  function InteractionSchemaV0() {
796
831
  var _this14;
@@ -801,7 +836,7 @@ var InteractionSchemaV0 = /*#__PURE__*/function (_Schema14) {
801
836
  args[_key11] = arguments[_key11];
802
837
  }
803
838
 
804
- _this14 = _super14.call.apply(_super14, [this].concat(args));
839
+ _this14 = _super15.call.apply(_super15, [this].concat(args));
805
840
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this14), "key", 'interactionConfig');
806
841
  return _this14;
807
842
  }
@@ -830,10 +865,10 @@ var InteractionSchemaV0 = /*#__PURE__*/function (_Schema14) {
830
865
 
831
866
  var interactionPropsV1 = [].concat(interactionPropsV0, ['geocoder', 'coordinate']);
832
867
 
833
- var InteractionSchemaV1 = /*#__PURE__*/function (_Schema15) {
834
- (0, _inherits2["default"])(InteractionSchemaV1, _Schema15);
868
+ var InteractionSchemaV1 = /*#__PURE__*/function (_Schema16) {
869
+ (0, _inherits2["default"])(InteractionSchemaV1, _Schema16);
835
870
 
836
- var _super15 = _createSuper(InteractionSchemaV1);
871
+ var _super16 = _createSuper(InteractionSchemaV1);
837
872
 
838
873
  function InteractionSchemaV1() {
839
874
  var _this15;
@@ -844,7 +879,7 @@ var InteractionSchemaV1 = /*#__PURE__*/function (_Schema15) {
844
879
  args[_key12] = arguments[_key12];
845
880
  }
846
881
 
847
- _this15 = _super15.call.apply(_super15, [this].concat(args));
882
+ _this15 = _super16.call.apply(_super16, [this].concat(args));
848
883
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this15), "key", 'interactionConfig');
849
884
  return _this15;
850
885
  }
@@ -906,14 +941,14 @@ var filterPropsV0 = {
906
941
  };
907
942
  exports.filterPropsV0 = filterPropsV0;
908
943
 
909
- var DimensionFieldSchema = /*#__PURE__*/function (_Schema16) {
910
- (0, _inherits2["default"])(DimensionFieldSchema, _Schema16);
944
+ var DimensionFieldSchema = /*#__PURE__*/function (_Schema17) {
945
+ (0, _inherits2["default"])(DimensionFieldSchema, _Schema17);
911
946
 
912
- var _super16 = _createSuper(DimensionFieldSchema);
947
+ var _super17 = _createSuper(DimensionFieldSchema);
913
948
 
914
949
  function DimensionFieldSchema() {
915
950
  (0, _classCallCheck2["default"])(this, DimensionFieldSchema);
916
- return _super16.apply(this, arguments);
951
+ return _super17.apply(this, arguments);
917
952
  }
918
953
 
919
954
  (0, _createClass2["default"])(DimensionFieldSchema, [{
@@ -932,22 +967,22 @@ var DimensionFieldSchema = /*#__PURE__*/function (_Schema16) {
932
967
 
933
968
  exports.DimensionFieldSchema = DimensionFieldSchema;
934
969
 
935
- var SplitMapsSchema = /*#__PURE__*/function (_Schema17) {
936
- (0, _inherits2["default"])(SplitMapsSchema, _Schema17);
970
+ var SplitMapsSchema = /*#__PURE__*/function (_Schema18) {
971
+ (0, _inherits2["default"])(SplitMapsSchema, _Schema18);
937
972
 
938
- var _super17 = _createSuper(SplitMapsSchema);
973
+ var _super18 = _createSuper(SplitMapsSchema);
939
974
 
940
975
  function SplitMapsSchema() {
941
976
  (0, _classCallCheck2["default"])(this, SplitMapsSchema);
942
- return _super17.apply(this, arguments);
977
+ return _super18.apply(this, arguments);
943
978
  }
944
979
 
945
980
  (0, _createClass2["default"])(SplitMapsSchema, [{
946
981
  key: "convertLayerSettings",
947
- value: function convertLayerSettings(accu, _ref18) {
948
- var _ref19 = (0, _slicedToArray2["default"])(_ref18, 2),
949
- key = _ref19[0],
950
- value = _ref19[1];
982
+ value: function convertLayerSettings(accu, _ref19) {
983
+ var _ref20 = (0, _slicedToArray2["default"])(_ref19, 2),
984
+ key = _ref20[0],
985
+ value = _ref20[1];
951
986
 
952
987
  if (typeof value === 'boolean') {
953
988
  return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, value));
@@ -1068,4 +1103,4 @@ var visStateSchema = (_visStateSchema = {}, (0, _defineProperty2["default"])(_vi
1068
1103
  exports.visStateSchema = visStateSchema;
1069
1104
  var _default = visStateSchema;
1070
1105
  exports["default"] = _default;
1071
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL3Zpcy1zdGF0ZS1zY2hlbWEuanMiXSwibmFtZXMiOlsiZGltZW5zaW9uUHJvcHNWMCIsImdlb2pzb25TaXplRmllbGRWMFRvVjEiLCJjb25maWciLCJkZWZhdWx0UmFpdWRzIiwiZGVmYXVsdFJhZGl1c1JhbmdlIiwidmlzQ29uZmlnIiwiZXh0cnVkZWQiLCJzdHJva2VkIiwicmFkaXVzIiwicmFkaXVzUmFuZ2UiLCJzb21lIiwiZCIsImkiLCJEaW1lbnNpb25GaWVsZFNjaGVtYVYwIiwiVkVSU0lPTlMiLCJ2MCIsImZpZWxkIiwia2V5Iiwic2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hIiwicGFyZW50cyIsImFjY3VtdWxhdGVkIiwic2xpY2UiLCJmaWVsZE5hbWUiLCJ0eXBlIiwidmlzdWFsQ2hhbm5lbHMiLCJTY2hlbWEiLCJEaW1lbnNpb25TY2FsZVNjaGVtYVYwIiwic2NhbGUiLCJMYXllckNvbmZpZ1NjaGVtYVYwIiwic2F2ZWQiLCJMYXllckNvbHVtbnNTY2hlbWFWMCIsImNvbHVtbnMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwiYWNjdSIsInZhbHVlIiwiTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwIiwiYWNjdW11bGF0ZWRDb25maWciLCJMYXllclZpc0NvbmZpZ1NjaGVtYVYwIiwiYWNjdW11bGF0b3IiLCJyZW5hbWUiLCJnZW9qc29uIiwiZWxldmF0aW9uUmFuZ2UiLCJwcm9wVG9SZW5hbWUiLCJMYXllckNvbmZpZ1NjaGVtYURlbGV0ZVYwIiwibGF5ZXJQcm9wc1YwIiwiaWQiLCJkYXRhSWQiLCJsYWJlbCIsImNvbG9yIiwiaXNWaXNpYmxlIiwiaGlkZGVuIiwidmlzaWJpbGl0eUJ5Wm9vbSIsImNvbG9yRmllbGQiLCJwcm9wZXJ0aWVzIiwiY29sb3JTY2FsZSIsInNpemVGaWVsZCIsInNpemVTY2FsZSIsImVuYWJsZTNkIiwiY29sb3JBZ2dyZWdhdGlvbiIsInNpemVBZ2dyZWdhdGlvbiIsImlzQWdncmVnYXRlZCIsIkNvbHVtblNjaGVtYVYxIiwic3RhdGUiLCJja2V5IiwiVGV4dExhYmVsU2NoZW1hVjEiLCJ0ZXh0TGFiZWwiLCJtYXAiLCJ0bCIsIkFycmF5IiwiaXNBcnJheSIsInZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMSIsInZjIiwibGF5ZXIiLCJpc09sZCIsImhhc093blByb3BlcnR5IiwiaXNQb2ludCIsInJhZGl1c0ZpZWxkIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJkZWZhdWx0VmFsdWUiLCJzdHJva2VDb2xvckZpZWxkIiwic3Ryb2tlQ29sb3JTY2FsZSIsIlZpc3VhbENoYW5uZWxTY2hlbWFWMSIsIm1vZGlmaWVkIiwidmlzQ29uZmlnTW9kaWZpY2F0aW9uVjEiLCJwb2ludCIsInN0cm9rZUNvbG9yIiwic3Ryb2tlQ29sb3JSYW5nZSIsImNvbG9yUmFuZ2UiLCJvdXRsaW5lIiwiZmlsbGVkIiwiVmlzQ29uZmlnU2NoZW1hVjEiLCJsYXllclByb3BzVjEiLCJ2ZXJzaW9uIiwidjEiLCJoaWdobGlnaHRDb2xvciIsIkxheWVyU2NoZW1hVjAiLCJsYXllcnMiLCJ2aXNTdGF0ZSIsImxheWVyT3JkZXIiLCJpbmRleCIsImlzVmFsaWRUb1NhdmUiLCJwdXNoIiwibG9hZFByb3BlcnRpZXNPckFwcGx5U2NoZW1hIiwiRmlsdGVyU2NoZW1hVjAiLCJmaWx0ZXJzIiwiZmlsdGVyIiwiaXNWYWxpZEZpbHRlclZhbHVlIiwiaW50ZXJhY3Rpb25Qcm9wc1YwIiwiSW50ZXJhY3Rpb25TY2hlbWFWMCIsImludGVyYWN0aW9uQ29uZmlnIiwiZW5hYmxlZCIsIkJvb2xlYW4iLCJpbnRlcmFjdGlvblByb3BzVjEiLCJJbnRlcmFjdGlvblNjaGVtYVYxIiwibW9kaWZpZWRDb25maWciLCJmb3JFYWNoIiwiY29uZmlnVHlwZSIsImZpZWxkc1RvU2hvdyIsImZpZWxkRGF0YSIsIm5hbWUiLCJmb3JtYXQiLCJmaWx0ZXJQcm9wc1YwIiwiZW5sYXJnZWQiLCJEaW1lbnNpb25GaWVsZFNjaGVtYSIsIlNwbGl0TWFwc1NjaGVtYSIsImlzQXZhaWxhYmxlIiwic3BsaXRNYXBzIiwibGVuZ3RoIiwic2V0dGluZ3MiLCJlbnRyaWVzIiwiY29udmVydExheWVyU2V0dGluZ3MiLCJmaWx0ZXJQcm9wc1YxIiwicGxvdFR5cGUiLCJhbmltYXRpb25XaW5kb3ciLCJ5QXhpcyIsImxheWVySWQiLCJzcGVlZCIsInByb3BlcnRpZXNWMCIsImxheWVyQmxlbmRpbmciLCJwcm9wZXJ0aWVzVjEiLCJhbmltYXRpb25Db25maWciLCJjdXJyZW50VGltZSIsInZpc1N0YXRlU2NoZW1hVjAiLCJ2aXNTdGF0ZVNjaGVtYVYxIiwidmlzU3RhdGVTY2hlbWEiLCJzYXZlIiwidG9TYXZlIiwibG9hZCIsInRvTG9hZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFFTyxJQUFNQSxnQkFBZ0IsR0FBRyxDQUFDLE1BQUQsRUFBUyxNQUFULENBQXpCLEMsQ0FFUDtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFDQSxTQUFTQyxzQkFBVCxDQUFnQ0MsTUFBaEMsRUFBd0M7QUFDdEMsTUFBTUMsYUFBYSxHQUFHLEVBQXRCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFELEVBQUksRUFBSixDQUEzQixDQUZzQyxDQUl0Qzs7QUFDQSxNQUFJRixNQUFNLENBQUNHLFNBQVAsQ0FBaUJDLFFBQXJCLEVBQStCO0FBQzdCLFdBQU8sYUFBUDtBQUNELEdBUHFDLENBU3RDOzs7QUFDQSxNQUFJSixNQUFNLENBQUNHLFNBQVAsQ0FBaUJFLE9BQXJCLEVBQThCO0FBQzVCLFdBQU8sV0FBUDtBQUNELEdBWnFDLENBY3RDO0FBQ0E7OztBQUNBLE1BQ0VMLE1BQU0sQ0FBQ0csU0FBUCxDQUFpQkcsTUFBakIsS0FBNEJMLGFBQTVCLElBQ0FELE1BQU0sQ0FBQ0csU0FBUCxDQUFpQkks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LEVBTGUsRUFLVmtELGdCQUxVLG1CQUFwQixDLENBUVA7OztlQUNlQyxjIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoLnBpY2snO1xuaW1wb3J0IHtWRVJTSU9OU30gZnJvbSAnLi92ZXJzaW9ucyc7XG5pbXBvcnQge2lzVmFsaWRGaWx0ZXJWYWx1ZX0gZnJvbSAndXRpbHMvZmlsdGVyLXV0aWxzJztcbmltcG9ydCB7TEFZRVJfVklTX0NPTkZJR1N9IGZyb20gJ2xheWVycy9sYXllci1mYWN0b3J5JztcbmltcG9ydCBTY2hlbWEgZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2guY2xvbmVkZWVwJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcblxuLyoqXG4gKiBWMCBTY2hlbWFcbiAqL1xuXG5leHBvcnQgY29uc3QgZGltZW5zaW9uUHJvcHNWMCA9IFsnbmFtZScsICd0eXBlJ107XG5cbi8vIGluIHYwIGdlb2pzb24gdGhlcmUgaXMgb25seSBzaXplRmllbGRcblxuLy8gaW4gdjEgZ2VvanNvblxuLy8gc3Ryb2tlIGJhc2Ugb24gLT4gc2l6ZUZpZWxkXG4vLyBoZWlnaHQgYmFzZWQgb24gLT4gaGVpZ2h0RmllbGRcbi8vIHJhZGl1cyBiYXNlZCBvbiAtPiByYWRpdXNGaWVsZFxuLy8gaGVyZSB3ZSBtYWtlIG91ciB3aXJlZHN0IGd1ZXNzIG9uIHdoaWNoIGNoYW5uZWwgc2l6ZUZpZWxkIGJlbG9uZ3MgdG9cbmZ1bmN0aW9uIGdlb2pzb25TaXplRmllbGRWMFRvVjEoY29uZmlnKSB7XG4gIGNvbnN0IGRlZmF1bHRSYWl1ZHMgPSAxMDtcbiAgY29uc3QgZGVmYXVsdFJhZGl1c1JhbmdlID0gWzAsIDUwXTtcblxuICAvLyBpZiBleHRydWRlZCwgc2l6ZUZpZWxkIGlzIG1vc3QgbGlrZWx5IHVzZWQgZm9yIGhlaWdodFxuICBpZiAoY29uZmlnLnZpc0NvbmZpZy5leHRydWRlZCkge1xuICAgIHJldHVybiAnaGVpZ2h0RmllbGQnO1xuICB9XG5cbiAgLy8gaWYgc2hvdyBzdHJva2UgZW5hYmxlZCwgc2l6ZUZpZWxkIGlzIG1vc3QgbGlrZWx5IHVzZWQgZm9yIHN0cm9rZVxuICBpZiAoY29uZmlnLnZpc0NvbmZpZy5zdHJva2VkKSB7XG4gICAgcmV0dXJuICdzaXplRmllbGQnO1xuICB9XG5cbiAgLy8gaWYgcmFkaXVzIGNoYW5nZWQsIG9yIHJhZGl1cyBSYW5nZSBDaGFuZ2VkLCBzaXplRmllbGQgaXMgbW9zdCBsaWtlbHkgdXNlZCBmb3IgcmFkaXVzXG4gIC8vIHRoaXMgaXMgdGhlIG1vc3QgdW5yZWxpYWJsZSBndWVzcywgdGhhdCdzIHdoeSB3ZSBwdXQgaXQgaW4gdGhlIGVuZFxuICBpZiAoXG4gICAgY29uZmlnLnZpc0NvbmZpZy5yYWRpdXMgIT09IGRlZmF1bHRSYWl1ZHMgfHxcbiAgICBjb25maWcudmlzQ29uZmlnLnJhZGl1c1JhbmdlLnNvbWUoKGQsIGkpID0+IGQgIT09IGRlZmF1bHRSYWRpdXNSYW5nZVtpXSlcbiAgKSB7XG4gICAgcmV0dXJuICdyYWRpdXNGaWVsZCc7XG4gIH1cblxuICByZXR1cm4gJ3NpemVGaWVsZCc7XG59XG5cbi8vIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29uZmlnXG5jbGFzcyBEaW1lbnNpb25GaWVsZFNjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBzYXZlKGZpZWxkKSB7XG4gICAgLy8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgYW55bW9yZVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBmaWVsZCAhPT0gbnVsbCA/IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpZWxkKVt0aGlzLmtleV0gOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQoZmllbGQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBsZXQgZmllbGROYW1lID0gdGhpcy5rZXk7XG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnZ2VvanNvbicgJiYgdGhpcy5rZXkgPT09ICdzaXplRmllbGQnICYmIGZpZWxkKSB7XG4gICAgICBmaWVsZE5hbWUgPSBnZW9qc29uU2l6ZUZpZWxkVjBUb1YxKGNvbmZpZyk7XG4gICAgfVxuICAgIC8vIGZvbGQgaW50byB2aXN1YWxDaGFubmVscyB0byBiZSBsb2FkIGJ5IFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICAgIHJldHVybiB7XG4gICAgICB2aXN1YWxDaGFubmVsczoge1xuICAgICAgICAuLi4oYWNjdW11bGF0ZWQudmlzdWFsQ2hhbm5lbHMgfHwge30pLFxuICAgICAgICBbZmllbGROYW1lXTogZmllbGRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIERpbWVuc2lvblNjYWxlU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIHNhdmUoc2NhbGUpIHtcbiAgICByZXR1cm4ge1t0aGlzLmtleV06IHNjYWxlfTtcbiAgfVxuICBsb2FkKHNjYWxlLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIGNvbnN0IFtjb25maWddID0gcGFyZW50cy5zbGljZSgtMSk7XG4gICAgLy8gZm9sZCBpbnRvIHZpc3VhbENoYW5uZWxzIHRvIGJlIGxvYWQgYnkgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gICAgaWYgKHRoaXMua2V5ID09PSAnc2l6ZVNjYWxlJyAmJiBjb25maWcudHlwZSA9PT0gJ2dlb2pzb24nKSB7XG4gICAgICAvLyBzaXplU2NhbGUgbm93IHNwbGl0IGludG8gcmFkaXVzU2NhbGUsIGhlaWdodFNjYWxlXG4gICAgICAvLyBubyB1c2VyIGN1c3RvbWl6YXRpb24sIGp1c3QgdXNlIGRlZmF1bHRcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmlzdWFsQ2hhbm5lbHM6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdGVkLnZpc3VhbENoYW5uZWxzIHx8IHt9KSxcbiAgICAgICAgW3RoaXMua2V5XTogc2NhbGVcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8vIHVzZWQgdG8gY29udmVydCB2MCB0byB2MSBsYXllciBjb25maWdcbmNsYXNzIExheWVyQ29uZmlnU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIGxvYWQoc2F2ZWQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgLy8gZm9sZCB2MCBsYXllciBwcm9wZXJ0eSBpbnRvIGNvbmZpZy5rZXlcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC5jb25maWcgfHwge30pLFxuICAgICAgICBbdGhpcy5rZXldOiBzYXZlZFxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLy8gdXNlZCB0byBjb252ZXJ0IHYwIHRvIHYxIGxheWVyIGNvbHVtbnNcbi8vIG9ubHkgcmV0dXJuIGNvbHVtbiB2YWx1ZSBmb3IgZWFjaCBjb2x1bW5cbmNsYXNzIExheWVyQ29sdW1uc1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHNhdmVkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIC8vIGZvbGQgdjAgbGF5ZXIgcHJvcGVydHkgaW50byBjb25maWcua2V5LCBmbGF0dGVuIGNvbHVtbnNcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC5jb25maWcgfHwge30pLFxuICAgICAgICBjb2x1bW5zOiBPYmplY3Qua2V5cyhzYXZlZCkucmVkdWNlKFxuICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgW2tleV06IHNhdmVkW2tleV0udmFsdWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fVxuICAgICAgICApXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vLyB1c2VkIHRvIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29uZmlnLnZpc0NvbmZpZ1xuY2xhc3MgTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHNhdmVkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIC8vIGZvbGQgdjAgbGF5ZXIgcHJvcGVydHkgaW50byBjb25maWcudmlzQ29uZmlnXG4gICAgY29uc3QgYWNjdW11bGF0ZWRDb25maWcgPSBhY2N1bXVsYXRlZC5jb25maWcgfHwge307XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi5hY2N1bXVsYXRlZENvbmZpZyxcbiAgICAgICAgdmlzQ29uZmlnOiB7XG4gICAgICAgICAgLi4uKGFjY3VtdWxhdGVkQ29uZmlnLnZpc0NvbmZpZyB8fCB7fSksXG4gICAgICAgICAgW3RoaXMua2V5XTogc2F2ZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTGF5ZXJWaXNDb25maWdTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAga2V5ID0gJ3Zpc0NvbmZpZyc7XG5cbiAgbG9hZCh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBjb25zdCByZW5hbWUgPSB7XG4gICAgICBnZW9qc29uOiB7XG4gICAgICAgIGV4dHJ1ZGVkOiAnZW5hYmxlM2QnLFxuICAgICAgICBlbGV2YXRpb25SYW5nZTogJ2hlaWdodFJhbmdlJ1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoY29uZmlnLnR5cGUgaW4gcmVuYW1lKSB7XG4gICAgICBjb25zdCBwcm9wVG9SZW5hbWUgPSByZW5hbWVbY29uZmlnLnR5cGVdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgICAgdmlzQ29uZmlnOiBPYmplY3Qua2V5cyh2aXNDb25maWcpLnJlZHVjZShcbiAgICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICAgIC4uLihwcm9wVG9SZW5hbWVba2V5XVxuICAgICAgICAgICAgICAgID8ge1twcm9wVG9SZW5hbWVba2V5XV06IHZpc0NvbmZpZ1trZXldfVxuICAgICAgICAgICAgICAgIDoge1trZXldOiB2aXNDb25maWdba2V5XX0pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgIHZpc0NvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTGF5ZXJDb25maWdTY2hlbWFEZWxldGVWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAgbG9hZCh2YWx1ZSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIFYwIC0+IFYxIENoYW5nZXNcbiAqIC0gbGF5ZXIgaXMgbm93IGEgY2xhc3NcbiAqIC0gY29uZmlnIHNhdmVkIGluIGEgY29uZmlnIG9iamVjdFxuICogLSBpZCwgdHlwZSwgaXNBZ2dyZWdhdGVkIGlzIG91dHNpZGUgbGF5ZXIuY29uZmlnXG4gKiAtIHZpc3VhbENoYW5uZWxzIGlzIG91dHNpZGUgY29uZmlnLCBpdCBkZWZpbmVzIGF2YWlsYWJsZSB2aXN1YWwgY2hhbm5lbCBhbmRcbiAqICAgcHJvcGVydHkgbmFtZXMgZm9yIGZpZWxkLCBzY2FsZSwgZG9tYWluIGFuZCByYW5nZSBvZiBlYWNoIHZpc3VhbCBjaGFuZWwuXG4gKiAtIGVuYWJsZTNkLCBjb2xvckFnZ3JlZ2F0aW9uIGFuZCBzaXplQWdncmVnYXRpb24gYXJlIG1vdmVkIGludG8gdmlzQ29uZmlnXG4gKiAtIEdlb2pzb25MYXllciAtIGFkZGVkIGhlaWdodCwgcmFkaXVzIHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuXG5leHBvcnQgY29uc3QgbGF5ZXJQcm9wc1YwID0ge1xuICBpZDogbnVsbCxcbiAgdHlwZTogbnVsbCxcblxuICAvLyBtb3ZlIGludG8gbGF5ZXIuY29uZmlnXG4gIGRhdGFJZDogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ2RhdGFJZCd9KSxcbiAgbGFiZWw6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdsYWJlbCd9KSxcbiAgY29sb3I6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdjb2xvcid9KSxcbiAgaXNWaXNpYmxlOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFWMCh7a2V5OiAnaXNWaXNpYmxlJ30pLFxuICBoaWRkZW46IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdoaWRkZW4nfSksXG4gIHZpc2liaWxpdHlCeVpvb206IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICd2aXNpYmlsaXR5Qnlab29tJ30pLFxuXG4gIC8vIGNvbnZlcnQgdmlzQ29uZmlnXG4gIHZpc0NvbmZpZzogbmV3IExheWVyVmlzQ29uZmlnU2NoZW1hVjAoe2tleTogJ3Zpc0NvbmZpZyd9KSxcblxuICAvLyBtb3ZlIGludG8gbGF5ZXIuY29uZmlnXG4gIC8vIGZsYXR0ZW5cbiAgY29sdW1uczogbmV3IExheWVyQ29sdW1uc1NjaGVtYVYwKCksXG5cbiAgLy8gc2F2ZSBpbnRvIHZpc3VhbENoYW5uZWxzXG4gIGNvbG9yRmllbGQ6IG5ldyBEaW1lbnNpb25GaWVsZFNjaGVtYVYwKHtcbiAgICBwcm9wZXJ0aWVzOiBkaW1lbnNpb25Qcm9wc1YwLFxuICAgIGtleTogJ2NvbG9yRmllbGQnXG4gIH0pLFxuICBjb2xvclNjYWxlOiBuZXcgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCh7XG4gICAga2V5OiAnY29sb3JTY2FsZSdcbiAgfSksXG4gIHNpemVGaWVsZDogbmV3IERpbWVuc2lvbkZpZWxkU2NoZW1hVjAoe1xuICAgIHByb3BlcnRpZXM6IGRpbWVuc2lvblByb3BzVjAsXG4gICAga2V5OiAnc2l6ZUZpZWxkJ1xuICB9KSxcbiAgc2l6ZVNjYWxlOiBuZXcgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCh7XG4gICAga2V5OiAnc2l6ZVNjYWxlJ1xuICB9KSxcblxuICAvLyBtb3ZlIGludG8gY29uZmlnLnZpc0NvbmZpZ1xuICBlbmFibGUzZDogbmV3IExheWVyQ29uZmlnVG9WaXNDb25maWdTY2hlbWFWMCh7a2V5OiAnZW5hYmxlM2QnfSksXG4gIGNvbG9yQWdncmVnYXRpb246IG5ldyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAoe1xuICAgIGtleTogJ2NvbG9yQWdncmVnYXRpb24nXG4gIH0pLFxuICBzaXplQWdncmVnYXRpb246IG5ldyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAoe2tleTogJ3NpemVBZ2dyZWdhdGlvbid9KSxcblxuICAvLyBkZWxldGVcbiAgaXNBZ2dyZWdhdGVkOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFEZWxldGVWMCgpXG59O1xuXG4vKipcbiAqIFYxIFNjaGVtYVxuICovXG5jbGFzcyBDb2x1bW5TY2hlbWFWMSBleHRlbmRzIFNjaGVtYSB7XG4gIHNhdmUoY29sdW1ucywgc3RhdGUpIHtcbiAgICAvLyBzdGFydGluZyBmcm9tIHYxLCBvbmx5IHNhdmUgY29sdW1uIHZhbHVlXG4gICAgLy8gZmllbGRJZHggd2lsbCBiZSBjYWxjdWxhdGVkIGR1cmluZyBtZXJnZVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyhjb2x1bW5zKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1LCBja2V5KSA9PiAoe1xuICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgW2NrZXldOiBjb2x1bW5zW2NrZXldLnZhbHVlXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICBsb2FkKGNvbHVtbnMpIHtcbiAgICByZXR1cm4ge2NvbHVtbnN9O1xuICB9XG59XG5cbmNsYXNzIFRleHRMYWJlbFNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZSh0ZXh0TGFiZWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogdGV4dExhYmVsLm1hcCh0bCA9PiAoe1xuICAgICAgICAuLi50bCxcbiAgICAgICAgZmllbGQ6IHRsLmZpZWxkID8gcGljayh0bC5maWVsZCwgWyduYW1lJywgJ3R5cGUnXSkgOiBudWxsXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG5cbiAgbG9hZCh0ZXh0TGFiZWwpIHtcbiAgICByZXR1cm4ge3RleHRMYWJlbDogQXJyYXkuaXNBcnJheSh0ZXh0TGFiZWwpID8gdGV4dExhYmVsIDogW3RleHRMYWJlbF19O1xuICB9XG59XG5cbmNvbnN0IHZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMSA9IHtcbiAgZ2VvanNvbjogKHZjLCBwYXJlbnRzLCBhY2N1bXVsYXRvcikgPT4ge1xuICAgIGNvbnN0IFtsYXllcl0gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBjb25zdCBpc09sZCA9ICF2Yy5oYXNPd25Qcm9wZXJ0eSgnc3Ryb2tlQ29sb3JGaWVsZCcpO1xuICAgIC8vIG1ha2Ugb3VyIGJlc3QgZ3Vlc3MgaWYgdGhpcyBnZW9qc29uIGxheWVyIGNvbnRhaW5zIHBvaW50XG4gICAgY29uc3QgaXNQb2ludCA9XG4gICAgICB2Yy5yYWRpdXNGaWVsZCB8fCBsYXllci5jb25maWcudmlzQ29uZmlnLnJhZGl1cyAhPT0gTEFZRVJfVklTX0NPTkZJR1MucmFkaXVzLmRlZmF1bHRWYWx1ZTtcblxuICAgIGlmIChpc09sZCAmJiAhaXNQb2ludCAmJiBsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZWQpIHtcbiAgICAgIC8vIGlmIHN0cm9rZWQgaXMgdHJ1ZSwgY29weSBjb2xvciBjb25maWcgdG8gc3Ryb2tlIGNvbG9yIGNvbmZpZ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3Ryb2tlQ29sb3JGaWVsZDogdmMuY29sb3JGaWVsZCxcbiAgICAgICAgc3Ryb2tlQ29sb3JTY2FsZTogdmMuY29sb3JTY2FsZVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuLyoqXG4gKiBWMTogc2F2ZSBbZmllbGRdOiB7bmFtZSwgdHlwZX0sIFtzY2FsZV06ICcnIGZvciBlYWNoIGNoYW5uZWxcbiAqL1xuY2xhc3MgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZSh2aXN1YWxDaGFubmVscywgcGFyZW50cykge1xuICAgIC8vIG9ubHkgc2F2ZSBmaWVsZCBhbmQgc2NhbGUgb2YgZWFjaCBjaGFubmVsXG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyh2aXN1YWxDaGFubmVscykucmVkdWNlKFxuICAgICAgICAvLyAgc2F2ZSBjaGFubmVsIHRvIG51bGwgaWYgZGlkbid0IHNlbGVjdCBhbnkgZmllbGRcbiAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgIFt2aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXTogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdXG4gICAgICAgICAgICA/IHBpY2sobGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdLCBbJ25hbWUnLCAndHlwZScsICdjb2xvckNvbHVtbiddKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIFt2aXN1YWxDaGFubmVsc1trZXldLnNjYWxlXTogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uc2NhbGVdXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cbiAgbG9hZCh2YywgcGFyZW50cywgYWNjdW11bGF0b3IpIHtcbiAgICAvLyBmb2xkIGNoYW5uZWxzIGludG8gY29uZmlnXG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIGNvbnN0IG1vZGlmaWVkID0gdmlzdWFsQ2hhbm5lbE1vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdXG4gICAgICA/IHZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMVtsYXllci50eXBlXSh2YywgcGFyZW50cywgYWNjdW11bGF0b3IpXG4gICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjY3VtdWxhdG9yLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRvci5jb25maWcgfHwge30pLFxuICAgICAgICAuLi52YyxcbiAgICAgICAgLi4ubW9kaWZpZWRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5jb25zdCB2aXNDb25maWdNb2RpZmljYXRpb25WMSA9IHtcbiAgcG9pbnQ6ICh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSA9PiB7XG4gICAgY29uc3QgbW9kaWZpZWQgPSB7fTtcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMiwgLTEpO1xuICAgIGNvbnN0IGlzT2xkID1cbiAgICAgICF2aXNDb25maWcuaGFzT3duUHJvcGVydHkoJ2ZpbGxlZCcpICYmICF2aXNDb25maWcuc3Ryb2tlQ29sb3IgJiYgIXZpc0NvbmZpZy5zdHJva2VDb2xvclJhbmdlO1xuICAgIGlmIChpc09sZCkge1xuICAgICAgLy8gY29sb3IgY29sb3IgJiBjb2xvciByYW5nZSB0byBzdHJva2UgY29sb3JcbiAgICAgIG1vZGlmaWVkLnN0cm9rZUNvbG9yID0gbGF5ZXIuY29uZmlnLmNvbG9yO1xuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3JSYW5nZSA9IGNsb25lRGVlcCh2aXNDb25maWcuY29sb3JSYW5nZSk7XG4gICAgICBpZiAodmlzQ29uZmlnLm91dGxpbmUpIHtcbiAgICAgICAgLy8gcG9pbnQgbGF5ZXIgbm93IHN1cHBvcnRzIGJvdGggb3V0bGluZSBhbmQgZmlsbFxuICAgICAgICAvLyBmb3Igb2xkZXIgc2NoZW1hIHdoZXJlIGZpbGxlZCBoYXMgbm90IGJlZW4gYWRkZWQgdG8gcG9pbnQgbGF5ZXJcbiAgICAgICAgLy8gc2V0IGl0IHRvIGZhbHNlXG4gICAgICAgIG1vZGlmaWVkLmZpbGxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2RpZmllZDtcbiAgfSxcbiAgZ2VvanNvbjogKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpID0+IHtcbiAgICAvLyBpcyBwb2ludHM/XG4gICAgY29uc3QgbW9kaWZpZWQgPSB7fTtcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMiwgLTEpO1xuICAgIGNvbnN0IGlzT2xkID1cbiAgICAgIGxheWVyLnZpc3VhbENoYW5uZWxzICYmXG4gICAgICAhbGF5ZXIudmlzdWFsQ2hhbm5lbHMuaGFzT3duUHJvcGVydHkoJ3N0cm9rZUNvbG9yRmllbGQnKSAmJlxuICAgICAgIXZpc0NvbmZpZy5zdHJva2VDb2xvciAmJlxuICAgICAgIXZpc0NvbmZpZy5zdHJva2VDb2xvclJhbmdlO1xuICAgIC8vIG1ha2Ugb3VyIGJlc3QgZ3Vlc3MgaWYgdGhpcyBnZW9qc29uIGxheWVyIGNvbnRhaW5zIHBvaW50XG4gICAgY29uc3QgaXNQb2ludCA9XG4gICAgICAobGF5ZXIudmlzdWFsQ2hhbm5lbHMgJiYgbGF5ZXIudmlzdWFsQ2hhbm5lbHMucmFkaXVzRmllbGQpIHx8XG4gICAgICAodmlzQ29uZmlnICYmIHZpc0NvbmZpZy5yYWRpdXMgIT09IExBWUVSX1ZJU19DT05GSUdTLnJhZGl1cy5kZWZhdWx0VmFsdWUpO1xuXG4gICAgaWYgKGlzT2xkKSB7XG4gICAgICAvLyBjb2xvciBjb2xvciAmIGNvbG9yIHJhbmdlIHRvIHN0cm9rZSBjb2xvclxuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3IgPSBsYXllci5jb25maWcuY29sb3I7XG4gICAgICBtb2RpZmllZC5zdHJva2VDb2xvclJhbmdlID0gY2xvbmVEZWVwKHZpc0NvbmZpZy5jb2xvclJhbmdlKTtcbiAgICAgIGlmIChpc1BvaW50KSB7XG4gICAgICAgIC8vIGlmIGlzIHBvaW50LCBzZXQgc3Ryb2tlIHRvIGZhbHNlXG4gICAgICAgIG1vZGlmaWVkLmZpbGxlZCA9IHRydWU7XG4gICAgICAgIG1vZGlmaWVkLnN0cm9rZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kaWZpZWQ7XG4gIH1cbn07XG5cbmNsYXNzIFZpc0NvbmZpZ1NjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ3Zpc0NvbmZpZyc7XG5cbiAgbG9hZCh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTIsIC0xKTtcbiAgICBjb25zdCBtb2RpZmllZCA9IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdXG4gICAgICA/IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpXG4gICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc0NvbmZpZzoge1xuICAgICAgICAuLi52aXNDb25maWcsXG4gICAgICAgIC4uLm1vZGlmaWVkXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbGF5ZXJQcm9wc1YxID0ge1xuICBpZDogbnVsbCxcbiAgdHlwZTogbnVsbCxcbiAgY29uZmlnOiBuZXcgU2NoZW1hKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBrZXk6ICdjb25maWcnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGRhdGFJZDogbnVsbCxcbiAgICAgIGxhYmVsOiBudWxsLFxuICAgICAgY29sb3I6IG51bGwsXG4gICAgICBoaWdobGlnaHRDb2xvcjogbnVsbCxcbiAgICAgIGNvbHVtbnM6IG5ldyBDb2x1bW5TY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgICAgICBrZXk6ICdjb2x1bW5zJ1xuICAgICAgfSksXG4gICAgICBpc1Zpc2libGU6IG51bGwsXG4gICAgICB2aXNDb25maWc6IG5ldyBWaXNDb25maWdTY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxXG4gICAgICB9KSxcbiAgICAgIGhpZGRlbjogbnVsbCxcbiAgICAgIHZpc2liaWxpdHlCeVpvb206IG51bGwsXG4gICAgICB0ZXh0TGFiZWw6IG5ldyBUZXh0TGFiZWxTY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgICAgICBrZXk6ICd0ZXh0TGFiZWwnXG4gICAgICB9KVxuICAgIH1cbiAgfSksXG4gIHZpc3VhbENoYW5uZWxzOiBuZXcgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBrZXk6ICd2aXN1YWxDaGFubmVscydcbiAgfSlcbn07XG5cbmV4cG9ydCBjbGFzcyBMYXllclNjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ2xheWVycyc7XG5cbiAgc2F2ZShsYXllcnMsIHBhcmVudHMpIHtcbiAgICBjb25zdCBbdmlzU3RhdGVdID0gcGFyZW50cy5zbGljZSgtMSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogdmlzU3RhdGUubGF5ZXJPcmRlci5yZWR1Y2UoKHNhdmVkLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyBzYXZlIGxheWVycyBhY2NvcmRpbmcgdG8gdGhlaXIgcmVuZGVyaW5nIG9yZGVyXG4gICAgICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW2luZGV4XTtcbiAgICAgICAgaWYgKGxheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgICAgIHNhdmVkLnB1c2godGhpcy5zYXZlUHJvcGVydGllc09yQXBwbHlTY2hlbWEobGF5ZXIpLmxheWVycyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNhdmVkO1xuICAgICAgfSwgW10pXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQobGF5ZXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IGxheWVycy5tYXAobGF5ZXIgPT4gdGhpcy5sb2FkUHJvcGVydGllc09yQXBwbHlTY2hlbWEobGF5ZXIsIGxheWVycykubGF5ZXJzKVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpbHRlclNjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ2ZpbHRlcnMnO1xuICBzYXZlKGZpbHRlcnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsdGVyczogZmlsdGVyc1xuICAgICAgICAuZmlsdGVyKGlzVmFsaWRGaWx0ZXJWYWx1ZSlcbiAgICAgICAgLm1hcChmaWx0ZXIgPT4gdGhpcy5zYXZlUHJvcGVydGllc09yQXBwbHlTY2hlbWEoZmlsdGVyKS5maWx0ZXJzKVxuICAgIH07XG4gIH1cbiAgbG9hZChmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHtmaWx0ZXJzfTtcbiAgfVxufVxuXG5jb25zdCBpbnRlcmFjdGlvblByb3BzVjAgPSBbJ3Rvb2x0aXAnLCAnYnJ1c2gnXTtcblxuY2xhc3MgSW50ZXJhY3Rpb25TY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdpbnRlcmFjdGlvbkNvbmZpZyc7XG5cbiAgc2F2ZShpbnRlcmFjdGlvbkNvbmZpZykge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvcGVydGllcylcbiAgICAgID8ge1xuICAgICAgICAgIFt0aGlzLmtleV06IHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICAuLi4oaW50ZXJhY3Rpb25Db25maWdba2V5XS5lbmFibGVkID8ge1trZXldOiBpbnRlcmFjdGlvbkNvbmZpZ1trZXldLmNvbmZpZ30gOiB7fSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIH1cbiAgbG9hZChpbnRlcmFjdGlvbkNvbmZpZykge1xuICAgIC8vIGNvbnZlcnQgdjAgLT4gdjFcbiAgICAvLyByZXR1cm4gZW5hYmxlZDogZmFsc2UgaWYgZGlzYWJsZWQsXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5wcm9wZXJ0aWVzKVxuICAgICAgPyB7XG4gICAgICAgICAgW3RoaXMua2V5XTogdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZShcbiAgICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICAgIC4uLntcbiAgICAgICAgICAgICAgICBba2V5XToge1xuICAgICAgICAgICAgICAgICAgLi4uKGludGVyYWN0aW9uQ29uZmlnW2tleV0gfHwge30pLFxuICAgICAgICAgICAgICAgICAgZW5hYmxlZDogQm9vbGVhbihpbnRlcmFjdGlvbkNvbmZpZ1trZXldKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgOiB7fTtcbiAgfVxufVxuXG5jb25zdCBpbnRlcmFjdGlvblByb3BzVjEgPSBbLi4uaW50ZXJhY3Rpb25Qcm9wc1YwLCAnZ2VvY29kZXInLCAnY29vcmRpbmF0ZSddO1xuXG5leHBvcnQgY2xhc3MgSW50ZXJhY3Rpb25TY2hlbWFWMSBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdpbnRlcmFjdGlvbkNvbmZpZyc7XG5cbiAgc2F2ZShpbnRlcmFjdGlvbkNvbmZpZykge1xuICAgIC8vIHNhdmUgY29uZmlnIGV2ZW4gaWYgZGlzYWJsZWQsXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5wcm9wZXJ0aWVzKVxuICAgICAgPyB7XG4gICAgICAgICAgW3RoaXMua2V5XTogdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZShcbiAgICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICAgIFtrZXldOiB7XG4gICAgICAgICAgICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWcsXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogaW50ZXJhY3Rpb25Db25maWdba2V5XS5lbmFibGVkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIH1cbiAgbG9hZChpbnRlcmFjdGlvbkNvbmZpZykge1xuICAgIGNvbnN0IG1vZGlmaWVkQ29uZmlnID0gaW50ZXJhY3Rpb25Db25maWc7XG4gICAgT2JqZWN0LmtleXMoaW50ZXJhY3Rpb25Db25maWcpLmZvckVhY2goY29uZmlnVHlwZSA9PiB7XG4gICAgICBpZiAoY29uZmlnVHlwZSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkc1RvU2hvdyA9IG1vZGlmaWVkQ29uZmlnW2NvbmZpZ1R5cGVdLmZpZWxkc1RvU2hvdztcbiAgICAgICAgaWYgKCFub3ROdWxsb3JVbmRlZmluZWQoZmllbGRzVG9TaG93KSkge1xuICAgICAgICAgIHJldHVybiB7W3RoaXMua2V5XTogbW9kaWZpZWRDb25maWd9O1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5rZXlzKGZpZWxkc1RvU2hvdykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZpZWxkc1RvU2hvd1trZXldID0gZmllbGRzVG9TaG93W2tleV0ubWFwKGZpZWxkRGF0YSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZpZWxkRGF0YS5uYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogZmllbGREYXRhLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogbnVsbFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkRGF0YTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gICAgcmV0dXJuIHtbdGhpcy5rZXldOiBtb2RpZmllZENvbmZpZ307XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZpbHRlclByb3BzVjAgPSB7XG4gIGRhdGFJZDogbnVsbCxcbiAgaWQ6IG51bGwsXG4gIG5hbWU6IG51bGwsXG4gIHR5cGU6IG51bGwsXG4gIHZhbHVlOiBudWxsLFxuICBlbmxhcmdlZDogbnVsbFxufTtcblxuZXhwb3J0IGNsYXNzIERpbWVuc2lvbkZpZWxkU2NoZW1hIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZShmaWVsZCkge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBmaWVsZCA/IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpZWxkKVt0aGlzLmtleV0gOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQoZmllbGQpIHtcbiAgICByZXR1cm4ge1t0aGlzLmtleV06IGZpZWxkfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3BsaXRNYXBzU2NoZW1hIGV4dGVuZHMgU2NoZW1hIHtcbiAgY29udmVydExheWVyU2V0dGluZ3MoYWNjdSwgW2tleSwgdmFsdWVdKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogQm9vbGVhbih2YWx1ZS5pc1Zpc2libGUpXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gYWNjdTtcbiAgfVxuXG4gIGxvYWQoc3BsaXRNYXBzKSB7XG4gICAgLy8gcHJldmlvdXMgc3BsaXRNYXBzIFNjaGVtYSB7bGF5ZXJzOiB7bGF5ZXJJZDoge2lzVmlzaWJsZSwgaXNBdmFpbGFibGV9fX1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShzcGxpdE1hcHMpIHx8ICFzcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge3NwbGl0TWFwczogW119O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4gKHtcbiAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgIGxheWVyczogT2JqZWN0LmVudHJpZXMoc2V0dGluZ3MubGF5ZXJzIHx8IHt9KS5yZWR1Y2UodGhpcy5jb252ZXJ0TGF5ZXJTZXR0aW5ncywge30pXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJQcm9wc1YxID0ge1xuICAuLi5maWx0ZXJQcm9wc1YwLFxuICBwbG90VHlwZTogbnVsbCxcbiAgYW5pbWF0aW9uV2luZG93OiBudWxsLFxuICB5QXhpczogbmV3IERpbWVuc2lvbkZpZWxkU2NoZW1hKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBrZXk6ICd5QXhpcycsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgbmFtZTogbnVsbCxcbiAgICAgIHR5cGU6IG51bGxcbiAgICB9XG4gIH0pLFxuXG4gIC8vIHBvbHlnb24gZmlsdGVyIHByb3BlcnRpZXNcbiAgbGF5ZXJJZDogbnVsbCxcbiAgc3BlZWQ6IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9wZXJ0aWVzVjAgPSB7XG4gIGZpbHRlcnM6IG5ldyBGaWx0ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjAsXG4gICAgcHJvcGVydGllczogZmlsdGVyUHJvcHNWMFxuICB9KSxcbiAgbGF5ZXJzOiBuZXcgTGF5ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjAsXG4gICAgcHJvcGVydGllczogbGF5ZXJQcm9wc1YwXG4gIH0pLFxuICBpbnRlcmFjdGlvbkNvbmZpZzogbmV3IEludGVyYWN0aW9uU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICAgIHByb3BlcnRpZXM6IGludGVyYWN0aW9uUHJvcHNWMFxuICB9KSxcbiAgbGF5ZXJCbGVuZGluZzogbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IHByb3BlcnRpZXNWMSA9IHtcbiAgZmlsdGVyczogbmV3IEZpbHRlclNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBwcm9wZXJ0aWVzOiBmaWx0ZXJQcm9wc1YxXG4gIH0pLFxuICBsYXllcnM6IG5ldyBMYXllclNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBwcm9wZXJ0aWVzOiBsYXllclByb3BzVjFcbiAgfSksXG4gIGludGVyYWN0aW9uQ29uZmlnOiBuZXcgSW50ZXJhY3Rpb25TY2hlbWFWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczogaW50ZXJhY3Rpb25Qcm9wc1YxXG4gIH0pLFxuICBsYXllckJsZW5kaW5nOiBudWxsLFxuICBzcGxpdE1hcHM6IG5ldyBTcGxpdE1hcHNTY2hlbWEoe1xuICAgIGtleTogJ3NwbGl0TWFwcycsXG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjFcbiAgfSksXG4gIGFuaW1hdGlvbkNvbmZpZzogbmV3IFNjaGVtYSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgY3VycmVudFRpbWU6IG51bGwsXG4gICAgICBzcGVlZDogbnVsbFxuICAgIH0sXG4gICAga2V5OiAnYW5pbWF0aW9uQ29uZmlnJ1xuICB9KVxufTtcblxuZXhwb3J0IGNvbnN0IHZpc1N0YXRlU2NoZW1hVjAgPSBuZXcgU2NoZW1hKHtcbiAgdmVyc2lvbjogVkVSU0lPTlMudjAsXG4gIHByb3BlcnRpZXM6IHByb3BlcnRpZXNWMCxcbiAga2V5OiAndmlzU3RhdGUnXG59KTtcblxuZXhwb3J0IGNvbnN0IHZpc1N0YXRlU2NoZW1hVjEgPSBuZXcgU2NoZW1hKHtcbiAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gIHByb3BlcnRpZXM6IHByb3BlcnRpZXNWMSxcbiAga2V5OiAndmlzU3RhdGUnXG59KTtcblxuZXhwb3J0IGNvbnN0IHZpc1N0YXRlU2NoZW1hID0ge1xuICBbVkVSU0lPTlMudjBdOiB7XG4gICAgc2F2ZTogdG9TYXZlID0+IHZpc1N0YXRlU2NoZW1hVjAuc2F2ZSh0b1NhdmUpLFxuICAgIGxvYWQ6IHRvTG9hZCA9PiB2aXNTdGF0ZVNjaGVtYVYxLmxvYWQodmlzU3RhdGVTY2hlbWFWMC5sb2FkKHRvTG9hZCkudmlzU3RhdGUpXG4gIH0sXG4gIFtWRVJTSU9OUy52MV06IHZpc1N0YXRlU2NoZW1hVjFcbn07XG5cbi8vIHRlc3QgbG9hZCB2MFxuZXhwb3J0IGRlZmF1bHQgdmlzU3RhdGVTY2hlbWE7XG4iXX0=
1106
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL3Zpcy1zdGF0ZS1zY2hlbWEuanMiXSwibmFtZXMiOlsiZGltZW5zaW9uUHJvcHNWMCIsImdlb2pzb25TaXplRmllbGRWMFRvVjEiLCJjb25maWciLCJkZWZhdWx0UmFpdWRzIiwiZGVmYXVsdFJhZGl1c1JhbmdlIiwidmlzQ29uZmlnIiwiZXh0cnVkZWQiLCJzdHJva2VkIiwicmFkaXVzIiwicmFkaXVzUmFuZ2UiLCJzb21lIiwiZCIsImkiLCJEaW1lbnNpb25GaWVsZFNjaGVtYVYwIiwiVkVSU0lPTlMiLCJ2MCIsImZpZWxkIiwia2V5Iiwic2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hIiwicGFyZW50cyIsImFjY3VtdWxhdGVkIiwic2xpY2UiLCJmaWVsZE5hbWUiLCJ0eXBlIiwidmlzdWFsQ2hhbm5lbHMiLCJTY2hlbWEiLCJEaW1lbnNpb25TY2FsZVNjaGVtYVYwIiwic2NhbGUiLCJMYXllckNvbmZpZ1NjaGVtYVYwIiwic2F2ZWQiLCJMYXllckNvbHVtbnNTY2hlbWFWMCIsImNvbHVtbnMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwiYWNjdSIsInZhbHVlIiwiTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwIiwiYWNjdW11bGF0ZWRDb25maWciLCJMYXllclZpc0NvbmZpZ1NjaGVtYVYwIiwiYWNjdW11bGF0b3IiLCJyZW5hbWUiLCJnZW9qc29uIiwiZWxldmF0aW9uUmFuZ2UiLCJwcm9wVG9SZW5hbWUiLCJMYXllckNvbmZpZ1NjaGVtYURlbGV0ZVYwIiwibGF5ZXJQcm9wc1YwIiwiaWQiLCJkYXRhSWQiLCJsYWJlbCIsImNvbG9yIiwiaXNWaXNpYmxlIiwiaGlkZGVuIiwidmlzaWJpbGl0eUJ5Wm9vbSIsImNvbG9yRmllbGQiLCJwcm9wZXJ0aWVzIiwiY29sb3JTY2FsZSIsInNpemVGaWVsZCIsInNpemVTY2FsZSIsImVuYWJsZTNkIiwiY29sb3JBZ2dyZWdhdGlvbiIsInNpemVBZ2dyZWdhdGlvbiIsImlzQWdncmVnYXRlZCIsIkNvbHVtblNjaGVtYVYxIiwic3RhdGUiLCJja2V5IiwiVGV4dExhYmVsU2NoZW1hVjEiLCJ0ZXh0TGFiZWwiLCJtYXAiLCJ0bCIsIkFycmF5IiwiaXNBcnJheSIsInZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMSIsInZjIiwibGF5ZXIiLCJpc09sZCIsImhhc093blByb3BlcnR5IiwiaXNQb2ludCIsInJhZGl1c0ZpZWxkIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJkZWZhdWx0VmFsdWUiLCJzdHJva2VDb2xvckZpZWxkIiwic3Ryb2tlQ29sb3JTY2FsZSIsIlZpc3VhbENoYW5uZWxTY2hlbWFWMSIsIm1vZGlmaWVkIiwiTGVnZW5kU2V0dGluZ3NWMSIsImxlZ2VuZFNldHRpbmdzIiwibHMiLCJ2aXNDb25maWdNb2RpZmljYXRpb25WMSIsInBvaW50Iiwic3Ryb2tlQ29sb3IiLCJzdHJva2VDb2xvclJhbmdlIiwiY29sb3JSYW5nZSIsIm91dGxpbmUiLCJmaWxsZWQiLCJWaXNDb25maWdTY2hlbWFWMSIsImxheWVyUHJvcHNWMSIsInZlcnNpb24iLCJ2MSIsImhpZ2hsaWdodENvbG9yIiwiTGF5ZXJTY2hlbWFWMCIsImxheWVycyIsInZpc1N0YXRlIiwibGF5ZXJPcmRlciIsImluZGV4IiwiaXNWYWxpZFRvU2F2ZSIsInB1c2giLCJsb2FkUHJvcGVydGllc09yQXBwbHlTY2hlbWEiLCJGaWx0ZXJTY2hlbWFWMCIsImZpbHRlcnMiLCJmaWx0ZXIiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJpbnRlcmFjdGlvblByb3BzVjAiLCJJbnRlcmFjdGlvblNjaGVtYVYwIiwiaW50ZXJhY3Rpb25Db25maWciLCJlbmFibGVkIiwiQm9vbGVhbiIsImludGVyYWN0aW9uUHJvcHNWMSIsIkludGVyYWN0aW9uU2NoZW1hVjEiLCJtb2RpZmllZENvbmZpZyIsImZvckVhY2giLCJjb25maWdUeXBlIiwiZmllbGRzVG9TaG93IiwiZmllbGREYXRhIiwibmFtZSIsImZvcm1hdCIsImZpbHRlclByb3BzVjAiLCJlbmxhcmdlZCIsIkRpbWVuc2lvbkZpZWxkU2NoZW1hIiwiU3BsaXRNYXBzU2NoZW1hIiwiaXNBdmFpbGFibGUiLCJzcGxpdE1hcHMiLCJsZW5ndGgiLCJzZXR0aW5ncyIsImVudHJpZXMiLCJjb252ZXJ0TGF5ZXJTZXR0aW5ncyIsImZpbHRlclByb3BzVjEiLCJwbG90VHlwZSIsImFuaW1hdGlvbldpbmRvdyIsInlBeGlzIiwibGF5ZXJJZCIsInNwZWVkIiwicHJvcGVydGllc1YwIiwibGF5ZXJCbGVuZGluZyIsInByb3BlcnRpZXNWMSIsImFuaW1hdGlvbkNvbmZpZyIsImN1cnJlbnRUaW1lIiwidmlzU3RhdGVTY2hlbWFWMCIsInZpc1N0YXRlU2NoZW1hVjEiLCJ2aXNTdGF0ZVNjaGVtYSIsInNhdmUiLCJ0b1NhdmUiLCJsb2FkIiwidG9Mb2FkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUVPLElBQU1BLGdCQUFnQixHQUFHLENBQUMsTUFBRCxFQUFTLE1BQVQsQ0FBekIsQyxDQUVQO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUNBLFNBQVNDLHNCQUFULENBQWdDQyxNQUFoQyxFQUF3QztBQUN0QyxNQUFNQyxhQUFhLEdBQUcsRUFBdEI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxDQUFDLENBQUQsRUFBSSxFQUFKLENBQTNCLENBRnNDLENBSXRDOztBQUNBLE1BQUlGLE1BQU0sQ0FBQ0csU0FBUCxDQUFpQkMsUUFBckIsRUFBK0I7QUFDN0IsV0FBTyxhQUFQO0FBQ0QsR0FQcUMsQ0FTdEM7OztBQUNBLE1BQUlKLE1BQU0sQ0FBQ0csU0FBUCxDQUFpQkUsT0FBckIsRUFBOEI7QUFDNUIsV0FBTyxXQUFQO0FBQ0QsR0FacUMsQ0FjdEM7QUFDQTs7O0FBQ0EsTUFDRUwsTUFBTSxDQUFDRyxTQUFQLENBQWlCRyxNQUFqQixL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R0FBRyxJQUFJMUgsa0JBQUosQ0FBVztBQUN6Q3dFLEVBQUFBLE9BQU8sRUFBRW5GLG1CQUFTQyxFQUR1QjtBQUV6Q3dDLEVBQUFBLFVBQVUsRUFBRXVGLFlBRjZCO0FBR3pDN0gsRUFBQUEsR0FBRyxFQUFFO0FBSG9DLENBQVgsQ0FBekI7O0FBTUEsSUFBTW1JLGdCQUFnQixHQUFHLElBQUkzSCxrQkFBSixDQUFXO0FBQ3pDd0UsRUFBQUEsT0FBTyxFQUFFbkYsbUJBQVNvRixFQUR1QjtBQUV6QzNDLEVBQUFBLFVBQVUsRUFBRXlGLFlBRjZCO0FBR3pDL0gsRUFBQUEsR0FBRyxFQUFFO0FBSG9DLENBQVgsQ0FBekI7O0FBTUEsSUFBTW9JLGNBQWMsNEVBQ3hCdkksbUJBQVNDLEVBRGUsRUFDVjtBQUNidUksRUFBQUEsSUFBSSxFQUFFLGNBQUFDLE1BQU07QUFBQSxXQUFJSixnQkFBZ0IsQ0FBQ0csSUFBakIsQ0FBc0JDLE1BQXRCLENBQUo7QUFBQSxHQURDO0FBRWJDLEVBQUFBLElBQUksRUFBRSxjQUFBQyxNQUFNO0FBQUEsV0FBSUwsZ0JBQWdCLENBQUNJLElBQWpCLENBQXNCTCxnQkFBZ0IsQ0FBQ0ssSUFBakIsQ0FBc0JDLE1BQXRCLEVBQThCbkQsUUFBcEQsQ0FBSjtBQUFBO0FBRkMsQ0FEVSxxREFLeEJ4RixtQkFBU29GLEVBTGUsRUFLVmtELGdCQUxVLG1CQUFwQixDLENBUVA7OztlQUNlQyxjIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoLnBpY2snO1xuaW1wb3J0IHtWRVJTSU9OU30gZnJvbSAnLi92ZXJzaW9ucyc7XG5pbXBvcnQge2lzVmFsaWRGaWx0ZXJWYWx1ZX0gZnJvbSAndXRpbHMvZmlsdGVyLXV0aWxzJztcbmltcG9ydCB7TEFZRVJfVklTX0NPTkZJR1N9IGZyb20gJ2xheWVycy9sYXllci1mYWN0b3J5JztcbmltcG9ydCBTY2hlbWEgZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2guY2xvbmVkZWVwJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcblxuLyoqXG4gKiBWMCBTY2hlbWFcbiAqL1xuXG5leHBvcnQgY29uc3QgZGltZW5zaW9uUHJvcHNWMCA9IFsnbmFtZScsICd0eXBlJ107XG5cbi8vIGluIHYwIGdlb2pzb24gdGhlcmUgaXMgb25seSBzaXplRmllbGRcblxuLy8gaW4gdjEgZ2VvanNvblxuLy8gc3Ryb2tlIGJhc2Ugb24gLT4gc2l6ZUZpZWxkXG4vLyBoZWlnaHQgYmFzZWQgb24gLT4gaGVpZ2h0RmllbGRcbi8vIHJhZGl1cyBiYXNlZCBvbiAtPiByYWRpdXNGaWVsZFxuLy8gaGVyZSB3ZSBtYWtlIG91ciB3aXJlZHN0IGd1ZXNzIG9uIHdoaWNoIGNoYW5uZWwgc2l6ZUZpZWxkIGJlbG9uZ3MgdG9cbmZ1bmN0aW9uIGdlb2pzb25TaXplRmllbGRWMFRvVjEoY29uZmlnKSB7XG4gIGNvbnN0IGRlZmF1bHRSYWl1ZHMgPSAxMDtcbiAgY29uc3QgZGVmYXVsdFJhZGl1c1JhbmdlID0gWzAsIDUwXTtcblxuICAvLyBpZiBleHRydWRlZCwgc2l6ZUZpZWxkIGlzIG1vc3QgbGlrZWx5IHVzZWQgZm9yIGhlaWdodFxuICBpZiAoY29uZmlnLnZpc0NvbmZpZy5leHRydWRlZCkge1xuICAgIHJldHVybiAnaGVpZ2h0RmllbGQnO1xuICB9XG5cbiAgLy8gaWYgc2hvdyBzdHJva2UgZW5hYmxlZCwgc2l6ZUZpZWxkIGlzIG1vc3QgbGlrZWx5IHVzZWQgZm9yIHN0cm9rZVxuICBpZiAoY29uZmlnLnZpc0NvbmZpZy5zdHJva2VkKSB7XG4gICAgcmV0dXJuICdzaXplRmllbGQnO1xuICB9XG5cbiAgLy8gaWYgcmFkaXVzIGNoYW5nZWQsIG9yIHJhZGl1cyBSYW5nZSBDaGFuZ2VkLCBzaXplRmllbGQgaXMgbW9zdCBsaWtlbHkgdXNlZCBmb3IgcmFkaXVzXG4gIC8vIHRoaXMgaXMgdGhlIG1vc3QgdW5yZWxpYWJsZSBndWVzcywgdGhhdCdzIHdoeSB3ZSBwdXQgaXQgaW4gdGhlIGVuZFxuICBpZiAoXG4gICAgY29uZmlnLnZpc0NvbmZpZy5yYWRpdXMgIT09IGRlZmF1bHRSYWl1ZHMgfHxcbiAgICBjb25maWcudmlzQ29uZmlnLnJhZGl1c1JhbmdlLnNvbWUoKGQsIGkpID0+IGQgIT09IGRlZmF1bHRSYWRpdXNSYW5nZVtpXSlcbiAgKSB7XG4gICAgcmV0dXJuICdyYWRpdXNGaWVsZCc7XG4gIH1cblxuICByZXR1cm4gJ3NpemVGaWVsZCc7XG59XG5cbi8vIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29uZmlnXG5jbGFzcyBEaW1lbnNpb25GaWVsZFNjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBzYXZlKGZpZWxkKSB7XG4gICAgLy8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgYW55bW9yZVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBmaWVsZCAhPT0gbnVsbCA/IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpZWxkKVt0aGlzLmtleV0gOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQoZmllbGQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBsZXQgZmllbGROYW1lID0gdGhpcy5rZXk7XG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnZ2VvanNvbicgJiYgdGhpcy5rZXkgPT09ICdzaXplRmllbGQnICYmIGZpZWxkKSB7XG4gICAgICBmaWVsZE5hbWUgPSBnZW9qc29uU2l6ZUZpZWxkVjBUb1YxKGNvbmZpZyk7XG4gICAgfVxuICAgIC8vIGZvbGQgaW50byB2aXN1YWxDaGFubmVscyB0byBiZSBsb2FkIGJ5IFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICAgIHJldHVybiB7XG4gICAgICB2aXN1YWxDaGFubmVsczoge1xuICAgICAgICAuLi4oYWNjdW11bGF0ZWQudmlzdWFsQ2hhbm5lbHMgfHwge30pLFxuICAgICAgICBbZmllbGROYW1lXTogZmllbGRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIERpbWVuc2lvblNjYWxlU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIHNhdmUoc2NhbGUpIHtcbiAgICByZXR1cm4ge1t0aGlzLmtleV06IHNjYWxlfTtcbiAgfVxuICBsb2FkKHNjYWxlLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIGNvbnN0IFtjb25maWddID0gcGFyZW50cy5zbGljZSgtMSk7XG4gICAgLy8gZm9sZCBpbnRvIHZpc3VhbENoYW5uZWxzIHRvIGJlIGxvYWQgYnkgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gICAgaWYgKHRoaXMua2V5ID09PSAnc2l6ZVNjYWxlJyAmJiBjb25maWcudHlwZSA9PT0gJ2dlb2pzb24nKSB7XG4gICAgICAvLyBzaXplU2NhbGUgbm93IHNwbGl0IGludG8gcmFkaXVzU2NhbGUsIGhlaWdodFNjYWxlXG4gICAgICAvLyBubyB1c2VyIGN1c3RvbWl6YXRpb24sIGp1c3QgdXNlIGRlZmF1bHRcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmlzdWFsQ2hhbm5lbHM6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdGVkLnZpc3VhbENoYW5uZWxzIHx8IHt9KSxcbiAgICAgICAgW3RoaXMua2V5XTogc2NhbGVcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8vIHVzZWQgdG8gY29udmVydCB2MCB0byB2MSBsYXllciBjb25maWdcbmNsYXNzIExheWVyQ29uZmlnU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIGxvYWQoc2F2ZWQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgLy8gZm9sZCB2MCBsYXllciBwcm9wZXJ0eSBpbnRvIGNvbmZpZy5rZXlcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC5jb25maWcgfHwge30pLFxuICAgICAgICBbdGhpcy5rZXldOiBzYXZlZFxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLy8gdXNlZCB0byBjb252ZXJ0IHYwIHRvIHYxIGxheWVyIGNvbHVtbnNcbi8vIG9ubHkgcmV0dXJuIGNvbHVtbiB2YWx1ZSBmb3IgZWFjaCBjb2x1bW5cbmNsYXNzIExheWVyQ29sdW1uc1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHNhdmVkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIC8vIGZvbGQgdjAgbGF5ZXIgcHJvcGVydHkgaW50byBjb25maWcua2V5LCBmbGF0dGVuIGNvbHVtbnNcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC5jb25maWcgfHwge30pLFxuICAgICAgICBjb2x1bW5zOiBPYmplY3Qua2V5cyhzYXZlZCkucmVkdWNlKFxuICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgW2tleV06IHNhdmVkW2tleV0udmFsdWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fVxuICAgICAgICApXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vLyB1c2VkIHRvIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29uZmlnLnZpc0NvbmZpZ1xuY2xhc3MgTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHNhdmVkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIC8vIGZvbGQgdjAgbGF5ZXIgcHJvcGVydHkgaW50byBjb25maWcudmlzQ29uZmlnXG4gICAgY29uc3QgYWNjdW11bGF0ZWRDb25maWcgPSBhY2N1bXVsYXRlZC5jb25maWcgfHwge307XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi5hY2N1bXVsYXRlZENvbmZpZyxcbiAgICAgICAgdmlzQ29uZmlnOiB7XG4gICAgICAgICAgLi4uKGFjY3VtdWxhdGVkQ29uZmlnLnZpc0NvbmZpZyB8fCB7fSksXG4gICAgICAgICAgW3RoaXMua2V5XTogc2F2ZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTGF5ZXJWaXNDb25maWdTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAga2V5ID0gJ3Zpc0NvbmZpZyc7XG5cbiAgbG9hZCh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBjb25zdCByZW5hbWUgPSB7XG4gICAgICBnZW9qc29uOiB7XG4gICAgICAgIGV4dHJ1ZGVkOiAnZW5hYmxlM2QnLFxuICAgICAgICBlbGV2YXRpb25SYW5nZTogJ2hlaWdodFJhbmdlJ1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoY29uZmlnLnR5cGUgaW4gcmVuYW1lKSB7XG4gICAgICBjb25zdCBwcm9wVG9SZW5hbWUgPSByZW5hbWVbY29uZmlnLnR5cGVdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgICAgdmlzQ29uZmlnOiBPYmplY3Qua2V5cyh2aXNDb25maWcpLnJlZHVjZShcbiAgICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICAgIC4uLihwcm9wVG9SZW5hbWVba2V5XVxuICAgICAgICAgICAgICAgID8ge1twcm9wVG9SZW5hbWVba2V5XV06IHZpc0NvbmZpZ1trZXldfVxuICAgICAgICAgICAgICAgIDoge1trZXldOiB2aXNDb25maWdba2V5XX0pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgIHZpc0NvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTGF5ZXJDb25maWdTY2hlbWFEZWxldGVWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAgbG9hZCh2YWx1ZSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIFYwIC0+IFYxIENoYW5nZXNcbiAqIC0gbGF5ZXIgaXMgbm93IGEgY2xhc3NcbiAqIC0gY29uZmlnIHNhdmVkIGluIGEgY29uZmlnIG9iamVjdFxuICogLSBpZCwgdHlwZSwgaXNBZ2dyZWdhdGVkIGlzIG91dHNpZGUgbGF5ZXIuY29uZmlnXG4gKiAtIHZpc3VhbENoYW5uZWxzIGlzIG91dHNpZGUgY29uZmlnLCBpdCBkZWZpbmVzIGF2YWlsYWJsZSB2aXN1YWwgY2hhbm5lbCBhbmRcbiAqICAgcHJvcGVydHkgbmFtZXMgZm9yIGZpZWxkLCBzY2FsZSwgZG9tYWluIGFuZCByYW5nZSBvZiBlYWNoIHZpc3VhbCBjaGFuZWwuXG4gKiAtIGVuYWJsZTNkLCBjb2xvckFnZ3JlZ2F0aW9uIGFuZCBzaXplQWdncmVnYXRpb24gYXJlIG1vdmVkIGludG8gdmlzQ29uZmlnXG4gKiAtIEdlb2pzb25MYXllciAtIGFkZGVkIGhlaWdodCwgcmFkaXVzIHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuXG5leHBvcnQgY29uc3QgbGF5ZXJQcm9wc1YwID0ge1xuICBpZDogbnVsbCxcbiAgdHlwZTogbnVsbCxcblxuICAvLyBtb3ZlIGludG8gbGF5ZXIuY29uZmlnXG4gIGRhdGFJZDogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ2RhdGFJZCd9KSxcbiAgbGFiZWw6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdsYWJlbCd9KSxcbiAgY29sb3I6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdjb2xvcid9KSxcbiAgaXNWaXNpYmxlOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFWMCh7a2V5OiAnaXNWaXNpYmxlJ30pLFxuICBoaWRkZW46IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdoaWRkZW4nfSksXG4gIHZpc2liaWxpdHlCeVpvb206IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICd2aXNpYmlsaXR5Qnlab29tJ30pLFxuXG4gIC8vIGNvbnZlcnQgdmlzQ29uZmlnXG4gIHZpc0NvbmZpZzogbmV3IExheWVyVmlzQ29uZmlnU2NoZW1hVjAoe2tleTogJ3Zpc0NvbmZpZyd9KSxcblxuICAvLyBtb3ZlIGludG8gbGF5ZXIuY29uZmlnXG4gIC8vIGZsYXR0ZW5cbiAgY29sdW1uczogbmV3IExheWVyQ29sdW1uc1NjaGVtYVYwKCksXG5cbiAgLy8gc2F2ZSBpbnRvIHZpc3VhbENoYW5uZWxzXG4gIGNvbG9yRmllbGQ6IG5ldyBEaW1lbnNpb25GaWVsZFNjaGVtYVYwKHtcbiAgICBwcm9wZXJ0aWVzOiBkaW1lbnNpb25Qcm9wc1YwLFxuICAgIGtleTogJ2NvbG9yRmllbGQnXG4gIH0pLFxuICBjb2xvclNjYWxlOiBuZXcgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCh7XG4gICAga2V5OiAnY29sb3JTY2FsZSdcbiAgfSksXG4gIHNpemVGaWVsZDogbmV3IERpbWVuc2lvbkZpZWxkU2NoZW1hVjAoe1xuICAgIHByb3BlcnRpZXM6IGRpbWVuc2lvblByb3BzVjAsXG4gICAga2V5OiAnc2l6ZUZpZWxkJ1xuICB9KSxcbiAgc2l6ZVNjYWxlOiBuZXcgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCh7XG4gICAga2V5OiAnc2l6ZVNjYWxlJ1xuICB9KSxcblxuICAvLyBtb3ZlIGludG8gY29uZmlnLnZpc0NvbmZpZ1xuICBlbmFibGUzZDogbmV3IExheWVyQ29uZmlnVG9WaXNDb25maWdTY2hlbWFWMCh7a2V5OiAnZW5hYmxlM2QnfSksXG4gIGNvbG9yQWdncmVnYXRpb246IG5ldyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAoe1xuICAgIGtleTogJ2NvbG9yQWdncmVnYXRpb24nXG4gIH0pLFxuICBzaXplQWdncmVnYXRpb246IG5ldyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAoe2tleTogJ3NpemVBZ2dyZWdhdGlvbid9KSxcblxuICAvLyBkZWxldGVcbiAgaXNBZ2dyZWdhdGVkOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFEZWxldGVWMCgpXG59O1xuXG4vKipcbiAqIFYxIFNjaGVtYVxuICovXG5jbGFzcyBDb2x1bW5TY2hlbWFWMSBleHRlbmRzIFNjaGVtYSB7XG4gIHNhdmUoY29sdW1ucywgc3RhdGUpIHtcbiAgICAvLyBzdGFydGluZyBmcm9tIHYxLCBvbmx5IHNhdmUgY29sdW1uIHZhbHVlXG4gICAgLy8gZmllbGRJZHggd2lsbCBiZSBjYWxjdWxhdGVkIGR1cmluZyBtZXJnZVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyhjb2x1bW5zKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1LCBja2V5KSA9PiAoe1xuICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgW2NrZXldOiBjb2x1bW5zW2NrZXldLnZhbHVlXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICBsb2FkKGNvbHVtbnMpIHtcbiAgICByZXR1cm4ge2NvbHVtbnN9O1xuICB9XG59XG5cbmNsYXNzIFRleHRMYWJlbFNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZSh0ZXh0TGFiZWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogdGV4dExhYmVsLm1hcCh0bCA9PiAoe1xuICAgICAgICAuLi50bCxcbiAgICAgICAgZmllbGQ6IHRsLmZpZWxkID8gcGljayh0bC5maWVsZCwgWyduYW1lJywgJ3R5cGUnXSkgOiBudWxsXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG5cbiAgbG9hZCh0ZXh0TGFiZWwpIHtcbiAgICByZXR1cm4ge3RleHRMYWJlbDogQXJyYXkuaXNBcnJheSh0ZXh0TGFiZWwpID8gdGV4dExhYmVsIDogW3RleHRMYWJlbF19O1xuICB9XG59XG5cbmNvbnN0IHZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMSA9IHtcbiAgZ2VvanNvbjogKHZjLCBwYXJlbnRzLCBhY2N1bXVsYXRvcikgPT4ge1xuICAgIGNvbnN0IFtsYXllcl0gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBjb25zdCBpc09sZCA9ICF2Yy5oYXNPd25Qcm9wZXJ0eSgnc3Ryb2tlQ29sb3JGaWVsZCcpO1xuICAgIC8vIG1ha2Ugb3VyIGJlc3QgZ3Vlc3MgaWYgdGhpcyBnZW9qc29uIGxheWVyIGNvbnRhaW5zIHBvaW50XG4gICAgY29uc3QgaXNQb2ludCA9XG4gICAgICB2Yy5yYWRpdXNGaWVsZCB8fCBsYXllci5jb25maWcudmlzQ29uZmlnLnJhZGl1cyAhPT0gTEFZRVJfVklTX0NPTkZJR1MucmFkaXVzLmRlZmF1bHRWYWx1ZTtcblxuICAgIGlmIChpc09sZCAmJiAhaXNQb2ludCAmJiBsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZWQpIHtcbiAgICAgIC8vIGlmIHN0cm9rZWQgaXMgdHJ1ZSwgY29weSBjb2xvciBjb25maWcgdG8gc3Ryb2tlIGNvbG9yIGNvbmZpZ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3Ryb2tlQ29sb3JGaWVsZDogdmMuY29sb3JGaWVsZCxcbiAgICAgICAgc3Ryb2tlQ29sb3JTY2FsZTogdmMuY29sb3JTY2FsZVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuLyoqXG4gKiBWMTogc2F2ZSBbZmllbGRdOiB7bmFtZSwgdHlwZX0sIFtzY2FsZV06ICcnIGZvciBlYWNoIGNoYW5uZWxcbiAqL1xuY2xhc3MgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZSh2aXN1YWxDaGFubmVscywgcGFyZW50cykge1xuICAgIC8vIG9ubHkgc2F2ZSBmaWVsZCBhbmQgc2NhbGUgb2YgZWFjaCBjaGFubmVsXG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyh2aXN1YWxDaGFubmVscykucmVkdWNlKFxuICAgICAgICAvLyAgc2F2ZSBjaGFubmVsIHRvIG51bGwgaWYgZGlkbid0IHNlbGVjdCBhbnkgZmllbGRcbiAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgIFt2aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXTogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdXG4gICAgICAgICAgICA/IHBpY2sobGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdLCBbJ25hbWUnLCAndHlwZScsICdjb2xvckNvbHVtbiddKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIFt2aXN1YWxDaGFubmVsc1trZXldLnNjYWxlXTogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uc2NhbGVdXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cbiAgbG9hZCh2YywgcGFyZW50cywgYWNjdW11bGF0b3IpIHtcbiAgICAvLyBmb2xkIGNoYW5uZWxzIGludG8gY29uZmlnXG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIGNvbnN0IG1vZGlmaWVkID0gdmlzdWFsQ2hhbm5lbE1vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdXG4gICAgICA/IHZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMVtsYXllci50eXBlXSh2YywgcGFyZW50cywgYWNjdW11bGF0b3IpXG4gICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjY3VtdWxhdG9yLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRvci5jb25maWcgfHwge30pLFxuICAgICAgICAuLi52YyxcbiAgICAgICAgLi4ubW9kaWZpZWRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4vKipcbiAqIFYxOiBzYXZlIFtjaGFubmVsXTogW3sgbGFiZWwsIGNvbG9yIH0sIC4uLl0gZm9yIGxlZ2VuZFxuICovXG5jbGFzcyBMZWdlbmRTZXR0aW5nc1YxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZShsZWdlbmRTZXR0aW5ncywgcGFyZW50cykge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyhsZWdlbmRTZXR0aW5ncykucmVkdWNlKChhY2N1LCBrZXkpID0+IHtcbiAgICAgICAgYWNjdVtrZXldID0gbGVnZW5kU2V0dGluZ3Nba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjY3U7XG4gICAgICB9LCB7fSlcbiAgICB9O1xuICB9XG4gIGxvYWQobHMsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjY3VtdWxhdG9yLFxuICAgICAgW3RoaXMua2V5XTogbHNcbiAgICB9O1xuICB9XG59XG5jb25zdCB2aXNDb25maWdNb2RpZmljYXRpb25WMSA9IHtcbiAgcG9pbnQ6ICh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSA9PiB7XG4gICAgY29uc3QgbW9kaWZpZWQgPSB7fTtcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMiwgLTEpO1xuICAgIGNvbnN0IGlzT2xkID1cbiAgICAgICF2aXNDb25maWcuaGFzT3duUHJvcGVydHkoJ2ZpbGxlZCcpICYmICF2aXNDb25maWcuc3Ryb2tlQ29sb3IgJiYgIXZpc0NvbmZpZy5zdHJva2VDb2xvclJhbmdlO1xuICAgIGlmIChpc09sZCkge1xuICAgICAgLy8gY29sb3IgY29sb3IgJiBjb2xvciByYW5nZSB0byBzdHJva2UgY29sb3JcbiAgICAgIG1vZGlmaWVkLnN0cm9rZUNvbG9yID0gbGF5ZXIuY29uZmlnLmNvbG9yO1xuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3JSYW5nZSA9IGNsb25lRGVlcCh2aXNDb25maWcuY29sb3JSYW5nZSk7XG4gICAgICBpZiAodmlzQ29uZmlnLm91dGxpbmUpIHtcbiAgICAgICAgLy8gcG9pbnQgbGF5ZXIgbm93IHN1cHBvcnRzIGJvdGggb3V0bGluZSBhbmQgZmlsbFxuICAgICAgICAvLyBmb3Igb2xkZXIgc2NoZW1hIHdoZXJlIGZpbGxlZCBoYXMgbm90IGJlZW4gYWRkZWQgdG8gcG9pbnQgbGF5ZXJcbiAgICAgICAgLy8gc2V0IGl0IHRvIGZhbHNlXG4gICAgICAgIG1vZGlmaWVkLmZpbGxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2RpZmllZDtcbiAgfSxcbiAgZ2VvanNvbjogKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpID0+IHtcbiAgICAvLyBpcyBwb2ludHM/XG4gICAgY29uc3QgbW9kaWZpZWQgPSB7fTtcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMiwgLTEpO1xuICAgIGNvbnN0IGlzT2xkID1cbiAgICAgIGxheWVyLnZpc3VhbENoYW5uZWxzICYmXG4gICAgICAhbGF5ZXIudmlzdWFsQ2hhbm5lbHMuaGFzT3duUHJvcGVydHkoJ3N0cm9rZUNvbG9yRmllbGQnKSAmJlxuICAgICAgIXZpc0NvbmZpZy5zdHJva2VDb2xvciAmJlxuICAgICAgIXZpc0NvbmZpZy5zdHJva2VDb2xvclJhbmdlO1xuICAgIC8vIG1ha2Ugb3VyIGJlc3QgZ3Vlc3MgaWYgdGhpcyBnZW9qc29uIGxheWVyIGNvbnRhaW5zIHBvaW50XG4gICAgY29uc3QgaXNQb2ludCA9XG4gICAgICAobGF5ZXIudmlzdWFsQ2hhbm5lbHMgJiYgbGF5ZXIudmlzdWFsQ2hhbm5lbHMucmFkaXVzRmllbGQpIHx8XG4gICAgICAodmlzQ29uZmlnICYmIHZpc0NvbmZpZy5yYWRpdXMgIT09IExBWUVSX1ZJU19DT05GSUdTLnJhZGl1cy5kZWZhdWx0VmFsdWUpO1xuXG4gICAgaWYgKGlzT2xkKSB7XG4gICAgICAvLyBjb2xvciBjb2xvciAmIGNvbG9yIHJhbmdlIHRvIHN0cm9rZSBjb2xvclxuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3IgPSBsYXllci5jb25maWcuY29sb3I7XG4gICAgICBtb2RpZmllZC5zdHJva2VDb2xvclJhbmdlID0gY2xvbmVEZWVwKHZpc0NvbmZpZy5jb2xvclJhbmdlKTtcbiAgICAgIGlmIChpc1BvaW50KSB7XG4gICAgICAgIC8vIGlmIGlzIHBvaW50LCBzZXQgc3Ryb2tlIHRvIGZhbHNlXG4gICAgICAgIG1vZGlmaWVkLmZpbGxlZCA9IHRydWU7XG4gICAgICAgIG1vZGlmaWVkLnN0cm9rZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kaWZpZWQ7XG4gIH1cbn07XG5cbmNsYXNzIFZpc0NvbmZpZ1NjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ3Zpc0NvbmZpZyc7XG5cbiAgbG9hZCh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTIsIC0xKTtcbiAgICBjb25zdCBtb2RpZmllZCA9IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdXG4gICAgICA/IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpXG4gICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc0NvbmZpZzoge1xuICAgICAgICAuLi52aXNDb25maWcsXG4gICAgICAgIC4uLm1vZGlmaWVkXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbGF5ZXJQcm9wc1YxID0ge1xuICBpZDogbnVsbCxcbiAgdHlwZTogbnVsbCxcbiAgY29uZmlnOiBuZXcgU2NoZW1hKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBrZXk6ICdjb25maWcnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGRhdGFJZDogbnVsbCxcbiAgICAgIGxhYmVsOiBudWxsLFxuICAgICAgY29sb3I6IG51bGwsXG4gICAgICBoaWdobGlnaHRDb2xvcjogbnVsbCxcbiAgICAgIGNvbHVtbnM6IG5ldyBDb2x1bW5TY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgICAgICBrZXk6ICdjb2x1bW5zJ1xuICAgICAgfSksXG4gICAgICBpc1Zpc2libGU6IG51bGwsXG4gICAgICB2aXNDb25maWc6IG5ldyBWaXNDb25maWdTY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxXG4gICAgICB9KSxcbiAgICAgIGhpZGRlbjogbnVsbCxcbiAgICAgIHZpc2liaWxpdHlCeVpvb206IG51bGwsXG4gICAgICB0ZXh0TGFiZWw6IG5ldyBUZXh0TGFiZWxTY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgICAgICBrZXk6ICd0ZXh0TGFiZWwnXG4gICAgICB9KVxuICAgIH1cbiAgfSksXG4gIGxlZ2VuZFNldHRpbmdzOiBuZXcgTGVnZW5kU2V0dGluZ3NWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAnbGVnZW5kU2V0dGluZ3MnXG4gIH0pLFxuICB2aXN1YWxDaGFubmVsczogbmV3IFZpc3VhbENoYW5uZWxTY2hlbWFWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAndmlzdWFsQ2hhbm5lbHMnXG4gIH0pXG59O1xuXG5leHBvcnQgY2xhc3MgTGF5ZXJTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdsYXllcnMnO1xuXG4gIHNhdmUobGF5ZXJzLCBwYXJlbnRzKSB7XG4gICAgY29uc3QgW3Zpc1N0YXRlXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IHZpc1N0YXRlLmxheWVyT3JkZXIucmVkdWNlKChzYXZlZCwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gc2F2ZSBsYXllcnMgYWNjb3JkaW5nIHRvIHRoZWlyIHJlbmRlcmluZyBvcmRlclxuICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tpbmRleF07XG4gICAgICAgIGlmIChsYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgICAgICBzYXZlZC5wdXNoKHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGxheWVyKS5sYXllcnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzYXZlZDtcbiAgICAgIH0sIFtdKVxuICAgIH07XG4gIH1cblxuICBsb2FkKGxheWVycykge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBsYXllcnMubWFwKGxheWVyID0+IHRoaXMubG9hZFByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGxheWVyLCBsYXllcnMpLmxheWVycylcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdmaWx0ZXJzJztcbiAgc2F2ZShmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbHRlcnM6IGZpbHRlcnNcbiAgICAgICAgLmZpbHRlcihpc1ZhbGlkRmlsdGVyVmFsdWUpXG4gICAgICAgIC5tYXAoZmlsdGVyID0+IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpbHRlcikuZmlsdGVycylcbiAgICB9O1xuICB9XG4gIGxvYWQoZmlsdGVycykge1xuICAgIHJldHVybiB7ZmlsdGVyc307XG4gIH1cbn1cblxuY29uc3QgaW50ZXJhY3Rpb25Qcm9wc1YwID0gWyd0b29sdGlwJywgJ2JydXNoJ107XG5cbmNsYXNzIEludGVyYWN0aW9uU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnaW50ZXJhY3Rpb25Db25maWcnO1xuXG4gIHNhdmUoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BlcnRpZXMpXG4gICAgICA/IHtcbiAgICAgICAgICBbdGhpcy5rZXldOiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICAgICAgLi4uKGludGVyYWN0aW9uQ29uZmlnW2tleV0uZW5hYmxlZCA/IHtba2V5XTogaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWd9IDoge30pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICB9XG4gIGxvYWQoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICAvLyBjb252ZXJ0IHYwIC0+IHYxXG4gICAgLy8gcmV0dXJuIGVuYWJsZWQ6IGZhbHNlIGlmIGRpc2FibGVkLFxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvcGVydGllcylcbiAgICAgID8ge1xuICAgICAgICAgIFt0aGlzLmtleV06IHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICAuLi57XG4gICAgICAgICAgICAgICAgW2tleV06IHtcbiAgICAgICAgICAgICAgICAgIC4uLihpbnRlcmFjdGlvbkNvbmZpZ1trZXldIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oaW50ZXJhY3Rpb25Db25maWdba2V5XSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIH1cbn1cblxuY29uc3QgaW50ZXJhY3Rpb25Qcm9wc1YxID0gWy4uLmludGVyYWN0aW9uUHJvcHNWMCwgJ2dlb2NvZGVyJywgJ2Nvb3JkaW5hdGUnXTtcblxuZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uU2NoZW1hVjEgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnaW50ZXJhY3Rpb25Db25maWcnO1xuXG4gIHNhdmUoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICAvLyBzYXZlIGNvbmZpZyBldmVuIGlmIGRpc2FibGVkLFxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvcGVydGllcylcbiAgICAgID8ge1xuICAgICAgICAgIFt0aGlzLmtleV06IHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICBba2V5XToge1xuICAgICAgICAgICAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGludGVyYWN0aW9uQ29uZmlnW2tleV0uZW5hYmxlZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICB9XG4gIGxvYWQoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICBjb25zdCBtb2RpZmllZENvbmZpZyA9IGludGVyYWN0aW9uQ29uZmlnO1xuICAgIE9iamVjdC5rZXlzKGludGVyYWN0aW9uQ29uZmlnKS5mb3JFYWNoKGNvbmZpZ1R5cGUgPT4ge1xuICAgICAgaWYgKGNvbmZpZ1R5cGUgPT09ICd0b29sdGlwJykge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1Nob3cgPSBtb2RpZmllZENvbmZpZ1tjb25maWdUeXBlXS5maWVsZHNUb1Nob3c7XG4gICAgICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKGZpZWxkc1RvU2hvdykpIHtcbiAgICAgICAgICByZXR1cm4ge1t0aGlzLmtleV06IG1vZGlmaWVkQ29uZmlnfTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZHNUb1Nob3cpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3dba2V5XSA9IGZpZWxkc1RvU2hvd1trZXldLm1hcChmaWVsZERhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWVsZERhdGEubmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGZpZWxkRGF0YSxcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IG51bGxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWVsZERhdGE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICAgIHJldHVybiB7W3RoaXMua2V5XTogbW9kaWZpZWRDb25maWd9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJQcm9wc1YwID0ge1xuICBkYXRhSWQ6IG51bGwsXG4gIGlkOiBudWxsLFxuICBuYW1lOiBudWxsLFxuICB0eXBlOiBudWxsLFxuICB2YWx1ZTogbnVsbCxcbiAgZW5sYXJnZWQ6IG51bGxcbn07XG5cbmV4cG9ydCBjbGFzcyBEaW1lbnNpb25GaWVsZFNjaGVtYSBleHRlbmRzIFNjaGVtYSB7XG4gIHNhdmUoZmllbGQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogZmllbGQgPyB0aGlzLnNhdmVQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYShmaWVsZClbdGhpcy5rZXldIDogbnVsbFxuICAgIH07XG4gIH1cblxuICBsb2FkKGZpZWxkKSB7XG4gICAgcmV0dXJuIHtbdGhpcy5rZXldOiBmaWVsZH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNwbGl0TWFwc1NjaGVtYSBleHRlbmRzIFNjaGVtYSB7XG4gIGNvbnZlcnRMYXllclNldHRpbmdzKGFjY3UsIFtrZXksIHZhbHVlXSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IHZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IEJvb2xlYW4odmFsdWUuaXNWaXNpYmxlKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH1cblxuICBsb2FkKHNwbGl0TWFwcykge1xuICAgIC8vIHByZXZpb3VzIHNwbGl0TWFwcyBTY2hlbWEge2xheWVyczoge2xheWVySWQ6IHtpc1Zpc2libGUsIGlzQXZhaWxhYmxlfX19XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3BsaXRNYXBzKSB8fCAhc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtzcGxpdE1hcHM6IFtdfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKHNldHRpbmdzID0+ICh7XG4gICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICBsYXllcnM6IE9iamVjdC5lbnRyaWVzKHNldHRpbmdzLmxheWVycyB8fCB7fSkucmVkdWNlKHRoaXMuY29udmVydExheWVyU2V0dGluZ3MsIHt9KVxuICAgICAgfSkpXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyUHJvcHNWMSA9IHtcbiAgLi4uZmlsdGVyUHJvcHNWMCxcbiAgcGxvdFR5cGU6IG51bGwsXG4gIGFuaW1hdGlvbldpbmRvdzogbnVsbCxcbiAgeUF4aXM6IG5ldyBEaW1lbnNpb25GaWVsZFNjaGVtYSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAneUF4aXMnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIG5hbWU6IG51bGwsXG4gICAgICB0eXBlOiBudWxsXG4gICAgfVxuICB9KSxcblxuICAvLyBwb2x5Z29uIGZpbHRlciBwcm9wZXJ0aWVzXG4gIGxheWVySWQ6IG51bGwsXG4gIHNwZWVkOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgcHJvcGVydGllc1YwID0ge1xuICBmaWx0ZXJzOiBuZXcgRmlsdGVyU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICAgIHByb3BlcnRpZXM6IGZpbHRlclByb3BzVjBcbiAgfSksXG4gIGxheWVyczogbmV3IExheWVyU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICAgIHByb3BlcnRpZXM6IGxheWVyUHJvcHNWMFxuICB9KSxcbiAgaW50ZXJhY3Rpb25Db25maWc6IG5ldyBJbnRlcmFjdGlvblNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MCxcbiAgICBwcm9wZXJ0aWVzOiBpbnRlcmFjdGlvblByb3BzVjBcbiAgfSksXG4gIGxheWVyQmxlbmRpbmc6IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9wZXJ0aWVzVjEgPSB7XG4gIGZpbHRlcnM6IG5ldyBGaWx0ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczogZmlsdGVyUHJvcHNWMVxuICB9KSxcbiAgbGF5ZXJzOiBuZXcgTGF5ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczogbGF5ZXJQcm9wc1YxXG4gIH0pLFxuICBpbnRlcmFjdGlvbkNvbmZpZzogbmV3IEludGVyYWN0aW9uU2NoZW1hVjEoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIHByb3BlcnRpZXM6IGludGVyYWN0aW9uUHJvcHNWMVxuICB9KSxcbiAgbGF5ZXJCbGVuZGluZzogbnVsbCxcbiAgc3BsaXRNYXBzOiBuZXcgU3BsaXRNYXBzU2NoZW1hKHtcbiAgICBrZXk6ICdzcGxpdE1hcHMnLFxuICAgIHZlcnNpb246IFZFUlNJT05TLnYxXG4gIH0pLFxuICBhbmltYXRpb25Db25maWc6IG5ldyBTY2hlbWEoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGN1cnJlbnRUaW1lOiBudWxsLFxuICAgICAgc3BlZWQ6IG51bGxcbiAgICB9LFxuICAgIGtleTogJ2FuaW1hdGlvbkNvbmZpZydcbiAgfSlcbn07XG5cbmV4cG9ydCBjb25zdCB2aXNTdGF0ZVNjaGVtYVYwID0gbmV3IFNjaGVtYSh7XG4gIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzVjAsXG4gIGtleTogJ3Zpc1N0YXRlJ1xufSk7XG5cbmV4cG9ydCBjb25zdCB2aXNTdGF0ZVNjaGVtYVYxID0gbmV3IFNjaGVtYSh7XG4gIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzVjEsXG4gIGtleTogJ3Zpc1N0YXRlJ1xufSk7XG5cbmV4cG9ydCBjb25zdCB2aXNTdGF0ZVNjaGVtYSA9IHtcbiAgW1ZFUlNJT05TLnYwXToge1xuICAgIHNhdmU6IHRvU2F2ZSA9PiB2aXNTdGF0ZVNjaGVtYVYwLnNhdmUodG9TYXZlKSxcbiAgICBsb2FkOiB0b0xvYWQgPT4gdmlzU3RhdGVTY2hlbWFWMS5sb2FkKHZpc1N0YXRlU2NoZW1hVjAubG9hZCh0b0xvYWQpLnZpc1N0YXRlKVxuICB9LFxuICBbVkVSU0lPTlMudjFdOiB2aXNTdGF0ZVNjaGVtYVYxXG59O1xuXG4vLyB0ZXN0IGxvYWQgdjBcbmV4cG9ydCBkZWZhdWx0IHZpc1N0YXRlU2NoZW1hO1xuIl19