@kepler.gl/components 3.3.0-alpha.6 → 3.3.0-alpha.7

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.
Files changed (121) hide show
  1. package/dist/cjs/common/data-table/cell-size.js +40 -23
  2. package/dist/cjs/common/data-table/column-statistics-categoric.js +40 -0
  3. package/dist/cjs/common/data-table/column-statistics-components.js +65 -0
  4. package/dist/cjs/common/data-table/column-statistics-numeric.js +87 -0
  5. package/dist/cjs/common/data-table/column-statistics-time.js +69 -0
  6. package/dist/cjs/common/data-table/header-cell.js +123 -44
  7. package/dist/cjs/common/data-table/index.js +102 -29
  8. package/dist/cjs/common/histogram-plot.js +1 -1
  9. package/dist/cjs/common/icons/{arrow-down-solid.js → draw-point.js} +21 -11
  10. package/dist/cjs/common/icons/index.js +15 -1
  11. package/dist/cjs/common/icons/line-string.js +60 -0
  12. package/dist/cjs/common/toolbar-item.js +24 -3
  13. package/dist/cjs/editor/editor.js +26 -8
  14. package/dist/cjs/editor/feature-action-panel.js +34 -12
  15. package/dist/cjs/editor/feature-properties-editor.js +215 -0
  16. package/dist/cjs/editor/filter-feature-badges.js +92 -0
  17. package/dist/cjs/index.js +33 -1
  18. package/dist/cjs/kepler-gl.js +20 -3
  19. package/dist/cjs/map/map-control-toolbar.js +2 -2
  20. package/dist/cjs/map/map-control.js +13 -7
  21. package/dist/cjs/map/map-draw-panel.js +65 -15
  22. package/dist/cjs/map/theme-toggle-button.js +64 -0
  23. package/dist/cjs/map-container.js +16 -5
  24. package/dist/cjs/modal-container.js +2 -1
  25. package/dist/cjs/modals/cloud-components/cloud-item.js +55 -7
  26. package/dist/cjs/modals/cloud-components/cloud-item.spec.js +75 -3
  27. package/dist/cjs/modals/cloud-components/cloud-maps.js +2 -1
  28. package/dist/cjs/modals/cloud-tile.js +52 -38
  29. package/dist/cjs/modals/data-table-modal.js +37 -25
  30. package/dist/cjs/modals/export-video-modal.js +28 -1
  31. package/dist/cjs/modals/export-video-modal.spec.js +56 -10
  32. package/dist/cjs/modals/globe-export-video-container.js +19 -3
  33. package/dist/cjs/modals/globe-export-video-preview.js +25 -7
  34. package/dist/cjs/modals/hubble-utils.js +8 -3
  35. package/dist/cjs/modals/swipe-composite-utils.js +9 -1
  36. package/dist/cjs/modals/swipe-composite-utils.spec.js +69 -0
  37. package/dist/cjs/modals/swipe-export-video-preview.js +9 -5
  38. package/dist/cjs/side-panel/layer-manager.js +11 -3
  39. package/dist/cjs/side-panel/layer-panel/dataset-layer-section.js +11 -3
  40. package/dist/cjs/side-panel/layer-panel/layer-configurator.js +74 -31
  41. package/dist/cjs/side-panel/map-style-panel/globe-config-panel.js +90 -25
  42. package/dist/common/data-table/column-statistics-categoric.d.ts +9 -0
  43. package/dist/common/data-table/column-statistics-components.d.ts +31 -0
  44. package/dist/common/data-table/column-statistics-numeric.d.ts +18 -0
  45. package/dist/common/data-table/column-statistics-time.d.ts +19 -0
  46. package/dist/common/data-table/header-cell.d.ts +7 -5
  47. package/dist/common/data-table/index.d.ts +7 -24
  48. package/dist/common/histogram-plot.d.ts +24 -1
  49. package/dist/common/icons/{arrow-down-solid.d.ts → draw-point.d.ts} +2 -1
  50. package/dist/common/icons/index.d.ts +2 -0
  51. package/dist/common/icons/line-string.d.ts +10 -0
  52. package/dist/common/toolbar-item.d.ts +2 -0
  53. package/dist/editor/editor.d.ts +1 -0
  54. package/dist/editor/feature-action-panel.d.ts +1 -0
  55. package/dist/editor/feature-properties-editor.d.ts +8 -0
  56. package/dist/editor/filter-feature-badges.d.ts +12 -0
  57. package/dist/esm/common/data-table/cell-size.js +40 -23
  58. package/dist/esm/common/data-table/column-statistics-categoric.js +33 -0
  59. package/dist/esm/common/data-table/column-statistics-components.js +59 -0
  60. package/dist/esm/common/data-table/column-statistics-numeric.js +78 -0
  61. package/dist/esm/common/data-table/column-statistics-time.js +60 -0
  62. package/dist/esm/common/data-table/header-cell.js +125 -46
  63. package/dist/esm/common/data-table/index.js +102 -29
  64. package/dist/esm/common/histogram-plot.js +1 -1
  65. package/dist/esm/common/icons/draw-point.js +44 -0
  66. package/dist/esm/common/icons/index.js +3 -1
  67. package/dist/esm/common/icons/line-string.js +54 -0
  68. package/dist/esm/common/toolbar-item.js +24 -3
  69. package/dist/esm/editor/editor.js +26 -8
  70. package/dist/esm/editor/feature-action-panel.js +37 -15
  71. package/dist/esm/editor/feature-properties-editor.js +208 -0
  72. package/dist/esm/editor/filter-feature-badges.js +85 -0
  73. package/dist/esm/index.js +5 -1
  74. package/dist/esm/kepler-gl.js +20 -3
  75. package/dist/esm/map/map-control-toolbar.js +2 -2
  76. package/dist/esm/map/map-control.js +13 -7
  77. package/dist/esm/map/map-draw-panel.js +63 -11
  78. package/dist/esm/map/theme-toggle-button.js +55 -0
  79. package/dist/esm/map-container.js +16 -5
  80. package/dist/esm/modal-container.js +2 -1
  81. package/dist/esm/modals/cloud-components/cloud-item.js +53 -7
  82. package/dist/esm/modals/cloud-components/cloud-item.spec.js +76 -4
  83. package/dist/esm/modals/cloud-components/cloud-maps.js +2 -1
  84. package/dist/esm/modals/cloud-tile.js +52 -38
  85. package/dist/esm/modals/data-table-modal.js +38 -26
  86. package/dist/esm/modals/export-video-modal.js +29 -2
  87. package/dist/esm/modals/export-video-modal.spec.js +56 -10
  88. package/dist/esm/modals/globe-export-video-container.js +20 -4
  89. package/dist/esm/modals/globe-export-video-preview.js +26 -8
  90. package/dist/esm/modals/hubble-utils.js +8 -3
  91. package/dist/esm/modals/swipe-composite-utils.js +9 -1
  92. package/dist/esm/modals/swipe-composite-utils.spec.js +67 -0
  93. package/dist/esm/modals/swipe-export-video-preview.js +8 -4
  94. package/dist/esm/side-panel/layer-manager.js +11 -3
  95. package/dist/esm/side-panel/layer-panel/dataset-layer-section.js +11 -3
  96. package/dist/esm/side-panel/layer-panel/layer-configurator.js +74 -31
  97. package/dist/esm/side-panel/map-style-panel/globe-config-panel.js +90 -25
  98. package/dist/index.d.ts +8 -0
  99. package/dist/kepler-gl.d.ts +3 -0
  100. package/dist/map/map-control.d.ts +6 -2
  101. package/dist/map/map-draw-panel.d.ts +1 -0
  102. package/dist/map/theme-toggle-button.d.ts +18 -0
  103. package/dist/map-container.d.ts +1 -0
  104. package/dist/modals/cloud-components/cloud-item.d.ts +2 -1
  105. package/dist/modals/data-table-modal.d.ts +1 -0
  106. package/dist/modals/globe-export-video-container.d.ts +2 -0
  107. package/dist/modals/globe-export-video-preview.d.ts +3 -0
  108. package/dist/modals/hubble-utils.d.ts +2 -1
  109. package/dist/modals/swipe-composite-utils.d.ts +1 -1
  110. package/dist/modals/swipe-composite-utils.spec.d.ts +1 -0
  111. package/package.json +20 -20
  112. package/dist/cjs/modals/cloud-components/provider-loading.js +0 -20
  113. package/dist/cjs/modals/storage-map-viewer.js +0 -98
  114. package/dist/cjs/side-panel/cloud-storage-dropdown.js +0 -40
  115. package/dist/esm/common/icons/arrow-down-solid.js +0 -34
  116. package/dist/esm/modals/cloud-components/provider-loading.js +0 -15
  117. package/dist/esm/modals/storage-map-viewer.js +0 -93
  118. package/dist/esm/side-panel/cloud-storage-dropdown.js +0 -33
  119. package/dist/modals/cloud-components/provider-loading.d.ts +0 -2
  120. package/dist/modals/storage-map-viewer.d.ts +0 -21
  121. package/dist/side-panel/cloud-storage-dropdown.d.ts +0 -6
@@ -32,6 +32,7 @@ import MapScaleFactory from './map/map-scale';
32
32
  import { StyledMapContainer } from './common/styled-components';
33
33
  import { Attribution, AttributionLogos, renderBasemapAttribution, dedupeBasemapAttributions } from './map/attribution';
34
34
  import EditorFactory from './editor/editor';
35
+ import FilterFeatureBadges from './editor/filter-feature-badges';
35
36
  import { AnnotationOverlay } from './annotations';
36
37
 
37
38
  // utils
@@ -1060,7 +1061,7 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor, MapS
1060
1061
  key: "_renderMap",
1061
1062
  value: /* eslint-disable complexity */
1062
1063
  function _renderMap() {
1063
- var _mapStyle$mapStyles2, _this$props$MapCompon, _this$context3, _mapState$maxPitch, _this$props$isExport, _mapState$globe2, _mapStyle$bottomMapSt, _mapControls$annotati, _mapState$globe3, _mapState$globe4, _theme$sidePanel$marg, _theme$sidePanel, _theme$sidePanel$marg2, _theme$sidePanel2;
1064
+ var _mapStyle$mapStyles2, _this$props$MapCompon, _this$context3, _mapState$maxPitch, _this$props$isExport, _mapState$globe2, _mapStyle$bottomMapSt, _mapState$globe3, _mapControls$annotati, _mapState$globe4, _mapState$globe5, _theme$sidePanel$marg, _theme$sidePanel, _theme$sidePanel$marg2, _theme$sidePanel2;
1064
1065
  var _this$props7 = this.props,
1065
1066
  visState = _this$props7.visState,
1066
1067
  mapState = _this$props7.mapState,
@@ -1070,6 +1071,7 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor, MapS
1070
1071
  mapControls = _this$props7.mapControls,
1071
1072
  isExport = _this$props7.isExport,
1072
1073
  locale = _this$props7.locale,
1074
+ uiTheme = _this$props7.uiTheme,
1073
1075
  uiStateActions = _this$props7.uiStateActions,
1074
1076
  visStateActions = _this$props7.visStateActions,
1075
1077
  index = _this$props7.index,
@@ -1165,6 +1167,7 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor, MapS
1165
1167
  top: interactionConfig.geocoder && interactionConfig.geocoder.enabled ? theme.mapControlTop : 0,
1166
1168
  editor: editor,
1167
1169
  locale: locale,
1170
+ themeName: uiTheme,
1168
1171
  onTogglePerspective: mapStateActions.togglePerspective,
1169
1172
  onSetMapViewMode: mapStateActions.setMapViewMode,
1170
1173
  mapViewMode: mapState.mapViewMode,
@@ -1174,7 +1177,9 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor, MapS
1174
1177
  onToggleSplitMapViewport: mapStateActions.toggleSplitMapViewport,
1175
1178
  onSetEditorMode: visStateActions.setEditorMode,
1176
1179
  onSetLocale: uiStateActions.setLocale,
1180
+ onSetTheme: uiStateActions.setTheme,
1177
1181
  onToggleEditorVisibility: visStateActions.toggleEditorVisibility,
1182
+ onConvertEditorFeaturesToLayer: visStateActions.convertEditorFeaturesToLayer,
1178
1183
  onLayerVisConfigChange: visStateActions.layerVisConfigChange,
1179
1184
  onToggleLayerVisibility: this._handleToggleLayerVisibility,
1180
1185
  mapHeight: mapState.height,
@@ -1191,6 +1196,7 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor, MapS
1191
1196
  filters: this.polygonFiltersSelector(this.props),
1192
1197
  layers: layers,
1193
1198
  onDeleteFeature: visStateActions.deleteFeature,
1199
+ onSetFeatureProperties: visStateActions.setEditorFeatureProperties,
1194
1200
  onSelect: visStateActions.setSelectedFeature,
1195
1201
  onTogglePolygonFilter: visStateActions.setPolygonFilterLayer,
1196
1202
  onSetEditorMode: visStateActions.setEditorMode,
@@ -1199,17 +1205,22 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor, MapS
1199
1205
  position: 'absolute',
1200
1206
  display: editor.visible ? 'block' : 'none'
1201
1207
  }
1202
- }), /*#__PURE__*/React.createElement(AnnotationOverlay, {
1208
+ }), editor.visible ? /*#__PURE__*/React.createElement(FilterFeatureBadges, {
1209
+ filters: this.polygonFiltersSelector(this.props),
1210
+ viewport: this._getAnnotationViewport(mapState, internalViewState),
1211
+ isGlobeEnabled: Boolean((_mapState$globe3 = mapState.globe) === null || _mapState$globe3 === void 0 ? void 0 : _mapState$globe3.enabled),
1212
+ onSelect: visStateActions.setSelectedFeature
1213
+ }) : null, /*#__PURE__*/React.createElement(AnnotationOverlay, {
1203
1214
  annotations: visState.annotations,
1204
1215
  selectedAnnotationId: visState.selectedAnnotationId,
1205
1216
  isEditingAnnotationText: visState.isEditingAnnotationText,
1206
1217
  isAnnotationMode: Boolean(mapControls === null || mapControls === void 0 || (_mapControls$annotati = mapControls.annotation) === null || _mapControls$annotati === void 0 ? void 0 : _mapControls$annotati.active),
1207
1218
  mapIndex: index || 0,
1208
1219
  viewport: this._getAnnotationViewport(mapState, internalViewState),
1209
- isGlobeEnabled: Boolean((_mapState$globe3 = mapState.globe) === null || _mapState$globe3 === void 0 ? void 0 : _mapState$globe3.enabled),
1220
+ isGlobeEnabled: Boolean((_mapState$globe4 = mapState.globe) === null || _mapState$globe4 === void 0 ? void 0 : _mapState$globe4.enabled),
1210
1221
  updateAnnotation: visStateActions.updateAnnotation,
1211
1222
  setSelectedAnnotation: visStateActions.setSelectedAnnotation
1212
- }), this.props.children, mapStyle.topMapStyle && !((_mapState$globe4 = mapState.globe) !== null && _mapState$globe4 !== void 0 && _mapState$globe4.enabled) ? /*#__PURE__*/React.createElement(ResolvedMapComponent, _extends({
1223
+ }), this.props.children, mapStyle.topMapStyle && !((_mapState$globe5 = mapState.globe) !== null && _mapState$globe5 !== void 0 && _mapState$globe5.enabled) ? /*#__PURE__*/React.createElement(ResolvedMapComponent, _extends({
1213
1224
  key: "top-".concat(baseMapLibraryName),
1214
1225
  viewState: internalViewState,
1215
1226
  maxPitch: effectiveMaxPitch,
@@ -1289,4 +1300,4 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor, MapS
1289
1300
  });
1290
1301
  return withTheme(MapContainer);
1291
1302
  }
1292
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkNvbXBvbmVudCIsImNyZWF0ZVJlZiIsInN0eWxlZCIsIndpdGhUaGVtZSIsIk1hcCIsIk1hcGJveExlZ2FjeU1hcCIsIk1hcGxpYnJlTWFwIiwiTWFwVmlldyIsIkRlY2tHTCIsImNyZWF0ZVNlbGVjdG9yIiwidXNlRHJvcHBhYmxlIiwiZGVib3VuY2UiLCJNYXBQb3BvdmVyRmFjdG9yeSIsIk1hcENvbnRyb2xGYWN0b3J5IiwiTWFwU2NhbGVGYWN0b3J5IiwiU3R5bGVkTWFwQ29udGFpbmVyIiwiQXR0cmlidXRpb24iLCJBdHRyaWJ1dGlvbkxvZ29zIiwicmVuZGVyQmFzZW1hcEF0dHJpYnV0aW9uIiwiZGVkdXBlQmFzZW1hcEF0dHJpYnV0aW9ucyIsIkVkaXRvckZhY3RvcnkiLCJBbm5vdGF0aW9uT3ZlcmxheSIsImdlbmVyYXRlTWFwYm94TGF5ZXJzIiwidXBkYXRlTWFwYm94TGF5ZXJzIiwiRWRpdG9yTGF5ZXJVdGlscyIsImVycm9yTm90aWZpY2F0aW9uIiwiaXNTdHlsZVVzaW5nTWFwYm94VGlsZXMiLCJpc1N0eWxlVXNpbmdPcGVuU3RyZWV0TWFwVGlsZXMiLCJnZXRCYXNlTWFwQXR0cmlidXRpb25zIiwiZ2V0QmFzZU1hcExpYnJhcnkiLCJ0cmFuc2Zvcm1SZXF1ZXN0Iiwib2JzZXJ2ZURpbWVuc2lvbnMiLCJ1bm9ic2VydmVEaW1lbnNpb25zIiwiZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcyIsIm9uVmlld1BvcnRDaGFuZ2UiLCJnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZSIsIm5vcm1hbGl6ZUV2ZW50IiwicmdiVG9IZXgiLCJjb21wdXRlRGVja0VmZmVjdHMiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzIiwicGF0Y2hEZWNrUmVuZGVyZXJGb3JQb3N0UHJvY2Vzc2luZyIsIkZJTFRFUl9UWVBFUyIsIkdFT0NPREVSX0xBWUVSX0lEIiwiVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUiLCJERUZBVUxUX1BJQ0tJTkdfUkFESVVTIiwiTk9fTUFQX0lEIiwiRU1QVFlfTUFQQk9YX1NUWUxFIiwiTUFQQk9YX01BWF9QSVRDSCIsIk1BUF9MSUJfT1BUSU9OUyIsIkdMT0JFX01JTl9aT09NIiwiR0xPQkVfTUFYX1pPT00iLCJnZXRHbG9iZUJhc2VMYXllcnMiLCJnZXRHbG9iZVRvcExheWVycyIsImdldEdsb2JlQ2xlYXJDb2xvciIsImdldEdsb2JlQmFzZW1hcEF0dHJpYnV0aW9ucyIsInJlc29sdmVHbG9iZUJhc2VtYXBQcm92aWRlciIsImdldFN0YXJzQmFja2dyb3VuZEltYWdlIiwiS2VwbGVyR2xvYmVWaWV3IiwiRFJPUFBBQkxFX01BUF9DT05UQUlORVJfVFlQRSIsIk1hcFZpZXdTdGF0ZUNvbnRleHQiLCJFcnJvckJvdW5kYXJ5IiwiTE9DQUxFX0NPREVTIiwiYXJlQW55RGVja0xheWVyc0xvYWRpbmciLCJjb21wdXRlRGVja0xheWVycyIsImdldExheWVySG92ZXJQcm9wIiwicHJlcGFyZUxheWVyc0ZvckRlY2siLCJwcmVwYXJlTGF5ZXJzVG9SZW5kZXIiLCJMb2FkaW5nSW5kaWNhdG9yIiwiREVCT1VOQ0VfVklFV1BPUlRfUFJPUEFHQVRFIiwiREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUiLCJERUJPVU5DRV9MT0FESU5HX1NUQVRFX1BST1BBR0FURSIsIk1BUF9TVFlMRSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJwb3NpdGlvbiIsIndpZHRoIiwiaGVpZ2h0IiwidG9wIiwicG9pbnRlckV2ZW50cyIsIkxPQ0FMRV9DT0RFU19BUlJBWSIsIk9iamVjdCIsImtleXMiLCJTdHlsZWRNYXAiLCJfcmVmIiwiX3JlZiQkbWl4QmxlbmRNb2RlIiwiJG1peEJsZW5kTW9kZSIsIiRtYXBMaWJDc3NDbGFzcyIsImNvbmNhdCIsIk1BUEJPWEdMX1NUWUxFX1VQREFURSIsIk1BUEJPWEdMX1JFTkRFUiIsIk9TTV9BVFRSSUJVVElPTl9IVE1MIiwiU3R5bGVkRHJvcHBhYmxlIiwiZGl2IiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsInByb3BzIiwiJGlzT3ZlciIsInRoZW1lIiwiZG5kT3ZlckJhY2tncm91bmRDb2xvciIsIlN0eWxlZE1hcFNjYWxlQ29udGFpbmVyIiwiX3RlbXBsYXRlT2JqZWN0MiIsInNpZGVQYW5lbCIsIm1hcmdpbiIsImxlZnQiLCIkYm90dG9tT2Zmc2V0IiwiJGxlZnQiLCJpc1NwbGl0U2VsZWN0b3IiLCJ2aXNTdGF0ZSIsInNwbGl0TWFwcyIsImxlbmd0aCIsIkRyb3BwYWJsZSIsIl9yZWYyIiwiY29udGFpbmVySWQiLCJfdXNlRHJvcHBhYmxlIiwiaWQiLCJkYXRhIiwidHlwZSIsImluZGV4IiwiZGlzYWJsZWQiLCJpc092ZXIiLCJzZXROb2RlUmVmIiwiY3JlYXRlRWxlbWVudCIsInJlZiIsIk1hcENvbnRhaW5lckZhY3RvcnkiLCJkZXBzIiwiTWFwUG9wb3ZlciIsIk1hcENvbnRyb2wiLCJFZGl0b3IiLCJNYXBTY2FsZSIsIk1hcENvbnRhaW5lciIsIl9Db21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9jYWxsU3VwZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJzaG93QmFzZU1hcExpYkxvZ28iLCJiYXNlbWFwQXR0cmlidXRpb25zIiwib25NYXBSZW5kZXIiLCJfbWFwIiwiZGltZW5zaW9ucyIsIl90aGlzJHByb3BzIiwicHJpbWFyeSIsIm1hcFN0YXRlQWN0aW9ucyIsInVwZGF0ZU1hcCIsImxheWVycyIsImxheWVyRGF0YSIsInNwbGl0TWFwU2VsZWN0b3IiLCJzcGxpdE1hcEluZGV4U2VsZWN0b3IiLCJsYXllck9yZGVyIiwibGF5ZXJzU2VsZWN0b3IiLCJsYXllckRhdGFTZWxlY3RvciIsIm1hcExheWVyc1NlbGVjdG9yIiwiZmlsdGVycyIsImZpbHRlcnNTZWxlY3RvciIsImZpbHRlciIsImYiLCJwb2x5Z29uIiwiZW5hYmxlZCIsImVkaXRvciIsImZlYXR1cmVzIiwic2VsZWN0ZWRGZWF0dXJlIiwicG9seWdvbkZpbHRlcnNTZWxlY3RvciIsImZlYXR1cmVzU2VsZWN0b3IiLCJwb2x5Z29uRmlsdGVycyIsIm1hcCIsInZhbHVlIiwiZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3RvciIsInNlbGVjdGVkRmVhdHVyZVNlbGVjdG9yIiwiY29sbGVjdGlvbiIsImZpbmRJbmRleCIsIl9wcm9wcyRnZW5lcmF0ZU1hcGJveCIsImxheWVyT3JkZXJTZWxlY3RvciIsImxheWVyc1RvUmVuZGVyU2VsZWN0b3IiLCJnZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kU2VsZWN0b3IiLCJsYXllciIsImxheWVyc1RvUmVuZGVyIiwiZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZCIsIm1hcFN0eWxlIiwic3R5bGVUeXBlIiwiYmFja2dyb3VuZENvbG9yIiwiX3Byb3BzJG1hcFN0YXRlIiwiQm9vbGVhbiIsIm1hcFN0YXRlIiwiZ2xvYmUiLCJfcHJvcHMkbWFwU3RhdGUyIiwiY29uZmlnIiwiX3Byb3BzJG1hcFN0YXRlMyIsInN0YXJzIiwibWFwU3R5bGVUeXBlU2VsZWN0b3IiLCJtYXBTdHlsZUJhY2tncm91bmRDb2xvclNlbGVjdG9yIiwiZ2xvYmVNb2RlU2VsZWN0b3IiLCJnbG9iZUJhY2tncm91bmRDb2xvclNlbGVjdG9yIiwiZ2xvYmVTdGFyc1NlbGVjdG9yIiwiaXNHbG9iZU1vZGUiLCJnbG9iZUJhY2tncm91bmRDb2xvciIsImdsb2JlU3RhcnMiLCJfb2JqZWN0U3ByZWFkIiwic2xpY2UiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUmVwZWF0IiwidmlzU3RhdGVBY3Rpb25zIiwib25MYXllckNsaWNrIiwiX2lkeCIsImluZm8iLCJvbkxheWVySG92ZXIiLCJpZHgiLCJBcnJheSIsImlzQXJyYXkiLCJjb2xvckRvbWFpbiIsImRvbWFpbiIsImFnZ3JlZ2F0ZWRCaW5zIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJfdGhpcyRwcm9wczIiLCJib3VuZHMiLCJmaXRCb3VuZHMiLCJldmVudCIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSIsIndtc0ZlYXR1cmVJbmZvIiwiZmVhdHVyZUluZm8iLCJjb29yZGluYXRlIiwibGF5ZXJJZCIsIl90aGlzJHByb3BzMyIsIl90aGlzJHByb3BzMyRpbmRleCIsIm1hcEluZGV4IiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJ1cGRhdGUiLCJwcmV2aW91c0xheWVycyIsIl91cGRhdGVNYXBib3hMYXllcnMiLCJfdXBkYXRlQXR0cmlidXRpb24iLCJvbk1hcFN0eWxlTG9hZGVkIiwiX3RoaXMkcHJvcHMkbWFwU3R5bGUiLCJfdGhpcyRwcm9wcyRtYXBTdHlsZTIiLCJfcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzIiwic3R5bGVPYmoiLCJzdHlsZSIsIl90aGlzJF9tYXAkaXNTdHlsZUxvYSIsIl90aGlzJF9tYXAiLCJfdGhpcyRfbWFwJGdldFN0eWxlIiwiX3RoaXMkX21hcDIiLCJyYXdTdHlsZSIsImlzU3R5bGVMb2FkZWQiLCJjYWxsIiwiZ2V0U3R5bGUiLCJzdHlsZXNoZWV0IiwiX3VudXNlZCIsInVzZXNNYXBib3giLCJ1c2VzT3NtIiwicHVzaCIsImN1cnJlbnRTdHlsZSIsIm1hcFN0eWxlcyIsImlzVXNlckN1c3RvbVN0eWxlIiwiY3VzdG9tIiwic2V0U3RhdGUiLCJfY29sbGVjdEJhc2VtYXBBdHRyaWJ1dGlvbnMiLCJfYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lciIsIm9mZiIsIl9iYXNlbWFwSWRsZUxpc3RlbmVyIiwiYXR0ZW1wdHMiLCJNQVhfQVRURU1QVFMiLCJ0cnlDb2xsZWN0Iiwib25Tb3VyY2VEYXRhIiwiZSIsImlzU291cmNlTG9hZGVkIiwic291cmNlRGF0YVR5cGUiLCJvbklkbGUiLCJvbiIsIm1hcFJlZiIsImdldE1hcCIsIl9vbk1hcGJveFN0eWxlVXBkYXRlIiwiX29uTWFwUmVuZGVyIiwiZ2V0TWFwYm94UmVmIiwiZXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJtZXNzYWdlIiwibGF5ZXJNZXNzYWdlIiwiZXJyb3JNZXNzYWdlRnVsbCIsImxhc3RTaG93biIsIl9kZWNrR0xFcnJvcnNFbGFwc2VkIiwiRGF0ZSIsIm5vdyIsImV4dHJhTGF5ZXJNZXNzYWdlIiwiX3RvcE1vc3RMYXllciRwcm9wcyIsInRvcE1vc3RMYXllciIsInBhcmVudCIsImxheWVyU2V0SXNWYWxpZCIsInVpU3RhdGVBY3Rpb25zIiwiYWRkTm90aWZpY2F0aW9uIiwiX3RoaXMkY29udGV4dCIsInZpZXdTdGF0ZSIsImNvbnRleHQiLCJnZXRJbnRlcm5hbFZpZXdTdGF0ZSIsIm9uVmlld1N0YXRlQ2hhbmdlIiwidmlld3BvcnQiLCJfdGhpcyRwcm9wcyRtYXBTdGF0ZSIsImludGVyYWN0aW9uU3RhdGUiLCJpc0V4cG9ydCIsInNldEludGVybmFsVmlld1N0YXRlIiwiX3dhc0ludGVyYWN0aW5nIiwiX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQiLCJpc1VzZXJJbnRlcmFjdGlvbiIsImlzWm9vbWluZyIsImlzUGFubmluZyIsImlzUm90YXRpbmciLCJpc0RyYWdnaW5nIiwiaW5UcmFuc2l0aW9uIiwiaXNJbnRlcmFjdGlvblNldHRsZSIsInNldFRpbWVvdXQiLCJvbk1vdXNlTW92ZSIsInNldExvYWRpbmdJbmRpY2F0b3IiLCJjaGFuZ2UiLCJpc1Zpc2libGUiLCJwYW5lbElkIiwiX3RoaXMkcHJvcHM0IiwidG9nZ2xlTWFwQ29udHJvbCIsIk51bWJlciIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsImtleSIsImNvbXBvbmVudERpZE1vdW50IiwiY3VycmVudCIsIl9oYW5kbGVSZXNpemUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsIl9vbkRlY2tJbml0aWFsaXplZCIsImRldmljZSIsIm9uRGVja0luaXRpYWxpemVkIiwiX2RlY2siLCJfaXNPS1RvUmVuZGVyRWZmZWN0cyIsInZpZXdJbmRleCIsIl90aGlzJF9kZWNrIiwidmlld01hbmFnZXIiLCJfdmlld3BvcnRzIiwiX2dldEFubm90YXRpb25WaWV3cG9ydCIsImludGVybmFsVmlld1N0YXRlIiwiX2ludGVybmFsVmlld1N0YXRlJGxvIiwiX2ludGVybmFsVmlld1N0YXRlJGxhIiwiX2ludGVybmFsVmlld1N0YXRlJHpvIiwiX3JlZjMiLCJfaW50ZXJuYWxWaWV3U3RhdGUkcGkiLCJfcmVmNCIsIl9pbnRlcm5hbFZpZXdTdGF0ZSRiZSIsIl90aGlzJF9hbm5vdGF0aW9uVmlldyIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiem9vbSIsInBpdGNoIiwiYmVhcmluZyIsIl9hbm5vdGF0aW9uVmlld3BvcnRDYWNoZSIsIm1lcmdlZFN0YXRlIiwidnAiLCJwcm9qZWN0IiwibG5nTGF0IiwidW5wcm9qZWN0IiwieHkiLCJfcmVuZGVyTWFwUG9wb3ZlciIsIl90aGlzJHByb3BzJHZpc1N0YXRlJCIsImhvdmVySW5mbyIsIl90aGlzJHByb3BzNSIsIl90aGlzJHByb3BzNSR2aXNTdGF0ZSIsImNsaWNrZWQiLCJkYXRhc2V0cyIsImludGVyYWN0aW9uQ29uZmlnIiwiYW5pbWF0aW9uQ29uZmlnIiwiX3RoaXMkcHJvcHM1JHZpc1N0YXRlMiIsIm1vdXNlUG9zIiwibW91c2VQb3NpdGlvbiIsInBpbm5lZCIsInRvb2x0aXAiLCJsYXllckhvdmVyUHJvcCIsImNvbXBhcmVNb2RlIiwicGlubmVkUG9zaXRpb24iLCJ4IiwieSIsImxheWVyUGlubmVkUHJvcCIsIl9nZXRIb3ZlclhZIiwicHJpbWFyeURhdGEiLCJjb21wYXJlVHlwZSIsImNvbW1vblByb3AiLCJvbkNsb3NlIiwiX29uQ2xvc2VNYXBQb3BvdmVyIiwiY2FudmFzIiwidW5kZWZpbmVkIiwiX2V4dGVuZHMiLCJmcm96ZW4iLCJpc0Jhc2UiLCJvblNldEZlYXR1cmVzIiwic2V0RmVhdHVyZXMiLCJzZXRTZWxlY3RlZEZlYXR1cmUiLCJmZWF0dXJlQ29sbGVjdGlvbiIsInNjcmVlbkNvb3JkIiwiX3JlbmRlckRlY2tPdmVybGF5IiwibGF5ZXJzRm9yRGVjayIsIl90aGlzJGNvbnRleHQyIiwiX21hcFN0YXRlJGdsb2JlIiwiX21hcFN0eWxlJG1hcFN0eWxlcyIsIl90aGlzMiIsIl90aGlzJHByb3BzJG1hcFN0YXRlJCIsIm9wdGlvbnMiLCJhcmd1bWVudHMiLCJwcmltYXJ5TWFwIiwiX3RoaXMkcHJvcHM2IiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJkZWNrR2xQcm9wcyIsIm1hcENvbnRyb2xzIiwiZGVja1JlbmRlckNhbGxiYWNrcyIsImdlbmVyYXRlRGVja0dMTGF5ZXJzIiwiaXNJbnRlcmFjdGl2ZSIsImNoaWxkcmVuIiwibWFwRHJhdyIsIl9yZWY1IiwiX3JlZjUkYWN0aXZlIiwiYWN0aXZlIiwiZWRpdG9yTWVudUFjdGl2ZSIsImlzRWRpdG9yRHJhd2luZ01vZGUiLCJpc0RyYXdpbmdBY3RpdmUiLCJtb2RlIiwiaW50ZXJuYWxNYXBTdGF0ZSIsImVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4Iiwic2VsZWN0ZWRQb2x5Z29uSW5kZXhTZWxlY3RvciIsImdlbmVyYXRlRGVja0dMTGF5ZXJzTWV0aG9kIiwiZXh0cmFEZWNrUGFyYW1zIiwiZ2V0VG9vbHRpcCIsImlzTmFOIiwiZ2V0Q3Vyc29yIiwiX3JlZjYiLCJlZGl0b3JDdXJzb3IiLCJlZmZlY3RzIiwibGF5ZXJCbGVuZGluZ1BhcmFtcyIsImxheWVyQmxlbmRpbmciLCJkZWNrTGF5ZXJzTWFwU3RhdGUiLCJsYXllclBhcmFtZXRlcnMiLCJkZWNrR2xMYXllcnMiLCJlZGl0b3JJbmZvIiwib25BcHBseVBvbHlnb25GaWx0ZXJBbGwiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzIiwic2VsZWN0ZWRGZWF0dXJlSW5kZXhlcyIsInNlbGVjdGVkRmVhdHVyZUluZGV4QXJyYXlTZWxlY3RvciIsIl9vbkxheWVySG92ZXIiLCJvblNldExheWVyRG9tYWluIiwiX29uTGF5ZXJTZXREb21haW4iLCJvbkZpbHRlcmVkSXRlbXNDaGFuZ2UiLCJfb25MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UiLCJvbldNU0ZlYXR1cmVJbmZvIiwiX29uV01TRmVhdHVyZUluZm8iLCJvblJlZHJhd05lZWRlZCIsIl9vblJlZHJhd05lZWRlZCIsIm9uRml0Qm91bmRzIiwiX29uRml0Qm91bmRzIiwiZ2xvYmVCYXNlbWFwUHJvdmlkZXIiLCJnbG9iZUJhc2VMYXllcnMiLCJtYXBTdHlsZVR5cGUiLCJiYXNlbWFwUHJvdmlkZXIiLCJnbG9iZVRvcExheWVycyIsImZpbmFsRGVja0dsTGF5ZXJzIiwiX3RvQ29uc3VtYWJsZUFycmF5Iiwidmlld3MiLCJyZXNvbHV0aW9uIiwiY2xlYXIiLCJjbGVhckNvbG9yIiwiZmFyWk11bHRpcGxpZXIiLCJhbGxEZWNrR2xQcm9wcyIsInBpY2tpbmdSYWRpdXMiLCJwYXJhbWV0ZXJzIiwiY3VsbCIsIm9uRGVja1JlbmRlciIsIl9vbk1vdXNlTW92ZURlYm91bmNlZCIsIm9uTG9hZCIsIm9uRGVja0xvYWQiLCJjb250cm9sbGVyIiwiZG91YmxlQ2xpY2tab29tIiwiZHJhZ1JvdGF0ZSIsIm1heFBpdGNoIiwibWluWm9vbSIsIm1heFpvb20iLCJvbkJlZm9yZVJlbmRlciIsIl9vbkJlZm9yZVJlbmRlciIsIl9vblZpZXdwb3J0Q2hhbmdlIiwib25Ib3ZlciIsInJlcyIsIl9vbkxheWVySG92ZXJEZWJvdW5jZWQiLCJvbkNsaWNrIiwic3JjRXZlbnQiLCJhbGlnbmluZ0xheWVyIiwiZmluZCIsImwiLCJhbGlnbldhaXRpbmdGb3JNYXAiLCJvbkFsaWduTWFwQ2xpY2siLCJvbkVycm9yIiwiX29uRGVja0Vycm9yIiwiY29tcCIsImRlY2siLCJvbkRldmljZUluaXRpYWxpemVkIiwib25BZnRlclJlbmRlciIsIm9uRGVja0FmdGVyUmVuZGVyIiwiYW55QWN0aXZlTGF5ZXJMb2FkaW5nIiwiX29uTGF5ZXJMb2FkaW5nU3RhdGVDaGFuZ2UiLCJtYXBib3hMYXllcnMiLCJtYXBib3hMYXllcnNTZWxlY3RvciIsIl9yZW5kZXJNYXBib3hPdmVybGF5cyIsIl9yZW5kZXJNYXAiLCJfbWFwU3R5bGUkbWFwU3R5bGVzMiIsIl90aGlzJHByb3BzJE1hcENvbXBvbiIsIl90aGlzJGNvbnRleHQzIiwiX21hcFN0YXRlJG1heFBpdGNoIiwiX3RoaXMkcHJvcHMkaXNFeHBvcnQiLCJfbWFwU3RhdGUkZ2xvYmUyIiwiX21hcFN0eWxlJGJvdHRvbU1hcFN0IiwiX21hcENvbnRyb2xzJGFubm90YXRpIiwiX21hcFN0YXRlJGdsb2JlMyIsIl9tYXBTdGF0ZSRnbG9iZTQiLCJfdGhlbWUkc2lkZVBhbmVsJG1hcmciLCJfdGhlbWUkc2lkZVBhbmVsIiwiX3RoZW1lJHNpZGVQYW5lbCRtYXJnMiIsIl90aGVtZSRzaWRlUGFuZWwyIiwiX3RoaXMkcHJvcHM3IiwibG9jYWxlIiwiYm90dG9tTWFwQ29udGFpbmVyUHJvcHMiLCJ0b3BNYXBDb250YWluZXJQcm9wcyIsIl90aGlzJHByb3BzNyRkYXRhc2V0QSIsImRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJfdGhpcyRwcm9wczckYXR0cmlidXQiLCJhdHRyaWJ1dGlvbkxvZ29zIiwiX3RoaXMkcHJvcHM3JGNvbnRhaW5lIiwiaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZSIsImFjdGl2ZVNpZGVQYW5lbCIsInNpZGVQYW5lbFdpZHRoIiwibGF5ZXJzRm9yRGVja1NlbGVjdG9yIiwiYmFzZU1hcExpYnJhcnlOYW1lIiwiYmFzZU1hcExpYnJhcnlDb25maWciLCJSZXNvbHZlZE1hcENvbXBvbmVudCIsIk1hcENvbXBvbmVudCIsIk1BUEJPWCIsInVzZU1hcGJveEFkYXB0ZXIiLCJjb25maWdNYXhQaXRjaCIsImVmZmVjdGl2ZU1heFBpdGNoIiwiTWF0aCIsIm1pbiIsIm1hcFByb3BzIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwibWFwYm94QWNjZXNzVG9rZW4iLCJhY2Nlc3NUb2tlbiIsIlJUTFRleHRQbHVnaW4iLCJtYXBib3hDb25maWciLCJtYXBMaWIiLCJnZXRNYXBMaWIiLCJoYXNHZW9jb2RlckxheWVyIiwiaXNTcGxpdCIsImJvdHRvbU1hcFN0eWxlIiwiX3NldE1hcFJlZiIsInNob3dNYXBDb250cm9sIiwiRnJhZ21lbnQiLCJhdmFpbGFibGVMb2NhbGVzIiwicmVhZE9ubHkiLCJzY2FsZSIsImxvZ29Db21wb25lbnQiLCJnZW9jb2RlciIsIm1hcENvbnRyb2xUb3AiLCJvblRvZ2dsZVBlcnNwZWN0aXZlIiwidG9nZ2xlUGVyc3BlY3RpdmUiLCJvblNldE1hcFZpZXdNb2RlIiwic2V0TWFwVmlld01vZGUiLCJtYXBWaWV3TW9kZSIsIm9uVG9nZ2xlU3BsaXRNYXAiLCJ0b2dnbGVTcGxpdE1hcCIsIm9uTWFwVG9nZ2xlTGF5ZXIiLCJfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIiLCJvblRvZ2dsZU1hcENvbnRyb2wiLCJfdG9nZ2xlTWFwQ29udHJvbCIsIm9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydCIsInRvZ2dsZVNwbGl0TWFwVmlld3BvcnQiLCJvblNldEVkaXRvck1vZGUiLCJzZXRFZGl0b3JNb2RlIiwib25TZXRMb2NhbGUiLCJzZXRMb2NhbGUiLCJvblRvZ2dsZUVkaXRvclZpc2liaWxpdHkiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5Iiwib25MYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzQ29uZmlnQ2hhbmdlIiwib25Ub2dnbGVMYXllclZpc2liaWxpdHkiLCJfaGFuZGxlVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5IiwibWFwSGVpZ2h0Iiwic2V0TWFwQ29udHJvbFNldHRpbmdzIiwib25Ub2dnbGVMYXllckZvck1hcCIsIm9uRGVsZXRlRmVhdHVyZSIsImRlbGV0ZUZlYXR1cmUiLCJvblNlbGVjdCIsIm9uVG9nZ2xlUG9seWdvbkZpbHRlciIsInNldFBvbHlnb25GaWx0ZXJMYXllciIsInZpc2libGUiLCJhbm5vdGF0aW9ucyIsInNlbGVjdGVkQW5ub3RhdGlvbklkIiwiaXNFZGl0aW5nQW5ub3RhdGlvblRleHQiLCJpc0Fubm90YXRpb25Nb2RlIiwiYW5ub3RhdGlvbiIsImlzR2xvYmVFbmFibGVkIiwidXBkYXRlQW5ub3RhdGlvbiIsInNldFNlbGVjdGVkQW5ub3RhdGlvbiIsInRvcE1hcFN0eWxlIiwiaGFzQXR0cmlidXRpb25Mb2dvcyIsImhhc01hcFNjYWxlIiwiZW5hYmxlTWFwU2NhbGUiLCJzdGF0ZSIsImdsb2JlQXR0cmlidXRpb25zIiwibG9nb3MiLCJyZW5kZXIiLCJfbWFwU3R5bGUkbWFwU3R5bGVzMyIsIl90aGlzJHByb3BzOCIsIm1hcENvbnRlbnQiLCJzdHlsZVNlbGVjdG9yIiwib25Db250ZXh0TWVudSIsInByZXZlbnREZWZhdWx0Iiwib3ZlcmxheUJsZW5kaW5nIiwibWFwTGliQ3NzQ2xhc3MiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFwLWNvbnRhaW5lci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gbGlicmFyaWVzXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIGNyZWF0ZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCwge3dpdGhUaGVtZX0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtNYXAgYXMgTWFwYm94TGVnYWN5TWFwLCBNYXBSZWZ9IGZyb20gJ3JlYWN0LW1hcC1nbC9tYXBib3gtbGVnYWN5JztcbmltcG9ydCB7TWFwIGFzIE1hcGxpYnJlTWFwfSBmcm9tICdAdmlzLmdsL3JlYWN0LW1hcGxpYnJlJztcbmltcG9ydCB7UGlja2luZ0luZm8sIE1hcFZpZXd9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IERlY2tHTCBmcm9tICdAZGVjay5nbC9yZWFjdCc7XG5pbXBvcnQge2NyZWF0ZVNlbGVjdG9yLCBTZWxlY3Rvcn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHt1c2VEcm9wcGFibGV9IGZyb20gJ0BkbmQta2l0L2NvcmUnO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC9kZWJvdW5jZSc7XG5cbmltcG9ydCB7VmlzU3RhdGVBY3Rpb25zLCBNYXBTdGF0ZUFjdGlvbnMsIFVJU3RhdGVBY3Rpb25zfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBjb21wb25lbnRzXG5pbXBvcnQgTWFwUG9wb3ZlckZhY3RvcnkgZnJvbSAnLi9tYXAvbWFwLXBvcG92ZXInO1xuaW1wb3J0IE1hcENvbnRyb2xGYWN0b3J5IGZyb20gJy4vbWFwL21hcC1jb250cm9sJztcbmltcG9ydCBNYXBTY2FsZUZhY3RvcnkgZnJvbSAnLi9tYXAvbWFwLXNjYWxlJztcbmltcG9ydCB7U3R5bGVkTWFwQ29udGFpbmVyfSBmcm9tICcuL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGlvbixcbiAgQXR0cmlidXRpb25Mb2dvcyxcbiAgcmVuZGVyQmFzZW1hcEF0dHJpYnV0aW9uLFxuICBkZWR1cGVCYXNlbWFwQXR0cmlidXRpb25zXG59IGZyb20gJy4vbWFwL2F0dHJpYnV0aW9uJztcblxuaW1wb3J0IEVkaXRvckZhY3RvcnkgZnJvbSAnLi9lZGl0b3IvZWRpdG9yJztcbmltcG9ydCB7QW5ub3RhdGlvbk92ZXJsYXl9IGZyb20gJy4vYW5ub3RhdGlvbnMnO1xuXG4vLyB1dGlsc1xuaW1wb3J0IHtcbiAgZ2VuZXJhdGVNYXBib3hMYXllcnMsXG4gIHVwZGF0ZU1hcGJveExheWVycyxcbiAgTGF5ZXIsXG4gIExheWVyQmFzZUNvbmZpZyxcbiAgVmlzdWFsQ2hhbm5lbERvbWFpbixcbiAgRWRpdG9yTGF5ZXJVdGlscyxcbiAgQWdncmVnYXRlZEJpblxufSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGlvbldpdGhTdHlsZSxcbiAgRGF0YXNldEF0dHJpYnV0aW9uLFxuICBNYXBTdGF0ZSxcbiAgTWFwQ29udHJvbHMsXG4gIFZpZXdwb3J0LFxuICBTcGxpdE1hcCxcbiAgU3BsaXRNYXBMYXllcnNcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgaXNTdHlsZVVzaW5nTWFwYm94VGlsZXMsXG4gIGlzU3R5bGVVc2luZ09wZW5TdHJlZXRNYXBUaWxlcyxcbiAgZ2V0QmFzZU1hcEF0dHJpYnV0aW9ucyxcbiAgZ2V0QmFzZU1hcExpYnJhcnksXG4gIHRyYW5zZm9ybVJlcXVlc3QsXG4gIG9ic2VydmVEaW1lbnNpb25zLFxuICB1bm9ic2VydmVEaW1lbnNpb25zLFxuICBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzLFxuICBvblZpZXdQb3J0Q2hhbmdlLFxuICBnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZSxcbiAgbm9ybWFsaXplRXZlbnQsXG4gIHJnYlRvSGV4LFxuICBjb21wdXRlRGVja0VmZmVjdHMsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICBHZXRNYXBSZWYsXG4gIGdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzLFxuICBwYXRjaERlY2tSZW5kZXJlckZvclBvc3RQcm9jZXNzaW5nXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG4vLyBkZWZhdWx0LXNldHRpbmdzXG5pbXBvcnQge1xuICBGSUxURVJfVFlQRVMsXG4gIEdFT0NPREVSX0xBWUVSX0lELFxuICBUSFJPVFRMRV9OT1RJRklDQVRJT05fVElNRSxcbiAgREVGQVVMVF9QSUNLSU5HX1JBRElVUyxcbiAgTk9fTUFQX0lELFxuICBFTVBUWV9NQVBCT1hfU1RZTEUsXG4gIE1BUEJPWF9NQVhfUElUQ0gsXG4gIE1BUF9MSUJfT1BUSU9OUyxcbiAgR0xPQkVfTUlOX1pPT00sXG4gIEdMT0JFX01BWF9aT09NXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtcbiAgZ2V0R2xvYmVCYXNlTGF5ZXJzLFxuICBnZXRHbG9iZVRvcExheWVycyxcbiAgZ2V0R2xvYmVDbGVhckNvbG9yLFxuICBnZXRHbG9iZUJhc2VtYXBBdHRyaWJ1dGlvbnMsXG4gIHJlc29sdmVHbG9iZUJhc2VtYXBQcm92aWRlcixcbiAgZ2V0U3RhcnNCYWNrZ3JvdW5kSW1hZ2UsXG4gIEtlcGxlckdsb2JlVmlld1xufSBmcm9tICdAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnMnO1xuXG5pbXBvcnQge0RST1BQQUJMRV9NQVBfQ09OVEFJTkVSX1RZUEV9IGZyb20gJy4vY29tbW9uL2RuZC1sYXllci1pdGVtcyc7XG4vLyBDb250ZXh0c1xuaW1wb3J0IHtNYXBWaWV3U3RhdGVDb250ZXh0fSBmcm9tICcuL21hcC12aWV3LXN0YXRlLWNvbnRleHQnO1xuXG5pbXBvcnQgRXJyb3JCb3VuZGFyeSBmcm9tICcuL2NvbW1vbi9lcnJvci1ib3VuZGFyeSc7XG5pbXBvcnQge0xPQ0FMRV9DT0RFU30gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtcbiAgTWFwU3R5bGUsXG4gIGFyZUFueURlY2tMYXllcnNMb2FkaW5nLFxuICBjb21wdXRlRGVja0xheWVycyxcbiAgZ2V0TGF5ZXJIb3ZlclByb3AsXG4gIExheWVySG92ZXJQcm9wLFxuICBwcmVwYXJlTGF5ZXJzRm9yRGVjayxcbiAgcHJlcGFyZUxheWVyc1RvUmVuZGVyLFxuICBMYXllcnNUb1JlbmRlclxufSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5cbmltcG9ydCBMb2FkaW5nSW5kaWNhdG9yIGZyb20gJy4vbG9hZGluZy1pbmRpY2F0b3InO1xuXG4vLyBEZWJvdW5jZSB0aGUgcHJvcGFnYXRpb24gb2Ygdmlld3BvcnQgY2hhbmdlIGFuZCBtb3VzZSBtb3ZlcyB0byByZWR1eCBzdG9yZS5cbi8vIFRoaXMgaXMgdG8gYXZvaWQgdG9vIG1hbnkgcmVuZGVycyBvZiBvdGhlciBjb21wb25lbnRzIHdoZW4gdGhlIG1hcCBpc1xuLy8gYmVpbmcgcGFubmVkL3pvb21lZCAobGVhZGluZyB0byBsYWdneSBiYXNlbWFwL2RlY2sgc3luY2luZykuXG5jb25zdCBERUJPVU5DRV9WSUVXUE9SVF9QUk9QQUdBVEUgPSAxMDtcbmNvbnN0IERFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFID0gMTA7XG5cbi8vIEhvdyBsb25nIHNob3VsZCB3ZSB3YWl0IGJldHdlZW4gbGF5ZXIgbG9hZGluZyBzdGF0ZSBjaGFuZ2VzIGJlZm9yZSB0cmlnZ2VyaW5nIGEgVUkgdXBkYXRlXG5jb25zdCBERUJPVU5DRV9MT0FESU5HX1NUQVRFX1BST1BBR0FURSA9IDEwMDtcblxuY29uc3QgTUFQX1NUWUxFOiB7W2tleTogc3RyaW5nXTogUmVhY3QuQ1NTUHJvcGVydGllc30gPSB7XG4gIGNvbnRhaW5lcjoge1xuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgaGVpZ2h0OiAnMTAwJSdcbiAgfSxcbiAgdG9wOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnXG4gIH1cbn07XG5cbmNvbnN0IExPQ0FMRV9DT0RFU19BUlJBWSA9IE9iamVjdC5rZXlzKExPQ0FMRV9DT0RFUyk7XG5cbmludGVyZmFjZSBTdHlsZWRNYXBDb250YWluZXJQcm9wcyB7XG4gICRtaXhCbGVuZE1vZGU/OiBzdHJpbmc7XG4gICRtYXBMaWJDc3NDbGFzczogc3RyaW5nO1xufVxuXG5jb25zdCBTdHlsZWRNYXAgPSBzdHlsZWQoU3R5bGVkTWFwQ29udGFpbmVyKTxTdHlsZWRNYXBDb250YWluZXJQcm9wcz4oXG4gICh7JG1peEJsZW5kTW9kZSA9ICdub3JtYWwnLCAkbWFwTGliQ3NzQ2xhc3N9KSA9PiBgXG4gICNkZWZhdWx0LWRlY2tnbC1vdmVybGF5IHtcbiAgICBtaXgtYmxlbmQtbW9kZTogJHskbWl4QmxlbmRNb2RlfTtcbiAgfTtcbiAgKlskeyRtYXBMaWJDc3NDbGFzc30tY2hpbGRyZW5dIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cbmBcbik7XG5cbmNvbnN0IE1BUEJPWEdMX1NUWUxFX1VQREFURSA9ICdzdHlsZS5sb2FkJztcbmNvbnN0IE1BUEJPWEdMX1JFTkRFUiA9ICdyZW5kZXInO1xuXG4vLyBDYW5vbmljYWwgT3BlblN0cmVldE1hcCBhdHRyaWJ1dGlvbiwgaW5qZWN0ZWQgaW50byB0aGUgY29sbGVjdGVkIGxpc3Qgd2hlbiBhXG4vLyBzdHlsZSBpcyBkZXRlY3RlZCB0byB1c2UgT1NNIHRpbGVzIGJ1dCB0aGUgcmVzb2x2ZWQgc291cmNlcyBoYXZlbid0IHlpZWxkZWRcbi8vIGFuIGF0dHJpYnV0aW9uIHN0cmluZyBvZiB0aGVpciBvd24gKGUuZy4gcmF3IHN0eWxlIGRlY2xhcmVzIE9TTSBidXQgdGhlXG4vLyBUaWxlSlNPTiBoYXNuJ3QgZXhwb3NlZCBpdCkuIFJlbmRlcmVkIHRocm91Z2ggdGhlIHNhbWUgc2FmZSBsaW5rIHBhcnNlciBhc1xuLy8gZXZlcnkgb3RoZXIgY29sbGVjdGVkIGF0dHJpYnV0aW9uLlxuY29uc3QgT1NNX0FUVFJJQlVUSU9OX0hUTUwgPVxuICAnwqkgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiPk9wZW5TdHJlZXRNYXA8L2E+JztcblxuaW50ZXJmYWNlIFN0eWxlZERyb3BwYWJsZVByb3BzIHtcbiAgJGlzT3ZlcjogYm9vbGVhbjtcbn1cblxuY29uc3QgU3R5bGVkRHJvcHBhYmxlID0gc3R5bGVkLmRpdjxTdHlsZWREcm9wcGFibGVQcm9wcz5gXG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLiRpc092ZXIgPyBwcm9wcy50aGVtZS5kbmRPdmVyQmFja2dyb3VuZENvbG9yIDogJ25vbmUnKX07XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xuXG5jb25zdCBTdHlsZWRNYXBTY2FsZUNvbnRhaW5lciA9IHN0eWxlZC5kaXY8eyRsZWZ0OiBudW1iZXI7ICRib3R0b21PZmZzZXQ6IG51bWJlcn0+YFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zaWRlUGFuZWwubWFyZ2luLmxlZnQgKyBwcm9wcy4kYm90dG9tT2Zmc2V0fXB4O1xuICBsZWZ0OiAke3Byb3BzID0+IHByb3BzLiRsZWZ0fXB4O1xuICB6LWluZGV4OiAxO1xuICBwb2ludGVyLWV2ZW50czogYXV0bztcbmA7XG5cbmV4cG9ydCBjb25zdCBpc1NwbGl0U2VsZWN0b3IgPSBwcm9wcyA9PlxuICBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMgJiYgcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA+IDE7XG5cbmV4cG9ydCBjb25zdCBEcm9wcGFibGUgPSAoe2NvbnRhaW5lcklkfSkgPT4ge1xuICBjb25zdCB7aXNPdmVyLCBzZXROb2RlUmVmfSA9IHVzZURyb3BwYWJsZSh7XG4gICAgaWQ6IGNvbnRhaW5lcklkLFxuICAgIGRhdGE6IHt0eXBlOiBEUk9QUEFCTEVfTUFQX0NPTlRBSU5FUl9UWVBFLCBpbmRleDogY29udGFpbmVySWR9LFxuICAgIGRpc2FibGVkOiAhY29udGFpbmVySWRcbiAgfSk7XG5cbiAgcmV0dXJuIDxTdHlsZWREcm9wcGFibGUgcmVmPXtzZXROb2RlUmVmfSAkaXNPdmVyPXtpc092ZXJ9IC8+O1xufTtcblxuLy8gQXR0cmlidXRpb24gVUkgKHBhcnNlciArIGNvbXBvbmVudHMpIGxpdmVzIGluIC4vbWFwL2F0dHJpYnV0aW9uIGFuZCBpc1xuLy8gcmUtZXhwb3J0ZWQgaGVyZSB0byBwcmVzZXJ2ZSB0aGUgcHVibGljIGltcG9ydCBwYXRoIChAa2VwbGVyLmdsL2NvbXBvbmVudHMpLlxuZXhwb3J0IHtBdHRyaWJ1dGlvbiwgQXR0cmlidXRpb25Mb2dvcywgcmVuZGVyQmFzZW1hcEF0dHJpYnV0aW9uLCBkZWR1cGVCYXNlbWFwQXR0cmlidXRpb25zfTtcblxuTWFwQ29udGFpbmVyRmFjdG9yeS5kZXBzID0gW01hcFBvcG92ZXJGYWN0b3J5LCBNYXBDb250cm9sRmFjdG9yeSwgRWRpdG9yRmFjdG9yeSwgTWFwU2NhbGVGYWN0b3J5XTtcblxudHlwZSBNYXBib3hTdHlsZSA9IHN0cmluZyB8IG9iamVjdCB8IHVuZGVmaW5lZDtcbnR5cGUgUHJvcFNlbGVjdG9yPFI+ID0gU2VsZWN0b3I8TWFwQ29udGFpbmVyUHJvcHMsIFI+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hcENvbnRhaW5lclByb3BzIHtcbiAgdmlzU3RhdGU6IFZpc1N0YXRlO1xuICBtYXBTdGF0ZTogTWFwU3RhdGU7XG4gIG1hcENvbnRyb2xzOiBNYXBDb250cm9scztcbiAgbWFwU3R5bGU6IHtib3R0b21NYXBTdHlsZT86IE1hcGJveFN0eWxlOyB0b3BNYXBTdHlsZT86IE1hcGJveFN0eWxlfSAmIE1hcFN0eWxlO1xuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBtYXBib3hBcGlVcmw6IHN0cmluZztcbiAgdmlzU3RhdGVBY3Rpb25zOiB0eXBlb2YgVmlzU3RhdGVBY3Rpb25zO1xuICBtYXBTdGF0ZUFjdGlvbnM6IHR5cGVvZiBNYXBTdGF0ZUFjdGlvbnM7XG4gIHVpU3RhdGVBY3Rpb25zOiB0eXBlb2YgVUlTdGF0ZUFjdGlvbnM7XG5cbiAgLy8gb3B0aW9uYWxcbiAgcHJpbWFyeT86IGJvb2xlYW47IC8vIHByaW1hcnkgb25lIHdpbGwgYmUgcmVwb3J0aW5nIGl0cyBzaXplIHRvIGFwcFN0YXRlXG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgaXNFeHBvcnQ/OiBib29sZWFuO1xuICAvLyBvbk1hcFN0eWxlTG9hZGVkPzogKG1hcDogbWFwbGlicmVnbC5NYXAgfCBSZXR1cm5UeXBlPE1hcFJlZlsnZ2V0TWFwJ10+IHwgbnVsbCkgPT4gdm9pZDtcbiAgb25NYXBTdHlsZUxvYWRlZD86IChtYXA6IEdldE1hcFJlZiB8IG51bGwpID0+IHZvaWQ7XG4gIG9uTWFwUmVuZGVyPzogKG1hcDogR2V0TWFwUmVmIHwgbnVsbCkgPT4gdm9pZDtcbiAgZ2V0TWFwYm94UmVmPzogKG1hcGJveD86IE1hcFJlZiB8IG51bGwsIGluZGV4PzogbnVtYmVyKSA9PiB2b2lkO1xuICBpbmRleD86IG51bWJlcjtcbiAgZGVsZXRlTWFwTGFiZWxzPzogKGNvbnRhaW5lcklkOiBzdHJpbmcsIGxheWVySWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgY29udGFpbmVySWQ/OiBudW1iZXI7XG5cbiAgaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZT86IGJvb2xlYW47XG4gIGFjdGl2ZVNpZGVQYW5lbDogc3RyaW5nIHwgbnVsbDtcbiAgc2lkZVBhbmVsV2lkdGg/OiBudW1iZXI7XG5cbiAgbG9jYWxlPzogYW55O1xuICB0aGVtZT86IGFueTtcbiAgZWRpdG9yPzogYW55O1xuICBNYXBDb21wb25lbnQ/OiB0eXBlb2YgTWFwYm94TGVnYWN5TWFwIHwgdHlwZW9mIE1hcGxpYnJlTWFwO1xuICBkZWNrR2xQcm9wcz86IGFueTtcbiAgb25EZWNrSW5pdGlhbGl6ZWQ/OiAoYTogYW55LCBiOiBhbnkpID0+IHZvaWQ7XG4gIG9uVmlld1N0YXRlQ2hhbmdlPzogKHZpZXdwb3J0OiBWaWV3cG9ydCkgPT4gdm9pZDtcblxuICB0b3BNYXBDb250YWluZXJQcm9wczogYW55O1xuICBib3R0b21NYXBDb250YWluZXJQcm9wczogYW55O1xuICB0cmFuc2Zvcm1SZXF1ZXN0PzogKHVybDogc3RyaW5nLCByZXNvdXJjZVR5cGU/OiBzdHJpbmcpID0+IHt1cmw6IHN0cmluZ307XG5cbiAgLyoqIFBhc3MgYGZhbHNlYCB0byBkaXNhYmxlIHRoZSByZW1vdGUgUlRMIHRleHQgcGx1Z2luLCBvciBhIFVSTCBzdHJpbmcgdG8gc2VsZi1ob3N0IGl0LiAqL1xuICBSVExUZXh0UGx1Z2luPzogc3RyaW5nIHwgZmFsc2U7XG5cbiAgZGF0YXNldEF0dHJpYnV0aW9ucz86IERhdGFzZXRBdHRyaWJ1dGlvbltdO1xuICBhdHRyaWJ1dGlvbkxvZ29zPzogQXR0cmlidXRpb25XaXRoU3R5bGVbXTtcblxuICBnZW5lcmF0ZU1hcGJveExheWVycz86IHR5cGVvZiBnZW5lcmF0ZU1hcGJveExheWVycztcbiAgZ2VuZXJhdGVEZWNrR0xMYXllcnM/OiB0eXBlb2YgY29tcHV0ZURlY2tMYXllcnM7XG5cbiAgb25Nb3VzZU1vdmU/OiAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQgJiB7bG5nTGF0PzogW251bWJlciwgbnVtYmVyXX0pID0+IHZvaWQ7XG5cbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGRlY2tSZW5kZXJDYWxsYmFja3M/OiB7XG4gICAgb25EZWNrTG9hZD86ICgpID0+IHZvaWQ7XG4gICAgb25EZWNrUmVuZGVyPzogKGRlY2tQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbDtcbiAgICBvbkRlY2tBZnRlclJlbmRlcj86IChkZWNrUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBhbnk7XG4gIH07XG5cbiAgLy8gT3B0aW9uYWw6IG92ZXJyaWRlIGxlZ2VuZCBoZWFkZXIgbG9nbyBpbiBtYXAgY29udHJvbHMgKHVzZWQgYnkgaW1hZ2UgZXhwb3J0KVxuICBsb2dvQ29tcG9uZW50PzogUmVhY3QuRkMgfCBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1hcENvbnRhaW5lckZhY3RvcnkoXG4gIE1hcFBvcG92ZXI6IFJldHVyblR5cGU8dHlwZW9mIE1hcFBvcG92ZXJGYWN0b3J5PixcbiAgTWFwQ29udHJvbDogUmV0dXJuVHlwZTx0eXBlb2YgTWFwQ29udHJvbEZhY3Rvcnk+LFxuICBFZGl0b3I6IFJldHVyblR5cGU8dHlwZW9mIEVkaXRvckZhY3Rvcnk+LFxuICBNYXBTY2FsZTogUmV0dXJuVHlwZTx0eXBlb2YgTWFwU2NhbGVGYWN0b3J5PlxuKTogUmVhY3QuQ29tcG9uZW50VHlwZTxNYXBDb250YWluZXJQcm9wcz4ge1xuICBjbGFzcyBNYXBDb250YWluZXIgZXh0ZW5kcyBDb21wb25lbnQ8TWFwQ29udGFpbmVyUHJvcHM+IHtcbiAgICBkaXNwbGF5TmFtZSA9ICdNYXBDb250YWluZXInO1xuXG4gICAgcHJpdmF0ZSBhbnlBY3RpdmVMYXllckxvYWRpbmcgPSBmYWxzZTtcblxuICAgIHN0YXRpYyBjb250ZXh0VHlwZSA9IE1hcFZpZXdTdGF0ZUNvbnRleHQ7XG5cbiAgICBkZWNsYXJlIGNvbnRleHQ6IFJlYWN0LkNvbnRleHRUeXBlPHR5cGVvZiBNYXBWaWV3U3RhdGVDb250ZXh0PjtcblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICBkZWNrR2xQcm9wczoge30sXG4gICAgICBpbmRleDogMCxcbiAgICAgIHByaW1hcnk6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHBhdGNoRGVja1JlbmRlcmVyRm9yUG9zdFByb2Nlc3NpbmcoKTtcbiAgICB9XG5cbiAgICBzdGF0ZSA9IHtcbiAgICAgIC8vIHRydWUgZm9yIGJ1aWx0LWluIGtlcGxlci5nbCBzdHlsZXMgKGRhcmstbWF0dGVyLCBwb3NpdHJvbiwg4oCmKSBhbmQgd2hlbiB0aGVcbiAgICAgIC8vIGJhc2VtYXAgdXNlcyBNYXBib3gtaG9zdGVkIHRpbGVzIChtYXBib3g6Ly8gc291cmNlcykuXG4gICAgICAvLyBGb3IgdXNlci1hZGRlZCBjdXN0b20gc3R5bGVzIChPcGVuRnJlZU1hcCwgQ0FSVE8gc2VsZi1ob3N0ZWQsIOKApikgTWFwTGlicmUgaXNcbiAgICAgIC8vIG1lcmVseSB0aGUgcmVuZGVyaW5nIGVuZ2luZSwgbm90IHRoZSB0aWxlIHByb3ZpZGVyLCBzbyB0aGUgbG9nbyBpcyBoaWRkZW4gYW5kXG4gICAgICAvLyB0aGUgYmFzZW1hcCdzIG93biBUaWxlSlNPTiBhdHRyaWJ1dGlvbiBpcyBzaG93biBpbnN0ZWFkLlxuICAgICAgc2hvd0Jhc2VNYXBMaWJMb2dvOiBmYWxzZSxcbiAgICAgIC8vIGF0dHJpYnV0aW9uIHN0cmluZ3MgY29sbGVjdGVkIGZyb20gdGhlIHJlc29sdmVkIG1hcCBzb3VyY2VzIChlLmcuIENBUlRPLFxuICAgICAgLy8gT3BlbkZyZWVNYXApLiAgUG9wdWxhdGVkIGFmdGVyIFRpbGVKU09OIHJlc29sdmVzLlxuICAgICAgYmFzZW1hcEF0dHJpYnV0aW9uczogW10gYXMgc3RyaW5nW11cbiAgICB9O1xuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAoIXRoaXMuX3JlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9ic2VydmVEaW1lbnNpb25zKHRoaXMuX3JlZi5jdXJyZW50LCB0aGlzLl9oYW5kbGVSZXNpemUpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgICB0aGlzLl9tYXAub2ZmKE1BUEJPWEdMX1NUWUxFX1VQREFURSwgdGhpcy5fb25NYXBib3hTdHlsZVVwZGF0ZSk7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoTUFQQk9YR0xfUkVOREVSLCB0aGlzLl9vbk1hcFJlbmRlcik7XG4gICAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9yZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB1bm9ic2VydmVEaW1lbnNpb25zKHRoaXMuX3JlZi5jdXJyZW50KTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICBpZiAocHJldlByb3BzLm1hcFN0eWxlLnN0eWxlVHlwZSAhPT0gdGhpcy5wcm9wcy5tYXBTdHlsZS5zdHlsZVR5cGUpIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm1hcFN0eWxlLnN0eWxlVHlwZSA9PT0gTk9fTUFQX0lEKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBzaG93QmFzZU1hcExpYkxvZ286IGZhbHNlLFxuICAgICAgICAgICAgYmFzZW1hcEF0dHJpYnV0aW9uczogW11cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2RlY2s6IGFueSA9IG51bGw7XG4gICAgX21hcDogR2V0TWFwUmVmIHwgbnVsbCA9IG51bGw7XG4gICAgX3JlZiA9IGNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcbiAgICBfZGVja0dMRXJyb3JzRWxhcHNlZDoge1tpZDogc3RyaW5nXTogbnVtYmVyfSA9IHt9O1xuICAgIF9iYXNlbWFwU291cmNlRGF0YUxpc3RlbmVyOiAoKGU6IGFueSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgICBfYmFzZW1hcElkbGVMaXN0ZW5lcjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgICBfb25NYXBSZW5kZXIgPSAoKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25NYXBSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbk1hcFJlbmRlcih0aGlzLl9tYXApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBwcmV2aW91c0xheWVycyA9IHtcbiAgICAgIC8vIFtsYXllcnMuaWRdOiBtYXBib3hMYXllckNvbmZpZ1xuICAgIH07XG5cbiAgICBfaGFuZGxlUmVzaXplID0gZGltZW5zaW9ucyA9PiB7XG4gICAgICBjb25zdCB7cHJpbWFyeSwgaW5kZXh9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmIChwcmltYXJ5KSB7XG4gICAgICAgIGNvbnN0IHttYXBTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKGRpbWVuc2lvbnMgJiYgZGltZW5zaW9ucy53aWR0aCA+IDAgJiYgZGltZW5zaW9ucy5oZWlnaHQgPiAwKSB7XG4gICAgICAgICAgbWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcChkaW1lbnNpb25zLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGF5ZXJzU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxWaXNTdGF0ZVsnbGF5ZXJzJ10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUubGF5ZXJzO1xuICAgIGxheWVyRGF0YVNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8VmlzU3RhdGVbJ2xheWVycyddPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmxheWVyRGF0YTtcbiAgICBzcGxpdE1hcFNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8U3BsaXRNYXBbXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHM7XG4gICAgc3BsaXRNYXBJbmRleFNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8bnVtYmVyIHwgdW5kZWZpbmVkPiA9IHByb3BzID0+IHByb3BzLmluZGV4O1xuICAgIG1hcExheWVyc1NlbGVjdG9yOiBQcm9wU2VsZWN0b3I8U3BsaXRNYXBMYXllcnMgfCBudWxsIHwgdW5kZWZpbmVkPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5zcGxpdE1hcFNlbGVjdG9yLFxuICAgICAgdGhpcy5zcGxpdE1hcEluZGV4U2VsZWN0b3IsXG4gICAgICBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzXG4gICAgKTtcbiAgICBsYXllck9yZGVyU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxWaXNTdGF0ZVsnbGF5ZXJPcmRlciddPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmxheWVyT3JkZXI7XG4gICAgbGF5ZXJzVG9SZW5kZXJTZWxlY3RvcjogUHJvcFNlbGVjdG9yPExheWVyc1RvUmVuZGVyPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICB0aGlzLm1hcExheWVyc1NlbGVjdG9yLFxuICAgICAgcHJlcGFyZUxheWVyc1RvUmVuZGVyXG4gICAgKTtcbiAgICBsYXllcnNGb3JEZWNrU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyRGF0YVNlbGVjdG9yLFxuICAgICAgcHJlcGFyZUxheWVyc0ZvckRlY2tcbiAgICApO1xuICAgIGZpbHRlcnNTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmZpbHRlcnM7XG4gICAgcG9seWdvbkZpbHRlcnNTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKHRoaXMuZmlsdGVyc1NlbGVjdG9yLCBmaWx0ZXJzID0+XG4gICAgICBmaWx0ZXJzLmZpbHRlcihmID0+IGYudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24gJiYgZi5lbmFibGVkICE9PSBmYWxzZSlcbiAgICApO1xuICAgIGZlYXR1cmVzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5lZGl0b3IuZmVhdHVyZXM7XG4gICAgc2VsZWN0ZWRGZWF0dXJlU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICAgIGZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMucG9seWdvbkZpbHRlcnNTZWxlY3RvcixcbiAgICAgIHRoaXMuZmVhdHVyZXNTZWxlY3RvcixcbiAgICAgIChwb2x5Z29uRmlsdGVycywgZmVhdHVyZXMpID0+ICh7XG4gICAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5jb25jYXQocG9seWdvbkZpbHRlcnMubWFwKGYgPT4gZi52YWx1ZSkpXG4gICAgICB9KVxuICAgICk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIE5vIG92ZXJsb2FkIG1hdGNoZXMgdGhpcyBjYWxsXG4gICAgc2VsZWN0ZWRQb2x5Z29uSW5kZXhTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yLFxuICAgICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVTZWxlY3RvcixcbiAgICAgIChjb2xsZWN0aW9uLCBzZWxlY3RlZEZlYXR1cmUpID0+XG4gICAgICAgIGNvbGxlY3Rpb24uZmVhdHVyZXMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlPy5pZClcbiAgICApO1xuICAgIHNlbGVjdGVkRmVhdHVyZUluZGV4QXJyYXlTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgKHZhbHVlOiBudW1iZXIpID0+IHZhbHVlLFxuICAgICAgdmFsdWUgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgPCAwID8gW10gOiBbdmFsdWVdO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBnZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5nZW5lcmF0ZU1hcGJveExheWVycyA/PyBnZW5lcmF0ZU1hcGJveExheWVycztcblxuICAgIG1hcGJveExheWVyc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJPcmRlclNlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yLFxuICAgICAgdGhpcy5nZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kU2VsZWN0b3IsXG4gICAgICAobGF5ZXIsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgbGF5ZXJzVG9SZW5kZXIsIGdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QpID0+XG4gICAgICAgIGdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QobGF5ZXIsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgbGF5ZXJzVG9SZW5kZXIpXG4gICAgKTtcblxuICAgIC8vIG1lcmdlIGluIGEgYmFja2dyb3VuZC1jb2xvciBzdHlsZSBpZiB0aGUgYmFzZW1hcCBjaG9pY2UgaXMgTk9fTUFQX0lEXG4gICAgLy8gdXNlZCBieSA8U3R5bGVkTWFwPiBpbmxpbmUgc3R5bGUgcHJvcFxuICAgIG1hcFN0eWxlVHlwZVNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMubWFwU3R5bGUuc3R5bGVUeXBlO1xuICAgIG1hcFN0eWxlQmFja2dyb3VuZENvbG9yU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5tYXBTdHlsZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgZ2xvYmVNb2RlU2VsZWN0b3IgPSBwcm9wcyA9PiBCb29sZWFuKHByb3BzLm1hcFN0YXRlPy5nbG9iZT8uZW5hYmxlZCk7XG4gICAgZ2xvYmVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLm1hcFN0YXRlPy5nbG9iZT8uY29uZmlnPy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgZ2xvYmVTdGFyc1NlbGVjdG9yID0gcHJvcHMgPT4gQm9vbGVhbihwcm9wcy5tYXBTdGF0ZT8uZ2xvYmU/LmNvbmZpZz8uc3RhcnMpO1xuICAgIHN0eWxlU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubWFwU3R5bGVUeXBlU2VsZWN0b3IsXG4gICAgICB0aGlzLm1hcFN0eWxlQmFja2dyb3VuZENvbG9yU2VsZWN0b3IsXG4gICAgICB0aGlzLmdsb2JlTW9kZVNlbGVjdG9yLFxuICAgICAgdGhpcy5nbG9iZUJhY2tncm91bmRDb2xvclNlbGVjdG9yLFxuICAgICAgdGhpcy5nbG9iZVN0YXJzU2VsZWN0b3IsXG4gICAgICAoc3R5bGVUeXBlLCBiYWNrZ3JvdW5kQ29sb3IsIGlzR2xvYmVNb2RlLCBnbG9iZUJhY2tncm91bmRDb2xvciwgZ2xvYmVTdGFycykgPT4gKHtcbiAgICAgICAgLi4uTUFQX1NUWUxFLmNvbnRhaW5lcixcbiAgICAgICAgLi4uKHN0eWxlVHlwZSA9PT0gTk9fTUFQX0lEID8ge2JhY2tncm91bmRDb2xvcjogcmdiVG9IZXgoYmFja2dyb3VuZENvbG9yKX0gOiB7fSksXG4gICAgICAgIC8vIEluIGdsb2JlIG1vZGUgdGhlIGRlY2suZ2wgY2FudmFzIGlzIHRyYW5zcGFyZW50ICh0aGUgZ2xvYmUgVmlldyB1c2VzXG4gICAgICAgIC8vIGBjbGVhckNvbG9yOiBmYWxzZWAgdG8gYXZvaWQgY29ycnVwdGluZyB0aGUgcGlja2luZyBidWZmZXIpLCBzbyB0aGVcbiAgICAgICAgLy8gYmFja2dyb3VuZCBhcm91bmQgdGhlIGdsb2JlIGlzIHBhaW50ZWQgaGVyZSBvbiB0aGUgY29udGFpbmVyIGluc3RlYWQuXG4gICAgICAgIC4uLihpc0dsb2JlTW9kZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZ2xvYmUgYmFja2dyb3VuZCB3aGVuIG5vbmUgaXMgY29uZmlndXJlZC5cbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiByZ2JUb0hleChcbiAgICAgICAgICAgICAgICAoZ2xvYmVCYWNrZ3JvdW5kQ29sb3IgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSB8fFxuICAgICAgICAgICAgICAgICAgKGdldEdsb2JlQ2xlYXJDb2xvcigpLnNsaWNlKDAsIDMpIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSlcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgLy8gT3B0aW9uYWxseSBvdmVybGF5IGEgdGlsZWFibGUgc3Rhci1maWVsZCBwYXR0ZXJuIG9uIHRoZSBiYWNrZ3JvdW5kLlxuICAgICAgICAgICAgICAuLi4oZ2xvYmVTdGFyc1xuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJyR7Z2V0U3RhcnNCYWNrZ3JvdW5kSW1hZ2UoKX0nKWAsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZXBlYXQ6ICdyZXBlYXQnXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLyogY29tcG9uZW50IHByaXZhdGUgZnVuY3Rpb25zICovXG4gICAgX29uQ2xvc2VNYXBQb3BvdmVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25MYXllckNsaWNrKG51bGwpO1xuICAgIH07XG5cbiAgICBfb25MYXllckhvdmVyID0gKF9pZHg6IG51bWJlciwgaW5mbzogUGlja2luZ0luZm88YW55PiB8IG51bGwpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJIb3ZlcihpbmZvLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICB9O1xuXG4gICAgX29uTGF5ZXJTZXREb21haW4gPSAoXG4gICAgICBpZHg6IG51bWJlcixcbiAgICAgIHZhbHVlOiBudW1iZXJbXSB8IHtkb21haW46IFZpc3VhbENoYW5uZWxEb21haW47IGFnZ3JlZ2F0ZWRCaW5zOiBSZWNvcmQ8bnVtYmVyLCBBZ2dyZWdhdGVkQmluPn1cbiAgICApID0+IHtcbiAgICAgIC8vIGRlY2suZ2wgOSBuYXRpdmUgYWdncmVnYXRpb24gbGF5ZXJzIChHcmlkLCBIZXhhZ29uKSBwYXNzXG4gICAgICAvLyB7ZG9tYWluLCBhZ2dyZWdhdGVkQmluc30gdmlhIG91ciBTY2FsZUVuaGFuY2VkKiBvdmVycmlkZXMsXG4gICAgICAvLyB3aGlsZSBDbHVzdGVyTGF5ZXIncyBDUFVBZ2dyZWdhdG9yIGFsc28gcGFzc2VzIHtkb21haW4sIGFnZ3JlZ2F0ZWRCaW5zfS5cbiAgICAgIC8vIFBsYWluIFttaW4sIG1heF0gaXMgYSBmYWxsYmFjayBpZiB0aGUgb3ZlcnJpZGUgaXMgYnlwYXNzZWQuXG4gICAgICBjb25zdCBjb25maWcgPSBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHtjb2xvckRvbWFpbjogdmFsdWUgYXMgVmlzdWFsQ2hhbm5lbERvbWFpbn1cbiAgICAgICAgOiB7Y29sb3JEb21haW46IHZhbHVlLmRvbWFpbiwgYWdncmVnYXRlZEJpbnM6IHZhbHVlLmFnZ3JlZ2F0ZWRCaW5zfTtcblxuICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLnByb3BzLnZpc1N0YXRlLmxheWVyc1tpZHhdO1xuICAgICAgaWYgKCFsYXllcikgcmV0dXJuO1xuXG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5sYXllckNvbmZpZ0NoYW5nZShsYXllciwgY29uZmlnIGFzIFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPik7XG4gICAgfTtcblxuICAgIF9vblJlZHJhd05lZWRlZCA9IChfaWR4OiBudW1iZXIpID0+IHtcbiAgICAgIC8vIHVwZGF0ZU1hcFVwZGF0ZXIgYWx3YXlzIHJldHVybnMgYSBuZXcgc3RhdGUgb2JqZWN0IHJlZmVyZW5jZSwgd2hpY2ggdHJpZ2dlcnMgcmUtcmVuZGVyXG4gICAgICBjb25zdCB7bWFwU3RhdGVBY3Rpb25zLCBpbmRleH0gPSB0aGlzLnByb3BzO1xuICAgICAgbWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcCh7fSwgaW5kZXgpO1xuICAgIH07XG5cbiAgICBfb25GaXRCb3VuZHMgPSAoX2lkeDogbnVtYmVyLCBib3VuZHM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLm1hcFN0YXRlQWN0aW9ucy5maXRCb3VuZHMoYm91bmRzKTtcbiAgICB9O1xuXG4gICAgX29uTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlID0gKGlkeCwgZXZlbnQpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLmxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSh0aGlzLnByb3BzLnZpc1N0YXRlLmxheWVyc1tpZHhdLCBldmVudCk7XG4gICAgfTtcblxuICAgIF9vbldNU0ZlYXR1cmVJbmZvID0gKFxuICAgICAgaWR4OiBudW1iZXIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGZlYXR1cmVJbmZvOiBBcnJheTx7bmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nfT4gfCBzdHJpbmcgfCBudWxsO1xuICAgICAgICBjb29yZGluYXRlPzogW251bWJlciwgbnVtYmVyXSB8IG51bGw7XG4gICAgICB9XG4gICAgKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy53bXNGZWF0dXJlSW5mbyhcbiAgICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZS5sYXllcnNbaWR4XSxcbiAgICAgICAgZGF0YS5mZWF0dXJlSW5mbyxcbiAgICAgICAgZGF0YS5jb29yZGluYXRlXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIgPSBsYXllcklkID0+IHtcbiAgICAgIGNvbnN0IHtpbmRleDogbWFwSW5kZXggPSAwLCB2aXNTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgIHZpc1N0YXRlQWN0aW9ucy50b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCk7XG4gICAgfTtcblxuICAgIF9vbk1hcGJveFN0eWxlVXBkYXRlID0gdXBkYXRlID0+IHtcbiAgICAgIC8vIGZvcmNlIHJlZnJlc2ggbWFwYm94Z2wgbGF5ZXJzXG4gICAgICB0aGlzLnByZXZpb3VzTGF5ZXJzID0ge307XG4gICAgICB0aGlzLl91cGRhdGVNYXBib3hMYXllcnMoKTtcblxuICAgICAgdGhpcy5fdXBkYXRlQXR0cmlidXRpb24odXBkYXRlKTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uTWFwU3R5bGVMb2FkZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbk1hcFN0eWxlTG9hZGVkKHRoaXMuX21hcCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF91cGRhdGVBdHRyaWJ1dGlvbiA9ICh1cGRhdGU/OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuXG4gICAgICBsZXQgc3R5bGVPYmogPSB1cGRhdGU/LnN0eWxlIHx8IG51bGw7XG4gICAgICBpZiAoIXN0eWxlT2JqICYmIHRoaXMuX21hcCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJhd1N0eWxlID0gdGhpcy5fbWFwLmlzU3R5bGVMb2FkZWQ/LigpID8gdGhpcy5fbWFwLmdldFN0eWxlPy4oKSA6IG51bGw7XG4gICAgICAgICAgaWYgKHJhd1N0eWxlKSB7XG4gICAgICAgICAgICBzdHlsZU9iaiA9IHtzdHlsZXNoZWV0OiByYXdTdHlsZX07XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBtYXAgc3R5bGUgbm90IHJlYWR5IHlldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB1c2VzTWFwYm94ID0gc3R5bGVPYmogPyBpc1N0eWxlVXNpbmdNYXBib3hUaWxlcyhzdHlsZU9iaikgOiBmYWxzZTtcbiAgICAgIGNvbnN0IHVzZXNPc20gPSBzdHlsZU9iaiA/IGlzU3R5bGVVc2luZ09wZW5TdHJlZXRNYXBUaWxlcyhzdHlsZU9iaikgOiBmYWxzZTtcbiAgICAgIGNvbnN0IGJhc2VtYXBBdHRyaWJ1dGlvbnMgPSBnZXRCYXNlTWFwQXR0cmlidXRpb25zKHRoaXMuX21hcCk7XG5cbiAgICAgIC8vIGlmIE9TTSB0aWxlcyBhcmUgZGV0ZWN0ZWQgaW4gdGhlIHJhdyBzdHlsZSBidXQgbm8gc291cmNlLWxldmVsIGF0dHJpYnV0aW9uXG4gICAgICAvLyBzdHJpbmcgd2FzIGNvbGxlY3RlZCB5ZXQsIGZvbGQgaW4gdGhlIGNhbm9uaWNhbCBPU00gYXR0cmlidXRpb24gc28gdGhlXG4gICAgICAvLyByZW5kZXIgcGF0aCBzdGF5cyB1bmlmb3JtIChubyBzZXBhcmF0ZSBoYXJkY29kZWQgZmFsbGJhY2sgbGluaylcbiAgICAgIGlmICh1c2VzT3NtICYmICFiYXNlbWFwQXR0cmlidXRpb25zLmxlbmd0aCkge1xuICAgICAgICBiYXNlbWFwQXR0cmlidXRpb25zLnB1c2goT1NNX0FUVFJJQlVUSU9OX0hUTUwpO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciB0byBzaG93IHRoZSBcIkJhc2VtYXAgYnk6IE1hcExpYnJlL01hcGJveFwiIGxvZ286XG4gICAgICAvLyAgLSBBbHdheXMgc2hvdyBmb3IgYnVpbHQtaW4ga2VwbGVyLmdsIHN0eWxlcyAoZGFyay1tYXR0ZXIsIHBvc2l0cm9uLCDigKYpOlxuICAgICAgLy8gICAgdGhleSBkb24ndCBjYXJyeSB0aGVpciBvd24gXCJwcm92aWRlclwiIGJyYW5kaW5nIHNvIHRoZSByZW5kZXJpbmctZW5naW5lXG4gICAgICAvLyAgICBsb2dvIGFjdHMgYXMgdGhlIGJhc2VtYXAgY3JlZGl0LlxuICAgICAgLy8gIC0gQWx3YXlzIHNob3cgd2hlbiBNYXBib3ggdGlsZXMgYXJlIGluIHVzZSAobWFwYm94Oi8vIHNvdXJjZXMpOiBNYXBib3hcbiAgICAgIC8vICAgIGF0dHJpYnV0aW9uIGlzIHJlcXVpcmVkLlxuICAgICAgLy8gIC0gSGlkZSBmb3IgY3VzdG9tIHVzZXItYWRkZWQgc3R5bGVzIChjdXN0b20gPT09ICdMT0NBTCcgfCAnTUFOQUdFRCcpOlxuICAgICAgLy8gICAgdGhvc2Ugc3R5bGVzIHN1cHBseSB0aGVpciBvd24gVGlsZUpTT04gYXR0cmlidXRpb24gKGUuZy4gT3BlbkZyZWVNYXApLFxuICAgICAgLy8gICAgc28gc2hvd2luZyBcIkJhc2VtYXAgYnk6IE1hcExpYnJlXCIgd291bGQgYmUgbWlzbGVhZGluZy5cbiAgICAgIGNvbnN0IHN0eWxlVHlwZSA9IHRoaXMucHJvcHMubWFwU3R5bGU/LnN0eWxlVHlwZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdHlsZSA9IHRoaXMucHJvcHMubWFwU3R5bGU/Lm1hcFN0eWxlcz8uW3N0eWxlVHlwZV07XG4gICAgICBjb25zdCBpc1VzZXJDdXN0b21TdHlsZSA9IEJvb2xlYW4oY3VycmVudFN0eWxlPy5jdXN0b20pO1xuICAgICAgY29uc3Qgc2hvd0Jhc2VNYXBMaWJMb2dvID0gdXNlc01hcGJveCB8fCAhaXNVc2VyQ3VzdG9tU3R5bGU7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzaG93QmFzZU1hcExpYkxvZ28sXG4gICAgICAgIGJhc2VtYXBBdHRyaWJ1dGlvbnNcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGb3Igbm9uLU1hcGJveCBzdHlsZXMsIFRpbGVKU09OIGF0dHJpYnV0aW9uIHJlc29sdmVzIGFzeW5jaHJvbm91c2x5XG4gICAgICAvLyBhZnRlciBzdHlsZS5sb2FkLiAgU3RhcnQgYSBsaXN0ZW5lciBzbyB3ZSBjYW4gdXBkYXRlIGJhc2VtYXBBdHRyaWJ1dGlvbnNcbiAgICAgIC8vIGFzIHNvb24gYXMgdGhlIHNvdXJjZXMgcmVzb2x2ZSB0aGVpciBUaWxlSlNPTi5cbiAgICAgIGlmICghdXNlc01hcGJveCkge1xuICAgICAgICB0aGlzLl9jb2xsZWN0QmFzZW1hcEF0dHJpYnV0aW9ucygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXIgJiYgdGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ3NvdXJjZWRhdGEnLCB0aGlzLl9iYXNlbWFwU291cmNlRGF0YUxpc3RlbmVyKTtcbiAgICAgICAgdGhpcy5fYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lciA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fYmFzZW1hcElkbGVMaXN0ZW5lciAmJiB0aGlzLl9tYXApIHtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignaWRsZScsIHRoaXMuX2Jhc2VtYXBJZGxlTGlzdGVuZXIpO1xuICAgICAgICB0aGlzLl9iYXNlbWFwSWRsZUxpc3RlbmVyID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX2NvbGxlY3RCYXNlbWFwQXR0cmlidXRpb25zID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9tYXApIHJldHVybjtcbiAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgbGV0IGF0dGVtcHRzID0gMDtcbiAgICAgIC8vIENhcCByZXRyaWVzIHNvIGEgc3R5bGUgdGhhdCBuZXZlciB5aWVsZHMgYXR0cmlidXRpb25zIGRvZXNuJ3QgbGVhdmUgYVxuICAgICAgLy8gcGVybWFuZW50IHNvdXJjZWRhdGEgbGlzdGVuZXIgYXR0YWNoZWQuXG4gICAgICBjb25zdCBNQVhfQVRURU1QVFMgPSA1MDtcblxuICAgICAgY29uc3QgdHJ5Q29sbGVjdCA9ICgpID0+IHtcbiAgICAgICAgLy8gVGlsZUpTT04gcmVzb2x2ZXMgYXN5bmNocm9ub3VzbHk7IHJlLWNvbGxlY3QgYXR0cmlidXRpb25zIG9uY2UgYVxuICAgICAgICAvLyBzb3VyY2UncyBtZXRhZGF0YSBpcyBhdmFpbGFibGUgc28gY3VzdG9tIGJhc2VtYXAgYXR0cmlidXRpb25zIGFyZSBub3QgbG9zdC5cbiAgICAgICAgY29uc3QgYmFzZW1hcEF0dHJpYnV0aW9ucyA9IGdldEJhc2VNYXBBdHRyaWJ1dGlvbnModGhpcy5fbWFwKTtcbiAgICAgICAgaWYgKGJhc2VtYXBBdHRyaWJ1dGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICAgICAgLy8gRG9uJ3QgY2hhbmdlIHNob3dCYXNlTWFwTGliTG9nbyBoZXJlIOKAlCBpdCBpcyBmaXhlZCBhdCBzdHlsZS5sb2FkIHRpbWVcbiAgICAgICAgICAvLyBiYXNlZCBvbiB3aGV0aGVyIHRoZSBzdHlsZSB1c2VzIE1hcGJveCB0aWxlcy4gIFdlIG9ubHkgdXBkYXRlIHRoZVxuICAgICAgICAgIC8vIHByb3ZpZGVyIGF0dHJpYnV0aW9ucyBjb2xsZWN0ZWQgZnJvbSB0aGUgcmVzb2x2ZWQgVGlsZUpTT04uXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YmFzZW1hcEF0dHJpYnV0aW9uc30pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU291cmNlRGF0YSA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgLy8gQ29sbGVjdCBhdHRyaWJ1dGlvbnMgd2hlbjpcbiAgICAgICAgLy8gICAoYSkgYSBzb3VyY2UncyBUaWxlSlNPTiBoYXMganVzdCBiZWVuIGZldGNoZWQgKHNvdXJjZURhdGFUeXBlID09PSAnbWV0YWRhdGEnKSDigJRcbiAgICAgICAgLy8gICAgICAgdGhpcyBpcyB0aGUgZWFybGllc3QgbW9tZW50IHRoZSBgYXR0cmlidXRpb25gIHByb3BlcnR5IGlzIGF2YWlsYWJsZSBvbiB0aGVcbiAgICAgICAgLy8gICAgICAgcmVzb2x2ZWQgc291cmNlIG9iamVjdCwgb3JcbiAgICAgICAgLy8gICAoYikgYSBzb3VyY2UgaXMgZnVsbHkgbG9hZGVkIChpc1NvdXJjZUxvYWRlZCA9PT0gdHJ1ZSkg4oCUIGZhbGxiYWNrIGZvciByYXN0ZXJcbiAgICAgICAgLy8gICAgICAgc291cmNlcyBvciBzdHlsZXMgdGhhdCBzZXQgYXR0cmlidXRpb24gaW5saW5lIHJhdGhlciB0aGFuIHZpYSBUaWxlSlNPTi5cbiAgICAgICAgaWYgKCFlPy5pc1NvdXJjZUxvYWRlZCAmJiBlPy5zb3VyY2VEYXRhVHlwZSAhPT0gJ21ldGFkYXRhJykgcmV0dXJuO1xuICAgICAgICBhdHRlbXB0cysrO1xuICAgICAgICB0cnlDb2xsZWN0KCk7XG4gICAgICAgIGlmIChhdHRlbXB0cyA+PSBNQVhfQVRURU1QVFMpIHtcbiAgICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gVGhlIGBpZGxlYCBldmVudCBmaXJlcyB3aGVuIHRoZSBtYXAgaGFzIGZpbmlzaGVkIGxvYWRpbmcgYWxsIHBlbmRpbmdcbiAgICAgIC8vIHJlc291cmNlcyAodGlsZXMsIFRpbGVKU09OLCBzcHJpdGVzKS4gQXQgdGhhdCBwb2ludCBhdHRyaWJ1dGlvbnMgZnJvbVxuICAgICAgLy8gYWxsIHNvdXJjZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQsIHNvIHRoaXMgaXMgYSByZWxpYWJsZVxuICAgICAgLy8gb25lLXNob3QgZmFsbGJhY2sgdGhhdCBjYXRjaGVzIGNhc2VzIHdoZXJlIHRoZSBzb3VyY2VkYXRhIG1ldGFkYXRhXG4gICAgICAvLyBldmVudHMgYXJlIG1pc3NlZCBvciB0aGUgc291cmNlIG5ldmVyIHJlYWNoZXMgaXNTb3VyY2VMb2FkZWQuXG4gICAgICBjb25zdCBvbklkbGUgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgICBjb25zdCBiYXNlbWFwQXR0cmlidXRpb25zID0gZ2V0QmFzZU1hcEF0dHJpYnV0aW9ucyh0aGlzLl9tYXApO1xuICAgICAgICBpZiAoYmFzZW1hcEF0dHJpYnV0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtiYXNlbWFwQXR0cmlidXRpb25zfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXIgPSBvblNvdXJjZURhdGE7XG4gICAgICB0aGlzLl9iYXNlbWFwSWRsZUxpc3RlbmVyID0gb25JZGxlO1xuICAgICAgdGhpcy5fbWFwLm9uKCdzb3VyY2VkYXRhJywgb25Tb3VyY2VEYXRhKTtcbiAgICAgIHRoaXMuX21hcC5vbignaWRsZScsIG9uSWRsZSk7XG4gICAgfTtcblxuICAgIF9zZXRNYXBSZWYgPSBtYXBSZWYgPT4ge1xuICAgICAgLy8gSGFuZGxlIGNoYW5nZSBvZiB0aGUgbWFwIGxpYnJhcnlcbiAgICAgIGlmICh0aGlzLl9tYXAgJiYgbWFwUmVmKSB7XG4gICAgICAgIGNvbnN0IG1hcCA9IG1hcFJlZi5nZXRNYXAoKTtcbiAgICAgICAgaWYgKG1hcCAmJiB0aGlzLl9tYXAgIT09IG1hcCkge1xuICAgICAgICAgIHRoaXMuX21hcC5vZmYoTUFQQk9YR0xfU1RZTEVfVVBEQVRFLCB0aGlzLl9vbk1hcGJveFN0eWxlVXBkYXRlKTtcbiAgICAgICAgICB0aGlzLl9tYXAub2ZmKE1BUEJPWEdMX1JFTkRFUiwgdGhpcy5fb25NYXBSZW5kZXIpO1xuICAgICAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgICAgIHRoaXMuX21hcCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLl9tYXAgJiYgbWFwUmVmKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcFJlZi5nZXRNYXAoKTtcbiAgICAgICAgLy8gaSBub3RpY2VkIGluIGNlcnRhaW4gY29udGV4dCB3ZSBkb24ndCBhY2Nlc3MgdGhlIGFjdHVhbCBtYXAgZWxlbWVudFxuICAgICAgICBpZiAoIXRoaXMuX21hcCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBiaW5kIG1hcGJveGdsIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgIHRoaXMuX21hcC5vbihNQVBCT1hHTF9TVFlMRV9VUERBVEUsIHRoaXMuX29uTWFwYm94U3R5bGVVcGRhdGUpO1xuICAgICAgICB0aGlzLl9tYXAub24oTUFQQk9YR0xfUkVOREVSLCB0aGlzLl9vbk1hcFJlbmRlcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmdldE1hcGJveFJlZikge1xuICAgICAgICAvLyBUaGUgcGFyZW50IGNvbXBvbmVudCBjYW4gZ2FpbiBhY2Nlc3MgdG8gb3VyIE1hcGJveEdsTWFwIGJ5XG4gICAgICAgIC8vIHByb3ZpZGluZyB0aGlzIGNhbGxiYWNrLiBOb3RlIHRoYXQgJ21hcGJveCcgd2lsbCBiZSBudWxsIHdoZW4gdGhlXG4gICAgICAgIC8vIHJlZiBpcyB1bnNldCAoZS5nLiB3aGVuIGEgc3BsaXQgbWFwIGlzIGNsb3NlZCkuXG4gICAgICAgIHRoaXMucHJvcHMuZ2V0TWFwYm94UmVmKG1hcFJlZiwgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9vbkRlY2tJbml0aWFsaXplZChkZXZpY2UpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRGVja0luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25EZWNrSW5pdGlhbGl6ZWQodGhpcy5fZGVjaywgZGV2aWNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAxKSBBbGxvdyBlZmZlY3RzIG9ubHkgZm9yIHRoZSBmaXJzdCB2aWV3LlxuICAgICAqIDIpIFByZXZlbnQgZWZmZWN0OnByZVJlbmRlciBjYWxsIHdpdGhvdXQgdmFsaWQgZ2VuZXJhdGVkIHZpZXdwb3J0cy5cbiAgICAgKiBAcGFyYW0gdmlld0luZGV4IFZpZXcgaW5kZXguXG4gICAgICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIGVmZmVjdHMgY2FuIGJlIHVzZWQuXG4gICAgICovXG4gICAgX2lzT0tUb1JlbmRlckVmZmVjdHModmlld0luZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIXZpZXdJbmRleCAmJiBCb29sZWFuKHRoaXMuX2RlY2s/LnZpZXdNYW5hZ2VyPy5fdmlld3BvcnRzPy5sZW5ndGgpO1xuICAgIH1cblxuICAgIF9vbkJlZm9yZVJlbmRlciA9ICgpID0+IHtcbiAgICAgIC8vIG5vLW9wXG4gICAgfTtcblxuICAgIF9hbm5vdGF0aW9uVmlld3BvcnRDYWNoZToge2tleTogc3RyaW5nOyB2aWV3cG9ydDogYW55fSB8IG51bGwgPSBudWxsO1xuXG4gICAgX3dhc0ludGVyYWN0aW5nID0gZmFsc2U7XG5cbiAgICBfZ2V0QW5ub3RhdGlvblZpZXdwb3J0KG1hcFN0YXRlOiBhbnksIGludGVybmFsVmlld1N0YXRlOiBhbnkpIHtcbiAgICAgIGNvbnN0IGxvbmdpdHVkZSA9IGludGVybmFsVmlld1N0YXRlPy5sb25naXR1ZGUgPz8gbWFwU3RhdGUubG9uZ2l0dWRlO1xuICAgICAgY29uc3QgbGF0aXR1ZGUgPSBpbnRlcm5hbFZpZXdTdGF0ZT8ubGF0aXR1ZGUgPz8gbWFwU3RhdGUubGF0aXR1ZGU7XG4gICAgICBjb25zdCB6b29tID0gaW50ZXJuYWxWaWV3U3RhdGU/Lnpvb20gPz8gbWFwU3RhdGUuem9vbTtcbiAgICAgIGNvbnN0IHBpdGNoID0gaW50ZXJuYWxWaWV3U3RhdGU/LnBpdGNoID8/IG1hcFN0YXRlLnBpdGNoID8/IDA7XG4gICAgICBjb25zdCBiZWFyaW5nID0gaW50ZXJuYWxWaWV3U3RhdGU/LmJlYXJpbmcgPz8gbWFwU3RhdGUuYmVhcmluZyA/PyAwO1xuICAgICAgY29uc3Qgd2lkdGggPSBtYXBTdGF0ZS53aWR0aCB8fCAwO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gbWFwU3RhdGUuaGVpZ2h0IHx8IDA7XG4gICAgICBjb25zdCBrZXkgPSBgJHtsb25naXR1ZGV9LCR7bGF0aXR1ZGV9LCR7em9vbX0sJHtwaXRjaH0sJHtiZWFyaW5nfSwke3dpZHRofSwke2hlaWdodH1gO1xuXG4gICAgICBpZiAodGhpcy5fYW5ub3RhdGlvblZpZXdwb3J0Q2FjaGU/LmtleSA9PT0ga2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hbm5vdGF0aW9uVmlld3BvcnRDYWNoZS52aWV3cG9ydDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVyZ2VkU3RhdGUgPSB7Li4ubWFwU3RhdGUsIC4uLmludGVybmFsVmlld1N0YXRlLCB3aWR0aCwgaGVpZ2h0fTtcbiAgICAgIGNvbnN0IHZwID0gZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUobWVyZ2VkU3RhdGUpIGFzIGFueTtcbiAgICAgIGNvbnN0IHZpZXdwb3J0ID0ge1xuICAgICAgICBwcm9qZWN0OiAobG5nTGF0OiBbbnVtYmVyLCBudW1iZXJdKSA9PiB2cC5wcm9qZWN0KGxuZ0xhdCkgYXMgW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgdW5wcm9qZWN0OiAoeHk6IFtudW1iZXIsIG51bWJlcl0pID0+IHZwLnVucHJvamVjdCh4eSkgYXMgW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgbG9uZ2l0dWRlLFxuICAgICAgICBsYXRpdHVkZSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgem9vbVxuICAgICAgfTtcbiAgICAgIHRoaXMuX2Fubm90YXRpb25WaWV3cG9ydENhY2hlID0ge2tleSwgdmlld3BvcnR9O1xuICAgICAgcmV0dXJuIHZpZXdwb3J0O1xuICAgIH1cblxuICAgIF9vbkRlY2tFcnJvciA9IChlcnJvciwgbGF5ZXIpID0+IHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5tZXNzYWdlIHx8ICd1bmtub3duLWVycm9yJztcbiAgICAgIGNvbnN0IGxheWVyTWVzc2FnZSA9IGxheWVyPy5pZCA/IGAgaW4gJHtsYXllci5pZH0gbGF5ZXJgIDogJyc7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2VGdWxsID1cbiAgICAgICAgZXJyb3JNZXNzYWdlID09PSAnV2ViR0wgY29udGV4dCBpcyBsb3N0J1xuICAgICAgICAgID8gJ1lvdXIgR1BVIHdhcyBkaXNjb25uZWN0ZWQuIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3VyIGNvbXB1dGVyIGdvZXMgdG8gc2xlZXAuIEl0IGNhbiBhbHNvIG9jY3VyIGZvciBvdGhlciByZWFzb25zLCBzdWNoIGFzIGlmIHlvdSBhcmUgcnVubmluZyB0b28gbWFueSBHUFUgYXBwbGljYXRpb25zLidcbiAgICAgICAgICA6IGBBbiBlcnJvciBpbiBkZWNrLmdsOiAke2Vycm9yTWVzc2FnZX0ke2xheWVyTWVzc2FnZX0uYDtcblxuICAgICAgLy8gVGhyb3R0bGUgZXJyb3Igbm90aWZpY2F0aW9ucywgYXMgUmVhY3QgZG9lc24ndCBsaWtlIHRvbyBtYW55IHN0YXRlIGNoYW5nZXMgZnJvbSBoZXJlLlxuICAgICAgY29uc3QgbGFzdFNob3duID0gdGhpcy5fZGVja0dMRXJyb3JzRWxhcHNlZFtlcnJvck1lc3NhZ2VGdWxsXTtcbiAgICAgIGlmICghbGFzdFNob3duIHx8IGxhc3RTaG93biA8IERhdGUubm93KCkgLSBUSFJPVFRMRV9OT1RJRklDQVRJT05fVElNRSkge1xuICAgICAgICB0aGlzLl9kZWNrR0xFcnJvcnNFbGFwc2VkW2Vycm9yTWVzc2FnZUZ1bGxdID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAvLyBNYXJrIGxheWVyIGFzIGludmFsaWRcbiAgICAgICAgbGV0IGV4dHJhTGF5ZXJNZXNzYWdlID0gJyc7XG4gICAgICAgIGNvbnN0IHt2aXNTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKGxheWVyKSB7XG4gICAgICAgICAgbGV0IHRvcE1vc3RMYXllciA9IGxheWVyO1xuICAgICAgICAgIHdoaWxlICh0b3BNb3N0TGF5ZXIucGFyZW50KSB7XG4gICAgICAgICAgICB0b3BNb3N0TGF5ZXIgPSB0b3BNb3N0TGF5ZXIucGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodG9wTW9zdExheWVyLnByb3BzPy5pZCkge1xuICAgICAgICAgICAgdmlzU3RhdGVBY3Rpb25zLmxheWVyU2V0SXNWYWxpZCh0b3BNb3N0TGF5ZXIsIGZhbHNlKTtcbiAgICAgICAgICAgIGV4dHJhTGF5ZXJNZXNzYWdlID0gJ1RoZSBsYXllciBoYXMgYmVlbiBkaXNhYmxlZCBhbmQgaGlnaGxpZ2h0ZWQuJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgbmV3IGVycm9yIG5vdGlmaWNhdGlvbiBvciB1cGRhdGUgZXhpc3Rpbmcgb25lIHdpdGggc2FtZSBpZC5cbiAgICAgICAgLy8gVXBkYXRlIGlzIHJlcXVpcmVkIHRvIHByZXNlcnZlIHRoZSBvcmRlciBvZiBub3RpZmljYXRpb25zIGFzIHRoZXkgcHJvYmFibHkgYXJlIGdvaW5nIHRvIFwianVtcFwiIGJhc2VkIG9uIG9yZGVyIG9mIGVycm9ycy5cbiAgICAgICAgY29uc3Qge3VpU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHVpU3RhdGVBY3Rpb25zLmFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgJHtlcnJvck1lc3NhZ2VGdWxsfSAke2V4dHJhTGF5ZXJNZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogZXJyb3JNZXNzYWdlRnVsbCAvLyB0cmVhdCB0aGUgZXJyb3IgbWVzc2FnZSBhcyBpZFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qIGNvbXBvbmVudCByZW5kZXIgZnVuY3Rpb25zICovXG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4gICAgX3JlbmRlck1hcFBvcG92ZXIoKSB7XG4gICAgICAvLyB0aGlzIGNoZWNrIGlzIGZvciBsaW1pdGluZyB0aGUgZGlzcGxheSBvZiB0aGUgYDxNYXBQb3BvdmVyPmAgdG8gdGhlIGA8TWFwQ29udGFpbmVyPmAgdGhlIHVzZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aFxuICAgICAgLy8gdGhlIERlY2tHTCBvbkhvdmVyIGV2ZW50IGhhbmRsZXIgYWRkcyBhIGBtYXBJbmRleGAgcHJvcGVydHkgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBgaG92ZXJJbmZvYCBvYmplY3Qgb2YgYHZpc1N0YXRlYFxuICAgICAgaWYgKHRoaXMucHJvcHMuaW5kZXggIT09IHRoaXMucHJvcHMudmlzU3RhdGUuaG92ZXJJbmZvPy5tYXBJbmRleCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogbW92ZSB0aGlzIGludG8gcmVkdWNlciBzbyBpdCBjYW4gYmUgdGVzdGVkXG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICB2aXNTdGF0ZToge1xuICAgICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgICBjbGlja2VkLFxuICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICBsYXllcnMsXG4gICAgICAgICAgbW91c2VQb3M6IHttb3VzZVBvc2l0aW9uLCBjb29yZGluYXRlLCBwaW5uZWR9XG4gICAgICAgIH1cbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgbGF5ZXJzVG9SZW5kZXIgPSB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIGlmICghbW91c2VQb3NpdGlvbiB8fCAhaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGF5ZXJIb3ZlclByb3AgPSBnZXRMYXllckhvdmVyUHJvcCh7XG4gICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgbGF5ZXJzLFxuICAgICAgICBsYXllcnNUb1JlbmRlcixcbiAgICAgICAgZGF0YXNldHNcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb21wYXJlTW9kZSA9IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnXG4gICAgICAgID8gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuY29tcGFyZU1vZGVcbiAgICAgICAgOiBmYWxzZTtcblxuICAgICAgbGV0IHBpbm5lZFBvc2l0aW9uID0ge3g6IDAsIHk6IDB9O1xuICAgICAgbGV0IGxheWVyUGlubmVkUHJvcDogTGF5ZXJIb3ZlclByb3AgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmIChwaW5uZWQgfHwgY2xpY2tlZCkge1xuICAgICAgICAvLyBwcm9qZWN0IGxuZ2xhdCB0byBzY3JlZW4gc28gdGhhdCB0b29sdGlwIGZvbGxvd3MgdGhlIG9iamVjdCBvbiB6b29tXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUobWFwU3RhdGUpO1xuICAgICAgICBjb25zdCBsbmdMYXQgPSBjbGlja2VkID8gY2xpY2tlZC5jb29yZGluYXRlIDogcGlubmVkLmNvb3JkaW5hdGU7XG4gICAgICAgIHBpbm5lZFBvc2l0aW9uID0gdGhpcy5fZ2V0SG92ZXJYWSh2aWV3cG9ydCwgbG5nTGF0KTtcbiAgICAgICAgbGF5ZXJQaW5uZWRQcm9wID0gZ2V0TGF5ZXJIb3ZlclByb3Aoe1xuICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICBob3ZlckluZm86IGNsaWNrZWQsXG4gICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgIGxheWVyc1RvUmVuZGVyLFxuICAgICAgICAgIGRhdGFzZXRzXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobGF5ZXJIb3ZlclByb3AgJiYgbGF5ZXJQaW5uZWRQcm9wKSB7XG4gICAgICAgICAgbGF5ZXJIb3ZlclByb3AucHJpbWFyeURhdGEgPSBsYXllclBpbm5lZFByb3AuZGF0YTtcbiAgICAgICAgICBsYXllckhvdmVyUHJvcC5jb21wYXJlVHlwZSA9IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmNvbXBhcmVUeXBlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbW1vblByb3AgPSB7XG4gICAgICAgIG9uQ2xvc2U6IHRoaXMuX29uQ2xvc2VNYXBQb3BvdmVyLFxuICAgICAgICB6b29tOiBtYXBTdGF0ZS56b29tLFxuICAgICAgICBjb250YWluZXI6IHRoaXMuX2RlY2sgPyB0aGlzLl9kZWNrLmNhbnZhcyA6IHVuZGVmaW5lZFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEVycm9yQm91bmRhcnk+XG4gICAgICAgICAge2xheWVyUGlubmVkUHJvcCAmJiAoXG4gICAgICAgICAgICA8TWFwUG9wb3ZlclxuICAgICAgICAgICAgICB7Li4ucGlubmVkUG9zaXRpb259XG4gICAgICAgICAgICAgIHsuLi5jb21tb25Qcm9wfVxuICAgICAgICAgICAgICBsYXllckhvdmVyUHJvcD17bGF5ZXJQaW5uZWRQcm9wfVxuICAgICAgICAgICAgICBjb29yZGluYXRlPXtpbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWQgJiYgKHBpbm5lZCB8fCB7fSkuY29vcmRpbmF0ZX1cbiAgICAgICAgICAgICAgZnJvemVuPXt0cnVlfVxuICAgICAgICAgICAgICBpc0Jhc2U9e2NvbXBhcmVNb2RlfVxuICAgICAgICAgICAgICBvblNldEZlYXR1cmVzPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRGZWF0dXJlc31cbiAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRGZWF0dXJlPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEZlYXR1cmV9XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgQXJndW1lbnQgb2YgdHlwZSAnUmVhZG9ubHk8TWFwQ29udGFpbmVyUHJvcHM+JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInXG4gICAgICAgICAgICAgIGZlYXR1cmVDb2xsZWN0aW9uPXt0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2xheWVySG92ZXJQcm9wICYmICghbGF5ZXJQaW5uZWRQcm9wIHx8IGNvbXBhcmVNb2RlKSAmJiAoXG4gICAgICAgICAgICA8TWFwUG9wb3ZlclxuICAgICAgICAgICAgICB4PXttb3VzZVBvc2l0aW9uWzBdfVxuICAgICAgICAgICAgICB5PXttb3VzZVBvc2l0aW9uWzFdfVxuICAgICAgICAgICAgICB7Li4uY29tbW9uUHJvcH1cbiAgICAgICAgICAgICAgbGF5ZXJIb3ZlclByb3A9e2xheWVySG92ZXJQcm9wfVxuICAgICAgICAgICAgICBmcm96ZW49e2ZhbHNlfVxuICAgICAgICAgICAgICBjb29yZGluYXRlPXtpbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWQgJiYgY29vcmRpbmF0ZX1cbiAgICAgICAgICAgICAgb25TZXRGZWF0dXJlcz17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0RmVhdHVyZXN9XG4gICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZT17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0U2VsZWN0ZWRGZWF0dXJlfVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ1JlYWRvbmx5PE1hcENvbnRhaW5lclByb3BzPicgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ25ldmVyJ1xuICAgICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbj17dGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0Vycm9yQm91bmRhcnk+XG4gICAgICApO1xuICAgIH1cblxuICAgIC8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG4gICAgX2dldEhvdmVyWFkodmlld3BvcnQsIGxuZ0xhdCkge1xuICAgICAgY29uc3Qgc2NyZWVuQ29vcmQgPSAhdmlld3BvcnQgfHwgIWxuZ0xhdCA/IG51bGwgOiB2aWV3cG9ydC5wcm9qZWN0KGxuZ0xhdCk7XG4gICAgICByZXR1cm4gc2NyZWVuQ29vcmQgJiYge3g6IHNjcmVlbkNvb3JkWzBdLCB5OiBzY3JlZW5Db29yZFsxXX07XG4gICAgfVxuXG4gICAgX3JlbmRlckRlY2tPdmVybGF5KFxuICAgICAgbGF5ZXJzRm9yRGVjayxcbiAgICAgIG9wdGlvbnM6IHtwcmltYXJ5TWFwOiBib29sZWFuOyBpc0ludGVyYWN0aXZlPzogYm9vbGVhbjsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGV9ID0ge1xuICAgICAgICBwcmltYXJ5TWFwOiBmYWxzZVxuICAgICAgfVxuICAgICkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXBTdHlsZSxcbiAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICB2aXNTdGF0ZUFjdGlvbnMsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgIGRlY2tHbFByb3BzLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgbWFwQ29udHJvbHMsXG4gICAgICAgIGRlY2tSZW5kZXJDYWxsYmFja3MsXG4gICAgICAgIHRoZW1lLFxuICAgICAgICBnZW5lcmF0ZURlY2tHTExheWVycyxcbiAgICAgICAgb25Nb3VzZU1vdmVcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCB7aG92ZXJJbmZvLCBlZGl0b3J9ID0gdmlzU3RhdGU7XG4gICAgICBjb25zdCB7cHJpbWFyeU1hcCwgaXNJbnRlcmFjdGl2ZSwgY2hpbGRyZW59ID0gb3B0aW9ucztcblxuICAgICAgLy8gZGlzYWJsZSBkb3VibGUgY2xpY2sgem9vbSB3aGVuIGVkaXRvciBpcyBpbiBhbnkgZHJhdyBtb2RlXG4gICAgICBjb25zdCB7bWFwRHJhd30gPSBtYXBDb250cm9scztcbiAgICAgIGNvbnN0IHthY3RpdmU6IGVkaXRvck1lbnVBY3RpdmUgPSBmYWxzZX0gPSBtYXBEcmF3IHx8IHt9O1xuICAgICAgY29uc3QgaXNFZGl0b3JEcmF3aW5nTW9kZSA9IEVkaXRvckxheWVyVXRpbHMuaXNEcmF3aW5nQWN0aXZlKGVkaXRvck1lbnVBY3RpdmUsIGVkaXRvci5tb2RlKTtcblxuICAgICAgY29uc3QgaW50ZXJuYWxWaWV3U3RhdGUgPSB0aGlzLmNvbnRleHQ/LmdldEludGVybmFsVmlld1N0YXRlKGluZGV4KTtcbiAgICAgIGNvbnN0IGludGVybmFsTWFwU3RhdGUgPSB7Li4ubWFwU3RhdGUsIC4uLmludGVybmFsVmlld1N0YXRlfTtcbiAgICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUoaW50ZXJuYWxNYXBTdGF0ZSk7XG5cbiAgICAgIGNvbnN0IGVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4ID0gdGhpcy5zZWxlY3RlZFBvbHlnb25JbmRleFNlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgICBjb25zdCB7c2V0RmVhdHVyZXMsIG9uTGF5ZXJDbGljaywgc2V0U2VsZWN0ZWRGZWF0dXJlfSA9IHZpc1N0YXRlQWN0aW9ucztcblxuICAgICAgY29uc3QgZ2VuZXJhdGVEZWNrR0xMYXllcnNNZXRob2QgPSBnZW5lcmF0ZURlY2tHTExheWVycyA/PyBjb21wdXRlRGVja0xheWVycztcblxuICAgICAgY29uc3QgZXh0cmFEZWNrUGFyYW1zOiB7XG4gICAgICAgIGdldFRvb2x0aXA/OiAoaW5mbzogYW55KSA9PiBvYmplY3QgfCBudWxsO1xuICAgICAgICBnZXRDdXJzb3I/OiAoe2lzRHJhZ2dpbmd9OiB7aXNEcmFnZ2luZzogYm9vbGVhbn0pID0+IHN0cmluZztcbiAgICAgIH0gPSB7fTtcbiAgICAgIGlmIChwcmltYXJ5TWFwKSB7XG4gICAgICAgIC8vIE9taXQgaG92ZXIgdXBkYXRlcyB3aGVuIHRoZSBwb2ludGVyIHBvc2l0aW9uIGlzIGludmFsaWQsIGllLiBvdmVyIFVJIG92ZXJsYXlzIG9yXG4gICAgICAgIC8vIG91dHNpZGUgdGhlIG1hcCBjb250YWluZXIuIEluIHRob3NlIGNhc2VzIHgveSBtYXkgYmUgPCAwXG4gICAgICAgIGV4dHJhRGVja1BhcmFtcy5nZXRUb29sdGlwID0gaW5mbyA9PiB7XG4gICAgICAgICAgY29uc3QgeCA9IE51bWJlcihpbmZvPy54KTtcbiAgICAgICAgICBjb25zdCB5ID0gTnVtYmVyKGluZm8/LnkpO1xuICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4oeCkgfHwgTnVtYmVyLmlzTmFOKHkpIHx8IHggPCAwIHx8IHkgPCAwKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgIHJldHVybiBFZGl0b3JMYXllclV0aWxzLmdldFRvb2x0aXAoaW5mbywge1xuICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZXh0cmFEZWNrUGFyYW1zLmdldEN1cnNvciA9ICh7aXNEcmFnZ2luZ306IHtpc0RyYWdnaW5nOiBib29sZWFufSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVkaXRvckN1cnNvciA9IEVkaXRvckxheWVyVXRpbHMuZ2V0Q3Vyc29yKHtcbiAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICBob3ZlckluZm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoZWRpdG9yQ3Vyc29yKSByZXR1cm4gZWRpdG9yQ3Vyc29yO1xuXG4gICAgICAgICAgaWYgKGlzRHJhZ2dpbmcpIHJldHVybiAnZ3JhYmJpbmcnO1xuICAgICAgICAgIGlmIChob3ZlckluZm8/LmxheWVyKSByZXR1cm4gJ3BvaW50ZXInO1xuICAgICAgICAgIHJldHVybiAnZ3JhYic7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVmZmVjdHMgPSB0aGlzLl9pc09LVG9SZW5kZXJFZmZlY3RzKGluZGV4KVxuICAgICAgICA/IGNvbXB1dGVEZWNrRWZmZWN0cyh7dmlzU3RhdGUsIG1hcFN0YXRlLCBpc0V4cG9ydDogdGhpcy5wcm9wcy5pc0V4cG9ydH0pXG4gICAgICAgIDogW107XG5cbiAgICAgIGNvbnN0IGlzR2xvYmVNb2RlID0gbWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQ7XG5cbiAgICAgIC8vIEluIGdsb2JlIG1vZGUgd2l0aCBhIG5vbi1kZWZhdWx0IGJsZW5kIG1vZGUsIGZvcndhcmQgcHJlLWNvbXB1dGVkIGxheWVyXG4gICAgICAvLyByZW5kZXJpbmcgcGFyYW1ldGVycyBpbnRvIG1hcFN0YXRlIHNvIGluZGl2aWR1YWwgbGF5ZXJzIGNhbiBtZXJnZSB0aGVtIGludG9cbiAgICAgIC8vIHRoZWlyIG93biBwYXJhbWV0ZXJzIG9iamVjdHMuIFRoZSBnbG9iYWwgRGVja0dMIHBhcmFtZXRlcnMgY2Fubm90IGJlIHVzZWQgaW5cbiAgICAgIC8vIGdsb2JlIG1vZGUgYmVjYXVzZSB0aGV5IGFyZSBtZXJnZWQgaW50byBnbG9iZSBzeXN0ZW0gbGF5ZXJzIChhdG1vc3BoZXJlLFxuICAgICAgLy8gc3VyZmFjZSwgZXRjLikgYW5kIGFsdGVyIHRoZWlyIGNhcmVmdWxseSB0dW5lZCBibGVuZC9kZXB0aCBzdGF0ZS5cbiAgICAgIC8vICdub3JtYWwnIGlzIG9taXR0ZWQg4oCUIGl0IGlzIHRoZSBXZWJHTCBkZWZhdWx0IGFuZCBpbmplY3RpbmcgaXQgd291bGRcbiAgICAgIC8vIG92ZXJyaWRlIGludGVudGlvbmFsIGJsZW5kOmZhbHNlIHNldHRpbmdzIG9uIGxheWVycyBsaWtlIHRyaXAvc2NlbmVncmFwaC5cbiAgICAgIGNvbnN0IGxheWVyQmxlbmRpbmdQYXJhbXMgPVxuICAgICAgICBpc0dsb2JlTW9kZSAmJiB2aXNTdGF0ZS5sYXllckJsZW5kaW5nICYmIHZpc1N0YXRlLmxheWVyQmxlbmRpbmcgIT09ICdub3JtYWwnXG4gICAgICAgICAgPyBnZXRMYXllckJsZW5kaW5nUGFyYW1ldGVycyh2aXNTdGF0ZS5sYXllckJsZW5kaW5nKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVja0xheWVyc01hcFN0YXRlID0gbGF5ZXJCbGVuZGluZ1BhcmFtc1xuICAgICAgICA/IHsuLi5pbnRlcm5hbE1hcFN0YXRlLCBsYXllclBhcmFtZXRlcnM6IGxheWVyQmxlbmRpbmdQYXJhbXN9XG4gICAgICAgIDogaW50ZXJuYWxNYXBTdGF0ZTtcblxuICAgICAgY29uc3QgZGVja0dsTGF5ZXJzID0gZ2VuZXJhdGVEZWNrR0xMYXllcnNNZXRob2QoXG4gICAgICAgIHtcbiAgICAgICAgICB2aXNTdGF0ZSxcbiAgICAgICAgICBtYXBTdGF0ZTogZGVja0xheWVyc01hcFN0YXRlLFxuICAgICAgICAgIG1hcFN0eWxlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBtYXBJbmRleDogaW5kZXgsXG4gICAgICAgICAgcHJpbWFyeU1hcCxcbiAgICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgICAgbGF5ZXJzRm9yRGVjayxcbiAgICAgICAgICBlZGl0b3JJbmZvOiBwcmltYXJ5TWFwXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgICAgICBvblNldEZlYXR1cmVzOiBzZXRGZWF0dXJlcyxcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgb25BcHBseVBvbHlnb25GaWx0ZXJBbGw6IHZpc1N0YXRlQWN0aW9ucy5zZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzLFxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgQXJndW1lbnQgb2YgdHlwZSAnUmVhZG9ubHk8TWFwQ29udGFpbmVyUHJvcHM+JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInXG4gICAgICAgICAgICAgICAgZmVhdHVyZUNvbGxlY3Rpb246IHRoaXMuZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3Rvcih0aGlzLnByb3BzKSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEZlYXR1cmVJbmRleGVzOiB0aGlzLnNlbGVjdGVkRmVhdHVyZUluZGV4QXJyYXlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgQXJndW1lbnQgb2YgdHlwZSAndW5rbm93bicgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ251bWJlcicuXG4gICAgICAgICAgICAgICAgICBlZGl0b3JGZWF0dXJlU2VsZWN0ZWRJbmRleFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdmlld3BvcnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9uTGF5ZXJIb3ZlcjogdGhpcy5fb25MYXllckhvdmVyLFxuICAgICAgICAgIG9uU2V0TGF5ZXJEb21haW46IHRoaXMuX29uTGF5ZXJTZXREb21haW4sXG4gICAgICAgICAgb25GaWx0ZXJlZEl0ZW1zQ2hhbmdlOiB0aGlzLl9vbkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSxcbiAgICAgICAgICBvbldNU0ZlYXR1cmVJbmZvOiB0aGlzLl9vbldNU0ZlYXR1cmVJbmZvLFxuICAgICAgICAgIG9uUmVkcmF3TmVlZGVkOiB0aGlzLl9vblJlZHJhd05lZWRlZCxcbiAgICAgICAgICBvbkZpdEJvdW5kczogdGhpcy5fb25GaXRCb3VuZHNcbiAgICAgICAgfSxcbiAgICAgICAgZGVja0dsUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIEZvbGxvdyB0aGUgc2VsZWN0ZWQgYmFzZW1hcCBzdHlsZSdzIGxpYnJhcnkgc28gdGhlIGdsb2JlIHVzZXMgdGhlIHNhbWVcbiAgICAgIC8vIHByb3ZpZGVyIGFzIHRoZSBmbGF0IDJEIG1hcCAoQ0FSVE8gdGlsZXMgZm9yIE1hcExpYnJlIHN0eWxlcywgTWFwYm94XG4gICAgICAvLyB0aWxlcyBmb3IgTWFwYm94IHN0eWxlcykuXG4gICAgICBjb25zdCBnbG9iZUJhc2VtYXBQcm92aWRlciA9IHJlc29sdmVHbG9iZUJhc2VtYXBQcm92aWRlcihcbiAgICAgICAgZ2V0QmFzZU1hcExpYnJhcnkobWFwU3R5bGU/Lm1hcFN0eWxlcz8uW21hcFN0eWxlPy5zdHlsZVR5cGVdKSxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4gfHwgJydcbiAgICAgICk7XG5cbiAgICAgIC8vIEluIGdsb2JlIG1vZGUsIHByZXBlbmQgZ2xvYmUgYmFzZSBsYXllcnMgYW5kIGFwcGVuZCB0b3AgbGF5ZXJzXG4gICAgICBjb25zdCBnbG9iZUJhc2VMYXllcnMgPVxuICAgICAgICBpc0dsb2JlTW9kZSAmJiBtYXBTdGF0ZS5nbG9iZVxuICAgICAgICAgID8gZ2V0R2xvYmVCYXNlTGF5ZXJzKHtcbiAgICAgICAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW46IG1hcGJveEFwaUFjY2Vzc1Rva2VuIHx8ICcnLFxuICAgICAgICAgICAgICBnbG9iZTogbWFwU3RhdGUuZ2xvYmUsXG4gICAgICAgICAgICAgIG1hcFN0eWxlVHlwZTogbWFwU3R5bGU/LnN0eWxlVHlwZSxcbiAgICAgICAgICAgICAgYmFzZW1hcFByb3ZpZGVyOiBnbG9iZUJhc2VtYXBQcm92aWRlcixcbiAgICAgICAgICAgICAgLy8gVXNlIHRoZSBsaXZlIChpbnRlcm5hbCkgbGF0aXR1ZGUgc28gdGhlIHRpbGUgTE9EIGNvbXBlbnNhdGlvblxuICAgICAgICAgICAgICAvLyBzdGF5cyBpbiBzeW5jIHdpdGggdGhlIGRlY2sgdmlld3BvcnQgZHVyaW5nIGEgZHJhZzsgbWFwU3RhdGVcbiAgICAgICAgICAgICAgLy8gbGF0aXR1ZGUgbGFncyBiZWhpbmQgd2hpbGUgcm90YXRpbmcuXG4gICAgICAgICAgICAgIGxhdGl0dWRlOiBpbnRlcm5hbE1hcFN0YXRlLmxhdGl0dWRlLFxuICAgICAgICAgICAgICB6b29tOiBpbnRlcm5hbE1hcFN0YXRlLnpvb21cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBbXTtcbiAgICAgIGNvbnN0IGdsb2JlVG9wTGF5ZXJzID1cbiAgICAgICAgaXNHbG9iZU1vZGUgJiYgbWFwU3RhdGUuZ2xvYmVcbiAgICAgICAgICA/IGdldEdsb2JlVG9wTGF5ZXJzKHtnbG9iZTogbWFwU3RhdGUuZ2xvYmUsIHpvb206IGludGVybmFsTWFwU3RhdGUuem9vbX0pXG4gICAgICAgICAgOiBbXTtcbiAgICAgIGNvbnN0IGZpbmFsRGVja0dsTGF5ZXJzID0gaXNHbG9iZU1vZGVcbiAgICAgICAgPyBbLi4uZ2xvYmVCYXNlTGF5ZXJzLCAuLi5kZWNrR2xMYXllcnMsIC4uLmdsb2JlVG9wTGF5ZXJzXVxuICAgICAgICA6IGRlY2tHbExheWVycztcblxuICAgICAgY29uc3Qgdmlld3MgPSBkZWNrR2xQcm9wcz8udmlld3NcbiAgICAgICAgPyBkZWNrR2xQcm9wcz8udmlld3MoKVxuICAgICAgICA6IGlzR2xvYmVNb2RlXG4gICAgICAgID8gbmV3IEtlcGxlckdsb2JlVmlldyh7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiA1LFxuICAgICAgICAgICAgLy8gVGhlIHZpc2libGUgYmFja2dyb3VuZCBhcm91bmQgdGhlIGdsb2JlIGlzIHBhaW50ZWQgYnkgdGhlIG1hcFxuICAgICAgICAgICAgLy8gY29udGFpbmVyJ3MgQ1NTIGJhY2tncm91bmQgKHNlZSBzdHlsZVNlbGVjdG9yKSwgTk9UIGJ5IGEgcGVyLXZpZXdcbiAgICAgICAgICAgIC8vIGNvbG9yIGNsZWFyLiBkZWNrLmdsIGFwcGxpZXMgYSBWaWV3J3MgYGNsZWFyQ29sb3JgIGluICpldmVyeSogcGFzcyxcbiAgICAgICAgICAgIC8vIGluY2x1ZGluZyB0aGUgcGlja2luZyBwYXNzLCBhbmQgaXQgZm9yY2VzIHRoZSBjbGVhcmVkIGFscGhhIHRvIDI1NVxuICAgICAgICAgICAgLy8gKGBjbGVhckNvbG9yWzNdIHx8IDI1NWApLiBJbiB0aGUgcGlja2luZyBidWZmZXIgdGhlIGFscGhhIGJ5dGUgZW5jb2Rlc1xuICAgICAgICAgICAgLy8gdGhlIGxheWVyIGluZGV4LCBzbyBhIDI1NSBjbGVhciBtYWtlcyBkZWNrLmdsIGRlY29kZSBldmVyeSBwaXhlbCBhcyBhXG4gICAgICAgICAgICAvLyBub24tZXhpc3RlbnQgbGF5ZXIgKFwiUGlja2VkIG5vbi1leGlzdGVudCBsYXllci4gSXMgcGlja2luZyBidWZmZXJcbiAgICAgICAgICAgIC8vIGNvcnJ1cHQ/XCIpIG9uIGhvdmVyLiBgY2xlYXJDb2xvcjogZmFsc2VgIHNraXBzIHRoZSBwZXItdmlldyBjb2xvclxuICAgICAgICAgICAgLy8gY2xlYXIgc28gdGhlIHBpY2tpbmcgYnVmZmVyIGtlZXBzIGl0cyAwIGFscGhhOyB0aGUgY2FudmFzIHN0YXlzXG4gICAgICAgICAgICAvLyB0cmFuc3BhcmVudCBhbmQgdGhlIENTUyBiYWNrZ3JvdW5kIHNob3dzIHRocm91Z2guXG4gICAgICAgICAgICBjbGVhcjogdHJ1ZSxcbiAgICAgICAgICAgIGNsZWFyQ29sb3I6IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBuZXcgTWFwVmlldyh7ZmFyWk11bHRpcGxpZXI6IDEuMn0pO1xuXG4gICAgICBsZXQgYWxsRGVja0dsUHJvcHMgPSB7XG4gICAgICAgIC4uLmRlY2tHbFByb3BzLFxuICAgICAgICBwaWNraW5nUmFkaXVzOiBERUZBVUxUX1BJQ0tJTkdfUkFESVVTLFxuICAgICAgICB2aWV3cyxcbiAgICAgICAgbGF5ZXJzOiBmaW5hbERlY2tHbExheWVycyxcbiAgICAgICAgZWZmZWN0cyxcbiAgICAgICAgcGFyYW1ldGVyczogaXNHbG9iZU1vZGUgPyB7Y3VsbDogdHJ1ZX0gOiBnZXRMYXllckJsZW5kaW5nUGFyYW1ldGVycyh2aXNTdGF0ZS5sYXllckJsZW5kaW5nKVxuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVvZiBkZWNrUmVuZGVyQ2FsbGJhY2tzPy5vbkRlY2tSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYWxsRGVja0dsUHJvcHMgPSBkZWNrUmVuZGVyQ2FsbGJhY2tzLm9uRGVja1JlbmRlcihhbGxEZWNrR2xQcm9wcyk7XG4gICAgICAgIGlmICghYWxsRGVja0dsUHJvcHMpIHtcbiAgICAgICAgICAvLyBpZiBvbkRlY2tSZW5kZXIgcmV0dXJucyBudWxsLCBkbyBub3QgcmVuZGVyIGRlY2suZ2xcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgey4uLihpc0ludGVyYWN0aXZlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBvbk1vdXNlTW92ZTogcHJpbWFyeU1hcFxuICAgICAgICAgICAgICAgICAgPyBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZU1vdmU/LihldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25Nb3VzZU1vdmVEZWJvdW5jZWQoZXZlbnQsIHZpZXdwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7c3R5bGU6IHtwb2ludGVyRXZlbnRzOiAnbm9uZSd9fSl9XG4gICAgICAgID5cbiAgICAgICAgICA8RGVja0dMXG4gICAgICAgICAgICBpZD1cImRlZmF1bHQtZGVja2dsLW92ZXJsYXlcIlxuICAgICAgICAgICAgb25Mb2FkPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVja1JlbmRlckNhbGxiYWNrcz8ub25EZWNrTG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGRlY2tSZW5kZXJDYWxsYmFja3Mub25EZWNrTG9hZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgey4uLmFsbERlY2tHbFByb3BzfVxuICAgICAgICAgICAgY29udHJvbGxlcj17XG4gICAgICAgICAgICAgIGlzSW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgZG91YmxlQ2xpY2tab29tOiAhaXNFZGl0b3JEcmF3aW5nTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgZHJhZ1JvdGF0ZTogdGhpcy5wcm9wcy5tYXBTdGF0ZS5kcmFnUm90YXRlLFxuICAgICAgICAgICAgICAgICAgICBtYXhQaXRjaDogdGhpcy5wcm9wcy5tYXBTdGF0ZS5tYXhQaXRjaCA/PyBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLm1heFBpdGNoLFxuICAgICAgICAgICAgICAgICAgICAvLyBJbiBnbG9iZSBtb2RlIGFsbG93IHpvb21pbmcgb3V0IGZ1cnRoZXIgdGhhbiBkZWNrLmdsJ3MgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAvLyBvZiAwIHNvIHRoZSB3aG9sZSBnbG9iZSBjYW4gYmUgcHVsbGVkIGJhY2sgb24gc2NyZWVuLiBTZXQgb24gdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRyb2xsZXIgc28gaXQgc3RheXMgYXV0aG9yaXRhdGl2ZSByZWdhcmRsZXNzIG9mIHRoZSB2aWV3U3RhdGVcbiAgICAgICAgICAgICAgICAgICAgLy8gcm91bmQtdHJpcCB0aHJvdWdoIFJlZHV4L2xvY2FsIGNvbnRleHQuIENhcCB0aGUgbWF4IHpvb20gdG9vIHNvXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBiYXNlbWFwIHRpbGVzIGRvbid0IGJyZWFrIGRvd24gYXQgaGlnaCBnbG9iZSB6b29tLlxuICAgICAgICAgICAgICAgICAgICAuLi4oaXNHbG9iZU1vZGUgPyB7bWluWm9vbTogR0xPQkVfTUlOX1pPT00sIG1heFpvb206IEdMT0JFX01BWF9aT09NfSA6IHt9KVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZpZXdTdGF0ZT17XG4gICAgICAgICAgICAgIGlzR2xvYmVNb2RlXG4gICAgICAgICAgICAgICAgPyB7Li4uaW50ZXJuYWxWaWV3U3RhdGUsIG1pblpvb206IEdMT0JFX01JTl9aT09NLCBtYXhab29tOiBHTE9CRV9NQVhfWk9PTX1cbiAgICAgICAgICAgICAgICA6IGludGVybmFsVmlld1N0YXRlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbkJlZm9yZVJlbmRlcj17dGhpcy5fb25CZWZvcmVSZW5kZXJ9XG4gICAgICAgICAgICBvblZpZXdTdGF0ZUNoYW5nZT17aXNJbnRlcmFjdGl2ZSA/IHRoaXMuX29uVmlld3BvcnRDaGFuZ2UgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICB7Li4uZXh0cmFEZWNrUGFyYW1zfVxuICAgICAgICAgICAgb25Ib3Zlcj17XG4gICAgICAgICAgICAgIGlzSW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgICA/IGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBFZGl0b3JMYXllclV0aWxzLm9uSG92ZXIoZGF0YSwge1xuICAgICAgICAgICAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgIGhvdmVySW5mb1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uTGF5ZXJIb3ZlckRlYm91bmNlZChkYXRhLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZGF0YSwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICBub3JtYWxpemVFdmVudChldmVudC5zcmNFdmVudCwgdmlld3BvcnQpO1xuXG4gICAgICAgICAgICAgIC8vIEhhbmRsZSBiaXRtYXAgbGF5ZXIgYWxpZ25tZW50IG1vZGU6IGlmIGEgYml0bWFwIGxheWVyIGlzIHdhaXRpbmdcbiAgICAgICAgICAgICAgLy8gZm9yIGEgbWFwIGNsaWNrLCByb3V0ZSB0aGUgY2xpY2sgY29vcmRpbmF0ZSB0byBpdFxuICAgICAgICAgICAgICBpZiAoZGF0YS5jb29yZGluYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxpZ25pbmdMYXllciA9IHZpc1N0YXRlLmxheWVycy5maW5kKFxuICAgICAgICAgICAgICAgICAgKGw6IGFueSkgPT4gbC50eXBlID09PSAnYml0bWFwJyAmJiBsLmFsaWduV2FpdGluZ0Zvck1hcCAmJiBsLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChhbGlnbmluZ0xheWVyKSB7XG4gICAgICAgICAgICAgICAgICAoYWxpZ25pbmdMYXllciBhcyBhbnkpLm9uQWxpZ25NYXBDbGljayhkYXRhLmNvb3JkaW5hdGUgYXMgW251bWJlciwgbnVtYmVyXSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9vblJlZHJhd05lZWRlZCgwKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXMgPSBFZGl0b3JMYXllclV0aWxzLm9uQ2xpY2soZGF0YSwgZXZlbnQsIHtcbiAgICAgICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICBvbkxheWVyQ2xpY2ssXG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgICAgICAgICAgIG1hcEluZGV4OiBpbmRleFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKHJlcykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgIHZpc1N0YXRlQWN0aW9ucy5vbkxheWVyQ2xpY2soZGF0YSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25FcnJvcj17dGhpcy5fb25EZWNrRXJyb3J9XG4gICAgICAgICAgICByZWY9e2NvbXAgPT4ge1xuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIGlmIChjb21wICYmIGNvbXAuZGVjayAmJiAhdGhpcy5fZGVjaykge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWNrID0gY29tcC5kZWNrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25EZXZpY2VJbml0aWFsaXplZD17ZGV2aWNlID0+IHRoaXMuX29uRGVja0luaXRpYWxpemVkKGRldmljZSl9XG4gICAgICAgICAgICBvbkFmdGVyUmVuZGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVja1JlbmRlckNhbGxiYWNrcz8ub25EZWNrQWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkZWNrUmVuZGVyQ2FsbGJhY2tzLm9uRGVja0FmdGVyUmVuZGVyKGFsbERlY2tHbFByb3BzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGFueUFjdGl2ZUxheWVyTG9hZGluZyA9IGFyZUFueURlY2tMYXllcnNMb2FkaW5nKGFsbERlY2tHbFByb3BzLmxheWVycyk7XG4gICAgICAgICAgICAgIGlmIChhbnlBY3RpdmVMYXllckxvYWRpbmcgIT09IHRoaXMuYW55QWN0aXZlTGF5ZXJMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25MYXllckxvYWRpbmdTdGF0ZUNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYW55QWN0aXZlTGF5ZXJMb2FkaW5nID0gYW55QWN0aXZlTGF5ZXJMb2FkaW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICA8L0RlY2tHTD5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIF91cGRhdGVNYXBib3hMYXllcnMoKSB7XG4gICAgICBjb25zdCBtYXBib3hMYXllcnMgPSB0aGlzLm1hcGJveExheWVyc1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgaWYgKCFPYmplY3Qua2V5cyhtYXBib3hMYXllcnMpLmxlbmd0aCAmJiAhT2JqZWN0LmtleXModGhpcy5wcmV2aW91c0xheWVycykubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlTWFwYm94TGF5ZXJzKHRoaXMuX21hcCwgbWFwYm94TGF5ZXJzLCB0aGlzLnByZXZpb3VzTGF5ZXJzKTtcblxuICAgICAgdGhpcy5wcmV2aW91c0xheWVycyA9IG1hcGJveExheWVycztcbiAgICB9XG5cbiAgICBfcmVuZGVyTWFwYm94T3ZlcmxheXMoKSB7XG4gICAgICBpZiAodGhpcy5fbWFwICYmIHRoaXMuX21hcC5pc1N0eWxlTG9hZGVkKCkpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlTWFwYm94TGF5ZXJzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIF9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgY29uc3Qgdmlld1N0YXRlID0gdGhpcy5jb250ZXh0Py5nZXRJbnRlcm5hbFZpZXdTdGF0ZSh0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgIG9uVmlld1BvcnRDaGFuZ2UoXG4gICAgICAgIHZpZXdTdGF0ZSxcbiAgICAgICAgdGhpcy5wcm9wcy5tYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwLFxuICAgICAgICB0aGlzLnByb3BzLm9uVmlld1N0YXRlQ2hhbmdlLFxuICAgICAgICB0aGlzLnByb3BzLnByaW1hcnksXG4gICAgICAgIHRoaXMucHJvcHMuaW5kZXhcbiAgICAgICk7XG4gICAgfSwgREVCT1VOQ0VfVklFV1BPUlRfUFJPUEFHQVRFKTtcblxuICAgIF9vblZpZXdwb3J0Q2hhbmdlID0gdmlld3BvcnQgPT4ge1xuICAgICAgY29uc3Qge3ZpZXdTdGF0ZSwgaW50ZXJhY3Rpb25TdGF0ZX0gPSB2aWV3cG9ydDtcbiAgICAgIGlmICh0aGlzLnByb3BzLmlzRXhwb3J0KSB7XG4gICAgICAgIC8vIEltYWdlIGV4cG9ydCBtYXAgc2hvdWxkbid0IGJlIGludGVyYWN0aXZlIChvdGhlcndpc2UgdGhpcyBjYWxsYmFjayBjYW5cbiAgICAgICAgLy8gbGVhZCB0byBpbmFkdmVydGVudCBjaGFuZ2VzIHRvIHRoZSBzdGF0ZSBvZiB0aGUgbWFpbiBtYXApXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtzZXRJbnRlcm5hbFZpZXdTdGF0ZX0gPSB0aGlzLmNvbnRleHQ7XG5cbiAgICAgIC8vIEZsYXQgbWFwICgyRC8zRCk6IGtlZXAgdGhlIG9yaWdpbmFsLCBhbHdheXMtc3luY2hyb25vdXMgYmVoYXZpb3IuIFRoZVxuICAgICAgLy8gaW50ZXJhY3Rpb24tYXdhcmUgdGltaW5nIGJlbG93IGV4aXN0cyBwdXJlbHkgdG8gZml4IGdsb2JlLXNwZWNpZmljXG4gICAgICAvLyBjb250cm9sbGVkLXZpZXdTdGF0ZSwgc28gaXQgbXVzdCBub3QgY2hhbmdlIHRoZSBtYWluIDJEIGxvZ2ljLlxuICAgICAgaWYgKCF0aGlzLnByb3BzLm1hcFN0YXRlPy5nbG9iZT8uZW5hYmxlZCkge1xuICAgICAgICBzZXRJbnRlcm5hbFZpZXdTdGF0ZSh2aWV3U3RhdGUsIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgICB0aGlzLl93YXNJbnRlcmFjdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNVc2VySW50ZXJhY3Rpb24gPVxuICAgICAgICBpbnRlcmFjdGlvblN0YXRlICYmXG4gICAgICAgIChpbnRlcmFjdGlvblN0YXRlLmlzWm9vbWluZyB8fFxuICAgICAgICAgIGludGVyYWN0aW9uU3RhdGUuaXNQYW5uaW5nIHx8XG4gICAgICAgICAgaW50ZXJhY3Rpb25TdGF0ZS5pc1JvdGF0aW5nIHx8XG4gICAgICAgICAgaW50ZXJhY3Rpb25TdGF0ZS5pc0RyYWdnaW5nIHx8XG4gICAgICAgICAgaW50ZXJhY3Rpb25TdGF0ZS5pblRyYW5zaXRpb24pO1xuICAgICAgLy8gVGhlIGVtaXQgdGhhdCBlbmRzIGEgZ2VzdHVyZSAocGFuZW5kL3JvdGF0ZUVuZCwgb3IgYSBmbGluZyB0cmFuc2l0aW9uXG4gICAgICAvLyBlbmRpbmcpIGFycml2ZXMgd2l0aCBhbGwgaW50ZXJhY3Rpb24gZmxhZ3MgZmFsc2UuIElmIHdlIGRlZmVyIGl0LCB0aGVcbiAgICAgIC8vIGNvbnRyb2xsZWQgYHZpZXdTdGF0ZWAgZmVkIGJhY2sgdG8gZGVjayBsYWdzIGEgZnJhbWUgYmVoaW5kIHRoZVxuICAgICAgLy8gY29udHJvbGxlcidzIGNvbW1pdHRlZCBzdGF0ZSBhbmQgZGVjayByZS1zZWVkcyBmcm9tIHRoZSBzdGFsZSB2YWx1ZSxcbiAgICAgIC8vIG1ha2luZyB0aGUgZ2xvYmUgdmlzaWJseSBcImp1bXAgYmFja1wiIHRvIHdoZXJlIHRoZSBkcmFnIHdhcyByZWxlYXNlZCAtXG4gICAgICAvLyBtb3N0IG5vdGljZWFibGUgb24gYSB0aHJvdy9mbGluZyByZWxlYXNlLiBUcmVhdCB0aGUgZmlyc3QgYWxsLWZhbHNlIGVtaXRcbiAgICAgIC8vIHJpZ2h0IGFmdGVyIGFuIGFjdGl2ZSBnZXN0dXJlIGFzIHBhcnQgb2YgdGhhdCBnZXN0dXJlIGFuZCBhcHBseSBpdFxuICAgICAgLy8gc3luY2hyb25vdXNseSB0b28uXG4gICAgICBjb25zdCBpc0ludGVyYWN0aW9uU2V0dGxlID0gIWlzVXNlckludGVyYWN0aW9uICYmIHRoaXMuX3dhc0ludGVyYWN0aW5nO1xuICAgICAgdGhpcy5fd2FzSW50ZXJhY3RpbmcgPSBCb29sZWFuKGlzVXNlckludGVyYWN0aW9uKTtcbiAgICAgIGlmIChpc1VzZXJJbnRlcmFjdGlvbiB8fCBpc0ludGVyYWN0aW9uU2V0dGxlKSB7XG4gICAgICAgIC8vIEZvciBpbnRlcmFjdGl2ZSBnZXN0dXJlcyAocGFuL3pvb20vcm90YXRlKSBhbmQgdGhlaXIgZW5kLW9mLWdlc3R1cmVcbiAgICAgICAgLy8gc2V0dGxlLCB1cGRhdGUgc3luY2hyb25vdXNseSBzbyB0aGUgY29udHJvbGxlZCBgdmlld1N0YXRlYCBzdGF5cyBpblxuICAgICAgICAvLyBsb2Nrc3RlcCB3aXRoIHRoZSBjb250cm9sbGVyIGFuZCB0aGVyZSdzIG5vIHN0YWxlIHJlLXNlZWQuXG4gICAgICAgIHNldEludGVybmFsVmlld1N0YXRlKHZpZXdTdGF0ZSwgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZWNrLmdsIGNhbiBmaXJlIG9uVmlld1N0YXRlQ2hhbmdlIHN5bmNocm9ub3VzbHkgZHVyaW5nIGl0cyBvd24gcmVuZGVyXG4gICAgICAgIC8vIChlLmcuIHdoZW4gc3dpdGNoaW5nIHZpZXcgdHlwZXMgbGlrZSBNYXBWaWV3IC0+IEdsb2JlVmlldykuIFVwZGF0aW5nIFJlYWN0XG4gICAgICAgIC8vIHN0YXRlIGR1cmluZyByZW5kZXIgdGhyb3dzIGEgd2FybmluZywgc28gZGVmZXIgbm9uLWludGVyYWN0aXZlIHVwZGF0ZXMuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHNldEludGVybmFsVmlld1N0YXRlKHZpZXdTdGF0ZSwgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfVxuICAgICAgdGhpcy5fb25WaWV3cG9ydENoYW5nZVByb3BhZ2F0ZURlYm91bmNlZCgpO1xuICAgIH07XG5cbiAgICBfb25MYXllckhvdmVyRGVib3VuY2VkID0gZGVib3VuY2UoKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVySG92ZXIoZGF0YSwgaW5kZXgpO1xuICAgIH0sIERFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFKTtcblxuICAgIF9vbk1vdXNlTW92ZURlYm91bmNlZCA9IGRlYm91bmNlKChldmVudCwgdmlld3BvcnQpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLm9uTW91c2VNb3ZlKG5vcm1hbGl6ZUV2ZW50KGV2ZW50LCB2aWV3cG9ydCkpO1xuICAgIH0sIERFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFKTtcblxuICAgIF9vbkxheWVyTG9hZGluZ1N0YXRlQ2hhbmdlID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgLy8gdHJpZ2dlciBsb2FkaW5nIGluZGljYXRvciB1cGRhdGUgd2l0aG91dCBhbnkgY2hhbmdlIHRvIHVwZGF0ZSBVSVxuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0TG9hZGluZ0luZGljYXRvcih7Y2hhbmdlOiAwfSk7XG4gICAgfSwgREVCT1VOQ0VfTE9BRElOR19TVEFURV9QUk9QQUdBVEUpO1xuXG4gICAgX2hhbmRsZVRvZ2dsZUxheWVyVmlzaWJpbGl0eSA9IChsYXllcjogTGF5ZXIpID0+IHtcbiAgICAgIGNvbnN0IHt2aXNTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgIHZpc1N0YXRlQWN0aW9ucy5sYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogIWxheWVyLmNvbmZpZy5pc1Zpc2libGV9KTtcbiAgICB9O1xuXG4gICAgX3RvZ2dsZU1hcENvbnRyb2wgPSBwYW5lbElkID0+IHtcbiAgICAgIGNvbnN0IHtpbmRleCwgdWlTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcblxuICAgICAgdWlTdGF0ZUFjdGlvbnMudG9nZ2xlTWFwQ29udHJvbChwYW5lbElkLCBOdW1iZXIoaW5kZXgpKTtcbiAgICB9O1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuICAgIF9yZW5kZXJNYXAoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZpc1N0YXRlLFxuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgbWFwU3R5bGUsXG4gICAgICAgIG1hcFN0YXRlQWN0aW9ucyxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIC8vIG1hcGJveEFwaVVybCxcbiAgICAgICAgbWFwQ29udHJvbHMsXG4gICAgICAgIGlzRXhwb3J0LFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIHVpU3RhdGVBY3Rpb25zLFxuICAgICAgICB2aXNTdGF0ZUFjdGlvbnMsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBwcmltYXJ5LFxuICAgICAgICBib3R0b21NYXBDb250YWluZXJQcm9wcyxcbiAgICAgICAgdG9wTWFwQ29udGFpbmVyUHJvcHMsXG4gICAgICAgIHRoZW1lLFxuICAgICAgICBkYXRhc2V0QXR0cmlidXRpb25zID0gW10sXG4gICAgICAgIGF0dHJpYnV0aW9uTG9nb3MgPSBbXSxcbiAgICAgICAgY29udGFpbmVySWQgPSAwLFxuICAgICAgICBpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlLFxuICAgICAgICBhY3RpdmVTaWRlUGFuZWwsXG4gICAgICAgIHNpZGVQYW5lbFdpZHRoXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3Qge2xheWVycywgZGF0YXNldHMsIGVkaXRvciwgaW50ZXJhY3Rpb25Db25maWcsIGxheWVyT3JkZXJ9ID0gdmlzU3RhdGU7XG5cbiAgICAgIGNvbnN0IGxheWVyc1RvUmVuZGVyID0gdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbGF5ZXJzRm9yRGVjayA9IHRoaXMubGF5ZXJzRm9yRGVja1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgICAvLyBDdXJyZW50IHN0eWxlIGNhbiBiZSBhIGN1c3RvbSBzdHlsZSwgZnJvbSB3aGljaCB3ZSBwdWxsIHRoZSBtYXBib3ggQVBJIGFjY2Nlc3MgdG9rZW5cbiAgICAgIGNvbnN0IGN1cnJlbnRTdHlsZSA9IG1hcFN0eWxlLm1hcFN0eWxlcz8uW21hcFN0eWxlLnN0eWxlVHlwZV07XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeU5hbWUgPSBnZXRCYXNlTWFwTGlicmFyeShjdXJyZW50U3R5bGUpO1xuICAgICAgY29uc3QgYmFzZU1hcExpYnJhcnlDb25maWcgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmJhc2VNYXBMaWJyYXJ5Q29uZmlnW2Jhc2VNYXBMaWJyYXJ5TmFtZV07XG5cbiAgICAgIC8vIFNlbGVjdCB0aGUgY29ycmVjdCBNYXAgYWRhcHRlciBiYXNlZCBvbiB0aGUgYWN0aXZlIGJhc2UgbWFwIGxpYnJhcnkuXG4gICAgICAvLyBVc2luZyB0aGUgbmF0aXZlIGFkYXB0ZXIgZm9yIGVhY2ggbGlicmFyeSBhdm9pZHMgVHJhbnNmb3JtIEFQSVxuICAgICAgLy8gaW5jb21wYXRpYmlsaXRpZXMgKGUuZy4gbWFwYm94LWxlZ2FjeSdzIGNsb25lVHJhbnNmb3JtIHdpdGggTWFwTGlicmUgdjUpLlxuICAgICAgY29uc3QgUmVzb2x2ZWRNYXBDb21wb25lbnQgPVxuICAgICAgICB0aGlzLnByb3BzLk1hcENvbXBvbmVudCA/P1xuICAgICAgICAoYmFzZU1hcExpYnJhcnlOYW1lID09PSBNQVBfTElCX09QVElPTlMuTUFQQk9YID8gTWFwYm94TGVnYWN5TWFwIDogTWFwbGlicmVNYXApO1xuXG4gICAgICBjb25zdCB1c2VNYXBib3hBZGFwdGVyID0gUmVzb2x2ZWRNYXBDb21wb25lbnQgPT09IE1hcGJveExlZ2FjeU1hcDtcblxuICAgICAgY29uc3QgaW50ZXJuYWxWaWV3U3RhdGUgPSB0aGlzLmNvbnRleHQ/LmdldEludGVybmFsVmlld1N0YXRlKGluZGV4KTtcbiAgICAgIGNvbnN0IGNvbmZpZ01heFBpdGNoID0gbWFwU3RhdGUubWF4UGl0Y2ggPz8gZ2V0QXBwbGljYXRpb25Db25maWcoKS5tYXhQaXRjaDtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZU1heFBpdGNoID0gdXNlTWFwYm94QWRhcHRlclxuICAgICAgICA/IE1hdGgubWluKGNvbmZpZ01heFBpdGNoLCBNQVBCT1hfTUFYX1BJVENIKVxuICAgICAgICA6IGNvbmZpZ01heFBpdGNoO1xuICAgICAgY29uc3QgbWFwUHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICAgIC4uLmludGVybmFsVmlld1N0YXRlLFxuICAgICAgICBtYXhQaXRjaDogZWZmZWN0aXZlTWF4UGl0Y2gsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogdGhpcy5wcm9wcy5pc0V4cG9ydCA/PyBmYWxzZSxcbiAgICAgICAgbWFwYm94QWNjZXNzVG9rZW46IGN1cnJlbnRTdHlsZT8uYWNjZXNzVG9rZW4gfHwgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIC8vIGJhc2VBcGlVcmw6IG1hcGJveEFwaVVybCxcbiAgICAgICAgdHJhbnNmb3JtUmVxdWVzdDpcbiAgICAgICAgICB0aGlzLnByb3BzLnRyYW5zZm9ybVJlcXVlc3QgfHxcbiAgICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0KGN1cnJlbnRTdHlsZT8uYWNjZXNzVG9rZW4gfHwgbWFwYm94QXBpQWNjZXNzVG9rZW4pXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5SVExUZXh0UGx1Z2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWFwUHJvcHMuUlRMVGV4dFBsdWdpbiA9IHRoaXMucHJvcHMuUlRMVGV4dFBsdWdpbjtcbiAgICAgIH1cblxuICAgICAgaWYgKHVzZU1hcGJveEFkYXB0ZXIpIHtcbiAgICAgICAgY29uc3QgbWFwYm94Q29uZmlnID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5iYXNlTWFwTGlicmFyeUNvbmZpZ1tNQVBfTElCX09QVElPTlMuTUFQQk9YXTtcbiAgICAgICAgbWFwUHJvcHMubWFwTGliID0gbWFwYm94Q29uZmlnLmdldE1hcExpYigpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNHZW9jb2RlckxheWVyID0gQm9vbGVhbihsYXllcnMuZmluZChsID0+IGwuaWQgPT09IEdFT0NPREVSX0xBWUVSX0lEKSk7XG4gICAgICBjb25zdCBpc1NwbGl0ID0gQm9vbGVhbihtYXBTdGF0ZS5pc1NwbGl0KTtcblxuICAgICAgY29uc3QgZGVjayA9IHRoaXMuX3JlbmRlckRlY2tPdmVybGF5KGxheWVyc0ZvckRlY2ssIHtcbiAgICAgICAgcHJpbWFyeU1hcDogdHJ1ZSxcbiAgICAgICAgaXNJbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgY2hpbGRyZW46IChcbiAgICAgICAgICA8UmVzb2x2ZWRNYXBDb21wb25lbnRcbiAgICAgICAgICAgIGtleT17YGJvdHRvbS0ke2Jhc2VNYXBMaWJyYXJ5TmFtZX1gfVxuICAgICAgICAgICAgey4uLm1hcFByb3BzfVxuICAgICAgICAgICAgbWFwU3R5bGU9e1xuICAgICAgICAgICAgICBtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZFxuICAgICAgICAgICAgICAgID8gRU1QVFlfTUFQQk9YX1NUWUxFXG4gICAgICAgICAgICAgICAgOiBtYXBTdHlsZS5ib3R0b21NYXBTdHlsZSA/PyBFTVBUWV9NQVBCT1hfU1RZTEVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHsuLi5ib3R0b21NYXBDb250YWluZXJQcm9wc31cbiAgICAgICAgICAgIHJlZj17dGhpcy5fc2V0TWFwUmVmfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkZWNrKSB7XG4gICAgICAgIC8vIGRlY2tPdmVybGF5IGNhbiBiZSBudWxsIGlmIG9uRGVja1JlbmRlciByZXR1cm5zIG51bGxcbiAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdG8gcmVuZGVyIHRoZSBtYXBcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICAvLyBJbiBzcGxpdCAoZHVhbCkgdmlldyBtb2RlLCBvbmx5IHJlbmRlciB0aGUgbWFwIGNvbnRyb2wgYnV0dG9ucyBvbiB0aGVcbiAgICAgIC8vIHJpZ2h0LXNpZGUgbWFwIChwcmltYXJ5ID09PSB0cnVlLCBpLmUuIGluZGV4ID09PSAxKS4gT3RoZXJ3aXNlIHRoZSBzYW1lXG4gICAgICAvLyBidXR0b25zIGFyZSBkdXBsaWNhdGVkIG9uIGJvdGggbWFwcyBhbmQgYW55IG9wZW5lZCBtZW51IGFwcGVhcnMgbWlycm9yZWQuXG4gICAgICBjb25zdCBzaG93TWFwQ29udHJvbCA9ICFpc1NwbGl0IHx8IEJvb2xlYW4ocHJpbWFyeSk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtzaG93TWFwQ29udHJvbCAmJiAoXG4gICAgICAgICAgICA8TWFwQ29udHJvbFxuICAgICAgICAgICAgICBtYXBTdGF0ZT17bWFwU3RhdGV9XG4gICAgICAgICAgICAgIG1hcFN0YXRlQWN0aW9ucz17bWFwU3RhdGVBY3Rpb25zfVxuICAgICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXM9e0xPQ0FMRV9DT0RFU19BUlJBWX1cbiAgICAgICAgICAgICAgZHJhZ1JvdGF0ZT17bWFwU3RhdGUuZHJhZ1JvdGF0ZX1cbiAgICAgICAgICAgICAgaXNTcGxpdD17aXNTcGxpdH1cbiAgICAgICAgICAgICAgcHJpbWFyeT17Qm9vbGVhbihwcmltYXJ5KX1cbiAgICAgICAgICAgICAgaXNFeHBvcnQ9e2lzRXhwb3J0fVxuICAgICAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICAgICAgbGF5ZXJPcmRlcj17bGF5ZXJPcmRlcn1cbiAgICAgICAgICAgICAgbGF5ZXJzVG9SZW5kZXI9e2xheWVyc1RvUmVuZGVyfVxuICAgICAgICAgICAgICBtYXBJbmRleD17aW5kZXggfHwgMH1cbiAgICAgICAgICAgICAgbWFwQ29udHJvbHM9e21hcENvbnRyb2xzfVxuICAgICAgICAgICAgICByZWFkT25seT17dGhpcy5wcm9wcy5yZWFkT25seX1cbiAgICAgICAgICAgICAgc2NhbGU9e21hcFN0YXRlLnNjYWxlIHx8IDF9XG4gICAgICAgICAgICAgIGxvZ29Db21wb25lbnQ9e3RoaXMucHJvcHMubG9nb0NvbXBvbmVudH1cbiAgICAgICAgICAgICAgdG9wPXtcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZy5nZW9jb2RlciAmJiBpbnRlcmFjdGlvbkNvbmZpZy5nZW9jb2Rlci5lbmFibGVkXG4gICAgICAgICAgICAgICAgICA/IHRoZW1lLm1hcENvbnRyb2xUb3BcbiAgICAgICAgICAgICAgICAgIDogMFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVkaXRvcj17ZWRpdG9yfVxuICAgICAgICAgICAgICBsb2NhbGU9e2xvY2FsZX1cbiAgICAgICAgICAgICAgb25Ub2dnbGVQZXJzcGVjdGl2ZT17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVBlcnNwZWN0aXZlfVxuICAgICAgICAgICAgICBvblNldE1hcFZpZXdNb2RlPXttYXBTdGF0ZUFjdGlvbnMuc2V0TWFwVmlld01vZGV9XG4gICAgICAgICAgICAgIG1hcFZpZXdNb2RlPXttYXBTdGF0ZS5tYXBWaWV3TW9kZX1cbiAgICAgICAgICAgICAgb25Ub2dnbGVTcGxpdE1hcD17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVNwbGl0TWFwfVxuICAgICAgICAgICAgICBvbk1hcFRvZ2dsZUxheWVyPXt0aGlzLl9oYW5kbGVNYXBUb2dnbGVMYXllcn1cbiAgICAgICAgICAgICAgb25Ub2dnbGVNYXBDb250cm9sPXt0aGlzLl90b2dnbGVNYXBDb250cm9sfVxuICAgICAgICAgICAgICBvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnQ9e21hcFN0YXRlQWN0aW9ucy50b2dnbGVTcGxpdE1hcFZpZXdwb3J0fVxuICAgICAgICAgICAgICBvblNldEVkaXRvck1vZGU9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JNb2RlfVxuICAgICAgICAgICAgICBvblNldExvY2FsZT17dWlTdGF0ZUFjdGlvbnMuc2V0TG9jYWxlfVxuICAgICAgICAgICAgICBvblRvZ2dsZUVkaXRvclZpc2liaWxpdHk9e3Zpc1N0YXRlQWN0aW9ucy50b2dnbGVFZGl0b3JWaXNpYmlsaXR5fVxuICAgICAgICAgICAgICBvbkxheWVyVmlzQ29uZmlnQ2hhbmdlPXt2aXNTdGF0ZUFjdGlvbnMubGF5ZXJWaXNDb25maWdDaGFuZ2V9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5PXt0aGlzLl9oYW5kbGVUb2dnbGVMYXllclZpc2liaWxpdHl9XG4gICAgICAgICAgICAgIG1hcEhlaWdodD17bWFwU3RhdGUuaGVpZ2h0fVxuICAgICAgICAgICAgICBzZXRNYXBDb250cm9sU2V0dGluZ3M9e3VpU3RhdGVBY3Rpb25zLnNldE1hcENvbnRyb2xTZXR0aW5nc31cbiAgICAgICAgICAgICAgYWN0aXZlU2lkZVBhbmVsPXthY3RpdmVTaWRlUGFuZWx9XG4gICAgICAgICAgICAgIHNwbGl0TWFwcz17dGhpcy5wcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHN9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlTGF5ZXJGb3JNYXA9e3Zpc1N0YXRlQWN0aW9ucy50b2dnbGVMYXllckZvck1hcH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7aXNTcGxpdFNlbGVjdG9yKHRoaXMucHJvcHMpICYmIDxEcm9wcGFibGUgY29udGFpbmVySWQ9e2NvbnRhaW5lcklkfSAvPn1cblxuICAgICAgICAgIHtkZWNrfVxuICAgICAgICAgIHt0aGlzLl9yZW5kZXJNYXBib3hPdmVybGF5cygpfVxuICAgICAgICAgIDxFZGl0b3JcbiAgICAgICAgICAgIGluZGV4PXtpbmRleCB8fCAwfVxuICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgICBmaWx0ZXJzPXt0aGlzLnBvbHlnb25GaWx0ZXJzU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICAgIG9uRGVsZXRlRmVhdHVyZT17dmlzU3RhdGVBY3Rpb25zLmRlbGV0ZUZlYXR1cmV9XG4gICAgICAgICAgICBvblNlbGVjdD17dmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkRmVhdHVyZX1cbiAgICAgICAgICAgIG9uVG9nZ2xlUG9seWdvbkZpbHRlcj17dmlzU3RhdGVBY3Rpb25zLnNldFBvbHlnb25GaWx0ZXJMYXllcn1cbiAgICAgICAgICAgIG9uU2V0RWRpdG9yTW9kZT17dmlzU3RhdGVBY3Rpb25zLnNldEVkaXRvck1vZGV9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnYWxsJyxcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGVkaXRvci52aXNpYmxlID8gJ2Jsb2NrJyA6ICdub25lJ1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxBbm5vdGF0aW9uT3ZlcmxheVxuICAgICAgICAgICAgYW5ub3RhdGlvbnM9e3Zpc1N0YXRlLmFubm90YXRpb25zfVxuICAgICAgICAgICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ9e3Zpc1N0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkfVxuICAgICAgICAgICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ9e3Zpc1N0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0fVxuICAgICAgICAgICAgaXNBbm5vdGF0aW9uTW9kZT17Qm9vbGVhbihtYXBDb250cm9scz8uYW5ub3RhdGlvbj8uYWN0aXZlKX1cbiAgICAgICAgICAgIG1hcEluZGV4PXtpbmRleCB8fCAwfVxuICAgICAgICAgICAgdmlld3BvcnQ9e3RoaXMuX2dldEFubm90YXRpb25WaWV3cG9ydChtYXBTdGF0ZSwgaW50ZXJuYWxWaWV3U3RhdGUpfVxuICAgICAgICAgICAgaXNHbG9iZUVuYWJsZWQ9e0Jvb2xlYW4obWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpfVxuICAgICAgICAgICAgdXBkYXRlQW5ub3RhdGlvbj17dmlzU3RhdGVBY3Rpb25zLnVwZGF0ZUFubm90YXRpb259XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEFubm90YXRpb249e3Zpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEFubm90YXRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICB7bWFwU3R5bGUudG9wTWFwU3R5bGUgJiYgIW1hcFN0YXRlLmdsb2JlPy5lbmFibGVkID8gKFxuICAgICAgICAgICAgPFJlc29sdmVkTWFwQ29tcG9uZW50XG4gICAgICAgICAgICAgIGtleT17YHRvcC0ke2Jhc2VNYXBMaWJyYXJ5TmFtZX1gfVxuICAgICAgICAgICAgICB2aWV3U3RhdGU9e2ludGVybmFsVmlld1N0YXRlfVxuICAgICAgICAgICAgICBtYXhQaXRjaD17ZWZmZWN0aXZlTWF4UGl0Y2h9XG4gICAgICAgICAgICAgIG1hcFN0eWxlPXttYXBTdHlsZS50b3BNYXBTdHlsZX1cbiAgICAgICAgICAgICAgc3R5bGU9e01BUF9TVFlMRS50b3B9XG4gICAgICAgICAgICAgIG1hcGJveEFjY2Vzc1Rva2VuPXttYXBQcm9wcy5tYXBib3hBY2Nlc3NUb2tlbn1cbiAgICAgICAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD17bWFwUHJvcHMudHJhbnNmb3JtUmVxdWVzdH1cbiAgICAgICAgICAgICAgey4uLihtYXBQcm9wcy5SVExUZXh0UGx1Z2luICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHtSVExUZXh0UGx1Z2luOiBtYXBQcm9wcy5SVExUZXh0UGx1Z2lufVxuICAgICAgICAgICAgICAgIDoge30pfVxuICAgICAgICAgICAgICB7Li4uKHVzZU1hcGJveEFkYXB0ZXJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgbWFwTGliOlxuICAgICAgICAgICAgICAgICAgICAgIGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbXG4gICAgICAgICAgICAgICAgICAgICAgICBNQVBfTElCX09QVElPTlMuTUFQQk9YXG4gICAgICAgICAgICAgICAgICAgICAgXS5nZXRNYXBMaWIoKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pfVxuICAgICAgICAgICAgICB7Li4udG9wTWFwQ29udGFpbmVyUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAge2hhc0dlb2NvZGVyTGF5ZXJcbiAgICAgICAgICAgID8gdGhpcy5fcmVuZGVyRGVja092ZXJsYXkoXG4gICAgICAgICAgICAgICAge1tHRU9DT0RFUl9MQVlFUl9JRF06IGhhc0dlb2NvZGVyTGF5ZXJ9LFxuICAgICAgICAgICAgICAgIHtwcmltYXJ5TWFwOiBmYWxzZSwgaXNJbnRlcmFjdGl2ZTogZmFsc2V9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICB7dGhpcy5fcmVuZGVyTWFwUG9wb3ZlcigpfVxuICAgICAgICAgIHshaXNFeHBvcnQgJiYgcHJpbWFyeSAhPT0gaXNTcGxpdCA/IChcbiAgICAgICAgICAgIDxMb2FkaW5nSW5kaWNhdG9yXG4gICAgICAgICAgICAgIGlzVmlzaWJsZT17Qm9vbGVhbihpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlIHx8IHRoaXMuYW55QWN0aXZlTGF5ZXJMb2FkaW5nKX1cbiAgICAgICAgICAgICAgYWN0aXZlU2lkZVBhbmVsPXtCb29sZWFuKGFjdGl2ZVNpZGVQYW5lbCl9XG4gICAgICAgICAgICAgIHNpZGVQYW5lbFdpZHRoPXtzaWRlUGFuZWxXaWR0aH1cbiAgICAgICAgICAgICAgaGFzQXR0cmlidXRpb25Mb2dvcz17YXR0cmlidXRpb25Mb2dvcy5sZW5ndGggPiAwfVxuICAgICAgICAgICAgICBoYXNNYXBTY2FsZT17Z2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVNYXBTY2FsZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3RoaXMucHJvcHMucHJpbWFyeSA/IChcbiAgICAgICAgICAgIDxBdHRyaWJ1dGlvblxuICAgICAgICAgICAgICBzaG93QmFzZU1hcExpYkxvZ289e3RoaXMuc3RhdGUuc2hvd0Jhc2VNYXBMaWJMb2dvfVxuICAgICAgICAgICAgICBiYXNlbWFwQXR0cmlidXRpb25zPXt0aGlzLnN0YXRlLmJhc2VtYXBBdHRyaWJ1dGlvbnN9XG4gICAgICAgICAgICAgIGRhdGFzZXRBdHRyaWJ1dGlvbnM9e2RhdGFzZXRBdHRyaWJ1dGlvbnN9XG4gICAgICAgICAgICAgIGJhc2VNYXBMaWJyYXJ5Q29uZmlnPXtiYXNlTWFwTGlicmFyeUNvbmZpZ31cbiAgICAgICAgICAgICAgZ2xvYmVBdHRyaWJ1dGlvbnM9e2dldEdsb2JlQmFzZW1hcEF0dHJpYnV0aW9ucyh7XG4gICAgICAgICAgICAgICAgZ2xvYmU6IG1hcFN0YXRlLmdsb2JlLFxuICAgICAgICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgIG1hcFN0eWxlVHlwZTogbWFwU3R5bGU/LnN0eWxlVHlwZSxcbiAgICAgICAgICAgICAgICBiYXNlbWFwUHJvdmlkZXI6IHJlc29sdmVHbG9iZUJhc2VtYXBQcm92aWRlcihcbiAgICAgICAgICAgICAgICAgIGJhc2VNYXBMaWJyYXJ5TmFtZSxcbiAgICAgICAgICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3RoaXMucHJvcHMucHJpbWFyeSA/IChcbiAgICAgICAgICAgIDxBdHRyaWJ1dGlvbkxvZ29zXG4gICAgICAgICAgICAgIGxvZ29zPXthdHRyaWJ1dGlvbkxvZ29zfVxuICAgICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e0Jvb2xlYW4oYWN0aXZlU2lkZVBhbmVsKX1cbiAgICAgICAgICAgICAgc2lkZVBhbmVsV2lkdGg9e3NpZGVQYW5lbFdpZHRofVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7IWlzRXhwb3J0ICYmIGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlTWFwU2NhbGUgPyAoXG4gICAgICAgICAgICA8U3R5bGVkTWFwU2NhbGVDb250YWluZXJcbiAgICAgICAgICAgICAgJGxlZnQ9e1xuICAgICAgICAgICAgICAgIHByaW1hcnkgJiYgYWN0aXZlU2lkZVBhbmVsXG4gICAgICAgICAgICAgICAgICA/IChzaWRlUGFuZWxXaWR0aCB8fCAwKSArICh0aGVtZT8uc2lkZVBhbmVsPy5tYXJnaW4/LmxlZnQgPz8gOSlcbiAgICAgICAgICAgICAgICAgIDogdGhlbWU/LnNpZGVQYW5lbD8ubWFyZ2luPy5sZWZ0ID8/IDlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAkYm90dG9tT2Zmc2V0PXtwcmltYXJ5ICYmIGF0dHJpYnV0aW9uTG9nb3MubGVuZ3RoID4gMCA/IDI0IDogMH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPE1hcFNjYWxlIG1hcFN0YXRlPXttYXBTdGF0ZX0gbWFwSW5kZXg9e2luZGV4ID8/IDB9IC8+XG4gICAgICAgICAgICA8L1N0eWxlZE1hcFNjYWxlQ29udGFpbmVyPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge3Zpc1N0YXRlLCBtYXBTdHlsZX0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgbWFwQ29udGVudCA9IHRoaXMuX3JlbmRlck1hcCgpO1xuICAgICAgaWYgKCFtYXBDb250ZW50KSB7XG4gICAgICAgIC8vIG1hcENvbnRlbnQgY2FuIGJlIG51bGwgaWYgb25EZWNrUmVuZGVyIHJldHVybnMgbnVsbFxuICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byByZW5kZXIgdGhlIG1hcFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gbWFwU3R5bGUubWFwU3R5bGVzPy5bbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5TmFtZSA9IGdldEJhc2VNYXBMaWJyYXJ5KGN1cnJlbnRTdHlsZSk7XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeUNvbmZpZyA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbYmFzZU1hcExpYnJhcnlOYW1lXTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZE1hcFxuICAgICAgICAgIHJlZj17dGhpcy5fcmVmfVxuICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxlU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgb25Db250ZXh0TWVudT17ZXZlbnQgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKX1cbiAgICAgICAgICAkbWl4QmxlbmRNb2RlPXt2aXNTdGF0ZS5vdmVybGF5QmxlbmRpbmd9XG4gICAgICAgICAgJG1hcExpYkNzc0NsYXNzPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJDc3NDbGFzc31cbiAgICAgICAgPlxuICAgICAgICAgIHttYXBDb250ZW50fVxuICAgICAgICA8L1N0eWxlZE1hcD5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpdGhUaGVtZShNYXBDb250YWluZXIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztB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
1303
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkNvbXBvbmVudCIsImNyZWF0ZVJlZiIsInN0eWxlZCIsIndpdGhUaGVtZSIsIk1hcCIsIk1hcGJveExlZ2FjeU1hcCIsIk1hcGxpYnJlTWFwIiwiTWFwVmlldyIsIkRlY2tHTCIsImNyZWF0ZVNlbGVjdG9yIiwidXNlRHJvcHBhYmxlIiwiZGVib3VuY2UiLCJNYXBQb3BvdmVyRmFjdG9yeSIsIk1hcENvbnRyb2xGYWN0b3J5IiwiTWFwU2NhbGVGYWN0b3J5IiwiU3R5bGVkTWFwQ29udGFpbmVyIiwiQXR0cmlidXRpb24iLCJBdHRyaWJ1dGlvbkxvZ29zIiwicmVuZGVyQmFzZW1hcEF0dHJpYnV0aW9uIiwiZGVkdXBlQmFzZW1hcEF0dHJpYnV0aW9ucyIsIkVkaXRvckZhY3RvcnkiLCJGaWx0ZXJGZWF0dXJlQmFkZ2VzIiwiQW5ub3RhdGlvbk92ZXJsYXkiLCJnZW5lcmF0ZU1hcGJveExheWVycyIsInVwZGF0ZU1hcGJveExheWVycyIsIkVkaXRvckxheWVyVXRpbHMiLCJlcnJvck5vdGlmaWNhdGlvbiIsImlzU3R5bGVVc2luZ01hcGJveFRpbGVzIiwiaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzIiwiZ2V0QmFzZU1hcEF0dHJpYnV0aW9ucyIsImdldEJhc2VNYXBMaWJyYXJ5IiwidHJhbnNmb3JtUmVxdWVzdCIsIm9ic2VydmVEaW1lbnNpb25zIiwidW5vYnNlcnZlRGltZW5zaW9ucyIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJvblZpZXdQb3J0Q2hhbmdlIiwiZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUiLCJub3JtYWxpemVFdmVudCIsInJnYlRvSGV4IiwiY29tcHV0ZURlY2tFZmZlY3RzIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJnZXRMYXllckJsZW5kaW5nUGFyYW1ldGVycyIsInBhdGNoRGVja1JlbmRlcmVyRm9yUG9zdFByb2Nlc3NpbmciLCJGSUxURVJfVFlQRVMiLCJHRU9DT0RFUl9MQVlFUl9JRCIsIlRIUk9UVExFX05PVElGSUNBVElPTl9USU1FIiwiREVGQVVMVF9QSUNLSU5HX1JBRElVUyIsIk5PX01BUF9JRCIsIkVNUFRZX01BUEJPWF9TVFlMRSIsIk1BUEJPWF9NQVhfUElUQ0giLCJNQVBfTElCX09QVElPTlMiLCJHTE9CRV9NSU5fWk9PTSIsIkdMT0JFX01BWF9aT09NIiwiZ2V0R2xvYmVCYXNlTGF5ZXJzIiwiZ2V0R2xvYmVUb3BMYXllcnMiLCJnZXRHbG9iZUNsZWFyQ29sb3IiLCJnZXRHbG9iZUJhc2VtYXBBdHRyaWJ1dGlvbnMiLCJyZXNvbHZlR2xvYmVCYXNlbWFwUHJvdmlkZXIiLCJnZXRTdGFyc0JhY2tncm91bmRJbWFnZSIsIktlcGxlckdsb2JlVmlldyIsIkRST1BQQUJMRV9NQVBfQ09OVEFJTkVSX1RZUEUiLCJNYXBWaWV3U3RhdGVDb250ZXh0IiwiRXJyb3JCb3VuZGFyeSIsIkxPQ0FMRV9DT0RFUyIsImFyZUFueURlY2tMYXllcnNMb2FkaW5nIiwiY29tcHV0ZURlY2tMYXllcnMiLCJnZXRMYXllckhvdmVyUHJvcCIsInByZXBhcmVMYXllcnNGb3JEZWNrIiwicHJlcGFyZUxheWVyc1RvUmVuZGVyIiwiTG9hZGluZ0luZGljYXRvciIsIkRFQk9VTkNFX1ZJRVdQT1JUX1BST1BBR0FURSIsIkRFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFIiwiREVCT1VOQ0VfTE9BRElOR19TVEFURV9QUk9QQUdBVEUiLCJNQVBfU1RZTEUiLCJjb250YWluZXIiLCJkaXNwbGF5IiwicG9zaXRpb24iLCJ3aWR0aCIsImhlaWdodCIsInRvcCIsInBvaW50ZXJFdmVudHMiLCJMT0NBTEVfQ09ERVNfQVJSQVkiLCJPYmplY3QiLCJrZXlzIiwiU3R5bGVkTWFwIiwiX3JlZiIsIl9yZWYkJG1peEJsZW5kTW9kZSIsIiRtaXhCbGVuZE1vZGUiLCIkbWFwTGliQ3NzQ2xhc3MiLCJjb25jYXQiLCJNQVBCT1hHTF9TVFlMRV9VUERBVEUiLCJNQVBCT1hHTF9SRU5ERVIiLCJPU01fQVRUUklCVVRJT05fSFRNTCIsIlN0eWxlZERyb3BwYWJsZSIsImRpdiIsIl90ZW1wbGF0ZU9iamVjdCIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCJwcm9wcyIsIiRpc092ZXIiLCJ0aGVtZSIsImRuZE92ZXJCYWNrZ3JvdW5kQ29sb3IiLCJTdHlsZWRNYXBTY2FsZUNvbnRhaW5lciIsIl90ZW1wbGF0ZU9iamVjdDIiLCJzaWRlUGFuZWwiLCJtYXJnaW4iLCJsZWZ0IiwiJGJvdHRvbU9mZnNldCIsIiRsZWZ0IiwiaXNTcGxpdFNlbGVjdG9yIiwidmlzU3RhdGUiLCJzcGxpdE1hcHMiLCJsZW5ndGgiLCJEcm9wcGFibGUiLCJfcmVmMiIsImNvbnRhaW5lcklkIiwiX3VzZURyb3BwYWJsZSIsImlkIiwiZGF0YSIsInR5cGUiLCJpbmRleCIsImRpc2FibGVkIiwiaXNPdmVyIiwic2V0Tm9kZVJlZiIsImNyZWF0ZUVsZW1lbnQiLCJyZWYiLCJNYXBDb250YWluZXJGYWN0b3J5IiwiZGVwcyIsIk1hcFBvcG92ZXIiLCJNYXBDb250cm9sIiwiRWRpdG9yIiwiTWFwU2NhbGUiLCJNYXBDb250YWluZXIiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfY2FsbFN1cGVyIiwiX2RlZmluZVByb3BlcnR5Iiwic2hvd0Jhc2VNYXBMaWJMb2dvIiwiYmFzZW1hcEF0dHJpYnV0aW9ucyIsIm9uTWFwUmVuZGVyIiwiX21hcCIsImRpbWVuc2lvbnMiLCJfdGhpcyRwcm9wcyIsInByaW1hcnkiLCJtYXBTdGF0ZUFjdGlvbnMiLCJ1cGRhdGVNYXAiLCJsYXllcnMiLCJsYXllckRhdGEiLCJzcGxpdE1hcFNlbGVjdG9yIiwic3BsaXRNYXBJbmRleFNlbGVjdG9yIiwibGF5ZXJPcmRlciIsImxheWVyc1NlbGVjdG9yIiwibGF5ZXJEYXRhU2VsZWN0b3IiLCJtYXBMYXllcnNTZWxlY3RvciIsImZpbHRlcnMiLCJmaWx0ZXJzU2VsZWN0b3IiLCJmaWx0ZXIiLCJmIiwicG9seWdvbiIsImVuYWJsZWQiLCJlZGl0b3IiLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInBvbHlnb25GaWx0ZXJzU2VsZWN0b3IiLCJmZWF0dXJlc1NlbGVjdG9yIiwicG9seWdvbkZpbHRlcnMiLCJtYXAiLCJ2YWx1ZSIsImZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IiLCJzZWxlY3RlZEZlYXR1cmVTZWxlY3RvciIsImNvbGxlY3Rpb24iLCJmaW5kSW5kZXgiLCJfcHJvcHMkZ2VuZXJhdGVNYXBib3giLCJsYXllck9yZGVyU2VsZWN0b3IiLCJsYXllcnNUb1JlbmRlclNlbGVjdG9yIiwiZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yIiwibGF5ZXIiLCJsYXllcnNUb1JlbmRlciIsImdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QiLCJtYXBTdHlsZSIsInN0eWxlVHlwZSIsImJhY2tncm91bmRDb2xvciIsIl9wcm9wcyRtYXBTdGF0ZSIsIkJvb2xlYW4iLCJtYXBTdGF0ZSIsImdsb2JlIiwiX3Byb3BzJG1hcFN0YXRlMiIsImNvbmZpZyIsIl9wcm9wcyRtYXBTdGF0ZTMiLCJzdGFycyIsIm1hcFN0eWxlVHlwZVNlbGVjdG9yIiwibWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciIsImdsb2JlTW9kZVNlbGVjdG9yIiwiZ2xvYmVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciIsImdsb2JlU3RhcnNTZWxlY3RvciIsImlzR2xvYmVNb2RlIiwiZ2xvYmVCYWNrZ3JvdW5kQ29sb3IiLCJnbG9iZVN0YXJzIiwiX29iamVjdFNwcmVhZCIsInNsaWNlIiwiYmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZFJlcGVhdCIsInZpc1N0YXRlQWN0aW9ucyIsIm9uTGF5ZXJDbGljayIsIl9pZHgiLCJpbmZvIiwib25MYXllckhvdmVyIiwiaWR4IiwiQXJyYXkiLCJpc0FycmF5IiwiY29sb3JEb21haW4iLCJkb21haW4iLCJhZ2dyZWdhdGVkQmlucyIsImxheWVyQ29uZmlnQ2hhbmdlIiwiX3RoaXMkcHJvcHMyIiwiYm91bmRzIiwiZml0Qm91bmRzIiwiZXZlbnQiLCJsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UiLCJ3bXNGZWF0dXJlSW5mbyIsImZlYXR1cmVJbmZvIiwiY29vcmRpbmF0ZSIsImxheWVySWQiLCJfdGhpcyRwcm9wczMiLCJfdGhpcyRwcm9wczMkaW5kZXgiLCJtYXBJbmRleCIsInRvZ2dsZUxheWVyRm9yTWFwIiwidXBkYXRlIiwicHJldmlvdXNMYXllcnMiLCJfdXBkYXRlTWFwYm94TGF5ZXJzIiwiX3VwZGF0ZUF0dHJpYnV0aW9uIiwib25NYXBTdHlsZUxvYWRlZCIsIl90aGlzJHByb3BzJG1hcFN0eWxlIiwiX3RoaXMkcHJvcHMkbWFwU3R5bGUyIiwiX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycyIsInN0eWxlT2JqIiwic3R5bGUiLCJfdGhpcyRfbWFwJGlzU3R5bGVMb2EiLCJfdGhpcyRfbWFwIiwiX3RoaXMkX21hcCRnZXRTdHlsZSIsIl90aGlzJF9tYXAyIiwicmF3U3R5bGUiLCJpc1N0eWxlTG9hZGVkIiwiY2FsbCIsImdldFN0eWxlIiwic3R5bGVzaGVldCIsIl91bnVzZWQiLCJ1c2VzTWFwYm94IiwidXNlc09zbSIsInB1c2giLCJjdXJyZW50U3R5bGUiLCJtYXBTdHlsZXMiLCJpc1VzZXJDdXN0b21TdHlsZSIsImN1c3RvbSIsInNldFN0YXRlIiwiX2NvbGxlY3RCYXNlbWFwQXR0cmlidXRpb25zIiwiX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXIiLCJvZmYiLCJfYmFzZW1hcElkbGVMaXN0ZW5lciIsImF0dGVtcHRzIiwiTUFYX0FUVEVNUFRTIiwidHJ5Q29sbGVjdCIsIm9uU291cmNlRGF0YSIsImUiLCJpc1NvdXJjZUxvYWRlZCIsInNvdXJjZURhdGFUeXBlIiwib25JZGxlIiwib24iLCJtYXBSZWYiLCJnZXRNYXAiLCJfb25NYXBib3hTdHlsZVVwZGF0ZSIsIl9vbk1hcFJlbmRlciIsImdldE1hcGJveFJlZiIsImVycm9yIiwiZXJyb3JNZXNzYWdlIiwibWVzc2FnZSIsImxheWVyTWVzc2FnZSIsImVycm9yTWVzc2FnZUZ1bGwiLCJsYXN0U2hvd24iLCJfZGVja0dMRXJyb3JzRWxhcHNlZCIsIkRhdGUiLCJub3ciLCJleHRyYUxheWVyTWVzc2FnZSIsIl90b3BNb3N0TGF5ZXIkcHJvcHMiLCJ0b3BNb3N0TGF5ZXIiLCJwYXJlbnQiLCJsYXllclNldElzVmFsaWQiLCJ1aVN0YXRlQWN0aW9ucyIsImFkZE5vdGlmaWNhdGlvbiIsIl90aGlzJGNvbnRleHQiLCJ2aWV3U3RhdGUiLCJjb250ZXh0IiwiZ2V0SW50ZXJuYWxWaWV3U3RhdGUiLCJvblZpZXdTdGF0ZUNoYW5nZSIsInZpZXdwb3J0IiwiX3RoaXMkcHJvcHMkbWFwU3RhdGUiLCJpbnRlcmFjdGlvblN0YXRlIiwiaXNFeHBvcnQiLCJzZXRJbnRlcm5hbFZpZXdTdGF0ZSIsIl93YXNJbnRlcmFjdGluZyIsIl9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkIiwiaXNVc2VySW50ZXJhY3Rpb24iLCJpc1pvb21pbmciLCJpc1Bhbm5pbmciLCJpc1JvdGF0aW5nIiwiaXNEcmFnZ2luZyIsImluVHJhbnNpdGlvbiIsImlzSW50ZXJhY3Rpb25TZXR0bGUiLCJzZXRUaW1lb3V0Iiwib25Nb3VzZU1vdmUiLCJzZXRMb2FkaW5nSW5kaWNhdG9yIiwiY2hhbmdlIiwiaXNWaXNpYmxlIiwicGFuZWxJZCIsIl90aGlzJHByb3BzNCIsInRvZ2dsZU1hcENvbnRyb2wiLCJOdW1iZXIiLCJfaW5oZXJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJjb21wb25lbnREaWRNb3VudCIsImN1cnJlbnQiLCJfaGFuZGxlUmVzaXplIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJfb25EZWNrSW5pdGlhbGl6ZWQiLCJkZXZpY2UiLCJvbkRlY2tJbml0aWFsaXplZCIsIl9kZWNrIiwiX2lzT0tUb1JlbmRlckVmZmVjdHMiLCJ2aWV3SW5kZXgiLCJfdGhpcyRfZGVjayIsInZpZXdNYW5hZ2VyIiwiX3ZpZXdwb3J0cyIsIl9nZXRBbm5vdGF0aW9uVmlld3BvcnQiLCJpbnRlcm5hbFZpZXdTdGF0ZSIsIl9pbnRlcm5hbFZpZXdTdGF0ZSRsbyIsIl9pbnRlcm5hbFZpZXdTdGF0ZSRsYSIsIl9pbnRlcm5hbFZpZXdTdGF0ZSR6byIsIl9yZWYzIiwiX2ludGVybmFsVmlld1N0YXRlJHBpIiwiX3JlZjQiLCJfaW50ZXJuYWxWaWV3U3RhdGUkYmUiLCJfdGhpcyRfYW5ub3RhdGlvblZpZXciLCJsb25naXR1ZGUiLCJsYXRpdHVkZSIsInpvb20iLCJwaXRjaCIsImJlYXJpbmciLCJfYW5ub3RhdGlvblZpZXdwb3J0Q2FjaGUiLCJtZXJnZWRTdGF0ZSIsInZwIiwicHJvamVjdCIsImxuZ0xhdCIsInVucHJvamVjdCIsInh5IiwiX3JlbmRlck1hcFBvcG92ZXIiLCJfdGhpcyRwcm9wcyR2aXNTdGF0ZSQiLCJob3ZlckluZm8iLCJfdGhpcyRwcm9wczUiLCJfdGhpcyRwcm9wczUkdmlzU3RhdGUiLCJjbGlja2VkIiwiZGF0YXNldHMiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImFuaW1hdGlvbkNvbmZpZyIsIl90aGlzJHByb3BzNSR2aXNTdGF0ZTIiLCJtb3VzZVBvcyIsIm1vdXNlUG9zaXRpb24iLCJwaW5uZWQiLCJ0b29sdGlwIiwibGF5ZXJIb3ZlclByb3AiLCJjb21wYXJlTW9kZSIsInBpbm5lZFBvc2l0aW9uIiwieCIsInkiLCJsYXllclBpbm5lZFByb3AiLCJfZ2V0SG92ZXJYWSIsInByaW1hcnlEYXRhIiwiY29tcGFyZVR5cGUiLCJjb21tb25Qcm9wIiwib25DbG9zZSIsIl9vbkNsb3NlTWFwUG9wb3ZlciIsImNhbnZhcyIsInVuZGVmaW5lZCIsIl9leHRlbmRzIiwiZnJvemVuIiwiaXNCYXNlIiwib25TZXRGZWF0dXJlcyIsInNldEZlYXR1cmVzIiwic2V0U2VsZWN0ZWRGZWF0dXJlIiwiZmVhdHVyZUNvbGxlY3Rpb24iLCJzY3JlZW5Db29yZCIsIl9yZW5kZXJEZWNrT3ZlcmxheSIsImxheWVyc0ZvckRlY2siLCJfdGhpcyRjb250ZXh0MiIsIl9tYXBTdGF0ZSRnbG9iZSIsIl9tYXBTdHlsZSRtYXBTdHlsZXMiLCJfdGhpczIiLCJfdGhpcyRwcm9wcyRtYXBTdGF0ZSQiLCJvcHRpb25zIiwiYXJndW1lbnRzIiwicHJpbWFyeU1hcCIsIl90aGlzJHByb3BzNiIsIm1hcGJveEFwaUFjY2Vzc1Rva2VuIiwibWFwYm94QXBpVXJsIiwiZGVja0dsUHJvcHMiLCJtYXBDb250cm9scyIsImRlY2tSZW5kZXJDYWxsYmFja3MiLCJnZW5lcmF0ZURlY2tHTExheWVycyIsImlzSW50ZXJhY3RpdmUiLCJjaGlsZHJlbiIsIm1hcERyYXciLCJfcmVmNSIsIl9yZWY1JGFjdGl2ZSIsImFjdGl2ZSIsImVkaXRvck1lbnVBY3RpdmUiLCJpc0VkaXRvckRyYXdpbmdNb2RlIiwiaXNEcmF3aW5nQWN0aXZlIiwibW9kZSIsImludGVybmFsTWFwU3RhdGUiLCJlZGl0b3JGZWF0dXJlU2VsZWN0ZWRJbmRleCIsInNlbGVjdGVkUG9seWdvbkluZGV4U2VsZWN0b3IiLCJnZW5lcmF0ZURlY2tHTExheWVyc01ldGhvZCIsImV4dHJhRGVja1BhcmFtcyIsImdldFRvb2x0aXAiLCJpc05hTiIsImdldEN1cnNvciIsIl9yZWY2IiwiZWRpdG9yQ3Vyc29yIiwiZWZmZWN0cyIsImxheWVyQmxlbmRpbmdQYXJhbXMiLCJsYXllckJsZW5kaW5nIiwiZGVja0xheWVyc01hcFN0YXRlIiwibGF5ZXJQYXJhbWV0ZXJzIiwiZGVja0dsTGF5ZXJzIiwiZWRpdG9ySW5mbyIsIm9uQXBwbHlQb2x5Z29uRmlsdGVyQWxsIiwic2V0UG9seWdvbkZpbHRlckFsbExheWVycyIsInNlbGVjdGVkRmVhdHVyZUluZGV4ZXMiLCJzZWxlY3RlZEZlYXR1cmVJbmRleEFycmF5U2VsZWN0b3IiLCJfb25MYXllckhvdmVyIiwib25TZXRMYXllckRvbWFpbiIsIl9vbkxheWVyU2V0RG9tYWluIiwib25GaWx0ZXJlZEl0ZW1zQ2hhbmdlIiwiX29uTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlIiwib25XTVNGZWF0dXJlSW5mbyIsIl9vbldNU0ZlYXR1cmVJbmZvIiwib25SZWRyYXdOZWVkZWQiLCJfb25SZWRyYXdOZWVkZWQiLCJvbkZpdEJvdW5kcyIsIl9vbkZpdEJvdW5kcyIsImdsb2JlQmFzZW1hcFByb3ZpZGVyIiwiZ2xvYmVCYXNlTGF5ZXJzIiwibWFwU3R5bGVUeXBlIiwiYmFzZW1hcFByb3ZpZGVyIiwiZ2xvYmVUb3BMYXllcnMiLCJmaW5hbERlY2tHbExheWVycyIsIl90b0NvbnN1bWFibGVBcnJheSIsInZpZXdzIiwicmVzb2x1dGlvbiIsImNsZWFyIiwiY2xlYXJDb2xvciIsImZhclpNdWx0aXBsaWVyIiwiYWxsRGVja0dsUHJvcHMiLCJwaWNraW5nUmFkaXVzIiwicGFyYW1ldGVycyIsImN1bGwiLCJvbkRlY2tSZW5kZXIiLCJfb25Nb3VzZU1vdmVEZWJvdW5jZWQiLCJvbkxvYWQiLCJvbkRlY2tMb2FkIiwiY29udHJvbGxlciIsImRvdWJsZUNsaWNrWm9vbSIsImRyYWdSb3RhdGUiLCJtYXhQaXRjaCIsIm1pblpvb20iLCJtYXhab29tIiwib25CZWZvcmVSZW5kZXIiLCJfb25CZWZvcmVSZW5kZXIiLCJfb25WaWV3cG9ydENoYW5nZSIsIm9uSG92ZXIiLCJyZXMiLCJfb25MYXllckhvdmVyRGVib3VuY2VkIiwib25DbGljayIsInNyY0V2ZW50IiwiYWxpZ25pbmdMYXllciIsImZpbmQiLCJsIiwiYWxpZ25XYWl0aW5nRm9yTWFwIiwib25BbGlnbk1hcENsaWNrIiwib25FcnJvciIsIl9vbkRlY2tFcnJvciIsImNvbXAiLCJkZWNrIiwib25EZXZpY2VJbml0aWFsaXplZCIsIm9uQWZ0ZXJSZW5kZXIiLCJvbkRlY2tBZnRlclJlbmRlciIsImFueUFjdGl2ZUxheWVyTG9hZGluZyIsIl9vbkxheWVyTG9hZGluZ1N0YXRlQ2hhbmdlIiwibWFwYm94TGF5ZXJzIiwibWFwYm94TGF5ZXJzU2VsZWN0b3IiLCJfcmVuZGVyTWFwYm94T3ZlcmxheXMiLCJfcmVuZGVyTWFwIiwiX21hcFN0eWxlJG1hcFN0eWxlczIiLCJfdGhpcyRwcm9wcyRNYXBDb21wb24iLCJfdGhpcyRjb250ZXh0MyIsIl9tYXBTdGF0ZSRtYXhQaXRjaCIsIl90aGlzJHByb3BzJGlzRXhwb3J0IiwiX21hcFN0YXRlJGdsb2JlMiIsIl9tYXBTdHlsZSRib3R0b21NYXBTdCIsIl9tYXBTdGF0ZSRnbG9iZTMiLCJfbWFwQ29udHJvbHMkYW5ub3RhdGkiLCJfbWFwU3RhdGUkZ2xvYmU0IiwiX21hcFN0YXRlJGdsb2JlNSIsIl90aGVtZSRzaWRlUGFuZWwkbWFyZyIsIl90aGVtZSRzaWRlUGFuZWwiLCJfdGhlbWUkc2lkZVBhbmVsJG1hcmcyIiwiX3RoZW1lJHNpZGVQYW5lbDIiLCJfdGhpcyRwcm9wczciLCJsb2NhbGUiLCJ1aVRoZW1lIiwiYm90dG9tTWFwQ29udGFpbmVyUHJvcHMiLCJ0b3BNYXBDb250YWluZXJQcm9wcyIsIl90aGlzJHByb3BzNyRkYXRhc2V0QSIsImRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJfdGhpcyRwcm9wczckYXR0cmlidXQiLCJhdHRyaWJ1dGlvbkxvZ29zIiwiX3RoaXMkcHJvcHM3JGNvbnRhaW5lIiwiaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZSIsImFjdGl2ZVNpZGVQYW5lbCIsInNpZGVQYW5lbFdpZHRoIiwibGF5ZXJzRm9yRGVja1NlbGVjdG9yIiwiYmFzZU1hcExpYnJhcnlOYW1lIiwiYmFzZU1hcExpYnJhcnlDb25maWciLCJSZXNvbHZlZE1hcENvbXBvbmVudCIsIk1hcENvbXBvbmVudCIsIk1BUEJPWCIsInVzZU1hcGJveEFkYXB0ZXIiLCJjb25maWdNYXhQaXRjaCIsImVmZmVjdGl2ZU1heFBpdGNoIiwiTWF0aCIsIm1pbiIsIm1hcFByb3BzIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwibWFwYm94QWNjZXNzVG9rZW4iLCJhY2Nlc3NUb2tlbiIsIlJUTFRleHRQbHVnaW4iLCJtYXBib3hDb25maWciLCJtYXBMaWIiLCJnZXRNYXBMaWIiLCJoYXNHZW9jb2RlckxheWVyIiwiaXNTcGxpdCIsImJvdHRvbU1hcFN0eWxlIiwiX3NldE1hcFJlZiIsInNob3dNYXBDb250cm9sIiwiRnJhZ21lbnQiLCJhdmFpbGFibGVMb2NhbGVzIiwicmVhZE9ubHkiLCJzY2FsZSIsImxvZ29Db21wb25lbnQiLCJnZW9jb2RlciIsIm1hcENvbnRyb2xUb3AiLCJ0aGVtZU5hbWUiLCJvblRvZ2dsZVBlcnNwZWN0aXZlIiwidG9nZ2xlUGVyc3BlY3RpdmUiLCJvblNldE1hcFZpZXdNb2RlIiwic2V0TWFwVmlld01vZGUiLCJtYXBWaWV3TW9kZSIsIm9uVG9nZ2xlU3BsaXRNYXAiLCJ0b2dnbGVTcGxpdE1hcCIsIm9uTWFwVG9nZ2xlTGF5ZXIiLCJfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIiLCJvblRvZ2dsZU1hcENvbnRyb2wiLCJfdG9nZ2xlTWFwQ29udHJvbCIsIm9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydCIsInRvZ2dsZVNwbGl0TWFwVmlld3BvcnQiLCJvblNldEVkaXRvck1vZGUiLCJzZXRFZGl0b3JNb2RlIiwib25TZXRMb2NhbGUiLCJzZXRMb2NhbGUiLCJvblNldFRoZW1lIiwic2V0VGhlbWUiLCJvblRvZ2dsZUVkaXRvclZpc2liaWxpdHkiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5Iiwib25Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllciIsIm9uTGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsIm9uVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5IiwiX2hhbmRsZVRvZ2dsZUxheWVyVmlzaWJpbGl0eSIsIm1hcEhlaWdodCIsInNldE1hcENvbnRyb2xTZXR0aW5ncyIsIm9uVG9nZ2xlTGF5ZXJGb3JNYXAiLCJvbkRlbGV0ZUZlYXR1cmUiLCJkZWxldGVGZWF0dXJlIiwib25TZXRGZWF0dXJlUHJvcGVydGllcyIsInNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzIiwib25TZWxlY3QiLCJvblRvZ2dsZVBvbHlnb25GaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXIiLCJ2aXNpYmxlIiwiaXNHbG9iZUVuYWJsZWQiLCJhbm5vdGF0aW9ucyIsInNlbGVjdGVkQW5ub3RhdGlvbklkIiwiaXNFZGl0aW5nQW5ub3RhdGlvblRleHQiLCJpc0Fubm90YXRpb25Nb2RlIiwiYW5ub3RhdGlvbiIsInVwZGF0ZUFubm90YXRpb24iLCJzZXRTZWxlY3RlZEFubm90YXRpb24iLCJ0b3BNYXBTdHlsZSIsImhhc0F0dHJpYnV0aW9uTG9nb3MiLCJoYXNNYXBTY2FsZSIsImVuYWJsZU1hcFNjYWxlIiwic3RhdGUiLCJnbG9iZUF0dHJpYnV0aW9ucyIsImxvZ29zIiwicmVuZGVyIiwiX21hcFN0eWxlJG1hcFN0eWxlczMiLCJfdGhpcyRwcm9wczgiLCJtYXBDb250ZW50Iiwic3R5bGVTZWxlY3RvciIsIm9uQ29udGV4dE1lbnUiLCJwcmV2ZW50RGVmYXVsdCIsIm92ZXJsYXlCbGVuZGluZyIsIm1hcExpYkNzc0NsYXNzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcC1jb250YWluZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGxpYnJhcmllc1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBjcmVhdGVSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQsIHt3aXRoVGhlbWV9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7TWFwIGFzIE1hcGJveExlZ2FjeU1hcCwgTWFwUmVmfSBmcm9tICdyZWFjdC1tYXAtZ2wvbWFwYm94LWxlZ2FjeSc7XG5pbXBvcnQge01hcCBhcyBNYXBsaWJyZU1hcH0gZnJvbSAnQHZpcy5nbC9yZWFjdC1tYXBsaWJyZSc7XG5pbXBvcnQge1BpY2tpbmdJbmZvLCBNYXBWaWV3fSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCBEZWNrR0wgZnJvbSAnQGRlY2suZ2wvcmVhY3QnO1xuaW1wb3J0IHtjcmVhdGVTZWxlY3RvciwgU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcbmltcG9ydCB7dXNlRHJvcHBhYmxlfSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuXG5pbXBvcnQge1Zpc1N0YXRlQWN0aW9ucywgTWFwU3RhdGVBY3Rpb25zLCBVSVN0YXRlQWN0aW9uc30gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuLy8gY29tcG9uZW50c1xuaW1wb3J0IE1hcFBvcG92ZXJGYWN0b3J5IGZyb20gJy4vbWFwL21hcC1wb3BvdmVyJztcbmltcG9ydCBNYXBDb250cm9sRmFjdG9yeSBmcm9tICcuL21hcC9tYXAtY29udHJvbCc7XG5pbXBvcnQgTWFwU2NhbGVGYWN0b3J5IGZyb20gJy4vbWFwL21hcC1zY2FsZSc7XG5pbXBvcnQge1N0eWxlZE1hcENvbnRhaW5lcn0gZnJvbSAnLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRpb24sXG4gIEF0dHJpYnV0aW9uTG9nb3MsXG4gIHJlbmRlckJhc2VtYXBBdHRyaWJ1dGlvbixcbiAgZGVkdXBlQmFzZW1hcEF0dHJpYnV0aW9uc1xufSBmcm9tICcuL21hcC9hdHRyaWJ1dGlvbic7XG5cbmltcG9ydCBFZGl0b3JGYWN0b3J5IGZyb20gJy4vZWRpdG9yL2VkaXRvcic7XG5pbXBvcnQgRmlsdGVyRmVhdHVyZUJhZGdlcyBmcm9tICcuL2VkaXRvci9maWx0ZXItZmVhdHVyZS1iYWRnZXMnO1xuaW1wb3J0IHtBbm5vdGF0aW9uT3ZlcmxheX0gZnJvbSAnLi9hbm5vdGF0aW9ucyc7XG5cbi8vIHV0aWxzXG5pbXBvcnQge1xuICBnZW5lcmF0ZU1hcGJveExheWVycyxcbiAgdXBkYXRlTWFwYm94TGF5ZXJzLFxuICBMYXllcixcbiAgTGF5ZXJCYXNlQ29uZmlnLFxuICBWaXN1YWxDaGFubmVsRG9tYWluLFxuICBFZGl0b3JMYXllclV0aWxzLFxuICBBZ2dyZWdhdGVkQmluXG59IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIEF0dHJpYnV0aW9uV2l0aFN0eWxlLFxuICBEYXRhc2V0QXR0cmlidXRpb24sXG4gIE1hcFN0YXRlLFxuICBNYXBDb250cm9scyxcbiAgVmlld3BvcnQsXG4gIFNwbGl0TWFwLFxuICBTcGxpdE1hcExheWVyc1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBpc1N0eWxlVXNpbmdNYXBib3hUaWxlcyxcbiAgaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzLFxuICBnZXRCYXNlTWFwQXR0cmlidXRpb25zLFxuICBnZXRCYXNlTWFwTGlicmFyeSxcbiAgdHJhbnNmb3JtUmVxdWVzdCxcbiAgb2JzZXJ2ZURpbWVuc2lvbnMsXG4gIHVub2JzZXJ2ZURpbWVuc2lvbnMsXG4gIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMsXG4gIG9uVmlld1BvcnRDaGFuZ2UsXG4gIGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlLFxuICBub3JtYWxpemVFdmVudCxcbiAgcmdiVG9IZXgsXG4gIGNvbXB1dGVEZWNrRWZmZWN0cyxcbiAgZ2V0QXBwbGljYXRpb25Db25maWcsXG4gIEdldE1hcFJlZixcbiAgZ2V0TGF5ZXJCbGVuZGluZ1BhcmFtZXRlcnMsXG4gIHBhdGNoRGVja1JlbmRlcmVyRm9yUG9zdFByb2Nlc3Npbmdcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbi8vIGRlZmF1bHQtc2V0dGluZ3NcbmltcG9ydCB7XG4gIEZJTFRFUl9UWVBFUyxcbiAgR0VPQ09ERVJfTEFZRVJfSUQsXG4gIFRIUk9UVExFX05PVElGSUNBVElPTl9USU1FLFxuICBERUZBVUxUX1BJQ0tJTkdfUkFESVVTLFxuICBOT19NQVBfSUQsXG4gIEVNUFRZX01BUEJPWF9TVFlMRSxcbiAgTUFQQk9YX01BWF9QSVRDSCxcbiAgTUFQX0xJQl9PUFRJT05TLFxuICBHTE9CRV9NSU5fWk9PTSxcbiAgR0xPQkVfTUFYX1pPT01cbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5pbXBvcnQge1xuICBnZXRHbG9iZUJhc2VMYXllcnMsXG4gIGdldEdsb2JlVG9wTGF5ZXJzLFxuICBnZXRHbG9iZUNsZWFyQ29sb3IsXG4gIGdldEdsb2JlQmFzZW1hcEF0dHJpYnV0aW9ucyxcbiAgcmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyLFxuICBnZXRTdGFyc0JhY2tncm91bmRJbWFnZSxcbiAgS2VwbGVyR2xvYmVWaWV3XG59IGZyb20gJ0BrZXBsZXIuZ2wvZGVja2dsLWxheWVycyc7XG5cbmltcG9ydCB7RFJPUFBBQkxFX01BUF9DT05UQUlORVJfVFlQRX0gZnJvbSAnLi9jb21tb24vZG5kLWxheWVyLWl0ZW1zJztcbi8vIENvbnRleHRzXG5pbXBvcnQge01hcFZpZXdTdGF0ZUNvbnRleHR9IGZyb20gJy4vbWFwLXZpZXctc3RhdGUtY29udGV4dCc7XG5cbmltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gJy4vY29tbW9uL2Vycm9yLWJvdW5kYXJ5JztcbmltcG9ydCB7TE9DQUxFX0NPREVTfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge1xuICBNYXBTdHlsZSxcbiAgYXJlQW55RGVja0xheWVyc0xvYWRpbmcsXG4gIGNvbXB1dGVEZWNrTGF5ZXJzLFxuICBnZXRMYXllckhvdmVyUHJvcCxcbiAgTGF5ZXJIb3ZlclByb3AsXG4gIHByZXBhcmVMYXllcnNGb3JEZWNrLFxuICBwcmVwYXJlTGF5ZXJzVG9SZW5kZXIsXG4gIExheWVyc1RvUmVuZGVyXG59IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IExvYWRpbmdJbmRpY2F0b3IgZnJvbSAnLi9sb2FkaW5nLWluZGljYXRvcic7XG5cbi8vIERlYm91bmNlIHRoZSBwcm9wYWdhdGlvbiBvZiB2aWV3cG9ydCBjaGFuZ2UgYW5kIG1vdXNlIG1vdmVzIHRvIHJlZHV4IHN0b3JlLlxuLy8gVGhpcyBpcyB0byBhdm9pZCB0b28gbWFueSByZW5kZXJzIG9mIG90aGVyIGNvbXBvbmVudHMgd2hlbiB0aGUgbWFwIGlzXG4vLyBiZWluZyBwYW5uZWQvem9vbWVkIChsZWFkaW5nIHRvIGxhZ2d5IGJhc2VtYXAvZGVjayBzeW5jaW5nKS5cbmNvbnN0IERFQk9VTkNFX1ZJRVdQT1JUX1BST1BBR0FURSA9IDEwO1xuY29uc3QgREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUgPSAxMDtcblxuLy8gSG93IGxvbmcgc2hvdWxkIHdlIHdhaXQgYmV0d2VlbiBsYXllciBsb2FkaW5nIHN0YXRlIGNoYW5nZXMgYmVmb3JlIHRyaWdnZXJpbmcgYSBVSSB1cGRhdGVcbmNvbnN0IERFQk9VTkNFX0xPQURJTkdfU1RBVEVfUFJPUEFHQVRFID0gMTAwO1xuXG5jb25zdCBNQVBfU1RZTEU6IHtba2V5OiBzdHJpbmddOiBSZWFjdC5DU1NQcm9wZXJ0aWVzfSA9IHtcbiAgY29udGFpbmVyOiB7XG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJ1xuICB9LFxuICB0b3A6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICBwb2ludGVyRXZlbnRzOiAnbm9uZSdcbiAgfVxufTtcblxuY29uc3QgTE9DQUxFX0NPREVTX0FSUkFZID0gT2JqZWN0LmtleXMoTE9DQUxFX0NPREVTKTtcblxuaW50ZXJmYWNlIFN0eWxlZE1hcENvbnRhaW5lclByb3BzIHtcbiAgJG1peEJsZW5kTW9kZT86IHN0cmluZztcbiAgJG1hcExpYkNzc0NsYXNzOiBzdHJpbmc7XG59XG5cbmNvbnN0IFN0eWxlZE1hcCA9IHN0eWxlZChTdHlsZWRNYXBDb250YWluZXIpPFN0eWxlZE1hcENvbnRhaW5lclByb3BzPihcbiAgKHskbWl4QmxlbmRNb2RlID0gJ25vcm1hbCcsICRtYXBMaWJDc3NDbGFzc30pID0+IGBcbiAgI2RlZmF1bHQtZGVja2dsLW92ZXJsYXkge1xuICAgIG1peC1ibGVuZC1tb2RlOiAkeyRtaXhCbGVuZE1vZGV9O1xuICB9O1xuICAqWyR7JG1hcExpYkNzc0NsYXNzfS1jaGlsZHJlbl0ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuYFxuKTtcblxuY29uc3QgTUFQQk9YR0xfU1RZTEVfVVBEQVRFID0gJ3N0eWxlLmxvYWQnO1xuY29uc3QgTUFQQk9YR0xfUkVOREVSID0gJ3JlbmRlcic7XG5cbi8vIENhbm9uaWNhbCBPcGVuU3RyZWV0TWFwIGF0dHJpYnV0aW9uLCBpbmplY3RlZCBpbnRvIHRoZSBjb2xsZWN0ZWQgbGlzdCB3aGVuIGFcbi8vIHN0eWxlIGlzIGRldGVjdGVkIHRvIHVzZSBPU00gdGlsZXMgYnV0IHRoZSByZXNvbHZlZCBzb3VyY2VzIGhhdmVuJ3QgeWllbGRlZFxuLy8gYW4gYXR0cmlidXRpb24gc3RyaW5nIG9mIHRoZWlyIG93biAoZS5nLiByYXcgc3R5bGUgZGVjbGFyZXMgT1NNIGJ1dCB0aGVcbi8vIFRpbGVKU09OIGhhc24ndCBleHBvc2VkIGl0KS4gUmVuZGVyZWQgdGhyb3VnaCB0aGUgc2FtZSBzYWZlIGxpbmsgcGFyc2VyIGFzXG4vLyBldmVyeSBvdGhlciBjb2xsZWN0ZWQgYXR0cmlidXRpb24uXG5jb25zdCBPU01fQVRUUklCVVRJT05fSFRNTCA9XG4gICfCqSA8YSBocmVmPVwiaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4nO1xuXG5pbnRlcmZhY2UgU3R5bGVkRHJvcHBhYmxlUHJvcHMge1xuICAkaXNPdmVyOiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWREcm9wcGFibGUgPSBzdHlsZWQuZGl2PFN0eWxlZERyb3BwYWJsZVByb3BzPmBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuJGlzT3ZlciA/IHByb3BzLnRoZW1lLmRuZE92ZXJCYWNrZ3JvdW5kQ29sb3IgOiAnbm9uZScpfTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XG5cbmNvbnN0IFN0eWxlZE1hcFNjYWxlQ29udGFpbmVyID0gc3R5bGVkLmRpdjx7JGxlZnQ6IG51bWJlcjsgJGJvdHRvbU9mZnNldDogbnVtYmVyfT5gXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNpZGVQYW5lbC5tYXJnaW4ubGVmdCArIHByb3BzLiRib3R0b21PZmZzZXR9cHg7XG4gIGxlZnQ6ICR7cHJvcHMgPT4gcHJvcHMuJGxlZnR9cHg7XG4gIHotaW5kZXg6IDE7XG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuYDtcblxuZXhwb3J0IGNvbnN0IGlzU3BsaXRTZWxlY3RvciA9IHByb3BzID0+XG4gIHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcyAmJiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID4gMTtcblxuZXhwb3J0IGNvbnN0IERyb3BwYWJsZSA9ICh7Y29udGFpbmVySWR9KSA9PiB7XG4gIGNvbnN0IHtpc092ZXIsIHNldE5vZGVSZWZ9ID0gdXNlRHJvcHBhYmxlKHtcbiAgICBpZDogY29udGFpbmVySWQsXG4gICAgZGF0YToge3R5cGU6IERST1BQQUJMRV9NQVBfQ09OVEFJTkVSX1RZUEUsIGluZGV4OiBjb250YWluZXJJZH0sXG4gICAgZGlzYWJsZWQ6ICFjb250YWluZXJJZFxuICB9KTtcblxuICByZXR1cm4gPFN0eWxlZERyb3BwYWJsZSByZWY9e3NldE5vZGVSZWZ9ICRpc092ZXI9e2lzT3Zlcn0gLz47XG59O1xuXG4vLyBBdHRyaWJ1dGlvbiBVSSAocGFyc2VyICsgY29tcG9uZW50cykgbGl2ZXMgaW4gLi9tYXAvYXR0cmlidXRpb24gYW5kIGlzXG4vLyByZS1leHBvcnRlZCBoZXJlIHRvIHByZXNlcnZlIHRoZSBwdWJsaWMgaW1wb3J0IHBhdGggKEBrZXBsZXIuZ2wvY29tcG9uZW50cykuXG5leHBvcnQge0F0dHJpYnV0aW9uLCBBdHRyaWJ1dGlvbkxvZ29zLCByZW5kZXJCYXNlbWFwQXR0cmlidXRpb24sIGRlZHVwZUJhc2VtYXBBdHRyaWJ1dGlvbnN9O1xuXG5NYXBDb250YWluZXJGYWN0b3J5LmRlcHMgPSBbTWFwUG9wb3ZlckZhY3RvcnksIE1hcENvbnRyb2xGYWN0b3J5LCBFZGl0b3JGYWN0b3J5LCBNYXBTY2FsZUZhY3RvcnldO1xuXG50eXBlIE1hcGJveFN0eWxlID0gc3RyaW5nIHwgb2JqZWN0IHwgdW5kZWZpbmVkO1xudHlwZSBQcm9wU2VsZWN0b3I8Uj4gPSBTZWxlY3RvcjxNYXBDb250YWluZXJQcm9wcywgUj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwQ29udGFpbmVyUHJvcHMge1xuICB2aXNTdGF0ZTogVmlzU3RhdGU7XG4gIG1hcFN0YXRlOiBNYXBTdGF0ZTtcbiAgbWFwQ29udHJvbHM6IE1hcENvbnRyb2xzO1xuICBtYXBTdHlsZToge2JvdHRvbU1hcFN0eWxlPzogTWFwYm94U3R5bGU7IHRvcE1hcFN0eWxlPzogTWFwYm94U3R5bGV9ICYgTWFwU3R5bGU7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIG1hcGJveEFwaVVybDogc3RyaW5nO1xuICB2aXNTdGF0ZUFjdGlvbnM6IHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnM7XG4gIG1hcFN0YXRlQWN0aW9uczogdHlwZW9mIE1hcFN0YXRlQWN0aW9ucztcbiAgdWlTdGF0ZUFjdGlvbnM6IHR5cGVvZiBVSVN0YXRlQWN0aW9ucztcblxuICAvLyBvcHRpb25hbFxuICBwcmltYXJ5PzogYm9vbGVhbjsgLy8gcHJpbWFyeSBvbmUgd2lsbCBiZSByZXBvcnRpbmcgaXRzIHNpemUgdG8gYXBwU3RhdGVcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuICBpc0V4cG9ydD86IGJvb2xlYW47XG4gIC8vIG9uTWFwU3R5bGVMb2FkZWQ/OiAobWFwOiBtYXBsaWJyZWdsLk1hcCB8IFJldHVyblR5cGU8TWFwUmVmWydnZXRNYXAnXT4gfCBudWxsKSA9PiB2b2lkO1xuICBvbk1hcFN0eWxlTG9hZGVkPzogKG1hcDogR2V0TWFwUmVmIHwgbnVsbCkgPT4gdm9pZDtcbiAgb25NYXBSZW5kZXI/OiAobWFwOiBHZXRNYXBSZWYgfCBudWxsKSA9PiB2b2lkO1xuICBnZXRNYXBib3hSZWY/OiAobWFwYm94PzogTWFwUmVmIHwgbnVsbCwgaW5kZXg/OiBudW1iZXIpID0+IHZvaWQ7XG4gIGluZGV4PzogbnVtYmVyO1xuICBkZWxldGVNYXBMYWJlbHM/OiAoY29udGFpbmVySWQ6IHN0cmluZywgbGF5ZXJJZDogc3RyaW5nKSA9PiB2b2lkO1xuICBjb250YWluZXJJZD86IG51bWJlcjtcblxuICBpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlPzogYm9vbGVhbjtcbiAgYWN0aXZlU2lkZVBhbmVsOiBzdHJpbmcgfCBudWxsO1xuICBzaWRlUGFuZWxXaWR0aD86IG51bWJlcjtcblxuICBsb2NhbGU/OiBhbnk7XG4gIHVpVGhlbWU/OiBzdHJpbmc7XG4gIHRoZW1lPzogYW55O1xuICBlZGl0b3I/OiBhbnk7XG4gIE1hcENvbXBvbmVudD86IHR5cGVvZiBNYXBib3hMZWdhY3lNYXAgfCB0eXBlb2YgTWFwbGlicmVNYXA7XG4gIGRlY2tHbFByb3BzPzogYW55O1xuICBvbkRlY2tJbml0aWFsaXplZD86IChhOiBhbnksIGI6IGFueSkgPT4gdm9pZDtcbiAgb25WaWV3U3RhdGVDaGFuZ2U/OiAodmlld3BvcnQ6IFZpZXdwb3J0KSA9PiB2b2lkO1xuXG4gIHRvcE1hcENvbnRhaW5lclByb3BzOiBhbnk7XG4gIGJvdHRvbU1hcENvbnRhaW5lclByb3BzOiBhbnk7XG4gIHRyYW5zZm9ybVJlcXVlc3Q/OiAodXJsOiBzdHJpbmcsIHJlc291cmNlVHlwZT86IHN0cmluZykgPT4ge3VybDogc3RyaW5nfTtcblxuICAvKiogUGFzcyBgZmFsc2VgIHRvIGRpc2FibGUgdGhlIHJlbW90ZSBSVEwgdGV4dCBwbHVnaW4sIG9yIGEgVVJMIHN0cmluZyB0byBzZWxmLWhvc3QgaXQuICovXG4gIFJUTFRleHRQbHVnaW4/OiBzdHJpbmcgfCBmYWxzZTtcblxuICBkYXRhc2V0QXR0cmlidXRpb25zPzogRGF0YXNldEF0dHJpYnV0aW9uW107XG4gIGF0dHJpYnV0aW9uTG9nb3M/OiBBdHRyaWJ1dGlvbldpdGhTdHlsZVtdO1xuXG4gIGdlbmVyYXRlTWFwYm94TGF5ZXJzPzogdHlwZW9mIGdlbmVyYXRlTWFwYm94TGF5ZXJzO1xuICBnZW5lcmF0ZURlY2tHTExheWVycz86IHR5cGVvZiBjb21wdXRlRGVja0xheWVycztcblxuICBvbk1vdXNlTW92ZT86IChldmVudDogUmVhY3QuTW91c2VFdmVudCAmIHtsbmdMYXQ/OiBbbnVtYmVyLCBudW1iZXJdfSkgPT4gdm9pZDtcblxuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgZGVja1JlbmRlckNhbGxiYWNrcz86IHtcbiAgICBvbkRlY2tMb2FkPzogKCkgPT4gdm9pZDtcbiAgICBvbkRlY2tSZW5kZXI/OiAoZGVja1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsO1xuICAgIG9uRGVja0FmdGVyUmVuZGVyPzogKGRlY2tQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IGFueTtcbiAgfTtcblxuICAvLyBPcHRpb25hbDogb3ZlcnJpZGUgbGVnZW5kIGhlYWRlciBsb2dvIGluIG1hcCBjb250cm9scyAodXNlZCBieSBpbWFnZSBleHBvcnQpXG4gIGxvZ29Db21wb25lbnQ/OiBSZWFjdC5GQyB8IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWFwQ29udGFpbmVyRmFjdG9yeShcbiAgTWFwUG9wb3ZlcjogUmV0dXJuVHlwZTx0eXBlb2YgTWFwUG9wb3ZlckZhY3Rvcnk+LFxuICBNYXBDb250cm9sOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBDb250cm9sRmFjdG9yeT4sXG4gIEVkaXRvcjogUmV0dXJuVHlwZTx0eXBlb2YgRWRpdG9yRmFjdG9yeT4sXG4gIE1hcFNjYWxlOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBTY2FsZUZhY3Rvcnk+XG4pOiBSZWFjdC5Db21wb25lbnRUeXBlPE1hcENvbnRhaW5lclByb3BzPiB7XG4gIGNsYXNzIE1hcENvbnRhaW5lciBleHRlbmRzIENvbXBvbmVudDxNYXBDb250YWluZXJQcm9wcz4ge1xuICAgIGRpc3BsYXlOYW1lID0gJ01hcENvbnRhaW5lcic7XG5cbiAgICBwcml2YXRlIGFueUFjdGl2ZUxheWVyTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgc3RhdGljIGNvbnRleHRUeXBlID0gTWFwVmlld1N0YXRlQ29udGV4dDtcblxuICAgIGRlY2xhcmUgY29udGV4dDogUmVhY3QuQ29udGV4dFR5cGU8dHlwZW9mIE1hcFZpZXdTdGF0ZUNvbnRleHQ+O1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIGRlY2tHbFByb3BzOiB7fSxcbiAgICAgIGluZGV4OiAwLFxuICAgICAgcHJpbWFyeTogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgcGF0Y2hEZWNrUmVuZGVyZXJGb3JQb3N0UHJvY2Vzc2luZygpO1xuICAgIH1cblxuICAgIHN0YXRlID0ge1xuICAgICAgLy8gdHJ1ZSBmb3IgYnVpbHQtaW4ga2VwbGVyLmdsIHN0eWxlcyAoZGFyay1tYXR0ZXIsIHBvc2l0cm9uLCDigKYpIGFuZCB3aGVuIHRoZVxuICAgICAgLy8gYmFzZW1hcCB1c2VzIE1hcGJveC1ob3N0ZWQgdGlsZXMgKG1hcGJveDovLyBzb3VyY2VzKS5cbiAgICAgIC8vIEZvciB1c2VyLWFkZGVkIGN1c3RvbSBzdHlsZXMgKE9wZW5GcmVlTWFwLCBDQVJUTyBzZWxmLWhvc3RlZCwg4oCmKSBNYXBMaWJyZSBpc1xuICAgICAgLy8gbWVyZWx5IHRoZSByZW5kZXJpbmcgZW5naW5lLCBub3QgdGhlIHRpbGUgcHJvdmlkZXIsIHNvIHRoZSBsb2dvIGlzIGhpZGRlbiBhbmRcbiAgICAgIC8vIHRoZSBiYXNlbWFwJ3Mgb3duIFRpbGVKU09OIGF0dHJpYnV0aW9uIGlzIHNob3duIGluc3RlYWQuXG4gICAgICBzaG93QmFzZU1hcExpYkxvZ286IGZhbHNlLFxuICAgICAgLy8gYXR0cmlidXRpb24gc3RyaW5ncyBjb2xsZWN0ZWQgZnJvbSB0aGUgcmVzb2x2ZWQgbWFwIHNvdXJjZXMgKGUuZy4gQ0FSVE8sXG4gICAgICAvLyBPcGVuRnJlZU1hcCkuICBQb3B1bGF0ZWQgYWZ0ZXIgVGlsZUpTT04gcmVzb2x2ZXMuXG4gICAgICBiYXNlbWFwQXR0cmlidXRpb25zOiBbXSBhcyBzdHJpbmdbXVxuICAgIH07XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmICghdGhpcy5fcmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgb2JzZXJ2ZURpbWVuc2lvbnModGhpcy5fcmVmLmN1cnJlbnQsIHRoaXMuX2hhbmRsZVJlc2l6ZSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoTUFQQk9YR0xfU1RZTEVfVVBEQVRFLCB0aGlzLl9vbk1hcGJveFN0eWxlVXBkYXRlKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZihNQVBCT1hHTF9SRU5ERVIsIHRoaXMuX29uTWFwUmVuZGVyKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuX3JlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVub2JzZXJ2ZURpbWVuc2lvbnModGhpcy5fcmVmLmN1cnJlbnQpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMubWFwU3R5bGUuc3R5bGVUeXBlICE9PSB0aGlzLnByb3BzLm1hcFN0eWxlLnN0eWxlVHlwZSkge1xuICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMubWFwU3R5bGUuc3R5bGVUeXBlID09PSBOT19NQVBfSUQpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHNob3dCYXNlTWFwTGliTG9nbzogZmFsc2UsXG4gICAgICAgICAgICBiYXNlbWFwQXR0cmlidXRpb25zOiBbXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBfZGVjazogYW55ID0gbnVsbDtcbiAgICBfbWFwOiBHZXRNYXBSZWYgfCBudWxsID0gbnVsbDtcbiAgICBfcmVmID0gY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuICAgIF9kZWNrR0xFcnJvcnNFbGFwc2VkOiB7W2lkOiBzdHJpbmddOiBudW1iZXJ9ID0ge307XG4gICAgX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXI6ICgoZTogYW55KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIF9iYXNlbWFwSWRsZUxpc3RlbmVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICAgIF9vbk1hcFJlbmRlciA9ICgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbk1hcFJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWFwUmVuZGVyKHRoaXMuX21hcCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHByZXZpb3VzTGF5ZXJzID0ge1xuICAgICAgLy8gW2xheWVycy5pZF06IG1hcGJveExheWVyQ29uZmlnXG4gICAgfTtcblxuICAgIF9oYW5kbGVSZXNpemUgPSBkaW1lbnNpb25zID0+IHtcbiAgICAgIGNvbnN0IHtwcmltYXJ5LCBpbmRleH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKHByaW1hcnkpIHtcbiAgICAgICAgY29uc3Qge21hcFN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAoZGltZW5zaW9ucyAmJiBkaW1lbnNpb25zLndpZHRoID4gMCAmJiBkaW1lbnNpb25zLmhlaWdodCA+IDApIHtcbiAgICAgICAgICBtYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwKGRpbWVuc2lvbnMsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBsYXllcnNTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFZpc1N0YXRlWydsYXllcnMnXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5sYXllcnM7XG4gICAgbGF5ZXJEYXRhU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxWaXNTdGF0ZVsnbGF5ZXJzJ10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUubGF5ZXJEYXRhO1xuICAgIHNwbGl0TWFwU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxTcGxpdE1hcFtdPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcztcbiAgICBzcGxpdE1hcEluZGV4U2VsZWN0b3I6IFByb3BTZWxlY3RvcjxudW1iZXIgfCB1bmRlZmluZWQ+ID0gcHJvcHMgPT4gcHJvcHMuaW5kZXg7XG4gICAgbWFwTGF5ZXJzU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxTcGxpdE1hcExheWVycyB8IG51bGwgfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLnNwbGl0TWFwU2VsZWN0b3IsXG4gICAgICB0aGlzLnNwbGl0TWFwSW5kZXhTZWxlY3RvcixcbiAgICAgIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHNcbiAgICApO1xuICAgIGxheWVyT3JkZXJTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFZpc1N0YXRlWydsYXllck9yZGVyJ10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUubGF5ZXJPcmRlcjtcbiAgICBsYXllcnNUb1JlbmRlclNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8TGF5ZXJzVG9SZW5kZXI+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHRoaXMubWFwTGF5ZXJzU2VsZWN0b3IsXG4gICAgICBwcmVwYXJlTGF5ZXJzVG9SZW5kZXJcbiAgICApO1xuICAgIGxheWVyc0ZvckRlY2tTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICBwcmVwYXJlTGF5ZXJzRm9yRGVja1xuICAgICk7XG4gICAgZmlsdGVyc1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZmlsdGVycztcbiAgICBwb2x5Z29uRmlsdGVyc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IodGhpcy5maWx0ZXJzU2VsZWN0b3IsIGZpbHRlcnMgPT5cbiAgICAgIGZpbHRlcnMuZmlsdGVyKGYgPT4gZi50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiBmLmVuYWJsZWQgIT09IGZhbHNlKVxuICAgICk7XG4gICAgZmVhdHVyZXNTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmVkaXRvci5mZWF0dXJlcztcbiAgICBzZWxlY3RlZEZlYXR1cmVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU7XG4gICAgZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5wb2x5Z29uRmlsdGVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5mZWF0dXJlc1NlbGVjdG9yLFxuICAgICAgKHBvbHlnb25GaWx0ZXJzLCBmZWF0dXJlcykgPT4gKHtcbiAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzLmNvbmNhdChwb2x5Z29uRmlsdGVycy5tYXAoZiA9PiBmLnZhbHVlKSlcbiAgICAgIH0pXG4gICAgKTtcbiAgICAvLyBAdHMtaWdub3JlIC0gTm8gb3ZlcmxvYWQgbWF0Y2hlcyB0aGlzIGNhbGxcbiAgICBzZWxlY3RlZFBvbHlnb25JbmRleFNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IsXG4gICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZVNlbGVjdG9yLFxuICAgICAgKGNvbGxlY3Rpb24sIHNlbGVjdGVkRmVhdHVyZSkgPT5cbiAgICAgICAgY29sbGVjdGlvbi5mZWF0dXJlcy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBzZWxlY3RlZEZlYXR1cmU/LmlkKVxuICAgICk7XG4gICAgc2VsZWN0ZWRGZWF0dXJlSW5kZXhBcnJheVNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAodmFsdWU6IG51bWJlcikgPT4gdmFsdWUsXG4gICAgICB2YWx1ZSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA8IDAgPyBbXSA6IFt2YWx1ZV07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2RTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLmdlbmVyYXRlTWFwYm94TGF5ZXJzID8/IGdlbmVyYXRlTWFwYm94TGF5ZXJzO1xuXG4gICAgbWFwYm94TGF5ZXJzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyRGF0YVNlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllck9yZGVyU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IsXG4gICAgICB0aGlzLmdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2RTZWxlY3RvcixcbiAgICAgIChsYXllciwgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBsYXllcnNUb1JlbmRlciwgZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZCkgPT5cbiAgICAgICAgZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZChsYXllciwgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBsYXllcnNUb1JlbmRlcilcbiAgICApO1xuXG4gICAgLy8gbWVyZ2UgaW4gYSBiYWNrZ3JvdW5kLWNvbG9yIHN0eWxlIGlmIHRoZSBiYXNlbWFwIGNob2ljZSBpcyBOT19NQVBfSURcbiAgICAvLyB1c2VkIGJ5IDxTdHlsZWRNYXA+IGlubGluZSBzdHlsZSBwcm9wXG4gICAgbWFwU3R5bGVUeXBlU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5tYXBTdHlsZS5zdHlsZVR5cGU7XG4gICAgbWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLm1hcFN0eWxlLmJhY2tncm91bmRDb2xvcjtcbiAgICBnbG9iZU1vZGVTZWxlY3RvciA9IHByb3BzID0+IEJvb2xlYW4ocHJvcHMubWFwU3RhdGU/Lmdsb2JlPy5lbmFibGVkKTtcbiAgICBnbG9iZUJhY2tncm91bmRDb2xvclNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMubWFwU3RhdGU/Lmdsb2JlPy5jb25maWc/LmJhY2tncm91bmRDb2xvcjtcbiAgICBnbG9iZVN0YXJzU2VsZWN0b3IgPSBwcm9wcyA9PiBCb29sZWFuKHByb3BzLm1hcFN0YXRlPy5nbG9iZT8uY29uZmlnPy5zdGFycyk7XG4gICAgc3R5bGVTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5tYXBTdHlsZVR5cGVTZWxlY3RvcixcbiAgICAgIHRoaXMubWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvcixcbiAgICAgIHRoaXMuZ2xvYmVNb2RlU2VsZWN0b3IsXG4gICAgICB0aGlzLmdsb2JlQmFja2dyb3VuZENvbG9yU2VsZWN0b3IsXG4gICAgICB0aGlzLmdsb2JlU3RhcnNTZWxlY3RvcixcbiAgICAgIChzdHlsZVR5cGUsIGJhY2tncm91bmRDb2xvciwgaXNHbG9iZU1vZGUsIGdsb2JlQmFja2dyb3VuZENvbG9yLCBnbG9iZVN0YXJzKSA9PiAoe1xuICAgICAgICAuLi5NQVBfU1RZTEUuY29udGFpbmVyLFxuICAgICAgICAuLi4oc3R5bGVUeXBlID09PSBOT19NQVBfSUQgPyB7YmFja2dyb3VuZENvbG9yOiByZ2JUb0hleChiYWNrZ3JvdW5kQ29sb3IpfSA6IHt9KSxcbiAgICAgICAgLy8gSW4gZ2xvYmUgbW9kZSB0aGUgZGVjay5nbCBjYW52YXMgaXMgdHJhbnNwYXJlbnQgKHRoZSBnbG9iZSBWaWV3IHVzZXNcbiAgICAgICAgLy8gYGNsZWFyQ29sb3I6IGZhbHNlYCB0byBhdm9pZCBjb3JydXB0aW5nIHRoZSBwaWNraW5nIGJ1ZmZlciksIHNvIHRoZVxuICAgICAgICAvLyBiYWNrZ3JvdW5kIGFyb3VuZCB0aGUgZ2xvYmUgaXMgcGFpbnRlZCBoZXJlIG9uIHRoZSBjb250YWluZXIgaW5zdGVhZC5cbiAgICAgICAgLi4uKGlzR2xvYmVNb2RlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBnbG9iZSBiYWNrZ3JvdW5kIHdoZW4gbm9uZSBpcyBjb25maWd1cmVkLlxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHJnYlRvSGV4KFxuICAgICAgICAgICAgICAgIChnbG9iZUJhY2tncm91bmRDb2xvciBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHx8XG4gICAgICAgICAgICAgICAgICAoZ2V0R2xvYmVDbGVhckNvbG9yKCkuc2xpY2UoMCwgMykgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAvLyBPcHRpb25hbGx5IG92ZXJsYXkgYSB0aWxlYWJsZSBzdGFyLWZpZWxkIHBhdHRlcm4gb24gdGhlIGJhY2tncm91bmQuXG4gICAgICAgICAgICAgIC4uLihnbG9iZVN0YXJzXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgnJHtnZXRTdGFyc0JhY2tncm91bmRJbWFnZSgpfScpYCxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFJlcGVhdDogJ3JlcGVhdCdcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvKiBjb21wb25lbnQgcHJpdmF0ZSBmdW5jdGlvbnMgKi9cbiAgICBfb25DbG9zZU1hcFBvcG92ZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVyQ2xpY2sobnVsbCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVySG92ZXIgPSAoX2lkeDogbnVtYmVyLCBpbmZvOiBQaWNraW5nSW5mbzxhbnk+IHwgbnVsbCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25MYXllckhvdmVyKGluZm8sIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgIH07XG5cbiAgICBfb25MYXllclNldERvbWFpbiA9IChcbiAgICAgIGlkeDogbnVtYmVyLFxuICAgICAgdmFsdWU6IG51bWJlcltdIHwge2RvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbjsgYWdncmVnYXRlZEJpbnM6IFJlY29yZDxudW1iZXIsIEFnZ3JlZ2F0ZWRCaW4+fVxuICAgICkgPT4ge1xuICAgICAgLy8gZGVjay5nbCA5IG5hdGl2ZSBhZ2dyZWdhdGlvbiBsYXllcnMgKEdyaWQsIEhleGFnb24pIHBhc3NcbiAgICAgIC8vIHtkb21haW4sIGFnZ3JlZ2F0ZWRCaW5zfSB2aWEgb3VyIFNjYWxlRW5oYW5jZWQqIG92ZXJyaWRlcyxcbiAgICAgIC8vIHdoaWxlIENsdXN0ZXJMYXllcidzIENQVUFnZ3JlZ2F0b3IgYWxzbyBwYXNzZXMge2RvbWFpbiwgYWdncmVnYXRlZEJpbnN9LlxuICAgICAgLy8gUGxhaW4gW21pbiwgbWF4XSBpcyBhIGZhbGxiYWNrIGlmIHRoZSBvdmVycmlkZSBpcyBieXBhc3NlZC5cbiAgICAgIGNvbnN0IGNvbmZpZyA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgID8ge2NvbG9yRG9tYWluOiB2YWx1ZSBhcyBWaXN1YWxDaGFubmVsRG9tYWlufVxuICAgICAgICA6IHtjb2xvckRvbWFpbjogdmFsdWUuZG9tYWluLCBhZ2dyZWdhdGVkQmluczogdmFsdWUuYWdncmVnYXRlZEJpbnN9O1xuXG4gICAgICBjb25zdCBsYXllciA9IHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJzW2lkeF07XG4gICAgICBpZiAoIWxheWVyKSByZXR1cm47XG5cbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLmxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCBjb25maWcgYXMgUGFydGlhbDxMYXllckJhc2VDb25maWc+KTtcbiAgICB9O1xuXG4gICAgX29uUmVkcmF3TmVlZGVkID0gKF9pZHg6IG51bWJlcikgPT4ge1xuICAgICAgLy8gdXBkYXRlTWFwVXBkYXRlciBhbHdheXMgcmV0dXJucyBhIG5ldyBzdGF0ZSBvYmplY3QgcmVmZXJlbmNlLCB3aGljaCB0cmlnZ2VycyByZS1yZW5kZXJcbiAgICAgIGNvbnN0IHttYXBTdGF0ZUFjdGlvbnMsIGluZGV4fSA9IHRoaXMucHJvcHM7XG4gICAgICBtYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwKHt9LCBpbmRleCk7XG4gICAgfTtcblxuICAgIF9vbkZpdEJvdW5kcyA9IChfaWR4OiBudW1iZXIsIGJvdW5kczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pID0+IHtcbiAgICAgIHRoaXMucHJvcHMubWFwU3RhdGVBY3Rpb25zLmZpdEJvdW5kcyhib3VuZHMpO1xuICAgIH07XG5cbiAgICBfb25MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UgPSAoaWR4LCBldmVudCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMubGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlKHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJzW2lkeF0sIGV2ZW50KTtcbiAgICB9O1xuXG4gICAgX29uV01TRmVhdHVyZUluZm8gPSAoXG4gICAgICBpZHg6IG51bWJlcixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZmVhdHVyZUluZm86IEFycmF5PHtuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmd9PiB8IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGNvb3JkaW5hdGU/OiBbbnVtYmVyLCBudW1iZXJdIHwgbnVsbDtcbiAgICAgIH1cbiAgICApID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLndtc0ZlYXR1cmVJbmZvKFxuICAgICAgICB0aGlzLnByb3BzLnZpc1N0YXRlLmxheWVyc1tpZHhdLFxuICAgICAgICBkYXRhLmZlYXR1cmVJbmZvLFxuICAgICAgICBkYXRhLmNvb3JkaW5hdGVcbiAgICAgICk7XG4gICAgfTtcblxuICAgIF9oYW5kbGVNYXBUb2dnbGVMYXllciA9IGxheWVySWQgPT4ge1xuICAgICAgY29uc3Qge2luZGV4OiBtYXBJbmRleCA9IDAsIHZpc1N0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgdmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKTtcbiAgICB9O1xuXG4gICAgX29uTWFwYm94U3R5bGVVcGRhdGUgPSB1cGRhdGUgPT4ge1xuICAgICAgLy8gZm9yY2UgcmVmcmVzaCBtYXBib3hnbCBsYXllcnNcbiAgICAgIHRoaXMucHJldmlvdXNMYXllcnMgPSB7fTtcbiAgICAgIHRoaXMuX3VwZGF0ZU1hcGJveExheWVycygpO1xuXG4gICAgICB0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbih1cGRhdGUpO1xuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25NYXBTdHlsZUxvYWRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWFwU3R5bGVMb2FkZWQodGhpcy5fbWFwKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3VwZGF0ZUF0dHJpYnV0aW9uID0gKHVwZGF0ZT86IGFueSkgPT4ge1xuICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG5cbiAgICAgIGxldCBzdHlsZU9iaiA9IHVwZGF0ZT8uc3R5bGUgfHwgbnVsbDtcbiAgICAgIGlmICghc3R5bGVPYmogJiYgdGhpcy5fbWFwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmF3U3R5bGUgPSB0aGlzLl9tYXAuaXNTdHlsZUxvYWRlZD8uKCkgPyB0aGlzLl9tYXAuZ2V0U3R5bGU/LigpIDogbnVsbDtcbiAgICAgICAgICBpZiAocmF3U3R5bGUpIHtcbiAgICAgICAgICAgIHN0eWxlT2JqID0ge3N0eWxlc2hlZXQ6IHJhd1N0eWxlfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIG1hcCBzdHlsZSBub3QgcmVhZHkgeWV0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHVzZXNNYXBib3ggPSBzdHlsZU9iaiA/IGlzU3R5bGVVc2luZ01hcGJveFRpbGVzKHN0eWxlT2JqKSA6IGZhbHNlO1xuICAgICAgY29uc3QgdXNlc09zbSA9IHN0eWxlT2JqID8gaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzKHN0eWxlT2JqKSA6IGZhbHNlO1xuICAgICAgY29uc3QgYmFzZW1hcEF0dHJpYnV0aW9ucyA9IGdldEJhc2VNYXBBdHRyaWJ1dGlvbnModGhpcy5fbWFwKTtcblxuICAgICAgLy8gaWYgT1NNIHRpbGVzIGFyZSBkZXRlY3RlZCBpbiB0aGUgcmF3IHN0eWxlIGJ1dCBubyBzb3VyY2UtbGV2ZWwgYXR0cmlidXRpb25cbiAgICAgIC8vIHN0cmluZyB3YXMgY29sbGVjdGVkIHlldCwgZm9sZCBpbiB0aGUgY2Fub25pY2FsIE9TTSBhdHRyaWJ1dGlvbiBzbyB0aGVcbiAgICAgIC8vIHJlbmRlciBwYXRoIHN0YXlzIHVuaWZvcm0gKG5vIHNlcGFyYXRlIGhhcmRjb2RlZCBmYWxsYmFjayBsaW5rKVxuICAgICAgaWYgKHVzZXNPc20gJiYgIWJhc2VtYXBBdHRyaWJ1dGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGJhc2VtYXBBdHRyaWJ1dGlvbnMucHVzaChPU01fQVRUUklCVVRJT05fSFRNTCk7XG4gICAgICB9XG5cbiAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHRvIHNob3cgdGhlIFwiQmFzZW1hcCBieTogTWFwTGlicmUvTWFwYm94XCIgbG9nbzpcbiAgICAgIC8vICAtIEFsd2F5cyBzaG93IGZvciBidWlsdC1pbiBrZXBsZXIuZ2wgc3R5bGVzIChkYXJrLW1hdHRlciwgcG9zaXRyb24sIOKApik6XG4gICAgICAvLyAgICB0aGV5IGRvbid0IGNhcnJ5IHRoZWlyIG93biBcInByb3ZpZGVyXCIgYnJhbmRpbmcgc28gdGhlIHJlbmRlcmluZy1lbmdpbmVcbiAgICAgIC8vICAgIGxvZ28gYWN0cyBhcyB0aGUgYmFzZW1hcCBjcmVkaXQuXG4gICAgICAvLyAgLSBBbHdheXMgc2hvdyB3aGVuIE1hcGJveCB0aWxlcyBhcmUgaW4gdXNlIChtYXBib3g6Ly8gc291cmNlcyk6IE1hcGJveFxuICAgICAgLy8gICAgYXR0cmlidXRpb24gaXMgcmVxdWlyZWQuXG4gICAgICAvLyAgLSBIaWRlIGZvciBjdXN0b20gdXNlci1hZGRlZCBzdHlsZXMgKGN1c3RvbSA9PT0gJ0xPQ0FMJyB8ICdNQU5BR0VEJyk6XG4gICAgICAvLyAgICB0aG9zZSBzdHlsZXMgc3VwcGx5IHRoZWlyIG93biBUaWxlSlNPTiBhdHRyaWJ1dGlvbiAoZS5nLiBPcGVuRnJlZU1hcCksXG4gICAgICAvLyAgICBzbyBzaG93aW5nIFwiQmFzZW1hcCBieTogTWFwTGlicmVcIiB3b3VsZCBiZSBtaXNsZWFkaW5nLlxuICAgICAgY29uc3Qgc3R5bGVUeXBlID0gdGhpcy5wcm9wcy5tYXBTdHlsZT8uc3R5bGVUeXBlO1xuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gdGhpcy5wcm9wcy5tYXBTdHlsZT8ubWFwU3R5bGVzPy5bc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGlzVXNlckN1c3RvbVN0eWxlID0gQm9vbGVhbihjdXJyZW50U3R5bGU/LmN1c3RvbSk7XG4gICAgICBjb25zdCBzaG93QmFzZU1hcExpYkxvZ28gPSB1c2VzTWFwYm94IHx8ICFpc1VzZXJDdXN0b21TdHlsZTtcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNob3dCYXNlTWFwTGliTG9nbyxcbiAgICAgICAgYmFzZW1hcEF0dHJpYnV0aW9uc1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEZvciBub24tTWFwYm94IHN0eWxlcywgVGlsZUpTT04gYXR0cmlidXRpb24gcmVzb2x2ZXMgYXN5bmNocm9ub3VzbHlcbiAgICAgIC8vIGFmdGVyIHN0eWxlLmxvYWQuICBTdGFydCBhIGxpc3RlbmVyIHNvIHdlIGNhbiB1cGRhdGUgYmFzZW1hcEF0dHJpYnV0aW9uc1xuICAgICAgLy8gYXMgc29vbiBhcyB0aGUgc291cmNlcyByZXNvbHZlIHRoZWlyIFRpbGVKU09OLlxuICAgICAgaWYgKCF1c2VzTWFwYm94KSB7XG4gICAgICAgIHRoaXMuX2NvbGxlY3RCYXNlbWFwQXR0cmlidXRpb25zKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lciAmJiB0aGlzLl9tYXApIHtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignc291cmNlZGF0YScsIHRoaXMuX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXIpO1xuICAgICAgICB0aGlzLl9iYXNlbWFwU291cmNlRGF0YUxpc3RlbmVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9iYXNlbWFwSWRsZUxpc3RlbmVyICYmIHRoaXMuX21hcCkge1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdpZGxlJywgdGhpcy5fYmFzZW1hcElkbGVMaXN0ZW5lcik7XG4gICAgICAgIHRoaXMuX2Jhc2VtYXBJZGxlTGlzdGVuZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfY29sbGVjdEJhc2VtYXBBdHRyaWJ1dGlvbnMgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX21hcCkgcmV0dXJuO1xuICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICBsZXQgYXR0ZW1wdHMgPSAwO1xuICAgICAgLy8gQ2FwIHJldHJpZXMgc28gYSBzdHlsZSB0aGF0IG5ldmVyIHlpZWxkcyBhdHRyaWJ1dGlvbnMgZG9lc24ndCBsZWF2ZSBhXG4gICAgICAvLyBwZXJtYW5lbnQgc291cmNlZGF0YSBsaXN0ZW5lciBhdHRhY2hlZC5cbiAgICAgIGNvbnN0IE1BWF9BVFRFTVBUUyA9IDUwO1xuXG4gICAgICBjb25zdCB0cnlDb2xsZWN0ID0gKCkgPT4ge1xuICAgICAgICAvLyBUaWxlSlNPTiByZXNvbHZlcyBhc3luY2hyb25vdXNseTsgcmUtY29sbGVjdCBhdHRyaWJ1dGlvbnMgb25jZSBhXG4gICAgICAgIC8vIHNvdXJjZSdzIG1ldGFkYXRhIGlzIGF2YWlsYWJsZSBzbyBjdXN0b20gYmFzZW1hcCBhdHRyaWJ1dGlvbnMgYXJlIG5vdCBsb3N0LlxuICAgICAgICBjb25zdCBiYXNlbWFwQXR0cmlidXRpb25zID0gZ2V0QmFzZU1hcEF0dHJpYnV0aW9ucyh0aGlzLl9tYXApO1xuICAgICAgICBpZiAoYmFzZW1hcEF0dHJpYnV0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgICAgICAvLyBEb24ndCBjaGFuZ2Ugc2hvd0Jhc2VNYXBMaWJMb2dvIGhlcmUg4oCUIGl0IGlzIGZpeGVkIGF0IHN0eWxlLmxvYWQgdGltZVxuICAgICAgICAgIC8vIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHN0eWxlIHVzZXMgTWFwYm94IHRpbGVzLiAgV2Ugb25seSB1cGRhdGUgdGhlXG4gICAgICAgICAgLy8gcHJvdmlkZXIgYXR0cmlidXRpb25zIGNvbGxlY3RlZCBmcm9tIHRoZSByZXNvbHZlZCBUaWxlSlNPTi5cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtiYXNlbWFwQXR0cmlidXRpb25zfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25Tb3VyY2VEYXRhID0gKGU6IGFueSkgPT4ge1xuICAgICAgICAvLyBDb2xsZWN0IGF0dHJpYnV0aW9ucyB3aGVuOlxuICAgICAgICAvLyAgIChhKSBhIHNvdXJjZSdzIFRpbGVKU09OIGhhcyBqdXN0IGJlZW4gZmV0Y2hlZCAoc291cmNlRGF0YVR5cGUgPT09ICdtZXRhZGF0YScpIOKAlFxuICAgICAgICAvLyAgICAgICB0aGlzIGlzIHRoZSBlYXJsaWVzdCBtb21lbnQgdGhlIGBhdHRyaWJ1dGlvbmAgcHJvcGVydHkgaXMgYXZhaWxhYmxlIG9uIHRoZVxuICAgICAgICAvLyAgICAgICByZXNvbHZlZCBzb3VyY2Ugb2JqZWN0LCBvclxuICAgICAgICAvLyAgIChiKSBhIHNvdXJjZSBpcyBmdWxseSBsb2FkZWQgKGlzU291cmNlTG9hZGVkID09PSB0cnVlKSDigJQgZmFsbGJhY2sgZm9yIHJhc3RlclxuICAgICAgICAvLyAgICAgICBzb3VyY2VzIG9yIHN0eWxlcyB0aGF0IHNldCBhdHRyaWJ1dGlvbiBpbmxpbmUgcmF0aGVyIHRoYW4gdmlhIFRpbGVKU09OLlxuICAgICAgICBpZiAoIWU/LmlzU291cmNlTG9hZGVkICYmIGU/LnNvdXJjZURhdGFUeXBlICE9PSAnbWV0YWRhdGEnKSByZXR1cm47XG4gICAgICAgIGF0dGVtcHRzKys7XG4gICAgICAgIHRyeUNvbGxlY3QoKTtcbiAgICAgICAgaWYgKGF0dGVtcHRzID49IE1BWF9BVFRFTVBUUykge1xuICAgICAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBUaGUgYGlkbGVgIGV2ZW50IGZpcmVzIHdoZW4gdGhlIG1hcCBoYXMgZmluaXNoZWQgbG9hZGluZyBhbGwgcGVuZGluZ1xuICAgICAgLy8gcmVzb3VyY2VzICh0aWxlcywgVGlsZUpTT04sIHNwcml0ZXMpLiBBdCB0aGF0IHBvaW50IGF0dHJpYnV0aW9ucyBmcm9tXG4gICAgICAvLyBhbGwgc291cmNlcyBhcmUgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCwgc28gdGhpcyBpcyBhIHJlbGlhYmxlXG4gICAgICAvLyBvbmUtc2hvdCBmYWxsYmFjayB0aGF0IGNhdGNoZXMgY2FzZXMgd2hlcmUgdGhlIHNvdXJjZWRhdGEgbWV0YWRhdGFcbiAgICAgIC8vIGV2ZW50cyBhcmUgbWlzc2VkIG9yIHRoZSBzb3VyY2UgbmV2ZXIgcmVhY2hlcyBpc1NvdXJjZUxvYWRlZC5cbiAgICAgIGNvbnN0IG9uSWRsZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICAgIGNvbnN0IGJhc2VtYXBBdHRyaWJ1dGlvbnMgPSBnZXRCYXNlTWFwQXR0cmlidXRpb25zKHRoaXMuX21hcCk7XG4gICAgICAgIGlmIChiYXNlbWFwQXR0cmlidXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2Jhc2VtYXBBdHRyaWJ1dGlvbnN9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5fYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lciA9IG9uU291cmNlRGF0YTtcbiAgICAgIHRoaXMuX2Jhc2VtYXBJZGxlTGlzdGVuZXIgPSBvbklkbGU7XG4gICAgICB0aGlzLl9tYXAub24oJ3NvdXJjZWRhdGEnLCBvblNvdXJjZURhdGEpO1xuICAgICAgdGhpcy5fbWFwLm9uKCdpZGxlJywgb25JZGxlKTtcbiAgICB9O1xuXG4gICAgX3NldE1hcFJlZiA9IG1hcFJlZiA9PiB7XG4gICAgICAvLyBIYW5kbGUgY2hhbmdlIG9mIHRoZSBtYXAgbGlicmFyeVxuICAgICAgaWYgKHRoaXMuX21hcCAmJiBtYXBSZWYpIHtcbiAgICAgICAgY29uc3QgbWFwID0gbWFwUmVmLmdldE1hcCgpO1xuICAgICAgICBpZiAobWFwICYmIHRoaXMuX21hcCAhPT0gbWFwKSB7XG4gICAgICAgICAgdGhpcy5fbWFwLm9mZihNQVBCT1hHTF9TVFlMRV9VUERBVEUsIHRoaXMuX29uTWFwYm94U3R5bGVVcGRhdGUpO1xuICAgICAgICAgIHRoaXMuX21hcC5vZmYoTUFQQk9YR0xfUkVOREVSLCB0aGlzLl9vbk1hcFJlbmRlcik7XG4gICAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICAgICAgdGhpcy5fbWFwID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX21hcCAmJiBtYXBSZWYpIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwUmVmLmdldE1hcCgpO1xuICAgICAgICAvLyBpIG5vdGljZWQgaW4gY2VydGFpbiBjb250ZXh0IHdlIGRvbid0IGFjY2VzcyB0aGUgYWN0dWFsIG1hcCBlbGVtZW50XG4gICAgICAgIGlmICghdGhpcy5fbWFwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJpbmQgbWFwYm94Z2wgZXZlbnQgbGlzdGVuZXJcbiAgICAgICAgdGhpcy5fbWFwLm9uKE1BUEJPWEdMX1NUWUxFX1VQREFURSwgdGhpcy5fb25NYXBib3hTdHlsZVVwZGF0ZSk7XG4gICAgICAgIHRoaXMuX21hcC5vbihNQVBCT1hHTF9SRU5ERVIsIHRoaXMuX29uTWFwUmVuZGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMuZ2V0TWFwYm94UmVmKSB7XG4gICAgICAgIC8vIFRoZSBwYXJlbnQgY29tcG9uZW50IGNhbiBnYWluIGFjY2VzcyB0byBvdXIgTWFwYm94R2xNYXAgYnlcbiAgICAgICAgLy8gcHJvdmlkaW5nIHRoaXMgY2FsbGJhY2suIE5vdGUgdGhhdCAnbWFwYm94JyB3aWxsIGJlIG51bGwgd2hlbiB0aGVcbiAgICAgICAgLy8gcmVmIGlzIHVuc2V0IChlLmcuIHdoZW4gYSBzcGxpdCBtYXAgaXMgY2xvc2VkKS5cbiAgICAgICAgdGhpcy5wcm9wcy5nZXRNYXBib3hSZWYobWFwUmVmLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX29uRGVja0luaXRpYWxpemVkKGRldmljZSkge1xuICAgICAgaWYgKHRoaXMucHJvcHMub25EZWNrSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkRlY2tJbml0aWFsaXplZCh0aGlzLl9kZWNrLCBkZXZpY2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDEpIEFsbG93IGVmZmVjdHMgb25seSBmb3IgdGhlIGZpcnN0IHZpZXcuXG4gICAgICogMikgUHJldmVudCBlZmZlY3Q6cHJlUmVuZGVyIGNhbGwgd2l0aG91dCB2YWxpZCBnZW5lcmF0ZWQgdmlld3BvcnRzLlxuICAgICAqIEBwYXJhbSB2aWV3SW5kZXggVmlldyBpbmRleC5cbiAgICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgZWZmZWN0cyBjYW4gYmUgdXNlZC5cbiAgICAgKi9cbiAgICBfaXNPS1RvUmVuZGVyRWZmZWN0cyh2aWV3SW5kZXg/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAhdmlld0luZGV4ICYmIEJvb2xlYW4odGhpcy5fZGVjaz8udmlld01hbmFnZXI/Ll92aWV3cG9ydHM/Lmxlbmd0aCk7XG4gICAgfVxuXG4gICAgX29uQmVmb3JlUmVuZGVyID0gKCkgPT4ge1xuICAgICAgLy8gbm8tb3BcbiAgICB9O1xuXG4gICAgX2Fubm90YXRpb25WaWV3cG9ydENhY2hlOiB7a2V5OiBzdHJpbmc7IHZpZXdwb3J0OiBhbnl9IHwgbnVsbCA9IG51bGw7XG5cbiAgICBfd2FzSW50ZXJhY3RpbmcgPSBmYWxzZTtcblxuICAgIF9nZXRBbm5vdGF0aW9uVmlld3BvcnQobWFwU3RhdGU6IGFueSwgaW50ZXJuYWxWaWV3U3RhdGU6IGFueSkge1xuICAgICAgY29uc3QgbG9uZ2l0dWRlID0gaW50ZXJuYWxWaWV3U3RhdGU/LmxvbmdpdHVkZSA/PyBtYXBTdGF0ZS5sb25naXR1ZGU7XG4gICAgICBjb25zdCBsYXRpdHVkZSA9IGludGVybmFsVmlld1N0YXRlPy5sYXRpdHVkZSA/PyBtYXBTdGF0ZS5sYXRpdHVkZTtcbiAgICAgIGNvbnN0IHpvb20gPSBpbnRlcm5hbFZpZXdTdGF0ZT8uem9vbSA/PyBtYXBTdGF0ZS56b29tO1xuICAgICAgY29uc3QgcGl0Y2ggPSBpbnRlcm5hbFZpZXdTdGF0ZT8ucGl0Y2ggPz8gbWFwU3RhdGUucGl0Y2ggPz8gMDtcbiAgICAgIGNvbnN0IGJlYXJpbmcgPSBpbnRlcm5hbFZpZXdTdGF0ZT8uYmVhcmluZyA/PyBtYXBTdGF0ZS5iZWFyaW5nID8/IDA7XG4gICAgICBjb25zdCB3aWR0aCA9IG1hcFN0YXRlLndpZHRoIHx8IDA7XG4gICAgICBjb25zdCBoZWlnaHQgPSBtYXBTdGF0ZS5oZWlnaHQgfHwgMDtcbiAgICAgIGNvbnN0IGtleSA9IGAke2xvbmdpdHVkZX0sJHtsYXRpdHVkZX0sJHt6b29tfSwke3BpdGNofSwke2JlYXJpbmd9LCR7d2lkdGh9LCR7aGVpZ2h0fWA7XG5cbiAgICAgIGlmICh0aGlzLl9hbm5vdGF0aW9uVmlld3BvcnRDYWNoZT8ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Fubm90YXRpb25WaWV3cG9ydENhY2hlLnZpZXdwb3J0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXJnZWRTdGF0ZSA9IHsuLi5tYXBTdGF0ZSwgLi4uaW50ZXJuYWxWaWV3U3RhdGUsIHdpZHRoLCBoZWlnaHR9O1xuICAgICAgY29uc3QgdnAgPSBnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZShtZXJnZWRTdGF0ZSkgYXMgYW55O1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSB7XG4gICAgICAgIHByb2plY3Q6IChsbmdMYXQ6IFtudW1iZXIsIG51bWJlcl0pID0+IHZwLnByb2plY3QobG5nTGF0KSBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICB1bnByb2plY3Q6ICh4eTogW251bWJlciwgbnVtYmVyXSkgPT4gdnAudW5wcm9qZWN0KHh5KSBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICBsb25naXR1ZGUsXG4gICAgICAgIGxhdGl0dWRlLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICB6b29tXG4gICAgICB9O1xuICAgICAgdGhpcy5fYW5ub3RhdGlvblZpZXdwb3J0Q2FjaGUgPSB7a2V5LCB2aWV3cG9ydH07XG4gICAgICByZXR1cm4gdmlld3BvcnQ7XG4gICAgfVxuXG4gICAgX29uRGVja0Vycm9yID0gKGVycm9yLCBsYXllcikgPT4ge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3I/Lm1lc3NhZ2UgfHwgJ3Vua25vd24tZXJyb3InO1xuICAgICAgY29uc3QgbGF5ZXJNZXNzYWdlID0gbGF5ZXI/LmlkID8gYCBpbiAke2xheWVyLmlkfSBsYXllcmAgOiAnJztcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZUZ1bGwgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09ICdXZWJHTCBjb250ZXh0IGlzIGxvc3QnXG4gICAgICAgICAgPyAnWW91ciBHUFUgd2FzIGRpc2Nvbm5lY3RlZC4gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdXIgY29tcHV0ZXIgZ29lcyB0byBzbGVlcC4gSXQgY2FuIGFsc28gb2NjdXIgZm9yIG90aGVyIHJlYXNvbnMsIHN1Y2ggYXMgaWYgeW91IGFyZSBydW5uaW5nIHRvbyBtYW55IEdQVSBhcHBsaWNhdGlvbnMuJ1xuICAgICAgICAgIDogYEFuIGVycm9yIGluIGRlY2suZ2w6ICR7ZXJyb3JNZXNzYWdlfSR7bGF5ZXJNZXNzYWdlfS5gO1xuXG4gICAgICAvLyBUaHJvdHRsZSBlcnJvciBub3RpZmljYXRpb25zLCBhcyBSZWFjdCBkb2Vzbid0IGxpa2UgdG9vIG1hbnkgc3RhdGUgY2hhbmdlcyBmcm9tIGhlcmUuXG4gICAgICBjb25zdCBsYXN0U2hvd24gPSB0aGlzLl9kZWNrR0xFcnJvcnNFbGFwc2VkW2Vycm9yTWVzc2FnZUZ1bGxdO1xuICAgICAgaWYgKCFsYXN0U2hvd24gfHwgbGFzdFNob3duIDwgRGF0ZS5ub3coKSAtIFRIUk9UVExFX05PVElGSUNBVElPTl9USU1FKSB7XG4gICAgICAgIHRoaXMuX2RlY2tHTEVycm9yc0VsYXBzZWRbZXJyb3JNZXNzYWdlRnVsbF0gPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIC8vIE1hcmsgbGF5ZXIgYXMgaW52YWxpZFxuICAgICAgICBsZXQgZXh0cmFMYXllck1lc3NhZ2UgPSAnJztcbiAgICAgICAgY29uc3Qge3Zpc1N0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAobGF5ZXIpIHtcbiAgICAgICAgICBsZXQgdG9wTW9zdExheWVyID0gbGF5ZXI7XG4gICAgICAgICAgd2hpbGUgKHRvcE1vc3RMYXllci5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRvcE1vc3RMYXllciA9IHRvcE1vc3RMYXllci5wYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0b3BNb3N0TGF5ZXIucHJvcHM/LmlkKSB7XG4gICAgICAgICAgICB2aXNTdGF0ZUFjdGlvbnMubGF5ZXJTZXRJc1ZhbGlkKHRvcE1vc3RMYXllciwgZmFsc2UpO1xuICAgICAgICAgICAgZXh0cmFMYXllck1lc3NhZ2UgPSAnVGhlIGxheWVyIGhhcyBiZWVuIGRpc2FibGVkIGFuZCBoaWdobGlnaHRlZC4nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBuZXcgZXJyb3Igbm90aWZpY2F0aW9uIG9yIHVwZGF0ZSBleGlzdGluZyBvbmUgd2l0aCBzYW1lIGlkLlxuICAgICAgICAvLyBVcGRhdGUgaXMgcmVxdWlyZWQgdG8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIG5vdGlmaWNhdGlvbnMgYXMgdGhleSBwcm9iYWJseSBhcmUgZ29pbmcgdG8gXCJqdW1wXCIgYmFzZWQgb24gb3JkZXIgb2YgZXJyb3JzLlxuICAgICAgICBjb25zdCB7dWlTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgdWlTdGF0ZUFjdGlvbnMuYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke2Vycm9yTWVzc2FnZUZ1bGx9ICR7ZXh0cmFMYXllck1lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiBlcnJvck1lc3NhZ2VGdWxsIC8vIHRyZWF0IHRoZSBlcnJvciBtZXNzYWdlIGFzIGlkXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyogY29tcG9uZW50IHJlbmRlciBmdW5jdGlvbnMgKi9cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbiAgICBfcmVuZGVyTWFwUG9wb3ZlcigpIHtcbiAgICAgIC8vIHRoaXMgY2hlY2sgaXMgZm9yIGxpbWl0aW5nIHRoZSBkaXNwbGF5IG9mIHRoZSBgPE1hcFBvcG92ZXI+YCB0byB0aGUgYDxNYXBDb250YWluZXI+YCB0aGUgdXNlciBpcyBpbnRlcmFjdGluZyB3aXRoXG4gICAgICAvLyB0aGUgRGVja0dMIG9uSG92ZXIgZXZlbnQgaGFuZGxlciBhZGRzIGEgYG1hcEluZGV4YCBwcm9wZXJ0eSB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIGBob3ZlckluZm9gIG9iamVjdCBvZiBgdmlzU3RhdGVgXG4gICAgICBpZiAodGhpcy5wcm9wcy5pbmRleCAhPT0gdGhpcy5wcm9wcy52aXNTdGF0ZS5ob3ZlckluZm8/Lm1hcEluZGV4KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBtb3ZlIHRoaXMgaW50byByZWR1Y2VyIHNvIGl0IGNhbiBiZSB0ZXN0ZWRcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgIHZpc1N0YXRlOiB7XG4gICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgIGNsaWNrZWQsXG4gICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICBtb3VzZVBvczoge21vdXNlUG9zaXRpb24sIGNvb3JkaW5hdGUsIHBpbm5lZH1cbiAgICAgICAgfVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBsYXllcnNUb1JlbmRlciA9IHRoaXMubGF5ZXJzVG9SZW5kZXJTZWxlY3Rvcih0aGlzLnByb3BzKTtcblxuICAgICAgaWYgKCFtb3VzZVBvc2l0aW9uIHx8ICFpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYXllckhvdmVyUHJvcCA9IGdldExheWVySG92ZXJQcm9wKHtcbiAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICBsYXllcnMsXG4gICAgICAgIGxheWVyc1RvUmVuZGVyLFxuICAgICAgICBkYXRhc2V0c1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbXBhcmVNb2RlID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWdcbiAgICAgICAgPyBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5jb21wYXJlTW9kZVxuICAgICAgICA6IGZhbHNlO1xuXG4gICAgICBsZXQgcGlubmVkUG9zaXRpb24gPSB7eDogMCwgeTogMH07XG4gICAgICBsZXQgbGF5ZXJQaW5uZWRQcm9wOiBMYXllckhvdmVyUHJvcCB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKHBpbm5lZCB8fCBjbGlja2VkKSB7XG4gICAgICAgIC8vIHByb2plY3QgbG5nbGF0IHRvIHNjcmVlbiBzbyB0aGF0IHRvb2x0aXAgZm9sbG93cyB0aGUgb2JqZWN0IG9uIHpvb21cbiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZShtYXBTdGF0ZSk7XG4gICAgICAgIGNvbnN0IGxuZ0xhdCA9IGNsaWNrZWQgPyBjbGlja2VkLmNvb3JkaW5hdGUgOiBwaW5uZWQuY29vcmRpbmF0ZTtcbiAgICAgICAgcGlubmVkUG9zaXRpb24gPSB0aGlzLl9nZXRIb3ZlclhZKHZpZXdwb3J0LCBsbmdMYXQpO1xuICAgICAgICBsYXllclBpbm5lZFByb3AgPSBnZXRMYXllckhvdmVyUHJvcCh7XG4gICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgIGhvdmVySW5mbzogY2xpY2tlZCxcbiAgICAgICAgICBsYXllcnMsXG4gICAgICAgICAgbGF5ZXJzVG9SZW5kZXIsXG4gICAgICAgICAgZGF0YXNldHNcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChsYXllckhvdmVyUHJvcCAmJiBsYXllclBpbm5lZFByb3ApIHtcbiAgICAgICAgICBsYXllckhvdmVyUHJvcC5wcmltYXJ5RGF0YSA9IGxheWVyUGlubmVkUHJvcC5kYXRhO1xuICAgICAgICAgIGxheWVySG92ZXJQcm9wLmNvbXBhcmVUeXBlID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuY29tcGFyZVR5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tbW9uUHJvcCA9IHtcbiAgICAgICAgb25DbG9zZTogdGhpcy5fb25DbG9zZU1hcFBvcG92ZXIsXG4gICAgICAgIHpvb206IG1hcFN0YXRlLnpvb20sXG4gICAgICAgIGNvbnRhaW5lcjogdGhpcy5fZGVjayA/IHRoaXMuX2RlY2suY2FudmFzIDogdW5kZWZpbmVkXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RXJyb3JCb3VuZGFyeT5cbiAgICAgICAgICB7bGF5ZXJQaW5uZWRQcm9wICYmIChcbiAgICAgICAgICAgIDxNYXBQb3BvdmVyXG4gICAgICAgICAgICAgIHsuLi5waW5uZWRQb3NpdGlvbn1cbiAgICAgICAgICAgICAgey4uLmNvbW1vblByb3B9XG4gICAgICAgICAgICAgIGxheWVySG92ZXJQcm9wPXtsYXllclBpbm5lZFByb3B9XG4gICAgICAgICAgICAgIGNvb3JkaW5hdGU9e2ludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZCAmJiAocGlubmVkIHx8IHt9KS5jb29yZGluYXRlfVxuICAgICAgICAgICAgICBmcm96ZW49e3RydWV9XG4gICAgICAgICAgICAgIGlzQmFzZT17Y29tcGFyZU1vZGV9XG4gICAgICAgICAgICAgIG9uU2V0RmVhdHVyZXM9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldEZlYXR1cmVzfVxuICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmU9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkRmVhdHVyZX1cbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICdSZWFkb25seTxNYXBDb250YWluZXJQcm9wcz4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICduZXZlcidcbiAgICAgICAgICAgICAgZmVhdHVyZUNvbGxlY3Rpb249e3RoaXMuZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7bGF5ZXJIb3ZlclByb3AgJiYgKCFsYXllclBpbm5lZFByb3AgfHwgY29tcGFyZU1vZGUpICYmIChcbiAgICAgICAgICAgIDxNYXBQb3BvdmVyXG4gICAgICAgICAgICAgIHg9e21vdXNlUG9zaXRpb25bMF19XG4gICAgICAgICAgICAgIHk9e21vdXNlUG9zaXRpb25bMV19XG4gICAgICAgICAgICAgIHsuLi5jb21tb25Qcm9wfVxuICAgICAgICAgICAgICBsYXllckhvdmVyUHJvcD17bGF5ZXJIb3ZlclByb3B9XG4gICAgICAgICAgICAgIGZyb3plbj17ZmFsc2V9XG4gICAgICAgICAgICAgIGNvb3JkaW5hdGU9e2ludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZCAmJiBjb29yZGluYXRlfVxuICAgICAgICAgICAgICBvblNldEZlYXR1cmVzPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRGZWF0dXJlc31cbiAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRGZWF0dXJlPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEZlYXR1cmV9XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgQXJndW1lbnQgb2YgdHlwZSAnUmVhZG9ubHk8TWFwQ29udGFpbmVyUHJvcHM+JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInXG4gICAgICAgICAgICAgIGZlYXR1cmVDb2xsZWN0aW9uPXt0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRXJyb3JCb3VuZGFyeT5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbiAgICBfZ2V0SG92ZXJYWSh2aWV3cG9ydCwgbG5nTGF0KSB7XG4gICAgICBjb25zdCBzY3JlZW5Db29yZCA9ICF2aWV3cG9ydCB8fCAhbG5nTGF0ID8gbnVsbCA6IHZpZXdwb3J0LnByb2plY3QobG5nTGF0KTtcbiAgICAgIHJldHVybiBzY3JlZW5Db29yZCAmJiB7eDogc2NyZWVuQ29vcmRbMF0sIHk6IHNjcmVlbkNvb3JkWzFdfTtcbiAgICB9XG5cbiAgICBfcmVuZGVyRGVja092ZXJsYXkoXG4gICAgICBsYXllcnNGb3JEZWNrLFxuICAgICAgb3B0aW9uczoge3ByaW1hcnlNYXA6IGJvb2xlYW47IGlzSW50ZXJhY3RpdmU/OiBib29sZWFuOyBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZX0gPSB7XG4gICAgICAgIHByaW1hcnlNYXA6IGZhbHNlXG4gICAgICB9XG4gICAgKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcFN0eWxlLFxuICAgICAgICB2aXNTdGF0ZSxcbiAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgZGVja0dsUHJvcHMsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBtYXBDb250cm9scyxcbiAgICAgICAgZGVja1JlbmRlckNhbGxiYWNrcyxcbiAgICAgICAgdGhlbWUsXG4gICAgICAgIGdlbmVyYXRlRGVja0dMTGF5ZXJzLFxuICAgICAgICBvbk1vdXNlTW92ZVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IHtob3ZlckluZm8sIGVkaXRvcn0gPSB2aXNTdGF0ZTtcbiAgICAgIGNvbnN0IHtwcmltYXJ5TWFwLCBpc0ludGVyYWN0aXZlLCBjaGlsZHJlbn0gPSBvcHRpb25zO1xuXG4gICAgICAvLyBkaXNhYmxlIGRvdWJsZSBjbGljayB6b29tIHdoZW4gZWRpdG9yIGlzIGluIGFueSBkcmF3IG1vZGVcbiAgICAgIGNvbnN0IHttYXBEcmF3fSA9IG1hcENvbnRyb2xzO1xuICAgICAgY29uc3Qge2FjdGl2ZTogZWRpdG9yTWVudUFjdGl2ZSA9IGZhbHNlfSA9IG1hcERyYXcgfHwge307XG4gICAgICBjb25zdCBpc0VkaXRvckRyYXdpbmdNb2RlID0gRWRpdG9yTGF5ZXJVdGlscy5pc0RyYXdpbmdBY3RpdmUoZWRpdG9yTWVudUFjdGl2ZSwgZWRpdG9yLm1vZGUpO1xuXG4gICAgICBjb25zdCBpbnRlcm5hbFZpZXdTdGF0ZSA9IHRoaXMuY29udGV4dD8uZ2V0SW50ZXJuYWxWaWV3U3RhdGUoaW5kZXgpO1xuICAgICAgY29uc3QgaW50ZXJuYWxNYXBTdGF0ZSA9IHsuLi5tYXBTdGF0ZSwgLi4uaW50ZXJuYWxWaWV3U3RhdGV9O1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSBnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZShpbnRlcm5hbE1hcFN0YXRlKTtcblxuICAgICAgY29uc3QgZWRpdG9yRmVhdHVyZVNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkUG9seWdvbkluZGV4U2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIGNvbnN0IHtzZXRGZWF0dXJlcywgb25MYXllckNsaWNrLCBzZXRTZWxlY3RlZEZlYXR1cmV9ID0gdmlzU3RhdGVBY3Rpb25zO1xuXG4gICAgICBjb25zdCBnZW5lcmF0ZURlY2tHTExheWVyc01ldGhvZCA9IGdlbmVyYXRlRGVja0dMTGF5ZXJzID8/IGNvbXB1dGVEZWNrTGF5ZXJzO1xuXG4gICAgICBjb25zdCBleHRyYURlY2tQYXJhbXM6IHtcbiAgICAgICAgZ2V0VG9vbHRpcD86IChpbmZvOiBhbnkpID0+IG9iamVjdCB8IG51bGw7XG4gICAgICAgIGdldEN1cnNvcj86ICh7aXNEcmFnZ2luZ306IHtpc0RyYWdnaW5nOiBib29sZWFufSkgPT4gc3RyaW5nO1xuICAgICAgfSA9IHt9O1xuICAgICAgaWYgKHByaW1hcnlNYXApIHtcbiAgICAgICAgLy8gT21pdCBob3ZlciB1cGRhdGVzIHdoZW4gdGhlIHBvaW50ZXIgcG9zaXRpb24gaXMgaW52YWxpZCwgaWUuIG92ZXIgVUkgb3ZlcmxheXMgb3JcbiAgICAgICAgLy8gb3V0c2lkZSB0aGUgbWFwIGNvbnRhaW5lci4gSW4gdGhvc2UgY2FzZXMgeC95IG1heSBiZSA8IDBcbiAgICAgICAgZXh0cmFEZWNrUGFyYW1zLmdldFRvb2x0aXAgPSBpbmZvID0+IHtcbiAgICAgICAgICBjb25zdCB4ID0gTnVtYmVyKGluZm8/LngpO1xuICAgICAgICAgIGNvbnN0IHkgPSBOdW1iZXIoaW5mbz8ueSk7XG4gICAgICAgICAgaWYgKE51bWJlci5pc05hTih4KSB8fCBOdW1iZXIuaXNOYU4oeSkgfHwgeCA8IDAgfHwgeSA8IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgcmV0dXJuIEVkaXRvckxheWVyVXRpbHMuZ2V0VG9vbHRpcChpbmZvLCB7XG4gICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBleHRyYURlY2tQYXJhbXMuZ2V0Q3Vyc29yID0gKHtpc0RyYWdnaW5nfToge2lzRHJhZ2dpbmc6IGJvb2xlYW59KSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yQ3Vyc29yID0gRWRpdG9yTGF5ZXJVdGlscy5nZXRDdXJzb3Ioe1xuICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgIGhvdmVySW5mb1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChlZGl0b3JDdXJzb3IpIHJldHVybiBlZGl0b3JDdXJzb3I7XG5cbiAgICAgICAgICBpZiAoaXNEcmFnZ2luZykgcmV0dXJuICdncmFiYmluZyc7XG4gICAgICAgICAgaWYgKGhvdmVySW5mbz8ubGF5ZXIpIHJldHVybiAncG9pbnRlcic7XG4gICAgICAgICAgcmV0dXJuICdncmFiJztcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWZmZWN0cyA9IHRoaXMuX2lzT0tUb1JlbmRlckVmZmVjdHMoaW5kZXgpXG4gICAgICAgID8gY29tcHV0ZURlY2tFZmZlY3RzKHt2aXNTdGF0ZSwgbWFwU3RhdGUsIGlzRXhwb3J0OiB0aGlzLnByb3BzLmlzRXhwb3J0fSlcbiAgICAgICAgOiBbXTtcblxuICAgICAgY29uc3QgaXNHbG9iZU1vZGUgPSBtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZDtcblxuICAgICAgLy8gSW4gZ2xvYmUgbW9kZSB3aXRoIGEgbm9uLWRlZmF1bHQgYmxlbmQgbW9kZSwgZm9yd2FyZCBwcmUtY29tcHV0ZWQgbGF5ZXJcbiAgICAgIC8vIHJlbmRlcmluZyBwYXJhbWV0ZXJzIGludG8gbWFwU3RhdGUgc28gaW5kaXZpZHVhbCBsYXllcnMgY2FuIG1lcmdlIHRoZW0gaW50b1xuICAgICAgLy8gdGhlaXIgb3duIHBhcmFtZXRlcnMgb2JqZWN0cy4gVGhlIGdsb2JhbCBEZWNrR0wgcGFyYW1ldGVycyBjYW5ub3QgYmUgdXNlZCBpblxuICAgICAgLy8gZ2xvYmUgbW9kZSBiZWNhdXNlIHRoZXkgYXJlIG1lcmdlZCBpbnRvIGdsb2JlIHN5c3RlbSBsYXllcnMgKGF0bW9zcGhlcmUsXG4gICAgICAvLyBzdXJmYWNlLCBldGMuKSBhbmQgYWx0ZXIgdGhlaXIgY2FyZWZ1bGx5IHR1bmVkIGJsZW5kL2RlcHRoIHN0YXRlLlxuICAgICAgLy8gJ25vcm1hbCcgaXMgb21pdHRlZCDigJQgaXQgaXMgdGhlIFdlYkdMIGRlZmF1bHQgYW5kIGluamVjdGluZyBpdCB3b3VsZFxuICAgICAgLy8gb3ZlcnJpZGUgaW50ZW50aW9uYWwgYmxlbmQ6ZmFsc2Ugc2V0dGluZ3Mgb24gbGF5ZXJzIGxpa2UgdHJpcC9zY2VuZWdyYXBoLlxuICAgICAgY29uc3QgbGF5ZXJCbGVuZGluZ1BhcmFtcyA9XG4gICAgICAgIGlzR2xvYmVNb2RlICYmIHZpc1N0YXRlLmxheWVyQmxlbmRpbmcgJiYgdmlzU3RhdGUubGF5ZXJCbGVuZGluZyAhPT0gJ25vcm1hbCdcbiAgICAgICAgICA/IGdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzKHZpc1N0YXRlLmxheWVyQmxlbmRpbmcpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBkZWNrTGF5ZXJzTWFwU3RhdGUgPSBsYXllckJsZW5kaW5nUGFyYW1zXG4gICAgICAgID8gey4uLmludGVybmFsTWFwU3RhdGUsIGxheWVyUGFyYW1ldGVyczogbGF5ZXJCbGVuZGluZ1BhcmFtc31cbiAgICAgICAgOiBpbnRlcm5hbE1hcFN0YXRlO1xuXG4gICAgICBjb25zdCBkZWNrR2xMYXllcnMgPSBnZW5lcmF0ZURlY2tHTExheWVyc01ldGhvZChcbiAgICAgICAge1xuICAgICAgICAgIHZpc1N0YXRlLFxuICAgICAgICAgIG1hcFN0YXRlOiBkZWNrTGF5ZXJzTWFwU3RhdGUsXG4gICAgICAgICAgbWFwU3R5bGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG1hcEluZGV4OiBpbmRleCxcbiAgICAgICAgICBwcmltYXJ5TWFwLFxuICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgICBsYXllcnNGb3JEZWNrLFxuICAgICAgICAgIGVkaXRvckluZm86IHByaW1hcnlNYXBcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgICAgIG9uU2V0RmVhdHVyZXM6IHNldEZlYXR1cmVzLFxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZSxcbiAgICAgICAgICAgICAgICBvbkFwcGx5UG9seWdvbkZpbHRlckFsbDogdmlzU3RhdGVBY3Rpb25zLnNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnMsXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICdSZWFkb25seTxNYXBDb250YWluZXJQcm9wcz4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICduZXZlcidcbiAgICAgICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbjogdGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yKHRoaXMucHJvcHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZUluZGV4ZXM6IHRoaXMuc2VsZWN0ZWRGZWF0dXJlSW5kZXhBcnJheVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICd1bmtub3duJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbnVtYmVyJy5cbiAgICAgICAgICAgICAgICAgIGVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB2aWV3cG9ydFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25MYXllckhvdmVyOiB0aGlzLl9vbkxheWVySG92ZXIsXG4gICAgICAgICAgb25TZXRMYXllckRvbWFpbjogdGhpcy5fb25MYXllclNldERvbWFpbixcbiAgICAgICAgICBvbkZpbHRlcmVkSXRlbXNDaGFuZ2U6IHRoaXMuX29uTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlLFxuICAgICAgICAgIG9uV01TRmVhdHVyZUluZm86IHRoaXMuX29uV01TRmVhdHVyZUluZm8sXG4gICAgICAgICAgb25SZWRyYXdOZWVkZWQ6IHRoaXMuX29uUmVkcmF3TmVlZGVkLFxuICAgICAgICAgIG9uRml0Qm91bmRzOiB0aGlzLl9vbkZpdEJvdW5kc1xuICAgICAgICB9LFxuICAgICAgICBkZWNrR2xQcm9wc1xuICAgICAgKTtcblxuICAgICAgLy8gRm9sbG93IHRoZSBzZWxlY3RlZCBiYXNlbWFwIHN0eWxlJ3MgbGlicmFyeSBzbyB0aGUgZ2xvYmUgdXNlcyB0aGUgc2FtZVxuICAgICAgLy8gcHJvdmlkZXIgYXMgdGhlIGZsYXQgMkQgbWFwIChDQVJUTyB0aWxlcyBmb3IgTWFwTGlicmUgc3R5bGVzLCBNYXBib3hcbiAgICAgIC8vIHRpbGVzIGZvciBNYXBib3ggc3R5bGVzKS5cbiAgICAgIGNvbnN0IGdsb2JlQmFzZW1hcFByb3ZpZGVyID0gcmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyKFxuICAgICAgICBnZXRCYXNlTWFwTGlicmFyeShtYXBTdHlsZT8ubWFwU3R5bGVzPy5bbWFwU3R5bGU/LnN0eWxlVHlwZV0pLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbiB8fCAnJ1xuICAgICAgKTtcblxuICAgICAgLy8gSW4gZ2xvYmUgbW9kZSwgcHJlcGVuZCBnbG9iZSBiYXNlIGxheWVycyBhbmQgYXBwZW5kIHRvcCBsYXllcnNcbiAgICAgIGNvbnN0IGdsb2JlQmFzZUxheWVycyA9XG4gICAgICAgIGlzR2xvYmVNb2RlICYmIG1hcFN0YXRlLmdsb2JlXG4gICAgICAgICAgPyBnZXRHbG9iZUJhc2VMYXllcnMoe1xuICAgICAgICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogbWFwYm94QXBpQWNjZXNzVG9rZW4gfHwgJycsXG4gICAgICAgICAgICAgIGdsb2JlOiBtYXBTdGF0ZS5nbG9iZSxcbiAgICAgICAgICAgICAgbWFwU3R5bGVUeXBlOiBtYXBTdHlsZT8uc3R5bGVUeXBlLFxuICAgICAgICAgICAgICBiYXNlbWFwUHJvdmlkZXI6IGdsb2JlQmFzZW1hcFByb3ZpZGVyLFxuICAgICAgICAgICAgICAvLyBVc2UgdGhlIGxpdmUgKGludGVybmFsKSBsYXRpdHVkZSBzbyB0aGUgdGlsZSBMT0QgY29tcGVuc2F0aW9uXG4gICAgICAgICAgICAgIC8vIHN0YXlzIGluIHN5bmMgd2l0aCB0aGUgZGVjayB2aWV3cG9ydCBkdXJpbmcgYSBkcmFnOyBtYXBTdGF0ZVxuICAgICAgICAgICAgICAvLyBsYXRpdHVkZSBsYWdzIGJlaGluZCB3aGlsZSByb3RhdGluZy5cbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IGludGVybmFsTWFwU3RhdGUubGF0aXR1ZGUsXG4gICAgICAgICAgICAgIHpvb206IGludGVybmFsTWFwU3RhdGUuem9vbVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IFtdO1xuICAgICAgY29uc3QgZ2xvYmVUb3BMYXllcnMgPVxuICAgICAgICBpc0dsb2JlTW9kZSAmJiBtYXBTdGF0ZS5nbG9iZVxuICAgICAgICAgID8gZ2V0R2xvYmVUb3BMYXllcnMoe2dsb2JlOiBtYXBTdGF0ZS5nbG9iZSwgem9vbTogaW50ZXJuYWxNYXBTdGF0ZS56b29tfSlcbiAgICAgICAgICA6IFtdO1xuICAgICAgY29uc3QgZmluYWxEZWNrR2xMYXllcnMgPSBpc0dsb2JlTW9kZVxuICAgICAgICA/IFsuLi5nbG9iZUJhc2VMYXllcnMsIC4uLmRlY2tHbExheWVycywgLi4uZ2xvYmVUb3BMYXllcnNdXG4gICAgICAgIDogZGVja0dsTGF5ZXJzO1xuXG4gICAgICBjb25zdCB2aWV3cyA9IGRlY2tHbFByb3BzPy52aWV3c1xuICAgICAgICA/IGRlY2tHbFByb3BzPy52aWV3cygpXG4gICAgICAgIDogaXNHbG9iZU1vZGVcbiAgICAgICAgPyBuZXcgS2VwbGVyR2xvYmVWaWV3KHtcbiAgICAgICAgICAgIHJlc29sdXRpb246IDUsXG4gICAgICAgICAgICAvLyBUaGUgdmlzaWJsZSBiYWNrZ3JvdW5kIGFyb3VuZCB0aGUgZ2xvYmUgaXMgcGFpbnRlZCBieSB0aGUgbWFwXG4gICAgICAgICAgICAvLyBjb250YWluZXIncyBDU1MgYmFja2dyb3VuZCAoc2VlIHN0eWxlU2VsZWN0b3IpLCBOT1QgYnkgYSBwZXItdmlld1xuICAgICAgICAgICAgLy8gY29sb3IgY2xlYXIuIGRlY2suZ2wgYXBwbGllcyBhIFZpZXcncyBgY2xlYXJDb2xvcmAgaW4gKmV2ZXJ5KiBwYXNzLFxuICAgICAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSBwaWNraW5nIHBhc3MsIGFuZCBpdCBmb3JjZXMgdGhlIGNsZWFyZWQgYWxwaGEgdG8gMjU1XG4gICAgICAgICAgICAvLyAoYGNsZWFyQ29sb3JbM10gfHwgMjU1YCkuIEluIHRoZSBwaWNraW5nIGJ1ZmZlciB0aGUgYWxwaGEgYnl0ZSBlbmNvZGVzXG4gICAgICAgICAgICAvLyB0aGUgbGF5ZXIgaW5kZXgsIHNvIGEgMjU1IGNsZWFyIG1ha2VzIGRlY2suZ2wgZGVjb2RlIGV2ZXJ5IHBpeGVsIGFzIGFcbiAgICAgICAgICAgIC8vIG5vbi1leGlzdGVudCBsYXllciAoXCJQaWNrZWQgbm9uLWV4aXN0ZW50IGxheWVyLiBJcyBwaWNraW5nIGJ1ZmZlclxuICAgICAgICAgICAgLy8gY29ycnVwdD9cIikgb24gaG92ZXIuIGBjbGVhckNvbG9yOiBmYWxzZWAgc2tpcHMgdGhlIHBlci12aWV3IGNvbG9yXG4gICAgICAgICAgICAvLyBjbGVhciBzbyB0aGUgcGlja2luZyBidWZmZXIga2VlcHMgaXRzIDAgYWxwaGE7IHRoZSBjYW52YXMgc3RheXNcbiAgICAgICAgICAgIC8vIHRyYW5zcGFyZW50IGFuZCB0aGUgQ1NTIGJhY2tncm91bmQgc2hvd3MgdGhyb3VnaC5cbiAgICAgICAgICAgIGNsZWFyOiB0cnVlLFxuICAgICAgICAgICAgY2xlYXJDb2xvcjogZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICA6IG5ldyBNYXBWaWV3KHtmYXJaTXVsdGlwbGllcjogMS4yfSk7XG5cbiAgICAgIGxldCBhbGxEZWNrR2xQcm9wcyA9IHtcbiAgICAgICAgLi4uZGVja0dsUHJvcHMsXG4gICAgICAgIHBpY2tpbmdSYWRpdXM6IERFRkFVTFRfUElDS0lOR19SQURJVVMsXG4gICAgICAgIHZpZXdzLFxuICAgICAgICBsYXllcnM6IGZpbmFsRGVja0dsTGF5ZXJzLFxuICAgICAgICBlZmZlY3RzLFxuICAgICAgICBwYXJhbWV0ZXJzOiBpc0dsb2JlTW9kZSA/IHtjdWxsOiB0cnVlfSA6IGdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzKHZpc1N0YXRlLmxheWVyQmxlbmRpbmcpXG4gICAgICB9O1xuXG4gICAgICBpZiAodHlwZW9mIGRlY2tSZW5kZXJDYWxsYmFja3M/Lm9uRGVja1JlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhbGxEZWNrR2xQcm9wcyA9IGRlY2tSZW5kZXJDYWxsYmFja3Mub25EZWNrUmVuZGVyKGFsbERlY2tHbFByb3BzKTtcbiAgICAgICAgaWYgKCFhbGxEZWNrR2xQcm9wcykge1xuICAgICAgICAgIC8vIGlmIG9uRGVja1JlbmRlciByZXR1cm5zIG51bGwsIGRvIG5vdCByZW5kZXIgZGVjay5nbFxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICB7Li4uKGlzSW50ZXJhY3RpdmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIG9uTW91c2VNb3ZlOiBwcmltYXJ5TWFwXG4gICAgICAgICAgICAgICAgICA/IGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTW92ZT8uKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbk1vdXNlTW92ZURlYm91bmNlZChldmVudCwgdmlld3BvcnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtzdHlsZToge3BvaW50ZXJFdmVudHM6ICdub25lJ319KX1cbiAgICAgICAgPlxuICAgICAgICAgIDxEZWNrR0xcbiAgICAgICAgICAgIGlkPVwiZGVmYXVsdC1kZWNrZ2wtb3ZlcmxheVwiXG4gICAgICAgICAgICBvbkxvYWQ9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWNrUmVuZGVyQ2FsbGJhY2tzPy5vbkRlY2tMb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGVja1JlbmRlckNhbGxiYWNrcy5vbkRlY2tMb2FkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB7Li4uYWxsRGVja0dsUHJvcHN9XG4gICAgICAgICAgICBjb250cm9sbGVyPXtcbiAgICAgICAgICAgICAgaXNJbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBkb3VibGVDbGlja1pvb206ICFpc0VkaXRvckRyYXdpbmdNb2RlLFxuICAgICAgICAgICAgICAgICAgICBkcmFnUm90YXRlOiB0aGlzLnByb3BzLm1hcFN0YXRlLmRyYWdSb3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIG1heFBpdGNoOiB0aGlzLnByb3BzLm1hcFN0YXRlLm1heFBpdGNoID8/IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkubWF4UGl0Y2gsXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIGdsb2JlIG1vZGUgYWxsb3cgem9vbWluZyBvdXQgZnVydGhlciB0aGFuIGRlY2suZ2wncyBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIC8vIG9mIDAgc28gdGhlIHdob2xlIGdsb2JlIGNhbiBiZSBwdWxsZWQgYmFjayBvbiBzY3JlZW4uIFNldCBvbiB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbGxlciBzbyBpdCBzdGF5cyBhdXRob3JpdGF0aXZlIHJlZ2FyZGxlc3Mgb2YgdGhlIHZpZXdTdGF0ZVxuICAgICAgICAgICAgICAgICAgICAvLyByb3VuZC10cmlwIHRocm91Z2ggUmVkdXgvbG9jYWwgY29udGV4dC4gQ2FwIHRoZSBtYXggem9vbSB0b28gc29cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGJhc2VtYXAgdGlsZXMgZG9uJ3QgYnJlYWsgZG93biBhdCBoaWdoIGdsb2JlIHpvb20uXG4gICAgICAgICAgICAgICAgICAgIC4uLihpc0dsb2JlTW9kZSA/IHttaW5ab29tOiBHTE9CRV9NSU5fWk9PTSwgbWF4Wm9vbTogR0xPQkVfTUFYX1pPT019IDoge30pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmlld1N0YXRlPXtcbiAgICAgICAgICAgICAgaXNHbG9iZU1vZGVcbiAgICAgICAgICAgICAgICA/IHsuLi5pbnRlcm5hbFZpZXdTdGF0ZSwgbWluWm9vbTogR0xPQkVfTUlOX1pPT00sIG1heFpvb206IEdMT0JFX01BWF9aT09NfVxuICAgICAgICAgICAgICAgIDogaW50ZXJuYWxWaWV3U3RhdGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uQmVmb3JlUmVuZGVyPXt0aGlzLl9vbkJlZm9yZVJlbmRlcn1cbiAgICAgICAgICAgIG9uVmlld1N0YXRlQ2hhbmdlPXtpc0ludGVyYWN0aXZlID8gdGhpcy5fb25WaWV3cG9ydENoYW5nZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIHsuLi5leHRyYURlY2tQYXJhbXN9XG4gICAgICAgICAgICBvbkhvdmVyPXtcbiAgICAgICAgICAgICAgaXNJbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICAgID8gZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IEVkaXRvckxheWVyVXRpbHMub25Ib3ZlcihkYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgaG92ZXJJbmZvXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25MYXllckhvdmVyRGVib3VuY2VkKGRhdGEsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhkYXRhLCBldmVudCkgPT4ge1xuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZUV2ZW50KGV2ZW50LnNyY0V2ZW50LCB2aWV3cG9ydCk7XG5cbiAgICAgICAgICAgICAgLy8gSGFuZGxlIGJpdG1hcCBsYXllciBhbGlnbm1lbnQgbW9kZTogaWYgYSBiaXRtYXAgbGF5ZXIgaXMgd2FpdGluZ1xuICAgICAgICAgICAgICAvLyBmb3IgYSBtYXAgY2xpY2ssIHJvdXRlIHRoZSBjbGljayBjb29yZGluYXRlIHRvIGl0XG4gICAgICAgICAgICAgIGlmIChkYXRhLmNvb3JkaW5hdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGlnbmluZ0xheWVyID0gdmlzU3RhdGUubGF5ZXJzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAobDogYW55KSA9PiBsLnR5cGUgPT09ICdiaXRtYXAnICYmIGwuYWxpZ25XYWl0aW5nRm9yTWFwICYmIGwuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGFsaWduaW5nTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgIChhbGlnbmluZ0xheWVyIGFzIGFueSkub25BbGlnbk1hcENsaWNrKGRhdGEuY29vcmRpbmF0ZSBhcyBbbnVtYmVyLCBudW1iZXJdKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX29uUmVkcmF3TmVlZGVkKDApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJlcyA9IEVkaXRvckxheWVyVXRpbHMub25DbGljayhkYXRhLCBldmVudCwge1xuICAgICAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgIG9uTGF5ZXJDbGljayxcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgbWFwSW5kZXg6IGluZGV4XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAocmVzKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgdmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJDbGljayhkYXRhKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkVycm9yPXt0aGlzLl9vbkRlY2tFcnJvcn1cbiAgICAgICAgICAgIHJlZj17Y29tcCA9PiB7XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgaWYgKGNvbXAgJiYgY29tcC5kZWNrICYmICF0aGlzLl9kZWNrKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIHRoaXMuX2RlY2sgPSBjb21wLmRlY2s7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkRldmljZUluaXRpYWxpemVkPXtkZXZpY2UgPT4gdGhpcy5fb25EZWNrSW5pdGlhbGl6ZWQoZGV2aWNlKX1cbiAgICAgICAgICAgIG9uQWZ0ZXJSZW5kZXI9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWNrUmVuZGVyQ2FsbGJhY2tzPy5vbkRlY2tBZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGRlY2tSZW5kZXJDYWxsYmFja3Mub25EZWNrQWZ0ZXJSZW5kZXIoYWxsRGVja0dsUHJvcHMpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgYW55QWN0aXZlTGF5ZXJMb2FkaW5nID0gYXJlQW55RGVja0xheWVyc0xvYWRpbmcoYWxsRGVja0dsUHJvcHMubGF5ZXJzKTtcbiAgICAgICAgICAgICAgaWYgKGFueUFjdGl2ZUxheWVyTG9hZGluZyAhPT0gdGhpcy5hbnlBY3RpdmVMYXllckxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkxheWVyTG9hZGluZ1N0YXRlQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hbnlBY3RpdmVMYXllckxvYWRpbmcgPSBhbnlBY3RpdmVMYXllckxvYWRpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgIDwvRGVja0dMPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZU1hcGJveExheWVycygpIHtcbiAgICAgIGNvbnN0IG1hcGJveExheWVycyA9IHRoaXMubWFwYm94TGF5ZXJzU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBpZiAoIU9iamVjdC5rZXlzKG1hcGJveExheWVycykubGVuZ3RoICYmICFPYmplY3Qua2V5cyh0aGlzLnByZXZpb3VzTGF5ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVNYXBib3hMYXllcnModGhpcy5fbWFwLCBtYXBib3hMYXllcnMsIHRoaXMucHJldmlvdXNMYXllcnMpO1xuXG4gICAgICB0aGlzLnByZXZpb3VzTGF5ZXJzID0gbWFwYm94TGF5ZXJzO1xuICAgIH1cblxuICAgIF9yZW5kZXJNYXBib3hPdmVybGF5cygpIHtcbiAgICAgIGlmICh0aGlzLl9tYXAgJiYgdGhpcy5fbWFwLmlzU3R5bGVMb2FkZWQoKSkge1xuICAgICAgICB0aGlzLl91cGRhdGVNYXBib3hMYXllcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICBjb25zdCB2aWV3U3RhdGUgPSB0aGlzLmNvbnRleHQ/LmdldEludGVybmFsVmlld1N0YXRlKHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgb25WaWV3UG9ydENoYW5nZShcbiAgICAgICAgdmlld1N0YXRlLFxuICAgICAgICB0aGlzLnByb3BzLm1hcFN0YXRlQWN0aW9ucy51cGRhdGVNYXAsXG4gICAgICAgIHRoaXMucHJvcHMub25WaWV3U3RhdGVDaGFuZ2UsXG4gICAgICAgIHRoaXMucHJvcHMucHJpbWFyeSxcbiAgICAgICAgdGhpcy5wcm9wcy5pbmRleFxuICAgICAgKTtcbiAgICB9LCBERUJPVU5DRV9WSUVXUE9SVF9QUk9QQUdBVEUpO1xuXG4gICAgX29uVmlld3BvcnRDaGFuZ2UgPSB2aWV3cG9ydCA9PiB7XG4gICAgICBjb25zdCB7dmlld1N0YXRlLCBpbnRlcmFjdGlvblN0YXRlfSA9IHZpZXdwb3J0O1xuICAgICAgaWYgKHRoaXMucHJvcHMuaXNFeHBvcnQpIHtcbiAgICAgICAgLy8gSW1hZ2UgZXhwb3J0IG1hcCBzaG91bGRuJ3QgYmUgaW50ZXJhY3RpdmUgKG90aGVyd2lzZSB0aGlzIGNhbGxiYWNrIGNhblxuICAgICAgICAvLyBsZWFkIHRvIGluYWR2ZXJ0ZW50IGNoYW5nZXMgdG8gdGhlIHN0YXRlIG9mIHRoZSBtYWluIG1hcClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qge3NldEludGVybmFsVmlld1N0YXRlfSA9IHRoaXMuY29udGV4dDtcblxuICAgICAgLy8gRmxhdCBtYXAgKDJELzNEKToga2VlcCB0aGUgb3JpZ2luYWwsIGFsd2F5cy1zeW5jaHJvbm91cyBiZWhhdmlvci4gVGhlXG4gICAgICAvLyBpbnRlcmFjdGlvbi1hd2FyZSB0aW1pbmcgYmVsb3cgZXhpc3RzIHB1cmVseSB0byBmaXggZ2xvYmUtc3BlY2lmaWNcbiAgICAgIC8vIGNvbnRyb2xsZWQtdmlld1N0YXRlLCBzbyBpdCBtdXN0IG5vdCBjaGFuZ2UgdGhlIG1haW4gMkQgbG9naWMuXG4gICAgICBpZiAoIXRoaXMucHJvcHMubWFwU3RhdGU/Lmdsb2JlPy5lbmFibGVkKSB7XG4gICAgICAgIHNldEludGVybmFsVmlld1N0YXRlKHZpZXdTdGF0ZSwgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICAgIHRoaXMuX3dhc0ludGVyYWN0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc1VzZXJJbnRlcmFjdGlvbiA9XG4gICAgICAgIGludGVyYWN0aW9uU3RhdGUgJiZcbiAgICAgICAgKGludGVyYWN0aW9uU3RhdGUuaXNab29taW5nIHx8XG4gICAgICAgICAgaW50ZXJhY3Rpb25TdGF0ZS5pc1Bhbm5pbmcgfHxcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLmlzUm90YXRpbmcgfHxcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLmlzRHJhZ2dpbmcgfHxcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLmluVHJhbnNpdGlvbik7XG4gICAgICAvLyBUaGUgZW1pdCB0aGF0IGVuZHMgYSBnZXN0dXJlIChwYW5lbmQvcm90YXRlRW5kLCBvciBhIGZsaW5nIHRyYW5zaXRpb25cbiAgICAgIC8vIGVuZGluZykgYXJyaXZlcyB3aXRoIGFsbCBpbnRlcmFjdGlvbiBmbGFncyBmYWxzZS4gSWYgd2UgZGVmZXIgaXQsIHRoZVxuICAgICAgLy8gY29udHJvbGxlZCBgdmlld1N0YXRlYCBmZWQgYmFjayB0byBkZWNrIGxhZ3MgYSBmcmFtZSBiZWhpbmQgdGhlXG4gICAgICAvLyBjb250cm9sbGVyJ3MgY29tbWl0dGVkIHN0YXRlIGFuZCBkZWNrIHJlLXNlZWRzIGZyb20gdGhlIHN0YWxlIHZhbHVlLFxuICAgICAgLy8gbWFraW5nIHRoZSBnbG9iZSB2aXNpYmx5IFwianVtcCBiYWNrXCIgdG8gd2hlcmUgdGhlIGRyYWcgd2FzIHJlbGVhc2VkIC1cbiAgICAgIC8vIG1vc3Qgbm90aWNlYWJsZSBvbiBhIHRocm93L2ZsaW5nIHJlbGVhc2UuIFRyZWF0IHRoZSBmaXJzdCBhbGwtZmFsc2UgZW1pdFxuICAgICAgLy8gcmlnaHQgYWZ0ZXIgYW4gYWN0aXZlIGdlc3R1cmUgYXMgcGFydCBvZiB0aGF0IGdlc3R1cmUgYW5kIGFwcGx5IGl0XG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRvby5cbiAgICAgIGNvbnN0IGlzSW50ZXJhY3Rpb25TZXR0bGUgPSAhaXNVc2VySW50ZXJhY3Rpb24gJiYgdGhpcy5fd2FzSW50ZXJhY3Rpbmc7XG4gICAgICB0aGlzLl93YXNJbnRlcmFjdGluZyA9IEJvb2xlYW4oaXNVc2VySW50ZXJhY3Rpb24pO1xuICAgICAgaWYgKGlzVXNlckludGVyYWN0aW9uIHx8IGlzSW50ZXJhY3Rpb25TZXR0bGUpIHtcbiAgICAgICAgLy8gRm9yIGludGVyYWN0aXZlIGdlc3R1cmVzIChwYW4vem9vbS9yb3RhdGUpIGFuZCB0aGVpciBlbmQtb2YtZ2VzdHVyZVxuICAgICAgICAvLyBzZXR0bGUsIHVwZGF0ZSBzeW5jaHJvbm91c2x5IHNvIHRoZSBjb250cm9sbGVkIGB2aWV3U3RhdGVgIHN0YXlzIGluXG4gICAgICAgIC8vIGxvY2tzdGVwIHdpdGggdGhlIGNvbnRyb2xsZXIgYW5kIHRoZXJlJ3Mgbm8gc3RhbGUgcmUtc2VlZC5cbiAgICAgICAgc2V0SW50ZXJuYWxWaWV3U3RhdGUodmlld1N0YXRlLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRlY2suZ2wgY2FuIGZpcmUgb25WaWV3U3RhdGVDaGFuZ2Ugc3luY2hyb25vdXNseSBkdXJpbmcgaXRzIG93biByZW5kZXJcbiAgICAgICAgLy8gKGUuZy4gd2hlbiBzd2l0Y2hpbmcgdmlldyB0eXBlcyBsaWtlIE1hcFZpZXcgLT4gR2xvYmVWaWV3KS4gVXBkYXRpbmcgUmVhY3RcbiAgICAgICAgLy8gc3RhdGUgZHVyaW5nIHJlbmRlciB0aHJvd3MgYSB3YXJuaW5nLCBzbyBkZWZlciBub24taW50ZXJhY3RpdmUgdXBkYXRlcy5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgc2V0SW50ZXJuYWxWaWV3U3RhdGUodmlld1N0YXRlLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkKCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVySG92ZXJEZWJvdW5jZWQgPSBkZWJvdW5jZSgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJIb3ZlcihkYXRhLCBpbmRleCk7XG4gICAgfSwgREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUpO1xuXG4gICAgX29uTW91c2VNb3ZlRGVib3VuY2VkID0gZGVib3VuY2UoKGV2ZW50LCB2aWV3cG9ydCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25Nb3VzZU1vdmUobm9ybWFsaXplRXZlbnQoZXZlbnQsIHZpZXdwb3J0KSk7XG4gICAgfSwgREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUpO1xuXG4gICAgX29uTGF5ZXJMb2FkaW5nU3RhdGVDaGFuZ2UgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAvLyB0cmlnZ2VyIGxvYWRpbmcgaW5kaWNhdG9yIHVwZGF0ZSB3aXRob3V0IGFueSBjaGFuZ2UgdG8gdXBkYXRlIFVJXG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRMb2FkaW5nSW5kaWNhdG9yKHtjaGFuZ2U6IDB9KTtcbiAgICB9LCBERUJPVU5DRV9MT0FESU5HX1NUQVRFX1BST1BBR0FURSk7XG5cbiAgICBfaGFuZGxlVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5ID0gKGxheWVyOiBMYXllcikgPT4ge1xuICAgICAgY29uc3Qge3Zpc1N0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgdmlzU3RhdGVBY3Rpb25zLmxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCB7aXNWaXNpYmxlOiAhbGF5ZXIuY29uZmlnLmlzVmlzaWJsZX0pO1xuICAgIH07XG5cbiAgICBfdG9nZ2xlTWFwQ29udHJvbCA9IHBhbmVsSWQgPT4ge1xuICAgICAgY29uc3Qge2luZGV4LCB1aVN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuXG4gICAgICB1aVN0YXRlQWN0aW9ucy50b2dnbGVNYXBDb250cm9sKHBhbmVsSWQsIE51bWJlcihpbmRleCkpO1xuICAgIH07XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4gICAgX3JlbmRlck1hcCgpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICBtYXBTdHlsZSxcbiAgICAgICAgbWFwU3RhdGVBY3Rpb25zLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgLy8gbWFwYm94QXBpVXJsLFxuICAgICAgICBtYXBDb250cm9scyxcbiAgICAgICAgaXNFeHBvcnQsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgdWlUaGVtZSxcbiAgICAgICAgdWlTdGF0ZUFjdGlvbnMsXG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHByaW1hcnksXG4gICAgICAgIGJvdHRvbU1hcENvbnRhaW5lclByb3BzLFxuICAgICAgICB0b3BNYXBDb250YWluZXJQcm9wcyxcbiAgICAgICAgdGhlbWUsXG4gICAgICAgIGRhdGFzZXRBdHRyaWJ1dGlvbnMgPSBbXSxcbiAgICAgICAgYXR0cmlidXRpb25Mb2dvcyA9IFtdLFxuICAgICAgICBjb250YWluZXJJZCA9IDAsXG4gICAgICAgIGlzTG9hZGluZ0luZGljYXRvclZpc2libGUsXG4gICAgICAgIGFjdGl2ZVNpZGVQYW5lbCxcbiAgICAgICAgc2lkZVBhbmVsV2lkdGhcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCB7bGF5ZXJzLCBkYXRhc2V0cywgZWRpdG9yLCBpbnRlcmFjdGlvbkNvbmZpZywgbGF5ZXJPcmRlcn0gPSB2aXNTdGF0ZTtcblxuICAgICAgY29uc3QgbGF5ZXJzVG9SZW5kZXIgPSB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBsYXllcnNGb3JEZWNrID0gdGhpcy5sYXllcnNGb3JEZWNrU2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIC8vIEN1cnJlbnQgc3R5bGUgY2FuIGJlIGEgY3VzdG9tIHN0eWxlLCBmcm9tIHdoaWNoIHdlIHB1bGwgdGhlIG1hcGJveCBBUEkgYWNjY2VzcyB0b2tlblxuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gbWFwU3R5bGUubWFwU3R5bGVzPy5bbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5TmFtZSA9IGdldEJhc2VNYXBMaWJyYXJ5KGN1cnJlbnRTdHlsZSk7XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeUNvbmZpZyA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbYmFzZU1hcExpYnJhcnlOYW1lXTtcblxuICAgICAgLy8gU2VsZWN0IHRoZSBjb3JyZWN0IE1hcCBhZGFwdGVyIGJhc2VkIG9uIHRoZSBhY3RpdmUgYmFzZSBtYXAgbGlicmFyeS5cbiAgICAgIC8vIFVzaW5nIHRoZSBuYXRpdmUgYWRhcHRlciBmb3IgZWFjaCBsaWJyYXJ5IGF2b2lkcyBUcmFuc2Zvcm0gQVBJXG4gICAgICAvLyBpbmNvbXBhdGliaWxpdGllcyAoZS5nLiBtYXBib3gtbGVnYWN5J3MgY2xvbmVUcmFuc2Zvcm0gd2l0aCBNYXBMaWJyZSB2NSkuXG4gICAgICBjb25zdCBSZXNvbHZlZE1hcENvbXBvbmVudCA9XG4gICAgICAgIHRoaXMucHJvcHMuTWFwQ29tcG9uZW50ID8/XG4gICAgICAgIChiYXNlTWFwTGlicmFyeU5hbWUgPT09IE1BUF9MSUJfT1BUSU9OUy5NQVBCT1ggPyBNYXBib3hMZWdhY3lNYXAgOiBNYXBsaWJyZU1hcCk7XG5cbiAgICAgIGNvbnN0IHVzZU1hcGJveEFkYXB0ZXIgPSBSZXNvbHZlZE1hcENvbXBvbmVudCA9PT0gTWFwYm94TGVnYWN5TWFwO1xuXG4gICAgICBjb25zdCBpbnRlcm5hbFZpZXdTdGF0ZSA9IHRoaXMuY29udGV4dD8uZ2V0SW50ZXJuYWxWaWV3U3RhdGUoaW5kZXgpO1xuICAgICAgY29uc3QgY29uZmlnTWF4UGl0Y2ggPSBtYXBTdGF0ZS5tYXhQaXRjaCA/PyBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLm1heFBpdGNoO1xuICAgICAgY29uc3QgZWZmZWN0aXZlTWF4UGl0Y2ggPSB1c2VNYXBib3hBZGFwdGVyXG4gICAgICAgID8gTWF0aC5taW4oY29uZmlnTWF4UGl0Y2gsIE1BUEJPWF9NQVhfUElUQ0gpXG4gICAgICAgIDogY29uZmlnTWF4UGl0Y2g7XG4gICAgICBjb25zdCBtYXBQcm9wczogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcbiAgICAgICAgLi4uaW50ZXJuYWxWaWV3U3RhdGUsXG4gICAgICAgIG1heFBpdGNoOiBlZmZlY3RpdmVNYXhQaXRjaCxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0aGlzLnByb3BzLmlzRXhwb3J0ID8/IGZhbHNlLFxuICAgICAgICBtYXBib3hBY2Nlc3NUb2tlbjogY3VycmVudFN0eWxlPy5hY2Nlc3NUb2tlbiB8fCBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgLy8gYmFzZUFwaVVybDogbWFwYm94QXBpVXJsLFxuICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0OlxuICAgICAgICAgIHRoaXMucHJvcHMudHJhbnNmb3JtUmVxdWVzdCB8fFxuICAgICAgICAgIHRyYW5zZm9ybVJlcXVlc3QoY3VycmVudFN0eWxlPy5hY2Nlc3NUb2tlbiB8fCBtYXBib3hBcGlBY2Nlc3NUb2tlbilcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLlJUTFRleHRQbHVnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtYXBQcm9wcy5SVExUZXh0UGx1Z2luID0gdGhpcy5wcm9wcy5SVExUZXh0UGx1Z2luO1xuICAgICAgfVxuXG4gICAgICBpZiAodXNlTWFwYm94QWRhcHRlcikge1xuICAgICAgICBjb25zdCBtYXBib3hDb25maWcgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmJhc2VNYXBMaWJyYXJ5Q29uZmlnW01BUF9MSUJfT1BUSU9OUy5NQVBCT1hdO1xuICAgICAgICBtYXBQcm9wcy5tYXBMaWIgPSBtYXBib3hDb25maWcuZ2V0TWFwTGliKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhc0dlb2NvZGVyTGF5ZXIgPSBCb29sZWFuKGxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gR0VPQ09ERVJfTEFZRVJfSUQpKTtcbiAgICAgIGNvbnN0IGlzU3BsaXQgPSBCb29sZWFuKG1hcFN0YXRlLmlzU3BsaXQpO1xuXG4gICAgICBjb25zdCBkZWNrID0gdGhpcy5fcmVuZGVyRGVja092ZXJsYXkobGF5ZXJzRm9yRGVjaywge1xuICAgICAgICBwcmltYXJ5TWFwOiB0cnVlLFxuICAgICAgICBpc0ludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogKFxuICAgICAgICAgIDxSZXNvbHZlZE1hcENvbXBvbmVudFxuICAgICAgICAgICAga2V5PXtgYm90dG9tLSR7YmFzZU1hcExpYnJhcnlOYW1lfWB9XG4gICAgICAgICAgICB7Li4ubWFwUHJvcHN9XG4gICAgICAgICAgICBtYXBTdHlsZT17XG4gICAgICAgICAgICAgIG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkXG4gICAgICAgICAgICAgICAgPyBFTVBUWV9NQVBCT1hfU1RZTEVcbiAgICAgICAgICAgICAgICA6IG1hcFN0eWxlLmJvdHRvbU1hcFN0eWxlID8/IEVNUFRZX01BUEJPWF9TVFlMRVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgey4uLmJvdHRvbU1hcENvbnRhaW5lclByb3BzfVxuICAgICAgICAgICAgcmVmPXt0aGlzLl9zZXRNYXBSZWZ9XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWRlY2spIHtcbiAgICAgICAgLy8gZGVja092ZXJsYXkgY2FuIGJlIG51bGwgaWYgb25EZWNrUmVuZGVyIHJldHVybnMgbnVsbFxuICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byByZW5kZXIgdGhlIG1hcFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIEluIHNwbGl0IChkdWFsKSB2aWV3IG1vZGUsIG9ubHkgcmVuZGVyIHRoZSBtYXAgY29udHJvbCBidXR0b25zIG9uIHRoZVxuICAgICAgLy8gcmlnaHQtc2lkZSBtYXAgKHByaW1hcnkgPT09IHRydWUsIGkuZS4gaW5kZXggPT09IDEpLiBPdGhlcndpc2UgdGhlIHNhbWVcbiAgICAgIC8vIGJ1dHRvbnMgYXJlIGR1cGxpY2F0ZWQgb24gYm90aCBtYXBzIGFuZCBhbnkgb3BlbmVkIG1lbnUgYXBwZWFycyBtaXJyb3JlZC5cbiAgICAgIGNvbnN0IHNob3dNYXBDb250cm9sID0gIWlzU3BsaXQgfHwgQm9vbGVhbihwcmltYXJ5KTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge3Nob3dNYXBDb250cm9sICYmIChcbiAgICAgICAgICAgIDxNYXBDb250cm9sXG4gICAgICAgICAgICAgIG1hcFN0YXRlPXttYXBTdGF0ZX1cbiAgICAgICAgICAgICAgbWFwU3RhdGVBY3Rpb25zPXttYXBTdGF0ZUFjdGlvbnN9XG4gICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgICAgYXZhaWxhYmxlTG9jYWxlcz17TE9DQUxFX0NPREVTX0FSUkFZfVxuICAgICAgICAgICAgICBkcmFnUm90YXRlPXttYXBTdGF0ZS5kcmFnUm90YXRlfVxuICAgICAgICAgICAgICBpc1NwbGl0PXtpc1NwbGl0fVxuICAgICAgICAgICAgICBwcmltYXJ5PXtCb29sZWFuKHByaW1hcnkpfVxuICAgICAgICAgICAgICBpc0V4cG9ydD17aXNFeHBvcnR9XG4gICAgICAgICAgICAgIGxheWVycz17bGF5ZXJzfVxuICAgICAgICAgICAgICBsYXllck9yZGVyPXtsYXllck9yZGVyfVxuICAgICAgICAgICAgICBsYXllcnNUb1JlbmRlcj17bGF5ZXJzVG9SZW5kZXJ9XG4gICAgICAgICAgICAgIG1hcEluZGV4PXtpbmRleCB8fCAwfVxuICAgICAgICAgICAgICBtYXBDb250cm9scz17bWFwQ29udHJvbHN9XG4gICAgICAgICAgICAgIHJlYWRPbmx5PXt0aGlzLnByb3BzLnJlYWRPbmx5fVxuICAgICAgICAgICAgICBzY2FsZT17bWFwU3RhdGUuc2NhbGUgfHwgMX1cbiAgICAgICAgICAgICAgbG9nb0NvbXBvbmVudD17dGhpcy5wcm9wcy5sb2dvQ29tcG9uZW50fVxuICAgICAgICAgICAgICB0b3A9e1xuICAgICAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyICYmIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWRcbiAgICAgICAgICAgICAgICAgID8gdGhlbWUubWFwQ29udHJvbFRvcFxuICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgICAgICAgICB0aGVtZU5hbWU9e3VpVGhlbWV9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlUGVyc3BlY3RpdmU9e21hcFN0YXRlQWN0aW9ucy50b2dnbGVQZXJzcGVjdGl2ZX1cbiAgICAgICAgICAgICAgb25TZXRNYXBWaWV3TW9kZT17bWFwU3RhdGVBY3Rpb25zLnNldE1hcFZpZXdNb2RlfVxuICAgICAgICAgICAgICBtYXBWaWV3TW9kZT17bWFwU3RhdGUubWFwVmlld01vZGV9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlU3BsaXRNYXA9e21hcFN0YXRlQWN0aW9ucy50b2dnbGVTcGxpdE1hcH1cbiAgICAgICAgICAgICAgb25NYXBUb2dnbGVMYXllcj17dGhpcy5faGFuZGxlTWFwVG9nZ2xlTGF5ZXJ9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlTWFwQ29udHJvbD17dGhpcy5fdG9nZ2xlTWFwQ29udHJvbH1cbiAgICAgICAgICAgICAgb25Ub2dnbGVTcGxpdE1hcFZpZXdwb3J0PXttYXBTdGF0ZUFjdGlvbnMudG9nZ2xlU3BsaXRNYXBWaWV3cG9ydH1cbiAgICAgICAgICAgICAgb25TZXRFZGl0b3JNb2RlPXt2aXNTdGF0ZUFjdGlvbnMuc2V0RWRpdG9yTW9kZX1cbiAgICAgICAgICAgICAgb25TZXRMb2NhbGU9e3VpU3RhdGVBY3Rpb25zLnNldExvY2FsZX1cbiAgICAgICAgICAgICAgb25TZXRUaGVtZT17dWlTdGF0ZUFjdGlvbnMuc2V0VGhlbWV9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eT17dmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUVkaXRvclZpc2liaWxpdHl9XG4gICAgICAgICAgICAgIG9uQ29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllcj17dmlzU3RhdGVBY3Rpb25zLmNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJ9XG4gICAgICAgICAgICAgIG9uTGF5ZXJWaXNDb25maWdDaGFuZ2U9e3Zpc1N0YXRlQWN0aW9ucy5sYXllclZpc0NvbmZpZ0NoYW5nZX1cbiAgICAgICAgICAgICAgb25Ub2dnbGVMYXllclZpc2liaWxpdHk9e3RoaXMuX2hhbmRsZVRvZ2dsZUxheWVyVmlzaWJpbGl0eX1cbiAgICAgICAgICAgICAgbWFwSGVpZ2h0PXttYXBTdGF0ZS5oZWlnaHR9XG4gICAgICAgICAgICAgIHNldE1hcENvbnRyb2xTZXR0aW5ncz17dWlTdGF0ZUFjdGlvbnMuc2V0TWFwQ29udHJvbFNldHRpbmdzfVxuICAgICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e2FjdGl2ZVNpZGVQYW5lbH1cbiAgICAgICAgICAgICAgc3BsaXRNYXBzPXt0aGlzLnByb3BzLnZpc1N0YXRlLnNwbGl0TWFwc31cbiAgICAgICAgICAgICAgb25Ub2dnbGVMYXllckZvck1hcD17dmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUxheWVyRm9yTWFwfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtpc1NwbGl0U2VsZWN0b3IodGhpcy5wcm9wcykgJiYgPERyb3BwYWJsZSBjb250YWluZXJJZD17Y29udGFpbmVySWR9IC8+fVxuXG4gICAgICAgICAge2RlY2t9XG4gICAgICAgICAge3RoaXMuX3JlbmRlck1hcGJveE92ZXJsYXlzKCl9XG4gICAgICAgICAgPEVkaXRvclxuICAgICAgICAgICAgaW5kZXg9e2luZGV4IHx8IDB9XG4gICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgIGZpbHRlcnM9e3RoaXMucG9seWdvbkZpbHRlcnNTZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIGxheWVycz17bGF5ZXJzfVxuICAgICAgICAgICAgb25EZWxldGVGZWF0dXJlPXt2aXNTdGF0ZUFjdGlvbnMuZGVsZXRlRmVhdHVyZX1cbiAgICAgICAgICAgIG9uU2V0RmVhdHVyZVByb3BlcnRpZXM9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc31cbiAgICAgICAgICAgIG9uU2VsZWN0PXt2aXNTdGF0ZUFjdGlvbnMuc2V0U2VsZWN0ZWRGZWF0dXJlfVxuICAgICAgICAgICAgb25Ub2dnbGVQb2x5Z29uRmlsdGVyPXt2aXNTdGF0ZUFjdGlvbnMuc2V0UG9seWdvbkZpbHRlckxheWVyfVxuICAgICAgICAgICAgb25TZXRFZGl0b3JNb2RlPXt2aXNTdGF0ZUFjdGlvbnMuc2V0RWRpdG9yTW9kZX1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdhbGwnLFxuICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgZGlzcGxheTogZWRpdG9yLnZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2VkaXRvci52aXNpYmxlID8gKFxuICAgICAgICAgICAgPEZpbHRlckZlYXR1cmVCYWRnZXNcbiAgICAgICAgICAgICAgZmlsdGVycz17dGhpcy5wb2x5Z29uRmlsdGVyc1NlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgICB2aWV3cG9ydD17dGhpcy5fZ2V0QW5ub3RhdGlvblZpZXdwb3J0KG1hcFN0YXRlLCBpbnRlcm5hbFZpZXdTdGF0ZSl9XG4gICAgICAgICAgICAgIGlzR2xvYmVFbmFibGVkPXtCb29sZWFuKG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkKX1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e3Zpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEZlYXR1cmV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDxBbm5vdGF0aW9uT3ZlcmxheVxuICAgICAgICAgICAgYW5ub3RhdGlvbnM9e3Zpc1N0YXRlLmFubm90YXRpb25zfVxuICAgICAgICAgICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ9e3Zpc1N0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkfVxuICAgICAgICAgICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ9e3Zpc1N0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0fVxuICAgICAgICAgICAgaXNBbm5vdGF0aW9uTW9kZT17Qm9vbGVhbihtYXBDb250cm9scz8uYW5ub3RhdGlvbj8uYWN0aXZlKX1cbiAgICAgICAgICAgIG1hcEluZGV4PXtpbmRleCB8fCAwfVxuICAgICAgICAgICAgdmlld3BvcnQ9e3RoaXMuX2dldEFubm90YXRpb25WaWV3cG9ydChtYXBTdGF0ZSwgaW50ZXJuYWxWaWV3U3RhdGUpfVxuICAgICAgICAgICAgaXNHbG9iZUVuYWJsZWQ9e0Jvb2xlYW4obWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpfVxuICAgICAgICAgICAgdXBkYXRlQW5ub3RhdGlvbj17dmlzU3RhdGVBY3Rpb25zLnVwZGF0ZUFubm90YXRpb259XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEFubm90YXRpb249e3Zpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEFubm90YXRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICB7bWFwU3R5bGUudG9wTWFwU3R5bGUgJiYgIW1hcFN0YXRlLmdsb2JlPy5lbmFibGVkID8gKFxuICAgICAgICAgICAgPFJlc29sdmVkTWFwQ29tcG9uZW50XG4gICAgICAgICAgICAgIGtleT17YHRvcC0ke2Jhc2VNYXBMaWJyYXJ5TmFtZX1gfVxuICAgICAgICAgICAgICB2aWV3U3RhdGU9e2ludGVybmFsVmlld1N0YXRlfVxuICAgICAgICAgICAgICBtYXhQaXRjaD17ZWZmZWN0aXZlTWF4UGl0Y2h9XG4gICAgICAgICAgICAgIG1hcFN0eWxlPXttYXBTdHlsZS50b3BNYXBTdHlsZX1cbiAgICAgICAgICAgICAgc3R5bGU9e01BUF9TVFlMRS50b3B9XG4gICAgICAgICAgICAgIG1hcGJveEFjY2Vzc1Rva2VuPXttYXBQcm9wcy5tYXBib3hBY2Nlc3NUb2tlbn1cbiAgICAgICAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD17bWFwUHJvcHMudHJhbnNmb3JtUmVxdWVzdH1cbiAgICAgICAgICAgICAgey4uLihtYXBQcm9wcy5SVExUZXh0UGx1Z2luICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHtSVExUZXh0UGx1Z2luOiBtYXBQcm9wcy5SVExUZXh0UGx1Z2lufVxuICAgICAgICAgICAgICAgIDoge30pfVxuICAgICAgICAgICAgICB7Li4uKHVzZU1hcGJveEFkYXB0ZXJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgbWFwTGliOlxuICAgICAgICAgICAgICAgICAgICAgIGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbXG4gICAgICAgICAgICAgICAgICAgICAgICBNQVBfTElCX09QVElPTlMuTUFQQk9YXG4gICAgICAgICAgICAgICAgICAgICAgXS5nZXRNYXBMaWIoKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pfVxuICAgICAgICAgICAgICB7Li4udG9wTWFwQ29udGFpbmVyUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAge2hhc0dlb2NvZGVyTGF5ZXJcbiAgICAgICAgICAgID8gdGhpcy5fcmVuZGVyRGVja092ZXJsYXkoXG4gICAgICAgICAgICAgICAge1tHRU9DT0RFUl9MQVlFUl9JRF06IGhhc0dlb2NvZGVyTGF5ZXJ9LFxuICAgICAgICAgICAgICAgIHtwcmltYXJ5TWFwOiBmYWxzZSwgaXNJbnRlcmFjdGl2ZTogZmFsc2V9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICB7dGhpcy5fcmVuZGVyTWFwUG9wb3ZlcigpfVxuICAgICAgICAgIHshaXNFeHBvcnQgJiYgcHJpbWFyeSAhPT0gaXNTcGxpdCA/IChcbiAgICAgICAgICAgIDxMb2FkaW5nSW5kaWNhdG9yXG4gICAgICAgICAgICAgIGlzVmlzaWJsZT17Qm9vbGVhbihpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlIHx8IHRoaXMuYW55QWN0aXZlTGF5ZXJMb2FkaW5nKX1cbiAgICAgICAgICAgICAgYWN0aXZlU2lkZVBhbmVsPXtCb29sZWFuKGFjdGl2ZVNpZGVQYW5lbCl9XG4gICAgICAgICAgICAgIHNpZGVQYW5lbFdpZHRoPXtzaWRlUGFuZWxXaWR0aH1cbiAgICAgICAgICAgICAgaGFzQXR0cmlidXRpb25Mb2dvcz17YXR0cmlidXRpb25Mb2dvcy5sZW5ndGggPiAwfVxuICAgICAgICAgICAgICBoYXNNYXBTY2FsZT17Z2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVNYXBTY2FsZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3RoaXMucHJvcHMucHJpbWFyeSA/IChcbiAgICAgICAgICAgIDxBdHRyaWJ1dGlvblxuICAgICAgICAgICAgICBzaG93QmFzZU1hcExpYkxvZ289e3RoaXMuc3RhdGUuc2hvd0Jhc2VNYXBMaWJMb2dvfVxuICAgICAgICAgICAgICBiYXNlbWFwQXR0cmlidXRpb25zPXt0aGlzLnN0YXRlLmJhc2VtYXBBdHRyaWJ1dGlvbnN9XG4gICAgICAgICAgICAgIGRhdGFzZXRBdHRyaWJ1dGlvbnM9e2RhdGFzZXRBdHRyaWJ1dGlvbnN9XG4gICAgICAgICAgICAgIGJhc2VNYXBMaWJyYXJ5Q29uZmlnPXtiYXNlTWFwTGlicmFyeUNvbmZpZ31cbiAgICAgICAgICAgICAgZ2xvYmVBdHRyaWJ1dGlvbnM9e2dldEdsb2JlQmFzZW1hcEF0dHJpYnV0aW9ucyh7XG4gICAgICAgICAgICAgICAgZ2xvYmU6IG1hcFN0YXRlLmdsb2JlLFxuICAgICAgICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgIG1hcFN0eWxlVHlwZTogbWFwU3R5bGU/LnN0eWxlVHlwZSxcbiAgICAgICAgICAgICAgICBiYXNlbWFwUHJvdmlkZXI6IHJlc29sdmVHbG9iZUJhc2VtYXBQcm92aWRlcihcbiAgICAgICAgICAgICAgICAgIGJhc2VNYXBMaWJyYXJ5TmFtZSxcbiAgICAgICAgICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3RoaXMucHJvcHMucHJpbWFyeSA/IChcbiAgICAgICAgICAgIDxBdHRyaWJ1dGlvbkxvZ29zXG4gICAgICAgICAgICAgIGxvZ29zPXthdHRyaWJ1dGlvbkxvZ29zfVxuICAgICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e0Jvb2xlYW4oYWN0aXZlU2lkZVBhbmVsKX1cbiAgICAgICAgICAgICAgc2lkZVBhbmVsV2lkdGg9e3NpZGVQYW5lbFdpZHRofVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7IWlzRXhwb3J0ICYmIGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlTWFwU2NhbGUgPyAoXG4gICAgICAgICAgICA8U3R5bGVkTWFwU2NhbGVDb250YWluZXJcbiAgICAgICAgICAgICAgJGxlZnQ9e1xuICAgICAgICAgICAgICAgIHByaW1hcnkgJiYgYWN0aXZlU2lkZVBhbmVsXG4gICAgICAgICAgICAgICAgICA/IChzaWRlUGFuZWxXaWR0aCB8fCAwKSArICh0aGVtZT8uc2lkZVBhbmVsPy5tYXJnaW4/LmxlZnQgPz8gOSlcbiAgICAgICAgICAgICAgICAgIDogdGhlbWU/LnNpZGVQYW5lbD8ubWFyZ2luPy5sZWZ0ID8/IDlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAkYm90dG9tT2Zmc2V0PXtwcmltYXJ5ICYmIGF0dHJpYnV0aW9uTG9nb3MubGVuZ3RoID4gMCA/IDI0IDogMH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPE1hcFNjYWxlIG1hcFN0YXRlPXttYXBTdGF0ZX0gbWFwSW5kZXg9e2luZGV4ID8/IDB9IC8+XG4gICAgICAgICAgICA8L1N0eWxlZE1hcFNjYWxlQ29udGFpbmVyPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge3Zpc1N0YXRlLCBtYXBTdHlsZX0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgbWFwQ29udGVudCA9IHRoaXMuX3JlbmRlck1hcCgpO1xuICAgICAgaWYgKCFtYXBDb250ZW50KSB7XG4gICAgICAgIC8vIG1hcENvbnRlbnQgY2FuIGJlIG51bGwgaWYgb25EZWNrUmVuZGVyIHJldHVybnMgbnVsbFxuICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byByZW5kZXIgdGhlIG1hcFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gbWFwU3R5bGUubWFwU3R5bGVzPy5bbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5TmFtZSA9IGdldEJhc2VNYXBMaWJyYXJ5KGN1cnJlbnRTdHlsZSk7XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeUNvbmZpZyA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbYmFzZU1hcExpYnJhcnlOYW1lXTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZE1hcFxuICAgICAgICAgIHJlZj17dGhpcy5fcmVmfVxuICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxlU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgb25Db250ZXh0TWVudT17ZXZlbnQgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKX1cbiAgICAgICAgICAkbWl4QmxlbmRNb2RlPXt2aXNTdGF0ZS5vdmVybGF5QmxlbmRpbmd9XG4gICAgICAgICAgJG1hcExpYkNzc0NsYXNzPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJDc3NDbGFzc31cbiAgICAgICAgPlxuICAgICAgICAgIHttYXBDb250ZW50fVxuICAgICAgICA8L1N0eWxlZE1hcD5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpdGhUaGVtZShN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