@kepler.gl/reducers 3.3.0-alpha.3 → 3.3.0-alpha.4

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.
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.toggleSplitMapUpdater = exports.toggleSidePanelUpdater = exports.toggleSidePanelCloseButtonUpdater = exports.togglePanelListViewUpdater = exports.toggleModalUpdater = exports.toggleMapControlUpdater = exports.startExportingImageUpdater = exports.showExportDropdownUpdater = exports.showDatasetTableUpdater = exports.setUserMapboxAccessTokenUpdater = exports.setMapControlVisibilityUpdater = exports.setMapControlSettingsUpdater = exports.setLocaleUpdater = exports.setExportVideoSettingUpdater = exports.setExportSelectedDatasetUpdater = exports.setExportMapHTMLModeUpdater = exports.setExportMapFormatUpdater = exports.setExportImageSettingUpdater = exports.setExportImageErrorUpdater = exports.setExportImageDataUriUpdater = exports.setExportFilteredUpdater = exports.setExportDataUpdater = exports.setExportDataTypeUpdater = exports.removeNotificationUpdater = exports.receiveMapConfigUpdater = exports.openDeleteModalUpdater = exports.loadFilesUpdater = exports.loadFilesSuccessUpdater = exports.loadFilesErrUpdater = exports.initUiStateUpdater = exports.hideExportDropdownUpdater = exports.cleanupExportImageUpdater = exports.addNotificationUpdater = exports.INITIAL_UI_STATE = exports.DEFAULT_NOTIFICATIONS = exports.DEFAULT_MODAL = exports.DEFAULT_MAP_CONTROLS = exports.DEFAULT_LOAD_FILES = exports.DEFAULT_EXPORT_VIDEO = exports.DEFAULT_EXPORT_MAP = exports.DEFAULT_EXPORT_JSON = exports.DEFAULT_EXPORT_IMAGE = exports.DEFAULT_EXPORT_HTML = exports.DEFAULT_EXPORT_DATA = exports.DEFAULT_ACTIVE_SIDE_PANEL = void 0;
7
+ exports.toggleSplitMapUpdater = exports.toggleSidePanelUpdater = exports.toggleSidePanelCloseButtonUpdater = exports.togglePanelListViewUpdater = exports.toggleModalUpdater = exports.toggleMapControlUpdater = exports.startExportingImageUpdater = exports.showExportDropdownUpdater = exports.showDatasetTableUpdater = exports.setUserMapboxAccessTokenUpdater = exports.setMapControlVisibilityUpdater = exports.setMapControlSettingsUpdater = exports.setLocaleUpdater = exports.setExportVideoSettingUpdater = exports.setExportSelectedDatasetUpdater = exports.setExportMapHTMLModeUpdater = exports.setExportMapFormatUpdater = exports.setExportImageSettingUpdater = exports.setExportImageErrorUpdater = exports.setExportImageDataUriUpdater = exports.setExportFilteredUpdater = exports.setExportDataUpdater = exports.setExportDataTypeUpdater = exports.removeNotificationUpdater = exports.receiveMapConfigUpdater = exports.openDeleteModalUpdater = exports.loadFilesUpdater = exports.loadFilesSuccessUpdater = exports.loadFilesErrUpdater = exports.initUiStateUpdater = exports.hideExportDropdownUpdater = exports.cleanupExportImageUpdater = exports.addNotificationUpdater = exports.MUTUALLY_EXCLUSIVE_MAP_CONTROLS = exports.INITIAL_UI_STATE = exports.DEFAULT_NOTIFICATIONS = exports.DEFAULT_MODAL = exports.DEFAULT_MAP_CONTROLS = exports.DEFAULT_LOAD_FILES = exports.DEFAULT_EXPORT_VIDEO = exports.DEFAULT_EXPORT_MAP = exports.DEFAULT_EXPORT_JSON = exports.DEFAULT_EXPORT_IMAGE = exports.DEFAULT_EXPORT_HTML = exports.DEFAULT_EXPORT_DATA = exports.DEFAULT_ACTIVE_SIDE_PANEL = void 0;
8
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
10
  var _constants = require("@kepler.gl/constants");
@@ -331,6 +331,11 @@ var toggleSidePanelCloseButtonUpdater = exports.toggleSidePanelCloseButtonUpdate
331
331
  });
332
332
  };
333
333
 
334
+ // Map control dropdowns/menus that overlap each other visually and therefore
335
+ // should be mutually exclusive: opening one closes all the others.
336
+ // (split/view-mode menu, top/3d/globe menu, polygon draw tool, language menu)
337
+ var MUTUALLY_EXCLUSIVE_MAP_CONTROLS = exports.MUTUALLY_EXCLUSIVE_MAP_CONTROLS = [_constants.MAP_CONTROLS.splitMap, _constants.MAP_CONTROLS.toggle3d, _constants.MAP_CONTROLS.mapDraw, _constants.MAP_CONTROLS.mapLocale];
338
+
334
339
  /**
335
340
  * Toggle active map control panel
336
341
  * @memberof uiStateUpdaters
@@ -341,7 +346,7 @@ var toggleSidePanelCloseButtonUpdater = exports.toggleSidePanelCloseButtonUpdate
341
346
  * @public
342
347
  */
343
348
  var toggleMapControlUpdater = exports.toggleMapControlUpdater = function toggleMapControlUpdater(state, _ref5) {
344
- var _state$mapControls$pa, _state$mapControls$dr;
349
+ var _state$mapControls$pa, _updatedState$mapCont;
345
350
  var _ref5$payload = _ref5.payload,
346
351
  panelId = _ref5$payload.panelId,
347
352
  _ref5$payload$index = _ref5$payload.index,
@@ -351,10 +356,6 @@ var toggleMapControlUpdater = exports.toggleMapControlUpdater = function toggleM
351
356
  // so we need to deactivate the other panel when one is activated
352
357
  var panelToDeactivate = panelId === _constants.MAP_CONTROLS.effect ? _constants.MAP_CONTROLS.aiAssistant : panelId === _constants.MAP_CONTROLS.aiAssistant ? _constants.MAP_CONTROLS.effect : null;
353
358
 
354
- // To to toggle the mapDraw and mapLocal dropdowns
355
- // We have to deactivate the other active dropdown
356
- var dropdownToDeactivate = panelId === _constants.MAP_CONTROLS.mapDraw ? _constants.MAP_CONTROLS.mapLocale : panelId === _constants.MAP_CONTROLS.mapLocale ? _constants.MAP_CONTROLS.mapDraw : null;
357
-
358
359
  // If we need to deactivate a competing panel and it's currently active
359
360
  if (panelToDeactivate && (_state$mapControls$pa = state.mapControls[panelToDeactivate]) !== null && _state$mapControls$pa !== void 0 && _state$mapControls$pa.active) {
360
361
  updatedState = _objectSpread(_objectSpread({}, state), {}, {
@@ -364,13 +365,27 @@ var toggleMapControlUpdater = exports.toggleMapControlUpdater = function toggleM
364
365
  });
365
366
  }
366
367
 
367
- // If we need to deactivate a competing dropdown and it's currently active
368
- if (dropdownToDeactivate && (_state$mapControls$dr = state.mapControls[dropdownToDeactivate]) !== null && _state$mapControls$dr !== void 0 && _state$mapControls$dr.active) {
369
- updatedState = _objectSpread(_objectSpread({}, state), {}, {
370
- mapControls: _objectSpread(_objectSpread({}, updatedState.mapControls), {}, (0, _defineProperty2["default"])({}, dropdownToDeactivate, _objectSpread(_objectSpread({}, updatedState.mapControls[dropdownToDeactivate]), {}, {
371
- active: false
372
- })))
368
+ // The overlapping map control menus should be mutually exclusive: when one of
369
+ // them is being opened, deactivate every other one that is currently active
370
+ // so their dropdowns never overlap on screen.
371
+ var isOpening = !((_updatedState$mapCont = updatedState.mapControls[panelId]) !== null && _updatedState$mapCont !== void 0 && _updatedState$mapCont.active);
372
+ if (isOpening && MUTUALLY_EXCLUSIVE_MAP_CONTROLS.includes(panelId)) {
373
+ var nextMapControls = _objectSpread({}, updatedState.mapControls);
374
+ var didDeactivate = false;
375
+ MUTUALLY_EXCLUSIVE_MAP_CONTROLS.forEach(function (controlId) {
376
+ var _nextMapControls$cont;
377
+ if (controlId !== panelId && (_nextMapControls$cont = nextMapControls[controlId]) !== null && _nextMapControls$cont !== void 0 && _nextMapControls$cont.active) {
378
+ nextMapControls[controlId] = _objectSpread(_objectSpread({}, nextMapControls[controlId]), {}, {
379
+ active: false
380
+ });
381
+ didDeactivate = true;
382
+ }
373
383
  });
384
+ if (didDeactivate) {
385
+ updatedState = _objectSpread(_objectSpread({}, updatedState), {}, {
386
+ mapControls: nextMapControls
387
+ });
388
+ }
374
389
  }
375
390
  return _objectSpread(_objectSpread({}, updatedState), {}, {
376
391
  mapControls: _objectSpread(_objectSpread({}, updatedState.mapControls), {}, (0, _defineProperty2["default"])({}, panelId, _objectSpread(_objectSpread({}, updatedState.mapControls[panelId]), {}, {
@@ -473,8 +488,8 @@ var setExportImageSettingUpdater = exports.setExportImageSettingUpdater = functi
473
488
  * @returns nextState
474
489
  * @public
475
490
  */
476
- var setExportImageDataUriUpdater = exports.setExportImageDataUriUpdater = function setExportImageDataUriUpdater(state, _ref10) {
477
- var dataUri = _ref10.payload;
491
+ var setExportImageDataUriUpdater = exports.setExportImageDataUriUpdater = function setExportImageDataUriUpdater(state, _ref0) {
492
+ var dataUri = _ref0.payload;
478
493
  if (dataUri === state.exportImage.imageDataUri) {
479
494
  return state;
480
495
  }
@@ -490,8 +505,8 @@ var setExportImageDataUriUpdater = exports.setExportImageDataUriUpdater = functi
490
505
  * @memberof uiStateUpdaters
491
506
  * @public
492
507
  */
493
- var setExportImageErrorUpdater = exports.setExportImageErrorUpdater = function setExportImageErrorUpdater(state, _ref11) {
494
- var error = _ref11.payload;
508
+ var setExportImageErrorUpdater = exports.setExportImageErrorUpdater = function setExportImageErrorUpdater(state, _ref1) {
509
+ var error = _ref1.payload;
495
510
  return _objectSpread(_objectSpread({}, state), {}, {
496
511
  exportImage: _objectSpread(_objectSpread({}, state.exportImage), {}, {
497
512
  processing: false,
@@ -526,8 +541,8 @@ var cleanupExportImageUpdater = exports.cleanupExportImageUpdater = function cle
526
541
  * @returns nextState
527
542
  * @public
528
543
  */
529
- var setExportVideoSettingUpdater = exports.setExportVideoSettingUpdater = function setExportVideoSettingUpdater(state, _ref12) {
530
- var newSetting = _ref12.payload;
544
+ var setExportVideoSettingUpdater = exports.setExportVideoSettingUpdater = function setExportVideoSettingUpdater(state, _ref10) {
545
+ var newSetting = _ref10.payload;
531
546
  return _objectSpread(_objectSpread({}, state), {}, {
532
547
  exportVideo: _objectSpread(_objectSpread({}, state.exportVideo), newSetting)
533
548
  });
@@ -541,9 +556,9 @@ var setExportVideoSettingUpdater = exports.setExportVideoSettingUpdater = functi
541
556
  * @returns {UiState}
542
557
  * @public
543
558
  */
544
- var startExportingImageUpdater = exports.startExportingImageUpdater = function startExportingImageUpdater(state, _ref13) {
545
- var _ref13$payload = _ref13.payload,
546
- options = _ref13$payload === void 0 ? {} : _ref13$payload;
559
+ var startExportingImageUpdater = exports.startExportingImageUpdater = function startExportingImageUpdater(state, _ref11) {
560
+ var _ref11$payload = _ref11.payload,
561
+ options = _ref11$payload === void 0 ? {} : _ref11$payload;
547
562
  var imageSettings = _objectSpread(_objectSpread({}, options), {}, {
548
563
  exporting: true
549
564
  });
@@ -559,8 +574,8 @@ var startExportingImageUpdater = exports.startExportingImageUpdater = function s
559
574
  * @returns nextState
560
575
  * @public
561
576
  */
562
- var setExportSelectedDatasetUpdater = exports.setExportSelectedDatasetUpdater = function setExportSelectedDatasetUpdater(state, _ref14) {
563
- var dataset = _ref14.payload;
577
+ var setExportSelectedDatasetUpdater = exports.setExportSelectedDatasetUpdater = function setExportSelectedDatasetUpdater(state, _ref12) {
578
+ var dataset = _ref12.payload;
564
579
  return _objectSpread(_objectSpread({}, state), {}, {
565
580
  exportData: _objectSpread(_objectSpread({}, state.exportData), {}, {
566
581
  selectedDataset: dataset
@@ -577,8 +592,8 @@ var setExportSelectedDatasetUpdater = exports.setExportSelectedDatasetUpdater =
577
592
  * @returns nextState
578
593
  * @public
579
594
  */
580
- var setExportDataTypeUpdater = exports.setExportDataTypeUpdater = function setExportDataTypeUpdater(state, _ref15) {
581
- var dataType = _ref15.payload;
595
+ var setExportDataTypeUpdater = exports.setExportDataTypeUpdater = function setExportDataTypeUpdater(state, _ref13) {
596
+ var dataType = _ref13.payload;
582
597
  return _objectSpread(_objectSpread({}, state), {}, {
583
598
  exportData: _objectSpread(_objectSpread({}, state.exportData), {}, {
584
599
  dataType: dataType
@@ -595,8 +610,8 @@ var setExportDataTypeUpdater = exports.setExportDataTypeUpdater = function setEx
595
610
  * @returns nextState
596
611
  * @public
597
612
  */
598
- var setExportFilteredUpdater = exports.setExportFilteredUpdater = function setExportFilteredUpdater(state, _ref16) {
599
- var filtered = _ref16.payload;
613
+ var setExportFilteredUpdater = exports.setExportFilteredUpdater = function setExportFilteredUpdater(state, _ref14) {
614
+ var filtered = _ref14.payload;
600
615
  return _objectSpread(_objectSpread({}, state), {}, {
601
616
  exportData: _objectSpread(_objectSpread({}, state.exportData), {}, {
602
617
  filtered: filtered
@@ -627,8 +642,8 @@ var setExportDataUpdater = exports.setExportDataUpdater = function setExportData
627
642
  * @returns nextState
628
643
  * @public
629
644
  */
630
- var setUserMapboxAccessTokenUpdater = exports.setUserMapboxAccessTokenUpdater = function setUserMapboxAccessTokenUpdater(state, _ref17) {
631
- var userMapboxToken = _ref17.payload;
645
+ var setUserMapboxAccessTokenUpdater = exports.setUserMapboxAccessTokenUpdater = function setUserMapboxAccessTokenUpdater(state, _ref15) {
646
+ var userMapboxToken = _ref15.payload;
632
647
  return _objectSpread(_objectSpread({}, state), {}, {
633
648
  exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, (0, _defineProperty2["default"])({}, _constants.EXPORT_MAP_FORMATS.HTML, _objectSpread(_objectSpread({}, state.exportMap[_constants.EXPORT_MAP_FORMATS.HTML]), {}, {
634
649
  userMapboxToken: userMapboxToken
@@ -643,8 +658,8 @@ var setUserMapboxAccessTokenUpdater = exports.setUserMapboxAccessTokenUpdater =
643
658
  * @param action.payload format to use to export the map into
644
659
  * @return nextState
645
660
  */
646
- var setExportMapFormatUpdater = exports.setExportMapFormatUpdater = function setExportMapFormatUpdater(state, _ref18) {
647
- var format = _ref18.payload;
661
+ var setExportMapFormatUpdater = exports.setExportMapFormatUpdater = function setExportMapFormatUpdater(state, _ref16) {
662
+ var format = _ref16.payload;
648
663
  return _objectSpread(_objectSpread({}, state), {}, {
649
664
  exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, {
650
665
  // @ts-expect-error
@@ -660,8 +675,8 @@ var setExportMapFormatUpdater = exports.setExportMapFormatUpdater = function set
660
675
  * @param action.payload to be set (available modes: EXPORT_HTML_MAP_MODES)
661
676
  * @return nextState
662
677
  */
663
- var setExportMapHTMLModeUpdater = exports.setExportMapHTMLModeUpdater = function setExportMapHTMLModeUpdater(state, _ref19) {
664
- var mode = _ref19.payload;
678
+ var setExportMapHTMLModeUpdater = exports.setExportMapHTMLModeUpdater = function setExportMapHTMLModeUpdater(state, _ref17) {
679
+ var mode = _ref17.payload;
665
680
  return _objectSpread(_objectSpread({}, state), {}, {
666
681
  exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, (0, _defineProperty2["default"])({}, _constants.EXPORT_MAP_FORMATS.HTML, _objectSpread(_objectSpread({}, state.exportMap[_constants.EXPORT_MAP_FORMATS.HTML]), {}, {
667
682
  mode: mode
@@ -679,8 +694,8 @@ var setExportMapHTMLModeUpdater = exports.setExportMapHTMLModeUpdater = function
679
694
  * @returns nextState
680
695
  * @public
681
696
  */
682
- var addNotificationUpdater = exports.addNotificationUpdater = function addNotificationUpdater(state, _ref20) {
683
- var payload = _ref20.payload;
697
+ var addNotificationUpdater = exports.addNotificationUpdater = function addNotificationUpdater(state, _ref18) {
698
+ var payload = _ref18.payload;
684
699
  var oldNotifications = state.notifications || [];
685
700
  // @ts-expect-error
686
701
  var payloadId = payload === null || payload === void 0 ? void 0 : payload.id;
@@ -711,8 +726,8 @@ var addNotificationUpdater = exports.addNotificationUpdater = function addNotifi
711
726
  * @returns nextState
712
727
  * @public
713
728
  */
714
- var removeNotificationUpdater = exports.removeNotificationUpdater = function removeNotificationUpdater(state, _ref21) {
715
- var id = _ref21.payload;
729
+ var removeNotificationUpdater = exports.removeNotificationUpdater = function removeNotificationUpdater(state, _ref19) {
730
+ var id = _ref19.payload;
716
731
  return _objectSpread(_objectSpread({}, state), {}, {
717
732
  notifications: state.notifications.filter(function (n) {
718
733
  return n.id !== id;
@@ -758,8 +773,8 @@ var loadFilesSuccessUpdater = exports.loadFilesSuccessUpdater = function loadFil
758
773
  * @returns nextState
759
774
  * @public
760
775
  */
761
- var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref22) {
762
- var error = _ref22.error;
776
+ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref20) {
777
+ var error = _ref20.error;
763
778
  return addNotificationUpdater(_objectSpread(_objectSpread({}, state), {}, {
764
779
  loadFiles: _objectSpread(_objectSpread({}, state.loadFiles), {}, {
765
780
  fileLoading: false
@@ -812,8 +827,8 @@ var showDatasetTableUpdater = exports.showDatasetTableUpdater = function showDat
812
827
  * @returns nextState
813
828
  * @public
814
829
  */
815
- var setLocaleUpdater = exports.setLocaleUpdater = function setLocaleUpdater(state, _ref23) {
816
- var locale = _ref23.payload.locale;
830
+ var setLocaleUpdater = exports.setLocaleUpdater = function setLocaleUpdater(state, _ref21) {
831
+ var locale = _ref21.payload.locale;
817
832
  return _objectSpread(_objectSpread({}, state), {}, {
818
833
  locale: locale
819
834
  });
@@ -828,10 +843,10 @@ var setLocaleUpdater = exports.setLocaleUpdater = function setLocaleUpdater(stat
828
843
  * @returns nextState
829
844
  * @public
830
845
  */
831
- var togglePanelListViewUpdater = exports.togglePanelListViewUpdater = function togglePanelListViewUpdater(state, _ref24) {
832
- var _ref24$payload = _ref24.payload,
833
- panelId = _ref24$payload.panelId,
834
- listView = _ref24$payload.listView;
846
+ var togglePanelListViewUpdater = exports.togglePanelListViewUpdater = function togglePanelListViewUpdater(state, _ref22) {
847
+ var _ref22$payload = _ref22.payload,
848
+ panelId = _ref22$payload.panelId,
849
+ listView = _ref22$payload.listView;
835
850
  var stateProp = panelId === 'layer' ? 'layerPanelListView' : panelId === 'filter' ? 'filterPanelListView' : null;
836
851
  if (!stateProp || state[stateProp] === listView) {
837
852
  return state;
@@ -848,11 +863,11 @@ var togglePanelListViewUpdater = exports.togglePanelListViewUpdater = function t
848
863
  * @returns nextState
849
864
  * @public
850
865
  */
851
- var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref25) {
866
+ var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref23) {
852
867
  var _uiState$mapControls, _uiState$mapControls2;
853
- var config = _ref25.payload.config;
854
- var _ref26 = config || {},
855
- uiState = _ref26.uiState;
868
+ var config = _ref23.payload.config;
869
+ var _ref24 = config || {},
870
+ uiState = _ref24.uiState;
856
871
  if (!uiState) {
857
872
  return state;
858
873
  }
@@ -887,4 +902,4 @@ var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receive
887
902
  }
888
903
  return newState;
889
904
  };
890
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9sb2NhbGl6YXRpb24iLCJfdXRpbHMiLCJfY29tcG9zZXJIZWxwZXJzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMIiwiZXhwb3J0cyIsIkRFRkFVTFRfTU9EQUwiLCJBRERfREFUQV9JRCIsInVpU3RhdGVVcGRhdGVycyIsIkRFRkFVTFRfTUFQX0NPTlRST0xTX0ZFQVRVUkVTIiwic2hvdyIsImFjdGl2ZSIsImRpc2FibGVDbG9zZSIsImFjdGl2ZU1hcEluZGV4IiwiREVGQVVMVF9NQVBfTEVHRU5EX0NPTlRST0wiLCJkaXNhYmxlRWRpdCIsIkRFRkFVTFRfTUFQX0NPTlRST0xTIiwiTUFQX0NPTlRST0xTIiwicmVkdWNlIiwiZmluYWwiLCJjdXJyZW50IiwibWFwTGVnZW5kIiwiREVGQVVMVF9FWFBPUlRfSU1BR0UiLCJyYXRpbyIsIkVYUE9SVF9JTUdfUkFUSU9TIiwiU0NSRUVOIiwicmVzb2x1dGlvbiIsIlJFU09MVVRJT05TIiwiT05FX1giLCJsZWdlbmQiLCJtYXBIIiwibWFwVyIsImltYWdlU2l6ZSIsInpvb21PZmZzZXQiLCJzY2FsZSIsImltYWdlVyIsImltYWdlSCIsImNlbnRlciIsImltYWdlRGF0YVVyaSIsImV4cG9ydGluZyIsInByb2Nlc3NpbmciLCJlcnJvciIsImVzY2FwZVhodG1sRm9yV2VicGFjayIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiREVGQVVMVF9MT0FEX0ZJTEVTIiwiZmlsZUxvYWRpbmciLCJERUZBVUxUX0VYUE9SVF9EQVRBIiwic2VsZWN0ZWREYXRhc2V0IiwiZGF0YVR5cGUiLCJFWFBPUlRfREFUQV9UWVBFIiwiQ1NWIiwiZmlsdGVyZWQiLCJERUZBVUxUX05PVElGSUNBVElPTlMiLCJERUZBVUxUX0VYUE9SVF9IVE1MIiwiZXhwb3J0TWFwYm94QWNjZXNzVG9rZW4iLCJ1c2VyTWFwYm94VG9rZW4iLCJtb2RlIiwiRVhQT1JUX0hUTUxfTUFQX01PREVTIiwiUkVBRCIsIkRFRkFVTFRfRVhQT1JUX0pTT04iLCJoYXNEYXRhIiwiREVGQVVMVF9FWFBPUlRfTUFQIiwiRVhQT1JUX01BUF9GT1JNQVRTIiwiSFRNTCIsIkpTT04iLCJERUZBVUxUX0VYUE9SVF9WSURFTyIsIm1lZGlhVHlwZSIsImNhbWVyYVByZXNldCIsImZpbGVOYW1lIiwiZHVyYXRpb25NcyIsInN3aXBlU3RhcnRQY3QiLCJzd2lwZUVuZFBjdCIsInN3aXBlRWFzaW5nIiwiSU5JVElBTF9VSV9TVEFURSIsInJlYWRPbmx5IiwiYWN0aXZlU2lkZVBhbmVsIiwiY3VycmVudE1vZGFsIiwiZGF0YXNldEtleVRvUmVtb3ZlIiwidmlzaWJsZURyb3Bkb3duIiwiZXhwb3J0SW1hZ2UiLCJleHBvcnREYXRhIiwiZXhwb3J0TWFwIiwiZXhwb3J0VmlkZW8iLCJtYXBDb250cm9scyIsIm5vdGlmaWNhdGlvbnMiLCJsb2FkRmlsZXMiLCJsb2NhbGUiLCJMT0NBTEVfQ09ERVMiLCJlbiIsImxheWVyUGFuZWxMaXN0VmlldyIsImZpbHRlclBhbmVsTGlzdFZpZXciLCJpc1NpZGVQYW5lbENsb3NlQnV0dG9uVmlzaWJsZSIsImluaXRVaVN0YXRlVXBkYXRlciIsInN0YXRlIiwiYWN0aW9uIiwicGF5bG9hZCIsImluaXRpYWxVaVN0YXRlIiwidG9nZ2xlU2lkZVBhbmVsVXBkYXRlciIsIl9yZWYiLCJpZCIsInRvZ2dsZU1vZGFsVXBkYXRlciIsIl9yZWYyIiwic2hvd0V4cG9ydERyb3Bkb3duVXBkYXRlciIsIl9yZWYzIiwiaGlkZUV4cG9ydERyb3Bkb3duVXBkYXRlciIsInRvZ2dsZVNpZGVQYW5lbENsb3NlQnV0dG9uVXBkYXRlciIsIl9yZWY0IiwidG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIiLCJfcmVmNSIsIl9zdGF0ZSRtYXBDb250cm9scyRwYSIsIl9zdGF0ZSRtYXBDb250cm9scyRkciIsIl9yZWY1JHBheWxvYWQiLCJwYW5lbElkIiwiX3JlZjUkcGF5bG9hZCRpbmRleCIsImluZGV4IiwidXBkYXRlZFN0YXRlIiwicGFuZWxUb0RlYWN0aXZhdGUiLCJlZmZlY3QiLCJhaUFzc2lzdGFudCIsImRyb3Bkb3duVG9EZWFjdGl2YXRlIiwibWFwRHJhdyIsIm1hcExvY2FsZSIsInNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlciIsIl9yZWY2IiwiX3N0YXRlJG1hcENvbnRyb2xzIiwiX3JlZjYkcGF5bG9hZCIsIkJvb2xlYW4iLCJzZXRNYXBDb250cm9sU2V0dGluZ3NVcGRhdGVyIiwiX3JlZjciLCJfc3RhdGUkbWFwQ29udHJvbHMyIiwiX3JlZjckcGF5bG9hZCIsInNldHRpbmdzIiwibWFwQ29udHJvbCIsIm9wZW5EZWxldGVNb2RhbFVwZGF0ZXIiLCJfcmVmOCIsIkRFTEVURV9EQVRBX0lEIiwic2V0RXhwb3J0SW1hZ2VTZXR0aW5nVXBkYXRlciIsIl9yZWY5IiwibmV3U2V0dGluZyIsInVwZGF0ZWQiLCJjYWxjdWxhdGVFeHBvcnRJbWFnZVNpemUiLCJzZXRFeHBvcnRJbWFnZURhdGFVcmlVcGRhdGVyIiwiX3JlZjEwIiwiZGF0YVVyaSIsInNldEV4cG9ydEltYWdlRXJyb3JVcGRhdGVyIiwiX3JlZjExIiwiY2xlYW51cEV4cG9ydEltYWdlVXBkYXRlciIsInNldEV4cG9ydFZpZGVvU2V0dGluZ1VwZGF0ZXIiLCJfcmVmMTIiLCJzdGFydEV4cG9ydGluZ0ltYWdlVXBkYXRlciIsIl9yZWYxMyIsIl9yZWYxMyRwYXlsb2FkIiwib3B0aW9ucyIsImltYWdlU2V0dGluZ3MiLCJjb21wb3NlXyIsImFwcGx5XyIsInBheWxvYWRfIiwic2V0RXhwb3J0U2VsZWN0ZWREYXRhc2V0VXBkYXRlciIsIl9yZWYxNCIsImRhdGFzZXQiLCJzZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXIiLCJfcmVmMTUiLCJzZXRFeHBvcnRGaWx0ZXJlZFVwZGF0ZXIiLCJfcmVmMTYiLCJzZXRFeHBvcnREYXRhVXBkYXRlciIsInNldFVzZXJNYXBib3hBY2Nlc3NUb2tlblVwZGF0ZXIiLCJfcmVmMTciLCJzZXRFeHBvcnRNYXBGb3JtYXRVcGRhdGVyIiwiX3JlZjE4IiwiZm9ybWF0Iiwic2V0RXhwb3J0TWFwSFRNTE1vZGVVcGRhdGVyIiwiX3JlZjE5IiwiYWRkTm90aWZpY2F0aW9uVXBkYXRlciIsIl9yZWYyMCIsIm9sZE5vdGlmaWNhdGlvbnMiLCJwYXlsb2FkSWQiLCJub3RpZmljYXRpb25Ub1VwZGF0ZSIsImZpbmQiLCJuIiwibWFwIiwiY3JlYXRlTm90aWZpY2F0aW9uIiwiY291bnQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwicmVtb3ZlTm90aWZpY2F0aW9uVXBkYXRlciIsIl9yZWYyMSIsImxvYWRGaWxlc1VwZGF0ZXIiLCJsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsImxvYWRGaWxlc0VyclVwZGF0ZXIiLCJfcmVmMjIiLCJlcnJvck5vdGlmaWNhdGlvbiIsIm1lc3NhZ2UiLCJ0b3BpYyIsIkRFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUyIsImdsb2JhbCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImVudHJpZXMiLCJhY2MiLCJlbnRyeSIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwiREFUQV9UQUJMRV9JRCIsInNldExvY2FsZVVwZGF0ZXIiLCJfcmVmMjMiLCJ0b2dnbGVQYW5lbExpc3RWaWV3VXBkYXRlciIsIl9yZWYyNCIsIl9yZWYyNCRwYXlsb2FkIiwibGlzdFZpZXciLCJzdGF0ZVByb3AiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYyNSIsIl91aVN0YXRlJG1hcENvbnRyb2xzIiwiX3VpU3RhdGUkbWFwQ29udHJvbHMyIiwiY29uZmlnIiwiX3JlZjI2IiwidWlTdGF0ZSIsIm5ld1N0YXRlIiwiY3VycmVudExlZ2VuZCJdLCJzb3VyY2VzIjpbIi4uL3NyYy91aS1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1xuICBBRERfREFUQV9JRCxcbiAgREFUQV9UQUJMRV9JRCxcbiAgREVGQVVMVF9OT1RJRklDQVRJT05fVE9QSUNTLFxuICBERUxFVEVfREFUQV9JRCxcbiAgRVhQT1JUX0RBVEFfVFlQRSxcbiAgRVhQT1JUX0hUTUxfTUFQX01PREVTLFxuICBFWFBPUlRfSU1HX1JBVElPUyxcbiAgRVhQT1JUX01BUF9GT1JNQVRTLFxuICBSRVNPTFVUSU9OUyxcbiAgTUFQX0NPTlRST0xTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TE9DQUxFX0NPREVTfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge1xuICBjcmVhdGVOb3RpZmljYXRpb24sXG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBjYWxjdWxhdGVFeHBvcnRJbWFnZVNpemUsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtwYXlsb2FkXywgYXBwbHlfLCBjb21wb3NlX30gZnJvbSAnLi9jb21wb3Nlci1oZWxwZXJzJztcblxuaW1wb3J0IHtcbiAgQWN0aW9uVHlwZXMsXG4gIEtlcGxlckdsSW5pdFBheWxvYWQsXG4gIExvYWRGaWxlc0VyclVwZGF0ZXJBY3Rpb24sXG4gIFJlY2VpdmVNYXBDb25maWdQYXlsb2FkLFxuICBVSVN0YXRlQWN0aW9uc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtcbiAgRXhwb3J0RGF0YSxcbiAgRXhwb3J0SHRtbCxcbiAgRXhwb3J0SnNvbixcbiAgRXhwb3J0TWFwLFxuICBFeHBvcnRJbWFnZSxcbiAgRXhwb3J0VmlkZW8sXG4gIE1hcENvbnRyb2xJdGVtLFxuICBNYXBDb250cm9scyxcbiAgVWlTdGF0ZVxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQUNUSVZFX1NJREVfUEFORUwgPSAnbGF5ZXInO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTU9EQUwgPSBBRERfREFUQV9JRDtcblxuLyoqXG4gKiBVcGRhdGVycyBmb3IgYHVpU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3VpU3RhdGVVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICAvLyBjbGljayBidXR0b24gdG8gY2xvc2Ugc2lkZSBwYW5lbFxuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHVpU3RhdGU6IHVpU3RhdGVVcGRhdGVycy50b2dnbGVTaWRlUGFuZWxVcGRhdGVyKFxuICogICAgICAgICAgICAgICB1aVN0YXRlLCB7cGF5bG9hZDogbnVsbH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHVpU3RhdGVVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5jb25zdCBERUZBVUxUX01BUF9DT05UUk9MU19GRUFUVVJFUzogTWFwQ29udHJvbEl0ZW0gPSB7XG4gIHNob3c6IHRydWUsXG4gIGFjdGl2ZTogZmFsc2UsXG4gIGRpc2FibGVDbG9zZTogZmFsc2UsXG4gIC8vIGRlZmluZXMgd2hpY2ggbWFwIGluZGV4IHVzZXJzIGFyZSBpbnRlcmFjdGluZyB3aXRoICh0aHJvdWdoIG1hcCBjb250cm9scylcbiAgYWN0aXZlTWFwSW5kZXg6IDBcbn07XG5cbmNvbnN0IERFRkFVTFRfTUFQX0xFR0VORF9DT05UUk9MID0ge1xuICAuLi5ERUZBVUxUX01BUF9DT05UUk9MU19GRUFUVVJFUyxcbiAgZGlzYWJsZUVkaXQ6IGZhbHNlXG59O1xuLyoqXG4gKiBBIGxpc3Qgb2YgbWFwIGNvbnRyb2wgdmlzaWJpbGl0eSBhbmQgd2hldGhlciBpcyBpdCBhY3RpdmUuXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB2aXNpYmxlTGF5ZXJzIERlZmF1bHQ6IGB7c2hvdzogdHJ1ZSwgYWN0aXZlOiBmYWxzZX1gXG4gKiBAcHJvcGVydHkgbWFwTGVnZW5kIERlZmF1bHQ6IGB7c2hvdzogdHJ1ZSwgYWN0aXZlOiBmYWxzZX1gXG4gKiBAcHJvcGVydHkgdG9nZ2xlM2QgRGVmYXVsdDogYHtzaG93OiB0cnVlfWBcbiAqIEBwcm9wZXJ0eSBzcGxpdE1hcCBEZWZhdWx0OiBge3Nob3c6IHRydWV9YFxuICogQHByb3BlcnR5IG1hcERyYXcgRGVmYXVsdDogYHtzaG93OiB0cnVlLCBhY3RpdmU6IGZhbHNlfWBcbiAqIEBwcm9wZXJ0eSBtYXBMb2NhbGUgRGVmYXVsdDogYHtzaG93OiBmYWxzZSwgYWN0aXZlOiBmYWxzZX1gXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUF9DT05UUk9MUzogTWFwQ29udHJvbHMgPSAoXG4gIE9iamVjdC5rZXlzKE1BUF9DT05UUk9MUykgYXMgQXJyYXk8a2V5b2YgdHlwZW9mIE1BUF9DT05UUk9MUz5cbikucmVkdWNlKFxuICAoZmluYWwsIGN1cnJlbnQpID0+ICh7XG4gICAgLi4uZmluYWwsXG4gICAgW2N1cnJlbnRdOlxuICAgICAgY3VycmVudCA9PT0gTUFQX0NPTlRST0xTLm1hcExlZ2VuZFxuICAgICAgICA/IERFRkFVTFRfTUFQX0xFR0VORF9DT05UUk9MXG4gICAgICAgIDogREVGQVVMVF9NQVBfQ09OVFJPTFNfRkVBVFVSRVNcbiAgfSksXG4gIHt9IGFzIE1hcENvbnRyb2xzXG4pO1xuXG4vKipcbiAqIERlZmF1bHQgaW1hZ2UgZXhwb3J0IGNvbmZpZ1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgcmF0aW8gRGVmYXVsdDogYCdTQ1JFRU4nYCxcbiAqIEBwcm9wZXJ0eSByZXNvbHV0aW9uIERlZmF1bHQ6IGAnT05FX1gnYCxcbiAqIEBwcm9wZXJ0eSBsZWdlbmQgRGVmYXVsdDogYGZhbHNlYCxcbiAqIEBwcm9wZXJ0eSBtYXBIIERlZmF1bHQ6IDAsXG4gKiBAcHJvcGVydHkgbWFwVyBEZWZhdWx0OiAwLFxuICogQHByb3BlcnR5IGltYWdlU2l6ZSBEZWZhdWx0OiB7em9vbU9mZnNldDogMCwgc2NhbGU6IDEsIGltYWdlVzogMCwgaW1hZ2VIOiAwfSxcbiAqIEBwcm9wZXJ0eSBpbWFnZURhdGFVcmkgRGVmYXVsdDogYCcnYCxcbiAqIEBwcm9wZXJ0eSBleHBvcnRpbmcgRGVmYXVsdDogYGZhbHNlYFxuICogQHByb3BlcnR5IGVycm9yIERlZmF1bHQ6IGBmYWxzZWBcbiAqIEBwcm9wZXJ0eSBlc2NhcGVYaHRtbEZvcldlYnBhY2sgRGVmYXVsdDogZnJvbSBhcHBsaWNhdGlvbiBjb25maWcgKGF1dG8tZGV0ZWN0ZWQ6IGB0cnVlYCBmb3Igd2VicGFjaylcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX0lNQUdFOiBFeHBvcnRJbWFnZSA9IHtcbiAgLy8gdXNlciBvcHRpb25zXG4gIHJhdGlvOiBFWFBPUlRfSU1HX1JBVElPUy5TQ1JFRU4sXG4gIHJlc29sdXRpb246IFJFU09MVVRJT05TLk9ORV9YLFxuICBsZWdlbmQ6IGZhbHNlLFxuICBtYXBIOiAwLFxuICBtYXBXOiAwLFxuICBpbWFnZVNpemU6IHtcbiAgICB6b29tT2Zmc2V0OiAwLFxuICAgIHNjYWxlOiAxLFxuICAgIGltYWdlVzogMCxcbiAgICBpbWFnZUg6IDBcbiAgfSxcbiAgLy8gd2hlbiB0aGlzIGlzIHNldCB0byB0cnVlLCB0aGUgbW9jayBtYXAgdmlld3BvcnQgd2lsbCBtb3ZlIHRvIHRoZSBjZW50ZXIgb2YgZGF0YVxuICBjZW50ZXI6IGZhbHNlLFxuICAvLyBleHBvcnRpbmcgc3RhdGVcbiAgaW1hZ2VEYXRhVXJpOiAnJyxcbiAgLy8gZXhwb3J0aW5nOiB1c2VkIHRvIGF0dGFjaCBwbG90LWNvbnRhaW5lciB0byBkb21cbiAgZXhwb3J0aW5nOiBmYWxzZSxcbiAgLy8gcHJvY2Vzc2luZzogdXNlZCBhcyBsb2FkaW5nIGluZGljYXRvciB3aGVuIGV4cG9ydCBpbWFnZSBpcyBiZWluZyBwcm9kdWNlZFxuICBwcm9jZXNzaW5nOiBmYWxzZSxcbiAgZXJyb3I6IGZhbHNlLFxuICAvLyB3aGV0aGVyIHRvIGFwcGx5IGZpeCBmb3IgdWdsaWZ5IGVycm9yIGluIGRvbS10by1pbWFnZSAoZnJvbSBhcHBsaWNhdGlvbiBjb25maWcsIGF1dG8tZGV0ZWN0cyBidWlsZCB0b29sKVxuICBlc2NhcGVYaHRtbEZvcldlYnBhY2s6IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZXNjYXBlWGh0bWxGb3JXZWJwYWNrXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9MT0FEX0ZJTEVTID0ge1xuICBmaWxlTG9hZGluZzogZmFsc2Vcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGBleHBvcnREYXRhYCBzZXR0aW5nc1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgc2VsZWN0ZWREYXRhc2V0IERlZmF1bHQ6IGAnJ2AsXG4gKiBAcHJvcGVydHkgZGF0YVR5cGUgRGVmYXVsdDogYCdjc3YnYCxcbiAqIEBwcm9wZXJ0eSBmaWx0ZXJlZCBEZWZhdWx0OiBgdHJ1ZWAsXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9EQVRBOiBFeHBvcnREYXRhID0ge1xuICBzZWxlY3RlZERhdGFzZXQ6ICcnLFxuICBkYXRhVHlwZTogRVhQT1JUX0RBVEFfVFlQRS5DU1YsXG4gIGZpbHRlcmVkOiB0cnVlXG59O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT1RJRklDQVRJT05TID0gW107XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgZXhwb3J0TWFwYm94QWNjZXNzVG9rZW4gLSBEZWZhdWx0OiBudWxsLCB0aGlzIGlzIHVzZWQgd2hlbiB3ZSBwcm92aWRlIGEgZGVmYXVsdCBtYXBib3ggdG9rZW4gZm9yIHVzZXJzIHRvIHRha2UgYWR2YW50YWdlIG9mXG4gKiBAcHJvcGVydHkgdXNlck1hcGJveFRva2VuIC0gRGVmYXVsdDogJycsIG1hcGJveCB0b2tlbiBwcm92aWRlZCBieSB1c2VyIHRocm91Z2ggaW5wdXQgZmllbGRcbiAqIEBwcm9wZXJ0eSBtb2RlIC0gRGVmYXVsdDogJ1JFQUQnLCByZWFkIG9ubHkgb3IgZWRpdGFibGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX0hUTUw6IEV4cG9ydEh0bWwgPSB7XG4gIGV4cG9ydE1hcGJveEFjY2Vzc1Rva2VuOiBudWxsLFxuICB1c2VyTWFwYm94VG9rZW46ICcnLFxuICBtb2RlOiBFWFBPUlRfSFRNTF9NQVBfTU9ERVMuUkVBRFxufTtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSBoYXNEYXRhIC0gRGVmYXVsdDogJ3RydWUnLFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfSlNPTjogRXhwb3J0SnNvbiA9IHtcbiAgaGFzRGF0YTogdHJ1ZVxufTtcblxuLyoqXG4gKiBFeHBvcnQgTWFwIENvbmZpZ1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgSFRNTCAtIERlZmF1bHQ6ICdERUZBVUxUX0VYUE9SVF9IVE1MJyxcbiAqIEBwcm9wZXJ0eSBKU09OIC0gRGVmYXVsdDogJ0RFRkFVTFRfRVhQT1JUX0pTT04nLFxuICogQHByb3BlcnR5IGZvcm1hdCAtIERlZmF1bHQ6ICdIVE1MJyxcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX01BUDogRXhwb3J0TWFwID0ge1xuICBbRVhQT1JUX01BUF9GT1JNQVRTLkhUTUxdOiBERUZBVUxUX0VYUE9SVF9IVE1MLFxuICBbRVhQT1JUX01BUF9GT1JNQVRTLkpTT05dOiBERUZBVUxUX0VYUE9SVF9KU09OLFxuICBmb3JtYXQ6IEVYUE9SVF9NQVBfRk9STUFUUy5IVE1MXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgZXhwb3J0VmlkZW9gIHNldHRpbmdzXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSBtZWRpYVR5cGUgRGVmYXVsdDogYCd3ZWJtJ2BcbiAqIEBwcm9wZXJ0eSBjYW1lcmFQcmVzZXQgRGVmYXVsdDogYCdOb25lJ2BcbiAqIEBwcm9wZXJ0eSBmaWxlTmFtZSBEZWZhdWx0OiBgJ2tlcGxlci5nbCdgXG4gKiBAcHJvcGVydHkgcmVzb2x1dGlvbiBEZWZhdWx0OiBgJzEyODB4NzIwJ2BcbiAqIEBwcm9wZXJ0eSBkdXJhdGlvbk1zIERlZmF1bHQ6IGAxMDAwYFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfVklERU86IEV4cG9ydFZpZGVvID0ge1xuICBtZWRpYVR5cGU6ICd3ZWJtJywgLy8gdXNlIHdlYm0gYXMgZGVmYXVsdCBhcyBnaWYgZXhwb3J0IHRlbmRzIHRvIGZyZWV6ZSBvbiBsYXJnZXIgcmVjb3JkaW5nc1xuICBjYW1lcmFQcmVzZXQ6ICdOb25lJyxcbiAgZmlsZU5hbWU6ICdrZXBsZXIuZ2wnLFxuICByZXNvbHV0aW9uOiAnMTI4MHg3MjAnLFxuICBkdXJhdGlvbk1zOiAxMDAwLFxuICBzd2lwZVN0YXJ0UGN0OiAwLFxuICBzd2lwZUVuZFBjdDogMTAwLFxuICBzd2lwZUVhc2luZzogJ2Vhc2UtaW4tb3V0J1xufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHVpU3RhdGVgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSByZWFkT25seSBEZWZhdWx0OiBgZmFsc2VgXG4gKiBAcHJvcGVydHkgYWN0aXZlU2lkZVBhbmVsIERlZmF1bHQ6IGAnbGF5ZXInYFxuICogQHByb3BlcnR5IGN1cnJlbnRNb2RhbCBEZWZhdWx0OiBgJ2FkZERhdGEnYFxuICogQHByb3BlcnR5IGRhdGFzZXRLZXlUb1JlbW92ZSBEZWZhdWx0OiBgbnVsbGBcbiAqIEBwcm9wZXJ0eSB2aXNpYmxlRHJvcGRvd24gRGVmYXVsdDogYG51bGxgXG4gKiBAcHJvcGVydHkgZXhwb3J0SW1hZ2UgRGVmYXVsdDogW2BERUZBVUxUX0VYUE9SVF9JTUFHRWBdKCNkZWZhdWx0X2V4cG9ydF9pbWFnZSlcbiAqIEBwcm9wZXJ0eSBleHBvcnREYXRhIERlZmF1bHQ6IFtgREVGQVVMVF9FWFBPUlRfREFUQWBdKCNkZWZhdWx0X2V4cG9ydF9kYXRhKVxuICogQHByb3BlcnR5IGV4cG9ydE1hcCBEZWZhdWx0OiBbYERFRkFVTFRfRVhQT1JUX01BUGBdKCNkZWZhdWx0X2V4cG9ydF9tYXApXG4gKiBAcHJvcGVydHkgbWFwQ29udHJvbHMgRGVmYXVsdDogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEBwcm9wZXJ0eSBub3RpZmljYXRpb25zIERlZmF1bHQ6IGBbXWBcbiAqIEBwcm9wZXJ0eSBub3RpZmljYXRpb25zIERlZmF1bHQ6IGBbXWBcbiAqIEBwcm9wZXJ0eSBsb2FkRmlsZXNcbiAqIEBwcm9wZXJ0eSBpc1NpZGVQYW5lbENsb3NlQnV0dG9uVmlzaWJsZSBEZWZhdWx0OiBgdHJ1ZWBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVUlfU1RBVEU6IFVpU3RhdGUgPSB7XG4gIHJlYWRPbmx5OiBmYWxzZSxcbiAgYWN0aXZlU2lkZVBhbmVsOiBERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMLFxuICBjdXJyZW50TW9kYWw6IERFRkFVTFRfTU9EQUwsXG4gIGRhdGFzZXRLZXlUb1JlbW92ZTogbnVsbCxcbiAgdmlzaWJsZURyb3Bkb3duOiBudWxsLFxuICAvLyBleHBvcnQgaW1hZ2UgbW9kYWwgdWlcbiAgZXhwb3J0SW1hZ2U6IERFRkFVTFRfRVhQT1JUX0lNQUdFLFxuICAvLyBleHBvcnQgZGF0YSBtb2RhbCB1aVxuICBleHBvcnREYXRhOiBERUZBVUxUX0VYUE9SVF9EQVRBLFxuICAvLyBodG1sIGV4cG9ydFxuICBleHBvcnRNYXA6IERFRkFVTFRfRVhQT1JUX01BUCxcbiAgLy8gZXhwb3J0IHZpZGVvIG1vZGFsIHVpXG4gIGV4cG9ydFZpZGVvOiBERUZBVUxUX0VYUE9SVF9WSURFTyxcbiAgLy8gbWFwIGNvbnRyb2wgcGFuZWxzXG4gIG1hcENvbnRyb2xzOiBERUZBVUxUX01BUF9DT05UUk9MUyxcbiAgLy8gdWkgbm90aWZpY2F0aW9uc1xuICBub3RpZmljYXRpb25zOiBERUZBVUxUX05PVElGSUNBVElPTlMsXG4gIC8vIGxvYWQgZmlsZXNcbiAgbG9hZEZpbGVzOiBERUZBVUxUX0xPQURfRklMRVMsXG4gIC8vIExvY2FsZSBvZiB0aGUgVUlcbiAgbG9jYWxlOiBMT0NBTEVfQ09ERVMuZW4sXG4gIGxheWVyUGFuZWxMaXN0VmlldzogJ2xpc3QnLFxuICBmaWx0ZXJQYW5lbExpc3RWaWV3OiAnbGlzdCcsXG4gIGlzU2lkZVBhbmVsQ2xvc2VCdXR0b25WaXNpYmxlOiB0cnVlXG59O1xuXG4vKiBVcGRhdGVycyAqL1xuLyoqXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0VWlTdGF0ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICBhY3Rpb246IHtcbiAgICB0eXBlPzogKHR5cGVvZiBBY3Rpb25UeXBlcylbJ0lOSVQnXTtcbiAgICBwYXlsb2FkOiBLZXBsZXJHbEluaXRQYXlsb2FkO1xuICB9XG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICAuLi4oYWN0aW9uLnBheWxvYWQgfHwge30pLmluaXRpYWxVaVN0YXRlXG59KTtcblxuLyoqXG4gKiBUb2dnbGUgYWN0aXZlIHNpZGUgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBpZCBvZiBzaWRlIHBhbmVsIHRvIGJlIHNob3duLCBvbmUgb2YgYGxheWVyYCwgYGZpbHRlcmAsIGBpbnRlcmFjdGlvbmAsIGBtYXBgLiBjbG9zZSBzaWRlIHBhbmVsIGlmIGBudWxsYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTaWRlUGFuZWxVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGlkfTogVUlTdGF0ZUFjdGlvbnMuVG9nZ2xlU2lkZVBhbmVsVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIHJldHVybiBpZCA9PT0gc3RhdGUuYWN0aXZlU2lkZVBhbmVsXG4gICAgPyBzdGF0ZVxuICAgIDoge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYWN0aXZlU2lkZVBhbmVsOiBpZFxuICAgICAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBhbmQgaGlkZSBtb2RhbCBkaWFsb2dcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbWFjdGlvbi5wYXlsb2FkIGlkIG9mIG1vZGFsIHRvIGJlIHNob3duLCBudWxsIHRvIGhpZGUgbW9kYWxzLiBPbmUgb2Y6XG4gKiAgLSBbYERBVEFfVEFCTEVfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNkYXRhX3RhYmxlX2lkKVxuICogIC0gW2BERUxFVEVfREFUQV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2RlbGV0ZV9kYXRhX2lkKVxuICogIC0gW2BBRERfREFUQV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2FkZF9kYXRhX2lkKVxuICogIC0gW2BFWFBPUlRfSU1BR0VfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNleHBvcnRfaW1hZ2VfaWQpXG4gKiAgLSBbYEVYUE9SVF9EQVRBX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjZXhwb3J0X2RhdGFfaWQpXG4gKiAgLSBbYEFERF9NQVBfU1RZTEVfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNhZGRfbWFwX3N0eWxlX2lkKVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVNb2RhbFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogaWR9OiBVSVN0YXRlQWN0aW9ucy5Ub2dnbGVNb2RhbFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGN1cnJlbnRNb2RhbDogaWRcbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgc2lkZSBwYW5lbCBoZWFkZXIgZHJvcGRvd24sIGFjdGl2YXRlZCBieSBjbGlja2luZyB0aGUgc2hhcmUgbGluayBvbiB0b3Agb2YgdGhlIHNpZGUgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dFeHBvcnREcm9wZG93blVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogaWR9OiBVSVN0YXRlQWN0aW9ucy5TaG93RXhwb3J0RHJvcGRvd25VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICB2aXNpYmxlRHJvcGRvd246IGlkXG59KTtcblxuLyoqXG4gKiBIaWRlIHNpZGUgcGFuZWwgaGVhZGVyIGRyb3Bkb3duLCBhY3RpdmF0ZWQgYnkgY2xpY2tpbmcgdGhlIHNoYXJlIGxpbmsgb24gdG9wIG9mIHRoZSBzaWRlIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBoaWRlRXhwb3J0RHJvcGRvd25VcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgdmlzaWJsZURyb3Bkb3duOiBudWxsXG59KTtcblxuLyoqXG4gKiBUb2dnbGUgc2lkZSBwYW5lbCBjbG9zZSBidXR0b24gb24gdG9wIGxlZnQgb2YgdGhlIHNpZGUgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNpZGVQYW5lbENsb3NlQnV0dG9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB7c2hvd319OiBVSVN0YXRlQWN0aW9ucy5Ub2dnbGVTaWRlUGFuZWxDbG9zZUJ1dHRvblVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGlzU2lkZVBhbmVsQ2xvc2VCdXR0b25WaXNpYmxlOiBzaG93XG59KTtcblxuLyoqXG4gKiBUb2dnbGUgYWN0aXZlIG1hcCBjb250cm9sIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIG1hcCBjb250cm9sIHBhbmVsIGlkLCBvbmUgb2YgdGhlIGtleXMgb2Y6IFtgREVGQVVMVF9NQVBfQ09OVFJPTFNgXSgjZGVmYXVsdF9tYXBfY29udHJvbHMpXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtwYW5lbElkLCBpbmRleCA9IDB9fTogVUlTdGF0ZUFjdGlvbnMuVG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBsZXQgdXBkYXRlZFN0YXRlID0gc3RhdGU7XG4gIC8vIFRoZSBlZmZlY3QgcGFuZWwgYW5kIGFpIGFzc2lzdGFudCBwYW5lbCBjYW4gbm90IGJlIGFjdGl2ZSBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIHNvIHdlIG5lZWQgdG8gZGVhY3RpdmF0ZSB0aGUgb3RoZXIgcGFuZWwgd2hlbiBvbmUgaXMgYWN0aXZhdGVkXG4gIGNvbnN0IHBhbmVsVG9EZWFjdGl2YXRlID1cbiAgICBwYW5lbElkID09PSBNQVBfQ09OVFJPTFMuZWZmZWN0XG4gICAgICA/IE1BUF9DT05UUk9MUy5haUFzc2lzdGFudFxuICAgICAgOiBwYW5lbElkID09PSBNQVBfQ09OVFJPTFMuYWlBc3Npc3RhbnRcbiAgICAgID8gTUFQX0NPTlRST0xTLmVmZmVjdFxuICAgICAgOiBudWxsO1xuXG4gIC8vIFRvIHRvIHRvZ2dsZSB0aGUgbWFwRHJhdyBhbmQgbWFwTG9jYWwgZHJvcGRvd25zXG4gIC8vIFdlIGhhdmUgdG8gZGVhY3RpdmF0ZSB0aGUgb3RoZXIgYWN0aXZlIGRyb3Bkb3duXG4gIGNvbnN0IGRyb3Bkb3duVG9EZWFjdGl2YXRlID1cbiAgICBwYW5lbElkID09PSBNQVBfQ09OVFJPTFMubWFwRHJhd1xuICAgICAgPyBNQVBfQ09OVFJPTFMubWFwTG9jYWxlXG4gICAgICA6IHBhbmVsSWQgPT09IE1BUF9DT05UUk9MUy5tYXBMb2NhbGVcbiAgICAgID8gTUFQX0NPTlRST0xTLm1hcERyYXdcbiAgICAgIDogbnVsbDtcblxuICAvLyBJZiB3ZSBuZWVkIHRvIGRlYWN0aXZhdGUgYSBjb21wZXRpbmcgcGFuZWwgYW5kIGl0J3MgY3VycmVudGx5IGFjdGl2ZVxuICBpZiAocGFuZWxUb0RlYWN0aXZhdGUgJiYgc3RhdGUubWFwQ29udHJvbHNbcGFuZWxUb0RlYWN0aXZhdGVdPy5hY3RpdmUpIHtcbiAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1hcENvbnRyb2xzOiB7XG4gICAgICAgIC4uLnVwZGF0ZWRTdGF0ZS5tYXBDb250cm9scyxcbiAgICAgICAgW3BhbmVsVG9EZWFjdGl2YXRlXToge1xuICAgICAgICAgIC4uLnVwZGF0ZWRTdGF0ZS5tYXBDb250cm9sc1twYW5lbFRvRGVhY3RpdmF0ZV0sXG4gICAgICAgICAgYWN0aXZlOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIElmIHdlIG5lZWQgdG8gZGVhY3RpdmF0ZSBhIGNvbXBldGluZyBkcm9wZG93biBhbmQgaXQncyBjdXJyZW50bHkgYWN0aXZlXG4gIGlmIChkcm9wZG93blRvRGVhY3RpdmF0ZSAmJiBzdGF0ZS5tYXBDb250cm9sc1tkcm9wZG93blRvRGVhY3RpdmF0ZV0/LmFjdGl2ZSkge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbWFwQ29udHJvbHM6IHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgICBbZHJvcGRvd25Ub0RlYWN0aXZhdGVdOiB7XG4gICAgICAgICAgLi4udXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzW2Ryb3Bkb3duVG9EZWFjdGl2YXRlXSxcbiAgICAgICAgICBhY3RpdmU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgbWFwQ29udHJvbHM6IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZS5tYXBDb250cm9scyxcbiAgICAgIFtwYW5lbElkXToge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUubWFwQ29udHJvbHNbcGFuZWxJZF0sXG4gICAgICAgIGFjdGl2ZTogIXVwZGF0ZWRTdGF0ZS5tYXBDb250cm9sc1twYW5lbElkXS5hY3RpdmUsXG4gICAgICAgIGFjdGl2ZU1hcEluZGV4OiBpbmRleFxuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlIG1hcCBjb250cm9sIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbWFwIGNvbnRyb2wgcGFuZWwgaWQsIG9uZSBvZiB0aGUga2V5cyBvZjogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwQ29udHJvbFZpc2liaWxpdHlVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtwYW5lbElkLCBzaG93fX06IFVJU3RhdGVBY3Rpb25zLnNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUubWFwQ29udHJvbHM/LltwYW5lbElkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwQ29udHJvbHM6IHtcbiAgICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgW3BhbmVsSWRdOiB7XG4gICAgICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdLFxuICAgICAgICBzaG93OiBCb29sZWFuKHNob3cpXG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGUgbWFwIGNvbnRyb2wgc2V0dGluZ3NcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbWFwIGNvbnRyb2wgcGFuZWwgaWQsIG9uZSBvZiB0aGUga2V5cyBvZjogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwQ29udHJvbFNldHRpbmdzVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB7cGFuZWxJZCwgc2V0dGluZ3N9fTogVUlTdGF0ZUFjdGlvbnMuc2V0TWFwQ29udHJvbFNldHRpbmdzVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGNvbnN0IG1hcENvbnRyb2wgPSBzdGF0ZS5tYXBDb250cm9scz8uW3BhbmVsSWRdO1xuICBpZiAoIW1hcENvbnRyb2wpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG1hcENvbnRyb2xzOiB7XG4gICAgICAuLi5zdGF0ZS5tYXBDb250cm9scyxcbiAgICAgIFtwYW5lbElkXTogey4uLm1hcENvbnRyb2wsIHNldHRpbmdzOiB7Li4ubWFwQ29udHJvbC5zZXR0aW5ncywgLi4uc2V0dGluZ3N9fVxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlIGFjdGl2ZSBtYXAgY29udHJvbCBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGRhdGFzZXQgaWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgb3BlbkRlbGV0ZU1vZGFsVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBkYXRhc2V0S2V5VG9SZW1vdmV9OiBVSVN0YXRlQWN0aW9ucy5PcGVuRGVsZXRlTW9kYWxVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBjdXJyZW50TW9kYWw6IERFTEVURV9EQVRBX0lELFxuICBkYXRhc2V0S2V5VG9SZW1vdmVcbn0pO1xuXG4vKipcbiAqIFNldCBgZXhwb3J0SW1hZ2UubGVnZW5kYCB0byBgdHJ1ZWAgb3IgYGZhbHNlYFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRJbWFnZVNldHRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IG5ld1NldHRpbmd9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRJbWFnZVNldHRpbmdVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgY29uc3QgdXBkYXRlZCA9IHsuLi5zdGF0ZS5leHBvcnRJbWFnZSwgLi4ubmV3U2V0dGluZ307XG4gIGNvbnN0IGltYWdlU2l6ZSA9IGNhbGN1bGF0ZUV4cG9ydEltYWdlU2l6ZSh1cGRhdGVkKSB8fCBzdGF0ZS5leHBvcnRJbWFnZS5pbWFnZVNpemU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBleHBvcnRJbWFnZToge1xuICAgICAgLi4udXBkYXRlZCxcbiAgICAgIGltYWdlU2l6ZVxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2V0IGBleHBvcnRJbWFnZS5zZXRFeHBvcnRJbWFnZURhdGFVcmlgIHRvIGEgaW1hZ2UgZGF0YVVyaVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGV4cG9ydCBpbWFnZSBkYXRhIHVyaVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRJbWFnZURhdGFVcmlVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGRhdGFVcml9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRJbWFnZURhdGFVcmlVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgaWYgKGRhdGFVcmkgPT09IHN0YXRlLmV4cG9ydEltYWdlLmltYWdlRGF0YVVyaSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGV4cG9ydEltYWdlOiB7XG4gICAgICAuLi5zdGF0ZS5leHBvcnRJbWFnZSxcbiAgICAgIHByb2Nlc3Npbmc6IGZhbHNlLFxuICAgICAgaW1hZ2VEYXRhVXJpOiBkYXRhVXJpXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRJbWFnZUVycm9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBlcnJvcn06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEltYWdlRXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRJbWFnZToge1xuICAgIC4uLnN0YXRlLmV4cG9ydEltYWdlLFxuICAgIHByb2Nlc3Npbmc6IGZhbHNlLFxuICAgIGVycm9yXG4gIH1cbn0pO1xuXG4vKipcbiAqIERlbGV0ZSBjYWNoZWQgZXhwb3J0IGltYWdlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjbGVhbnVwRXhwb3J0SW1hZ2VVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0SW1hZ2U6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRJbWFnZSxcbiAgICBleHBvcnRpbmc6IGZhbHNlLFxuICAgIGltYWdlRGF0YVVyaTogJycsXG4gICAgZXJyb3I6IGZhbHNlLFxuICAgIHByb2Nlc3Npbmc6IGZhbHNlLFxuICAgIGNlbnRlcjogZmFsc2VcbiAgfVxufSk7XG5cbi8qKlxuICogU2V0IGBleHBvcnRWaWRlb2Agc2V0dGluZ3M6IG1lZGlhVHlwZSwgY2FtZXJhUHJlc2V0LCBmaWxlTmFtZSwgcmVzb2x1dGlvbiwgZHVyYXRpb25Nc1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIG5ldyB2aWRlbyBleHBvcnQgc2V0dGluZ3NcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0VmlkZW9TZXR0aW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBuZXdTZXR0aW5nfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0VmlkZW9TZXR0aW5nVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0VmlkZW86IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRWaWRlbyxcbiAgICAuLi5uZXdTZXR0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIFN0YXJ0IGltYWdlIGV4cG9ydGluZyBmbG93XG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJucyB7VWlTdGF0ZX1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHN0YXJ0RXhwb3J0aW5nSW1hZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IG9wdGlvbnMgPSB7fX06IHtwYXlsb2FkOiBQYXJ0aWFsPEV4cG9ydEltYWdlPn1cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCBpbWFnZVNldHRpbmdzID0ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZXhwb3J0aW5nOiB0cnVlXG4gIH07XG5cbiAgcmV0dXJuIGNvbXBvc2VfKFtcbiAgICBjbGVhbnVwRXhwb3J0SW1hZ2VVcGRhdGVyLFxuICAgIGFwcGx5XyhzZXRFeHBvcnRJbWFnZVNldHRpbmdVcGRhdGVyLCBwYXlsb2FkXyhpbWFnZVNldHRpbmdzKSlcbiAgXSkoc3RhdGUpO1xufTtcblxuLyoqXG4gKiBTZXQgc2VsZWN0ZWQgZGF0YXNldCBmb3IgZXhwb3J0XG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgZGF0YXNldCBpZFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRTZWxlY3RlZERhdGFzZXRVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGRhdGFzZXR9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRTZWxlY3RlZERhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnREYXRhOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0RGF0YSxcbiAgICBzZWxlY3RlZERhdGFzZXQ6IGRhdGFzZXRcbiAgfVxufSk7XG5cbi8qKlxuICogU2V0IGRhdGEgZm9ybWF0IGZvciBleHBvcnRpbmcgZGF0YVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIG9uZSBvZiBgJ3RleHQvY3N2J2BcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0RGF0YVR5cGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGRhdGFUeXBlfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0RGF0YVR5cGVVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnREYXRhOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0RGF0YSxcbiAgICBkYXRhVHlwZVxuICB9XG59KTtcblxuLyoqXG4gKiBXaGV0aGVyIHRvIGV4cG9ydCBmaWx0ZXJlZCBkYXRhLCBgdHJ1ZWAgb3IgYGZhbHNlYFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEZpbHRlcmVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBmaWx0ZXJlZH06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEZpbHRlcmVkVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0RGF0YToge1xuICAgIC4uLnN0YXRlLmV4cG9ydERhdGEsXG4gICAgZmlsdGVyZWRcbiAgfVxufSk7XG5cbi8qKlxuICogV2hldGhlciB0byBpbmNsdWRpbmcgZGF0YSBpbiBtYXAgY29uZmlnLCB0b2dnbGUgYmV0d2VlbiBgdHJ1ZWAgb3IgYGZhbHNlYFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnREYXRhVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydE1hcDoge1xuICAgIC4uLnN0YXRlLmV4cG9ydE1hcCxcbiAgICBbRVhQT1JUX01BUF9GT1JNQVRTLkpTT05dOiB7XG4gICAgICAuLi5zdGF0ZS5leHBvcnRNYXBbRVhQT1JUX01BUF9GT1JNQVRTLkpTT05dLFxuICAgICAgaGFzRGF0YTogIXN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl0uaGFzRGF0YVxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogd2hldGhlciB0byBleHBvcnQgYSBtYXBib3ggYWNjZXNzIHRvIEhUTUwgc2luZ2xlIHBhZ2VcbiAqIEBwYXJhbSBzdGF0ZSAtIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFVzZXJNYXBib3hBY2Nlc3NUb2tlblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogdXNlck1hcGJveFRva2VufTogVUlTdGF0ZUFjdGlvbnMuU2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF06IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF0sXG4gICAgICB1c2VyTWFwYm94VG9rZW5cbiAgICB9XG4gIH1cbn0pO1xuXG4vKipcbiAqIFNldHMgdGhlIGV4cG9ydCBtYXAgZm9ybWF0XG4gKiBAcGFyYW0gc3RhdGUgLSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBmb3JtYXQgdG8gdXNlIHRvIGV4cG9ydCB0aGUgbWFwIGludG9cbiAqIEByZXR1cm4gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRNYXBGb3JtYXRVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGZvcm1hdH06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydE1hcEZvcm1hdFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydE1hcDoge1xuICAgIC4uLnN0YXRlLmV4cG9ydE1hcCxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgZm9ybWF0XG4gIH1cbn0pO1xuXG4vKipcbiAqIFNldCB0aGUgZXhwb3J0IGh0bWwgbWFwIG1vZGVcbiAqIEBwYXJhbSBzdGF0ZSAtIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIHRvIGJlIHNldCAoYXZhaWxhYmxlIG1vZGVzOiBFWFBPUlRfSFRNTF9NQVBfTU9ERVMpXG4gKiBAcmV0dXJuIG5leHRTdGF0ZVxuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0TWFwSFRNTE1vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IG1vZGV9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRIVE1MTWFwTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydE1hcDoge1xuICAgIC4uLnN0YXRlLmV4cG9ydE1hcCxcbiAgICBbRVhQT1JUX01BUF9GT1JNQVRTLkhUTUxdOiB7XG4gICAgICAuLi5zdGF0ZS5leHBvcnRNYXBbRVhQT1JUX01BUF9GT1JNQVRTLkhUTUxdLFxuICAgICAgbW9kZVxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogQWRkcyBhIG5ldyBub3RpZmljYXRpb24uXG4gKiBVcGRhdGVzIGEgbm90aWZpY2F0aW9uIGluIGNhc2Ugb2YgbWF0Y2hpbmcgaWRzLlxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIFBhcmFtcyBvZiBhIG5vdGlmaWNhdGlvblxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGROb3RpZmljYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWR9OiBVSVN0YXRlQWN0aW9ucy5BZGROb3RpZmljYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgY29uc3Qgb2xkTm90aWZpY2F0aW9ucyA9IHN0YXRlLm5vdGlmaWNhdGlvbnMgfHwgW107XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgY29uc3QgcGF5bG9hZElkID0gcGF5bG9hZD8uaWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRvVXBkYXRlID0gcGF5bG9hZElkID8gb2xkTm90aWZpY2F0aW9ucy5maW5kKG4gPT4gbi5pZCA9PT0gcGF5bG9hZElkKSA6IG51bGw7XG5cbiAgbGV0IG5vdGlmaWNhdGlvbnM7XG4gIGlmIChub3RpZmljYXRpb25Ub1VwZGF0ZSkge1xuICAgIG5vdGlmaWNhdGlvbnMgPSBvbGROb3RpZmljYXRpb25zLm1hcChuID0+XG4gICAgICBuLmlkID09PSBwYXlsb2FkSWQgPyBjcmVhdGVOb3RpZmljYXRpb24oey4uLnBheWxvYWQsIGNvdW50OiBuLmNvdW50ICsgMX0pIDogblxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgbm90aWZpY2F0aW9ucyA9IFsuLi5vbGROb3RpZmljYXRpb25zLCBjcmVhdGVOb3RpZmljYXRpb24ocGF5bG9hZCldO1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgbm90aWZpY2F0aW9uc307XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIG5vdGlmaWNhdGlvblxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGlkIG9mIHRoZSBub3RpZmljYXRpb24gdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVOb3RpZmljYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGlkfTogVUlTdGF0ZUFjdGlvbnMuUmVtb3ZlTm90aWZpY2F0aW9uVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbm90aWZpY2F0aW9uczogc3RhdGUubm90aWZpY2F0aW9ucy5maWx0ZXIobiA9PiBuLmlkICE9PSBpZClcbn0pO1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gZmlsZSBsb2FkaW5nIGJlZ2luXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsb2FkRmlsZXM6IHtcbiAgICAuLi5zdGF0ZS5sb2FkRmlsZXMsXG4gICAgZmlsZUxvYWRpbmc6IHRydWVcbiAgfVxufSk7XG5cbi8qKlxuICogSGFuZGxlcyBsb2FkaW5nIGZpbGUgc3VjY2VzcyBhbmQgc2V0IGZpbGVMb2FkaW5nIHByb3BlcnR5IHRvIGZhbHNlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbG9hZEZpbGVzOiB7XG4gICAgLi4uc3RhdGUubG9hZEZpbGVzLFxuICAgIGZpbGVMb2FkaW5nOiBmYWxzZVxuICB9XG59KTtcblxuLyoqXG4gKiBIYW5kbGVzIGxvYWQgZmlsZSBlcnJvciBhbmQgc2V0IGZpbGVMb2FkaW5nIHByb3BlcnR5IHRvIGZhbHNlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24uZXJyb3JcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzRXJyVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSwge2Vycm9yfTogTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvbik6IFVpU3RhdGUgPT5cbiAgYWRkTm90aWZpY2F0aW9uVXBkYXRlcihcbiAgICB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxvYWRGaWxlczoge1xuICAgICAgICAuLi5zdGF0ZS5sb2FkRmlsZXMsXG4gICAgICAgIGZpbGVMb2FkaW5nOiBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgcGF5bG9hZDogZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICBtZXNzYWdlOiAoZXJyb3IgfHwge30pLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byB1cGxvYWQgZmlsZXMnLFxuICAgICAgICB0b3BpYzogREVGQVVMVF9OT1RJRklDQVRJT05fVE9QSUNTLmdsb2JhbFxuICAgICAgfSlcbiAgICB9XG4gICk7XG5cbi8qKlxuICogSGFuZGxlcyB0b2dnbGUgbWFwIHNwbGl0IGFuZCByZXNldCBhbGwgbWFwIGNvbnRyb2wgaW5kZXggdG8gMFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1hcENvbnRyb2xzOiBPYmplY3QuZW50cmllcyhzdGF0ZS5tYXBDb250cm9scykucmVkdWNlKFxuICAgIChhY2MsIGVudHJ5KSA9PiAoe1xuICAgICAgLi4uYWNjLFxuICAgICAgW2VudHJ5WzBdXToge1xuICAgICAgICAuLi5lbnRyeVsxXSxcbiAgICAgICAgYWN0aXZlTWFwSW5kZXg6IDBcbiAgICAgIH1cbiAgICB9KSxcbiAgICB7fSBhcyBNYXBDb250cm9sc1xuICApXG59KTtcblxuLyoqXG4gKiBUb2dnbGUgbW9kYWwgZGF0YVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PlxuICB0b2dnbGVNb2RhbFVwZGF0ZXIoc3RhdGUsIHtwYXlsb2FkOiBEQVRBX1RBQkxFX0lEfSk7XG5cbi8qKlxuICogU2V0IHRoZSBsb2NhbGUgb2YgdGhlIFVJXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWRcbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZC5sb2NhbGUgbG9jYWxlXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExvY2FsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDoge2xvY2FsZX19OiBVSVN0YXRlQWN0aW9ucy5TZXRMb2NhbGVVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsb2NhbGVcbn0pO1xuXG4vKipcbiAqIFRvZ2dsZSBsYXllciBwYW5lbCBsaXN0IHZpZXdcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBsYXllciBwYW5lbCBsaXN0VmlldyB2YWx1ZS4gQ2FuIGJlICdsaXN0JyBvciAnc29ydEJ5RGF0YXNldCdcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlUGFuZWxMaXN0Vmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDoge3BhbmVsSWQsIGxpc3RWaWV3fX06IFVJU3RhdGVBY3Rpb25zLlRvZ2dsZVBhbmVsTGlzdFZpZXdBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCBzdGF0ZVByb3AgPVxuICAgIHBhbmVsSWQgPT09ICdsYXllcidcbiAgICAgID8gJ2xheWVyUGFuZWxMaXN0VmlldydcbiAgICAgIDogcGFuZWxJZCA9PT0gJ2ZpbHRlcidcbiAgICAgID8gJ2ZpbHRlclBhbmVsTGlzdFZpZXcnXG4gICAgICA6IG51bGw7XG4gIGlmICghc3RhdGVQcm9wIHx8IHN0YXRlW3N0YXRlUHJvcF0gPT09IGxpc3RWaWV3KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgW3N0YXRlUHJvcF06IGxpc3RWaWV3XG4gIH07XG59O1xuXG4vKipcbiAqIE1lcmdlIHJlY2VpdmVkIHVpIHN0YXRlIGNvbmZpZyB3aGVuIGxvYWRpbmcgYSBzYXZlZCBtYXBcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBzYXZlZCBtYXAgY29uZmlnIGB7bWFwU3R5bGUsIHZpc1N0YXRlLCBtYXBTdGF0ZSwgdWlTdGF0ZX1gXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWd9XG4gIH06IHtcbiAgICB0eXBlPzogKHR5cGVvZiBBY3Rpb25UeXBlcylbJ1JFQ0VJVkVfTUFQX0NPTkZJRyddO1xuICAgIHBheWxvYWQ6IFJlY2VpdmVNYXBDb25maWdQYXlsb2FkO1xuICB9XG4pOiBVaVN0YXRlID0+IHtcbiAgY29uc3Qge3VpU3RhdGV9ID0gY29uZmlnIHx8IHt9O1xuICBpZiAoIXVpU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAodWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5hY3RpdmUpIHtcbiAgICBjb25zdCBjdXJyZW50TGVnZW5kID0gbmV3U3RhdGUubWFwQ29udHJvbHMubWFwTGVnZW5kO1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBtYXBDb250cm9sczoge1xuICAgICAgICAuLi5uZXdTdGF0ZS5tYXBDb250cm9scyxcbiAgICAgICAgbWFwTGVnZW5kOiB7XG4gICAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgICAuLi5jdXJyZW50TGVnZW5kLFxuICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBhY3RpdmVNYXBJbmRleDogMFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGlmICh1aVN0YXRlLm1hcENvbnRyb2xzPy5tYXBMZWdlbmQ/LnNldHRpbmdzKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRNYXBDb250cm9sU2V0dGluZ3NVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBwYXlsb2FkOiB7cGFuZWxJZDogJ21hcExlZ2VuZCcsIHNldHRpbmdzOiB1aVN0YXRlLm1hcENvbnRyb2xzLm1hcExlZ2VuZC5zZXR0aW5nc31cbiAgICB9IGFzIFVJU3RhdGVBY3Rpb25zLnNldE1hcENvbnRyb2xTZXR0aW5nc1VwZGF0ZXJBY3Rpb24pO1xuICB9XG5cbiAgaWYgKHVpU3RhdGUubG9jYWxlKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRMb2NhbGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBwYXlsb2FkOiB7bG9jYWxlOiB1aVN0YXRlLmxvY2FsZX1cbiAgICB9IGFzIFVJU3RhdGVBY3Rpb25zLlNldExvY2FsZVVwZGF0ZXJBY3Rpb24pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBR0EsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBWUEsSUFBQUMsYUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBRixPQUFBO0FBTUEsSUFBQUcsZ0JBQUEsR0FBQUgsT0FBQTtBQUE4RCxTQUFBSSxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFBQUFBLENBQUEsT0FBQUYsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsT0FBQWEsT0FBQSxXQUFBZCxDQUFBLFFBQUFlLGdCQUFBLGFBQUFoQixDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFFLE1BQUEsQ0FBQWMseUJBQUEsR0FBQWQsTUFBQSxDQUFBZSxnQkFBQSxDQUFBbEIsQ0FBQSxFQUFBRyxNQUFBLENBQUFjLHlCQUFBLENBQUFmLENBQUEsS0FBQUgsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsR0FBQWEsT0FBQSxXQUFBZCxDQUFBLElBQUFFLE1BQUEsQ0FBQWdCLGNBQUEsQ0FBQW5CLENBQUEsRUFBQUMsQ0FBQSxFQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFOLENBQUEsRUFBQUQsQ0FBQSxpQkFBQUQsQ0FBQSxJQXRCOUQ7QUFDQTtBQTBDTyxJQUFNb0IseUJBQXlCLEdBQUFDLE9BQUEsQ0FBQUQseUJBQUEsR0FBRyxPQUFPO0FBQ3pDLElBQU1FLGFBQWEsR0FBQUQsT0FBQSxDQUFBQyxhQUFBLEdBQUdDLHNCQUFXOztBQUV4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUMsZUFBZSxHQUFHLElBQUk7QUFDNUI7O0FBRUEsSUFBTUMsNkJBQTZDLEdBQUc7RUFDcERDLElBQUksRUFBRSxJQUFJO0VBQ1ZDLE1BQU0sRUFBRSxLQUFLO0VBQ2JDLFlBQVksRUFBRSxLQUFLO0VBQ25CO0VBQ0FDLGNBQWMsRUFBRTtBQUNsQixDQUFDO0FBRUQsSUFBTUMsMEJBQTBCLEdBQUFsQixhQUFBLENBQUFBLGFBQUEsS0FDM0JhLDZCQUE2QjtFQUNoQ00sV0FBVyxFQUFFO0FBQUssRUFDbkI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxvQkFBaUMsR0FBQVgsT0FBQSxDQUFBVyxvQkFBQSxHQUM1QzdCLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDNkIsdUJBQVksQ0FBQyxDQUN6QkMsTUFBTSxDQUNOLFVBQUNDLE1BQUssRUFBRUMsT0FBTztFQUFBLE9BQUF4QixhQUFBLENBQUFBLGFBQUEsS0FDVnVCLE1BQUssV0FBQW5CLGdCQUFBLGlCQUNQb0IsT0FBTyxFQUNOQSxPQUFPLEtBQUtILHVCQUFZLENBQUNJLFNBQVMsR0FDOUJQLDBCQUEwQixHQUMxQkwsNkJBQTZCO0FBQUEsQ0FDbkMsRUFDRixDQUFDLENBQ0gsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1hLG9CQUFpQyxHQUFBakIsT0FBQSxDQUFBaUIsb0JBQUEsR0FBRztFQUMvQztFQUNBQyxLQUFLLEVBQUVDLDRCQUFpQixDQUFDQyxNQUFNO0VBQy9CQyxVQUFVLEVBQUVDLHNCQUFXLENBQUNDLEtBQUs7RUFDN0JDLE1BQU0sRUFBRSxLQUFLO0VBQ2JDLElBQUksRUFBRSxDQUFDO0VBQ1BDLElBQUksRUFBRSxDQUFDO0VBQ1BDLFNBQVMsRUFBRTtJQUNUQyxVQUFVLEVBQUUsQ0FBQztJQUNiQyxLQUFLLEVBQUUsQ0FBQztJQUNSQyxNQUFNLEVBQUUsQ0FBQztJQUNUQyxNQUFNLEVBQUU7RUFDVixDQUFDO0VBQ0Q7RUFDQUMsTUFBTSxFQUFFLEtBQUs7RUFDYjtFQUNBQyxZQUFZLEVBQUUsRUFBRTtFQUNoQjtFQUNBQyxTQUFTLEVBQUUsS0FBSztFQUNoQjtFQUNBQyxVQUFVLEVBQUUsS0FBSztFQUNqQkMsS0FBSyxFQUFFLEtBQUs7RUFDWjtFQUNBQyxxQkFBcUIsRUFBRSxJQUFBQywyQkFBb0IsRUFBQyxDQUFDLENBQUNEO0FBQ2hELENBQUM7QUFFTSxJQUFNRSxrQkFBa0IsR0FBQXZDLE9BQUEsQ0FBQXVDLGtCQUFBLEdBQUc7RUFDaENDLFdBQVcsRUFBRTtBQUNmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsbUJBQStCLEdBQUF6QyxPQUFBLENBQUF5QyxtQkFBQSxHQUFHO0VBQzdDQyxlQUFlLEVBQUUsRUFBRTtFQUNuQkMsUUFBUSxFQUFFQywyQkFBZ0IsQ0FBQ0MsR0FBRztFQUM5QkMsUUFBUSxFQUFFO0FBQ1osQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxxQkFBcUIsR0FBQS9DLE9BQUEsQ0FBQStDLHFCQUFBLEdBQUcsRUFBRTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxtQkFBK0IsR0FBQWhELE9BQUEsQ0FBQWdELG1CQUFBLEdBQUc7RUFDN0NDLHVCQUF1QixFQUFFLElBQUk7RUFDN0JDLGVBQWUsRUFBRSxFQUFFO0VBQ25CQyxJQUFJLEVBQUVDLGdDQUFxQixDQUFDQztBQUM5QixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxtQkFBK0IsR0FBQXRELE9BQUEsQ0FBQXNELG1CQUFBLEdBQUc7RUFDN0NDLE9BQU8sRUFBRTtBQUNYLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGtCQUE2QixHQUFBeEQsT0FBQSxDQUFBd0Qsa0JBQUEsT0FBQTdELGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQ3ZDOEQsNkJBQWtCLENBQUNDLElBQUksRUFBR1YsbUJBQW1CLEdBQzdDUyw2QkFBa0IsQ0FBQ0UsSUFBSSxFQUFHTCxtQkFBbUIsYUFDdENHLDZCQUFrQixDQUFDQyxJQUFJLENBQ2hDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNRSxvQkFBaUMsR0FBQTVELE9BQUEsQ0FBQTRELG9CQUFBLEdBQUc7RUFDL0NDLFNBQVMsRUFBRSxNQUFNO0VBQUU7RUFDbkJDLFlBQVksRUFBRSxNQUFNO0VBQ3BCQyxRQUFRLEVBQUUsV0FBVztFQUNyQjFDLFVBQVUsRUFBRSxVQUFVO0VBQ3RCMkMsVUFBVSxFQUFFLElBQUk7RUFDaEJDLGFBQWEsRUFBRSxDQUFDO0VBQ2hCQyxXQUFXLEVBQUUsR0FBRztFQUNoQkMsV0FBVyxFQUFFO0FBQ2YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGdCQUF5QixHQUFBcEUsT0FBQSxDQUFBb0UsZ0JBQUEsR0FBRztFQUN2Q0MsUUFBUSxFQUFFLEtBQUs7RUFDZkMsZUFBZSxFQUFFdkUseUJBQXlCO0VBQzFDd0UsWUFBWSxFQUFFdEUsYUFBYTtFQUMzQnVFLGtCQUFrQixFQUFFLElBQUk7RUFDeEJDLGVBQWUsRUFBRSxJQUFJO0VBQ3JCO0VBQ0FDLFdBQVcsRUFBRXpELG9CQUFvQjtFQUNqQztFQUNBMEQsVUFBVSxFQUFFbEMsbUJBQW1CO0VBQy9CO0VBQ0FtQyxTQUFTLEVBQUVwQixrQkFBa0I7RUFDN0I7RUFDQXFCLFdBQVcsRUFBRWpCLG9CQUFvQjtFQUNqQztFQUNBa0IsV0FBVyxFQUFFbkUsb0JBQW9CO0VBQ2pDO0VBQ0FvRSxhQUFhLEVBQUVoQyxxQkFBcUI7RUFDcEM7RUFDQWlDLFNBQVMsRUFBRXpDLGtCQUFrQjtFQUM3QjtFQUNBMEMsTUFBTSxFQUFFQywwQkFBWSxDQUFDQyxFQUFFO0VBQ3ZCQyxrQkFBa0IsRUFBRSxNQUFNO0VBQzFCQyxtQkFBbUIsRUFBRSxNQUFNO0VBQzNCQyw2QkFBNkIsRUFBRTtBQUNqQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsa0JBQWtCLEdBQUF2RixPQUFBLENBQUF1RixrQkFBQSxHQUFHLFNBQXJCQSxrQkFBa0JBLENBQzdCQyxLQUFjLEVBQ2RDLE1BR0M7RUFBQSxPQUFBbEcsYUFBQSxDQUFBQSxhQUFBLEtBRUVpRyxLQUFLLEdBQ0wsQ0FBQ0MsTUFBTSxDQUFDQyxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUVDLGNBQWM7QUFBQSxDQUN4Qzs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxzQkFBc0IsR0FBQTVGLE9BQUEsQ0FBQTRGLHNCQUFBLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FDakNKLEtBQWMsRUFBQUssSUFBQSxFQUVGO0VBQUEsSUFERkMsRUFBRSxHQUFBRCxJQUFBLENBQVhILE9BQU87RUFFUixPQUFPSSxFQUFFLEtBQUtOLEtBQUssQ0FBQ2xCLGVBQWUsR0FDL0JrQixLQUFLLEdBQUFqRyxhQUFBLENBQUFBLGFBQUEsS0FFQWlHLEtBQUs7SUFDUmxCLGVBQWUsRUFBRXdCO0VBQUUsRUFDcEI7QUFDUCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGtCQUFrQixHQUFBL0YsT0FBQSxDQUFBK0Ysa0JBQUEsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUM3QlAsS0FBYyxFQUFBUSxLQUFBO0VBQUEsSUFDSkYsRUFBRSxHQUFBRSxLQUFBLENBQVhOLE9BQU87RUFBQSxPQUFBbkcsYUFBQSxDQUFBQSxhQUFBLEtBRUxpRyxLQUFLO0lBQ1JqQixZQUFZLEVBQUV1QjtFQUFFO0FBQUEsQ0FDaEI7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1HLHlCQUF5QixHQUFBakcsT0FBQSxDQUFBaUcseUJBQUEsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUNwQ1QsS0FBYyxFQUFBVSxLQUFBO0VBQUEsSUFDSkosRUFBRSxHQUFBSSxLQUFBLENBQVhSLE9BQU87RUFBQSxPQUFBbkcsYUFBQSxDQUFBQSxhQUFBLEtBRUxpRyxLQUFLO0lBQ1JmLGVBQWUsRUFBRXFCO0VBQUU7QUFBQSxDQUNuQjs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUsseUJBQXlCLEdBQUFuRyxPQUFBLENBQUFtRyx5QkFBQSxHQUFHLFNBQTVCQSx5QkFBeUJBLENBQUlYLEtBQWM7RUFBQSxPQUFBakcsYUFBQSxDQUFBQSxhQUFBLEtBQ25EaUcsS0FBSztJQUNSZixlQUFlLEVBQUU7RUFBSTtBQUFBLENBQ3JCOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNMkIsaUNBQWlDLEdBQUFwRyxPQUFBLENBQUFvRyxpQ0FBQSxHQUFHLFNBQXBDQSxpQ0FBaUNBLENBQzVDWixLQUFjLEVBQUFhLEtBQUE7RUFBQSxJQUNIaEcsSUFBSSxHQUFBZ0csS0FBQSxDQUFkWCxPQUFPLENBQUdyRixJQUFJO0VBQUEsT0FBQWQsYUFBQSxDQUFBQSxhQUFBLEtBRVppRyxLQUFLO0lBQ1JGLDZCQUE2QixFQUFFakY7RUFBSTtBQUFBLENBQ25DOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1pRyx1QkFBdUIsR0FBQXRHLE9BQUEsQ0FBQXNHLHVCQUFBLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbENkLEtBQWMsRUFBQWUsS0FBQSxFQUVGO0VBQUEsSUFBQUMscUJBQUEsRUFBQUMscUJBQUE7RUFBQSxJQUFBQyxhQUFBLEdBQUFILEtBQUEsQ0FEWGIsT0FBTztJQUFHaUIsT0FBTyxHQUFBRCxhQUFBLENBQVBDLE9BQU87SUFBQUMsbUJBQUEsR0FBQUYsYUFBQSxDQUFFRyxLQUFLO0lBQUxBLEtBQUssR0FBQUQsbUJBQUEsY0FBRyxDQUFDLEdBQUFBLG1CQUFBO0VBRTdCLElBQUlFLFlBQVksR0FBR3RCLEtBQUs7RUFDeEI7RUFDQTtFQUNBLElBQU11QixpQkFBaUIsR0FDckJKLE9BQU8sS0FBSy9GLHVCQUFZLENBQUNvRyxNQUFNLEdBQzNCcEcsdUJBQVksQ0FBQ3FHLFdBQVcsR0FDeEJOLE9BQU8sS0FBSy9GLHVCQUFZLENBQUNxRyxXQUFXLEdBQ3BDckcsdUJBQVksQ0FBQ29HLE1BQU0sR0FDbkIsSUFBSTs7RUFFVjtFQUNBO0VBQ0EsSUFBTUUsb0JBQW9CLEdBQ3hCUCxPQUFPLEtBQUsvRix1QkFBWSxDQUFDdUcsT0FBTyxHQUM1QnZHLHVCQUFZLENBQUN3RyxTQUFTLEdBQ3RCVCxPQUFPLEtBQUsvRix1QkFBWSxDQUFDd0csU0FBUyxHQUNsQ3hHLHVCQUFZLENBQUN1RyxPQUFPLEdBQ3BCLElBQUk7O0VBRVY7RUFDQSxJQUFJSixpQkFBaUIsS0FBQVAscUJBQUEsR0FBSWhCLEtBQUssQ0FBQ1YsV0FBVyxDQUFDaUMsaUJBQWlCLENBQUMsY0FBQVAscUJBQUEsZUFBcENBLHFCQUFBLENBQXNDbEcsTUFBTSxFQUFFO0lBQ3JFd0csWUFBWSxHQUFBdkgsYUFBQSxDQUFBQSxhQUFBLEtBQ1BpRyxLQUFLO01BQ1JWLFdBQVcsRUFBQXZGLGFBQUEsQ0FBQUEsYUFBQSxLQUNOdUgsWUFBWSxDQUFDaEMsV0FBVyxXQUFBbkYsZ0JBQUEsaUJBQzFCb0gsaUJBQWlCLEVBQUF4SCxhQUFBLENBQUFBLGFBQUEsS0FDYnVILFlBQVksQ0FBQ2hDLFdBQVcsQ0FBQ2lDLGlCQUFpQixDQUFDO1FBQzlDekcsTUFBTSxFQUFFO01BQUs7SUFFaEIsRUFDRjtFQUNIOztFQUVBO0VBQ0EsSUFBSTRHLG9CQUFvQixLQUFBVCxxQkFBQSxHQUFJakIsS0FBSyxDQUFDVixXQUFXLENBQUNvQyxvQkFBb0IsQ0FBQyxjQUFBVCxxQkFBQSxlQUF2Q0EscUJBQUEsQ0FBeUNuRyxNQUFNLEVBQUU7SUFDM0V3RyxZQUFZLEdBQUF2SCxhQUFBLENBQUFBLGFBQUEsS0FDUGlHLEtBQUs7TUFDUlYsV0FBVyxFQUFBdkYsYUFBQSxDQUFBQSxhQUFBLEtBQ051SCxZQUFZLENBQUNoQyxXQUFXLFdBQUFuRixnQkFBQSxpQkFDMUJ1SCxvQkFBb0IsRUFBQTNILGFBQUEsQ0FBQUEsYUFBQSxLQUNoQnVILFlBQVksQ0FBQ2hDLFdBQVcsQ0FBQ29DLG9CQUFvQixDQUFDO1FBQ2pENUcsTUFBTSxFQUFFO01BQUs7SUFFaEIsRUFDRjtFQUNIO0VBRUEsT0FBQWYsYUFBQSxDQUFBQSxhQUFBLEtBQ0t1SCxZQUFZO0lBQ2ZoQyxXQUFXLEVBQUF2RixhQUFBLENBQUFBLGFBQUEsS0FDTnVILFlBQVksQ0FBQ2hDLFdBQVcsV0FBQW5GLGdCQUFBLGlCQUMxQmdILE9BQU8sRUFBQXBILGFBQUEsQ0FBQUEsYUFBQSxLQUNIdUgsWUFBWSxDQUFDaEMsV0FBVyxDQUFDNkIsT0FBTyxDQUFDO01BQ3BDckcsTUFBTSxFQUFFLENBQUN3RyxZQUFZLENBQUNoQyxXQUFXLENBQUM2QixPQUFPLENBQUMsQ0FBQ3JHLE1BQU07TUFDakRFLGNBQWMsRUFBRXFHO0lBQUs7RUFFeEI7QUFFTCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1RLDhCQUE4QixHQUFBckgsT0FBQSxDQUFBcUgsOEJBQUEsR0FBRyxTQUFqQ0EsOEJBQThCQSxDQUN6QzdCLEtBQWMsRUFBQThCLEtBQUEsRUFFRjtFQUFBLElBQUFDLGtCQUFBO0VBQUEsSUFBQUMsYUFBQSxHQUFBRixLQUFBLENBRFg1QixPQUFPO0lBQUdpQixPQUFPLEdBQUFhLGFBQUEsQ0FBUGIsT0FBTztJQUFFdEcsSUFBSSxHQUFBbUgsYUFBQSxDQUFKbkgsSUFBSTtFQUV4QixJQUFJLEdBQUFrSCxrQkFBQSxHQUFDL0IsS0FBSyxDQUFDVixXQUFXLGNBQUF5QyxrQkFBQSxlQUFqQkEsa0JBQUEsQ0FBb0JaLE9BQU8sQ0FBQyxHQUFFO0lBQ2pDLE9BQU9uQixLQUFLO0VBQ2Q7RUFFQSxPQUFBakcsYUFBQSxDQUFBQSxhQUFBLEtBQ0tpRyxLQUFLO0lBQ1JWLFdBQVcsRUFBQXZGLGFBQUEsQ0FBQUEsYUFBQSxLQUNOaUcsS0FBSyxDQUFDVixXQUFXLFdBQUFuRixnQkFBQSxpQkFDbkJnSCxPQUFPLEVBQUFwSCxhQUFBLENBQUFBLGFBQUEsS0FDSGlHLEtBQUssQ0FBQ1YsV0FBVyxDQUFDNkIsT0FBTyxDQUFDO01BQzdCdEcsSUFBSSxFQUFFb0gsT0FBTyxDQUFDcEgsSUFBSTtJQUFDO0VBRXRCO0FBRUwsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNcUgsNEJBQTRCLEdBQUExSCxPQUFBLENBQUEwSCw0QkFBQSxHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDbEMsS0FBYyxFQUFBbUMsS0FBQSxFQUVGO0VBQUEsSUFBQUMsbUJBQUE7RUFBQSxJQUFBQyxhQUFBLEdBQUFGLEtBQUEsQ0FEWGpDLE9BQU87SUFBR2lCLE9BQU8sR0FBQWtCLGFBQUEsQ0FBUGxCLE9BQU87SUFBRW1CLFFBQVEsR0FBQUQsYUFBQSxDQUFSQyxRQUFRO0VBRTVCLElBQU1DLFVBQVUsSUFBQUgsbUJBQUEsR0FBR3BDLEtBQUssQ0FBQ1YsV0FBVyxjQUFBOEMsbUJBQUEsdUJBQWpCQSxtQkFBQSxDQUFvQmpCLE9BQU8sQ0FBQztFQUMvQyxJQUFJLENBQUNvQixVQUFVLEVBQUU7SUFDZixPQUFPdkMsS0FBSztFQUNkO0VBRUEsT0FBQWpHLGFBQUEsQ0FBQUEsYUFBQSxLQUNLaUcsS0FBSztJQUNSVixXQUFXLEVBQUF2RixhQUFBLENBQUFBLGFBQUEsS0FDTmlHLEtBQUssQ0FBQ1YsV0FBVyxXQUFBbkYsZ0JBQUEsaUJBQ25CZ0gsT0FBTyxFQUFBcEgsYUFBQSxDQUFBQSxhQUFBLEtBQU93SSxVQUFVO01BQUVELFFBQVEsRUFBQXZJLGFBQUEsQ0FBQUEsYUFBQSxLQUFNd0ksVUFBVSxDQUFDRCxRQUFRLEdBQUtBLFFBQVE7SUFBQztFQUMzRTtBQUVMLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUUsc0JBQXNCLEdBQUFoSSxPQUFBLENBQUFnSSxzQkFBQSxHQUFHLFNBQXpCQSxzQkFBc0JBLENBQ2pDeEMsS0FBYyxFQUFBeUMsS0FBQTtFQUFBLElBQ0p6RCxrQkFBa0IsR0FBQXlELEtBQUEsQ0FBM0J2QyxPQUFPO0VBQUEsT0FBQW5HLGFBQUEsQ0FBQUEsYUFBQSxLQUVMaUcsS0FBSztJQUNSakIsWUFBWSxFQUFFMkQseUJBQWM7SUFDNUIxRCxrQkFBa0IsRUFBbEJBO0VBQWtCO0FBQUEsQ0FDbEI7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNMkQsNEJBQTRCLEdBQUFuSSxPQUFBLENBQUFtSSw0QkFBQSxHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDM0MsS0FBYyxFQUFBNEMsS0FBQSxFQUVGO0VBQUEsSUFERkMsVUFBVSxHQUFBRCxLQUFBLENBQW5CMUMsT0FBTztFQUVSLElBQU00QyxPQUFPLEdBQUEvSSxhQUFBLENBQUFBLGFBQUEsS0FBT2lHLEtBQUssQ0FBQ2QsV0FBVyxHQUFLMkQsVUFBVSxDQUFDO0VBQ3JELElBQU0xRyxTQUFTLEdBQUcsSUFBQTRHLCtCQUF3QixFQUFDRCxPQUFPLENBQUMsSUFBSTlDLEtBQUssQ0FBQ2QsV0FBVyxDQUFDL0MsU0FBUztFQUVsRixPQUFBcEMsYUFBQSxDQUFBQSxhQUFBLEtBQ0tpRyxLQUFLO0lBQ1JkLFdBQVcsRUFBQW5GLGFBQUEsQ0FBQUEsYUFBQSxLQUNOK0ksT0FBTztNQUNWM0csU0FBUyxFQUFUQTtJQUFTO0VBQ1Y7QUFFTCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU02Ryw0QkFBNEIsR0FBQXhJLE9BQUEsQ0FBQXdJLDRCQUFBLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FDdkNoRCxLQUFjLEVBQUFpRCxNQUFBLEVBRUY7RUFBQSxJQURGQyxPQUFPLEdBQUFELE1BQUEsQ0FBaEIvQyxPQUFPO0VBRVIsSUFBSWdELE9BQU8sS0FBS2xELEtBQUssQ0FBQ2QsV0FBVyxDQUFDekMsWUFBWSxFQUFFO0lBQzlDLE9BQU91RCxLQUFLO0VBQ2Q7RUFDQSxPQUFBakcsYUFBQSxDQUFBQSxhQUFBLEtBQ0tpRyxLQUFLO0lBQ1JkLFdBQVcsRUFBQW5GLGFBQUEsQ0FBQUEsYUFBQSxLQUNOaUcsS0FBSyxDQUFDZCxXQUFXO01BQ3BCdkMsVUFBVSxFQUFFLEtBQUs7TUFDakJGLFlBQVksRUFBRXlHO0lBQU87RUFDdEI7QUFFTCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsMEJBQTBCLEdBQUEzSSxPQUFBLENBQUEySSwwQkFBQSxHQUFHLFNBQTdCQSwwQkFBMEJBLENBQ3JDbkQsS0FBYyxFQUFBb0QsTUFBQTtFQUFBLElBQ0p4RyxLQUFLLEdBQUF3RyxNQUFBLENBQWRsRCxPQUFPO0VBQUEsT0FBQW5HLGFBQUEsQ0FBQUEsYUFBQSxLQUVMaUcsS0FBSztJQUNSZCxXQUFXLEVBQUFuRixhQUFBLENBQUFBLGFBQUEsS0FDTmlHLEtBQUssQ0FBQ2QsV0FBVztNQUNwQnZDLFVBQVUsRUFBRSxLQUFLO01BQ2pCQyxLQUFLLEVBQUxBO0lBQUs7RUFDTjtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU15Ryx5QkFBeUIsR0FBQTdJLE9BQUEsQ0FBQTZJLHlCQUFBLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FBSXJELEtBQWM7RUFBQSxPQUFBakcsYUFBQSxDQUFBQSxhQUFBLEtBQ25EaUcsS0FBSztJQUNSZCxXQUFXLEVBQUFuRixhQUFBLENBQUFBLGFBQUEsS0FDTmlHLEtBQUssQ0FBQ2QsV0FBVztNQUNwQnhDLFNBQVMsRUFBRSxLQUFLO01BQ2hCRCxZQUFZLEVBQUUsRUFBRTtNQUNoQkcsS0FBSyxFQUFFLEtBQUs7TUFDWkQsVUFBVSxFQUFFLEtBQUs7TUFDakJILE1BQU0sRUFBRTtJQUFLO0VBQ2Q7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU04Ryw0QkFBNEIsR0FBQTlJLE9BQUEsQ0FBQThJLDRCQUFBLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FDdkN0RCxLQUFjLEVBQUF1RCxNQUFBO0VBQUEsSUFDSlYsVUFBVSxHQUFBVSxNQUFBLENBQW5CckQsT0FBTztFQUFBLE9BQUFuRyxhQUFBLENBQUFBLGFBQUEsS0FFTGlHLEtBQUs7SUFDUlgsV0FBVyxFQUFBdEYsYUFBQSxDQUFBQSxhQUFBLEtBQ05pRyxLQUFLLENBQUNYLFdBQVcsR0FDakJ3RCxVQUFVO0VBQ2Q7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNVywwQkFBMEIsR0FBQWhKLE9BQUEsQ0FBQWdKLDBCQUFBLEdBQUcsU0FBN0JBLDBCQUEwQkEsQ0FDckN4RCxLQUFjLEVBQUF5RCxNQUFBLEVBRUY7RUFBQSxJQUFBQyxjQUFBLEdBQUFELE1BQUEsQ0FEWHZELE9BQU87SUFBRXlELE9BQU8sR0FBQUQsY0FBQSxjQUFHLENBQUMsQ0FBQyxHQUFBQSxjQUFBO0VBRXRCLElBQU1FLGFBQWEsR0FBQTdKLGFBQUEsQ0FBQUEsYUFBQSxLQUNkNEosT0FBTztJQUNWakgsU0FBUyxFQUFFO0VBQUksRUFDaEI7RUFFRCxPQUFPLElBQUFtSCx5QkFBUSxFQUFDLENBQ2RSLHlCQUF5QixFQUN6QixJQUFBUyx1QkFBTSxFQUFDbkIsNEJBQTRCLEVBQUUsSUFBQW9CLHlCQUFRLEVBQUNILGFBQWEsQ0FBQyxDQUFDLENBQzlELENBQUMsQ0FBQzVELEtBQUssQ0FBQztBQUNYLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWdFLCtCQUErQixHQUFBeEosT0FBQSxDQUFBd0osK0JBQUEsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUMxQ2hFLEtBQWMsRUFBQWlFLE1BQUE7RUFBQSxJQUNKQyxPQUFPLEdBQUFELE1BQUEsQ0FBaEIvRCxPQUFPO0VBQUEsT0FBQW5HLGFBQUEsQ0FBQUEsYUFBQSxLQUVMaUcsS0FBSztJQUNSYixVQUFVLEVBQUFwRixhQUFBLENBQUFBLGFBQUEsS0FDTGlHLEtBQUssQ0FBQ2IsVUFBVTtNQUNuQmpDLGVBQWUsRUFBRWdIO0lBQU87RUFDekI7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLHdCQUF3QixHQUFBM0osT0FBQSxDQUFBMkosd0JBQUEsR0FBRyxTQUEzQkEsd0JBQXdCQSxDQUNuQ25FLEtBQWMsRUFBQW9FLE1BQUE7RUFBQSxJQUNKakgsUUFBUSxHQUFBaUgsTUFBQSxDQUFqQmxFLE9BQU87RUFBQSxPQUFBbkcsYUFBQSxDQUFBQSxhQUFBLEtBRUxpRyxLQUFLO0lBQ1JiLFVBQVUsRUFBQXBGLGFBQUEsQ0FBQUEsYUFBQSxLQUNMaUcsS0FBSyxDQUFDYixVQUFVO01BQ25CaEMsUUFBUSxFQUFSQTtJQUFRO0VBQ1Q7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1rSCx3QkFBd0IsR0FBQTdKLE9BQUEsQ0FBQTZKLHdCQUFBLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FDbkNyRSxLQUFjLEVBQUFzRSxNQUFBO0VBQUEsSUFDSmhILFFBQVEsR0FBQWdILE1BQUEsQ0FBakJwRSxPQUFPO0VBQUEsT0FBQW5HLGFBQUEsQ0FBQUEsYUFBQSxLQUVMaUcsS0FBSztJQUNSYixVQUFVLEVBQUFwRixhQUFBLENBQUFBLGFBQUEsS0FDTGlHLEtBQUssQ0FBQ2IsVUFBVTtNQUNuQjdCLFFBQVEsRUFBUkE7SUFBUTtFQUNUO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1pSCxvQkFBb0IsR0FBQS9KLE9BQUEsQ0FBQStKLG9CQUFBLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBSXZFLEtBQWM7RUFBQSxPQUFBakcsYUFBQSxDQUFBQSxhQUFBLEtBQzlDaUcsS0FBSztJQUNSWixTQUFTLEVBQUFyRixhQUFBLENBQUFBLGFBQUEsS0FDSmlHLEtBQUssQ0FBQ1osU0FBUyxXQUFBakYsZ0JBQUEsaUJBQ2pCOEQsNkJBQWtCLENBQUNFLElBQUksRUFBQXBFLGFBQUEsQ0FBQUEsYUFBQSxLQUNuQmlHLEtBQUssQ0FBQ1osU0FBUyxDQUFDbkIsNkJBQWtCLENBQUNFLElBQUksQ0FBQztNQUMzQ0osT0FBTyxFQUFFLENBQUNpQyxLQUFLLENBQUNaLFNBQVMsQ0FBQ25CLDZCQUFrQixDQUFDRSxJQUFJLENBQUMsQ0FBQ0o7SUFBTztFQUU3RDtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU15RywrQkFBK0IsR0FBQWhLLE9BQUEsQ0FBQWdLLCtCQUFBLEdBQUcsU0FBbENBLCtCQUErQkEsQ0FDMUN4RSxLQUFjLEVBQUF5RSxNQUFBO0VBQUEsSUFDSi9HLGVBQWUsR0FBQStHLE1BQUEsQ0FBeEJ2RSxPQUFPO0VBQUEsT0FBQW5HLGFBQUEsQ0FBQUEsYUFBQSxLQUVMaUcsS0FBSztJQUNSWixTQUFTLEVBQUFyRixhQUFBLENBQUFBLGFBQUEsS0FDSmlHLEtBQUssQ0FBQ1osU0FBUyxXQUFBakYsZ0JBQUEsaUJBQ2pCOEQsNkJBQWtCLENBQUNDLElBQUksRUFBQW5FLGFBQUEsQ0FBQUEsYUFBQSxLQUNuQmlHLEtBQUssQ0FBQ1osU0FBUyxDQUFDbkIsNkJBQWtCLENBQUNDLElBQUksQ0FBQztNQUMzQ1IsZUFBZSxFQUFmQTtJQUFlO0VBRWxCO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1nSCx5QkFBeUIsR0FBQWxLLE9BQUEsQ0FBQWtLLHlCQUFBLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FDcEMxRSxLQUFjLEVBQUEyRSxNQUFBO0VBQUEsSUFDSkMsTUFBTSxHQUFBRCxNQUFBLENBQWZ6RSxPQUFPO0VBQUEsT0FBQW5HLGFBQUEsQ0FBQUEsYUFBQSxLQUVMaUcsS0FBSztJQUNSWixTQUFTLEVBQUFyRixhQUFBLENBQUFBLGFBQUEsS0FDSmlHLEtBQUssQ0FBQ1osU0FBUztNQUNsQjtNQUNBd0YsTUFBTSxFQUFOQTtJQUFNO0VBQ1A7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsMkJBQTJCLEdBQUFySyxPQUFBLENBQUFxSywyQkFBQSxHQUFHLFNBQTlCQSwyQkFBMkJBLENBQ3RDN0UsS0FBYyxFQUFBOEUsTUFBQTtFQUFBLElBQ0puSCxJQUFJLEdBQUFtSCxNQUFBLENBQWI1RSxPQUFPO0VBQUEsT0FBQW5HLGFBQUEsQ0FBQUEsYUFBQSxLQUVMaUcsS0FBSztJQUNSWixTQUFTLEVBQUFyRixhQUFBLENBQUFBLGFBQUEsS0FDSmlHLEtBQUssQ0FBQ1osU0FBUyxXQUFBakYsZ0JBQUEsaUJBQ2pCOEQsNkJBQWtCLENBQUNDLElBQUksRUFBQW5FLGFBQUEsQ0FBQUEsYUFBQSxLQUNuQmlHLEtBQUssQ0FBQ1osU0FBUyxDQUFDbkIsNkJBQWtCLENBQUNDLElBQUksQ0FBQztNQUMzQ1AsSUFBSSxFQUFKQTtJQUFJO0VBRVA7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTW9ILHNCQUFzQixHQUFBdkssT0FBQSxDQUFBdUssc0JBQUEsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUNqQy9FLEtBQWMsRUFBQWdGLE1BQUEsRUFFRjtFQUFBLElBRFg5RSxPQUFPLEdBQUE4RSxNQUFBLENBQVA5RSxPQUFPO0VBRVIsSUFBTStFLGdCQUFnQixHQUFHakYsS0FBSyxDQUFDVCxhQUFhLElBQUksRUFBRTtFQUNsRDtFQUNBLElBQU0yRixTQUFTLEdBQUdoRixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRUksRUFBRTtFQUM3QixJQUFNNkUsb0JBQW9CLEdBQUdELFNBQVMsR0FBR0QsZ0JBQWdCLENBQUNHLElBQUksQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDL0UsRUFBRSxLQUFLNEUsU0FBUztFQUFBLEVBQUMsR0FBRyxJQUFJO0VBRTlGLElBQUkzRixhQUFhO0VBQ2pCLElBQUk0RixvQkFBb0IsRUFBRTtJQUN4QjVGLGFBQWEsR0FBRzBGLGdCQUFnQixDQUFDSyxHQUFHLENBQUMsVUFBQUQsQ0FBQztNQUFBLE9BQ3BDQSxDQUFDLENBQUMvRSxFQUFFLEtBQUs0RSxTQUFTLEdBQUcsSUFBQUsseUJBQWtCLEVBQUF4TCxhQUFBLENBQUFBLGFBQUEsS0FBS21HLE9BQU87UUFBRXNGLEtBQUssRUFBRUgsQ0FBQyxDQUFDRyxLQUFLLEdBQUc7TUFBQyxFQUFDLENBQUMsR0FBR0gsQ0FBQztJQUFBLENBQy9FLENBQUM7RUFDSCxDQUFDLE1BQU07SUFDTDlGLGFBQWEsTUFBQWtHLE1BQUEsS0FBQUMsbUJBQUEsYUFBT1QsZ0JBQWdCLElBQUUsSUFBQU0seUJBQWtCLEVBQUNyRixPQUFPLENBQUMsRUFBQztFQUNwRTtFQUVBLE9BQUFuRyxhQUFBLENBQUFBLGFBQUEsS0FBV2lHLEtBQUs7SUFBRVQsYUFBYSxFQUFiQTtFQUFhO0FBQ2pDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTW9HLHlCQUF5QixHQUFBbkwsT0FBQSxDQUFBbUwseUJBQUEsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUNwQzNGLEtBQWMsRUFBQTRGLE1BQUE7RUFBQSxJQUNKdEYsRUFBRSxHQUFBc0YsTUFBQSxDQUFYMUYsT0FBTztFQUFBLE9BQUFuRyxhQUFBLENBQUFBLGFBQUEsS0FFTGlHLEtBQUs7SUFDUlQsYUFBYSxFQUFFUyxLQUFLLENBQUNULGFBQWEsQ0FBQzdGLE1BQU0sQ0FBQyxVQUFBMkwsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQy9FLEVBQUUsS0FBS0EsRUFBRTtJQUFBO0VBQUM7QUFBQSxDQUMzRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU11RixnQkFBZ0IsR0FBQXJMLE9BQUEsQ0FBQXFMLGdCQUFBLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBSTdGLEtBQWM7RUFBQSxPQUFBakcsYUFBQSxDQUFBQSxhQUFBLEtBQzFDaUcsS0FBSztJQUNSUixTQUFTLEVBQUF6RixhQUFBLENBQUFBLGFBQUEsS0FDSmlHLEtBQUssQ0FBQ1IsU0FBUztNQUNsQnhDLFdBQVcsRUFBRTtJQUFJO0VBQ2xCO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNOEksdUJBQXVCLEdBQUF0TCxPQUFBLENBQUFzTCx1QkFBQSxHQUFHLFNBQTFCQSx1QkFBdUJBLENBQUk5RixLQUFjO0VBQUEsT0FBQWpHLGFBQUEsQ0FBQUEsYUFBQSxLQUNqRGlHLEtBQUs7SUFDUlIsU0FBUyxFQUFBekYsYUFBQSxDQUFBQSxhQUFBLEtBQ0ppRyxLQUFLLENBQUNSLFNBQVM7TUFDbEJ4QyxXQUFXLEVBQUU7SUFBSztFQUNuQjtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTStJLG1CQUFtQixHQUFBdkwsT0FBQSxDQUFBdUwsbUJBQUEsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFJL0YsS0FBYyxFQUFBZ0csTUFBQTtFQUFBLElBQUdwSixLQUFLLEdBQUFvSixNQUFBLENBQUxwSixLQUFLO0VBQUEsT0FDeERtSSxzQkFBc0IsQ0FBQWhMLGFBQUEsQ0FBQUEsYUFBQSxLQUVmaUcsS0FBSztJQUNSUixTQUFTLEVBQUF6RixhQUFBLENBQUFBLGFBQUEsS0FDSmlHLEtBQUssQ0FBQ1IsU0FBUztNQUNsQnhDLFdBQVcsRUFBRTtJQUFLO0VBQ25CLElBRUg7SUFDRWtELE9BQU8sRUFBRSxJQUFBK0Ysd0JBQWlCLEVBQUM7TUFDekJDLE9BQU8sRUFBRSxDQUFDdEosS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFc0osT0FBTyxJQUFJLHdCQUF3QjtNQUMxREMsS0FBSyxFQUFFQyxzQ0FBMkIsQ0FBQ0M7SUFDckMsQ0FBQztFQUNILENBQ0YsQ0FBQztBQUFBOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMscUJBQXFCLEdBQUE5TCxPQUFBLENBQUE4TCxxQkFBQSxHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUl0RyxLQUFjO0VBQUEsT0FBQWpHLGFBQUEsQ0FBQUEsYUFBQSxLQUMvQ2lHLEtBQUs7SUFDUlYsV0FBVyxFQUFFaEcsTUFBTSxDQUFDaU4sT0FBTyxDQUFDdkcsS0FBSyxDQUFDVixXQUFXLENBQUMsQ0FBQ2pFLE1BQU0sQ0FDbkQsVUFBQ21MLEdBQUcsRUFBRUMsS0FBSztNQUFBLE9BQUExTSxhQUFBLENBQUFBLGFBQUEsS0FDTnlNLEdBQUcsV0FBQXJNLGdCQUFBLGlCQUNMc00sS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFBMU0sYUFBQSxDQUFBQSxhQUFBLEtBQ0owTSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ1h6TCxjQUFjLEVBQUU7TUFBQztJQUFBLENBRW5CLEVBQ0YsQ0FBQyxDQUNIO0VBQUM7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTTBMLHVCQUF1QixHQUFBbE0sT0FBQSxDQUFBa00sdUJBQUEsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUFJMUcsS0FBYztFQUFBLE9BQ3BETyxrQkFBa0IsQ0FBQ1AsS0FBSyxFQUFFO0lBQUNFLE9BQU8sRUFBRXlHO0VBQWEsQ0FBQyxDQUFDO0FBQUE7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsZ0JBQWdCLEdBQUFwTSxPQUFBLENBQUFvTSxnQkFBQSxHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQzNCNUcsS0FBYyxFQUFBNkcsTUFBQTtFQUFBLElBQ0hwSCxNQUFNLEdBQUFvSCxNQUFBLENBQWhCM0csT0FBTyxDQUFHVCxNQUFNO0VBQUEsT0FBQTFGLGFBQUEsQ0FBQUEsYUFBQSxLQUVkaUcsS0FBSztJQUNSUCxNQUFNLEVBQU5BO0VBQU07QUFBQSxDQUNOOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1xSCwwQkFBMEIsR0FBQXRNLE9BQUEsQ0FBQXNNLDBCQUFBLEdBQUcsU0FBN0JBLDBCQUEwQkEsQ0FDckM5RyxLQUFjLEVBQUErRyxNQUFBLEVBRUY7RUFBQSxJQUFBQyxjQUFBLEdBQUFELE1BQUEsQ0FEWDdHLE9BQU87SUFBR2lCLE9BQU8sR0FBQTZGLGNBQUEsQ0FBUDdGLE9BQU87SUFBRThGLFFBQVEsR0FBQUQsY0FBQSxDQUFSQyxRQUFRO0VBRTVCLElBQU1DLFNBQVMsR0FDYi9GLE9BQU8sS0FBSyxPQUFPLEdBQ2Ysb0JBQW9CLEdBQ3BCQSxPQUFPLEtBQUssUUFBUSxHQUNwQixxQkFBcUIsR0FDckIsSUFBSTtFQUNWLElBQUksQ0FBQytGLFNBQVMsSUFBSWxILEtBQUssQ0FBQ2tILFNBQVMsQ0FBQyxLQUFLRCxRQUFRLEVBQUU7SUFDL0MsT0FBT2pILEtBQUs7RUFDZDtFQUNBLE9BQUFqRyxhQUFBLENBQUFBLGFBQUEsS0FDS2lHLEtBQUssV0FBQTdGLGdCQUFBLGlCQUNQK00sU0FBUyxFQUFHRCxRQUFRO0FBRXpCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUUsdUJBQXVCLEdBQUEzTSxPQUFBLENBQUEyTSx1QkFBQSxHQUFHLFNBQTFCQSx1QkFBdUJBLENBQ2xDbkgsS0FBYyxFQUFBb0gsTUFBQSxFQU9GO0VBQUEsSUFBQUMsb0JBQUEsRUFBQUMscUJBQUE7RUFBQSxJQUxBQyxNQUFNLEdBQUFILE1BQUEsQ0FBaEJsSCxPQUFPLENBQUdxSCxNQUFNO0VBTWxCLElBQUFDLE1BQUEsR0FBa0JELE1BQU0sSUFBSSxDQUFDLENBQUM7SUFBdkJFLE9BQU8sR0FBQUQsTUFBQSxDQUFQQyxPQUFPO0VBQ2QsSUFBSSxDQUFDQSxPQUFPLEVBQUU7SUFDWixPQUFPekgsS0FBSztFQUNkO0VBRUEsSUFBSTBILFFBQVEsR0FBRzFILEtBQUs7RUFFcEIsS0FBQXFILG9CQUFBLEdBQUlJLE9BQU8sQ0FBQ25JLFdBQVcsY0FBQStILG9CQUFBLGdCQUFBQSxvQkFBQSxHQUFuQkEsb0JBQUEsQ0FBcUI3TCxTQUFTLGNBQUE2TCxvQkFBQSxlQUE5QkEsb0JBQUEsQ0FBZ0N2TSxNQUFNLEVBQUU7SUFDMUMsSUFBTTZNLGFBQWEsR0FBR0QsUUFBUSxDQUFDcEksV0FBVyxDQUFDOUQsU0FBUztJQUNwRGtNLFFBQVEsR0FBQTNOLGFBQUEsQ0FBQUEsYUFBQSxLQUNIMk4sUUFBUTtNQUNYcEksV0FBVyxFQUFBdkYsYUFBQSxDQUFBQSxhQUFBLEtBQ04yTixRQUFRLENBQUNwSSxXQUFXO1FBQ3ZCOUQsU0FBUyxFQUFBekIsYUFBQSxDQUFBQSxhQUFBO1VBQ1BjLElBQUksRUFBRTtRQUFJLEdBQ1A4TSxhQUFhO1VBQ2hCN00sTUFBTSxFQUFFLElBQUk7VUFDWkUsY0FBYyxFQUFFO1FBQUM7TUFDbEI7SUFDRixFQUNGO0VBQ0g7RUFFQSxLQUFBc00scUJBQUEsR0FBSUcsT0FBTyxDQUFDbkksV0FBVyxjQUFBZ0kscUJBQUEsZ0JBQUFBLHFCQUFBLEdBQW5CQSxxQkFBQSxDQUFxQjlMLFNBQVMsY0FBQThMLHFCQUFBLGVBQTlCQSxxQkFBQSxDQUFnQ2hGLFFBQVEsRUFBRTtJQUM1Q29GLFFBQVEsR0FBR3hGLDRCQUE0QixDQUFDd0YsUUFBUSxFQUFFO01BQ2hEeEgsT0FBTyxFQUFFO1FBQUNpQixPQUFPLEVBQUUsV0FBVztRQUFFbUIsUUFBUSxFQUFFbUYsT0FBTyxDQUFDbkksV0FBVyxDQUFDOUQsU0FBUyxDQUFDOEc7TUFBUTtJQUNsRixDQUFzRCxDQUFDO0VBQ3pEO0VBRUEsSUFBSW1GLE9BQU8sQ0FBQ2hJLE1BQU0sRUFBRTtJQUNsQmlJLFFBQVEsR0FBR2QsZ0JBQWdCLENBQUNjLFFBQVEsRUFBRTtNQUNwQ3hILE9BQU8sRUFBRTtRQUFDVCxNQUFNLEVBQUVnSSxPQUFPLENBQUNoSTtNQUFNO0lBQ2xDLENBQTBDLENBQUM7RUFDN0M7RUFFQSxPQUFPaUksUUFBUTtBQUNqQixDQUFDIiwiaWdub3JlTGlzdCI6W119
905
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9sb2NhbGl6YXRpb24iLCJfdXRpbHMiLCJfY29tcG9zZXJIZWxwZXJzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMIiwiZXhwb3J0cyIsIkRFRkFVTFRfTU9EQUwiLCJBRERfREFUQV9JRCIsInVpU3RhdGVVcGRhdGVycyIsIkRFRkFVTFRfTUFQX0NPTlRST0xTX0ZFQVRVUkVTIiwic2hvdyIsImFjdGl2ZSIsImRpc2FibGVDbG9zZSIsImFjdGl2ZU1hcEluZGV4IiwiREVGQVVMVF9NQVBfTEVHRU5EX0NPTlRST0wiLCJkaXNhYmxlRWRpdCIsIkRFRkFVTFRfTUFQX0NPTlRST0xTIiwiTUFQX0NPTlRST0xTIiwicmVkdWNlIiwiZmluYWwiLCJjdXJyZW50IiwibWFwTGVnZW5kIiwiREVGQVVMVF9FWFBPUlRfSU1BR0UiLCJyYXRpbyIsIkVYUE9SVF9JTUdfUkFUSU9TIiwiU0NSRUVOIiwicmVzb2x1dGlvbiIsIlJFU09MVVRJT05TIiwiT05FX1giLCJsZWdlbmQiLCJtYXBIIiwibWFwVyIsImltYWdlU2l6ZSIsInpvb21PZmZzZXQiLCJzY2FsZSIsImltYWdlVyIsImltYWdlSCIsImNlbnRlciIsImltYWdlRGF0YVVyaSIsImV4cG9ydGluZyIsInByb2Nlc3NpbmciLCJlcnJvciIsImVzY2FwZVhodG1sRm9yV2VicGFjayIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiREVGQVVMVF9MT0FEX0ZJTEVTIiwiZmlsZUxvYWRpbmciLCJERUZBVUxUX0VYUE9SVF9EQVRBIiwic2VsZWN0ZWREYXRhc2V0IiwiZGF0YVR5cGUiLCJFWFBPUlRfREFUQV9UWVBFIiwiQ1NWIiwiZmlsdGVyZWQiLCJERUZBVUxUX05PVElGSUNBVElPTlMiLCJERUZBVUxUX0VYUE9SVF9IVE1MIiwiZXhwb3J0TWFwYm94QWNjZXNzVG9rZW4iLCJ1c2VyTWFwYm94VG9rZW4iLCJtb2RlIiwiRVhQT1JUX0hUTUxfTUFQX01PREVTIiwiUkVBRCIsIkRFRkFVTFRfRVhQT1JUX0pTT04iLCJoYXNEYXRhIiwiREVGQVVMVF9FWFBPUlRfTUFQIiwiRVhQT1JUX01BUF9GT1JNQVRTIiwiSFRNTCIsIkpTT04iLCJERUZBVUxUX0VYUE9SVF9WSURFTyIsIm1lZGlhVHlwZSIsImNhbWVyYVByZXNldCIsImZpbGVOYW1lIiwiZHVyYXRpb25NcyIsInN3aXBlU3RhcnRQY3QiLCJzd2lwZUVuZFBjdCIsInN3aXBlRWFzaW5nIiwiSU5JVElBTF9VSV9TVEFURSIsInJlYWRPbmx5IiwiYWN0aXZlU2lkZVBhbmVsIiwiY3VycmVudE1vZGFsIiwiZGF0YXNldEtleVRvUmVtb3ZlIiwidmlzaWJsZURyb3Bkb3duIiwiZXhwb3J0SW1hZ2UiLCJleHBvcnREYXRhIiwiZXhwb3J0TWFwIiwiZXhwb3J0VmlkZW8iLCJtYXBDb250cm9scyIsIm5vdGlmaWNhdGlvbnMiLCJsb2FkRmlsZXMiLCJsb2NhbGUiLCJMT0NBTEVfQ09ERVMiLCJlbiIsImxheWVyUGFuZWxMaXN0VmlldyIsImZpbHRlclBhbmVsTGlzdFZpZXciLCJpc1NpZGVQYW5lbENsb3NlQnV0dG9uVmlzaWJsZSIsImluaXRVaVN0YXRlVXBkYXRlciIsInN0YXRlIiwiYWN0aW9uIiwicGF5bG9hZCIsImluaXRpYWxVaVN0YXRlIiwidG9nZ2xlU2lkZVBhbmVsVXBkYXRlciIsIl9yZWYiLCJpZCIsInRvZ2dsZU1vZGFsVXBkYXRlciIsIl9yZWYyIiwic2hvd0V4cG9ydERyb3Bkb3duVXBkYXRlciIsIl9yZWYzIiwiaGlkZUV4cG9ydERyb3Bkb3duVXBkYXRlciIsInRvZ2dsZVNpZGVQYW5lbENsb3NlQnV0dG9uVXBkYXRlciIsIl9yZWY0IiwiTVVUVUFMTFlfRVhDTFVTSVZFX01BUF9DT05UUk9MUyIsInNwbGl0TWFwIiwidG9nZ2xlM2QiLCJtYXBEcmF3IiwibWFwTG9jYWxlIiwidG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIiLCJfcmVmNSIsIl9zdGF0ZSRtYXBDb250cm9scyRwYSIsIl91cGRhdGVkU3RhdGUkbWFwQ29udCIsIl9yZWY1JHBheWxvYWQiLCJwYW5lbElkIiwiX3JlZjUkcGF5bG9hZCRpbmRleCIsImluZGV4IiwidXBkYXRlZFN0YXRlIiwicGFuZWxUb0RlYWN0aXZhdGUiLCJlZmZlY3QiLCJhaUFzc2lzdGFudCIsImlzT3BlbmluZyIsImluY2x1ZGVzIiwibmV4dE1hcENvbnRyb2xzIiwiZGlkRGVhY3RpdmF0ZSIsImNvbnRyb2xJZCIsIl9uZXh0TWFwQ29udHJvbHMkY29udCIsInNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlciIsIl9yZWY2IiwiX3N0YXRlJG1hcENvbnRyb2xzIiwiX3JlZjYkcGF5bG9hZCIsIkJvb2xlYW4iLCJzZXRNYXBDb250cm9sU2V0dGluZ3NVcGRhdGVyIiwiX3JlZjciLCJfc3RhdGUkbWFwQ29udHJvbHMyIiwiX3JlZjckcGF5bG9hZCIsInNldHRpbmdzIiwibWFwQ29udHJvbCIsIm9wZW5EZWxldGVNb2RhbFVwZGF0ZXIiLCJfcmVmOCIsIkRFTEVURV9EQVRBX0lEIiwic2V0RXhwb3J0SW1hZ2VTZXR0aW5nVXBkYXRlciIsIl9yZWY5IiwibmV3U2V0dGluZyIsInVwZGF0ZWQiLCJjYWxjdWxhdGVFeHBvcnRJbWFnZVNpemUiLCJzZXRFeHBvcnRJbWFnZURhdGFVcmlVcGRhdGVyIiwiX3JlZjAiLCJkYXRhVXJpIiwic2V0RXhwb3J0SW1hZ2VFcnJvclVwZGF0ZXIiLCJfcmVmMSIsImNsZWFudXBFeHBvcnRJbWFnZVVwZGF0ZXIiLCJzZXRFeHBvcnRWaWRlb1NldHRpbmdVcGRhdGVyIiwiX3JlZjEwIiwic3RhcnRFeHBvcnRpbmdJbWFnZVVwZGF0ZXIiLCJfcmVmMTEiLCJfcmVmMTEkcGF5bG9hZCIsIm9wdGlvbnMiLCJpbWFnZVNldHRpbmdzIiwiY29tcG9zZV8iLCJhcHBseV8iLCJwYXlsb2FkXyIsInNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXIiLCJfcmVmMTIiLCJkYXRhc2V0Iiwic2V0RXhwb3J0RGF0YVR5cGVVcGRhdGVyIiwiX3JlZjEzIiwic2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyIiwiX3JlZjE0Iiwic2V0RXhwb3J0RGF0YVVwZGF0ZXIiLCJzZXRVc2VyTWFwYm94QWNjZXNzVG9rZW5VcGRhdGVyIiwiX3JlZjE1Iiwic2V0RXhwb3J0TWFwRm9ybWF0VXBkYXRlciIsIl9yZWYxNiIsImZvcm1hdCIsInNldEV4cG9ydE1hcEhUTUxNb2RlVXBkYXRlciIsIl9yZWYxNyIsImFkZE5vdGlmaWNhdGlvblVwZGF0ZXIiLCJfcmVmMTgiLCJvbGROb3RpZmljYXRpb25zIiwicGF5bG9hZElkIiwibm90aWZpY2F0aW9uVG9VcGRhdGUiLCJmaW5kIiwibiIsIm1hcCIsImNyZWF0ZU5vdGlmaWNhdGlvbiIsImNvdW50IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlbW92ZU5vdGlmaWNhdGlvblVwZGF0ZXIiLCJfcmVmMTkiLCJsb2FkRmlsZXNVcGRhdGVyIiwibG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjIwIiwiZXJyb3JOb3RpZmljYXRpb24iLCJtZXNzYWdlIiwidG9waWMiLCJERUZBVUxUX05PVElGSUNBVElPTl9UT1BJQ1MiLCJnbG9iYWwiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJlbnRyaWVzIiwiYWNjIiwiZW50cnkiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsIkRBVEFfVEFCTEVfSUQiLCJzZXRMb2NhbGVVcGRhdGVyIiwiX3JlZjIxIiwidG9nZ2xlUGFuZWxMaXN0Vmlld1VwZGF0ZXIiLCJfcmVmMjIiLCJfcmVmMjIkcGF5bG9hZCIsImxpc3RWaWV3Iiwic3RhdGVQcm9wIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMjMiLCJfdWlTdGF0ZSRtYXBDb250cm9scyIsIl91aVN0YXRlJG1hcENvbnRyb2xzMiIsImNvbmZpZyIsIl9yZWYyNCIsInVpU3RhdGUiLCJuZXdTdGF0ZSIsImN1cnJlbnRMZWdlbmQiXSwic291cmNlcyI6WyIuLi9zcmMvdWktc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtcbiAgQUREX0RBVEFfSUQsXG4gIERBVEFfVEFCTEVfSUQsXG4gIERFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUyxcbiAgREVMRVRFX0RBVEFfSUQsXG4gIEVYUE9SVF9EQVRBX1RZUEUsXG4gIEVYUE9SVF9IVE1MX01BUF9NT0RFUyxcbiAgRVhQT1JUX0lNR19SQVRJT1MsXG4gIEVYUE9SVF9NQVBfRk9STUFUUyxcbiAgUkVTT0xVVElPTlMsXG4gIE1BUF9DT05UUk9MU1xufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xPQ0FMRV9DT0RFU30gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtcbiAgY3JlYXRlTm90aWZpY2F0aW9uLFxuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgY2FsY3VsYXRlRXhwb3J0SW1hZ2VTaXplLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7cGF5bG9hZF8sIGFwcGx5XywgY29tcG9zZV99IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5cbmltcG9ydCB7XG4gIEFjdGlvblR5cGVzLFxuICBLZXBsZXJHbEluaXRQYXlsb2FkLFxuICBMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVUlTdGF0ZUFjdGlvbnNcbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7XG4gIEV4cG9ydERhdGEsXG4gIEV4cG9ydEh0bWwsXG4gIEV4cG9ydEpzb24sXG4gIEV4cG9ydE1hcCxcbiAgRXhwb3J0SW1hZ2UsXG4gIEV4cG9ydFZpZGVvLFxuICBNYXBDb250cm9sSXRlbSxcbiAgTWFwQ29udHJvbHMsXG4gIFVpU3RhdGVcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMID0gJ2xheWVyJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX01PREFMID0gQUREX0RBVEFfSUQ7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB1aVN0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt1aVN0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgLy8gY2xpY2sgYnV0dG9uIHRvIGNsb3NlIHNpZGUgcGFuZWxcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICB1aVN0YXRlOiB1aVN0YXRlVXBkYXRlcnMudG9nZ2xlU2lkZVBhbmVsVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgdWlTdGF0ZSwge3BheWxvYWQ6IG51bGx9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB1aVN0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuY29uc3QgREVGQVVMVF9NQVBfQ09OVFJPTFNfRkVBVFVSRVM6IE1hcENvbnRyb2xJdGVtID0ge1xuICBzaG93OiB0cnVlLFxuICBhY3RpdmU6IGZhbHNlLFxuICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAvLyBkZWZpbmVzIHdoaWNoIG1hcCBpbmRleCB1c2VycyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCAodGhyb3VnaCBtYXAgY29udHJvbHMpXG4gIGFjdGl2ZU1hcEluZGV4OiAwXG59O1xuXG5jb25zdCBERUZBVUxUX01BUF9MRUdFTkRfQ09OVFJPTCA9IHtcbiAgLi4uREVGQVVMVF9NQVBfQ09OVFJPTFNfRkVBVFVSRVMsXG4gIGRpc2FibGVFZGl0OiBmYWxzZVxufTtcbi8qKlxuICogQSBsaXN0IG9mIG1hcCBjb250cm9sIHZpc2liaWxpdHkgYW5kIHdoZXRoZXIgaXMgaXQgYWN0aXZlLlxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgdmlzaWJsZUxheWVycyBEZWZhdWx0OiBge3Nob3c6IHRydWUsIGFjdGl2ZTogZmFsc2V9YFxuICogQHByb3BlcnR5IG1hcExlZ2VuZCBEZWZhdWx0OiBge3Nob3c6IHRydWUsIGFjdGl2ZTogZmFsc2V9YFxuICogQHByb3BlcnR5IHRvZ2dsZTNkIERlZmF1bHQ6IGB7c2hvdzogdHJ1ZX1gXG4gKiBAcHJvcGVydHkgc3BsaXRNYXAgRGVmYXVsdDogYHtzaG93OiB0cnVlfWBcbiAqIEBwcm9wZXJ0eSBtYXBEcmF3IERlZmF1bHQ6IGB7c2hvdzogdHJ1ZSwgYWN0aXZlOiBmYWxzZX1gXG4gKiBAcHJvcGVydHkgbWFwTG9jYWxlIERlZmF1bHQ6IGB7c2hvdzogZmFsc2UsIGFjdGl2ZTogZmFsc2V9YFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVBfQ09OVFJPTFM6IE1hcENvbnRyb2xzID0gKFxuICBPYmplY3Qua2V5cyhNQVBfQ09OVFJPTFMpIGFzIEFycmF5PGtleW9mIHR5cGVvZiBNQVBfQ09OVFJPTFM+XG4pLnJlZHVjZShcbiAgKGZpbmFsLCBjdXJyZW50KSA9PiAoe1xuICAgIC4uLmZpbmFsLFxuICAgIFtjdXJyZW50XTpcbiAgICAgIGN1cnJlbnQgPT09IE1BUF9DT05UUk9MUy5tYXBMZWdlbmRcbiAgICAgICAgPyBERUZBVUxUX01BUF9MRUdFTkRfQ09OVFJPTFxuICAgICAgICA6IERFRkFVTFRfTUFQX0NPTlRST0xTX0ZFQVRVUkVTXG4gIH0pLFxuICB7fSBhcyBNYXBDb250cm9sc1xuKTtcblxuLyoqXG4gKiBEZWZhdWx0IGltYWdlIGV4cG9ydCBjb25maWdcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHJhdGlvIERlZmF1bHQ6IGAnU0NSRUVOJ2AsXG4gKiBAcHJvcGVydHkgcmVzb2x1dGlvbiBEZWZhdWx0OiBgJ09ORV9YJ2AsXG4gKiBAcHJvcGVydHkgbGVnZW5kIERlZmF1bHQ6IGBmYWxzZWAsXG4gKiBAcHJvcGVydHkgbWFwSCBEZWZhdWx0OiAwLFxuICogQHByb3BlcnR5IG1hcFcgRGVmYXVsdDogMCxcbiAqIEBwcm9wZXJ0eSBpbWFnZVNpemUgRGVmYXVsdDoge3pvb21PZmZzZXQ6IDAsIHNjYWxlOiAxLCBpbWFnZVc6IDAsIGltYWdlSDogMH0sXG4gKiBAcHJvcGVydHkgaW1hZ2VEYXRhVXJpIERlZmF1bHQ6IGAnJ2AsXG4gKiBAcHJvcGVydHkgZXhwb3J0aW5nIERlZmF1bHQ6IGBmYWxzZWBcbiAqIEBwcm9wZXJ0eSBlcnJvciBEZWZhdWx0OiBgZmFsc2VgXG4gKiBAcHJvcGVydHkgZXNjYXBlWGh0bWxGb3JXZWJwYWNrIERlZmF1bHQ6IGZyb20gYXBwbGljYXRpb24gY29uZmlnIChhdXRvLWRldGVjdGVkOiBgdHJ1ZWAgZm9yIHdlYnBhY2spXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9JTUFHRTogRXhwb3J0SW1hZ2UgPSB7XG4gIC8vIHVzZXIgb3B0aW9uc1xuICByYXRpbzogRVhQT1JUX0lNR19SQVRJT1MuU0NSRUVOLFxuICByZXNvbHV0aW9uOiBSRVNPTFVUSU9OUy5PTkVfWCxcbiAgbGVnZW5kOiBmYWxzZSxcbiAgbWFwSDogMCxcbiAgbWFwVzogMCxcbiAgaW1hZ2VTaXplOiB7XG4gICAgem9vbU9mZnNldDogMCxcbiAgICBzY2FsZTogMSxcbiAgICBpbWFnZVc6IDAsXG4gICAgaW1hZ2VIOiAwXG4gIH0sXG4gIC8vIHdoZW4gdGhpcyBpcyBzZXQgdG8gdHJ1ZSwgdGhlIG1vY2sgbWFwIHZpZXdwb3J0IHdpbGwgbW92ZSB0byB0aGUgY2VudGVyIG9mIGRhdGFcbiAgY2VudGVyOiBmYWxzZSxcbiAgLy8gZXhwb3J0aW5nIHN0YXRlXG4gIGltYWdlRGF0YVVyaTogJycsXG4gIC8vIGV4cG9ydGluZzogdXNlZCB0byBhdHRhY2ggcGxvdC1jb250YWluZXIgdG8gZG9tXG4gIGV4cG9ydGluZzogZmFsc2UsXG4gIC8vIHByb2Nlc3Npbmc6IHVzZWQgYXMgbG9hZGluZyBpbmRpY2F0b3Igd2hlbiBleHBvcnQgaW1hZ2UgaXMgYmVpbmcgcHJvZHVjZWRcbiAgcHJvY2Vzc2luZzogZmFsc2UsXG4gIGVycm9yOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byBhcHBseSBmaXggZm9yIHVnbGlmeSBlcnJvciBpbiBkb20tdG8taW1hZ2UgKGZyb20gYXBwbGljYXRpb24gY29uZmlnLCBhdXRvLWRldGVjdHMgYnVpbGQgdG9vbClcbiAgZXNjYXBlWGh0bWxGb3JXZWJwYWNrOiBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVzY2FwZVhodG1sRm9yV2VicGFja1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTE9BRF9GSUxFUyA9IHtcbiAgZmlsZUxvYWRpbmc6IGZhbHNlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgZXhwb3J0RGF0YWAgc2V0dGluZ3NcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHNlbGVjdGVkRGF0YXNldCBEZWZhdWx0OiBgJydgLFxuICogQHByb3BlcnR5IGRhdGFUeXBlIERlZmF1bHQ6IGAnY3N2J2AsXG4gKiBAcHJvcGVydHkgZmlsdGVyZWQgRGVmYXVsdDogYHRydWVgLFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfREFUQTogRXhwb3J0RGF0YSA9IHtcbiAgc2VsZWN0ZWREYXRhc2V0OiAnJyxcbiAgZGF0YVR5cGU6IEVYUE9SVF9EQVRBX1RZUEUuQ1NWLFxuICBmaWx0ZXJlZDogdHJ1ZVxufTtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTk9USUZJQ0FUSU9OUyA9IFtdO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IGV4cG9ydE1hcGJveEFjY2Vzc1Rva2VuIC0gRGVmYXVsdDogbnVsbCwgdGhpcyBpcyB1c2VkIHdoZW4gd2UgcHJvdmlkZSBhIGRlZmF1bHQgbWFwYm94IHRva2VuIGZvciB1c2VycyB0byB0YWtlIGFkdmFudGFnZSBvZlxuICogQHByb3BlcnR5IHVzZXJNYXBib3hUb2tlbiAtIERlZmF1bHQ6ICcnLCBtYXBib3ggdG9rZW4gcHJvdmlkZWQgYnkgdXNlciB0aHJvdWdoIGlucHV0IGZpZWxkXG4gKiBAcHJvcGVydHkgbW9kZSAtIERlZmF1bHQ6ICdSRUFEJywgcmVhZCBvbmx5IG9yIGVkaXRhYmxlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9IVE1MOiBFeHBvcnRIdG1sID0ge1xuICBleHBvcnRNYXBib3hBY2Nlc3NUb2tlbjogbnVsbCxcbiAgdXNlck1hcGJveFRva2VuOiAnJyxcbiAgbW9kZTogRVhQT1JUX0hUTUxfTUFQX01PREVTLlJFQURcbn07XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgaGFzRGF0YSAtIERlZmF1bHQ6ICd0cnVlJyxcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX0pTT046IEV4cG9ydEpzb24gPSB7XG4gIGhhc0RhdGE6IHRydWVcbn07XG5cbi8qKlxuICogRXhwb3J0IE1hcCBDb25maWdcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IEhUTUwgLSBEZWZhdWx0OiAnREVGQVVMVF9FWFBPUlRfSFRNTCcsXG4gKiBAcHJvcGVydHkgSlNPTiAtIERlZmF1bHQ6ICdERUZBVUxUX0VYUE9SVF9KU09OJyxcbiAqIEBwcm9wZXJ0eSBmb3JtYXQgLSBEZWZhdWx0OiAnSFRNTCcsXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9NQVA6IEV4cG9ydE1hcCA9IHtcbiAgW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXTogREVGQVVMVF9FWFBPUlRfSFRNTCxcbiAgW0VYUE9SVF9NQVBfRk9STUFUUy5KU09OXTogREVGQVVMVF9FWFBPUlRfSlNPTixcbiAgZm9ybWF0OiBFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYGV4cG9ydFZpZGVvYCBzZXR0aW5nc1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgbWVkaWFUeXBlIERlZmF1bHQ6IGAnd2VibSdgXG4gKiBAcHJvcGVydHkgY2FtZXJhUHJlc2V0IERlZmF1bHQ6IGAnTm9uZSdgXG4gKiBAcHJvcGVydHkgZmlsZU5hbWUgRGVmYXVsdDogYCdrZXBsZXIuZ2wnYFxuICogQHByb3BlcnR5IHJlc29sdXRpb24gRGVmYXVsdDogYCcxMjgweDcyMCdgXG4gKiBAcHJvcGVydHkgZHVyYXRpb25NcyBEZWZhdWx0OiBgMTAwMGBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX1ZJREVPOiBFeHBvcnRWaWRlbyA9IHtcbiAgbWVkaWFUeXBlOiAnd2VibScsIC8vIHVzZSB3ZWJtIGFzIGRlZmF1bHQgYXMgZ2lmIGV4cG9ydCB0ZW5kcyB0byBmcmVlemUgb24gbGFyZ2VyIHJlY29yZGluZ3NcbiAgY2FtZXJhUHJlc2V0OiAnTm9uZScsXG4gIGZpbGVOYW1lOiAna2VwbGVyLmdsJyxcbiAgcmVzb2x1dGlvbjogJzEyODB4NzIwJyxcbiAgZHVyYXRpb25NczogMTAwMCxcbiAgc3dpcGVTdGFydFBjdDogMCxcbiAgc3dpcGVFbmRQY3Q6IDEwMCxcbiAgc3dpcGVFYXNpbmc6ICdlYXNlLWluLW91dCdcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB1aVN0YXRlYFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgcmVhZE9ubHkgRGVmYXVsdDogYGZhbHNlYFxuICogQHByb3BlcnR5IGFjdGl2ZVNpZGVQYW5lbCBEZWZhdWx0OiBgJ2xheWVyJ2BcbiAqIEBwcm9wZXJ0eSBjdXJyZW50TW9kYWwgRGVmYXVsdDogYCdhZGREYXRhJ2BcbiAqIEBwcm9wZXJ0eSBkYXRhc2V0S2V5VG9SZW1vdmUgRGVmYXVsdDogYG51bGxgXG4gKiBAcHJvcGVydHkgdmlzaWJsZURyb3Bkb3duIERlZmF1bHQ6IGBudWxsYFxuICogQHByb3BlcnR5IGV4cG9ydEltYWdlIERlZmF1bHQ6IFtgREVGQVVMVF9FWFBPUlRfSU1BR0VgXSgjZGVmYXVsdF9leHBvcnRfaW1hZ2UpXG4gKiBAcHJvcGVydHkgZXhwb3J0RGF0YSBEZWZhdWx0OiBbYERFRkFVTFRfRVhQT1JUX0RBVEFgXSgjZGVmYXVsdF9leHBvcnRfZGF0YSlcbiAqIEBwcm9wZXJ0eSBleHBvcnRNYXAgRGVmYXVsdDogW2BERUZBVUxUX0VYUE9SVF9NQVBgXSgjZGVmYXVsdF9leHBvcnRfbWFwKVxuICogQHByb3BlcnR5IG1hcENvbnRyb2xzIERlZmF1bHQ6IFtgREVGQVVMVF9NQVBfQ09OVFJPTFNgXSgjZGVmYXVsdF9tYXBfY29udHJvbHMpXG4gKiBAcHJvcGVydHkgbm90aWZpY2F0aW9ucyBEZWZhdWx0OiBgW11gXG4gKiBAcHJvcGVydHkgbm90aWZpY2F0aW9ucyBEZWZhdWx0OiBgW11gXG4gKiBAcHJvcGVydHkgbG9hZEZpbGVzXG4gKiBAcHJvcGVydHkgaXNTaWRlUGFuZWxDbG9zZUJ1dHRvblZpc2libGUgRGVmYXVsdDogYHRydWVgXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX1VJX1NUQVRFOiBVaVN0YXRlID0ge1xuICByZWFkT25seTogZmFsc2UsXG4gIGFjdGl2ZVNpZGVQYW5lbDogREVGQVVMVF9BQ1RJVkVfU0lERV9QQU5FTCxcbiAgY3VycmVudE1vZGFsOiBERUZBVUxUX01PREFMLFxuICBkYXRhc2V0S2V5VG9SZW1vdmU6IG51bGwsXG4gIHZpc2libGVEcm9wZG93bjogbnVsbCxcbiAgLy8gZXhwb3J0IGltYWdlIG1vZGFsIHVpXG4gIGV4cG9ydEltYWdlOiBERUZBVUxUX0VYUE9SVF9JTUFHRSxcbiAgLy8gZXhwb3J0IGRhdGEgbW9kYWwgdWlcbiAgZXhwb3J0RGF0YTogREVGQVVMVF9FWFBPUlRfREFUQSxcbiAgLy8gaHRtbCBleHBvcnRcbiAgZXhwb3J0TWFwOiBERUZBVUxUX0VYUE9SVF9NQVAsXG4gIC8vIGV4cG9ydCB2aWRlbyBtb2RhbCB1aVxuICBleHBvcnRWaWRlbzogREVGQVVMVF9FWFBPUlRfVklERU8sXG4gIC8vIG1hcCBjb250cm9sIHBhbmVsc1xuICBtYXBDb250cm9sczogREVGQVVMVF9NQVBfQ09OVFJPTFMsXG4gIC8vIHVpIG5vdGlmaWNhdGlvbnNcbiAgbm90aWZpY2F0aW9uczogREVGQVVMVF9OT1RJRklDQVRJT05TLFxuICAvLyBsb2FkIGZpbGVzXG4gIGxvYWRGaWxlczogREVGQVVMVF9MT0FEX0ZJTEVTLFxuICAvLyBMb2NhbGUgb2YgdGhlIFVJXG4gIGxvY2FsZTogTE9DQUxFX0NPREVTLmVuLFxuICBsYXllclBhbmVsTGlzdFZpZXc6ICdsaXN0JyxcbiAgZmlsdGVyUGFuZWxMaXN0VmlldzogJ2xpc3QnLFxuICBpc1NpZGVQYW5lbENsb3NlQnV0dG9uVmlzaWJsZTogdHJ1ZVxufTtcblxuLyogVXBkYXRlcnMgKi9cbi8qKlxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgaW5pdFVpU3RhdGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgdHlwZT86ICh0eXBlb2YgQWN0aW9uVHlwZXMpWydJTklUJ107XG4gICAgcGF5bG9hZDogS2VwbGVyR2xJbml0UGF5bG9hZDtcbiAgfVxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgLi4uKGFjdGlvbi5wYXlsb2FkIHx8IHt9KS5pbml0aWFsVWlTdGF0ZVxufSk7XG5cbi8qKlxuICogVG9nZ2xlIGFjdGl2ZSBzaWRlIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgaWQgb2Ygc2lkZSBwYW5lbCB0byBiZSBzaG93biwgb25lIG9mIGBsYXllcmAsIGBmaWx0ZXJgLCBgaW50ZXJhY3Rpb25gLCBgbWFwYC4gY2xvc2Ugc2lkZSBwYW5lbCBpZiBgbnVsbGBcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU2lkZVBhbmVsVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBpZH06IFVJU3RhdGVBY3Rpb25zLlRvZ2dsZVNpZGVQYW5lbFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICByZXR1cm4gaWQgPT09IHN0YXRlLmFjdGl2ZVNpZGVQYW5lbFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGFjdGl2ZVNpZGVQYW5lbDogaWRcbiAgICAgIH07XG59O1xuXG4vKipcbiAqIFNob3cgYW5kIGhpZGUgbW9kYWwgZGlhbG9nXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW1hY3Rpb24ucGF5bG9hZCBpZCBvZiBtb2RhbCB0byBiZSBzaG93biwgbnVsbCB0byBoaWRlIG1vZGFscy4gT25lIG9mOlxuICogIC0gW2BEQVRBX1RBQkxFX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjZGF0YV90YWJsZV9pZClcbiAqICAtIFtgREVMRVRFX0RBVEFfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNkZWxldGVfZGF0YV9pZClcbiAqICAtIFtgQUREX0RBVEFfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNhZGRfZGF0YV9pZClcbiAqICAtIFtgRVhQT1JUX0lNQUdFX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjZXhwb3J0X2ltYWdlX2lkKVxuICogIC0gW2BFWFBPUlRfREFUQV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2V4cG9ydF9kYXRhX2lkKVxuICogIC0gW2BBRERfTUFQX1NUWUxFX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjYWRkX21hcF9zdHlsZV9pZClcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTW9kYWxVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGlkfTogVUlTdGF0ZUFjdGlvbnMuVG9nZ2xlTW9kYWxVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBjdXJyZW50TW9kYWw6IGlkXG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IHNpZGUgcGFuZWwgaGVhZGVyIGRyb3Bkb3duLCBhY3RpdmF0ZWQgYnkgY2xpY2tpbmcgdGhlIHNoYXJlIGxpbmsgb24gdG9wIG9mIHRoZSBzaWRlIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RXhwb3J0RHJvcGRvd25VcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGlkfTogVUlTdGF0ZUFjdGlvbnMuU2hvd0V4cG9ydERyb3Bkb3duVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgdmlzaWJsZURyb3Bkb3duOiBpZFxufSk7XG5cbi8qKlxuICogSGlkZSBzaWRlIHBhbmVsIGhlYWRlciBkcm9wZG93biwgYWN0aXZhdGVkIGJ5IGNsaWNraW5nIHRoZSBzaGFyZSBsaW5rIG9uIHRvcCBvZiB0aGUgc2lkZSBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgaGlkZUV4cG9ydERyb3Bkb3duVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIHZpc2libGVEcm9wZG93bjogbnVsbFxufSk7XG5cbi8qKlxuICogVG9nZ2xlIHNpZGUgcGFuZWwgY2xvc2UgYnV0dG9uIG9uIHRvcCBsZWZ0IG9mIHRoZSBzaWRlIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTaWRlUGFuZWxDbG9zZUJ1dHRvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDoge3Nob3d9fTogVUlTdGF0ZUFjdGlvbnMuVG9nZ2xlU2lkZVBhbmVsQ2xvc2VCdXR0b25VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBpc1NpZGVQYW5lbENsb3NlQnV0dG9uVmlzaWJsZTogc2hvd1xufSk7XG5cbi8vIE1hcCBjb250cm9sIGRyb3Bkb3ducy9tZW51cyB0aGF0IG92ZXJsYXAgZWFjaCBvdGhlciB2aXN1YWxseSBhbmQgdGhlcmVmb3JlXG4vLyBzaG91bGQgYmUgbXV0dWFsbHkgZXhjbHVzaXZlOiBvcGVuaW5nIG9uZSBjbG9zZXMgYWxsIHRoZSBvdGhlcnMuXG4vLyAoc3BsaXQvdmlldy1tb2RlIG1lbnUsIHRvcC8zZC9nbG9iZSBtZW51LCBwb2x5Z29uIGRyYXcgdG9vbCwgbGFuZ3VhZ2UgbWVudSlcbmV4cG9ydCBjb25zdCBNVVRVQUxMWV9FWENMVVNJVkVfTUFQX0NPTlRST0xTOiBzdHJpbmdbXSA9IFtcbiAgTUFQX0NPTlRST0xTLnNwbGl0TWFwLFxuICBNQVBfQ09OVFJPTFMudG9nZ2xlM2QsXG4gIE1BUF9DT05UUk9MUy5tYXBEcmF3LFxuICBNQVBfQ09OVFJPTFMubWFwTG9jYWxlXG5dO1xuXG4vKipcbiAqIFRvZ2dsZSBhY3RpdmUgbWFwIGNvbnRyb2wgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbWFwIGNvbnRyb2wgcGFuZWwgaWQsIG9uZSBvZiB0aGUga2V5cyBvZjogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDoge3BhbmVsSWQsIGluZGV4ID0gMH19OiBVSVN0YXRlQWN0aW9ucy5Ub2dnbGVNYXBDb250cm9sVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGxldCB1cGRhdGVkU3RhdGUgPSBzdGF0ZTtcbiAgLy8gVGhlIGVmZmVjdCBwYW5lbCBhbmQgYWkgYXNzaXN0YW50IHBhbmVsIGNhbiBub3QgYmUgYWN0aXZlIGF0IHRoZSBzYW1lIHRpbWVcbiAgLy8gc28gd2UgbmVlZCB0byBkZWFjdGl2YXRlIHRoZSBvdGhlciBwYW5lbCB3aGVuIG9uZSBpcyBhY3RpdmF0ZWRcbiAgY29uc3QgcGFuZWxUb0RlYWN0aXZhdGUgPVxuICAgIHBhbmVsSWQgPT09IE1BUF9DT05UUk9MUy5lZmZlY3RcbiAgICAgID8gTUFQX0NPTlRST0xTLmFpQXNzaXN0YW50XG4gICAgICA6IHBhbmVsSWQgPT09IE1BUF9DT05UUk9MUy5haUFzc2lzdGFudFxuICAgICAgPyBNQVBfQ09OVFJPTFMuZWZmZWN0XG4gICAgICA6IG51bGw7XG5cbiAgLy8gSWYgd2UgbmVlZCB0byBkZWFjdGl2YXRlIGEgY29tcGV0aW5nIHBhbmVsIGFuZCBpdCdzIGN1cnJlbnRseSBhY3RpdmVcbiAgaWYgKHBhbmVsVG9EZWFjdGl2YXRlICYmIHN0YXRlLm1hcENvbnRyb2xzW3BhbmVsVG9EZWFjdGl2YXRlXT8uYWN0aXZlKSB7XG4gICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBtYXBDb250cm9sczoge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUubWFwQ29udHJvbHMsXG4gICAgICAgIFtwYW5lbFRvRGVhY3RpdmF0ZV06IHtcbiAgICAgICAgICAuLi51cGRhdGVkU3RhdGUubWFwQ29udHJvbHNbcGFuZWxUb0RlYWN0aXZhdGVdLFxuICAgICAgICAgIGFjdGl2ZTogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgb3ZlcmxhcHBpbmcgbWFwIGNvbnRyb2wgbWVudXMgc2hvdWxkIGJlIG11dHVhbGx5IGV4Y2x1c2l2ZTogd2hlbiBvbmUgb2ZcbiAgLy8gdGhlbSBpcyBiZWluZyBvcGVuZWQsIGRlYWN0aXZhdGUgZXZlcnkgb3RoZXIgb25lIHRoYXQgaXMgY3VycmVudGx5IGFjdGl2ZVxuICAvLyBzbyB0aGVpciBkcm9wZG93bnMgbmV2ZXIgb3ZlcmxhcCBvbiBzY3JlZW4uXG4gIGNvbnN0IGlzT3BlbmluZyA9ICF1cGRhdGVkU3RhdGUubWFwQ29udHJvbHNbcGFuZWxJZF0/LmFjdGl2ZTtcbiAgaWYgKGlzT3BlbmluZyAmJiBNVVRVQUxMWV9FWENMVVNJVkVfTUFQX0NPTlRST0xTLmluY2x1ZGVzKHBhbmVsSWQpKSB7XG4gICAgY29uc3QgbmV4dE1hcENvbnRyb2xzID0gey4uLnVwZGF0ZWRTdGF0ZS5tYXBDb250cm9sc307XG4gICAgbGV0IGRpZERlYWN0aXZhdGUgPSBmYWxzZTtcbiAgICBNVVRVQUxMWV9FWENMVVNJVkVfTUFQX0NPTlRST0xTLmZvckVhY2goY29udHJvbElkID0+IHtcbiAgICAgIGlmIChjb250cm9sSWQgIT09IHBhbmVsSWQgJiYgbmV4dE1hcENvbnRyb2xzW2NvbnRyb2xJZF0/LmFjdGl2ZSkge1xuICAgICAgICBuZXh0TWFwQ29udHJvbHNbY29udHJvbElkXSA9IHsuLi5uZXh0TWFwQ29udHJvbHNbY29udHJvbElkXSwgYWN0aXZlOiBmYWxzZX07XG4gICAgICAgIGRpZERlYWN0aXZhdGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChkaWREZWFjdGl2YXRlKSB7XG4gICAgICB1cGRhdGVkU3RhdGUgPSB7Li4udXBkYXRlZFN0YXRlLCBtYXBDb250cm9sczogbmV4dE1hcENvbnRyb2xzfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICBtYXBDb250cm9sczoge1xuICAgICAgLi4udXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgW3BhbmVsSWRdOiB7XG4gICAgICAgIC4uLnVwZGF0ZWRTdGF0ZS5tYXBDb250cm9sc1twYW5lbElkXSxcbiAgICAgICAgYWN0aXZlOiAhdXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdLmFjdGl2ZSxcbiAgICAgICAgYWN0aXZlTWFwSW5kZXg6IGluZGV4XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGUgbWFwIGNvbnRyb2wgdmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvbiBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBtYXAgY29udHJvbCBwYW5lbCBpZCwgb25lIG9mIHRoZSBrZXlzIG9mOiBbYERFRkFVTFRfTUFQX0NPTlRST0xTYF0oI2RlZmF1bHRfbWFwX2NvbnRyb2xzKVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBDb250cm9sVmlzaWJpbGl0eVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDoge3BhbmVsSWQsIHNob3d9fTogVUlTdGF0ZUFjdGlvbnMuc2V0TWFwQ29udHJvbFZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5tYXBDb250cm9scz8uW3BhbmVsSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtYXBDb250cm9sczoge1xuICAgICAgLi4uc3RhdGUubWFwQ29udHJvbHMsXG4gICAgICBbcGFuZWxJZF06IHtcbiAgICAgICAgLi4uc3RhdGUubWFwQ29udHJvbHNbcGFuZWxJZF0sXG4gICAgICAgIHNob3c6IEJvb2xlYW4oc2hvdylcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZSBtYXAgY29udHJvbCBzZXR0aW5nc1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvbiBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBtYXAgY29udHJvbCBwYW5lbCBpZCwgb25lIG9mIHRoZSBrZXlzIG9mOiBbYERFRkFVTFRfTUFQX0NPTlRST0xTYF0oI2RlZmF1bHRfbWFwX2NvbnRyb2xzKVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBDb250cm9sU2V0dGluZ3NVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtwYW5lbElkLCBzZXR0aW5nc319OiBVSVN0YXRlQWN0aW9ucy5zZXRNYXBDb250cm9sU2V0dGluZ3NVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgY29uc3QgbWFwQ29udHJvbCA9IHN0YXRlLm1hcENvbnRyb2xzPy5bcGFuZWxJZF07XG4gIGlmICghbWFwQ29udHJvbCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwQ29udHJvbHM6IHtcbiAgICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgW3BhbmVsSWRdOiB7Li4ubWFwQ29udHJvbCwgc2V0dGluZ3M6IHsuLi5tYXBDb250cm9sLnNldHRpbmdzLCAuLi5zZXR0aW5nc319XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGUgYWN0aXZlIG1hcCBjb250cm9sIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgZGF0YXNldCBpZFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBvcGVuRGVsZXRlTW9kYWxVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGRhdGFzZXRLZXlUb1JlbW92ZX06IFVJU3RhdGVBY3Rpb25zLk9wZW5EZWxldGVNb2RhbFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGN1cnJlbnRNb2RhbDogREVMRVRFX0RBVEFfSUQsXG4gIGRhdGFzZXRLZXlUb1JlbW92ZVxufSk7XG5cbi8qKlxuICogU2V0IGBleHBvcnRJbWFnZS5sZWdlbmRgIHRvIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogbmV3U2V0dGluZ306IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCB1cGRhdGVkID0gey4uLnN0YXRlLmV4cG9ydEltYWdlLCAuLi5uZXdTZXR0aW5nfTtcbiAgY29uc3QgaW1hZ2VTaXplID0gY2FsY3VsYXRlRXhwb3J0SW1hZ2VTaXplKHVwZGF0ZWQpIHx8IHN0YXRlLmV4cG9ydEltYWdlLmltYWdlU2l6ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGV4cG9ydEltYWdlOiB7XG4gICAgICAuLi51cGRhdGVkLFxuICAgICAgaW1hZ2VTaXplXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTZXQgYGV4cG9ydEltYWdlLnNldEV4cG9ydEltYWdlRGF0YVVyaWAgdG8gYSBpbWFnZSBkYXRhVXJpXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgZXhwb3J0IGltYWdlIGRhdGEgdXJpXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlRGF0YVVyaVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YVVyaX06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEltYWdlRGF0YVVyaVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBpZiAoZGF0YVVyaSA9PT0gc3RhdGUuZXhwb3J0SW1hZ2UuaW1hZ2VEYXRhVXJpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZXhwb3J0SW1hZ2U6IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydEltYWdlLFxuICAgICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgICBpbWFnZURhdGFVcmk6IGRhdGFVcmlcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlRXJyb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGVycm9yfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0SW1hZ2VFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydEltYWdlOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0SW1hZ2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgZXJyb3JcbiAgfVxufSk7XG5cbi8qKlxuICogRGVsZXRlIGNhY2hlZCBleHBvcnQgaW1hZ2VcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFudXBFeHBvcnRJbWFnZVVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRJbWFnZToge1xuICAgIC4uLnN0YXRlLmV4cG9ydEltYWdlLFxuICAgIGV4cG9ydGluZzogZmFsc2UsXG4gICAgaW1hZ2VEYXRhVXJpOiAnJyxcbiAgICBlcnJvcjogZmFsc2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgY2VudGVyOiBmYWxzZVxuICB9XG59KTtcblxuLyoqXG4gKiBTZXQgYGV4cG9ydFZpZGVvYCBzZXR0aW5nczogbWVkaWFUeXBlLCBjYW1lcmFQcmVzZXQsIGZpbGVOYW1lLCByZXNvbHV0aW9uLCBkdXJhdGlvbk1zXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbmV3IHZpZGVvIGV4cG9ydCBzZXR0aW5nc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRWaWRlb1NldHRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IG5ld1NldHRpbmd9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRWaWRlb1NldHRpbmdVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRWaWRlbzoge1xuICAgIC4uLnN0YXRlLmV4cG9ydFZpZGVvLFxuICAgIC4uLm5ld1NldHRpbmdcbiAgfVxufSk7XG5cbi8qKlxuICogU3RhcnQgaW1hZ2UgZXhwb3J0aW5nIGZsb3dcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtVaVN0YXRlfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc3RhcnRFeHBvcnRpbmdJbWFnZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogb3B0aW9ucyA9IHt9fToge3BheWxvYWQ6IFBhcnRpYWw8RXhwb3J0SW1hZ2U+fVxuKTogVWlTdGF0ZSA9PiB7XG4gIGNvbnN0IGltYWdlU2V0dGluZ3MgPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBleHBvcnRpbmc6IHRydWVcbiAgfTtcblxuICByZXR1cm4gY29tcG9zZV8oW1xuICAgIGNsZWFudXBFeHBvcnRJbWFnZVVwZGF0ZXIsXG4gICAgYXBwbHlfKHNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXIsIHBheWxvYWRfKGltYWdlU2V0dGluZ3MpKVxuICBdKShzdGF0ZSk7XG59O1xuXG4vKipcbiAqIFNldCBzZWxlY3RlZCBkYXRhc2V0IGZvciBleHBvcnRcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBkYXRhc2V0IGlkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YXNldH06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydERhdGE6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnREYXRhLFxuICAgIHNlbGVjdGVkRGF0YXNldDogZGF0YXNldFxuICB9XG59KTtcblxuLyoqXG4gKiBTZXQgZGF0YSBmb3JtYXQgZm9yIGV4cG9ydGluZyBkYXRhXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgb25lIG9mIGAndGV4dC9jc3YnYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YVR5cGV9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydERhdGE6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnREYXRhLFxuICAgIGRhdGFUeXBlXG4gIH1cbn0pO1xuXG4vKipcbiAqIFdoZXRoZXIgdG8gZXhwb3J0IGZpbHRlcmVkIGRhdGEsIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGZpbHRlcmVkfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnREYXRhOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0RGF0YSxcbiAgICBmaWx0ZXJlZFxuICB9XG59KTtcblxuLyoqXG4gKiBXaGV0aGVyIHRvIGluY2x1ZGluZyBkYXRhIGluIG1hcCBjb25maWcsIHRvZ2dsZSBiZXR3ZWVuIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydERhdGFVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl06IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl0sXG4gICAgICBoYXNEYXRhOiAhc3RhdGUuZXhwb3J0TWFwW0VYUE9SVF9NQVBfRk9STUFUUy5KU09OXS5oYXNEYXRhXG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiB3aGV0aGVyIHRvIGV4cG9ydCBhIG1hcGJveCBhY2Nlc3MgdG8gSFRNTCBzaW5nbGUgcGFnZVxuICogQHBhcmFtIHN0YXRlIC0gYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB1c2VyTWFwYm94VG9rZW59OiBVSVN0YXRlQWN0aW9ucy5TZXRVc2VyTWFwYm94QWNjZXNzVG9rZW5VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRNYXA6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRNYXAsXG4gICAgW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXToge1xuICAgICAgLi4uc3RhdGUuZXhwb3J0TWFwW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXSxcbiAgICAgIHVzZXJNYXBib3hUb2tlblxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogU2V0cyB0aGUgZXhwb3J0IG1hcCBmb3JtYXRcbiAqIEBwYXJhbSBzdGF0ZSAtIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGZvcm1hdCB0byB1c2UgdG8gZXhwb3J0IHRoZSBtYXAgaW50b1xuICogQHJldHVybiBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydE1hcEZvcm1hdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZm9ybWF0fTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0TWFwRm9ybWF0VXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBmb3JtYXRcbiAgfVxufSk7XG5cbi8qKlxuICogU2V0IHRoZSBleHBvcnQgaHRtbCBtYXAgbW9kZVxuICogQHBhcmFtIHN0YXRlIC0gYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgdG8gYmUgc2V0IChhdmFpbGFibGUgbW9kZXM6IEVYUE9SVF9IVE1MX01BUF9NT0RFUylcbiAqIEByZXR1cm4gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRNYXBIVE1MTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogbW9kZX06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEhUTUxNYXBNb2RlVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF06IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF0sXG4gICAgICBtb2RlXG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBBZGRzIGEgbmV3IG5vdGlmaWNhdGlvbi5cbiAqIFVwZGF0ZXMgYSBub3RpZmljYXRpb24gaW4gY2FzZSBvZiBtYXRjaGluZyBpZHMuXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGFyYW1zIG9mIGEgbm90aWZpY2F0aW9uXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZE5vdGlmaWNhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZH06IFVJU3RhdGVBY3Rpb25zLkFkZE5vdGlmaWNhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCBvbGROb3RpZmljYXRpb25zID0gc3RhdGUubm90aWZpY2F0aW9ucyB8fCBbXTtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBjb25zdCBwYXlsb2FkSWQgPSBwYXlsb2FkPy5pZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVG9VcGRhdGUgPSBwYXlsb2FkSWQgPyBvbGROb3RpZmljYXRpb25zLmZpbmQobiA9PiBuLmlkID09PSBwYXlsb2FkSWQpIDogbnVsbDtcblxuICBsZXQgbm90aWZpY2F0aW9ucztcbiAgaWYgKG5vdGlmaWNhdGlvblRvVXBkYXRlKSB7XG4gICAgbm90aWZpY2F0aW9ucyA9IG9sZE5vdGlmaWNhdGlvbnMubWFwKG4gPT5cbiAgICAgIG4uaWQgPT09IHBheWxvYWRJZCA/IGNyZWF0ZU5vdGlmaWNhdGlvbih7Li4ucGF5bG9hZCwgY291bnQ6IG4uY291bnQgKyAxfSkgOiBuXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBub3RpZmljYXRpb25zID0gWy4uLm9sZE5vdGlmaWNhdGlvbnMsIGNyZWF0ZU5vdGlmaWNhdGlvbihwYXlsb2FkKV07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBub3RpZmljYXRpb25zfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbm90aWZpY2F0aW9uXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgaWQgb2YgdGhlIG5vdGlmaWNhdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZU5vdGlmaWNhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogaWR9OiBVSVN0YXRlQWN0aW9ucy5SZW1vdmVOb3RpZmljYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBub3RpZmljYXRpb25zOiBzdGF0ZS5ub3RpZmljYXRpb25zLmZpbHRlcihuID0+IG4uaWQgIT09IGlkKVxufSk7XG5cbi8qKlxuICogRmlyZWQgd2hlbiBmaWxlIGxvYWRpbmcgYmVnaW5cbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxvYWRGaWxlczoge1xuICAgIC4uLnN0YXRlLmxvYWRGaWxlcyxcbiAgICBmaWxlTG9hZGluZzogdHJ1ZVxuICB9XG59KTtcblxuLyoqXG4gKiBIYW5kbGVzIGxvYWRpbmcgZmlsZSBzdWNjZXNzIGFuZCBzZXQgZmlsZUxvYWRpbmcgcHJvcGVydHkgdG8gZmFsc2VcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsb2FkRmlsZXM6IHtcbiAgICAuLi5zdGF0ZS5sb2FkRmlsZXMsXG4gICAgZmlsZUxvYWRpbmc6IGZhbHNlXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhhbmRsZXMgbG9hZCBmaWxlIGVycm9yIGFuZCBzZXQgZmlsZUxvYWRpbmcgcHJvcGVydHkgdG8gZmFsc2VcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5lcnJvclxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlLCB7ZXJyb3J9OiBMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uKTogVWlTdGF0ZSA9PlxuICBhZGROb3RpZmljYXRpb25VcGRhdGVyKFxuICAgIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbG9hZEZpbGVzOiB7XG4gICAgICAgIC4uLnN0YXRlLmxvYWRGaWxlcyxcbiAgICAgICAgZmlsZUxvYWRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBwYXlsb2FkOiBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgIG1lc3NhZ2U6IChlcnJvciB8fCB7fSkubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHVwbG9hZCBmaWxlcycsXG4gICAgICAgIHRvcGljOiBERUZBVUxUX05PVElGSUNBVElPTl9UT1BJQ1MuZ2xvYmFsXG4gICAgICB9KVxuICAgIH1cbiAgKTtcblxuLyoqXG4gKiBIYW5kbGVzIHRvZ2dsZSBtYXAgc3BsaXQgYW5kIHJlc2V0IGFsbCBtYXAgY29udHJvbCBpbmRleCB0byAwXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwQ29udHJvbHM6IE9iamVjdC5lbnRyaWVzKHN0YXRlLm1hcENvbnRyb2xzKS5yZWR1Y2UoXG4gICAgKGFjYywgZW50cnkpID0+ICh7XG4gICAgICAuLi5hY2MsXG4gICAgICBbZW50cnlbMF1dOiB7XG4gICAgICAgIC4uLmVudHJ5WzFdLFxuICAgICAgICBhY3RpdmVNYXBJbmRleDogMFxuICAgICAgfVxuICAgIH0pLFxuICAgIHt9IGFzIE1hcENvbnRyb2xzXG4gIClcbn0pO1xuXG4vKipcbiAqIFRvZ2dsZSBtb2RhbCBkYXRhXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+XG4gIHRvZ2dsZU1vZGFsVXBkYXRlcihzdGF0ZSwge3BheWxvYWQ6IERBVEFfVEFCTEVfSUR9KTtcblxuLyoqXG4gKiBTZXQgdGhlIGxvY2FsZSBvZiB0aGUgVUlcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZFxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkLmxvY2FsZSBsb2NhbGVcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9jYWxlVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB7bG9jYWxlfX06IFVJU3RhdGVBY3Rpb25zLlNldExvY2FsZVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxvY2FsZVxufSk7XG5cbi8qKlxuICogVG9nZ2xlIGxheWVyIHBhbmVsIGxpc3Qgdmlld1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGxheWVyIHBhbmVsIGxpc3RWaWV3IHZhbHVlLiBDYW4gYmUgJ2xpc3QnIG9yICdzb3J0QnlEYXRhc2V0J1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVQYW5lbExpc3RWaWV3VXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB7cGFuZWxJZCwgbGlzdFZpZXd9fTogVUlTdGF0ZUFjdGlvbnMuVG9nZ2xlUGFuZWxMaXN0Vmlld0FjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGNvbnN0IHN0YXRlUHJvcCA9XG4gICAgcGFuZWxJZCA9PT0gJ2xheWVyJ1xuICAgICAgPyAnbGF5ZXJQYW5lbExpc3RWaWV3J1xuICAgICAgOiBwYW5lbElkID09PSAnZmlsdGVyJ1xuICAgICAgPyAnZmlsdGVyUGFuZWxMaXN0VmlldydcbiAgICAgIDogbnVsbDtcbiAgaWYgKCFzdGF0ZVByb3AgfHwgc3RhdGVbc3RhdGVQcm9wXSA9PT0gbGlzdFZpZXcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBbc3RhdGVQcm9wXTogbGlzdFZpZXdcbiAgfTtcbn07XG5cbi8qKlxuICogTWVyZ2UgcmVjZWl2ZWQgdWkgc3RhdGUgY29uZmlnIHdoZW4gbG9hZGluZyBhIHNhdmVkIG1hcFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIHNhdmVkIG1hcCBjb25maWcgYHttYXBTdHlsZSwgdmlzU3RhdGUsIG1hcFN0YXRlLCB1aVN0YXRlfWBcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2NvbmZpZ31cbiAgfToge1xuICAgIHR5cGU/OiAodHlwZW9mIEFjdGlvblR5cGVzKVsnUkVDRUlWRV9NQVBfQ09ORklHJ107XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCB7dWlTdGF0ZX0gPSBjb25maWcgfHwge307XG4gIGlmICghdWlTdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmICh1aVN0YXRlLm1hcENvbnRyb2xzPy5tYXBMZWdlbmQ/LmFjdGl2ZSkge1xuICAgIGNvbnN0IGN1cnJlbnRMZWdlbmQgPSBuZXdTdGF0ZS5tYXBDb250cm9scy5tYXBMZWdlbmQ7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIG1hcENvbnRyb2xzOiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgICBtYXBMZWdlbmQ6IHtcbiAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgIC4uLmN1cnJlbnRMZWdlbmQsXG4gICAgICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGFjdGl2ZU1hcEluZGV4OiAwXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgaWYgKHVpU3RhdGUubWFwQ29udHJvbHM/Lm1hcExlZ2VuZD8uc2V0dGluZ3MpIHtcbiAgICBuZXdTdGF0ZSA9IHNldE1hcENvbnRyb2xTZXR0aW5nc1VwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHBheWxvYWQ6IHtwYW5lbElkOiAnbWFwTGVnZW5kJywgc2V0dGluZ3M6IHVpU3RhdGUubWFwQ29udHJvbHMubWFwTGVnZW5kLnNldHRpbmdzfVxuICAgIH0gYXMgVUlTdGF0ZUFjdGlvbnMuc2V0TWFwQ29udHJvbFNldHRpbmdzVXBkYXRlckFjdGlvbik7XG4gIH1cblxuICBpZiAodWlTdGF0ZS5sb2NhbGUpIHtcbiAgICBuZXdTdGF0ZSA9IHNldExvY2FsZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHBheWxvYWQ6IHtsb2NhbGU6IHVpU3RhdGUubG9jYWxlfVxuICAgIH0gYXMgVUlTdGF0ZUFjdGlvbnMuU2V0TG9jYWxlVXBkYXRlckFjdGlvbik7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFHQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFZQSxJQUFBQyxhQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFNQSxJQUFBRyxnQkFBQSxHQUFBSCxPQUFBO0FBQThELFNBQUFJLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBWixDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxDQUFBLFdBQUFXLFNBQUEsQ0FBQVosQ0FBQSxJQUFBWSxTQUFBLENBQUFaLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxPQUFBYSxPQUFBLFdBQUFkLENBQUEsUUFBQWUsZ0JBQUEsYUFBQWhCLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYyx5QkFBQSxHQUFBZCxNQUFBLENBQUFlLGdCQUFBLENBQUFsQixDQUFBLEVBQUFHLE1BQUEsQ0FBQWMseUJBQUEsQ0FBQWYsQ0FBQSxLQUFBSCxPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxHQUFBYSxPQUFBLFdBQUFkLENBQUEsSUFBQUUsTUFBQSxDQUFBZ0IsY0FBQSxDQUFBbkIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQU4sQ0FBQSxFQUFBRCxDQUFBLGlCQUFBRCxDQUFBLElBdEI5RDtBQUNBO0FBMENPLElBQU1vQix5QkFBeUIsR0FBQUMsT0FBQSxDQUFBRCx5QkFBQSxHQUFHLE9BQU87QUFDekMsSUFBTUUsYUFBYSxHQUFBRCxPQUFBLENBQUFDLGFBQUEsR0FBR0Msc0JBQVc7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNQyxlQUFlLEdBQUcsSUFBSTtBQUM1Qjs7QUFFQSxJQUFNQyw2QkFBNkMsR0FBRztFQUNwREMsSUFBSSxFQUFFLElBQUk7RUFDVkMsTUFBTSxFQUFFLEtBQUs7RUFDYkMsWUFBWSxFQUFFLEtBQUs7RUFDbkI7RUFDQUMsY0FBYyxFQUFFO0FBQ2xCLENBQUM7QUFFRCxJQUFNQywwQkFBMEIsR0FBQWxCLGFBQUEsQ0FBQUEsYUFBQSxLQUMzQmEsNkJBQTZCO0VBQ2hDTSxXQUFXLEVBQUU7QUFBSyxFQUNuQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLG9CQUFpQyxHQUFBWCxPQUFBLENBQUFXLG9CQUFBLEdBQzVDN0IsTUFBTSxDQUFDQyxJQUFJLENBQUM2Qix1QkFBWSxDQUFDLENBQ3pCQyxNQUFNLENBQ04sVUFBQ0MsTUFBSyxFQUFFQyxPQUFPO0VBQUEsT0FBQXhCLGFBQUEsQ0FBQUEsYUFBQSxLQUNWdUIsTUFBSyxXQUFBbkIsZ0JBQUEsaUJBQ1BvQixPQUFPLEVBQ05BLE9BQU8sS0FBS0gsdUJBQVksQ0FBQ0ksU0FBUyxHQUM5QlAsMEJBQTBCLEdBQzFCTCw2QkFBNkI7QUFBQSxDQUNuQyxFQUNGLENBQUMsQ0FDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWEsb0JBQWlDLEdBQUFqQixPQUFBLENBQUFpQixvQkFBQSxHQUFHO0VBQy9DO0VBQ0FDLEtBQUssRUFBRUMsNEJBQWlCLENBQUNDLE1BQU07RUFDL0JDLFVBQVUsRUFBRUMsc0JBQVcsQ0FBQ0MsS0FBSztFQUM3QkMsTUFBTSxFQUFFLEtBQUs7RUFDYkMsSUFBSSxFQUFFLENBQUM7RUFDUEMsSUFBSSxFQUFFLENBQUM7RUFDUEMsU0FBUyxFQUFFO0lBQ1RDLFVBQVUsRUFBRSxDQUFDO0lBQ2JDLEtBQUssRUFBRSxDQUFDO0lBQ1JDLE1BQU0sRUFBRSxDQUFDO0lBQ1RDLE1BQU0sRUFBRTtFQUNWLENBQUM7RUFDRDtFQUNBQyxNQUFNLEVBQUUsS0FBSztFQUNiO0VBQ0FDLFlBQVksRUFBRSxFQUFFO0VBQ2hCO0VBQ0FDLFNBQVMsRUFBRSxLQUFLO0VBQ2hCO0VBQ0FDLFVBQVUsRUFBRSxLQUFLO0VBQ2pCQyxLQUFLLEVBQUUsS0FBSztFQUNaO0VBQ0FDLHFCQUFxQixFQUFFLElBQUFDLDJCQUFvQixFQUFDLENBQUMsQ0FBQ0Q7QUFDaEQsQ0FBQztBQUVNLElBQU1FLGtCQUFrQixHQUFBdkMsT0FBQSxDQUFBdUMsa0JBQUEsR0FBRztFQUNoQ0MsV0FBVyxFQUFFO0FBQ2YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxtQkFBK0IsR0FBQXpDLE9BQUEsQ0FBQXlDLG1CQUFBLEdBQUc7RUFDN0NDLGVBQWUsRUFBRSxFQUFFO0VBQ25CQyxRQUFRLEVBQUVDLDJCQUFnQixDQUFDQyxHQUFHO0VBQzlCQyxRQUFRLEVBQUU7QUFDWixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNPLElBQU1DLHFCQUFxQixHQUFBL0MsT0FBQSxDQUFBK0MscUJBQUEsR0FBRyxFQUFFOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLG1CQUErQixHQUFBaEQsT0FBQSxDQUFBZ0QsbUJBQUEsR0FBRztFQUM3Q0MsdUJBQXVCLEVBQUUsSUFBSTtFQUM3QkMsZUFBZSxFQUFFLEVBQUU7RUFDbkJDLElBQUksRUFBRUMsZ0NBQXFCLENBQUNDO0FBQzlCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLG1CQUErQixHQUFBdEQsT0FBQSxDQUFBc0QsbUJBQUEsR0FBRztFQUM3Q0MsT0FBTyxFQUFFO0FBQ1gsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsa0JBQTZCLEdBQUF4RCxPQUFBLENBQUF3RCxrQkFBQSxPQUFBN0QsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFDdkM4RCw2QkFBa0IsQ0FBQ0MsSUFBSSxFQUFHVixtQkFBbUIsR0FDN0NTLDZCQUFrQixDQUFDRSxJQUFJLEVBQUdMLG1CQUFtQixhQUN0Q0csNkJBQWtCLENBQUNDLElBQUksQ0FDaEM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1FLG9CQUFpQyxHQUFBNUQsT0FBQSxDQUFBNEQsb0JBQUEsR0FBRztFQUMvQ0MsU0FBUyxFQUFFLE1BQU07RUFBRTtFQUNuQkMsWUFBWSxFQUFFLE1BQU07RUFDcEJDLFFBQVEsRUFBRSxXQUFXO0VBQ3JCMUMsVUFBVSxFQUFFLFVBQVU7RUFDdEIyQyxVQUFVLEVBQUUsSUFBSTtFQUNoQkMsYUFBYSxFQUFFLENBQUM7RUFDaEJDLFdBQVcsRUFBRSxHQUFHO0VBQ2hCQyxXQUFXLEVBQUU7QUFDZixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsZ0JBQXlCLEdBQUFwRSxPQUFBLENBQUFvRSxnQkFBQSxHQUFHO0VBQ3ZDQyxRQUFRLEVBQUUsS0FBSztFQUNmQyxlQUFlLEVBQUV2RSx5QkFBeUI7RUFDMUN3RSxZQUFZLEVBQUV0RSxhQUFhO0VBQzNCdUUsa0JBQWtCLEVBQUUsSUFBSTtFQUN4QkMsZUFBZSxFQUFFLElBQUk7RUFDckI7RUFDQUMsV0FBVyxFQUFFekQsb0JBQW9CO0VBQ2pDO0VBQ0EwRCxVQUFVLEVBQUVsQyxtQkFBbUI7RUFDL0I7RUFDQW1DLFNBQVMsRUFBRXBCLGtCQUFrQjtFQUM3QjtFQUNBcUIsV0FBVyxFQUFFakIsb0JBQW9CO0VBQ2pDO0VBQ0FrQixXQUFXLEVBQUVuRSxvQkFBb0I7RUFDakM7RUFDQW9FLGFBQWEsRUFBRWhDLHFCQUFxQjtFQUNwQztFQUNBaUMsU0FBUyxFQUFFekMsa0JBQWtCO0VBQzdCO0VBQ0EwQyxNQUFNLEVBQUVDLDBCQUFZLENBQUNDLEVBQUU7RUFDdkJDLGtCQUFrQixFQUFFLE1BQU07RUFDMUJDLG1CQUFtQixFQUFFLE1BQU07RUFDM0JDLDZCQUE2QixFQUFFO0FBQ2pDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxrQkFBa0IsR0FBQXZGLE9BQUEsQ0FBQXVGLGtCQUFBLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FDN0JDLEtBQWMsRUFDZEMsTUFHQztFQUFBLE9BQUFsRyxhQUFBLENBQUFBLGFBQUEsS0FFRWlHLEtBQUssR0FDTCxDQUFDQyxNQUFNLENBQUNDLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRUMsY0FBYztBQUFBLENBQ3hDOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLHNCQUFzQixHQUFBNUYsT0FBQSxDQUFBNEYsc0JBQUEsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUNqQ0osS0FBYyxFQUFBSyxJQUFBLEVBRUY7RUFBQSxJQURGQyxFQUFFLEdBQUFELElBQUEsQ0FBWEgsT0FBTztFQUVSLE9BQU9JLEVBQUUsS0FBS04sS0FBSyxDQUFDbEIsZUFBZSxHQUMvQmtCLEtBQUssR0FBQWpHLGFBQUEsQ0FBQUEsYUFBQSxLQUVBaUcsS0FBSztJQUNSbEIsZUFBZSxFQUFFd0I7RUFBRSxFQUNwQjtBQUNQLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsa0JBQWtCLEdBQUEvRixPQUFBLENBQUErRixrQkFBQSxHQUFHLFNBQXJCQSxrQkFBa0JBLENBQzdCUCxLQUFjLEVBQUFRLEtBQUE7RUFBQSxJQUNKRixFQUFFLEdBQUFFLEtBQUEsQ0FBWE4sT0FBTztFQUFBLE9BQUFuRyxhQUFBLENBQUFBLGFBQUEsS0FFTGlHLEtBQUs7SUFDUmpCLFlBQVksRUFBRXVCO0VBQUU7QUFBQSxDQUNoQjs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUcseUJBQXlCLEdBQUFqRyxPQUFBLENBQUFpRyx5QkFBQSxHQUFHLFNBQTVCQSx5QkFBeUJBLENBQ3BDVCxLQUFjLEVBQUFVLEtBQUE7RUFBQSxJQUNKSixFQUFFLEdBQUFJLEtBQUEsQ0FBWFIsT0FBTztFQUFBLE9BQUFuRyxhQUFBLENBQUFBLGFBQUEsS0FFTGlHLEtBQUs7SUFDUmYsZUFBZSxFQUFFcUI7RUFBRTtBQUFBLENBQ25COztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNSyx5QkFBeUIsR0FBQW5HLE9BQUEsQ0FBQW1HLHlCQUFBLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FBSVgsS0FBYztFQUFBLE9BQUFqRyxhQUFBLENBQUFBLGFBQUEsS0FDbkRpRyxLQUFLO0lBQ1JmLGVBQWUsRUFBRTtFQUFJO0FBQUEsQ0FDckI7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0yQixpQ0FBaUMsR0FBQXBHLE9BQUEsQ0FBQW9HLGlDQUFBLEdBQUcsU0FBcENBLGlDQUFpQ0EsQ0FDNUNaLEtBQWMsRUFBQWEsS0FBQTtFQUFBLElBQ0hoRyxJQUFJLEdBQUFnRyxLQUFBLENBQWRYLE9BQU8sQ0FBR3JGLElBQUk7RUFBQSxPQUFBZCxhQUFBLENBQUFBLGFBQUEsS0FFWmlHLEtBQUs7SUFDUkYsNkJBQTZCLEVBQUVqRjtFQUFJO0FBQUEsQ0FDbkM7O0FBRUY7QUFDQTtBQUNBO0FBQ08sSUFBTWlHLCtCQUF5QyxHQUFBdEcsT0FBQSxDQUFBc0csK0JBQUEsR0FBRyxDQUN2RDFGLHVCQUFZLENBQUMyRixRQUFRLEVBQ3JCM0YsdUJBQVksQ0FBQzRGLFFBQVEsRUFDckI1Rix1QkFBWSxDQUFDNkYsT0FBTyxFQUNwQjdGLHVCQUFZLENBQUM4RixTQUFTLENBQ3ZCOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLHVCQUF1QixHQUFBM0csT0FBQSxDQUFBMkcsdUJBQUEsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUNsQ25CLEtBQWMsRUFBQW9CLEtBQUEsRUFFRjtFQUFBLElBQUFDLHFCQUFBLEVBQUFDLHFCQUFBO0VBQUEsSUFBQUMsYUFBQSxHQUFBSCxLQUFBLENBRFhsQixPQUFPO0lBQUdzQixPQUFPLEdBQUFELGFBQUEsQ0FBUEMsT0FBTztJQUFBQyxtQkFBQSxHQUFBRixhQUFBLENBQUVHLEtBQUs7SUFBTEEsS0FBSyxHQUFBRCxtQkFBQSxjQUFHLENBQUMsR0FBQUEsbUJBQUE7RUFFN0IsSUFBSUUsWUFBWSxHQUFHM0IsS0FBSztFQUN4QjtFQUNBO0VBQ0EsSUFBTTRCLGlCQUFpQixHQUNyQkosT0FBTyxLQUFLcEcsdUJBQVksQ0FBQ3lHLE1BQU0sR0FDM0J6Ryx1QkFBWSxDQUFDMEcsV0FBVyxHQUN4Qk4sT0FBTyxLQUFLcEcsdUJBQVksQ0FBQzBHLFdBQVcsR0FDcEMxRyx1QkFBWSxDQUFDeUcsTUFBTSxHQUNuQixJQUFJOztFQUVWO0VBQ0EsSUFBSUQsaUJBQWlCLEtBQUFQLHFCQUFBLEdBQUlyQixLQUFLLENBQUNWLFdBQVcsQ0FBQ3NDLGlCQUFpQixDQUFDLGNBQUFQLHFCQUFBLGVBQXBDQSxxQkFBQSxDQUFzQ3ZHLE1BQU0sRUFBRTtJQUNyRTZHLFlBQVksR0FBQTVILGFBQUEsQ0FBQUEsYUFBQSxLQUNQaUcsS0FBSztNQUNSVixXQUFXLEVBQUF2RixhQUFBLENBQUFBLGFBQUEsS0FDTjRILFlBQVksQ0FBQ3JDLFdBQVcsV0FBQW5GLGdCQUFBLGlCQUMxQnlILGlCQUFpQixFQUFBN0gsYUFBQSxDQUFBQSxhQUFBLEtBQ2I0SCxZQUFZLENBQUNyQyxXQUFXLENBQUNzQyxpQkFBaUIsQ0FBQztRQUM5QzlHLE1BQU0sRUFBRTtNQUFLO0lBRWhCLEVBQ0Y7RUFDSDs7RUFFQTtFQUNBO0VBQ0E7RUFDQSxJQUFNaUgsU0FBUyxHQUFHLEdBQUFULHFCQUFBLEdBQUNLLFlBQVksQ0FBQ3JDLFdBQVcsQ0FBQ2tDLE9BQU8sQ0FBQyxjQUFBRixxQkFBQSxlQUFqQ0EscUJBQUEsQ0FBbUN4RyxNQUFNO0VBQzVELElBQUlpSCxTQUFTLElBQUlqQiwrQkFBK0IsQ0FBQ2tCLFFBQVEsQ0FBQ1IsT0FBTyxDQUFDLEVBQUU7SUFDbEUsSUFBTVMsZUFBZSxHQUFBbEksYUFBQSxLQUFPNEgsWUFBWSxDQUFDckMsV0FBVyxDQUFDO0lBQ3JELElBQUk0QyxhQUFhLEdBQUcsS0FBSztJQUN6QnBCLCtCQUErQixDQUFDNUcsT0FBTyxDQUFDLFVBQUFpSSxTQUFTLEVBQUk7TUFBQSxJQUFBQyxxQkFBQTtNQUNuRCxJQUFJRCxTQUFTLEtBQUtYLE9BQU8sS0FBQVkscUJBQUEsR0FBSUgsZUFBZSxDQUFDRSxTQUFTLENBQUMsY0FBQUMscUJBQUEsZUFBMUJBLHFCQUFBLENBQTRCdEgsTUFBTSxFQUFFO1FBQy9EbUgsZUFBZSxDQUFDRSxTQUFTLENBQUMsR0FBQXBJLGFBQUEsQ0FBQUEsYUFBQSxLQUFPa0ksZUFBZSxDQUFDRSxTQUFTLENBQUM7VUFBRXJILE1BQU0sRUFBRTtRQUFLLEVBQUM7UUFDM0VvSCxhQUFhLEdBQUcsSUFBSTtNQUN0QjtJQUNGLENBQUMsQ0FBQztJQUNGLElBQUlBLGFBQWEsRUFBRTtNQUNqQlAsWUFBWSxHQUFBNUgsYUFBQSxDQUFBQSxhQUFBLEtBQU80SCxZQUFZO1FBQUVyQyxXQUFXLEVBQUUyQztNQUFlLEVBQUM7SUFDaEU7RUFDRjtFQUVBLE9BQUFsSSxhQUFBLENBQUFBLGFBQUEsS0FDSzRILFlBQVk7SUFDZnJDLFdBQVcsRUFBQXZGLGFBQUEsQ0FBQUEsYUFBQSxLQUNONEgsWUFBWSxDQUFDckMsV0FBVyxXQUFBbkYsZ0JBQUEsaUJBQzFCcUgsT0FBTyxFQUFBekgsYUFBQSxDQUFBQSxhQUFBLEtBQ0g0SCxZQUFZLENBQUNyQyxXQUFXLENBQUNrQyxPQUFPLENBQUM7TUFDcEMxRyxNQUFNLEVBQUUsQ0FBQzZHLFlBQVksQ0FBQ3JDLFdBQVcsQ0FBQ2tDLE9BQU8sQ0FBQyxDQUFDMUcsTUFBTTtNQUNqREUsY0FBYyxFQUFFMEc7SUFBSztFQUV4QjtBQUVMLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTVcsOEJBQThCLEdBQUE3SCxPQUFBLENBQUE2SCw4QkFBQSxHQUFHLFNBQWpDQSw4QkFBOEJBLENBQ3pDckMsS0FBYyxFQUFBc0MsS0FBQSxFQUVGO0VBQUEsSUFBQUMsa0JBQUE7RUFBQSxJQUFBQyxhQUFBLEdBQUFGLEtBQUEsQ0FEWHBDLE9BQU87SUFBR3NCLE9BQU8sR0FBQWdCLGFBQUEsQ0FBUGhCLE9BQU87SUFBRTNHLElBQUksR0FBQTJILGFBQUEsQ0FBSjNILElBQUk7RUFFeEIsSUFBSSxHQUFBMEgsa0JBQUEsR0FBQ3ZDLEtBQUssQ0FBQ1YsV0FBVyxjQUFBaUQsa0JBQUEsZUFBakJBLGtCQUFBLENBQW9CZixPQUFPLENBQUMsR0FBRTtJQUNqQyxPQUFPeEIsS0FBSztFQUNkO0VBRUEsT0FBQWpHLGFBQUEsQ0FBQUEsYUFBQSxLQUNLaUcsS0FBSztJQUNSVixXQUFXLEVBQUF2RixhQUFBLENBQUFBLGFBQUEsS0FDTmlHLEtBQUssQ0FBQ1YsV0FBVyxXQUFBbkYsZ0JBQUEsaUJBQ25CcUgsT0FBTyxFQUFBekgsYUFBQSxDQUFBQSxhQUFBLEtBQ0hpRyxLQUFLLENBQUNWLFdBQVcsQ0FBQ2tDLE9BQU8sQ0FBQztNQUM3QjNHLElBQUksRUFBRTRILE9BQU8sQ0FBQzVILElBQUk7SUFBQztFQUV0QjtBQUVMLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTTZILDRCQUE0QixHQUFBbEksT0FBQSxDQUFBa0ksNEJBQUEsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUN2QzFDLEtBQWMsRUFBQTJDLEtBQUEsRUFFRjtFQUFBLElBQUFDLG1CQUFBO0VBQUEsSUFBQUMsYUFBQSxHQUFBRixLQUFBLENBRFh6QyxPQUFPO0lBQUdzQixPQUFPLEdBQUFxQixhQUFBLENBQVByQixPQUFPO0lBQUVzQixRQUFRLEdBQUFELGFBQUEsQ0FBUkMsUUFBUTtFQUU1QixJQUFNQyxVQUFVLElBQUFILG1CQUFBLEdBQUc1QyxLQUFLLENBQUNWLFdBQVcsY0FBQXNELG1CQUFBLHVCQUFqQkEsbUJBQUEsQ0FBb0JwQixPQUFPLENBQUM7RUFDL0MsSUFBSSxDQUFDdUIsVUFBVSxFQUFFO0lBQ2YsT0FBTy9DLEtBQUs7RUFDZDtFQUVBLE9BQUFqRyxhQUFBLENBQUFBLGFBQUEsS0FDS2lHLEtBQUs7SUFDUlYsV0FBVyxFQUFBdkYsYUFBQSxDQUFBQSxhQUFBLEtBQ05pRyxLQUFLLENBQUNWLFdBQVcsV0FBQW5GLGdCQUFBLGlCQUNuQnFILE9BQU8sRUFBQXpILGFBQUEsQ0FBQUEsYUFBQSxLQUFPZ0osVUFBVTtNQUFFRCxRQUFRLEVBQUEvSSxhQUFBLENBQUFBLGFBQUEsS0FBTWdKLFVBQVUsQ0FBQ0QsUUFBUSxHQUFLQSxRQUFRO0lBQUM7RUFDM0U7QUFFTCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1FLHNCQUFzQixHQUFBeEksT0FBQSxDQUFBd0ksc0JBQUEsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUNqQ2hELEtBQWMsRUFBQWlELEtBQUE7RUFBQSxJQUNKakUsa0JBQWtCLEdBQUFpRSxLQUFBLENBQTNCL0MsT0FBTztFQUFBLE9BQUFuRyxhQUFBLENBQUFBLGFBQUEsS0FFTGlHLEtBQUs7SUFDUmpCLFlBQVksRUFBRW1FLHlCQUFjO0lBQzVCbEUsa0JBQWtCLEVBQWxCQTtFQUFrQjtBQUFBLENBQ2xCOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTW1FLDRCQUE0QixHQUFBM0ksT0FBQSxDQUFBMkksNEJBQUEsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUN2Q25ELEtBQWMsRUFBQW9ELEtBQUEsRUFFRjtFQUFBLElBREZDLFVBQVUsR0FBQUQsS0FBQSxDQUFuQmxELE9BQU87RUFFUixJQUFNb0QsT0FBTyxHQUFBdkosYUFBQSxDQUFBQSxhQUFBLEtBQU9pRyxLQUFLLENBQUNkLFdBQVcsR0FBS21FLFVBQVUsQ0FBQztFQUNyRCxJQUFNbEgsU0FBUyxHQUFHLElBQUFvSCwrQkFBd0IsRUFBQ0QsT0FBTyxDQUFDLElBQUl0RCxLQUFLLENBQUNkLFdBQVcsQ0FBQy9DLFNBQVM7RUFFbEYsT0FBQXBDLGFBQUEsQ0FBQUEsYUFBQSxLQUNLaUcsS0FBSztJQUNSZCxXQUFXLEVBQUFuRixhQUFBLENBQUFBLGFBQUEsS0FDTnVKLE9BQU87TUFDVm5ILFNBQVMsRUFBVEE7SUFBUztFQUNWO0FBRUwsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNcUgsNEJBQTRCLEdBQUFoSixPQUFBLENBQUFnSiw0QkFBQSxHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDeEQsS0FBYyxFQUFBeUQsS0FBQSxFQUVGO0VBQUEsSUFERkMsT0FBTyxHQUFBRCxLQUFBLENBQWhCdkQsT0FBTztFQUVSLElBQUl3RCxPQUFPLEtBQUsxRCxLQUFLLENBQUNkLFdBQVcsQ0FBQ3pDLFlBQVksRUFBRTtJQUM5QyxPQUFPdUQsS0FBSztFQUNkO0VBQ0EsT0FBQWpHLGFBQUEsQ0FBQUEsYUFBQSxLQUNLaUcsS0FBSztJQUNSZCxXQUFXLEVBQUFuRixhQUFBLENBQUFBLGFBQUEsS0FDTmlHLEtBQUssQ0FBQ2QsV0FBVztNQUNwQnZDLFVBQVUsRUFBRSxLQUFLO01BQ2pCRixZQUFZLEVBQUVpSDtJQUFPO0VBQ3RCO0FBRUwsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLDBCQUEwQixHQUFBbkosT0FBQSxDQUFBbUosMEJBQUEsR0FBRyxTQUE3QkEsMEJBQTBCQSxDQUNyQzNELEtBQWMsRUFBQTRELEtBQUE7RUFBQSxJQUNKaEgsS0FBSyxHQUFBZ0gsS0FBQSxDQUFkMUQsT0FBTztFQUFBLE9BQUFuRyxhQUFBLENBQUFBLGFBQUEsS0FFTGlHLEtBQUs7SUFDUmQsV0FBVyxFQUFBbkYsYUFBQSxDQUFBQSxhQUFBLEtBQ05pRyxLQUFLLENBQUNkLFdBQVc7TUFDcEJ2QyxVQUFVLEVBQUUsS0FBSztNQUNqQkMsS0FBSyxFQUFMQTtJQUFLO0VBQ047QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNaUgseUJBQXlCLEdBQUFySixPQUFBLENBQUFxSix5QkFBQSxHQUFHLFNBQTVCQSx5QkFBeUJBLENBQUk3RCxLQUFjO0VBQUEsT0FBQWpHLGFBQUEsQ0FBQUEsYUFBQSxLQUNuRGlHLEtBQUs7SUFDUmQsV0FBVyxFQUFBbkYsYUFBQSxDQUFBQSxhQUFBLEtBQ05pRyxLQUFLLENBQUNkLFdBQVc7TUFDcEJ4QyxTQUFTLEVBQUUsS0FBSztNQUNoQkQsWUFBWSxFQUFFLEVBQUU7TUFDaEJHLEtBQUssRUFBRSxLQUFLO01BQ1pELFVBQVUsRUFBRSxLQUFLO01BQ2pCSCxNQUFNLEVBQUU7SUFBSztFQUNkO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNc0gsNEJBQTRCLEdBQUF0SixPQUFBLENBQUFzSiw0QkFBQSxHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDOUQsS0FBYyxFQUFBK0QsTUFBQTtFQUFBLElBQ0pWLFVBQVUsR0FBQVUsTUFBQSxDQUFuQjdELE9BQU87RUFBQSxPQUFBbkcsYUFBQSxDQUFBQSxhQUFBLEtBRUxpRyxLQUFLO0lBQ1JYLFdBQVcsRUFBQXRGLGFBQUEsQ0FBQUEsYUFBQSxLQUNOaUcsS0FBSyxDQUFDWCxXQUFXLEdBQ2pCZ0UsVUFBVTtFQUNkO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTVcsMEJBQTBCLEdBQUF4SixPQUFBLENBQUF3SiwwQkFBQSxHQUFHLFNBQTdCQSwwQkFBMEJBLENBQ3JDaEUsS0FBYyxFQUFBaUUsTUFBQSxFQUVGO0VBQUEsSUFBQUMsY0FBQSxHQUFBRCxNQUFBLENBRFgvRCxPQUFPO0lBQUVpRSxPQUFPLEdBQUFELGNBQUEsY0FBRyxDQUFDLENBQUMsR0FBQUEsY0FBQTtFQUV0QixJQUFNRSxhQUFhLEdBQUFySyxhQUFBLENBQUFBLGFBQUEsS0FDZG9LLE9BQU87SUFDVnpILFNBQVMsRUFBRTtFQUFJLEVBQ2hCO0VBRUQsT0FBTyxJQUFBMkgseUJBQVEsRUFBQyxDQUNkUix5QkFBeUIsRUFDekIsSUFBQVMsdUJBQU0sRUFBQ25CLDRCQUE0QixFQUFFLElBQUFvQix5QkFBUSxFQUFDSCxhQUFhLENBQUMsQ0FBQyxDQUM5RCxDQUFDLENBQUNwRSxLQUFLLENBQUM7QUFDWCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU13RSwrQkFBK0IsR0FBQWhLLE9BQUEsQ0FBQWdLLCtCQUFBLEdBQUcsU0FBbENBLCtCQUErQkEsQ0FDMUN4RSxLQUFjLEVBQUF5RSxNQUFBO0VBQUEsSUFDSkMsT0FBTyxHQUFBRCxNQUFBLENBQWhCdkUsT0FBTztFQUFBLE9BQUFuRyxhQUFBLENBQUFBLGFBQUEsS0FFTGlHLEtBQUs7SUFDUmIsVUFBVSxFQUFBcEYsYUFBQSxDQUFBQSxhQUFBLEtBQ0xpRyxLQUFLLENBQUNiLFVBQVU7TUFDbkJqQyxlQUFlLEVBQUV3SDtJQUFPO0VBQ3pCO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyx3QkFBd0IsR0FBQW5LLE9BQUEsQ0FBQW1LLHdCQUFBLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FDbkMzRSxLQUFjLEVBQUE0RSxNQUFBO0VBQUEsSUFDSnpILFFBQVEsR0FBQXlILE1BQUEsQ0FBakIxRSxPQUFPO0VBQUEsT0FBQW5HLGFBQUEsQ0FBQUEsYUFBQSxLQUVMaUcsS0FBSztJQUNSYixVQUFVLEVBQUFwRixhQUFBLENBQUFBLGFBQUEsS0FDTGlHLEtBQUssQ0FBQ2IsVUFBVTtNQUNuQmhDLFFBQVEsRUFBUkE7SUFBUTtFQUNUO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNMEgsd0JBQXdCLEdBQUFySyxPQUFBLENBQUFxSyx3QkFBQSxHQUFHLFNBQTNCQSx3QkFBd0JBLENBQ25DN0UsS0FBYyxFQUFBOEUsTUFBQTtFQUFBLElBQ0p4SCxRQUFRLEdBQUF3SCxNQUFBLENBQWpCNUUsT0FBTztFQUFBLE9BQUFuRyxhQUFBLENBQUFBLGFBQUEsS0FFTGlHLEtBQUs7SUFDUmIsVUFBVSxFQUFBcEYsYUFBQSxDQUFBQSxhQUFBLEtBQ0xpRyxLQUFLLENBQUNiLFVBQVU7TUFDbkI3QixRQUFRLEVBQVJBO0lBQVE7RUFDVDtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNeUgsb0JBQW9CLEdBQUF2SyxPQUFBLENBQUF1SyxvQkFBQSxHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUkvRSxLQUFjO0VBQUEsT0FBQWpHLGFBQUEsQ0FBQUEsYUFBQSxLQUM5Q2lHLEtBQUs7SUFDUlosU0FBUyxFQUFBckYsYUFBQSxDQUFBQSxhQUFBLEtBQ0ppRyxLQUFLLENBQUNaLFNBQVMsV0FBQWpGLGdCQUFBLGlCQUNqQjhELDZCQUFrQixDQUFDRSxJQUFJLEVBQUFwRSxhQUFBLENBQUFBLGFBQUEsS0FDbkJpRyxLQUFLLENBQUNaLFNBQVMsQ0FBQ25CLDZCQUFrQixDQUFDRSxJQUFJLENBQUM7TUFDM0NKLE9BQU8sRUFBRSxDQUFDaUMsS0FBSyxDQUFDWixTQUFTLENBQUNuQiw2QkFBa0IsQ0FBQ0UsSUFBSSxDQUFDLENBQUNKO0lBQU87RUFFN0Q7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNaUgsK0JBQStCLEdBQUF4SyxPQUFBLENBQUF3SywrQkFBQSxHQUFHLFNBQWxDQSwrQkFBK0JBLENBQzFDaEYsS0FBYyxFQUFBaUYsTUFBQTtFQUFBLElBQ0p2SCxlQUFlLEdBQUF1SCxNQUFBLENBQXhCL0UsT0FBTztFQUFBLE9BQUFuRyxhQUFBLENBQUFBLGFBQUEsS0FFTGlHLEtBQUs7SUFDUlosU0FBUyxFQUFBckYsYUFBQSxDQUFBQSxhQUFBLEtBQ0ppRyxLQUFLLENBQUNaLFNBQVMsV0FBQWpGLGdCQUFBLGlCQUNqQjhELDZCQUFrQixDQUFDQyxJQUFJLEVBQUFuRSxhQUFBLENBQUFBLGFBQUEsS0FDbkJpRyxLQUFLLENBQUNaLFNBQVMsQ0FBQ25CLDZCQUFrQixDQUFDQyxJQUFJLENBQUM7TUFDM0NSLGVBQWUsRUFBZkE7SUFBZTtFQUVsQjtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNd0gseUJBQXlCLEdBQUExSyxPQUFBLENBQUEwSyx5QkFBQSxHQUFHLFNBQTVCQSx5QkFBeUJBLENBQ3BDbEYsS0FBYyxFQUFBbUYsTUFBQTtFQUFBLElBQ0pDLE1BQU0sR0FBQUQsTUFBQSxDQUFmakYsT0FBTztFQUFBLE9BQUFuRyxhQUFBLENBQUFBLGFBQUEsS0FFTGlHLEtBQUs7SUFDUlosU0FBUyxFQUFBckYsYUFBQSxDQUFBQSxhQUFBLEtBQ0ppRyxLQUFLLENBQUNaLFNBQVM7TUFDbEI7TUFDQWdHLE1BQU0sRUFBTkE7SUFBTTtFQUNQO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLDJCQUEyQixHQUFBN0ssT0FBQSxDQUFBNkssMkJBQUEsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUN0Q3JGLEtBQWMsRUFBQXNGLE1BQUE7RUFBQSxJQUNKM0gsSUFBSSxHQUFBMkgsTUFBQSxDQUFicEYsT0FBTztFQUFBLE9BQUFuRyxhQUFBLENBQUFBLGFBQUEsS0FFTGlHLEtBQUs7SUFDUlosU0FBUyxFQUFBckYsYUFBQSxDQUFBQSxhQUFBLEtBQ0ppRyxLQUFLLENBQUNaLFNBQVMsV0FBQWpGLGdCQUFBLGlCQUNqQjhELDZCQUFrQixDQUFDQyxJQUFJLEVBQUFuRSxhQUFBLENBQUFBLGFBQUEsS0FDbkJpRyxLQUFLLENBQUNaLFNBQVMsQ0FBQ25CLDZCQUFrQixDQUFDQyxJQUFJLENBQUM7TUFDM0NQLElBQUksRUFBSkE7SUFBSTtFQUVQO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU00SCxzQkFBc0IsR0FBQS9LLE9BQUEsQ0FBQStLLHNCQUFBLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FDakN2RixLQUFjLEVBQUF3RixNQUFBLEVBRUY7RUFBQSxJQURYdEYsT0FBTyxHQUFBc0YsTUFBQSxDQUFQdEYsT0FBTztFQUVSLElBQU11RixnQkFBZ0IsR0FBR3pGLEtBQUssQ0FBQ1QsYUFBYSxJQUFJLEVBQUU7RUFDbEQ7RUFDQSxJQUFNbUcsU0FBUyxHQUFHeEYsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVJLEVBQUU7RUFDN0IsSUFBTXFGLG9CQUFvQixHQUFHRCxTQUFTLEdBQUdELGdCQUFnQixDQUFDRyxJQUFJLENBQUMsVUFBQUMsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3ZGLEVBQUUsS0FBS29GLFNBQVM7RUFBQSxFQUFDLEdBQUcsSUFBSTtFQUU5RixJQUFJbkcsYUFBYTtFQUNqQixJQUFJb0csb0JBQW9CLEVBQUU7SUFDeEJwRyxhQUFhLEdBQUdrRyxnQkFBZ0IsQ0FBQ0ssR0FBRyxDQUFDLFVBQUFELENBQUM7TUFBQSxPQUNwQ0EsQ0FBQyxDQUFDdkYsRUFBRSxLQUFLb0YsU0FBUyxHQUFHLElBQUFLLHlCQUFrQixFQUFBaE0sYUFBQSxDQUFBQSxhQUFBLEtBQUttRyxPQUFPO1FBQUU4RixLQUFLLEVBQUVILENBQUMsQ0FBQ0csS0FBSyxHQUFHO01BQUMsRUFBQyxDQUFDLEdBQUdILENBQUM7SUFBQSxDQUMvRSxDQUFDO0VBQ0gsQ0FBQyxNQUFNO0lBQ0x0RyxhQUFhLE1BQUEwRyxNQUFBLEtBQUFDLG1CQUFBLGFBQU9ULGdCQUFnQixJQUFFLElBQUFNLHlCQUFrQixFQUFDN0YsT0FBTyxDQUFDLEVBQUM7RUFDcEU7RUFFQSxPQUFBbkcsYUFBQSxDQUFBQSxhQUFBLEtBQVdpRyxLQUFLO0lBQUVULGFBQWEsRUFBYkE7RUFBYTtBQUNqQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU00Ryx5QkFBeUIsR0FBQTNMLE9BQUEsQ0FBQTJMLHlCQUFBLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FDcENuRyxLQUFjLEVBQUFvRyxNQUFBO0VBQUEsSUFDSjlGLEVBQUUsR0FBQThGLE1BQUEsQ0FBWGxHLE9BQU87RUFBQSxPQUFBbkcsYUFBQSxDQUFBQSxhQUFBLEtBRUxpRyxLQUFLO0lBQ1JULGFBQWEsRUFBRVMsS0FBSyxDQUFDVCxhQUFhLENBQUM3RixNQUFNLENBQUMsVUFBQW1NLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUN2RixFQUFFLEtBQUtBLEVBQUU7SUFBQTtFQUFDO0FBQUEsQ0FDM0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNK0YsZ0JBQWdCLEdBQUE3TCxPQUFBLENBQUE2TCxnQkFBQSxHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQUlyRyxLQUFjO0VBQUEsT0FBQWpHLGFBQUEsQ0FBQUEsYUFBQSxLQUMxQ2lHLEtBQUs7SUFDUlIsU0FBUyxFQUFBekYsYUFBQSxDQUFBQSxhQUFBLEtBQ0ppRyxLQUFLLENBQUNSLFNBQVM7TUFDbEJ4QyxXQUFXLEVBQUU7SUFBSTtFQUNsQjtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXNKLHVCQUF1QixHQUFBOUwsT0FBQSxDQUFBOEwsdUJBQUEsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUFJdEcsS0FBYztFQUFBLE9BQUFqRyxhQUFBLENBQUFBLGFBQUEsS0FDakRpRyxLQUFLO0lBQ1JSLFNBQVMsRUFBQXpGLGFBQUEsQ0FBQUEsYUFBQSxLQUNKaUcsS0FBSyxDQUFDUixTQUFTO01BQ2xCeEMsV0FBVyxFQUFFO0lBQUs7RUFDbkI7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU11SixtQkFBbUIsR0FBQS9MLE9BQUEsQ0FBQStMLG1CQUFBLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBSXZHLEtBQWMsRUFBQXdHLE1BQUE7RUFBQSxJQUFHNUosS0FBSyxHQUFBNEosTUFBQSxDQUFMNUosS0FBSztFQUFBLE9BQ3hEMkksc0JBQXNCLENBQUF4TCxhQUFBLENBQUFBLGFBQUEsS0FFZmlHLEtBQUs7SUFDUlIsU0FBUyxFQUFBekYsYUFBQSxDQUFBQSxhQUFBLEtBQ0ppRyxLQUFLLENBQUNSLFNBQVM7TUFDbEJ4QyxXQUFXLEVBQUU7SUFBSztFQUNuQixJQUVIO0lBQ0VrRCxPQUFPLEVBQUUsSUFBQXVHLHdCQUFpQixFQUFDO01BQ3pCQyxPQUFPLEVBQUUsQ0FBQzlKLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRThKLE9BQU8sSUFBSSx3QkFBd0I7TUFDMURDLEtBQUssRUFBRUMsc0NBQTJCLENBQUNDO0lBQ3JDLENBQUM7RUFDSCxDQUNGLENBQUM7QUFBQTs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLHFCQUFxQixHQUFBdE0sT0FBQSxDQUFBc00scUJBQUEsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFJOUcsS0FBYztFQUFBLE9BQUFqRyxhQUFBLENBQUFBLGFBQUEsS0FDL0NpRyxLQUFLO0lBQ1JWLFdBQVcsRUFBRWhHLE1BQU0sQ0FBQ3lOLE9BQU8sQ0FBQy9HLEtBQUssQ0FBQ1YsV0FBVyxDQUFDLENBQUNqRSxNQUFNLENBQ25ELFVBQUMyTCxHQUFHLEVBQUVDLEtBQUs7TUFBQSxPQUFBbE4sYUFBQSxDQUFBQSxhQUFBLEtBQ05pTixHQUFHLFdBQUE3TSxnQkFBQSxpQkFDTDhNLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQWxOLGFBQUEsQ0FBQUEsYUFBQSxLQUNKa04sS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNYak0sY0FBYyxFQUFFO01BQUM7SUFBQSxDQUVuQixFQUNGLENBQUMsQ0FDSDtFQUFDO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1rTSx1QkFBdUIsR0FBQTFNLE9BQUEsQ0FBQTBNLHVCQUFBLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FBSWxILEtBQWM7RUFBQSxPQUNwRE8sa0JBQWtCLENBQUNQLEtBQUssRUFBRTtJQUFDRSxPQUFPLEVBQUVpSDtFQUFhLENBQUMsQ0FBQztBQUFBOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGdCQUFnQixHQUFBNU0sT0FBQSxDQUFBNE0sZ0JBQUEsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUMzQnBILEtBQWMsRUFBQXFILE1BQUE7RUFBQSxJQUNINUgsTUFBTSxHQUFBNEgsTUFBQSxDQUFoQm5ILE9BQU8sQ0FBR1QsTUFBTTtFQUFBLE9BQUExRixhQUFBLENBQUFBLGFBQUEsS0FFZGlHLEtBQUs7SUFDUlAsTUFBTSxFQUFOQTtFQUFNO0FBQUEsQ0FDTjs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNNkgsMEJBQTBCLEdBQUE5TSxPQUFBLENBQUE4TSwwQkFBQSxHQUFHLFNBQTdCQSwwQkFBMEJBLENBQ3JDdEgsS0FBYyxFQUFBdUgsTUFBQSxFQUVGO0VBQUEsSUFBQUMsY0FBQSxHQUFBRCxNQUFBLENBRFhySCxPQUFPO0lBQUdzQixPQUFPLEdBQUFnRyxjQUFBLENBQVBoRyxPQUFPO0lBQUVpRyxRQUFRLEdBQUFELGNBQUEsQ0FBUkMsUUFBUTtFQUU1QixJQUFNQyxTQUFTLEdBQ2JsRyxPQUFPLEtBQUssT0FBTyxHQUNmLG9CQUFvQixHQUNwQkEsT0FBTyxLQUFLLFFBQVEsR0FDcEIscUJBQXFCLEdBQ3JCLElBQUk7RUFDVixJQUFJLENBQUNrRyxTQUFTLElBQUkxSCxLQUFLLENBQUMwSCxTQUFTLENBQUMsS0FBS0QsUUFBUSxFQUFFO0lBQy9DLE9BQU96SCxLQUFLO0VBQ2Q7RUFDQSxPQUFBakcsYUFBQSxDQUFBQSxhQUFBLEtBQ0tpRyxLQUFLLFdBQUE3RixnQkFBQSxpQkFDUHVOLFNBQVMsRUFBR0QsUUFBUTtBQUV6QixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1FLHVCQUF1QixHQUFBbk4sT0FBQSxDQUFBbU4sdUJBQUEsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUNsQzNILEtBQWMsRUFBQTRILE1BQUEsRUFPRjtFQUFBLElBQUFDLG9CQUFBLEVBQUFDLHFCQUFBO0VBQUEsSUFMQUMsTUFBTSxHQUFBSCxNQUFBLENBQWhCMUgsT0FBTyxDQUFHNkgsTUFBTTtFQU1sQixJQUFBQyxNQUFBLEdBQWtCRCxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQXZCRSxPQUFPLEdBQUFELE1BQUEsQ0FBUEMsT0FBTztFQUNkLElBQUksQ0FBQ0EsT0FBTyxFQUFFO0lBQ1osT0FBT2pJLEtBQUs7RUFDZDtFQUVBLElBQUlrSSxRQUFRLEdBQUdsSSxLQUFLO0VBRXBCLEtBQUE2SCxvQkFBQSxHQUFJSSxPQUFPLENBQUMzSSxXQUFXLGNBQUF1SSxvQkFBQSxnQkFBQUEsb0JBQUEsR0FBbkJBLG9CQUFBLENBQXFCck0sU0FBUyxjQUFBcU0sb0JBQUEsZUFBOUJBLG9CQUFBLENBQWdDL00sTUFBTSxFQUFFO0lBQzFDLElBQU1xTixhQUFhLEdBQUdELFFBQVEsQ0FBQzVJLFdBQVcsQ0FBQzlELFNBQVM7SUFDcEQwTSxRQUFRLEdBQUFuTyxhQUFBLENBQUFBLGFBQUEsS0FDSG1PLFFBQVE7TUFDWDVJLFdBQVcsRUFBQXZGLGFBQUEsQ0FBQUEsYUFBQSxLQUNObU8sUUFBUSxDQUFDNUksV0FBVztRQUN2QjlELFNBQVMsRUFBQXpCLGFBQUEsQ0FBQUEsYUFBQTtVQUNQYyxJQUFJLEVBQUU7UUFBSSxHQUNQc04sYUFBYTtVQUNoQnJOLE1BQU0sRUFBRSxJQUFJO1VBQ1pFLGNBQWMsRUFBRTtRQUFDO01BQ2xCO0lBQ0YsRUFDRjtFQUNIO0VBRUEsS0FBQThNLHFCQUFBLEdBQUlHLE9BQU8sQ0FBQzNJLFdBQVcsY0FBQXdJLHFCQUFBLGdCQUFBQSxxQkFBQSxHQUFuQkEscUJBQUEsQ0FBcUJ0TSxTQUFTLGNBQUFzTSxxQkFBQSxlQUE5QkEscUJBQUEsQ0FBZ0NoRixRQUFRLEVBQUU7SUFDNUNvRixRQUFRLEdBQUd4Riw0QkFBNEIsQ0FBQ3dGLFFBQVEsRUFBRTtNQUNoRGhJLE9BQU8sRUFBRTtRQUFDc0IsT0FBTyxFQUFFLFdBQVc7UUFBRXNCLFFBQVEsRUFBRW1GLE9BQU8sQ0FBQzNJLFdBQVcsQ0FBQzlELFNBQVMsQ0FBQ3NIO01BQVE7SUFDbEYsQ0FBc0QsQ0FBQztFQUN6RDtFQUVBLElBQUltRixPQUFPLENBQUN4SSxNQUFNLEVBQUU7SUFDbEJ5SSxRQUFRLEdBQUdkLGdCQUFnQixDQUFDYyxRQUFRLEVBQUU7TUFDcENoSSxPQUFPLEVBQUU7UUFBQ1QsTUFBTSxFQUFFd0ksT0FBTyxDQUFDeEk7TUFBTTtJQUNsQyxDQUEwQyxDQUFDO0VBQzdDO0VBRUEsT0FBT3lJLFFBQVE7QUFDakIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==