kepler.gl 3.1.0-alpha.6 → 3.1.0
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.
- package/dist/src/actions/src/action-types.d.ts +2 -0
- package/dist/src/actions/src/ui-state-actions.d.ts +16 -0
- package/dist/src/ai-assistant/src/actions.d.ts +1 -1
- package/dist/src/ai-assistant/src/components/ai-assistant-component.d.ts +2 -1
- package/dist/src/ai-assistant/src/constants.d.ts +3 -3
- package/dist/src/ai-assistant/src/reducers/index.d.ts +1 -1
- package/dist/src/ai-assistant/src/tools/basemap-functions.d.ts +1 -1
- package/dist/src/ai-assistant/src/tools/filter-function.d.ts +1 -1
- package/dist/src/ai-assistant/src/tools/layer-creation-function.d.ts +1 -1
- package/dist/src/ai-assistant/src/tools/layer-style-function.d.ts +1 -1
- package/dist/src/ai-assistant/src/tools/loadurl-function.d.ts +1 -1
- package/dist/src/ai-assistant/src/tools/utils.d.ts +73 -0
- package/dist/src/components/src/common/data-table/index.d.ts +1 -1
- package/dist/src/components/src/common/data-table/option-dropdown.d.ts +3 -3
- package/dist/src/components/src/common/file-uploader/file-drop.d.ts +2 -2
- package/dist/src/components/src/kepler-gl.d.ts +5 -0
- package/dist/src/components/src/loading-indicator.d.ts +13 -0
- package/dist/src/components/src/map-container.d.ts +3 -0
- package/dist/src/constants/src/default-settings.d.ts +1 -0
- package/dist/src/duckdb/src/plugin.d.ts +1 -0
- package/dist/src/duckdb/src/table/duckdb-table-utils.d.ts +13 -0
- package/dist/src/duckdb/src/table/duckdb-table.d.ts +7 -2
- package/dist/src/reducers/src/ui-state-updaters.d.ts +10 -0
- package/dist/src/reducers/src/vis-state-updaters.d.ts +1 -0
- package/dist/src/reducers/src/vis-state.d.ts +4 -0
- package/dist/src/utils/src/application-config.d.ts +2 -0
- package/dist/src/utils/src/observe-dimensions.d.ts +2 -1
- package/package.json +5 -3
- package/src/actions/dist/action-types.d.ts +2 -0
- package/src/actions/dist/action-types.js +2 -1
- package/src/actions/dist/ui-state-actions.d.ts +16 -0
- package/src/actions/dist/ui-state-actions.js +17 -2
- package/src/actions/package.json +8 -8
- package/src/actions/src/action-types.ts +1 -0
- package/src/actions/src/ui-state-actions.ts +22 -0
- package/src/ai-assistant/README.md +76 -0
- package/src/ai-assistant/dist/actions.d.ts +1 -1
- package/src/ai-assistant/dist/actions.js +2 -2
- package/src/ai-assistant/dist/components/ai-assistant-component.d.ts +2 -1
- package/src/ai-assistant/dist/components/ai-assistant-component.js +64 -23
- package/src/ai-assistant/dist/components/ai-assistant-config.js +67 -54
- package/src/ai-assistant/dist/constants.d.ts +3 -3
- package/src/ai-assistant/dist/constants.js +4 -4
- package/src/ai-assistant/dist/reducers/index.d.ts +1 -1
- package/src/ai-assistant/dist/reducers/index.js +2 -2
- package/src/ai-assistant/dist/tools/basemap-functions.d.ts +1 -1
- package/src/ai-assistant/dist/tools/basemap-functions.js +1 -1
- package/src/ai-assistant/dist/tools/filter-function.d.ts +1 -1
- package/src/ai-assistant/dist/tools/filter-function.js +9 -6
- package/src/ai-assistant/dist/tools/layer-creation-function.d.ts +1 -1
- package/src/ai-assistant/dist/tools/layer-creation-function.js +1 -1
- package/src/ai-assistant/dist/tools/layer-style-function.d.ts +1 -1
- package/src/ai-assistant/dist/tools/layer-style-function.js +1 -1
- package/src/ai-assistant/dist/tools/loadurl-function.d.ts +1 -1
- package/src/ai-assistant/dist/tools/loadurl-function.js +1 -1
- package/src/ai-assistant/dist/tools/utils.d.ts +73 -0
- package/src/ai-assistant/dist/tools/utils.js +211 -3
- package/src/ai-assistant/package.json +13 -9
- package/src/ai-assistant/src/actions.ts +2 -2
- package/src/ai-assistant/src/components/ai-assistant-component.tsx +56 -23
- package/src/ai-assistant/src/components/ai-assistant-config.tsx +63 -46
- package/src/ai-assistant/src/config/models.json +32 -0
- package/src/ai-assistant/src/constants.ts +7 -2
- package/src/ai-assistant/src/reducers/index.ts +2 -2
- package/src/ai-assistant/src/tools/basemap-functions.tsx +1 -1
- package/src/ai-assistant/src/tools/filter-function.tsx +11 -7
- package/src/ai-assistant/src/tools/layer-creation-function.tsx +1 -1
- package/src/ai-assistant/src/tools/layer-style-function.tsx +1 -1
- package/src/ai-assistant/src/tools/loadurl-function.tsx +1 -1
- package/src/ai-assistant/src/tools/utils.ts +212 -2
- package/src/cloud-providers/package.json +2 -2
- package/src/common-utils/package.json +3 -3
- package/src/components/dist/common/data-table/header-cell.js +10 -10
- package/src/components/dist/common/data-table/index.d.ts +1 -1
- package/src/components/dist/common/data-table/index.js +1 -1
- package/src/components/dist/common/data-table/option-dropdown.d.ts +3 -3
- package/src/components/dist/common/data-table/option-dropdown.js +5 -5
- package/src/components/dist/common/file-uploader/file-drop.d.ts +2 -2
- package/src/components/dist/common/file-uploader/file-drop.js +1 -1
- package/src/components/dist/common/portaled.js +1 -1
- package/src/components/dist/editor/editor.js +1 -1
- package/src/components/dist/kepler-gl.d.ts +5 -0
- package/src/components/dist/kepler-gl.js +7 -2
- package/src/components/dist/loading-indicator.d.ts +13 -0
- package/src/components/dist/loading-indicator.js +40 -0
- package/src/components/dist/map-container.d.ts +3 -0
- package/src/components/dist/map-container.js +11 -3
- package/src/components/dist/modals/save-map-modal.js +4 -3
- package/src/components/package.json +15 -15
- package/src/components/src/common/data-table/header-cell.tsx +5 -3
- package/src/components/src/common/data-table/index.tsx +1 -1
- package/src/components/src/common/data-table/option-dropdown.tsx +7 -7
- package/src/components/src/common/file-uploader/file-drop.tsx +11 -11
- package/src/components/src/common/portaled.tsx +12 -12
- package/src/components/src/editor/editor.tsx +3 -3
- package/src/components/src/kepler-gl.tsx +7 -2
- package/src/components/src/loading-indicator.tsx +49 -0
- package/src/components/src/map-container.tsx +19 -1
- package/src/components/src/modals/save-map-modal.tsx +6 -2
- package/src/constants/dist/default-settings.d.ts +1 -0
- package/src/constants/dist/default-settings.js +13 -9
- package/src/constants/dist/keyevent.js +1 -1
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/72/80/7a7c561d7985e92aab7b9683e7baf5a0286b353a8f2609c4c71099f668d012be027929e4bbac937f9aa0c9a61be3bd4405136f582895f05aa0313c8efa42 +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/8f/f6/b66955867599392dc69ff1db64419e83c087a82c2e3d4b6418d49ac6bc80e3200dd6c86cdfd4a2cf98ce573f71a5281b86ba3df8a7210e02544f63054191 +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/bd/ba/47ea8fcb11ecd5cd47ad867052e58b1f7e0c8dc5f8918a36fe90eaf45981 +2 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/f0/6e/aadf3c48345aa72e7b2fb92e8c9788d04986b55caf83daa3fbd749c37c44 +2 -0
- package/src/constants/package.json +2 -2
- package/src/constants/src/default-settings.ts +11 -5
- package/src/constants/src/keyevent.ts +2 -2
- package/src/constants/umd/keplergl.min.js +1 -1
- package/src/deckgl-arrow-layers/package.json +1 -1
- package/src/deckgl-layers/package.json +4 -4
- package/src/duckdb/dist/components/preview-data-panel.js +2 -11
- package/src/duckdb/dist/components/sql-panel.js +7 -3
- package/src/duckdb/dist/components/tree.js +5 -4
- package/src/duckdb/dist/plugin.d.ts +1 -0
- package/src/duckdb/dist/plugin.js +9 -2
- package/src/duckdb/dist/processors/data-processor.js +4 -5
- package/src/duckdb/dist/table/duckdb-table-utils.d.ts +13 -0
- package/src/duckdb/dist/table/duckdb-table-utils.js +110 -0
- package/src/duckdb/dist/table/duckdb-table.d.ts +7 -2
- package/src/duckdb/dist/table/duckdb-table.js +189 -44
- package/src/duckdb/package.json +6 -6
- package/src/duckdb/src/components/preview-data-panel.tsx +0 -5
- package/src/duckdb/src/components/sql-panel.tsx +4 -2
- package/src/duckdb/src/components/tree.tsx +5 -1
- package/src/duckdb/src/plugin.ts +8 -1
- package/src/duckdb/src/processors/data-processor.ts +3 -4
- package/src/duckdb/src/table/duckdb-table-utils.ts +106 -0
- package/src/duckdb/src/table/duckdb-table.ts +134 -33
- package/src/effects/package.json +5 -5
- package/src/layers/dist/icon-layer/icon-layer.js +1 -1
- package/src/layers/dist/index.d.ts +3 -0
- package/src/layers/dist/index.js +6 -7
- package/src/layers/dist/point-layer/point-layer.d.ts +1 -1
- package/src/layers/dist/point-layer/point-layer.js +8 -2
- package/src/layers/package.json +9 -9
- package/src/layers/src/icon-layer/icon-layer.ts +8 -10
- package/src/layers/src/index.ts +5 -5
- package/src/layers/src/point-layer/point-layer.ts +6 -1
- package/src/localization/package.json +1 -1
- package/src/processors/dist/data-processor.js +2 -4
- package/src/processors/package.json +7 -7
- package/src/processors/src/data-processor.ts +1 -3
- package/src/reducers/dist/ui-state-updaters.d.ts +10 -0
- package/src/reducers/dist/ui-state-updaters.js +22 -2
- package/src/reducers/dist/ui-state.js +2 -2
- package/src/reducers/dist/vis-state-updaters.d.ts +1 -0
- package/src/reducers/dist/vis-state-updaters.js +21 -5
- package/src/reducers/dist/vis-state.d.ts +4 -0
- package/src/reducers/package.json +16 -16
- package/src/reducers/src/ui-state-updaters.ts +24 -0
- package/src/reducers/src/ui-state.ts +3 -1
- package/src/reducers/src/vis-state-updaters.ts +24 -5
- package/src/schemas/dist/dataset-schema.js +38 -2
- package/src/schemas/package.json +8 -7
- package/src/schemas/src/dataset-schema.ts +43 -1
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5f/aa/96c67b383dbcd2b95625113a5389c6078fd8a53e6fc73a054229709f2dac1e0a409e7117049485a569fbebf8434a319451842671398904bfe1a7f7b5991c +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/af/aa/228fbff58007b23eea5eb6cc7d2da1f0af1d8a7024129a416ea88b4df0ad7afc7aec93b09f3dd42a98f1d6a6f4dce6b53204818da85ef5becc42f928a64d +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/40/72/cac221d8459e6b743bc62ecdb370ed854b21ec30d3f7f4c06c7d1d7ffde2 +2 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/c1/39/f7cd1d5947ec6e5d82bfa07041271344eb02f9e67bf5823acf2f22c2d01f +2 -0
- package/src/styles/package.json +2 -2
- package/src/styles/umd/keplergl.min.js +1 -1
- package/src/table/dist/dataset-utils.js +10 -4
- package/src/table/package.json +5 -5
- package/src/table/src/dataset-utils.ts +7 -1
- package/src/tasks/package.json +2 -2
- package/src/types/package.json +1 -1
- package/src/types/reducers.d.ts +2 -0
- package/src/utils/dist/application-config.d.ts +2 -0
- package/src/utils/dist/application-config.js +4 -2
- package/src/utils/dist/data-utils.js +14 -2
- package/src/utils/dist/dataset-utils.js +5 -3
- package/src/utils/dist/dom-to-image.js +1 -1
- package/src/utils/dist/dom-utils.js +1 -1
- package/src/utils/dist/map-style-utils/mapbox-gl-style-editor.js +7 -1
- package/src/utils/dist/observe-dimensions.d.ts +2 -1
- package/src/utils/dist/observe-dimensions.js +10 -4
- package/src/utils/dist/utils.js +1 -1
- package/src/utils/package.json +4 -4
- package/src/utils/src/application-config.ts +9 -1
- package/src/utils/src/data-utils.ts +13 -1
- package/src/utils/src/dataset-utils.ts +1 -1
- package/src/utils/src/dom-to-image.ts +5 -6
- package/src/utils/src/dom-utils.ts +15 -15
- package/src/utils/src/map-style-utils/mapbox-gl-style-editor.ts +6 -0
- package/src/utils/src/observe-dimensions.ts +9 -4
- package/src/utils/src/utils.ts +8 -8
- package/umd/keplergl.min.css +1 -1
- package/umd/keplergl.min.js +1499 -1428
|
@@ -122,6 +122,8 @@ var mapFieldsSelector = exports.mapFieldsSelector = function mapFieldsSelector(p
|
|
|
122
122
|
mapControls: props.uiState.mapControls,
|
|
123
123
|
readOnly: props.uiState.readOnly,
|
|
124
124
|
locale: props.uiState.locale,
|
|
125
|
+
isLoadingIndicatorVisible: Number(props.uiState.loadingIndicatorValue) > 0,
|
|
126
|
+
sidePanelWidth: props.sidePanelWidth ? props.sidePanelWidth : DEFAULT_KEPLER_GL_PROPS.width,
|
|
125
127
|
// mapStyle
|
|
126
128
|
topMapContainerProps: props.topMapContainerProps,
|
|
127
129
|
bottomMapContainerProps: props.bottomMapContainerProps,
|
|
@@ -377,7 +379,10 @@ function KeplerGlFactory(BottomWidget, GeoCoderPanel, MapContainer, MapsLayout,
|
|
|
377
379
|
return (0, _createClass2["default"])(KeplerGL, [{
|
|
378
380
|
key: "componentDidMount",
|
|
379
381
|
value: function componentDidMount() {
|
|
380
|
-
|
|
382
|
+
var _getApplicationConfig;
|
|
383
|
+
if (((_getApplicationConfig = (0, _utils.getApplicationConfig)().baseMapLibraryConfig) === null || _getApplicationConfig === void 0 || (_getApplicationConfig = _getApplicationConfig['mapbox']) === null || _getApplicationConfig === void 0 ? void 0 : _getApplicationConfig.mapLibName) === 'Mapbox') {
|
|
384
|
+
this._validateMapboxToken();
|
|
385
|
+
}
|
|
381
386
|
this._loadMapStyle();
|
|
382
387
|
if (typeof this.props.onKeplerGlInitialized === 'function') {
|
|
383
388
|
this.props.onKeplerGlInitialized();
|
|
@@ -574,4 +579,4 @@ function mergeActions(actions, userActions) {
|
|
|
574
579
|
return _objectSpread(_objectSpread({}, actions), overrides);
|
|
575
580
|
}
|
|
576
581
|
var _default = exports["default"] = KeplerGlFactory;
|
|
577
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVkdXgiLCJfaXNQcm9wVmFsaWQiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9yZXNlbGVjdCIsIl9rZXBsZXJnbENvbm5lY3QiLCJfcmVhY3RJbnRsIiwiX2xvY2FsaXphdGlvbiIsIl9jb250ZXh0IiwiX2FjdGlvbnMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX3NpZGVQYW5lbCIsIl9tYXBDb250YWluZXIyIiwiX21hcHNMYXlvdXQiLCJfYm90dG9tV2lkZ2V0IiwiX21vZGFsQ29udGFpbmVyIiwiX3Bsb3RDb250YWluZXIiLCJfbm90aWZpY2F0aW9uUGFuZWwiLCJfZ2VvY29kZXJQYW5lbCIsIl9lZmZlY3RNYW5hZ2VyIiwiX2RuZENvbnRleHQiLCJfdXNlQ2xvdWRMaXN0UHJvdmlkZXIiLCJfdXRpbHMiLCJfc3R5bGVzIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mMyIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jYWxsU3VwZXIiLCJvIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwic2hvdWxkRm9yd2FyZFByb3AiLCJwcm9wTmFtZSIsInRhcmdldCIsImlzUHJvcFZhbGlkIiwiR2xvYmFsU3R5bGUiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJmb250RmFtaWx5IiwiZm9udFdlaWdodCIsImZvbnRTaXplIiwibGluZUhlaWdodCIsImxhYmVsQ29sb3IiLCJCb3R0b21XaWRnZXRPdXRlciIsIl9yZWYiLCJhYnNvbHV0ZSIsImNvbmNhdCIsImlzVmlld3BvcnREaXNqb2ludGVkIiwiZXhwb3J0cyIsIm1hcFN0YXRlIiwiaXNTcGxpdCIsImlzVmlld3BvcnRTeW5jZWQiLCJzcGxpdE1hcFZpZXdwb3J0cyIsIm1hcFN0YXRlU2VsZWN0b3IiLCJpbmRleCIsIk51bWJlciIsImlzRmluaXRlIiwibWFwRmllbGRzU2VsZWN0b3IiLCJ1bmRlZmluZWQiLCJnZXRNYXBib3hSZWYiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsIkRFRkFVTFRfS0VQTEVSX0dMX1BST1BTIiwiZGF0YXNldEF0dHJpYnV0aW9ucyIsImF0dHJpYnV0aW9uU2VsZWN0b3IiLCJzb3VyY2VzIiwibWFwU3R5bGUiLCJvbkRlY2tJbml0aWFsaXplZCIsIm9uVmlld1N0YXRlQ2hhbmdlIiwib25Nb3VzZU1vdmUiLCJkZWNrR2xQcm9wcyIsInVpU3RhdGVBY3Rpb25zIiwidmlzU3RhdGVBY3Rpb25zIiwibWFwU3RhdGVBY3Rpb25zIiwidmlzU3RhdGUiLCJhY3RpdmVTaWRlUGFuZWwiLCJ1aVN0YXRlIiwibWFwQ29udHJvbHMiLCJyZWFkT25seSIsImxvY2FsZSIsInRvcE1hcENvbnRhaW5lclByb3BzIiwiYm90dG9tTWFwQ29udGFpbmVyUHJvcHMiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwiZ2V0VmlzaWJsZURhdGFzZXRzIiwiZGF0YXNldHMiLCJmaWx0ZXJPYmplY3RCeVByZWRpY2F0ZSIsImtleSIsIkdFT0NPREVSX0RBVEFTRVRfTkFNRSIsInNpZGVQYW5lbFNlbGVjdG9yIiwiYXZhaWxhYmxlUHJvdmlkZXJzIiwiZmlsdGVyZWREYXRhc2V0cyIsImFwcE5hbWUiLCJ2ZXJzaW9uIiwiYXBwV2Vic2l0ZSIsIm9uU2F2ZU1hcCIsIm1hcFN0eWxlQWN0aW9ucyIsImZpbHRlcnMiLCJsYXllcnMiLCJsYXllck9yZGVyIiwibGF5ZXJDbGFzc2VzIiwiaW50ZXJhY3Rpb25Db25maWciLCJtYXBJbmZvIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsIndpZHRoIiwic2lkZVBhbmVsV2lkdGgiLCJtYXBTYXZlZCIsInByb3ZpZGVyU3RhdGUiLCJwbG90Q29udGFpbmVyU2VsZWN0b3IiLCJoZWlnaHQiLCJleHBvcnRJbWFnZVNldHRpbmciLCJleHBvcnRJbWFnZSIsIm1hcEZpZWxkcyIsImFkZE5vdGlmaWNhdGlvbiIsInNldEV4cG9ydEltYWdlU2V0dGluZyIsInNldEV4cG9ydEltYWdlRGF0YVVyaSIsInNldEV4cG9ydEltYWdlRXJyb3IiLCJzcGxpdE1hcHMiLCJpc1NwbGl0U2VsZWN0b3IiLCJib3R0b21XaWRnZXRTZWxlY3RvciIsImFuaW1hdGlvbkNvbmZpZyIsInRvZ2dsZU1vZGFsIiwic2lkZVBhbmVsIiwibWFyZ2luIiwibGVmdCIsIm1vZGFsQ29udGFpbmVyU2VsZWN0b3IiLCJyb290Tm9kZSIsInByb3ZpZGVyQWN0aW9ucyIsImNsb3VkUHJvdmlkZXJzIiwib25FeHBvcnRUb0Nsb3VkU3VjY2VzcyIsIm9uTG9hZENsb3VkTWFwU3VjY2VzcyIsIm9uTG9hZENsb3VkTWFwRXJyb3IiLCJvbkV4cG9ydFRvQ2xvdWRFcnJvciIsImdlb0NvZGVyUGFuZWxTZWxlY3RvciIsImRpbWVuc2lvbnMiLCJpc0dlb2NvZGVyRW5hYmxlZCIsImdlb2NvZGVyIiwiZW5hYmxlZCIsInVwZGF0ZVZpc0RhdGEiLCJyZW1vdmVEYXRhc2V0IiwidXBkYXRlTWFwIiwiYXBwV2lkdGgiLCJkYXRhc2V0QXR0cmlidXRpb25TZWxlY3RvciIsImNyZWF0ZVNlbGVjdG9yIiwic3RhdGUiLCJ1bmlxdWVBdHRyaWJ1dGlvbnMiLCJfZHMkbWV0YWRhdGEiLCJkcyIsImF0dHJpYnV0aW9ucyIsIm1ldGFkYXRhIiwiQXJyYXkiLCJpc0FycmF5IiwiYXR0cmlidXRpb24iLCJsaW5rcyIsIm1hdGNoIiwibGluayIsIl9saW5rJG1hdGNoIiwiX2xpbmskbWF0Y2gyIiwiaHJlZiIsInRpdGxlIiwiaW5kZXhPZiIsInVybCIsImVycm9yIiwidW5pcXVlVGV4dEF0dHJpYnV0aW9ucyIsImxvZ29zIiwibm90aWZpY2F0aW9uUGFuZWxTZWxlY3RvciIsInJlbW92ZU5vdGlmaWNhdGlvbiIsIm5vdGlmaWNhdGlvbnMiLCJtYXBTdHlsZXMiLCJtYXBTdHlsZXNSZXBsYWNlRGVmYXVsdCIsIkRFRkFVTFRfTUFQQk9YX0FQSV9VUkwiLCJLRVBMRVJfR0xfTkFNRSIsIktFUExFUl9HTF9WRVJTSU9OIiwiRElNRU5TSU9OUyIsImZlYXR1cmVGbGFncyIsIktlcGxlckdsRmFjdG9yeSIsImRlcHMiLCJCb3R0b21XaWRnZXRGYWN0b3J5IiwiR2VvQ29kZXJQYW5lbEZhY3RvcnkiLCJNYXBDb250YWluZXJGYWN0b3J5IiwiTWFwc0xheW91dEZhY3RvcnkiLCJNb2RhbENvbnRhaW5lckZhY3RvcnkiLCJTaWRlUGFuZWxGYWN0b3J5IiwiUGxvdENvbnRhaW5lckZhY3RvcnkiLCJOb3RpZmljYXRpb25QYW5lbEZhY3RvcnkiLCJEbmRDb250ZXh0RmFjdG9yeSIsIkVmZmVjdE1hbmFnZXJGYWN0b3J5IiwiQm90dG9tV2lkZ2V0IiwiR2VvQ29kZXJQYW5lbCIsIk1hcENvbnRhaW5lciIsIk1hcHNMYXlvdXQiLCJNb2RhbENvbnRhaW5lciIsIlNpZGVQYW5lbCIsIlBsb3RDb250YWluZXIiLCJOb3RpZmljYXRpb25QYW5lbCIsIkRuZENvbnRleHQiLCJLZXBsZXJHTCIsIl9Db21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJzZXRTdGF0ZSIsImNyZWF0ZVJlZiIsInRoZW1lU2VsZWN0b3IiLCJfdHlwZW9mMiIsImJhc2ljVGhlbWUiLCJUSEVNRSIsImxpZ2h0IiwidGhlbWVMVCIsImJhc2UiLCJ0aGVtZUJTIiwiZGF0YXNldHNTZWxlY3RvciIsInByb3ZpZGVycyIsImhhc1N0b3JhZ2UiLCJzb21lIiwicCIsImhhc1ByaXZhdGVTdG9yYWdlIiwiaGFzU2hhcmUiLCJoYXNTaGFyaW5nVXJsIiwibG9jYWxlTWVzc2FnZXMiLCJjdXN0b21NZXNzYWdlcyIsIm1lcmdlTWVzc2FnZXMiLCJtZXNzYWdlcyIsImRlZmF1bHRTdHlsZXMiLCJ2YWx1ZXMiLCJjdXN0b21TdHlsZXMiLCJtYXAiLCJtcyIsImlkIiwiZ2VuZXJhdGVIYXNoSWQiLCJhbGxTdHlsZXMiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwicmVkdWNlIiwiYWNjdSIsInN0eWxlIiwibG9hZE1hcFN0eWxlcyIsImNvbnRhaW5lcklkIiwibGF5ZXJJZCIsInRvZ2dsZUxheWVyRm9yTWFwIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJ2YWx1ZSIsImNvbXBvbmVudERpZE1vdW50IiwiX3ZhbGlkYXRlTWFwYm94VG9rZW4iLCJfbG9hZE1hcFN0eWxlIiwib25LZXBsZXJHbEluaXRpYWxpemVkIiwicm9vdCIsImN1cnJlbnQiLCJIVE1MRWxlbWVudCIsIm9ic2VydmVEaW1lbnNpb25zIiwiX2hhbmRsZVJlc2l6ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwidW5vYnNlcnZlRGltZW5zaW9ucyIsInZhbGlkYXRlVG9rZW4iLCJDb25zb2xlIiwid2FybiIsIk1JU1NJTkdfTUFQQk9YX1RPS0VOIiwicmVuZGVyIiwiX3RoaXMyIiwiX3RoaXMkcHJvcHMiLCJfdGhpcyRwcm9wcyRpZCIsIl90aGlzJHByb3BzJHdpZHRoIiwiX3RoaXMkcHJvcHMkaGVpZ2h0IiwiX3RoaXMkcHJvcHMkY2xvdWRQcm92IiwiYXZhaWxhYmxlVGhlbWVTZWxlY3RvciIsImxvY2FsZU1lc3NhZ2VzU2VsZWN0b3IiLCJpc0V4cG9ydGluZ0ltYWdlIiwiZXhwb3J0aW5nIiwiZmlsdGVyZWREYXRhc2V0c1NlbGVjdG9yIiwic2lkZUZpZWxkcyIsInBsb3RDb250YWluZXJGaWVsZHMiLCJib3R0b21XaWRnZXRGaWVsZHMiLCJtb2RhbENvbnRhaW5lckZpZWxkcyIsImdlb0NvZGVyUGFuZWxGaWVsZHMiLCJub3RpZmljYXRpb25QYW5lbEZpZWxkcyIsIm1hcENvbnRhaW5lcnMiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwicHJpbWFyeSIsImRlbGV0ZU1hcExhYmVscyIsIl9kZWxldGVNYXBMYWJlbHMiLCJzZXR0aW5ncyIsIlJvb3RDb250ZXh0IiwiUHJvdmlkZXIiLCJGZWF0dXJlRmxhZ3NDb250ZXh0UHJvdmlkZXIiLCJJbnRsUHJvdmlkZXIiLCJTdHlsZVNoZWV0TWFuYWdlciIsIlRoZW1lUHJvdmlkZXIiLCJDbG91ZExpc3RQcm92aWRlciIsImNsYXNzTmFtZSIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwicG9zaXRpb24iLCJyZWYiLCJ1bnN5bmNlZFZpZXdwb3J0cyIsIl9tYXBDb250YWluZXIiLCJoYXNQb3J0YWJsZVdpZHRoIiwiYnJlYWtQb2ludFZhbHVlcyIsInJvb3RSZWYiLCJib3R0b21XaWRnZXRSZWYiLCJjb250YWluZXJXIiwiY29udGFpbmVySCIsIkNvbXBvbmVudCIsImtlcGxlckdsQ29ubmVjdCIsIm1hcFN0YXRlVG9Qcm9wcyIsIm1ha2VNYXBEaXNwYXRjaFRvUHJvcHMiLCJ3aXRoVGhlbWUiLCJkZWZhdWx0VXNlckFjdGlvbnMiLCJnZXREaXNwYXRjaCIsImRpc3BhdGNoIiwiZ2V0VXNlckFjdGlvbnMiLCJhY3Rpb25zIiwibWFrZUdldEFjdGlvbkNyZWF0b3JzIiwidXNlckFjdGlvbnMiLCJfbWFwIiwiVmlzU3RhdGVBY3Rpb25zIiwiTWFwU3RhdGVBY3Rpb25zIiwiTWFwU3R5bGVBY3Rpb25zIiwiVUlTdGF0ZUFjdGlvbnMiLCJQcm92aWRlckFjdGlvbnMiLCJiaW5kQWN0aW9uQ3JlYXRvcnMiLCJtZXJnZUFjdGlvbnMiLCJfbWFwMiIsIl9zbGljZWRUb0FycmF5MiIsImdldEFjdGlvbkNyZWF0b3JzIiwibWFwRGlzcGF0Y2hUb1Byb3BzIiwib3duUHJvcHMiLCJncm91cGVkQWN0aW9uQ3JlYXRvcnMiLCJvdmVycmlkZXMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9rZXBsZXItZ2wudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgY3JlYXRlUmVmLCBEaXNwYXRjaH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHtiaW5kQWN0aW9uQ3JlYXRvcnN9IGZyb20gJ3JlZHV4JztcbmltcG9ydCBpc1Byb3BWYWxpZCBmcm9tICdAZW1vdGlvbi9pcy1wcm9wLXZhbGlkJztcbmltcG9ydCBzdHlsZWQsIHt3aXRoVGhlbWUsIFN0eWxlU2hlZXRNYW5hZ2VyLCBUaGVtZVByb3ZpZGVyfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge2NyZWF0ZVNlbGVjdG9yfSBmcm9tICdyZXNlbGVjdCc7XG5pbXBvcnQge2Nvbm5lY3QgYXMga2VwbGVyR2xDb25uZWN0fSBmcm9tICcuL2Nvbm5lY3Qva2VwbGVyZ2wtY29ubmVjdCc7XG5pbXBvcnQge0ludGxQcm92aWRlcn0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQge21lc3NhZ2VzfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge1Jvb3RDb250ZXh0LCBGZWF0dXJlRmxhZ3NDb250ZXh0UHJvdmlkZXIsIEZlYXR1cmVGbGFnc30gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7XG4gIEF0dHJpYnV0aW9uV2l0aFN0eWxlLFxuICBEYXRhc2V0QXR0cmlidXRpb24sXG4gIE9uRXJyb3JDYWxsQmFjayxcbiAgT25TdWNjZXNzQ2FsbEJhY2ssXG4gIFZpZXdwb3J0XG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQge1xuICBNYXBTdGF0ZUFjdGlvbnMsXG4gIE1hcFN0eWxlQWN0aW9ucyxcbiAgUHJvdmlkZXJBY3Rpb25zLFxuICBVSVN0YXRlQWN0aW9ucyxcbiAgVmlzU3RhdGVBY3Rpb25zXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcblxudHlwZSBLZXBsZXJHbEFjdGlvbnMgPSB7XG4gIHZpc1N0YXRlQWN0aW9uczogdHlwZW9mIFZpc1N0YXRlQWN0aW9ucztcbiAgbWFwU3RhdGVBY3Rpb25zOiB0eXBlb2YgTWFwU3RhdGVBY3Rpb25zO1xuICBtYXBTdHlsZUFjdGlvbnM6IHR5cGVvZiBNYXBTdHlsZUFjdGlvbnM7XG4gIHVpU3RhdGVBY3Rpb25zOiB0eXBlb2YgVUlTdGF0ZUFjdGlvbnM7XG4gIHByb3ZpZGVyQWN0aW9uczogdHlwZW9mIFByb3ZpZGVyQWN0aW9ucztcbn07XG5cbmltcG9ydCB7XG4gIERJTUVOU0lPTlMsXG4gIEtFUExFUl9HTF9OQU1FLFxuICBLRVBMRVJfR0xfVkVSU0lPTixcbiAgVEhFTUUsXG4gIERFRkFVTFRfTUFQQk9YX0FQSV9VUkwsXG4gIEdFT0NPREVSX0RBVEFTRVRfTkFNRSxcbiAgTUlTU0lOR19NQVBCT1hfVE9LRU5cbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5pbXBvcnQgU2lkZVBhbmVsRmFjdG9yeSBmcm9tICcuL3NpZGUtcGFuZWwnO1xuaW1wb3J0IE1hcENvbnRhaW5lckZhY3RvcnkgZnJvbSAnLi9tYXAtY29udGFpbmVyJztcbmltcG9ydCBNYXBzTGF5b3V0RmFjdG9yeSBmcm9tICcuL21hcHMtbGF5b3V0JztcbmltcG9ydCBCb3R0b21XaWRnZXRGYWN0b3J5IGZyb20gJy4vYm90dG9tLXdpZGdldCc7XG5pbXBvcnQgTW9kYWxDb250YWluZXJGYWN0b3J5IGZyb20gJy4vbW9kYWwtY29udGFpbmVyJztcbmltcG9ydCBQbG90Q29udGFpbmVyRmFjdG9yeSBmcm9tICcuL3Bsb3QtY29udGFpbmVyJztcbmltcG9ydCBOb3RpZmljYXRpb25QYW5lbEZhY3RvcnkgZnJvbSAnLi9ub3RpZmljYXRpb24tcGFuZWwnO1xuaW1wb3J0IEdlb0NvZGVyUGFuZWxGYWN0b3J5IGZyb20gJy4vZ2VvY29kZXItcGFuZWwnO1xuaW1wb3J0IEVmZmVjdE1hbmFnZXJGYWN0b3J5IGZyb20gJy4vZWZmZWN0cy9lZmZlY3QtbWFuYWdlcic7XG5pbXBvcnQgRG5kQ29udGV4dEZhY3RvcnkgZnJvbSAnLi9kbmQtY29udGV4dCc7XG5pbXBvcnQge0Nsb3VkTGlzdFByb3ZpZGVyfSBmcm9tICcuL2hvb2tzL3VzZS1jbG91ZC1saXN0LXByb3ZpZGVyJztcblxuaW1wb3J0IHtcbiAgZmlsdGVyT2JqZWN0QnlQcmVkaWNhdGUsXG4gIHZhbGlkYXRlVG9rZW4sXG4gIG1lcmdlTWVzc2FnZXMsXG4gIG9ic2VydmVEaW1lbnNpb25zLFxuICB1bm9ic2VydmVEaW1lbnNpb25zLFxuICBoYXNQb3J0YWJsZVdpZHRoXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge3RoZW1lIGFzIGJhc2ljVGhlbWUsIHRoZW1lTFQsIHRoZW1lQlMsIGJyZWFrUG9pbnRWYWx1ZXN9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcbmltcG9ydCB7S2VwbGVyR2xTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG5pbXBvcnQge1Byb3ZpZGVyfSBmcm9tICdAa2VwbGVyLmdsL2Nsb3VkLXByb3ZpZGVycyc7XG5cbi8vIFRoaXMgaW1wbGVtZW50cyB0aGUgZGVmYXVsdCBiZWhhdmlvciBmcm9tIHN0eWxlZC1jb21wb25lbnRzIHY1XG5mdW5jdGlvbiBzaG91bGRGb3J3YXJkUHJvcChwcm9wTmFtZSwgdGFyZ2V0KSB7XG4gIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJykge1xuICAgIC8vIEZvciBIVE1MIGVsZW1lbnRzLCBmb3J3YXJkIHRoZSBwcm9wIGlmIGl0IGlzIGEgdmFsaWQgSFRNTCBhdHRyaWJ1dGVcbiAgICByZXR1cm4gaXNQcm9wVmFsaWQocHJvcE5hbWUpO1xuICB9XG4gIC8vIEZvciBvdGhlciBlbGVtZW50cywgZm9yd2FyZCBhbGwgcHJvcHNcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIE1heWJlIHdlIHNob3VsZCB0aGluayBhYm91dCBleHBvcnRpbmcgdGhpcyBvciBjcmVhdGluZyBhIHZhcmlhYmxlXG4vLyBhcyBwYXJ0IG9mIHRoZSBiYXNlLmpzIHRoZW1lXG5jb25zdCBHbG9iYWxTdHlsZSA9IHN0eWxlZC5kaXZgXG4gIGZvbnQtZmFtaWx5OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmZvbnRGYW1pbHl9O1xuICBmb250LXdlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5mb250V2VpZ2h0fTtcbiAgZm9udC1zaXplOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmZvbnRTaXplfTtcbiAgbGluZS1oZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGluZUhlaWdodH07XG5cbiAgKixcbiAgKjpiZWZvcmUsXG4gICo6YWZ0ZXIge1xuICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgfVxuXG4gIHVsIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gIGxpIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICBhIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGFiZWxDb2xvcn07XG4gIH1cblxuICAubWFwbGlicmVnbC1jdHJsIC5tYXBsaWJyZWdsLWN0cmwtbG9nbyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC5tYXBib3hnbC1jdHJsIC5tYXBib3hnbC1jdHJsLWxvZ28ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbmA7XG5cbnR5cGUgQm90dG9tV2lkZ2V0T3V0ZXJQcm9wcyA9IHtcbiAgYWJzb2x1dGU/OiBib29sZWFuO1xufTtcblxuY29uc3QgQm90dG9tV2lkZ2V0T3V0ZXIgPSBzdHlsZWQuZGl2PEJvdHRvbVdpZGdldE91dGVyUHJvcHM+KFxuICAoe2Fic29sdXRlfSkgPT4gYFxuICAke2Fic29sdXRlID8gJ3Bvc2l0aW9uOiBhYnNvbHV0ZTsgYm90dG9tOiAwOyByaWdodDogMDsnIDogJyd9XG4gIHBvaW50ZXItZXZlbnRzOiBub25lOyAvKiBwcmV2ZW50IHBhZGRpbmcgZnJvbSBibG9ja2luZyBpbnB1dCAqL1xuICAmID4gKiB7XG4gICAgLyogYWxsIGNoaWxkcmVuIHNob3VsZCBhbGxvdyBpbnB1dCAqL1xuICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7XG4gIH1gXG4pO1xuXG5leHBvcnQgY29uc3QgaXNWaWV3cG9ydERpc2pvaW50ZWQgPSBwcm9wcyA9PiB7XG4gIHJldHVybiAoXG4gICAgcHJvcHMubWFwU3RhdGUuaXNTcGxpdCAmJlxuICAgICFwcm9wcy5tYXBTdGF0ZS5pc1ZpZXdwb3J0U3luY2VkICYmXG4gICAgcHJvcHMubWFwU3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMubGVuZ3RoID4gMVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcFN0YXRlU2VsZWN0b3IgPSAocHJvcHM6IGFueSwgaW5kZXg6IG51bWJlcik6IGFueSA9PiB7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGluZGV4KSkge1xuICAgIC8vIGVpdGhlciBubyBpbmRleCBhcmcgb3IgYW4gaW52YWxpZCBpbmRleCB3YXMgcHJvdmlkZWRcbiAgICAvLyBpdCBpcyBleHBlY3RlZCB0byBiZSBlaXRoZXIgMCBvciAxIHdoZW4gaW4gc3BsaXQgbW9kZVxuICAgIC8vIG9ubHkgdXNlIHRoZSBtYXBTdGF0ZVxuICAgIHJldHVybiBwcm9wcy5tYXBTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBpc1ZpZXdwb3J0RGlzam9pbnRlZChwcm9wcylcbiAgICA/IC8vIG1peCB0b2dldGhlciB0aGUgdmlld3BvcnQgcHJvcGVydGllcyBpbnRlbmRlZCBmb3IgdGhpcyBkaXNqb2ludGVkIDxNYXBDb250YWluZXI+IHdpdGggdGhlIG90aGVyIG5lY2Vzc2FyeSBtYXBTdGF0ZSBwcm9wZXJ0aWVzXG4gICAgICB7Li4ucHJvcHMubWFwU3RhdGUsIC4uLnByb3BzLm1hcFN0YXRlLnNwbGl0TWFwVmlld3BvcnRzW2luZGV4XX1cbiAgICA6IC8vIG90aGVyd2lzZSBvbmx5IHVzZSB0aGUgbWFwU3RhdGVcbiAgICAgIHByb3BzLm1hcFN0YXRlO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcEZpZWxkc1NlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzLCBpbmRleCA9IDApID0+ICh7XG4gIGdldE1hcGJveFJlZjogcHJvcHMuZ2V0TWFwYm94UmVmLFxuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogcHJvcHMubWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gIG1hcGJveEFwaVVybDogcHJvcHMubWFwYm94QXBpVXJsID8gcHJvcHMubWFwYm94QXBpVXJsIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMubWFwYm94QXBpVXJsLFxuICBtYXBTdGF0ZTogbWFwU3RhdGVTZWxlY3Rvcihwcm9wcywgaW5kZXgpLFxuICBkYXRhc2V0QXR0cmlidXRpb25zOiBhdHRyaWJ1dGlvblNlbGVjdG9yKHByb3BzKS5zb3VyY2VzLFxuICBtYXBTdHlsZTogcHJvcHMubWFwU3R5bGUsXG4gIG9uRGVja0luaXRpYWxpemVkOiBwcm9wcy5vbkRlY2tJbml0aWFsaXplZCxcbiAgb25WaWV3U3RhdGVDaGFuZ2U6IHByb3BzLm9uVmlld1N0YXRlQ2hhbmdlLFxuICBvbk1vdXNlTW92ZTogcHJvcHMub25Nb3VzZU1vdmUsXG4gIGRlY2tHbFByb3BzOiBwcm9wcy5kZWNrR2xQcm9wcyxcbiAgdWlTdGF0ZUFjdGlvbnM6IHByb3BzLnVpU3RhdGVBY3Rpb25zLFxuICB2aXNTdGF0ZUFjdGlvbnM6IHByb3BzLnZpc1N0YXRlQWN0aW9ucyxcbiAgbWFwU3RhdGVBY3Rpb25zOiBwcm9wcy5tYXBTdGF0ZUFjdGlvbnMsXG5cbiAgLy8gdmlzU3RhdGVcbiAgdmlzU3RhdGU6IHByb3BzLnZpc1N0YXRlLFxuXG4gIC8vIHVpU3RhdGVcbiAgYWN0aXZlU2lkZVBhbmVsOiBwcm9wcy51aVN0YXRlLmFjdGl2ZVNpZGVQYW5lbCxcbiAgbWFwQ29udHJvbHM6IHByb3BzLnVpU3RhdGUubWFwQ29udHJvbHMsXG4gIHJlYWRPbmx5OiBwcm9wcy51aVN0YXRlLnJlYWRPbmx5LFxuICBsb2NhbGU6IHByb3BzLnVpU3RhdGUubG9jYWxlLFxuXG4gIC8vIG1hcFN0eWxlXG4gIHRvcE1hcENvbnRhaW5lclByb3BzOiBwcm9wcy50b3BNYXBDb250YWluZXJQcm9wcyxcbiAgYm90dG9tTWFwQ29udGFpbmVyUHJvcHM6IHByb3BzLmJvdHRvbU1hcENvbnRhaW5lclByb3BzLFxuXG4gIC8vIHRyYW5zZm9ybVJlcXVlc3QgZm9yIE1hcGJveCBiYXNlbWFwc1xuICB0cmFuc2Zvcm1SZXF1ZXN0OiBwcm9wcy50cmFuc2Zvcm1SZXF1ZXN0XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc2libGVEYXRhc2V0cyhkYXRhc2V0cykge1xuICAvLyBXZSBkb24ndCB3YW50IEdlb2NvZGVyIGRhdGFzZXQgdG8gYmUgcHJlc2VudCBpbiBTaWRlUGFuZWwgZGF0YXNldCBsaXN0XG4gIHJldHVybiBmaWx0ZXJPYmplY3RCeVByZWRpY2F0ZShkYXRhc2V0cywga2V5ID0+IGtleSAhPT0gR0VPQ09ERVJfREFUQVNFVF9OQU1FKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNpZGVQYW5lbFNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzLCBhdmFpbGFibGVQcm92aWRlcnMsIGZpbHRlcmVkRGF0YXNldHMpID0+ICh7XG4gIGFwcE5hbWU6IHByb3BzLmFwcE5hbWUgPyBwcm9wcy5hcHBOYW1lIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMuYXBwTmFtZSxcbiAgdmVyc2lvbjogcHJvcHMudmVyc2lvbiA/IHByb3BzLnZlcnNpb24gOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy52ZXJzaW9uLFxuICBhcHBXZWJzaXRlOiBwcm9wcy5hcHBXZWJzaXRlLFxuICBtYXBTdHlsZTogcHJvcHMubWFwU3R5bGUsXG4gIG9uU2F2ZU1hcDogcHJvcHMub25TYXZlTWFwLFxuICB1aVN0YXRlOiBwcm9wcy51aVN0YXRlLFxuICBtYXBTdHlsZUFjdGlvbnM6IHByb3BzLm1hcFN0eWxlQWN0aW9ucyxcbiAgdmlzU3RhdGVBY3Rpb25zOiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMsXG4gIHVpU3RhdGVBY3Rpb25zOiBwcm9wcy51aVN0YXRlQWN0aW9ucyxcbiAgbWFwU3RhdGVBY3Rpb25zOiBwcm9wcy5tYXBTdGF0ZUFjdGlvbnMsXG5cbiAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHMsXG4gIGZpbHRlcnM6IHByb3BzLnZpc1N0YXRlLmZpbHRlcnMsXG4gIGxheWVyczogcHJvcHMudmlzU3RhdGUubGF5ZXJzLFxuICBsYXllck9yZGVyOiBwcm9wcy52aXNTdGF0ZS5sYXllck9yZGVyLFxuICBsYXllckNsYXNzZXM6IHByb3BzLnZpc1N0YXRlLmxheWVyQ2xhc3NlcyxcbiAgaW50ZXJhY3Rpb25Db25maWc6IHByb3BzLnZpc1N0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICBtYXBJbmZvOiBwcm9wcy52aXNTdGF0ZS5tYXBJbmZvLFxuICBsYXllckJsZW5kaW5nOiBwcm9wcy52aXNTdGF0ZS5sYXllckJsZW5kaW5nLFxuICBvdmVybGF5QmxlbmRpbmc6IHByb3BzLnZpc1N0YXRlLm92ZXJsYXlCbGVuZGluZyxcblxuICB3aWR0aDogcHJvcHMuc2lkZVBhbmVsV2lkdGggPyBwcm9wcy5zaWRlUGFuZWxXaWR0aCA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLndpZHRoLFxuICBhdmFpbGFibGVQcm92aWRlcnMsXG4gIG1hcFNhdmVkOiBwcm9wcy5wcm92aWRlclN0YXRlLm1hcFNhdmVkXG59KTtcblxuZXhwb3J0IGNvbnN0IHBsb3RDb250YWluZXJTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcykgPT4gKHtcbiAgd2lkdGg6IHByb3BzLndpZHRoLFxuICBoZWlnaHQ6IHByb3BzLmhlaWdodCxcbiAgZXhwb3J0SW1hZ2VTZXR0aW5nOiBwcm9wcy51aVN0YXRlLmV4cG9ydEltYWdlLFxuICBtYXBGaWVsZHM6IG1hcEZpZWxkc1NlbGVjdG9yKHByb3BzKSxcbiAgYWRkTm90aWZpY2F0aW9uOiBwcm9wcy51aVN0YXRlQWN0aW9ucy5hZGROb3RpZmljYXRpb24sXG4gIHNldEV4cG9ydEltYWdlU2V0dGluZzogcHJvcHMudWlTdGF0ZUFjdGlvbnMuc2V0RXhwb3J0SW1hZ2VTZXR0aW5nLFxuICBzZXRFeHBvcnRJbWFnZURhdGFVcmk6IHByb3BzLnVpU3RhdGVBY3Rpb25zLnNldEV4cG9ydEltYWdlRGF0YVVyaSxcbiAgc2V0RXhwb3J0SW1hZ2VFcnJvcjogcHJvcHMudWlTdGF0ZUFjdGlvbnMuc2V0RXhwb3J0SW1hZ2VFcnJvcixcbiAgc3BsaXRNYXBzOiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHNcbn0pO1xuXG5leHBvcnQgY29uc3QgaXNTcGxpdFNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzKSA9PlxuICBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMgJiYgcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA+IDE7XG5cbmV4cG9ydCBjb25zdCBib3R0b21XaWRnZXRTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcywgdGhlbWUpID0+ICh7XG4gIGZpbHRlcnM6IHByb3BzLnZpc1N0YXRlLmZpbHRlcnMsXG4gIGRhdGFzZXRzOiBwcm9wcy52aXNTdGF0ZS5kYXRhc2V0cyxcbiAgdWlTdGF0ZTogcHJvcHMudWlTdGF0ZSxcbiAgbGF5ZXJzOiBwcm9wcy52aXNTdGF0ZS5sYXllcnMsXG4gIGFuaW1hdGlvbkNvbmZpZzogcHJvcHMudmlzU3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICB2aXNTdGF0ZUFjdGlvbnM6IHByb3BzLnZpc1N0YXRlQWN0aW9ucyxcbiAgdG9nZ2xlTW9kYWw6IHByb3BzLnVpU3RhdGVBY3Rpb25zLnRvZ2dsZU1vZGFsLFxuICBzaWRlUGFuZWxXaWR0aDogcHJvcHMudWlTdGF0ZS5yZWFkT25seSA/IDAgOiBwcm9wcy5zaWRlUGFuZWxXaWR0aCArIHRoZW1lLnNpZGVQYW5lbC5tYXJnaW4ubGVmdFxufSk7XG5cbmV4cG9ydCBjb25zdCBtb2RhbENvbnRhaW5lclNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzLCByb290Tm9kZSkgPT4gKHtcbiAgYXBwTmFtZTogcHJvcHMuYXBwTmFtZSA/IHByb3BzLmFwcE5hbWUgOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy5hcHBOYW1lLFxuICBtYXBTdHlsZTogcHJvcHMubWFwU3R5bGUsXG4gIHZpc1N0YXRlOiBwcm9wcy52aXNTdGF0ZSxcbiAgbWFwU3RhdGU6IHByb3BzLm1hcFN0YXRlLFxuICB1aVN0YXRlOiBwcm9wcy51aVN0YXRlLFxuICBwcm92aWRlclN0YXRlOiBwcm9wcy5wcm92aWRlclN0YXRlLFxuXG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBwcm9wcy5tYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgbWFwYm94QXBpVXJsOiBwcm9wcy5tYXBib3hBcGlVcmwsXG4gIHZpc1N0YXRlQWN0aW9uczogcHJvcHMudmlzU3RhdGVBY3Rpb25zLFxuICB1aVN0YXRlQWN0aW9uczogcHJvcHMudWlTdGF0ZUFjdGlvbnMsXG4gIG1hcFN0eWxlQWN0aW9uczogcHJvcHMubWFwU3R5bGVBY3Rpb25zLFxuICBwcm92aWRlckFjdGlvbnM6IHByb3BzLnByb3ZpZGVyQWN0aW9ucyxcblxuICByb290Tm9kZSxcbiAgLy8gVXNlciBkZWZpbmVkIGNsb3VkIHByb3ZpZGVyIHByb3BzXG4gIGNsb3VkUHJvdmlkZXJzOiBwcm9wcy5jbG91ZFByb3ZpZGVyc1xuICAgID8gcHJvcHMuY2xvdWRQcm92aWRlcnNcbiAgICA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLmNsb3VkUHJvdmlkZXJzLFxuICBvbkV4cG9ydFRvQ2xvdWRTdWNjZXNzOiBwcm9wcy5vbkV4cG9ydFRvQ2xvdWRTdWNjZXNzLFxuICBvbkxvYWRDbG91ZE1hcFN1Y2Nlc3M6IHByb3BzLm9uTG9hZENsb3VkTWFwU3VjY2VzcyxcbiAgb25Mb2FkQ2xvdWRNYXBFcnJvcjogcHJvcHMub25Mb2FkQ2xvdWRNYXBFcnJvcixcbiAgb25FeHBvcnRUb0Nsb3VkRXJyb3I6IHByb3BzLm9uRXhwb3J0VG9DbG91ZEVycm9yXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlb0NvZGVyUGFuZWxTZWxlY3RvciA9IChcbiAgcHJvcHM6IEtlcGxlckdMUHJvcHMsXG4gIGRpbWVuc2lvbnM6IHt3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcn1cbikgPT4gKHtcbiAgaXNHZW9jb2RlckVuYWJsZWQ6IHByb3BzLnZpc1N0YXRlLmludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWQsXG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBwcm9wcy5tYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgbWFwU3RhdGU6IHByb3BzLm1hcFN0YXRlLFxuICB1aVN0YXRlOiBwcm9wcy51aVN0YXRlLFxuICBsYXllck9yZGVyOiBwcm9wcy52aXNTdGF0ZS5sYXllck9yZGVyLFxuICB1cGRhdGVWaXNEYXRhOiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMudXBkYXRlVmlzRGF0YSxcbiAgcmVtb3ZlRGF0YXNldDogcHJvcHMudmlzU3RhdGVBY3Rpb25zLnJlbW92ZURhdGFzZXQsXG4gIHVwZGF0ZU1hcDogcHJvcHMubWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcCxcbiAgYXBwV2lkdGg6IGRpbWVuc2lvbnMud2lkdGhcbn0pO1xuXG4vKipcbiAqIFJldHVybnMgYXJyYXkgb2YgdW5pcXVlIGRhdGFzZXQgYXR0cmlidXRpb25zLCBlYWNoIHdpdGggdGl0bGUgYW5kIHVybCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgY29uc3QgZGF0YXNldEF0dHJpYnV0aW9uU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgW3N0YXRlID0+IHN0YXRlLnZpc1N0YXRlLmRhdGFzZXRzXSxcbiAgZGF0YXNldHMgPT4ge1xuICAgIGNvbnN0IHVuaXF1ZUF0dHJpYnV0aW9uczogRGF0YXNldEF0dHJpYnV0aW9uW10gPSBbXTtcbiAgICBPYmplY3Qua2V5cyhkYXRhc2V0cykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgZHMgPSBkYXRhc2V0c1trZXldO1xuICAgICAgY29uc3QgYXR0cmlidXRpb25zID0gZHM/Lm1ldGFkYXRhPy5hdHRyaWJ1dGlvbnM7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhdHRyaWJ1dGlvbnMpKSB7XG4gICAgICAgIGF0dHJpYnV0aW9ucy5mb3JFYWNoKGF0dHJpYnV0aW9uID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGF0dHJpYnV0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gYXR0cmlidXRpb24gY2FuIGJlIGEgcmF3IHN0cmluZyBvciBhIHN0cmluZyB3aXRoIGxpbmsgdGFnc1xuICAgICAgICAgICAgY29uc3QgbGlua3MgPSBhdHRyaWJ1dGlvbi5tYXRjaCgvPGFbXl0rP2E+L2cpO1xuICAgICAgICAgICAgaWYgKGxpbmtzKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGlua3M/LmZvckVhY2gobGluayA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBocmVmID0gbGluay5tYXRjaCgvaHJlZj1cIihbXlwiXSopLyk/LlsxXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gbGluay5tYXRjaCgvdGl0bGU9XCIoW15cIl0qKS8pPy5bMV07XG4gICAgICAgICAgICAgICAgICBpZiAoaHJlZiAmJiB0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICB1bmlxdWVBdHRyaWJ1dGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGAke2xpbmsuaW5kZXhPZignJmNvcHk7JykgPj0gMCA/ICfCqSAnIDogJyd9JHt0aXRsZX1gLFxuICAgICAgICAgICAgICAgICAgICAgIHVybDogaHJlZlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBqdXN0IGlnbm9yZSBmb3Igbm93XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHVuaXF1ZUF0dHJpYnV0aW9ucy5wdXNoKHt0aXRsZTogYXR0cmlidXRpb24sIHVybDogbnVsbH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHVuaXF1ZUF0dHJpYnV0aW9ucztcbiAgfVxuKTtcblxuLyoqXG4gKiBEZWR1cGxpY2F0ZWQgZGF0YXNldCBhbmQgbGF5ZXIgdGV4dCBhdHRyaWJ1dGlvbnMgYW5kIGxvZ29zLlxuICogUmV0dXJucyB0ZXh0IGF0dHJpYnV0aW9ucyBhbmQgbG9nb3MgdG8gZGlzcGxheS5cbiAqL1xuZXhwb3J0IGNvbnN0IGF0dHJpYnV0aW9uU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgW2RhdGFzZXRBdHRyaWJ1dGlvblNlbGVjdG9yXSxcbiAgZGF0YXNldEF0dHJpYnV0aW9ucyA9PiB7XG4gICAgLy8gVE9ETyBjb2xsZWN0IGF0dHJpYnV0aW9ucyBmcm9tIGxheWVycywgYW5kIG1lcmdlIHdpdGggZGF0YXNldCBhdHRyaWJ1dGlvbnMgaGVyZVxuICAgIGNvbnN0IHVuaXF1ZVRleHRBdHRyaWJ1dGlvbnMgPSBkYXRhc2V0QXR0cmlidXRpb25zO1xuICAgIGNvbnN0IGxvZ29zOiBBdHRyaWJ1dGlvbldpdGhTdHlsZVtdID0gW107XG5cbiAgICByZXR1cm4ge3NvdXJjZXM6IHVuaXF1ZVRleHRBdHRyaWJ1dGlvbnMsIGxvZ29zfTtcbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IG5vdGlmaWNhdGlvblBhbmVsU2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+ICh7XG4gIHJlbW92ZU5vdGlmaWNhdGlvbjogcHJvcHMudWlTdGF0ZUFjdGlvbnMucmVtb3ZlTm90aWZpY2F0aW9uLFxuICBub3RpZmljYXRpb25zOiBwcm9wcy51aVN0YXRlLm5vdGlmaWNhdGlvbnNcbn0pO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMgPSB7XG4gIG1hcFN0eWxlczogW10sXG4gIG1hcFN0eWxlc1JlcGxhY2VEZWZhdWx0OiBmYWxzZSxcbiAgbWFwYm94QXBpVXJsOiBERUZBVUxUX01BUEJPWF9BUElfVVJMLFxuICB3aWR0aDogODAwLFxuICBoZWlnaHQ6IDgwMCxcbiAgYXBwTmFtZTogS0VQTEVSX0dMX05BTUUsXG4gIHZlcnNpb246IEtFUExFUl9HTF9WRVJTSU9OLFxuICBzaWRlUGFuZWxXaWR0aDogRElNRU5TSU9OUy5zaWRlUGFuZWwud2lkdGgsXG4gIHRoZW1lOiB7fSxcbiAgY2xvdWRQcm92aWRlcnM6IFtdLFxuICByZWFkT25seTogZmFsc2UsXG4gIGZlYXR1cmVGbGFnczoge31cbn07XG5cbnR5cGUgS2VwbGVyR0xCYXNpY1Byb3BzID0ge1xuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBtYXBib3hBcGlVcmw/OiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG5cbiAgYXBwV2Vic2l0ZT86IGFueTtcbiAgb25TYXZlTWFwPzogKCkgPT4gdm9pZDtcbiAgb25WaWV3U3RhdGVDaGFuZ2U/OiAodmlld1N0YXRlOiBWaWV3cG9ydCkgPT4gdm9pZDtcbiAgb25EZWNrSW5pdGlhbGl6ZWQ/OiAoKSA9PiB2b2lkO1xuICBvbktlcGxlckdsSW5pdGlhbGl6ZWQ/OiAoKSA9PiB2b2lkO1xuICBnZXRNYXBib3hSZWY/OiAoKSA9PiBSZWFjdC5SZWZPYmplY3Q8YW55PjtcbiAgbWFwU3R5bGVzPzoge2lkOiBzdHJpbmc7IHN0eWxlPzogb2JqZWN0fVtdO1xuICBtYXBTdHlsZXNSZXBsYWNlRGVmYXVsdD86IGJvb2xlYW47XG4gIGFwcE5hbWU/OiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIHNpZGVQYW5lbFdpZHRoPzogbnVtYmVyO1xuICB0aGVtZT86IG9iamVjdDtcbiAgY2xvdWRQcm92aWRlcnM/OiBQcm92aWRlcltdO1xuICBkZWNrR2xQcm9wcz86IG9iamVjdDtcbiAgb25Mb2FkQ2xvdWRNYXBTdWNjZXNzPzogT25TdWNjZXNzQ2FsbEJhY2s7XG4gIG9uTG9hZENsb3VkTWFwRXJyb3I/OiBPbkVycm9yQ2FsbEJhY2s7XG4gIG9uTW91c2VNb3ZlPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50ICYge2xuZ0xhdD86IFtudW1iZXIsIG51bWJlcl19KSA9PiB2b2lkO1xuICBvbkV4cG9ydFRvQ2xvdWRTdWNjZXNzPzogT25TdWNjZXNzQ2FsbEJhY2s7XG4gIG9uRXhwb3J0VG9DbG91ZEVycm9yPzogT25FcnJvckNhbGxCYWNrO1xuICByZWFkT25seT86IGJvb2xlYW47XG4gIGZlYXR1cmVGbGFncz86IEZlYXR1cmVGbGFncztcblxuICBsb2NhbGVNZXNzYWdlcz86IHtba2V5OiBzdHJpbmddOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfX07XG4gIGRpc3BhdGNoOiBEaXNwYXRjaDxhbnk+O1xuXG4gIHRvcE1hcENvbnRhaW5lclByb3BzPzogb2JqZWN0O1xuICBib3R0b21NYXBDb250YWluZXJQcm9wcz86IG9iamVjdDtcblxuICB0cmFuc2Zvcm1SZXF1ZXN0PzogKHVybDogc3RyaW5nKSA9PiB7dXJsOiBzdHJpbmd9O1xufTtcblxudHlwZSBLZXBsZXJHTFByb3BzID0gS2VwbGVyR2xTdGF0ZSAmIEtlcGxlckdsQWN0aW9ucyAmIEtlcGxlckdMQmFzaWNQcm9wcztcbnR5cGUgS2VwbGVyR0xDb21wU3RhdGUgPSB7XG4gIGRpbWVuc2lvbnM6IHt3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcn0gfCBudWxsO1xufTtcblxuS2VwbGVyR2xGYWN0b3J5LmRlcHMgPSBbXG4gIEJvdHRvbVdpZGdldEZhY3RvcnksXG4gIEdlb0NvZGVyUGFuZWxGYWN0b3J5LFxuICBNYXBDb250YWluZXJGYWN0b3J5LFxuICBNYXBzTGF5b3V0RmFjdG9yeSxcbiAgTW9kYWxDb250YWluZXJGYWN0b3J5LFxuICBTaWRlUGFuZWxGYWN0b3J5LFxuICBQbG90Q29udGFpbmVyRmFjdG9yeSxcbiAgTm90aWZpY2F0aW9uUGFuZWxGYWN0b3J5LFxuICBEbmRDb250ZXh0RmFjdG9yeSxcbiAgRWZmZWN0TWFuYWdlckZhY3Rvcnlcbl07XG5cbmZ1bmN0aW9uIEtlcGxlckdsRmFjdG9yeShcbiAgQm90dG9tV2lkZ2V0OiBSZXR1cm5UeXBlPHR5cGVvZiBCb3R0b21XaWRnZXRGYWN0b3J5PixcbiAgR2VvQ29kZXJQYW5lbDogUmV0dXJuVHlwZTx0eXBlb2YgR2VvQ29kZXJQYW5lbEZhY3Rvcnk+LFxuICBNYXBDb250YWluZXI6IFJldHVyblR5cGU8dHlwZW9mIE1hcENvbnRhaW5lckZhY3Rvcnk+LFxuICBNYXBzTGF5b3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBzTGF5b3V0RmFjdG9yeT4sXG4gIE1vZGFsQ29udGFpbmVyOiBSZXR1cm5UeXBlPHR5cGVvZiBNb2RhbENvbnRhaW5lckZhY3Rvcnk+LFxuICBTaWRlUGFuZWw6IFJldHVyblR5cGU8dHlwZW9mIFNpZGVQYW5lbEZhY3Rvcnk+LFxuICBQbG90Q29udGFpbmVyOiBSZXR1cm5UeXBlPHR5cGVvZiBQbG90Q29udGFpbmVyRmFjdG9yeT4sXG4gIE5vdGlmaWNhdGlvblBhbmVsOiBSZXR1cm5UeXBlPHR5cGVvZiBOb3RpZmljYXRpb25QYW5lbEZhY3Rvcnk+LFxuICBEbmRDb250ZXh0OiBSZXR1cm5UeXBlPHR5cGVvZiBEbmRDb250ZXh0RmFjdG9yeT5cbik6IFJlYWN0LkNvbXBvbmVudFR5cGU8S2VwbGVyR0xCYXNpY1Byb3BzICYge3NlbGVjdG9yOiAoLi4uYXJnczogYW55W10pID0+IEtlcGxlckdsU3RhdGV9PiB7XG4gIC8qKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2tlcGxlci1nbCcpLlVuY29ubmVjdGVkS2VwbGVyR2xQcm9wc30gS2VwbGVyR2xQcm9wcyAqL1xuICAvKiogQGF1Z21lbnRzIFJlYWN0LkNvbXBvbmVudDxLZXBsZXJHbFByb3BzPiAqL1xuICBjbGFzcyBLZXBsZXJHTCBleHRlbmRzIENvbXBvbmVudDxcbiAgICBLZXBsZXJHTFByb3BzICYge3NlbGVjdG9yOiAoLi4uYXJnczogYW55W10pID0+IEtlcGxlckdsU3RhdGV9LFxuICAgIEtlcGxlckdMQ29tcFN0YXRlXG4gID4ge1xuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSBERUZBVUxUX0tFUExFUl9HTF9QUk9QUztcblxuICAgIHN0YXRlOiBLZXBsZXJHTENvbXBTdGF0ZSA9IHtcbiAgICAgIGRpbWVuc2lvbnM6IG51bGxcbiAgICB9O1xuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLl92YWxpZGF0ZU1hcGJveFRva2VuKCk7XG4gICAgICB0aGlzLl9sb2FkTWFwU3R5bGUoKTtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbktlcGxlckdsSW5pdGlhbGl6ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbktlcGxlckdsSW5pdGlhbGl6ZWQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJvb3QuY3VycmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVEaW1lbnNpb25zKHRoaXMucm9vdC5jdXJyZW50LCB0aGlzLl9oYW5kbGVSZXNpemUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucm9vdC5jdXJyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgdW5vYnNlcnZlRGltZW5zaW9ucyh0aGlzLnJvb3QuY3VycmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2hhbmRsZVJlc2l6ZSA9IGRpbWVuc2lvbnMgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7ZGltZW5zaW9uc30pO1xuICAgIH07XG5cbiAgICBzdGF0aWMgY29udGV4dFR5cGUgPSBSb290Q29udGV4dDtcblxuICAgIHJvb3QgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG4gICAgYm90dG9tV2lkZ2V0UmVmID0gY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuXG4gICAgLyogc2VsZWN0b3JzICovXG4gICAgdGhlbWVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnRoZW1lO1xuICAgIGF2YWlsYWJsZVRoZW1lU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLnRoZW1lU2VsZWN0b3IsIHRoZW1lID0+XG4gICAgICB0eXBlb2YgdGhlbWUgPT09ICdvYmplY3QnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uYmFzaWNUaGVtZSxcbiAgICAgICAgICAgIC4uLnRoZW1lXG4gICAgICAgICAgfVxuICAgICAgICA6IHRoZW1lID09PSBUSEVNRS5saWdodFxuICAgICAgICA/IHRoZW1lTFRcbiAgICAgICAgOiB0aGVtZSA9PT0gVEhFTUUuYmFzZVxuICAgICAgICA/IHRoZW1lQlNcbiAgICAgICAgOiB0aGVtZVxuICAgICk7XG5cbiAgICBkYXRhc2V0c1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZGF0YXNldHM7XG4gICAgZmlsdGVyZWREYXRhc2V0c1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IodGhpcy5kYXRhc2V0c1NlbGVjdG9yLCBnZXRWaXNpYmxlRGF0YXNldHMpO1xuXG4gICAgYXZhaWxhYmxlUHJvdmlkZXJzID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+IHByb3BzLmNsb3VkUHJvdmlkZXJzLFxuICAgICAgcHJvdmlkZXJzID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkocHJvdmlkZXJzKSAmJiBwcm92aWRlcnMubGVuZ3RoXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGhhc1N0b3JhZ2U6IHByb3ZpZGVycy5zb21lKHAgPT4gcC5oYXNQcml2YXRlU3RvcmFnZSgpKSxcbiAgICAgICAgICAgICAgaGFzU2hhcmU6IHByb3ZpZGVycy5zb21lKHAgPT4gcC5oYXNTaGFyaW5nVXJsKCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fVxuICAgICk7XG5cbiAgICBsb2NhbGVNZXNzYWdlc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+IHByb3BzLmxvY2FsZU1lc3NhZ2VzLFxuICAgICAgY3VzdG9tTWVzc2FnZXMgPT4gKGN1c3RvbU1lc3NhZ2VzID8gbWVyZ2VNZXNzYWdlcyhtZXNzYWdlcywgY3VzdG9tTWVzc2FnZXMpIDogbWVzc2FnZXMpXG4gICAgKTtcblxuICAgIC8qIHByaXZhdGUgbWV0aG9kcyAqL1xuICAgIF92YWxpZGF0ZU1hcGJveFRva2VuKCkge1xuICAgICAgY29uc3Qge21hcGJveEFwaUFjY2Vzc1Rva2VufSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoIXZhbGlkYXRlVG9rZW4obWFwYm94QXBpQWNjZXNzVG9rZW4pKSB7XG4gICAgICAgIENvbnNvbGUud2FybihNSVNTSU5HX01BUEJPWF9UT0tFTik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2xvYWRNYXBTdHlsZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTdHlsZXMgPSBPYmplY3QudmFsdWVzKHRoaXMucHJvcHMubWFwU3R5bGUubWFwU3R5bGVzKTtcbiAgICAgIC8vIGFkZCBpZCB0byBjdXN0b20gbWFwIHN0eWxlcyBpZiBub3QgZ2l2ZW5cbiAgICAgIGNvbnN0IGN1c3RvbVN0eWxlcyA9ICh0aGlzLnByb3BzLm1hcFN0eWxlcyB8fCBbXSkubWFwKG1zID0+ICh7XG4gICAgICAgIC4uLm1zLFxuICAgICAgICBpZDogbXMuaWQgfHwgZ2VuZXJhdGVIYXNoSWQoKVxuICAgICAgfSkpO1xuXG4gICAgICBjb25zdCBhbGxTdHlsZXMgPSBbLi4uY3VzdG9tU3R5bGVzLCAuLi5kZWZhdWx0U3R5bGVzXS5yZWR1Y2UoKGFjY3UsIHN0eWxlKSA9PiB7XG4gICAgICAgIGFjY3Vbc3R5bGUuaWRdID0gc3R5bGU7XG4gICAgICAgIHJldHVybiBhY2N1O1xuICAgICAgfSwge30pO1xuXG4gICAgICB0aGlzLnByb3BzLm1hcFN0eWxlQWN0aW9ucy5sb2FkTWFwU3R5bGVzKGFsbFN0eWxlcyk7XG4gICAgfTtcblxuICAgIF9kZWxldGVNYXBMYWJlbHMgPSAoY29udGFpbmVySWQsIGxheWVySWQpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUxheWVyRm9yTWFwKGNvbnRhaW5lcklkLCBsYXllcklkKTtcbiAgICB9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGlkID0gJ21hcCcsXG4gICAgICAgIHdpZHRoID0gREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMud2lkdGgsXG4gICAgICAgIGhlaWdodCA9IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLmhlaWdodCxcbiAgICAgICAgdWlTdGF0ZSxcbiAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgIC8vIHJlYWRPbmx5IG92ZXJyaWRlXG4gICAgICAgIHJlYWRPbmx5LFxuXG4gICAgICAgIC8vIGZlYXR1cmVzXG4gICAgICAgIGZlYXR1cmVGbGFncyxcblxuICAgICAgICAvLyBjbG91ZCBwcm92aWRlcnNcbiAgICAgICAgY2xvdWRQcm92aWRlcnMgPSBbXVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLnN0YXRlLmRpbWVuc2lvbnMgfHwge3dpZHRoLCBoZWlnaHR9O1xuICAgICAgY29uc3Qge1xuICAgICAgICBzcGxpdE1hcHMsIC8vIHRoaXMgd2lsbCBzdG9yZSBzdXBwb3J0IGZvciBzcGxpdCBtYXAgdmlldyBpcyBuZWNlc3NhcnlcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdcbiAgICAgIH0gPSB2aXNTdGF0ZTtcblxuICAgICAgY29uc3QgaXNTcGxpdCA9IGlzU3BsaXRTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IHRoZW1lID0gdGhpcy5hdmFpbGFibGVUaGVtZVNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbG9jYWxlTWVzc2FnZXMgPSB0aGlzLmxvY2FsZU1lc3NhZ2VzU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBpc0V4cG9ydGluZ0ltYWdlID0gdWlTdGF0ZS5leHBvcnRJbWFnZS5leHBvcnRpbmc7XG4gICAgICBjb25zdCBhdmFpbGFibGVQcm92aWRlcnMgPSB0aGlzLmF2YWlsYWJsZVByb3ZpZGVycyh0aGlzLnByb3BzKTtcblxuICAgICAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IHRoaXMuZmlsdGVyZWREYXRhc2V0c1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3Qgc2lkZUZpZWxkcyA9IHNpZGVQYW5lbFNlbGVjdG9yKHRoaXMucHJvcHMsIGF2YWlsYWJsZVByb3ZpZGVycywgZmlsdGVyZWREYXRhc2V0cyk7XG4gICAgICBjb25zdCBwbG90Q29udGFpbmVyRmllbGRzID0gcGxvdENvbnRhaW5lclNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgYm90dG9tV2lkZ2V0RmllbGRzID0gYm90dG9tV2lkZ2V0U2VsZWN0b3IodGhpcy5wcm9wcywgdGhlbWUpO1xuICAgICAgY29uc3QgbW9kYWxDb250YWluZXJGaWVsZHMgPSBtb2RhbENvbnRhaW5lclNlbGVjdG9yKHRoaXMucHJvcHMsIHRoaXMucm9vdC5jdXJyZW50KTtcbiAgICAgIGNvbnN0IGdlb0NvZGVyUGFuZWxGaWVsZHMgPSBnZW9Db2RlclBhbmVsU2VsZWN0b3IodGhpcy5wcm9wcywgZGltZW5zaW9ucyk7XG4gICAgICBjb25zdCBub3RpZmljYXRpb25QYW5lbEZpZWxkcyA9IG5vdGlmaWNhdGlvblBhbmVsU2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIGNvbnN0IG1hcENvbnRhaW5lcnMgPSAhaXNTcGxpdFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIDxNYXBDb250YWluZXJcbiAgICAgICAgICAgICAgcHJpbWFyeT17dHJ1ZX1cbiAgICAgICAgICAgICAga2V5PXswfVxuICAgICAgICAgICAgICBpbmRleD17MH1cbiAgICAgICAgICAgICAgey4uLm1hcEZpZWxkc1NlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgICBjb250YWluZXJJZD17MH1cbiAgICAgICAgICAgICAgZGVsZXRlTWFwTGFiZWxzPXt0aGlzLl9kZWxldGVNYXBMYWJlbHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIF1cbiAgICAgICAgOiBzcGxpdE1hcHMubWFwKChzZXR0aW5ncywgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxNYXBDb250YWluZXJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICBwcmltYXJ5PXtpbmRleCA9PT0gMX1cbiAgICAgICAgICAgICAgey4uLm1hcEZpZWxkc1NlbGVjdG9yKHRoaXMucHJvcHMsIGluZGV4KX1cbiAgICAgICAgICAgICAgY29udGFpbmVySWQ9e2luZGV4fVxuICAgICAgICAgICAgICBkZWxldGVNYXBMYWJlbHM9e3RoaXMuX2RlbGV0ZU1hcExhYmVsc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxSb290Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17dGhpcy5yb290fT5cbiAgICAgICAgICA8RmVhdHVyZUZsYWdzQ29udGV4dFByb3ZpZGVyIGZlYXR1cmVGbGFncz17ZmVhdHVyZUZsYWdzfT5cbiAgICAgICAgICAgIDxJbnRsUHJvdmlkZXIgbG9jYWxlPXt1aVN0YXRlLmxvY2FsZX0gbWVzc2FnZXM9e2xvY2FsZU1lc3NhZ2VzW3VpU3RhdGUubG9jYWxlXX0+XG4gICAgICAgICAgICAgIDxTdHlsZVNoZWV0TWFuYWdlciBzaG91bGRGb3J3YXJkUHJvcD17c2hvdWxkRm9yd2FyZFByb3B9PlxuICAgICAgICAgICAgICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZX0+XG4gICAgICAgICAgICAgICAgICA8Q2xvdWRMaXN0UHJvdmlkZXIgcHJvdmlkZXJzPXtjbG91ZFByb3ZpZGVyc30+XG4gICAgICAgICAgICAgICAgICAgIDxHbG9iYWxTdHlsZVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImtlcGxlci1nbFwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2BrZXBsZXItZ2xfXyR7aWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBgJHt3aWR0aH1weGAsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGAke2hlaWdodH1weGBcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy5yb290fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPE5vdGlmaWNhdGlvblBhbmVsIHsuLi5ub3RpZmljYXRpb25QYW5lbEZpZWxkc30gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8RG5kQ29udGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHshdWlTdGF0ZS5yZWFkT25seSAmJiAhcmVhZE9ubHkgJiYgPFNpZGVQYW5lbCB7Li4uc2lkZUZpZWxkc30gLz59XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFwc0xheW91dCBjbGFzc05hbWU9XCJtYXBzXCIgbWFwU3RhdGU9e3RoaXMucHJvcHMubWFwU3RhdGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7bWFwQ29udGFpbmVyc31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTWFwc0xheW91dD5cbiAgICAgICAgICAgICAgICAgICAgICA8L0RuZENvbnRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAge2lzRXhwb3J0aW5nSW1hZ2UgJiYgPFBsb3RDb250YWluZXIgey4uLnBsb3RDb250YWluZXJGaWVsZHN9IC8+fVxuICAgICAgICAgICAgICAgICAgICAgIHsvKiAxIGdlb2NvZGVyOiBzaW5nbGUgbW9kZSBPUiBzcGxpdCBtb2RlIGFuZCBzeW5jZWQgdmlld3BvcnRzICovfVxuICAgICAgICAgICAgICAgICAgICAgIHshaXNWaWV3cG9ydERpc2pvaW50ZWQodGhpcy5wcm9wcykgJiYgaW50ZXJhY3Rpb25Db25maWcuZ2VvY29kZXIuZW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8R2VvQ29kZXJQYW5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4uZ2VvQ29kZXJQYW5lbEZpZWxkc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9ezB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3luY2VkVmlld3BvcnRzPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICB7LyogMiBnZW9jb2RlcnM6IHNwbGl0IG1vZGUgYW5kIHVuc3luY2VkIHZpZXdwb3J0cyAqL31cbiAgICAgICAgICAgICAgICAgICAgICB7aXNWaWV3cG9ydERpc2pvaW50ZWQodGhpcy5wcm9wcykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcENvbnRhaW5lcnMubWFwKChfbWFwQ29udGFpbmVyLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8R2VvQ29kZXJQYW5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLmdlb0NvZGVyUGFuZWxGaWVsZHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3luY2VkVmlld3BvcnRzPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgPEJvdHRvbVdpZGdldE91dGVyIGFic29sdXRlPXshaGFzUG9ydGFibGVXaWR0aChicmVha1BvaW50VmFsdWVzKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm90dG9tV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RSZWY9e3RoaXMuYm90dG9tV2lkZ2V0UmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4uYm90dG9tV2lkZ2V0RmllbGRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJXPXtkaW1lbnNpb25zLndpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvQm90dG9tV2lkZ2V0T3V0ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPE1vZGFsQ29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4ubW9kYWxDb250YWluZXJGaWVsZHN9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJXPXtkaW1lbnNpb25zLndpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVySD17ZGltZW5zaW9ucy5oZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9HbG9iYWxTdHlsZT5cbiAgICAgICAgICAgICAgICAgIDwvQ2xvdWRMaXN0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9UaGVtZVByb3ZpZGVyPlxuICAgICAgICAgICAgICA8L1N0eWxlU2hlZXRNYW5hZ2VyPlxuICAgICAgICAgICAgPC9JbnRsUHJvdmlkZXI+XG4gICAgICAgICAgPC9GZWF0dXJlRmxhZ3NDb250ZXh0UHJvdmlkZXI+XG4gICAgICAgIDwvUm9vdENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBrZXBsZXJHbENvbm5lY3QoXG4gICAgbWFwU3RhdGVUb1Byb3BzLFxuICAgIG1ha2VNYXBEaXNwYXRjaFRvUHJvcHNcbiAgKSh3aXRoVGhlbWUoS2VwbGVyR0wpKSBhcyBSZXR1cm5UeXBlPHR5cGVvZiBLZXBsZXJHbEZhY3Rvcnk+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwU3RhdGVUb1Byb3BzKHN0YXRlOiBLZXBsZXJHbFN0YXRlLCBwcm9wczogS2VwbGVyR0xQcm9wcykge1xuICByZXR1cm4ge1xuICAgIC4uLnByb3BzLFxuICAgIHZpc1N0YXRlOiBzdGF0ZS52aXNTdGF0ZSxcbiAgICBtYXBTdHlsZTogc3RhdGUubWFwU3R5bGUsXG4gICAgbWFwU3RhdGU6IHN0YXRlLm1hcFN0YXRlLFxuICAgIHVpU3RhdGU6IHN0YXRlLnVpU3RhdGUsXG4gICAgcHJvdmlkZXJTdGF0ZTogc3RhdGUucHJvdmlkZXJTdGF0ZVxuICB9O1xufVxuXG5jb25zdCBkZWZhdWx0VXNlckFjdGlvbnMgPSB7fTtcblxuY29uc3QgZ2V0RGlzcGF0Y2ggPSBkaXNwYXRjaCA9PiBkaXNwYXRjaDtcbmNvbnN0IGdldFVzZXJBY3Rpb25zID0gKGRpc3BhdGNoLCBwcm9wcykgPT4gcHJvcHMuYWN0aW9ucyB8fCBkZWZhdWx0VXNlckFjdGlvbnM7XG5cbi8qKiBAdHlwZSB7KCkgPT4gaW1wb3J0KCdyZXNlbGVjdCcpLk91dHB1dFBhcmFtZXRyaWNTZWxlY3RvcjxhbnksIGFueSwgYW55LCBhbnk+fSAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VHZXRBY3Rpb25DcmVhdG9ycygpIHtcbiAgcmV0dXJuIGNyZWF0ZVNlbGVjdG9yKFtnZXREaXNwYXRjaCwgZ2V0VXNlckFjdGlvbnNdLCAoZGlzcGF0Y2gsIHVzZXJBY3Rpb25zKSA9PiB7XG4gICAgY29uc3QgW3Zpc1N0YXRlQWN0aW9ucywgbWFwU3RhdGVBY3Rpb25zLCBtYXBTdHlsZUFjdGlvbnMsIHVpU3RhdGVBY3Rpb25zLCBwcm92aWRlckFjdGlvbnNdID0gW1xuICAgICAgVmlzU3RhdGVBY3Rpb25zLFxuICAgICAgTWFwU3RhdGVBY3Rpb25zLFxuICAgICAgTWFwU3R5bGVBY3Rpb25zLFxuICAgICAgVUlTdGF0ZUFjdGlvbnMsXG4gICAgICBQcm92aWRlckFjdGlvbnNcbiAgICBdLm1hcChhY3Rpb25zID0+IGJpbmRBY3Rpb25DcmVhdG9ycyhtZXJnZUFjdGlvbnMoYWN0aW9ucywgdXNlckFjdGlvbnMpLCBkaXNwYXRjaCkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgIG1hcFN0YXRlQWN0aW9ucyxcbiAgICAgIG1hcFN0eWxlQWN0aW9ucyxcbiAgICAgIHVpU3RhdGVBY3Rpb25zLFxuICAgICAgcHJvdmlkZXJBY3Rpb25zLFxuICAgICAgZGlzcGF0Y2hcbiAgICB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFrZU1hcERpc3BhdGNoVG9Qcm9wcygpIHtcbiAgY29uc3QgZ2V0QWN0aW9uQ3JlYXRvcnMgPSBtYWtlR2V0QWN0aW9uQ3JlYXRvcnMoKTtcbiAgY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gKGRpc3BhdGNoLCBvd25Qcm9wcykgPT4ge1xuICAgIGNvbnN0IGdyb3VwZWRBY3Rpb25DcmVhdG9ycyA9IGdldEFjdGlvbkNyZWF0b3JzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZ3JvdXBlZEFjdGlvbkNyZWF0b3JzLFxuICAgICAgZGlzcGF0Y2hcbiAgICB9O1xuICB9O1xuXG4gIHJldHVybiBtYXBEaXNwYXRjaFRvUHJvcHM7XG59XG5cbi8qKlxuICogT3ZlcnJpZGUgZGVmYXVsdCBrZXBsZXIuZ2wgYWN0aW9ucyB3aXRoIHVzZXIgZGVmaW5lZCBhY3Rpb25zIHVzaW5nIHRoZSBzYW1lIGtleVxuICovXG5mdW5jdGlvbiBtZXJnZUFjdGlvbnMoYWN0aW9ucywgdXNlckFjdGlvbnMpIHtcbiAgY29uc3Qgb3ZlcnJpZGVzID0ge307XG4gIGZvciAoY29uc3Qga2V5IGluIHVzZXJBY3Rpb25zKSB7XG4gICAgaWYgKFxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHVzZXJBY3Rpb25zLCBrZXkpICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYWN0aW9ucywga2V5KVxuICAgICkge1xuICAgICAgb3ZlcnJpZGVzW2tleV0gPSB1c2VyQWN0aW9uc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7Li4uYWN0aW9ucywgLi4ub3ZlcnJpZGVzfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgS2VwbGVyR2xGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssaUJBQUEsR0FBQU4sdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFNBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLGdCQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxVQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxhQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxRQUFBLEdBQUFWLE9BQUE7QUFTQSxJQUFBVyxRQUFBLEdBQUFYLE9BQUE7QUFRQSxJQUFBWSxZQUFBLEdBQUFaLE9BQUE7QUFVQSxJQUFBYSxVQUFBLEdBQUFiLE9BQUE7QUFVQSxJQUFBYyxVQUFBLEdBQUFaLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBZSxjQUFBLEdBQUFiLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBZ0IsV0FBQSxHQUFBZCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQWlCLGFBQUEsR0FBQWYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFrQixlQUFBLEdBQUFoQixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQW1CLGNBQUEsR0FBQWpCLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBb0Isa0JBQUEsR0FBQWxCLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBcUIsY0FBQSxHQUFBbkIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFzQixjQUFBLEdBQUFwQixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQXVCLFdBQUEsR0FBQXJCLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBd0IscUJBQUEsR0FBQXhCLE9BQUE7QUFFQSxJQUFBeUIsTUFBQSxHQUFBekIsT0FBQTtBQVNBLElBQUEwQixPQUFBLEdBQUExQixPQUFBO0FBQTBGLElBQUEyQixlQUFBLEVBdEUxRjtBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUE5Qix3QkFBQThCLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssUUFBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFdBQUFDLENBQUEsSUFBQWQsQ0FBQSxvQkFBQWMsQ0FBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsQ0FBQSxTQUFBRyxDQUFBLEdBQUFQLENBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBYixDQUFBLEVBQUFjLENBQUEsVUFBQUcsQ0FBQSxLQUFBQSxDQUFBLENBQUFWLEdBQUEsSUFBQVUsQ0FBQSxDQUFBQyxHQUFBLElBQUFQLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSixDQUFBLEVBQUFNLENBQUEsRUFBQUcsQ0FBQSxJQUFBVCxDQUFBLENBQUFNLENBQUEsSUFBQWQsQ0FBQSxDQUFBYyxDQUFBLFlBQUFOLENBQUEsY0FBQVIsQ0FBQSxFQUFBRyxDQUFBLElBQUFBLENBQUEsQ0FBQWUsR0FBQSxDQUFBbEIsQ0FBQSxFQUFBUSxDQUFBLEdBQUFBLENBQUE7QUFBQSxTQUFBVyxXQUFBaEIsQ0FBQSxFQUFBaUIsQ0FBQSxFQUFBcEIsQ0FBQSxXQUFBb0IsQ0FBQSxPQUFBQyxnQkFBQSxhQUFBRCxDQUFBLE9BQUFFLDJCQUFBLGFBQUFuQixDQUFBLEVBQUFvQix5QkFBQSxLQUFBQyxPQUFBLENBQUFDLFNBQUEsQ0FBQUwsQ0FBQSxFQUFBcEIsQ0FBQSxZQUFBcUIsZ0JBQUEsYUFBQWxCLENBQUEsRUFBQXVCLFdBQUEsSUFBQU4sQ0FBQSxDQUFBTyxLQUFBLENBQUF4QixDQUFBLEVBQUFILENBQUE7QUFBQSxTQUFBdUIsMEJBQUEsY0FBQXBCLENBQUEsSUFBQXlCLE9BQUEsQ0FBQUMsU0FBQSxDQUFBQyxPQUFBLENBQUFkLElBQUEsQ0FBQVEsT0FBQSxDQUFBQyxTQUFBLENBQUFHLE9BQUEsaUNBQUF6QixDQUFBLGFBQUFvQix5QkFBQSxZQUFBQSwwQkFBQSxhQUFBcEIsQ0FBQTtBQUFBLFNBQUE0QixRQUFBL0IsQ0FBQSxFQUFBRSxDQUFBLFFBQUFDLENBQUEsR0FBQVEsTUFBQSxDQUFBcUIsSUFBQSxDQUFBaEMsQ0FBQSxPQUFBVyxNQUFBLENBQUFzQixxQkFBQSxRQUFBYixDQUFBLEdBQUFULE1BQUEsQ0FBQXNCLHFCQUFBLENBQUFqQyxDQUFBLEdBQUFFLENBQUEsS0FBQWtCLENBQUEsR0FBQUEsQ0FBQSxDQUFBYyxNQUFBLFdBQUFoQyxDQUFBLFdBQUFTLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBRSxDQUFBLEVBQUFpQyxVQUFBLE9BQUFoQyxDQUFBLENBQUFpQyxJQUFBLENBQUFULEtBQUEsQ0FBQXhCLENBQUEsRUFBQWlCLENBQUEsWUFBQWpCLENBQUE7QUFBQSxTQUFBa0MsY0FBQXJDLENBQUEsYUFBQUUsQ0FBQSxNQUFBQSxDQUFBLEdBQUFvQyxTQUFBLENBQUFDLE1BQUEsRUFBQXJDLENBQUEsVUFBQUMsQ0FBQSxXQUFBbUMsU0FBQSxDQUFBcEMsQ0FBQSxJQUFBb0MsU0FBQSxDQUFBcEMsQ0FBQSxRQUFBQSxDQUFBLE9BQUE2QixPQUFBLENBQUFwQixNQUFBLENBQUFSLENBQUEsT0FBQXFDLE9BQUEsV0FBQXRDLENBQUEsUUFBQXVDLGdCQUFBLGFBQUF6QyxDQUFBLEVBQUFFLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFTLE1BQUEsQ0FBQStCLHlCQUFBLEdBQUEvQixNQUFBLENBQUFnQyxnQkFBQSxDQUFBM0MsQ0FBQSxFQUFBVyxNQUFBLENBQUErQix5QkFBQSxDQUFBdkMsQ0FBQSxLQUFBNEIsT0FBQSxDQUFBcEIsTUFBQSxDQUFBUixDQUFBLEdBQUFxQyxPQUFBLFdBQUF0QyxDQUFBLElBQUFTLE1BQUEsQ0FBQUMsY0FBQSxDQUFBWixDQUFBLEVBQUFFLENBQUEsRUFBQVMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBVixDQUFBLEVBQUFELENBQUEsaUJBQUFGLENBQUE7QUF5RUE7QUFDQSxTQUFTNEMsaUJBQWlCQSxDQUFDQyxRQUFRLEVBQUVDLE1BQU0sRUFBRTtFQUMzQyxJQUFJLE9BQU9BLE1BQU0sS0FBSyxRQUFRLEVBQUU7SUFDOUI7SUFDQSxPQUFPLElBQUFDLHVCQUFXLEVBQUNGLFFBQVEsQ0FBQztFQUM5QjtFQUNBO0VBQ0EsT0FBTyxJQUFJO0FBQ2I7O0FBRUE7QUFDQTtBQUNBLElBQU1HLFdBQVcsR0FBR0MsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBcEQsZUFBQSxLQUFBQSxlQUFBLE9BQUFxRCx1QkFBQSw2Z0JBQ2IsVUFBQUMsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDQyxVQUFVO0FBQUEsR0FDL0IsVUFBQUYsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDRSxVQUFVO0FBQUEsR0FDakMsVUFBQUgsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDRyxRQUFRO0FBQUEsR0FDM0IsVUFBQUosS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDSSxVQUFVO0FBQUEsR0FxQm5DLFVBQUFMLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ0ssVUFBVTtBQUFBLEVBVTNDO0FBTUQsSUFBTUMsaUJBQWlCLEdBQUdWLDRCQUFNLENBQUNDLEdBQUcsQ0FDbEMsVUFBQVUsSUFBQTtFQUFBLElBQUVDLFFBQVEsR0FBQUQsSUFBQSxDQUFSQyxRQUFRO0VBQUEsY0FBQUMsTUFBQSxDQUNSRCxRQUFRLEdBQUcsMENBQTBDLEdBQUcsRUFBRTtBQUFBLENBTTlELENBQUM7QUFFTSxJQUFNRSxvQkFBb0IsR0FBQUMsT0FBQSxDQUFBRCxvQkFBQSxHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUdYLEtBQUssRUFBSTtFQUMzQyxPQUNFQSxLQUFLLENBQUNhLFFBQVEsQ0FBQ0MsT0FBTyxJQUN0QixDQUFDZCxLQUFLLENBQUNhLFFBQVEsQ0FBQ0UsZ0JBQWdCLElBQ2hDZixLQUFLLENBQUNhLFFBQVEsQ0FBQ0csaUJBQWlCLENBQUM3QixNQUFNLEdBQUcsQ0FBQztBQUUvQyxDQUFDO0FBRU0sSUFBTThCLGdCQUFnQixHQUFBTCxPQUFBLENBQUFLLGdCQUFBLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBSWpCLEtBQVUsRUFBRWtCLEtBQWEsRUFBVTtFQUNsRSxJQUFJLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRixLQUFLLENBQUMsRUFBRTtJQUMzQjtJQUNBO0lBQ0E7SUFDQSxPQUFPbEIsS0FBSyxDQUFDYSxRQUFRO0VBQ3ZCO0VBRUEsT0FBT0Ysb0JBQW9CLENBQUNYLEtBQUssQ0FBQyxHQUM5QjtFQUFBZixhQUFBLENBQUFBLGFBQUEsS0FDSWUsS0FBSyxDQUFDYSxRQUFRLEdBQUtiLEtBQUssQ0FBQ2EsUUFBUSxDQUFDRyxpQkFBaUIsQ0FBQ0UsS0FBSyxDQUFDO0VBQzlEO0VBQ0FsQixLQUFLLENBQUNhLFFBQVE7QUFDcEIsQ0FBQztBQUVNLElBQU1RLGlCQUFpQixHQUFBVCxPQUFBLENBQUFTLGlCQUFBLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBSXJCLEtBQW9CO0VBQUEsSUFBRWtCLEtBQUssR0FBQWhDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFvQyxTQUFBLEdBQUFwQyxTQUFBLE1BQUcsQ0FBQztFQUFBLE9BQU07SUFDckVxQyxZQUFZLEVBQUV2QixLQUFLLENBQUN1QixZQUFZO0lBQ2hDQyxvQkFBb0IsRUFBRXhCLEtBQUssQ0FBQ3dCLG9CQUFvQjtJQUNoREMsWUFBWSxFQUFFekIsS0FBSyxDQUFDeUIsWUFBWSxHQUFHekIsS0FBSyxDQUFDeUIsWUFBWSxHQUFHQyx1QkFBdUIsQ0FBQ0QsWUFBWTtJQUM1RlosUUFBUSxFQUFFSSxnQkFBZ0IsQ0FBQ2pCLEtBQUssRUFBRWtCLEtBQUssQ0FBQztJQUN4Q1MsbUJBQW1CLEVBQUVDLG1CQUFtQixDQUFDNUIsS0FBSyxDQUFDLENBQUM2QixPQUFPO0lBQ3ZEQyxRQUFRLEVBQUU5QixLQUFLLENBQUM4QixRQUFRO0lBQ3hCQyxpQkFBaUIsRUFBRS9CLEtBQUssQ0FBQytCLGlCQUFpQjtJQUMxQ0MsaUJBQWlCLEVBQUVoQyxLQUFLLENBQUNnQyxpQkFBaUI7SUFDMUNDLFdBQVcsRUFBRWpDLEtBQUssQ0FBQ2lDLFdBQVc7SUFDOUJDLFdBQVcsRUFBRWxDLEtBQUssQ0FBQ2tDLFdBQVc7SUFDOUJDLGNBQWMsRUFBRW5DLEtBQUssQ0FBQ21DLGNBQWM7SUFDcENDLGVBQWUsRUFBRXBDLEtBQUssQ0FBQ29DLGVBQWU7SUFDdENDLGVBQWUsRUFBRXJDLEtBQUssQ0FBQ3FDLGVBQWU7SUFFdEM7SUFDQUMsUUFBUSxFQUFFdEMsS0FBSyxDQUFDc0MsUUFBUTtJQUV4QjtJQUNBQyxlQUFlLEVBQUV2QyxLQUFLLENBQUN3QyxPQUFPLENBQUNELGVBQWU7SUFDOUNFLFdBQVcsRUFBRXpDLEtBQUssQ0FBQ3dDLE9BQU8sQ0FBQ0MsV0FBVztJQUN0Q0MsUUFBUSxFQUFFMUMsS0FBSyxDQUFDd0MsT0FBTyxDQUFDRSxRQUFRO0lBQ2hDQyxNQUFNLEVBQUUzQyxLQUFLLENBQUN3QyxPQUFPLENBQUNHLE1BQU07SUFFNUI7SUFDQUMsb0JBQW9CLEVBQUU1QyxLQUFLLENBQUM0QyxvQkFBb0I7SUFDaERDLHVCQUF1QixFQUFFN0MsS0FBSyxDQUFDNkMsdUJBQXVCO0lBRXREO0lBQ0FDLGdCQUFnQixFQUFFOUMsS0FBSyxDQUFDOEM7RUFDMUIsQ0FBQztBQUFBLENBQUM7QUFFSyxTQUFTQyxrQkFBa0JBLENBQUNDLFFBQVEsRUFBRTtFQUMzQztFQUNBLE9BQU8sSUFBQUMsOEJBQXVCLEVBQUNELFFBQVEsRUFBRSxVQUFBRSxHQUFHO0lBQUEsT0FBSUEsR0FBRyxLQUFLQyxnQ0FBcUI7RUFBQSxFQUFDO0FBQ2hGO0FBRU8sSUFBTUMsaUJBQWlCLEdBQUF4QyxPQUFBLENBQUF3QyxpQkFBQSxHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUlwRCxLQUFvQixFQUFFcUQsa0JBQWtCLEVBQUVDLGdCQUFnQjtFQUFBLE9BQU07SUFDaEdDLE9BQU8sRUFBRXZELEtBQUssQ0FBQ3VELE9BQU8sR0FBR3ZELEtBQUssQ0FBQ3VELE9BQU8sR0FBRzdCLHVCQUF1QixDQUFDNkIsT0FBTztJQUN4RUMsT0FBTyxFQUFFeEQsS0FBSyxDQUFDd0QsT0FBTyxHQUFHeEQsS0FBSyxDQUFDd0QsT0FBTyxHQUFHOUIsdUJBQXVCLENBQUM4QixPQUFPO0lBQ3hFQyxVQUFVLEVBQUV6RCxLQUFLLENBQUN5RCxVQUFVO0lBQzVCM0IsUUFBUSxFQUFFOUIsS0FBSyxDQUFDOEIsUUFBUTtJQUN4QjRCLFNBQVMsRUFBRTFELEtBQUssQ0FBQzBELFNBQVM7SUFDMUJsQixPQUFPLEVBQUV4QyxLQUFLLENBQUN3QyxPQUFPO0lBQ3RCbUIsZUFBZSxFQUFFM0QsS0FBSyxDQUFDMkQsZUFBZTtJQUN0Q3ZCLGVBQWUsRUFBRXBDLEtBQUssQ0FBQ29DLGVBQWU7SUFDdENELGNBQWMsRUFBRW5DLEtBQUssQ0FBQ21DLGNBQWM7SUFDcENFLGVBQWUsRUFBRXJDLEtBQUssQ0FBQ3FDLGVBQWU7SUFFdENXLFFBQVEsRUFBRU0sZ0JBQWdCO0lBQzFCTSxPQUFPLEVBQUU1RCxLQUFLLENBQUNzQyxRQUFRLENBQUNzQixPQUFPO0lBQy9CQyxNQUFNLEVBQUU3RCxLQUFLLENBQUNzQyxRQUFRLENBQUN1QixNQUFNO0lBQzdCQyxVQUFVLEVBQUU5RCxLQUFLLENBQUNzQyxRQUFRLENBQUN3QixVQUFVO0lBQ3JDQyxZQUFZLEVBQUUvRCxLQUFLLENBQUNzQyxRQUFRLENBQUN5QixZQUFZO0lBQ3pDQyxpQkFBaUIsRUFBRWhFLEtBQUssQ0FBQ3NDLFFBQVEsQ0FBQzBCLGlCQUFpQjtJQUNuREMsT0FBTyxFQUFFakUsS0FBSyxDQUFDc0MsUUFBUSxDQUFDMkIsT0FBTztJQUMvQkMsYUFBYSxFQUFFbEUsS0FBSyxDQUFDc0MsUUFBUSxDQUFDNEIsYUFBYTtJQUMzQ0MsZUFBZSxFQUFFbkUsS0FBSyxDQUFDc0MsUUFBUSxDQUFDNkIsZUFBZTtJQUUvQ0MsS0FBSyxFQUFFcEUsS0FBSyxDQUFDcUUsY0FBYyxHQUFHckUsS0FBSyxDQUFDcUUsY0FBYyxHQUFHM0MsdUJBQXVCLENBQUMwQyxLQUFLO0lBQ2xGZixrQkFBa0IsRUFBbEJBLGtCQUFrQjtJQUNsQmlCLFFBQVEsRUFBRXRFLEtBQUssQ0FBQ3VFLGFBQWEsQ0FBQ0Q7RUFDaEMsQ0FBQztBQUFBLENBQUM7QUFFSyxJQUFNRSxxQkFBcUIsR0FBQTVELE9BQUEsQ0FBQTRELHFCQUFBLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBSXhFLEtBQW9CO0VBQUEsT0FBTTtJQUM5RG9FLEtBQUssRUFBRXBFLEtBQUssQ0FBQ29FLEtBQUs7SUFDbEJLLE1BQU0sRUFBRXpFLEtBQUssQ0FBQ3lFLE1BQU07SUFDcEJDLGtCQUFrQixFQUFFMUUsS0FBSyxDQUFDd0MsT0FBTyxDQUFDbUMsV0FBVztJQUM3Q0MsU0FBUyxFQUFFdkQsaUJBQWlCLENBQUNyQixLQUFLLENBQUM7SUFDbkM2RSxlQUFlLEVBQUU3RSxLQUFLLENBQUNtQyxjQUFjLENBQUMwQyxlQUFlO0lBQ3JEQyxxQkFBcUIsRUFBRTlFLEtBQUssQ0FBQ21DLGNBQWMsQ0FBQzJDLHFCQUFxQjtJQUNqRUMscUJBQXFCLEVBQUUvRSxLQUFLLENBQUNtQyxjQUFjLENBQUM0QyxxQkFBcUI7SUFDakVDLG1CQUFtQixFQUFFaEYsS0FBSyxDQUFDbUMsY0FBYyxDQUFDNkMsbUJBQW1CO0lBQzdEQyxTQUFTLEVBQUVqRixLQUFLLENBQUNzQyxRQUFRLENBQUMyQztFQUM1QixDQUFDO0FBQUEsQ0FBQztBQUVLLElBQU1DLGVBQWUsR0FBQXRFLE9BQUEsQ0FBQXNFLGVBQUEsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBSWxGLEtBQW9CO0VBQUEsT0FDbERBLEtBQUssQ0FBQ3NDLFFBQVEsQ0FBQzJDLFNBQVMsSUFBSWpGLEtBQUssQ0FBQ3NDLFFBQVEsQ0FBQzJDLFNBQVMsQ0FBQzlGLE1BQU0sR0FBRyxDQUFDO0FBQUE7QUFFMUQsSUFBTWdHLG9CQUFvQixHQUFBdkUsT0FBQSxDQUFBdUUsb0JBQUEsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFJbkYsS0FBb0IsRUFBRUMsS0FBSztFQUFBLE9BQU07SUFDcEUyRCxPQUFPLEVBQUU1RCxLQUFLLENBQUNzQyxRQUFRLENBQUNzQixPQUFPO0lBQy9CWixRQUFRLEVBQUVoRCxLQUFLLENBQUNzQyxRQUFRLENBQUNVLFFBQVE7SUFDakNSLE9BQU8sRUFBRXhDLEtBQUssQ0FBQ3dDLE9BQU87SUFDdEJxQixNQUFNLEVBQUU3RCxLQUFLLENBQUNzQyxRQUFRLENBQUN1QixNQUFNO0lBQzdCdUIsZUFBZSxFQUFFcEYsS0FBSyxDQUFDc0MsUUFBUSxDQUFDOEMsZUFBZTtJQUMvQ2hELGVBQWUsRUFBRXBDLEtBQUssQ0FBQ29DLGVBQWU7SUFDdENpRCxXQUFXLEVBQUVyRixLQUFLLENBQUNtQyxjQUFjLENBQUNrRCxXQUFXO0lBQzdDaEIsY0FBYyxFQUFFckUsS0FBSyxDQUFDd0MsT0FBTyxDQUFDRSxRQUFRLEdBQUcsQ0FBQyxHQUFHMUMsS0FBSyxDQUFDcUUsY0FBYyxHQUFHcEUsS0FBSyxDQUFDcUYsU0FBUyxDQUFDQyxNQUFNLENBQUNDO0VBQzdGLENBQUM7QUFBQSxDQUFDO0FBRUssSUFBTUMsc0JBQXNCLEdBQUE3RSxPQUFBLENBQUE2RSxzQkFBQSxHQUFHLFNBQXpCQSxzQkFBc0JBLENBQUl6RixLQUFvQixFQUFFMEYsUUFBUTtFQUFBLE9BQU07SUFDekVuQyxPQUFPLEVBQUV2RCxLQUFLLENBQUN1RCxPQUFPLEdBQUd2RCxLQUFLLENBQUN1RCxPQUFPLEdBQUc3Qix1QkFBdUIsQ0FBQzZCLE9BQU87SUFDeEV6QixRQUFRLEVBQUU5QixLQUFLLENBQUM4QixRQUFRO0lBQ3hCUSxRQUFRLEVBQUV0QyxLQUFLLENBQUNzQyxRQUFRO0lBQ3hCekIsUUFBUSxFQUFFYixLQUFLLENBQUNhLFFBQVE7SUFDeEIyQixPQUFPLEVBQUV4QyxLQUFLLENBQUN3QyxPQUFPO0lBQ3RCK0IsYUFBYSxFQUFFdkUsS0FBSyxDQUFDdUUsYUFBYTtJQUVsQy9DLG9CQUFvQixFQUFFeEIsS0FBSyxDQUFDd0Isb0JBQW9CO0lBQ2hEQyxZQUFZLEVBQUV6QixLQUFLLENBQUN5QixZQUFZO0lBQ2hDVyxlQUFlLEVBQUVwQyxLQUFLLENBQUNvQyxlQUFlO0lBQ3RDRCxjQUFjLEVBQUVuQyxLQUFLLENBQUNtQyxjQUFjO0lBQ3BDd0IsZUFBZSxFQUFFM0QsS0FBSyxDQUFDMkQsZUFBZTtJQUN0Q2dDLGVBQWUsRUFBRTNGLEtBQUssQ0FBQzJGLGVBQWU7SUFFdENELFFBQVEsRUFBUkEsUUFBUTtJQUNSO0lBQ0FFLGNBQWMsRUFBRTVGLEtBQUssQ0FBQzRGLGNBQWMsR0FDaEM1RixLQUFLLENBQUM0RixjQUFjLEdBQ3BCbEUsdUJBQXVCLENBQUNrRSxjQUFjO0lBQzFDQyxzQkFBc0IsRUFBRTdGLEtBQUssQ0FBQzZGLHNCQUFzQjtJQUNwREMscUJBQXFCLEVBQUU5RixLQUFLLENBQUM4RixxQkFBcUI7SUFDbERDLG1CQUFtQixFQUFFL0YsS0FBSyxDQUFDK0YsbUJBQW1CO0lBQzlDQyxvQkFBb0IsRUFBRWhHLEtBQUssQ0FBQ2dHO0VBQzlCLENBQUM7QUFBQSxDQUFDO0FBRUssSUFBTUMscUJBQXFCLEdBQUFyRixPQUFBLENBQUFxRixxQkFBQSxHQUFHLFNBQXhCQSxxQkFBcUJBLENBQ2hDakcsS0FBb0IsRUFDcEJrRyxVQUEyQztFQUFBLE9BQ3ZDO0lBQ0pDLGlCQUFpQixFQUFFbkcsS0FBSyxDQUFDc0MsUUFBUSxDQUFDMEIsaUJBQWlCLENBQUNvQyxRQUFRLENBQUNDLE9BQU87SUFDcEU3RSxvQkFBb0IsRUFBRXhCLEtBQUssQ0FBQ3dCLG9CQUFvQjtJQUNoRFgsUUFBUSxFQUFFYixLQUFLLENBQUNhLFFBQVE7SUFDeEIyQixPQUFPLEVBQUV4QyxLQUFLLENBQUN3QyxPQUFPO0lBQ3RCc0IsVUFBVSxFQUFFOUQsS0FBSyxDQUFDc0MsUUFBUSxDQUFDd0IsVUFBVTtJQUNyQ3dDLGFBQWEsRUFBRXRHLEtBQUssQ0FBQ29DLGVBQWUsQ0FBQ2tFLGFBQWE7SUFDbERDLGFBQWEsRUFBRXZHLEtBQUssQ0FBQ29DLGVBQWUsQ0FBQ21FLGFBQWE7SUFDbERDLFNBQVMsRUFBRXhHLEtBQUssQ0FBQ3FDLGVBQWUsQ0FBQ21FLFNBQVM7SUFDMUNDLFFBQVEsRUFBRVAsVUFBVSxDQUFDOUI7RUFDdkIsQ0FBQztBQUFBLENBQUM7O0FBRUY7QUFDQTtBQUNBO0FBQ08sSUFBTXNDLDBCQUEwQixHQUFBOUYsT0FBQSxDQUFBOEYsMEJBQUEsR0FBRyxJQUFBQyx3QkFBYyxFQUN0RCxDQUFDLFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUN0RSxRQUFRLENBQUNVLFFBQVE7QUFBQSxFQUFDLEVBQ2xDLFVBQUFBLFFBQVEsRUFBSTtFQUNWLElBQU02RCxrQkFBd0MsR0FBRyxFQUFFO0VBQ25EdEosTUFBTSxDQUFDcUIsSUFBSSxDQUFDb0UsUUFBUSxDQUFDLENBQUM1RCxPQUFPLENBQUMsVUFBQThELEdBQUcsRUFBSTtJQUFBLElBQUE0RCxZQUFBO0lBQ25DLElBQU1DLEVBQUUsR0FBRy9ELFFBQVEsQ0FBQ0UsR0FBRyxDQUFDO0lBQ3hCLElBQU04RCxZQUFZLEdBQUdELEVBQUUsYUFBRkEsRUFBRSxnQkFBQUQsWUFBQSxHQUFGQyxFQUFFLENBQUVFLFFBQVEsY0FBQUgsWUFBQSx1QkFBWkEsWUFBQSxDQUFjRSxZQUFZO0lBQy9DLElBQUlFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSCxZQUFZLENBQUMsRUFBRTtNQUMvQkEsWUFBWSxDQUFDNUgsT0FBTyxDQUFDLFVBQUFnSSxXQUFXLEVBQUk7UUFDbEMsSUFBSSxPQUFPQSxXQUFXLEtBQUssUUFBUSxFQUFFO1VBQ25DO1VBQ0EsSUFBTUMsS0FBSyxHQUFHRCxXQUFXLENBQUNFLEtBQUssQ0FBQyxZQUFZLENBQUM7VUFDN0MsSUFBSUQsS0FBSyxFQUFFO1lBQ1QsSUFBSTtjQUNGQSxLQUFLLGFBQUxBLEtBQUssZUFBTEEsS0FBSyxDQUFFakksT0FBTyxDQUFDLFVBQUFtSSxJQUFJLEVBQUk7Z0JBQUEsSUFBQUMsV0FBQSxFQUFBQyxZQUFBO2dCQUNyQixJQUFNQyxJQUFJLElBQUFGLFdBQUEsR0FBR0QsSUFBSSxDQUFDRCxLQUFLLENBQUMsZUFBZSxDQUFDLGNBQUFFLFdBQUEsdUJBQTNCQSxXQUFBLENBQThCLENBQUMsQ0FBQztnQkFDN0MsSUFBTUcsS0FBSyxJQUFBRixZQUFBLEdBQUdGLElBQUksQ0FBQ0QsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGNBQUFHLFlBQUEsdUJBQTVCQSxZQUFBLENBQStCLENBQUMsQ0FBQztnQkFDL0MsSUFBSUMsSUFBSSxJQUFJQyxLQUFLLEVBQUU7a0JBQ2pCZCxrQkFBa0IsQ0FBQzdILElBQUksQ0FBQztvQkFDdEIySSxLQUFLLEtBQUFqSCxNQUFBLENBQUs2RyxJQUFJLENBQUNLLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBQWxILE1BQUEsQ0FBR2lILEtBQUssQ0FBRTtvQkFDM0RFLEdBQUcsRUFBRUg7a0JBQ1AsQ0FBQyxDQUFDO2dCQUNKO2NBQ0YsQ0FBQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLE9BQU9JLEtBQUssRUFBRTtjQUNkO1lBQUE7VUFFSixDQUFDLE1BQU07WUFDTGpCLGtCQUFrQixDQUFDN0gsSUFBSSxDQUFDO2NBQUMySSxLQUFLLEVBQUVQLFdBQVc7Y0FBRVMsR0FBRyxFQUFFO1lBQUksQ0FBQyxDQUFDO1VBQzFEO1FBQ0Y7TUFDRixDQUFDLENBQUM7SUFDSjtFQUNGLENBQUMsQ0FBQztFQUNGLE9BQU9oQixrQkFBa0I7QUFDM0IsQ0FDRixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWpGLG1CQUFtQixHQUFBaEIsT0FBQSxDQUFBZ0IsbUJBQUEsR0FBRyxJQUFBK0Usd0JBQWMsRUFDL0MsQ0FBQ0QsMEJBQTBCLENBQUMsRUFDNUIsVUFBQS9FLG1CQUFtQixFQUFJO0VBQ3JCO0VBQ0EsSUFBTW9HLHNCQUFzQixHQUFHcEcsbUJBQW1CO0VBQ2xELElBQU1xRyxLQUE2QixHQUFHLEVBQUU7RUFFeEMsT0FBTztJQUFDbkcsT0FBTyxFQUFFa0csc0JBQXNCO0lBQUVDLEtBQUssRUFBTEE7RUFBSyxDQUFDO0FBQ2pELENBQ0YsQ0FBQztBQUVNLElBQU1DLHlCQUF5QixHQUFBckgsT0FBQSxDQUFBcUgseUJBQUEsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUFJakksS0FBb0I7RUFBQSxPQUFNO0lBQ2xFa0ksa0JBQWtCLEVBQUVsSSxLQUFLLENBQUNtQyxjQUFjLENBQUMrRixrQkFBa0I7SUFDM0RDLGFBQWEsRUFBRW5JLEtBQUssQ0FBQ3dDLE9BQU8sQ0FBQzJGO0VBQy9CLENBQUM7QUFBQSxDQUFDO0FBRUssSUFBTXpHLHVCQUF1QixHQUFBZCxPQUFBLENBQUFjLHVCQUFBLEdBQUc7RUFDckMwRyxTQUFTLEVBQUUsRUFBRTtFQUNiQyx1QkFBdUIsRUFBRSxLQUFLO0VBQzlCNUcsWUFBWSxFQUFFNkcsaUNBQXNCO0VBQ3BDbEUsS0FBSyxFQUFFLEdBQUc7RUFDVkssTUFBTSxFQUFFLEdBQUc7RUFDWGxCLE9BQU8sRUFBRWdGLHlCQUFjO0VBQ3ZCL0UsT0FBTyxFQUFFZ0YsNEJBQWlCO0VBQzFCbkUsY0FBYyxFQUFFb0UscUJBQVUsQ0FBQ25ELFNBQVMsQ0FBQ2xCLEtBQUs7RUFDMUNuRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ1QyRixjQUFjLEVBQUUsRUFBRTtFQUNsQmxELFFBQVEsRUFBRSxLQUFLO0VBQ2ZnRyxZQUFZLEVBQUUsQ0FBQztBQUNqQixDQUFDO0FBNkNEQyxlQUFlLENBQUNDLElBQUksR0FBRyxDQUNyQkMsd0JBQW1CLEVBQ25CQyx5QkFBb0IsRUFDcEJDLHlCQUFtQixFQUNuQkMsc0JBQWlCLEVBQ2pCQywwQkFBcUIsRUFDckJDLHFCQUFnQixFQUNoQkMseUJBQW9CLEVBQ3BCQyw2QkFBd0IsRUFDeEJDLHNCQUFpQixFQUNqQkMseUJBQW9CLENBQ3JCO0FBRUQsU0FBU1gsZUFBZUEsQ0FDdEJZLFlBQW9ELEVBQ3BEQyxhQUFzRCxFQUN0REMsWUFBb0QsRUFDcERDLFVBQWdELEVBQ2hEQyxjQUF3RCxFQUN4REMsU0FBOEMsRUFDOUNDLGFBQXNELEVBQ3REQyxpQkFBOEQsRUFDOURDLFVBQWdELEVBQ3lDO0VBQ3pGO0VBQ0E7RUFBQSxJQUNNQyxRQUFRLDBCQUFBQyxVQUFBO0lBQUEsU0FBQUQsU0FBQTtNQUFBLElBQUFFLEtBQUE7TUFBQSxJQUFBQyxnQkFBQSxtQkFBQUgsUUFBQTtNQUFBLFNBQUFJLElBQUEsR0FBQWxMLFNBQUEsQ0FBQUMsTUFBQSxFQUFBa0wsSUFBQSxPQUFBbkQsS0FBQSxDQUFBa0QsSUFBQSxHQUFBRSxJQUFBLE1BQUFBLElBQUEsR0FBQUYsSUFBQSxFQUFBRSxJQUFBO1FBQUFELElBQUEsQ0FBQUMsSUFBQSxJQUFBcEwsU0FBQSxDQUFBb0wsSUFBQTtNQUFBO01BQUFKLEtBQUEsR0FBQW5NLFVBQUEsT0FBQWlNLFFBQUEsS0FBQXRKLE1BQUEsQ0FBQTJKLElBQUE7TUFBQSxJQUFBaEwsZ0JBQUEsYUFBQTZLLEtBQUEsV0FNZTtRQUN6QmhFLFVBQVUsRUFBRTtNQUNkLENBQUM7TUFBQSxJQUFBN0csZ0JBQUEsYUFBQTZLLEtBQUEsbUJBbUJlLFVBQUFoRSxVQUFVLEVBQUk7UUFDNUJnRSxLQUFBLENBQUtLLFFBQVEsQ0FBQztVQUFDckUsVUFBVSxFQUFWQTtRQUFVLENBQUMsQ0FBQztNQUM3QixDQUFDO01BQUEsSUFBQTdHLGdCQUFBLGFBQUE2SyxLQUFBLHVCQUlNLElBQUFNLGdCQUFTLEVBQWlCLENBQUM7TUFBQSxJQUFBbkwsZ0JBQUEsYUFBQTZLLEtBQUEsa0NBQ2hCLElBQUFNLGdCQUFTLEVBQWlCLENBQUM7TUFFN0M7TUFBQSxJQUFBbkwsZ0JBQUEsYUFBQTZLLEtBQUEsbUJBQ2dCLFVBQUFsSyxLQUFLO1FBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLO01BQUE7TUFBQSxJQUFBWixnQkFBQSxhQUFBNkssS0FBQSw0QkFDWCxJQUFBdkQsd0JBQWMsRUFBQ3VELEtBQUEsQ0FBS08sYUFBYSxFQUFFLFVBQUF4SyxLQUFLO1FBQUEsT0FDL0QsSUFBQXlLLFFBQUEsYUFBT3pLLEtBQUssTUFBSyxRQUFRLEdBQUFoQixhQUFBLENBQUFBLGFBQUEsS0FFaEIwTCxhQUFVLEdBQ1YxSyxLQUFLLElBRVZBLEtBQUssS0FBSzJLLGdCQUFLLENBQUNDLEtBQUssR0FDckJDLGVBQU8sR0FDUDdLLEtBQUssS0FBSzJLLGdCQUFLLENBQUNHLElBQUksR0FDcEJDLGVBQU8sR0FDUC9LLEtBQUs7TUFBQSxDQUNYLENBQUM7TUFBQSxJQUFBWixnQkFBQSxhQUFBNkssS0FBQSxzQkFFa0IsVUFBQWxLLEtBQUs7UUFBQSxPQUFJQSxLQUFLLENBQUNzQyxRQUFRLENBQUNVLFFBQVE7TUFBQTtNQUFBLElBQUEzRCxnQkFBQSxhQUFBNkssS0FBQSw4QkFDeEIsSUFBQXZELHdCQUFjLEVBQUN1RCxLQUFBLENBQUtlLGdCQUFnQixFQUFFbEksa0JBQWtCLENBQUM7TUFBQSxJQUFBMUQsZ0JBQUEsYUFBQTZLLEtBQUEsd0JBRS9ELElBQUF2RCx3QkFBYyxFQUNqQyxVQUFDM0csS0FBb0I7UUFBQSxPQUFLQSxLQUFLLENBQUM0RixjQUFjO01BQUEsR0FDOUMsVUFBQXNGLFNBQVM7UUFBQSxPQUNQaEUsS0FBSyxDQUFDQyxPQUFPLENBQUMrRCxTQUFTLENBQUMsSUFBSUEsU0FBUyxDQUFDL0wsTUFBTSxHQUN4QztVQUNFZ00sVUFBVSxFQUFFRCxTQUFTLENBQUNFLElBQUksQ0FBQyxVQUFBQyxDQUFDO1lBQUEsT0FBSUEsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDO1VBQUEsRUFBQztVQUN0REMsUUFBUSxFQUFFTCxTQUFTLENBQUNFLElBQUksQ0FBQyxVQUFBQyxDQUFDO1lBQUEsT0FBSUEsQ0FBQyxDQUFDRyxhQUFhLENBQUMsQ0FBQztVQUFBO1FBQ2pELENBQUMsR0FDRCxDQUFDLENBQUM7TUFBQSxDQUNWLENBQUM7TUFBQSxJQUFBbk0sZ0JBQUEsYUFBQTZLLEtBQUEsNEJBRXdCLElBQUF2RCx3QkFBYyxFQUNyQyxVQUFDM0csS0FBb0I7UUFBQSxPQUFLQSxLQUFLLENBQUN5TCxjQUFjO01BQUEsR0FDOUMsVUFBQUMsY0FBYztRQUFBLE9BQUtBLGNBQWMsR0FBRyxJQUFBQyxvQkFBYSxFQUFDQyxzQkFBUSxFQUFFRixjQUFjLENBQUMsR0FBR0Usc0JBQVE7TUFBQSxDQUN4RixDQUFDO01BQUEsSUFBQXZNLGdCQUFBLGFBQUE2SyxLQUFBLG1CQVVlLFlBQU07UUFDcEIsSUFBTTJCLGFBQWEsR0FBR3RPLE1BQU0sQ0FBQ3VPLE1BQU0sQ0FBQzVCLEtBQUEsQ0FBS2xLLEtBQUssQ0FBQzhCLFFBQVEsQ0FBQ3NHLFNBQVMsQ0FBQztRQUNsRTtRQUNBLElBQU0yRCxZQUFZLEdBQUcsQ0FBQzdCLEtBQUEsQ0FBS2xLLEtBQUssQ0FBQ29JLFNBQVMsSUFBSSxFQUFFLEVBQUU0RCxHQUFHLENBQUMsVUFBQUMsRUFBRTtVQUFBLE9BQUFoTixhQUFBLENBQUFBLGFBQUEsS0FDbkRnTixFQUFFO1lBQ0xDLEVBQUUsRUFBRUQsRUFBRSxDQUFDQyxFQUFFLElBQUksSUFBQUMsMkJBQWMsRUFBQztVQUFDO1FBQUEsQ0FDN0IsQ0FBQztRQUVILElBQU1DLFNBQVMsR0FBRyxHQUFBMUwsTUFBQSxLQUFBMkwsbUJBQUEsYUFBSU4sWUFBWSxHQUFLRixhQUFhLEVBQUVTLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUVDLEtBQUssRUFBSztVQUM1RUQsSUFBSSxDQUFDQyxLQUFLLENBQUNOLEVBQUUsQ0FBQyxHQUFHTSxLQUFLO1VBQ3RCLE9BQU9ELElBQUk7UUFDYixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFTnJDLEtBQUEsQ0FBS2xLLEtBQUssQ0FBQzJELGVBQWUsQ0FBQzhJLGFBQWEsQ0FBQ0wsU0FBUyxDQUFDO01BQ3JELENBQUM7TUFBQSxJQUFBL00sZ0JBQUEsYUFBQTZLLEtBQUEsc0JBRWtCLFVBQUN3QyxXQUFXLEVBQUVDLE9BQU8sRUFBSztRQUMzQ3pDLEtBQUEsQ0FBS2xLLEtBQUssQ0FBQ29DLGVBQWUsQ0FBQ3dLLGlCQUFpQixDQUFDRixXQUFXLEVBQUVDLE9BQU8sQ0FBQztNQUNwRSxDQUFDO01BQUEsT0FBQXpDLEtBQUE7SUFBQTtJQUFBLElBQUEyQyxVQUFBLGFBQUE3QyxRQUFBLEVBQUFDLFVBQUE7SUFBQSxXQUFBNkMsYUFBQSxhQUFBOUMsUUFBQTtNQUFBOUcsR0FBQTtNQUFBNkosS0FBQSxFQXRGRCxTQUFBQyxpQkFBaUJBLENBQUEsRUFBRztRQUNsQixJQUFJLENBQUNDLG9CQUFvQixDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDQyxhQUFhLENBQUMsQ0FBQztRQUNwQixJQUFJLE9BQU8sSUFBSSxDQUFDbE4sS0FBSyxDQUFDbU4scUJBQXFCLEtBQUssVUFBVSxFQUFFO1VBQzFELElBQUksQ0FBQ25OLEtBQUssQ0FBQ21OLHFCQUFxQixDQUFDLENBQUM7UUFDcEM7UUFDQSxJQUFJLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxPQUFPLFlBQVlDLFdBQVcsRUFBRTtVQUM1QyxJQUFBQyx3QkFBaUIsRUFBQyxJQUFJLENBQUNILElBQUksQ0FBQ0MsT0FBTyxFQUFFLElBQUksQ0FBQ0csYUFBYSxDQUFDO1FBQzFEO01BQ0Y7SUFBQztNQUFBdEssR0FBQTtNQUFBNkosS0FBQSxFQUVELFNBQUFVLG9CQUFvQkEsQ0FBQSxFQUFHO1FBQ3JCLElBQUksSUFBSSxDQUFDTCxJQUFJLENBQUNDLE9BQU8sWUFBWUMsV0FBVyxFQUFFO1VBQzVDLElBQUFJLDBCQUFtQixFQUFDLElBQUksQ0FBQ04sSUFBSSxDQUFDQyxPQUFPLENBQUM7UUFDeEM7TUFDRjtJQUFDO01BQUFuSyxHQUFBO01BQUE2SixLQUFBLEVBNkNEO01BQ0EsU0FBQUUsb0JBQW9CQSxDQUFBLEVBQUc7UUFDckIsSUFBT3pMLG9CQUFvQixHQUFJLElBQUksQ0FBQ3hCLEtBQUssQ0FBbEN3QixvQkFBb0I7UUFDM0IsSUFBSSxDQUFDLElBQUFtTSxvQkFBYSxFQUFDbk0sb0JBQW9CLENBQUMsRUFBRTtVQUN4Q29NLG1CQUFPLENBQUNDLElBQUksQ0FBQ0MsK0JBQW9CLENBQUM7UUFDcEM7TUFDRjtJQUFDO01BQUE1SyxHQUFBO01BQUE2SixLQUFBO01Bc0JEO01BQ0EsU0FBQWdCLE1BQU1BLENBQUEsRUFBRztRQUFBLElBQUFDLE1BQUE7UUFDUCxJQUFBQyxXQUFBLEdBY0ksSUFBSSxDQUFDak8sS0FBSztVQUFBa08sY0FBQSxHQUFBRCxXQUFBLENBYlovQixFQUFFO1VBQUZBLEVBQUUsR0FBQWdDLGNBQUEsY0FBRyxLQUFLLEdBQUFBLGNBQUE7VUFBQUMsaUJBQUEsR0FBQUYsV0FBQSxDQUNWN0osS0FBSztVQUFMQSxLQUFLLEdBQUErSixpQkFBQSxjQUFHek0sdUJBQXVCLENBQUMwQyxLQUFLLEdBQUErSixpQkFBQTtVQUFBQyxrQkFBQSxHQUFBSCxXQUFBLENBQ3JDeEosTUFBTTtVQUFOQSxNQUFNLEdBQUEySixrQkFBQSxjQUFHMU0sdUJBQXVCLENBQUMrQyxNQUFNLEdBQUEySixrQkFBQTtVQUN2QzVMLE9BQU8sR0FBQXlMLFdBQUEsQ0FBUHpMLE9BQU87VUFDUEYsUUFBUSxHQUFBMkwsV0FBQSxDQUFSM0wsUUFBUTtVQUVSSSxRQUFRLEdBQUF1TCxXQUFBLENBQVJ2TCxRQUFRO1VBR1JnRyxZQUFZLEdBQUF1RixXQUFBLENBQVp2RixZQUFZO1VBQUEyRixxQkFBQSxHQUFBSixXQUFBLENBR1pySSxjQUFjO1VBQWRBLGNBQWMsR0FBQXlJLHFCQUFBLGNBQUcsRUFBRSxHQUFBQSxxQkFBQTtRQUdyQixJQUFNbkksVUFBVSxHQUFHLElBQUksQ0FBQ1UsS0FBSyxDQUFDVixVQUFVLElBQUk7VUFBQzlCLEtBQUssRUFBTEEsS0FBSztVQUFFSyxNQUFNLEVBQU5BO1FBQU0sQ0FBQztRQUMzRCxJQUNFUSxTQUFTLEdBRVAzQyxRQUFRLENBRlYyQyxTQUFTO1VBQ1RqQixpQkFBaUIsR0FDZjFCLFFBQVEsQ0FEVjBCLGlCQUFpQjtRQUduQixJQUFNbEQsT0FBTyxHQUFHb0UsZUFBZSxDQUFDLElBQUksQ0FBQ2xGLEtBQUssQ0FBQztRQUMzQyxJQUFNQyxLQUFLLEdBQUcsSUFBSSxDQUFDcU8sc0JBQXNCLENBQUMsSUFBSSxDQUFDdE8sS0FBSyxDQUFDO1FBQ3JELElBQU15TCxjQUFjLEdBQUcsSUFBSSxDQUFDOEMsc0JBQXNCLENBQUMsSUFBSSxDQUFDdk8sS0FBSyxDQUFDO1FBQzlELElBQU13TyxnQkFBZ0IsR0FBR2hNLE9BQU8sQ0FBQ21DLFdBQVcsQ0FBQzhKLFNBQVM7UUFDdEQsSUFBTXBMLGtCQUFrQixHQUFHLElBQUksQ0FBQ0Esa0JBQWtCLENBQUMsSUFBSSxDQUFDckQsS0FBSyxDQUFDO1FBRTlELElBQU1zRCxnQkFBZ0IsR0FBRyxJQUFJLENBQUNvTCx3QkFBd0IsQ0FBQyxJQUFJLENBQUMxTyxLQUFLLENBQUM7UUFDbEUsSUFBTTJPLFVBQVUsR0FBR3ZMLGlCQUFpQixDQUFDLElBQUksQ0FBQ3BELEtBQUssRUFBRXFELGtCQUFrQixFQUFFQyxnQkFBZ0IsQ0FBQztRQUN0RixJQUFNc0wsbUJBQW1CLEdBQUdwSyxxQkFBcUIsQ0FBQyxJQUFJLENBQUN4RSxLQUFLLENBQUM7UUFDN0QsSUFBTTZPLGtCQUFrQixHQUFHMUosb0JBQW9CLENBQUMsSUFBSSxDQUFDbkYsS0FBSyxFQUFFQyxLQUFLLENBQUM7UUFDbEUsSUFBTTZPLG9CQUFvQixHQUFHckosc0JBQXNCLENBQUMsSUFBSSxDQUFDekYsS0FBSyxFQUFFLElBQUksQ0FBQ29OLElBQUksQ0FBQ0MsT0FBTyxDQUFDO1FBQ2xGLElBQU0wQixtQkFBbUIsR0FBRzlJLHFCQUFxQixDQUFDLElBQUksQ0FBQ2pHLEtBQUssRUFBRWtHLFVBQVUsQ0FBQztRQUN6RSxJQUFNOEksdUJBQXVCLEdBQUcvRyx5QkFBeUIsQ0FBQyxJQUFJLENBQUNqSSxLQUFLLENBQUM7UUFFckUsSUFBTWlQLGFBQWEsR0FBRyxDQUFDbk8sT0FBTyxHQUMxQixjQUNFakcsTUFBQSxZQUFBcVUsYUFBQSxDQUFDekYsWUFBWSxNQUFBMEYsU0FBQTtVQUNYQyxPQUFPLEVBQUUsSUFBSztVQUNkbE0sR0FBRyxFQUFFLENBQUU7VUFDUGhDLEtBQUssRUFBRTtRQUFFLEdBQ0xHLGlCQUFpQixDQUFDLElBQUksQ0FBQ3JCLEtBQUssQ0FBQztVQUNqQzBNLFdBQVcsRUFBRSxDQUFFO1VBQ2YyQyxlQUFlLEVBQUUsSUFBSSxDQUFDQztRQUFpQixFQUN4QyxDQUFDLENBQ0gsR0FDRHJLLFNBQVMsQ0FBQytHLEdBQUcsQ0FBQyxVQUFDdUQsUUFBUSxFQUFFck8sS0FBSztVQUFBLG9CQUM1QnJHLE1BQUEsWUFBQXFVLGFBQUEsQ0FBQ3pGLFlBQVksTUFBQTBGLFNBQUE7WUFDWGpNLEdBQUcsRUFBRWhDLEtBQU07WUFDWEEsS0FBSyxFQUFFQSxLQUFNO1lBQ2JrTyxPQUFPLEVBQUVsTyxLQUFLLEtBQUs7VUFBRSxHQUNqQkcsaUJBQWlCLENBQUMyTSxNQUFJLENBQUNoTyxLQUFLLEVBQUVrQixLQUFLLENBQUM7WUFDeEN3TCxXQUFXLEVBQUV4TCxLQUFNO1lBQ25CbU8sZUFBZSxFQUFFckIsTUFBSSxDQUFDc0I7VUFBaUIsRUFDeEMsQ0FBQztRQUFBLENBQ0gsQ0FBQztRQUVOLG9CQUNFelUsTUFBQSxZQUFBcVUsYUFBQSxDQUFDelQsUUFBQSxDQUFBK1QsV0FBVyxDQUFDQyxRQUFRO1VBQUMxQyxLQUFLLEVBQUUsSUFBSSxDQUFDSztRQUFLLGdCQUNyQ3ZTLE1BQUEsWUFBQXFVLGFBQUEsQ0FBQ3pULFFBQUEsQ0FBQWlVLDJCQUEyQjtVQUFDaEgsWUFBWSxFQUFFQTtRQUFhLGdCQUN0RDdOLE1BQUEsWUFBQXFVLGFBQUEsQ0FBQzNULFVBQUEsQ0FBQW9VLFlBQVk7VUFBQ2hOLE1BQU0sRUFBRUgsT0FBTyxDQUFDRyxNQUFPO1VBQUNpSixRQUFRLEVBQUVILGNBQWMsQ0FBQ2pKLE9BQU8sQ0FBQ0csTUFBTTtRQUFFLGdCQUM3RTlILE1BQUEsWUFBQXFVLGFBQUEsQ0FBQzlULGlCQUFBLENBQUF3VSxpQkFBaUI7VUFBQ3BRLGlCQUFpQixFQUFFQTtRQUFrQixnQkFDdEQzRSxNQUFBLFlBQUFxVSxhQUFBLENBQUM5VCxpQkFBQSxDQUFBeVUsYUFBYTtVQUFDNVAsS0FBSyxFQUFFQTtRQUFNLGdCQUMxQnBGLE1BQUEsWUFBQXFVLGFBQUEsQ0FBQzNTLHFCQUFBLENBQUF1VCxpQkFBaUI7VUFBQzVFLFNBQVMsRUFBRXRGO1FBQWUsZ0JBQzNDL0ssTUFBQSxZQUFBcVUsYUFBQSxDQUFDdFAsV0FBVztVQUNWbVEsU0FBUyxFQUFDLFdBQVc7VUFDckI3RCxFQUFFLGdCQUFBeEwsTUFBQSxDQUFnQndMLEVBQUUsQ0FBRztVQUN2Qk0sS0FBSyxFQUFFO1lBQ0x3RCxPQUFPLEVBQUUsTUFBTTtZQUNmQyxhQUFhLEVBQUUsUUFBUTtZQUN2QkMsUUFBUSxFQUFFLFVBQVU7WUFDcEI5TCxLQUFLLEtBQUExRCxNQUFBLENBQUswRCxLQUFLLE9BQUk7WUFDbkJLLE1BQU0sS0FBQS9ELE1BQUEsQ0FBSytELE1BQU07VUFDbkIsQ0FBRTtVQUNGMEwsR0FBRyxFQUFFLElBQUksQ0FBQy9DO1FBQUssZ0JBRWZ2UyxNQUFBLFlBQUFxVSxhQUFBLENBQUNwRixpQkFBaUIsRUFBS2tGLHVCQUEwQixDQUFDLGVBQ2xEblUsTUFBQSxZQUFBcVUsYUFBQSxDQUFDbkYsVUFBVSxRQUNSLENBQUN2SCxPQUFPLENBQUNFLFFBQVEsSUFBSSxDQUFDQSxRQUFRLGlCQUFJN0gsTUFBQSxZQUFBcVUsYUFBQSxDQUFDdEYsU0FBUyxFQUFLK0UsVUFBYSxDQUFDLGVBQ2hFOVQsTUFBQSxZQUFBcVUsYUFBQSxDQUFDeEYsVUFBVTtVQUFDcUcsU0FBUyxFQUFDLE1BQU07VUFBQ2xQLFFBQVEsRUFBRSxJQUFJLENBQUNiLEtBQUssQ0FBQ2E7UUFBUyxHQUN4RG9PLGFBQ1MsQ0FDRixDQUFDLEVBQ1pULGdCQUFnQixpQkFBSTNULE1BQUEsWUFBQXFVLGFBQUEsQ0FBQ3JGLGFBQWEsRUFBSytFLG1CQUFzQixDQUFDLEVBRTlELENBQUNqTyxvQkFBb0IsQ0FBQyxJQUFJLENBQUNYLEtBQUssQ0FBQyxJQUFJZ0UsaUJBQWlCLENBQUNvQyxRQUFRLENBQUNDLE9BQU8saUJBQ3RFeEwsTUFBQSxZQUFBcVUsYUFBQSxDQUFDMUYsYUFBYSxNQUFBMkYsU0FBQSxpQkFDUkosbUJBQW1CO1VBQ3ZCN04sS0FBSyxFQUFFLENBQUU7VUFDVGtQLGlCQUFpQixFQUFFO1FBQU0sRUFDMUIsQ0FDRixFQUVBelAsb0JBQW9CLENBQUMsSUFBSSxDQUFDWCxLQUFLLENBQUMsSUFDL0JnRSxpQkFBaUIsQ0FBQ29DLFFBQVEsQ0FBQ0MsT0FBTyxJQUNsQzRJLGFBQWEsQ0FBQ2pELEdBQUcsQ0FBQyxVQUFDcUUsYUFBYSxFQUFFblAsS0FBSztVQUFBLG9CQUNyQ3JHLE1BQUEsWUFBQXFVLGFBQUEsQ0FBQzFGLGFBQWEsTUFBQTJGLFNBQUE7WUFDWmpNLEdBQUcsRUFBRWhDO1VBQU0sR0FDUDZOLG1CQUFtQjtZQUN2QjdOLEtBQUssRUFBRUEsS0FBTTtZQUNia1AsaUJBQWlCLEVBQUU7VUFBSyxFQUN6QixDQUFDO1FBQUEsQ0FDSCxDQUFDLGVBQ0p2VixNQUFBLFlBQUFxVSxhQUFBLENBQUMzTyxpQkFBaUI7VUFBQ0UsUUFBUSxFQUFFLENBQUMsSUFBQTZQLHVCQUFnQixFQUFDQyx3QkFBZ0I7UUFBRSxnQkFDL0QxVixNQUFBLFlBQUFxVSxhQUFBLENBQUMzRixZQUFZLE1BQUE0RixTQUFBO1VBQ1hxQixPQUFPLEVBQUUsSUFBSSxDQUFDQztRQUFnQixHQUMxQjVCLGtCQUFrQjtVQUN0QjZCLFVBQVUsRUFBRXhLLFVBQVUsQ0FBQzlCLEtBQU07VUFDN0JuRSxLQUFLLEVBQUVBO1FBQU0sRUFDZCxDQUNnQixDQUFDLGVBQ3BCcEYsTUFBQSxZQUFBcVUsYUFBQSxDQUFDdkYsY0FBYyxNQUFBd0YsU0FBQSxpQkFDVEwsb0JBQW9CO1VBQ3hCNEIsVUFBVSxFQUFFeEssVUFBVSxDQUFDOUIsS0FBTTtVQUM3QnVNLFVBQVUsRUFBRXpLLFVBQVUsQ0FBQ3pCO1FBQU8sRUFDL0IsQ0FDVSxDQUNJLENBQ04sQ0FDRSxDQUNQLENBQ2EsQ0FDVCxDQUFDO01BRTNCO0lBQUM7RUFBQSxFQWpPb0JtTSxnQkFBUztFQUFBLElBQUF2UixnQkFBQSxhQUExQjJLLFFBQVEsa0JBSVV0SSx1QkFBdUI7RUFBQSxJQUFBckMsZ0JBQUEsYUFKekMySyxRQUFRLGlCQStCU3dGLG9CQUFXO0VBcU1sQyxPQUFPLElBQUFxQix3QkFBZSxFQUNwQkMsZUFBZSxFQUNmQyxzQkFDRixDQUFDLENBQUMsSUFBQUMsMkJBQVMsRUFBQ2hILFFBQVEsQ0FBQyxDQUFDO0FBQ3hCO0FBRU8sU0FBUzhHLGVBQWVBLENBQUNsSyxLQUFvQixFQUFFNUcsS0FBb0IsRUFBRTtFQUMxRSxPQUFBZixhQUFBLENBQUFBLGFBQUEsS0FDS2UsS0FBSztJQUNSc0MsUUFBUSxFQUFFc0UsS0FBSyxDQUFDdEUsUUFBUTtJQUN4QlIsUUFBUSxFQUFFOEUsS0FBSyxDQUFDOUUsUUFBUTtJQUN4QmpCLFFBQVEsRUFBRStGLEtBQUssQ0FBQy9GLFFBQVE7SUFDeEIyQixPQUFPLEVBQUVvRSxLQUFLLENBQUNwRSxPQUFPO0lBQ3RCK0IsYUFBYSxFQUFFcUMsS0FBSyxDQUFDckM7RUFBYTtBQUV0QztBQUVBLElBQU0wTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFFN0IsSUFBTUMsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUdDLFFBQVE7RUFBQSxPQUFJQSxRQUFRO0FBQUE7QUFDeEMsSUFBTUMsY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUFJRCxRQUFRLEVBQUVuUixLQUFLO0VBQUEsT0FBS0EsS0FBSyxDQUFDcVIsT0FBTyxJQUFJSixrQkFBa0I7QUFBQTs7QUFFL0U7QUFDTyxTQUFTSyxxQkFBcUJBLENBQUEsRUFBRztFQUN0QyxPQUFPLElBQUEzSyx3QkFBYyxFQUFDLENBQUN1SyxXQUFXLEVBQUVFLGNBQWMsQ0FBQyxFQUFFLFVBQUNELFFBQVEsRUFBRUksV0FBVyxFQUFLO0lBQzlFLElBQUFDLElBQUEsR0FBNkYsQ0FDM0ZDLHdCQUFlLEVBQ2ZDLHdCQUFlLEVBQ2ZDLHdCQUFlLEVBQ2ZDLHVCQUFjLEVBQ2RDLHdCQUFlLENBQ2hCLENBQUM3RixHQUFHLENBQUMsVUFBQXFGLE9BQU87UUFBQSxPQUFJLElBQUFTLHlCQUFrQixFQUFDQyxZQUFZLENBQUNWLE9BQU8sRUFBRUUsV0FBVyxDQUFDLEVBQUVKLFFBQVEsQ0FBQztNQUFBLEVBQUM7TUFBQWEsS0FBQSxPQUFBQyxlQUFBLGFBQUFULElBQUE7TUFOM0VwUCxlQUFlLEdBQUE0UCxLQUFBO01BQUUzUCxlQUFlLEdBQUEyUCxLQUFBO01BQUVyTyxlQUFlLEdBQUFxTyxLQUFBO01BQUU3UCxjQUFjLEdBQUE2UCxLQUFBO01BQUVyTSxlQUFlLEdBQUFxTSxLQUFBO0lBUXpGLE9BQU87TUFDTDVQLGVBQWUsRUFBZkEsZUFBZTtNQUNmQyxlQUFlLEVBQWZBLGVBQWU7TUFDZnNCLGVBQWUsRUFBZkEsZUFBZTtNQUNmeEIsY0FBYyxFQUFkQSxjQUFjO01BQ2R3RCxlQUFlLEVBQWZBLGVBQWU7TUFDZndMLFFBQVEsRUFBUkE7SUFDRixDQUFDO0VBQ0gsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxTQUFTSixzQkFBc0JBLENBQUEsRUFBRztFQUNoQyxJQUFNbUIsaUJBQWlCLEdBQUdaLHFCQUFxQixDQUFDLENBQUM7RUFDakQsSUFBTWEsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBSWhCLFFBQVEsRUFBRWlCLFFBQVEsRUFBSztJQUNqRCxJQUFNQyxxQkFBcUIsR0FBR0gsaUJBQWlCLENBQUNmLFFBQVEsRUFBRWlCLFFBQVEsQ0FBQztJQUVuRSxPQUFBblQsYUFBQSxDQUFBQSxhQUFBLEtBQ0tvVCxxQkFBcUI7TUFDeEJsQixRQUFRLEVBQVJBO0lBQVE7RUFFWixDQUFDO0VBRUQsT0FBT2dCLGtCQUFrQjtBQUMzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTSixZQUFZQSxDQUFDVixPQUFPLEVBQUVFLFdBQVcsRUFBRTtFQUMxQyxJQUFNZSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0VBQ3BCLEtBQUssSUFBTXBQLEdBQUcsSUFBSXFPLFdBQVcsRUFBRTtJQUM3QixJQUNFaFUsTUFBTSxDQUFDa0IsU0FBUyxDQUFDZCxjQUFjLENBQUNDLElBQUksQ0FBQzJULFdBQVcsRUFBRXJPLEdBQUcsQ0FBQyxJQUN0RDNGLE1BQU0sQ0FBQ2tCLFNBQVMsQ0FBQ2QsY0FBYyxDQUFDQyxJQUFJLENBQUN5VCxPQUFPLEVBQUVuTyxHQUFHLENBQUMsRUFDbEQ7TUFDQW9QLFNBQVMsQ0FBQ3BQLEdBQUcsQ0FBQyxHQUFHcU8sV0FBVyxDQUFDck8sR0FBRyxDQUFDO0lBQ25DO0VBQ0Y7RUFFQSxPQUFBakUsYUFBQSxDQUFBQSxhQUFBLEtBQVdvUyxPQUFPLEdBQUtpQixTQUFTO0FBQ2xDO0FBQUMsSUFBQUMsUUFBQSxHQUFBM1IsT0FBQSxjQUVjK0gsZUFBZSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
582
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVkdXgiLCJfaXNQcm9wVmFsaWQiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9yZXNlbGVjdCIsIl9rZXBsZXJnbENvbm5lY3QiLCJfcmVhY3RJbnRsIiwiX2xvY2FsaXphdGlvbiIsIl9jb250ZXh0IiwiX2FjdGlvbnMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX3NpZGVQYW5lbCIsIl9tYXBDb250YWluZXIyIiwiX21hcHNMYXlvdXQiLCJfYm90dG9tV2lkZ2V0IiwiX21vZGFsQ29udGFpbmVyIiwiX3Bsb3RDb250YWluZXIiLCJfbm90aWZpY2F0aW9uUGFuZWwiLCJfZ2VvY29kZXJQYW5lbCIsIl9lZmZlY3RNYW5hZ2VyIiwiX2RuZENvbnRleHQiLCJfdXNlQ2xvdWRMaXN0UHJvdmlkZXIiLCJfdXRpbHMiLCJfc3R5bGVzIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mMyIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jYWxsU3VwZXIiLCJvIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwic2hvdWxkRm9yd2FyZFByb3AiLCJwcm9wTmFtZSIsInRhcmdldCIsImlzUHJvcFZhbGlkIiwiR2xvYmFsU3R5bGUiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJmb250RmFtaWx5IiwiZm9udFdlaWdodCIsImZvbnRTaXplIiwibGluZUhlaWdodCIsImxhYmVsQ29sb3IiLCJCb3R0b21XaWRnZXRPdXRlciIsIl9yZWYiLCJhYnNvbHV0ZSIsImNvbmNhdCIsImlzVmlld3BvcnREaXNqb2ludGVkIiwiZXhwb3J0cyIsIm1hcFN0YXRlIiwiaXNTcGxpdCIsImlzVmlld3BvcnRTeW5jZWQiLCJzcGxpdE1hcFZpZXdwb3J0cyIsIm1hcFN0YXRlU2VsZWN0b3IiLCJpbmRleCIsIk51bWJlciIsImlzRmluaXRlIiwibWFwRmllbGRzU2VsZWN0b3IiLCJ1bmRlZmluZWQiLCJnZXRNYXBib3hSZWYiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsIkRFRkFVTFRfS0VQTEVSX0dMX1BST1BTIiwiZGF0YXNldEF0dHJpYnV0aW9ucyIsImF0dHJpYnV0aW9uU2VsZWN0b3IiLCJzb3VyY2VzIiwibWFwU3R5bGUiLCJvbkRlY2tJbml0aWFsaXplZCIsIm9uVmlld1N0YXRlQ2hhbmdlIiwib25Nb3VzZU1vdmUiLCJkZWNrR2xQcm9wcyIsInVpU3RhdGVBY3Rpb25zIiwidmlzU3RhdGVBY3Rpb25zIiwibWFwU3RhdGVBY3Rpb25zIiwidmlzU3RhdGUiLCJhY3RpdmVTaWRlUGFuZWwiLCJ1aVN0YXRlIiwibWFwQ29udHJvbHMiLCJyZWFkT25seSIsImxvY2FsZSIsImlzTG9hZGluZ0luZGljYXRvclZpc2libGUiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJzaWRlUGFuZWxXaWR0aCIsIndpZHRoIiwidG9wTWFwQ29udGFpbmVyUHJvcHMiLCJib3R0b21NYXBDb250YWluZXJQcm9wcyIsInRyYW5zZm9ybVJlcXVlc3QiLCJnZXRWaXNpYmxlRGF0YXNldHMiLCJkYXRhc2V0cyIsImZpbHRlck9iamVjdEJ5UHJlZGljYXRlIiwia2V5IiwiR0VPQ09ERVJfREFUQVNFVF9OQU1FIiwic2lkZVBhbmVsU2VsZWN0b3IiLCJhdmFpbGFibGVQcm92aWRlcnMiLCJmaWx0ZXJlZERhdGFzZXRzIiwiYXBwTmFtZSIsInZlcnNpb24iLCJhcHBXZWJzaXRlIiwib25TYXZlTWFwIiwibWFwU3R5bGVBY3Rpb25zIiwiZmlsdGVycyIsImxheWVycyIsImxheWVyT3JkZXIiLCJsYXllckNsYXNzZXMiLCJpbnRlcmFjdGlvbkNvbmZpZyIsIm1hcEluZm8iLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwibWFwU2F2ZWQiLCJwcm92aWRlclN0YXRlIiwicGxvdENvbnRhaW5lclNlbGVjdG9yIiwiaGVpZ2h0IiwiZXhwb3J0SW1hZ2VTZXR0aW5nIiwiZXhwb3J0SW1hZ2UiLCJtYXBGaWVsZHMiLCJhZGROb3RpZmljYXRpb24iLCJzZXRFeHBvcnRJbWFnZVNldHRpbmciLCJzZXRFeHBvcnRJbWFnZURhdGFVcmkiLCJzZXRFeHBvcnRJbWFnZUVycm9yIiwic3BsaXRNYXBzIiwiaXNTcGxpdFNlbGVjdG9yIiwiYm90dG9tV2lkZ2V0U2VsZWN0b3IiLCJhbmltYXRpb25Db25maWciLCJ0b2dnbGVNb2RhbCIsInNpZGVQYW5lbCIsIm1hcmdpbiIsImxlZnQiLCJtb2RhbENvbnRhaW5lclNlbGVjdG9yIiwicm9vdE5vZGUiLCJwcm92aWRlckFjdGlvbnMiLCJjbG91ZFByb3ZpZGVycyIsIm9uRXhwb3J0VG9DbG91ZFN1Y2Nlc3MiLCJvbkxvYWRDbG91ZE1hcFN1Y2Nlc3MiLCJvbkxvYWRDbG91ZE1hcEVycm9yIiwib25FeHBvcnRUb0Nsb3VkRXJyb3IiLCJnZW9Db2RlclBhbmVsU2VsZWN0b3IiLCJkaW1lbnNpb25zIiwiaXNHZW9jb2RlckVuYWJsZWQiLCJnZW9jb2RlciIsImVuYWJsZWQiLCJ1cGRhdGVWaXNEYXRhIiwicmVtb3ZlRGF0YXNldCIsInVwZGF0ZU1hcCIsImFwcFdpZHRoIiwiZGF0YXNldEF0dHJpYnV0aW9uU2VsZWN0b3IiLCJjcmVhdGVTZWxlY3RvciIsInN0YXRlIiwidW5pcXVlQXR0cmlidXRpb25zIiwiX2RzJG1ldGFkYXRhIiwiZHMiLCJhdHRyaWJ1dGlvbnMiLCJtZXRhZGF0YSIsIkFycmF5IiwiaXNBcnJheSIsImF0dHJpYnV0aW9uIiwibGlua3MiLCJtYXRjaCIsImxpbmsiLCJfbGluayRtYXRjaCIsIl9saW5rJG1hdGNoMiIsImhyZWYiLCJ0aXRsZSIsImluZGV4T2YiLCJ1cmwiLCJlcnJvciIsInVuaXF1ZVRleHRBdHRyaWJ1dGlvbnMiLCJsb2dvcyIsIm5vdGlmaWNhdGlvblBhbmVsU2VsZWN0b3IiLCJyZW1vdmVOb3RpZmljYXRpb24iLCJub3RpZmljYXRpb25zIiwibWFwU3R5bGVzIiwibWFwU3R5bGVzUmVwbGFjZURlZmF1bHQiLCJERUZBVUxUX01BUEJPWF9BUElfVVJMIiwiS0VQTEVSX0dMX05BTUUiLCJLRVBMRVJfR0xfVkVSU0lPTiIsIkRJTUVOU0lPTlMiLCJmZWF0dXJlRmxhZ3MiLCJLZXBsZXJHbEZhY3RvcnkiLCJkZXBzIiwiQm90dG9tV2lkZ2V0RmFjdG9yeSIsIkdlb0NvZGVyUGFuZWxGYWN0b3J5IiwiTWFwQ29udGFpbmVyRmFjdG9yeSIsIk1hcHNMYXlvdXRGYWN0b3J5IiwiTW9kYWxDb250YWluZXJGYWN0b3J5IiwiU2lkZVBhbmVsRmFjdG9yeSIsIlBsb3RDb250YWluZXJGYWN0b3J5IiwiTm90aWZpY2F0aW9uUGFuZWxGYWN0b3J5IiwiRG5kQ29udGV4dEZhY3RvcnkiLCJFZmZlY3RNYW5hZ2VyRmFjdG9yeSIsIkJvdHRvbVdpZGdldCIsIkdlb0NvZGVyUGFuZWwiLCJNYXBDb250YWluZXIiLCJNYXBzTGF5b3V0IiwiTW9kYWxDb250YWluZXIiLCJTaWRlUGFuZWwiLCJQbG90Q29udGFpbmVyIiwiTm90aWZpY2F0aW9uUGFuZWwiLCJEbmRDb250ZXh0IiwiS2VwbGVyR0wiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2xlbiIsImFyZ3MiLCJfa2V5Iiwic2V0U3RhdGUiLCJjcmVhdGVSZWYiLCJ0aGVtZVNlbGVjdG9yIiwiX3R5cGVvZjIiLCJiYXNpY1RoZW1lIiwiVEhFTUUiLCJsaWdodCIsInRoZW1lTFQiLCJiYXNlIiwidGhlbWVCUyIsImRhdGFzZXRzU2VsZWN0b3IiLCJwcm92aWRlcnMiLCJoYXNTdG9yYWdlIiwic29tZSIsInAiLCJoYXNQcml2YXRlU3RvcmFnZSIsImhhc1NoYXJlIiwiaGFzU2hhcmluZ1VybCIsImxvY2FsZU1lc3NhZ2VzIiwiY3VzdG9tTWVzc2FnZXMiLCJtZXJnZU1lc3NhZ2VzIiwibWVzc2FnZXMiLCJkZWZhdWx0U3R5bGVzIiwidmFsdWVzIiwiY3VzdG9tU3R5bGVzIiwibWFwIiwibXMiLCJpZCIsImdlbmVyYXRlSGFzaElkIiwiYWxsU3R5bGVzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlZHVjZSIsImFjY3UiLCJzdHlsZSIsImxvYWRNYXBTdHlsZXMiLCJjb250YWluZXJJZCIsImxheWVySWQiLCJ0b2dnbGVMYXllckZvck1hcCIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwidmFsdWUiLCJjb21wb25lbnREaWRNb3VudCIsIl9nZXRBcHBsaWNhdGlvbkNvbmZpZyIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiYmFzZU1hcExpYnJhcnlDb25maWciLCJtYXBMaWJOYW1lIiwiX3ZhbGlkYXRlTWFwYm94VG9rZW4iLCJfbG9hZE1hcFN0eWxlIiwib25LZXBsZXJHbEluaXRpYWxpemVkIiwicm9vdCIsImN1cnJlbnQiLCJIVE1MRWxlbWVudCIsIm9ic2VydmVEaW1lbnNpb25zIiwiX2hhbmRsZVJlc2l6ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwidW5vYnNlcnZlRGltZW5zaW9ucyIsInZhbGlkYXRlVG9rZW4iLCJDb25zb2xlIiwid2FybiIsIk1JU1NJTkdfTUFQQk9YX1RPS0VOIiwicmVuZGVyIiwiX3RoaXMyIiwiX3RoaXMkcHJvcHMiLCJfdGhpcyRwcm9wcyRpZCIsIl90aGlzJHByb3BzJHdpZHRoIiwiX3RoaXMkcHJvcHMkaGVpZ2h0IiwiX3RoaXMkcHJvcHMkY2xvdWRQcm92IiwiYXZhaWxhYmxlVGhlbWVTZWxlY3RvciIsImxvY2FsZU1lc3NhZ2VzU2VsZWN0b3IiLCJpc0V4cG9ydGluZ0ltYWdlIiwiZXhwb3J0aW5nIiwiZmlsdGVyZWREYXRhc2V0c1NlbGVjdG9yIiwic2lkZUZpZWxkcyIsInBsb3RDb250YWluZXJGaWVsZHMiLCJib3R0b21XaWRnZXRGaWVsZHMiLCJtb2RhbENvbnRhaW5lckZpZWxkcyIsImdlb0NvZGVyUGFuZWxGaWVsZHMiLCJub3RpZmljYXRpb25QYW5lbEZpZWxkcyIsIm1hcENvbnRhaW5lcnMiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwicHJpbWFyeSIsImRlbGV0ZU1hcExhYmVscyIsIl9kZWxldGVNYXBMYWJlbHMiLCJzZXR0aW5ncyIsIlJvb3RDb250ZXh0IiwiUHJvdmlkZXIiLCJGZWF0dXJlRmxhZ3NDb250ZXh0UHJvdmlkZXIiLCJJbnRsUHJvdmlkZXIiLCJTdHlsZVNoZWV0TWFuYWdlciIsIlRoZW1lUHJvdmlkZXIiLCJDbG91ZExpc3RQcm92aWRlciIsImNsYXNzTmFtZSIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwicG9zaXRpb24iLCJyZWYiLCJ1bnN5bmNlZFZpZXdwb3J0cyIsIl9tYXBDb250YWluZXIiLCJoYXNQb3J0YWJsZVdpZHRoIiwiYnJlYWtQb2ludFZhbHVlcyIsInJvb3RSZWYiLCJib3R0b21XaWRnZXRSZWYiLCJjb250YWluZXJXIiwiY29udGFpbmVySCIsIkNvbXBvbmVudCIsImtlcGxlckdsQ29ubmVjdCIsIm1hcFN0YXRlVG9Qcm9wcyIsIm1ha2VNYXBEaXNwYXRjaFRvUHJvcHMiLCJ3aXRoVGhlbWUiLCJkZWZhdWx0VXNlckFjdGlvbnMiLCJnZXREaXNwYXRjaCIsImRpc3BhdGNoIiwiZ2V0VXNlckFjdGlvbnMiLCJhY3Rpb25zIiwibWFrZUdldEFjdGlvbkNyZWF0b3JzIiwidXNlckFjdGlvbnMiLCJfbWFwIiwiVmlzU3RhdGVBY3Rpb25zIiwiTWFwU3RhdGVBY3Rpb25zIiwiTWFwU3R5bGVBY3Rpb25zIiwiVUlTdGF0ZUFjdGlvbnMiLCJQcm92aWRlckFjdGlvbnMiLCJiaW5kQWN0aW9uQ3JlYXRvcnMiLCJtZXJnZUFjdGlvbnMiLCJfbWFwMiIsIl9zbGljZWRUb0FycmF5MiIsImdldEFjdGlvbkNyZWF0b3JzIiwibWFwRGlzcGF0Y2hUb1Byb3BzIiwib3duUHJvcHMiLCJncm91cGVkQWN0aW9uQ3JlYXRvcnMiLCJvdmVycmlkZXMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9rZXBsZXItZ2wudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgY3JlYXRlUmVmLCBEaXNwYXRjaH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHtiaW5kQWN0aW9uQ3JlYXRvcnN9IGZyb20gJ3JlZHV4JztcbmltcG9ydCBpc1Byb3BWYWxpZCBmcm9tICdAZW1vdGlvbi9pcy1wcm9wLXZhbGlkJztcbmltcG9ydCBzdHlsZWQsIHt3aXRoVGhlbWUsIFN0eWxlU2hlZXRNYW5hZ2VyLCBUaGVtZVByb3ZpZGVyfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge2NyZWF0ZVNlbGVjdG9yfSBmcm9tICdyZXNlbGVjdCc7XG5pbXBvcnQge2Nvbm5lY3QgYXMga2VwbGVyR2xDb25uZWN0fSBmcm9tICcuL2Nvbm5lY3Qva2VwbGVyZ2wtY29ubmVjdCc7XG5pbXBvcnQge0ludGxQcm92aWRlcn0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQge21lc3NhZ2VzfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge1Jvb3RDb250ZXh0LCBGZWF0dXJlRmxhZ3NDb250ZXh0UHJvdmlkZXIsIEZlYXR1cmVGbGFnc30gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7XG4gIEF0dHJpYnV0aW9uV2l0aFN0eWxlLFxuICBEYXRhc2V0QXR0cmlidXRpb24sXG4gIE9uRXJyb3JDYWxsQmFjayxcbiAgT25TdWNjZXNzQ2FsbEJhY2ssXG4gIFZpZXdwb3J0XG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQge1xuICBNYXBTdGF0ZUFjdGlvbnMsXG4gIE1hcFN0eWxlQWN0aW9ucyxcbiAgUHJvdmlkZXJBY3Rpb25zLFxuICBVSVN0YXRlQWN0aW9ucyxcbiAgVmlzU3RhdGVBY3Rpb25zXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcblxudHlwZSBLZXBsZXJHbEFjdGlvbnMgPSB7XG4gIHZpc1N0YXRlQWN0aW9uczogdHlwZW9mIFZpc1N0YXRlQWN0aW9ucztcbiAgbWFwU3RhdGVBY3Rpb25zOiB0eXBlb2YgTWFwU3RhdGVBY3Rpb25zO1xuICBtYXBTdHlsZUFjdGlvbnM6IHR5cGVvZiBNYXBTdHlsZUFjdGlvbnM7XG4gIHVpU3RhdGVBY3Rpb25zOiB0eXBlb2YgVUlTdGF0ZUFjdGlvbnM7XG4gIHByb3ZpZGVyQWN0aW9uczogdHlwZW9mIFByb3ZpZGVyQWN0aW9ucztcbn07XG5cbmltcG9ydCB7XG4gIERJTUVOU0lPTlMsXG4gIEtFUExFUl9HTF9OQU1FLFxuICBLRVBMRVJfR0xfVkVSU0lPTixcbiAgVEhFTUUsXG4gIERFRkFVTFRfTUFQQk9YX0FQSV9VUkwsXG4gIEdFT0NPREVSX0RBVEFTRVRfTkFNRSxcbiAgTUlTU0lOR19NQVBCT1hfVE9LRU5cbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5pbXBvcnQgU2lkZVBhbmVsRmFjdG9yeSBmcm9tICcuL3NpZGUtcGFuZWwnO1xuaW1wb3J0IE1hcENvbnRhaW5lckZhY3RvcnkgZnJvbSAnLi9tYXAtY29udGFpbmVyJztcbmltcG9ydCBNYXBzTGF5b3V0RmFjdG9yeSBmcm9tICcuL21hcHMtbGF5b3V0JztcbmltcG9ydCBCb3R0b21XaWRnZXRGYWN0b3J5IGZyb20gJy4vYm90dG9tLXdpZGdldCc7XG5pbXBvcnQgTW9kYWxDb250YWluZXJGYWN0b3J5IGZyb20gJy4vbW9kYWwtY29udGFpbmVyJztcbmltcG9ydCBQbG90Q29udGFpbmVyRmFjdG9yeSBmcm9tICcuL3Bsb3QtY29udGFpbmVyJztcbmltcG9ydCBOb3RpZmljYXRpb25QYW5lbEZhY3RvcnkgZnJvbSAnLi9ub3RpZmljYXRpb24tcGFuZWwnO1xuaW1wb3J0IEdlb0NvZGVyUGFuZWxGYWN0b3J5IGZyb20gJy4vZ2VvY29kZXItcGFuZWwnO1xuaW1wb3J0IEVmZmVjdE1hbmFnZXJGYWN0b3J5IGZyb20gJy4vZWZmZWN0cy9lZmZlY3QtbWFuYWdlcic7XG5pbXBvcnQgRG5kQ29udGV4dEZhY3RvcnkgZnJvbSAnLi9kbmQtY29udGV4dCc7XG5pbXBvcnQge0Nsb3VkTGlzdFByb3ZpZGVyfSBmcm9tICcuL2hvb2tzL3VzZS1jbG91ZC1saXN0LXByb3ZpZGVyJztcblxuaW1wb3J0IHtcbiAgZmlsdGVyT2JqZWN0QnlQcmVkaWNhdGUsXG4gIHZhbGlkYXRlVG9rZW4sXG4gIG1lcmdlTWVzc2FnZXMsXG4gIG9ic2VydmVEaW1lbnNpb25zLFxuICB1bm9ic2VydmVEaW1lbnNpb25zLFxuICBoYXNQb3J0YWJsZVdpZHRoLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHt0aGVtZSBhcyBiYXNpY1RoZW1lLCB0aGVtZUxULCB0aGVtZUJTLCBicmVha1BvaW50VmFsdWVzfSBmcm9tICdAa2VwbGVyLmdsL3N0eWxlcyc7XG5pbXBvcnQge0tlcGxlckdsU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuaW1wb3J0IHtQcm92aWRlcn0gZnJvbSAnQGtlcGxlci5nbC9jbG91ZC1wcm92aWRlcnMnO1xuXG4vLyBUaGlzIGltcGxlbWVudHMgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZnJvbSBzdHlsZWQtY29tcG9uZW50cyB2NVxuZnVuY3Rpb24gc2hvdWxkRm9yd2FyZFByb3AocHJvcE5hbWUsIHRhcmdldCkge1xuICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBGb3IgSFRNTCBlbGVtZW50cywgZm9yd2FyZCB0aGUgcHJvcCBpZiBpdCBpcyBhIHZhbGlkIEhUTUwgYXR0cmlidXRlXG4gICAgcmV0dXJuIGlzUHJvcFZhbGlkKHByb3BOYW1lKTtcbiAgfVxuICAvLyBGb3Igb3RoZXIgZWxlbWVudHMsIGZvcndhcmQgYWxsIHByb3BzXG4gIHJldHVybiB0cnVlO1xufVxuXG4vLyBNYXliZSB3ZSBzaG91bGQgdGhpbmsgYWJvdXQgZXhwb3J0aW5nIHRoaXMgb3IgY3JlYXRpbmcgYSB2YXJpYWJsZVxuLy8gYXMgcGFydCBvZiB0aGUgYmFzZS5qcyB0aGVtZVxuY29uc3QgR2xvYmFsU3R5bGUgPSBzdHlsZWQuZGl2YFxuICBmb250LWZhbWlseTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5mb250RmFtaWx5fTtcbiAgZm9udC13ZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZm9udFdlaWdodH07XG4gIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5mb250U2l6ZX07XG4gIGxpbmUtaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxpbmVIZWlnaHR9O1xuXG4gICosXG4gICo6YmVmb3JlLFxuICAqOmFmdGVyIHtcbiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIH1cblxuICB1bCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICBsaSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgYSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxhYmVsQ29sb3J9O1xuICB9XG5cbiAgLm1hcGxpYnJlZ2wtY3RybCAubWFwbGlicmVnbC1jdHJsLWxvZ28ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAubWFwYm94Z2wtY3RybCAubWFwYm94Z2wtY3RybC1sb2dvIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5gO1xuXG50eXBlIEJvdHRvbVdpZGdldE91dGVyUHJvcHMgPSB7XG4gIGFic29sdXRlPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IEJvdHRvbVdpZGdldE91dGVyID0gc3R5bGVkLmRpdjxCb3R0b21XaWRnZXRPdXRlclByb3BzPihcbiAgKHthYnNvbHV0ZX0pID0+IGBcbiAgJHthYnNvbHV0ZSA/ICdwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogMDsgcmlnaHQ6IDA7JyA6ICcnfVxuICBwb2ludGVyLWV2ZW50czogbm9uZTsgLyogcHJldmVudCBwYWRkaW5nIGZyb20gYmxvY2tpbmcgaW5wdXQgKi9cbiAgJiA+ICoge1xuICAgIC8qIGFsbCBjaGlsZHJlbiBzaG91bGQgYWxsb3cgaW5wdXQgKi9cbiAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB9YFxuKTtcblxuZXhwb3J0IGNvbnN0IGlzVmlld3BvcnREaXNqb2ludGVkID0gcHJvcHMgPT4ge1xuICByZXR1cm4gKFxuICAgIHByb3BzLm1hcFN0YXRlLmlzU3BsaXQgJiZcbiAgICAhcHJvcHMubWFwU3RhdGUuaXNWaWV3cG9ydFN5bmNlZCAmJlxuICAgIHByb3BzLm1hcFN0YXRlLnNwbGl0TWFwVmlld3BvcnRzLmxlbmd0aCA+IDFcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBtYXBTdGF0ZVNlbGVjdG9yID0gKHByb3BzOiBhbnksIGluZGV4OiBudW1iZXIpOiBhbnkgPT4ge1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShpbmRleCkpIHtcbiAgICAvLyBlaXRoZXIgbm8gaW5kZXggYXJnIG9yIGFuIGludmFsaWQgaW5kZXggd2FzIHByb3ZpZGVkXG4gICAgLy8gaXQgaXMgZXhwZWN0ZWQgdG8gYmUgZWl0aGVyIDAgb3IgMSB3aGVuIGluIHNwbGl0IG1vZGVcbiAgICAvLyBvbmx5IHVzZSB0aGUgbWFwU3RhdGVcbiAgICByZXR1cm4gcHJvcHMubWFwU3RhdGU7XG4gIH1cblxuICByZXR1cm4gaXNWaWV3cG9ydERpc2pvaW50ZWQocHJvcHMpXG4gICAgPyAvLyBtaXggdG9nZXRoZXIgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMgaW50ZW5kZWQgZm9yIHRoaXMgZGlzam9pbnRlZCA8TWFwQ29udGFpbmVyPiB3aXRoIHRoZSBvdGhlciBuZWNlc3NhcnkgbWFwU3RhdGUgcHJvcGVydGllc1xuICAgICAgey4uLnByb3BzLm1hcFN0YXRlLCAuLi5wcm9wcy5tYXBTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0c1tpbmRleF19XG4gICAgOiAvLyBvdGhlcndpc2Ugb25seSB1c2UgdGhlIG1hcFN0YXRlXG4gICAgICBwcm9wcy5tYXBTdGF0ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBtYXBGaWVsZHNTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcywgaW5kZXggPSAwKSA9PiAoe1xuICBnZXRNYXBib3hSZWY6IHByb3BzLmdldE1hcGJveFJlZixcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHByb3BzLm1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICBtYXBib3hBcGlVcmw6IHByb3BzLm1hcGJveEFwaVVybCA/IHByb3BzLm1hcGJveEFwaVVybCA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLm1hcGJveEFwaVVybCxcbiAgbWFwU3RhdGU6IG1hcFN0YXRlU2VsZWN0b3IocHJvcHMsIGluZGV4KSxcbiAgZGF0YXNldEF0dHJpYnV0aW9uczogYXR0cmlidXRpb25TZWxlY3Rvcihwcm9wcykuc291cmNlcyxcbiAgbWFwU3R5bGU6IHByb3BzLm1hcFN0eWxlLFxuICBvbkRlY2tJbml0aWFsaXplZDogcHJvcHMub25EZWNrSW5pdGlhbGl6ZWQsXG4gIG9uVmlld1N0YXRlQ2hhbmdlOiBwcm9wcy5vblZpZXdTdGF0ZUNoYW5nZSxcbiAgb25Nb3VzZU1vdmU6IHByb3BzLm9uTW91c2VNb3ZlLFxuICBkZWNrR2xQcm9wczogcHJvcHMuZGVja0dsUHJvcHMsXG4gIHVpU3RhdGVBY3Rpb25zOiBwcm9wcy51aVN0YXRlQWN0aW9ucyxcbiAgdmlzU3RhdGVBY3Rpb25zOiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMsXG4gIG1hcFN0YXRlQWN0aW9uczogcHJvcHMubWFwU3RhdGVBY3Rpb25zLFxuXG4gIC8vIHZpc1N0YXRlXG4gIHZpc1N0YXRlOiBwcm9wcy52aXNTdGF0ZSxcblxuICAvLyB1aVN0YXRlXG4gIGFjdGl2ZVNpZGVQYW5lbDogcHJvcHMudWlTdGF0ZS5hY3RpdmVTaWRlUGFuZWwsXG4gIG1hcENvbnRyb2xzOiBwcm9wcy51aVN0YXRlLm1hcENvbnRyb2xzLFxuICByZWFkT25seTogcHJvcHMudWlTdGF0ZS5yZWFkT25seSxcbiAgbG9jYWxlOiBwcm9wcy51aVN0YXRlLmxvY2FsZSxcbiAgaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZTogTnVtYmVyKHByb3BzLnVpU3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlKSA+IDAsXG4gIHNpZGVQYW5lbFdpZHRoOiBwcm9wcy5zaWRlUGFuZWxXaWR0aCA/IHByb3BzLnNpZGVQYW5lbFdpZHRoIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMud2lkdGgsXG5cbiAgLy8gbWFwU3R5bGVcbiAgdG9wTWFwQ29udGFpbmVyUHJvcHM6IHByb3BzLnRvcE1hcENvbnRhaW5lclByb3BzLFxuICBib3R0b21NYXBDb250YWluZXJQcm9wczogcHJvcHMuYm90dG9tTWFwQ29udGFpbmVyUHJvcHMsXG5cbiAgLy8gdHJhbnNmb3JtUmVxdWVzdCBmb3IgTWFwYm94IGJhc2VtYXBzXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IHByb3BzLnRyYW5zZm9ybVJlcXVlc3Rcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzaWJsZURhdGFzZXRzKGRhdGFzZXRzKSB7XG4gIC8vIFdlIGRvbid0IHdhbnQgR2VvY29kZXIgZGF0YXNldCB0byBiZSBwcmVzZW50IGluIFNpZGVQYW5lbCBkYXRhc2V0IGxpc3RcbiAgcmV0dXJuIGZpbHRlck9iamVjdEJ5UHJlZGljYXRlKGRhdGFzZXRzLCBrZXkgPT4ga2V5ICE9PSBHRU9DT0RFUl9EQVRBU0VUX05BTUUpO1xufVxuXG5leHBvcnQgY29uc3Qgc2lkZVBhbmVsU2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMsIGF2YWlsYWJsZVByb3ZpZGVycywgZmlsdGVyZWREYXRhc2V0cykgPT4gKHtcbiAgYXBwTmFtZTogcHJvcHMuYXBwTmFtZSA/IHByb3BzLmFwcE5hbWUgOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy5hcHBOYW1lLFxuICB2ZXJzaW9uOiBwcm9wcy52ZXJzaW9uID8gcHJvcHMudmVyc2lvbiA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLnZlcnNpb24sXG4gIGFwcFdlYnNpdGU6IHByb3BzLmFwcFdlYnNpdGUsXG4gIG1hcFN0eWxlOiBwcm9wcy5tYXBTdHlsZSxcbiAgb25TYXZlTWFwOiBwcm9wcy5vblNhdmVNYXAsXG4gIHVpU3RhdGU6IHByb3BzLnVpU3RhdGUsXG4gIG1hcFN0eWxlQWN0aW9uczogcHJvcHMubWFwU3R5bGVBY3Rpb25zLFxuICB2aXNTdGF0ZUFjdGlvbnM6IHByb3BzLnZpc1N0YXRlQWN0aW9ucyxcbiAgdWlTdGF0ZUFjdGlvbnM6IHByb3BzLnVpU3RhdGVBY3Rpb25zLFxuICBtYXBTdGF0ZUFjdGlvbnM6IHByb3BzLm1hcFN0YXRlQWN0aW9ucyxcblxuICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0cyxcbiAgZmlsdGVyczogcHJvcHMudmlzU3RhdGUuZmlsdGVycyxcbiAgbGF5ZXJzOiBwcm9wcy52aXNTdGF0ZS5sYXllcnMsXG4gIGxheWVyT3JkZXI6IHByb3BzLnZpc1N0YXRlLmxheWVyT3JkZXIsXG4gIGxheWVyQ2xhc3NlczogcHJvcHMudmlzU3RhdGUubGF5ZXJDbGFzc2VzLFxuICBpbnRlcmFjdGlvbkNvbmZpZzogcHJvcHMudmlzU3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gIG1hcEluZm86IHByb3BzLnZpc1N0YXRlLm1hcEluZm8sXG4gIGxheWVyQmxlbmRpbmc6IHByb3BzLnZpc1N0YXRlLmxheWVyQmxlbmRpbmcsXG4gIG92ZXJsYXlCbGVuZGluZzogcHJvcHMudmlzU3RhdGUub3ZlcmxheUJsZW5kaW5nLFxuXG4gIHdpZHRoOiBwcm9wcy5zaWRlUGFuZWxXaWR0aCA/IHByb3BzLnNpZGVQYW5lbFdpZHRoIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMud2lkdGgsXG4gIGF2YWlsYWJsZVByb3ZpZGVycyxcbiAgbWFwU2F2ZWQ6IHByb3BzLnByb3ZpZGVyU3RhdGUubWFwU2F2ZWRcbn0pO1xuXG5leHBvcnQgY29uc3QgcGxvdENvbnRhaW5lclNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzKSA9PiAoe1xuICB3aWR0aDogcHJvcHMud2lkdGgsXG4gIGhlaWdodDogcHJvcHMuaGVpZ2h0LFxuICBleHBvcnRJbWFnZVNldHRpbmc6IHByb3BzLnVpU3RhdGUuZXhwb3J0SW1hZ2UsXG4gIG1hcEZpZWxkczogbWFwRmllbGRzU2VsZWN0b3IocHJvcHMpLFxuICBhZGROb3RpZmljYXRpb246IHByb3BzLnVpU3RhdGVBY3Rpb25zLmFkZE5vdGlmaWNhdGlvbixcbiAgc2V0RXhwb3J0SW1hZ2VTZXR0aW5nOiBwcm9wcy51aVN0YXRlQWN0aW9ucy5zZXRFeHBvcnRJbWFnZVNldHRpbmcsXG4gIHNldEV4cG9ydEltYWdlRGF0YVVyaTogcHJvcHMudWlTdGF0ZUFjdGlvbnMuc2V0RXhwb3J0SW1hZ2VEYXRhVXJpLFxuICBzZXRFeHBvcnRJbWFnZUVycm9yOiBwcm9wcy51aVN0YXRlQWN0aW9ucy5zZXRFeHBvcnRJbWFnZUVycm9yLFxuICBzcGxpdE1hcHM6IHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwc1xufSk7XG5cbmV4cG9ydCBjb25zdCBpc1NwbGl0U2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+XG4gIHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcyAmJiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID4gMTtcblxuZXhwb3J0IGNvbnN0IGJvdHRvbVdpZGdldFNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzLCB0aGVtZSkgPT4gKHtcbiAgZmlsdGVyczogcHJvcHMudmlzU3RhdGUuZmlsdGVycyxcbiAgZGF0YXNldHM6IHByb3BzLnZpc1N0YXRlLmRhdGFzZXRzLFxuICB1aVN0YXRlOiBwcm9wcy51aVN0YXRlLFxuICBsYXllcnM6IHByb3BzLnZpc1N0YXRlLmxheWVycyxcbiAgYW5pbWF0aW9uQ29uZmlnOiBwcm9wcy52aXNTdGF0ZS5hbmltYXRpb25Db25maWcsXG4gIHZpc1N0YXRlQWN0aW9uczogcHJvcHMudmlzU3RhdGVBY3Rpb25zLFxuICB0b2dnbGVNb2RhbDogcHJvcHMudWlTdGF0ZUFjdGlvbnMudG9nZ2xlTW9kYWwsXG4gIHNpZGVQYW5lbFdpZHRoOiBwcm9wcy51aVN0YXRlLnJlYWRPbmx5ID8gMCA6IHByb3BzLnNpZGVQYW5lbFdpZHRoICsgdGhlbWUuc2lkZVBhbmVsLm1hcmdpbi5sZWZ0XG59KTtcblxuZXhwb3J0IGNvbnN0IG1vZGFsQ29udGFpbmVyU2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMsIHJvb3ROb2RlKSA9PiAoe1xuICBhcHBOYW1lOiBwcm9wcy5hcHBOYW1lID8gcHJvcHMuYXBwTmFtZSA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLmFwcE5hbWUsXG4gIG1hcFN0eWxlOiBwcm9wcy5tYXBTdHlsZSxcbiAgdmlzU3RhdGU6IHByb3BzLnZpc1N0YXRlLFxuICBtYXBTdGF0ZTogcHJvcHMubWFwU3RhdGUsXG4gIHVpU3RhdGU6IHByb3BzLnVpU3RhdGUsXG4gIHByb3ZpZGVyU3RhdGU6IHByb3BzLnByb3ZpZGVyU3RhdGUsXG5cbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHByb3BzLm1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICBtYXBib3hBcGlVcmw6IHByb3BzLm1hcGJveEFwaVVybCxcbiAgdmlzU3RhdGVBY3Rpb25zOiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMsXG4gIHVpU3RhdGVBY3Rpb25zOiBwcm9wcy51aVN0YXRlQWN0aW9ucyxcbiAgbWFwU3R5bGVBY3Rpb25zOiBwcm9wcy5tYXBTdHlsZUFjdGlvbnMsXG4gIHByb3ZpZGVyQWN0aW9uczogcHJvcHMucHJvdmlkZXJBY3Rpb25zLFxuXG4gIHJvb3ROb2RlLFxuICAvLyBVc2VyIGRlZmluZWQgY2xvdWQgcHJvdmlkZXIgcHJvcHNcbiAgY2xvdWRQcm92aWRlcnM6IHByb3BzLmNsb3VkUHJvdmlkZXJzXG4gICAgPyBwcm9wcy5jbG91ZFByb3ZpZGVyc1xuICAgIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMuY2xvdWRQcm92aWRlcnMsXG4gIG9uRXhwb3J0VG9DbG91ZFN1Y2Nlc3M6IHByb3BzLm9uRXhwb3J0VG9DbG91ZFN1Y2Nlc3MsXG4gIG9uTG9hZENsb3VkTWFwU3VjY2VzczogcHJvcHMub25Mb2FkQ2xvdWRNYXBTdWNjZXNzLFxuICBvbkxvYWRDbG91ZE1hcEVycm9yOiBwcm9wcy5vbkxvYWRDbG91ZE1hcEVycm9yLFxuICBvbkV4cG9ydFRvQ2xvdWRFcnJvcjogcHJvcHMub25FeHBvcnRUb0Nsb3VkRXJyb3Jcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VvQ29kZXJQYW5lbFNlbGVjdG9yID0gKFxuICBwcm9wczogS2VwbGVyR0xQcm9wcyxcbiAgZGltZW5zaW9uczoge3dpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyfVxuKSA9PiAoe1xuICBpc0dlb2NvZGVyRW5hYmxlZDogcHJvcHMudmlzU3RhdGUuaW50ZXJhY3Rpb25Db25maWcuZ2VvY29kZXIuZW5hYmxlZCxcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHByb3BzLm1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICBtYXBTdGF0ZTogcHJvcHMubWFwU3RhdGUsXG4gIHVpU3RhdGU6IHByb3BzLnVpU3RhdGUsXG4gIGxheWVyT3JkZXI6IHByb3BzLnZpc1N0YXRlLmxheWVyT3JkZXIsXG4gIHVwZGF0ZVZpc0RhdGE6IHByb3BzLnZpc1N0YXRlQWN0aW9ucy51cGRhdGVWaXNEYXRhLFxuICByZW1vdmVEYXRhc2V0OiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMucmVtb3ZlRGF0YXNldCxcbiAgdXBkYXRlTWFwOiBwcm9wcy5tYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwLFxuICBhcHBXaWR0aDogZGltZW5zaW9ucy53aWR0aFxufSk7XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiB1bmlxdWUgZGF0YXNldCBhdHRyaWJ1dGlvbnMsIGVhY2ggd2l0aCB0aXRsZSBhbmQgdXJsIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBkYXRhc2V0QXR0cmlidXRpb25TZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICBbc3RhdGUgPT4gc3RhdGUudmlzU3RhdGUuZGF0YXNldHNdLFxuICBkYXRhc2V0cyA9PiB7XG4gICAgY29uc3QgdW5pcXVlQXR0cmlidXRpb25zOiBEYXRhc2V0QXR0cmlidXRpb25bXSA9IFtdO1xuICAgIE9iamVjdC5rZXlzKGRhdGFzZXRzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCBkcyA9IGRhdGFzZXRzW2tleV07XG4gICAgICBjb25zdCBhdHRyaWJ1dGlvbnMgPSBkcz8ubWV0YWRhdGE/LmF0dHJpYnV0aW9ucztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGF0dHJpYnV0aW9ucykpIHtcbiAgICAgICAgYXR0cmlidXRpb25zLmZvckVhY2goYXR0cmlidXRpb24gPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgYXR0cmlidXRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAvLyBhdHRyaWJ1dGlvbiBjYW4gYmUgYSByYXcgc3RyaW5nIG9yIGEgc3RyaW5nIHdpdGggbGluayB0YWdzXG4gICAgICAgICAgICBjb25zdCBsaW5rcyA9IGF0dHJpYnV0aW9uLm1hdGNoKC88YVteXSs/YT4vZyk7XG4gICAgICAgICAgICBpZiAobGlua3MpIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsaW5rcz8uZm9yRWFjaChsaW5rID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGhyZWYgPSBsaW5rLm1hdGNoKC9ocmVmPVwiKFteXCJdKikvKT8uWzFdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBsaW5rLm1hdGNoKC90aXRsZT1cIihbXlwiXSopLyk/LlsxXTtcbiAgICAgICAgICAgICAgICAgIGlmIChocmVmICYmIHRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuaXF1ZUF0dHJpYnV0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYCR7bGluay5pbmRleE9mKCcmY29weTsnKSA+PSAwID8gJ8KpICcgOiAnJ30ke3RpdGxlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgdXJsOiBocmVmXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIGp1c3QgaWdub3JlIGZvciBub3dcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdW5pcXVlQXR0cmlidXRpb25zLnB1c2goe3RpdGxlOiBhdHRyaWJ1dGlvbiwgdXJsOiBudWxsfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdW5pcXVlQXR0cmlidXRpb25zO1xuICB9XG4pO1xuXG4vKipcbiAqIERlZHVwbGljYXRlZCBkYXRhc2V0IGFuZCBsYXllciB0ZXh0IGF0dHJpYnV0aW9ucyBhbmQgbG9nb3MuXG4gKiBSZXR1cm5zIHRleHQgYXR0cmlidXRpb25zIGFuZCBsb2dvcyB0byBkaXNwbGF5LlxuICovXG5leHBvcnQgY29uc3QgYXR0cmlidXRpb25TZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICBbZGF0YXNldEF0dHJpYnV0aW9uU2VsZWN0b3JdLFxuICBkYXRhc2V0QXR0cmlidXRpb25zID0+IHtcbiAgICAvLyBUT0RPIGNvbGxlY3QgYXR0cmlidXRpb25zIGZyb20gbGF5ZXJzLCBhbmQgbWVyZ2Ugd2l0aCBkYXRhc2V0IGF0dHJpYnV0aW9ucyBoZXJlXG4gICAgY29uc3QgdW5pcXVlVGV4dEF0dHJpYnV0aW9ucyA9IGRhdGFzZXRBdHRyaWJ1dGlvbnM7XG4gICAgY29uc3QgbG9nb3M6IEF0dHJpYnV0aW9uV2l0aFN0eWxlW10gPSBbXTtcblxuICAgIHJldHVybiB7c291cmNlczogdW5pcXVlVGV4dEF0dHJpYnV0aW9ucywgbG9nb3N9O1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3Qgbm90aWZpY2F0aW9uUGFuZWxTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcykgPT4gKHtcbiAgcmVtb3ZlTm90aWZpY2F0aW9uOiBwcm9wcy51aVN0YXRlQWN0aW9ucy5yZW1vdmVOb3RpZmljYXRpb24sXG4gIG5vdGlmaWNhdGlvbnM6IHByb3BzLnVpU3RhdGUubm90aWZpY2F0aW9uc1xufSk7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0tFUExFUl9HTF9QUk9QUyA9IHtcbiAgbWFwU3R5bGVzOiBbXSxcbiAgbWFwU3R5bGVzUmVwbGFjZURlZmF1bHQ6IGZhbHNlLFxuICBtYXBib3hBcGlVcmw6IERFRkFVTFRfTUFQQk9YX0FQSV9VUkwsXG4gIHdpZHRoOiA4MDAsXG4gIGhlaWdodDogODAwLFxuICBhcHBOYW1lOiBLRVBMRVJfR0xfTkFNRSxcbiAgdmVyc2lvbjogS0VQTEVSX0dMX1ZFUlNJT04sXG4gIHNpZGVQYW5lbFdpZHRoOiBESU1FTlNJT05TLnNpZGVQYW5lbC53aWR0aCxcbiAgdGhlbWU6IHt9LFxuICBjbG91ZFByb3ZpZGVyczogW10sXG4gIHJlYWRPbmx5OiBmYWxzZSxcbiAgZmVhdHVyZUZsYWdzOiB7fVxufTtcblxudHlwZSBLZXBsZXJHTEJhc2ljUHJvcHMgPSB7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIG1hcGJveEFwaVVybD86IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgd2lkdGg/OiBudW1iZXI7XG4gIGhlaWdodD86IG51bWJlcjtcblxuICBhcHBXZWJzaXRlPzogYW55O1xuICBvblNhdmVNYXA/OiAoKSA9PiB2b2lkO1xuICBvblZpZXdTdGF0ZUNoYW5nZT86ICh2aWV3U3RhdGU6IFZpZXdwb3J0KSA9PiB2b2lkO1xuICBvbkRlY2tJbml0aWFsaXplZD86ICgpID0+IHZvaWQ7XG4gIG9uS2VwbGVyR2xJbml0aWFsaXplZD86ICgpID0+IHZvaWQ7XG4gIGdldE1hcGJveFJlZj86ICgpID0+IFJlYWN0LlJlZk9iamVjdDxhbnk+O1xuICBtYXBTdHlsZXM/OiB7aWQ6IHN0cmluZzsgc3R5bGU/OiBvYmplY3R9W107XG4gIG1hcFN0eWxlc1JlcGxhY2VEZWZhdWx0PzogYm9vbGVhbjtcbiAgYXBwTmFtZT86IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgc2lkZVBhbmVsV2lkdGg/OiBudW1iZXI7XG4gIHRoZW1lPzogb2JqZWN0O1xuICBjbG91ZFByb3ZpZGVycz86IFByb3ZpZGVyW107XG4gIGRlY2tHbFByb3BzPzogb2JqZWN0O1xuICBvbkxvYWRDbG91ZE1hcFN1Y2Nlc3M/OiBPblN1Y2Nlc3NDYWxsQmFjaztcbiAgb25Mb2FkQ2xvdWRNYXBFcnJvcj86IE9uRXJyb3JDYWxsQmFjaztcbiAgb25Nb3VzZU1vdmU/OiAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQgJiB7bG5nTGF0PzogW251bWJlciwgbnVtYmVyXX0pID0+IHZvaWQ7XG4gIG9uRXhwb3J0VG9DbG91ZFN1Y2Nlc3M/OiBPblN1Y2Nlc3NDYWxsQmFjaztcbiAgb25FeHBvcnRUb0Nsb3VkRXJyb3I/OiBPbkVycm9yQ2FsbEJhY2s7XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgZmVhdHVyZUZsYWdzPzogRmVhdHVyZUZsYWdzO1xuXG4gIGxvY2FsZU1lc3NhZ2VzPzoge1trZXk6IHN0cmluZ106IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9fTtcbiAgZGlzcGF0Y2g6IERpc3BhdGNoPGFueT47XG5cbiAgdG9wTWFwQ29udGFpbmVyUHJvcHM/OiBvYmplY3Q7XG4gIGJvdHRvbU1hcENvbnRhaW5lclByb3BzPzogb2JqZWN0O1xuXG4gIHRyYW5zZm9ybVJlcXVlc3Q/OiAodXJsOiBzdHJpbmcpID0+IHt1cmw6IHN0cmluZ307XG59O1xuXG50eXBlIEtlcGxlckdMUHJvcHMgPSBLZXBsZXJHbFN0YXRlICYgS2VwbGVyR2xBY3Rpb25zICYgS2VwbGVyR0xCYXNpY1Byb3BzO1xudHlwZSBLZXBsZXJHTENvbXBTdGF0ZSA9IHtcbiAgZGltZW5zaW9uczoge3dpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyfSB8IG51bGw7XG59O1xuXG5LZXBsZXJHbEZhY3RvcnkuZGVwcyA9IFtcbiAgQm90dG9tV2lkZ2V0RmFjdG9yeSxcbiAgR2VvQ29kZXJQYW5lbEZhY3RvcnksXG4gIE1hcENvbnRhaW5lckZhY3RvcnksXG4gIE1hcHNMYXlvdXRGYWN0b3J5LFxuICBNb2RhbENvbnRhaW5lckZhY3RvcnksXG4gIFNpZGVQYW5lbEZhY3RvcnksXG4gIFBsb3RDb250YWluZXJGYWN0b3J5LFxuICBOb3RpZmljYXRpb25QYW5lbEZhY3RvcnksXG4gIERuZENvbnRleHRGYWN0b3J5LFxuICBFZmZlY3RNYW5hZ2VyRmFjdG9yeVxuXTtcblxuZnVuY3Rpb24gS2VwbGVyR2xGYWN0b3J5KFxuICBCb3R0b21XaWRnZXQ6IFJldHVyblR5cGU8dHlwZW9mIEJvdHRvbVdpZGdldEZhY3Rvcnk+LFxuICBHZW9Db2RlclBhbmVsOiBSZXR1cm5UeXBlPHR5cGVvZiBHZW9Db2RlclBhbmVsRmFjdG9yeT4sXG4gIE1hcENvbnRhaW5lcjogUmV0dXJuVHlwZTx0eXBlb2YgTWFwQ29udGFpbmVyRmFjdG9yeT4sXG4gIE1hcHNMYXlvdXQ6IFJldHVyblR5cGU8dHlwZW9mIE1hcHNMYXlvdXRGYWN0b3J5PixcbiAgTW9kYWxDb250YWluZXI6IFJldHVyblR5cGU8dHlwZW9mIE1vZGFsQ29udGFpbmVyRmFjdG9yeT4sXG4gIFNpZGVQYW5lbDogUmV0dXJuVHlwZTx0eXBlb2YgU2lkZVBhbmVsRmFjdG9yeT4sXG4gIFBsb3RDb250YWluZXI6IFJldHVyblR5cGU8dHlwZW9mIFBsb3RDb250YWluZXJGYWN0b3J5PixcbiAgTm90aWZpY2F0aW9uUGFuZWw6IFJldHVyblR5cGU8dHlwZW9mIE5vdGlmaWNhdGlvblBhbmVsRmFjdG9yeT4sXG4gIERuZENvbnRleHQ6IFJldHVyblR5cGU8dHlwZW9mIERuZENvbnRleHRGYWN0b3J5PlxuKTogUmVhY3QuQ29tcG9uZW50VHlwZTxLZXBsZXJHTEJhc2ljUHJvcHMgJiB7c2VsZWN0b3I6ICguLi5hcmdzOiBhbnlbXSkgPT4gS2VwbGVyR2xTdGF0ZX0+IHtcbiAgLyoqIEB0eXBlZGVmIHtpbXBvcnQoJy4va2VwbGVyLWdsJykuVW5jb25uZWN0ZWRLZXBsZXJHbFByb3BzfSBLZXBsZXJHbFByb3BzICovXG4gIC8qKiBAYXVnbWVudHMgUmVhY3QuQ29tcG9uZW50PEtlcGxlckdsUHJvcHM+ICovXG4gIGNsYXNzIEtlcGxlckdMIGV4dGVuZHMgQ29tcG9uZW50PFxuICAgIEtlcGxlckdMUHJvcHMgJiB7c2VsZWN0b3I6ICguLi5hcmdzOiBhbnlbXSkgPT4gS2VwbGVyR2xTdGF0ZX0sXG4gICAgS2VwbGVyR0xDb21wU3RhdGVcbiAgPiB7XG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTO1xuXG4gICAgc3RhdGU6IEtlcGxlckdMQ29tcFN0YXRlID0ge1xuICAgICAgZGltZW5zaW9uczogbnVsbFxuICAgIH07XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmIChnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmJhc2VNYXBMaWJyYXJ5Q29uZmlnPy5bJ21hcGJveCddPy5tYXBMaWJOYW1lID09PSAnTWFwYm94Jykge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU1hcGJveFRva2VuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9sb2FkTWFwU3R5bGUoKTtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbktlcGxlckdsSW5pdGlhbGl6ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbktlcGxlckdsSW5pdGlhbGl6ZWQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJvb3QuY3VycmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVEaW1lbnNpb25zKHRoaXMucm9vdC5jdXJyZW50LCB0aGlzLl9oYW5kbGVSZXNpemUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucm9vdC5jdXJyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgdW5vYnNlcnZlRGltZW5zaW9ucyh0aGlzLnJvb3QuY3VycmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2hhbmRsZVJlc2l6ZSA9IGRpbWVuc2lvbnMgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7ZGltZW5zaW9uc30pO1xuICAgIH07XG5cbiAgICBzdGF0aWMgY29udGV4dFR5cGUgPSBSb290Q29udGV4dDtcblxuICAgIHJvb3QgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG4gICAgYm90dG9tV2lkZ2V0UmVmID0gY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuXG4gICAgLyogc2VsZWN0b3JzICovXG4gICAgdGhlbWVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnRoZW1lO1xuICAgIGF2YWlsYWJsZVRoZW1lU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLnRoZW1lU2VsZWN0b3IsIHRoZW1lID0+XG4gICAgICB0eXBlb2YgdGhlbWUgPT09ICdvYmplY3QnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uYmFzaWNUaGVtZSxcbiAgICAgICAgICAgIC4uLnRoZW1lXG4gICAgICAgICAgfVxuICAgICAgICA6IHRoZW1lID09PSBUSEVNRS5saWdodFxuICAgICAgICA/IHRoZW1lTFRcbiAgICAgICAgOiB0aGVtZSA9PT0gVEhFTUUuYmFzZVxuICAgICAgICA/IHRoZW1lQlNcbiAgICAgICAgOiB0aGVtZVxuICAgICk7XG5cbiAgICBkYXRhc2V0c1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZGF0YXNldHM7XG4gICAgZmlsdGVyZWREYXRhc2V0c1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IodGhpcy5kYXRhc2V0c1NlbGVjdG9yLCBnZXRWaXNpYmxlRGF0YXNldHMpO1xuXG4gICAgYXZhaWxhYmxlUHJvdmlkZXJzID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+IHByb3BzLmNsb3VkUHJvdmlkZXJzLFxuICAgICAgcHJvdmlkZXJzID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkocHJvdmlkZXJzKSAmJiBwcm92aWRlcnMubGVuZ3RoXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGhhc1N0b3JhZ2U6IHByb3ZpZGVycy5zb21lKHAgPT4gcC5oYXNQcml2YXRlU3RvcmFnZSgpKSxcbiAgICAgICAgICAgICAgaGFzU2hhcmU6IHByb3ZpZGVycy5zb21lKHAgPT4gcC5oYXNTaGFyaW5nVXJsKCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fVxuICAgICk7XG5cbiAgICBsb2NhbGVNZXNzYWdlc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+IHByb3BzLmxvY2FsZU1lc3NhZ2VzLFxuICAgICAgY3VzdG9tTWVzc2FnZXMgPT4gKGN1c3RvbU1lc3NhZ2VzID8gbWVyZ2VNZXNzYWdlcyhtZXNzYWdlcywgY3VzdG9tTWVzc2FnZXMpIDogbWVzc2FnZXMpXG4gICAgKTtcblxuICAgIC8qIHByaXZhdGUgbWV0aG9kcyAqL1xuICAgIF92YWxpZGF0ZU1hcGJveFRva2VuKCkge1xuICAgICAgY29uc3Qge21hcGJveEFwaUFjY2Vzc1Rva2VufSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoIXZhbGlkYXRlVG9rZW4obWFwYm94QXBpQWNjZXNzVG9rZW4pKSB7XG4gICAgICAgIENvbnNvbGUud2FybihNSVNTSU5HX01BUEJPWF9UT0tFTik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2xvYWRNYXBTdHlsZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTdHlsZXMgPSBPYmplY3QudmFsdWVzKHRoaXMucHJvcHMubWFwU3R5bGUubWFwU3R5bGVzKTtcbiAgICAgIC8vIGFkZCBpZCB0byBjdXN0b20gbWFwIHN0eWxlcyBpZiBub3QgZ2l2ZW5cbiAgICAgIGNvbnN0IGN1c3RvbVN0eWxlcyA9ICh0aGlzLnByb3BzLm1hcFN0eWxlcyB8fCBbXSkubWFwKG1zID0+ICh7XG4gICAgICAgIC4uLm1zLFxuICAgICAgICBpZDogbXMuaWQgfHwgZ2VuZXJhdGVIYXNoSWQoKVxuICAgICAgfSkpO1xuXG4gICAgICBjb25zdCBhbGxTdHlsZXMgPSBbLi4uY3VzdG9tU3R5bGVzLCAuLi5kZWZhdWx0U3R5bGVzXS5yZWR1Y2UoKGFjY3UsIHN0eWxlKSA9PiB7XG4gICAgICAgIGFjY3Vbc3R5bGUuaWRdID0gc3R5bGU7XG4gICAgICAgIHJldHVybiBhY2N1O1xuICAgICAgfSwge30pO1xuXG4gICAgICB0aGlzLnByb3BzLm1hcFN0eWxlQWN0aW9ucy5sb2FkTWFwU3R5bGVzKGFsbFN0eWxlcyk7XG4gICAgfTtcblxuICAgIF9kZWxldGVNYXBMYWJlbHMgPSAoY29udGFpbmVySWQsIGxheWVySWQpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUxheWVyRm9yTWFwKGNvbnRhaW5lcklkLCBsYXllcklkKTtcbiAgICB9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGlkID0gJ21hcCcsXG4gICAgICAgIHdpZHRoID0gREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMud2lkdGgsXG4gICAgICAgIGhlaWdodCA9IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLmhlaWdodCxcbiAgICAgICAgdWlTdGF0ZSxcbiAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgIC8vIHJlYWRPbmx5IG92ZXJyaWRlXG4gICAgICAgIHJlYWRPbmx5LFxuXG4gICAgICAgIC8vIGZlYXR1cmVzXG4gICAgICAgIGZlYXR1cmVGbGFncyxcblxuICAgICAgICAvLyBjbG91ZCBwcm92aWRlcnNcbiAgICAgICAgY2xvdWRQcm92aWRlcnMgPSBbXVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLnN0YXRlLmRpbWVuc2lvbnMgfHwge3dpZHRoLCBoZWlnaHR9O1xuICAgICAgY29uc3Qge1xuICAgICAgICBzcGxpdE1hcHMsIC8vIHRoaXMgd2lsbCBzdG9yZSBzdXBwb3J0IGZvciBzcGxpdCBtYXAgdmlldyBpcyBuZWNlc3NhcnlcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdcbiAgICAgIH0gPSB2aXNTdGF0ZTtcblxuICAgICAgY29uc3QgaXNTcGxpdCA9IGlzU3BsaXRTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IHRoZW1lID0gdGhpcy5hdmFpbGFibGVUaGVtZVNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbG9jYWxlTWVzc2FnZXMgPSB0aGlzLmxvY2FsZU1lc3NhZ2VzU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBpc0V4cG9ydGluZ0ltYWdlID0gdWlTdGF0ZS5leHBvcnRJbWFnZS5leHBvcnRpbmc7XG4gICAgICBjb25zdCBhdmFpbGFibGVQcm92aWRlcnMgPSB0aGlzLmF2YWlsYWJsZVByb3ZpZGVycyh0aGlzLnByb3BzKTtcblxuICAgICAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IHRoaXMuZmlsdGVyZWREYXRhc2V0c1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3Qgc2lkZUZpZWxkcyA9IHNpZGVQYW5lbFNlbGVjdG9yKHRoaXMucHJvcHMsIGF2YWlsYWJsZVByb3ZpZGVycywgZmlsdGVyZWREYXRhc2V0cyk7XG4gICAgICBjb25zdCBwbG90Q29udGFpbmVyRmllbGRzID0gcGxvdENvbnRhaW5lclNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgYm90dG9tV2lkZ2V0RmllbGRzID0gYm90dG9tV2lkZ2V0U2VsZWN0b3IodGhpcy5wcm9wcywgdGhlbWUpO1xuICAgICAgY29uc3QgbW9kYWxDb250YWluZXJGaWVsZHMgPSBtb2RhbENvbnRhaW5lclNlbGVjdG9yKHRoaXMucHJvcHMsIHRoaXMucm9vdC5jdXJyZW50KTtcbiAgICAgIGNvbnN0IGdlb0NvZGVyUGFuZWxGaWVsZHMgPSBnZW9Db2RlclBhbmVsU2VsZWN0b3IodGhpcy5wcm9wcywgZGltZW5zaW9ucyk7XG4gICAgICBjb25zdCBub3RpZmljYXRpb25QYW5lbEZpZWxkcyA9IG5vdGlmaWNhdGlvblBhbmVsU2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIGNvbnN0IG1hcENvbnRhaW5lcnMgPSAhaXNTcGxpdFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIDxNYXBDb250YWluZXJcbiAgICAgICAgICAgICAgcHJpbWFyeT17dHJ1ZX1cbiAgICAgICAgICAgICAga2V5PXswfVxuICAgICAgICAgICAgICBpbmRleD17MH1cbiAgICAgICAgICAgICAgey4uLm1hcEZpZWxkc1NlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgICBjb250YWluZXJJZD17MH1cbiAgICAgICAgICAgICAgZGVsZXRlTWFwTGFiZWxzPXt0aGlzLl9kZWxldGVNYXBMYWJlbHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIF1cbiAgICAgICAgOiBzcGxpdE1hcHMubWFwKChzZXR0aW5ncywgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxNYXBDb250YWluZXJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICBwcmltYXJ5PXtpbmRleCA9PT0gMX1cbiAgICAgICAgICAgICAgey4uLm1hcEZpZWxkc1NlbGVjdG9yKHRoaXMucHJvcHMsIGluZGV4KX1cbiAgICAgICAgICAgICAgY29udGFpbmVySWQ9e2luZGV4fVxuICAgICAgICAgICAgICBkZWxldGVNYXBMYWJlbHM9e3RoaXMuX2RlbGV0ZU1hcExhYmVsc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxSb290Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17dGhpcy5yb290fT5cbiAgICAgICAgICA8RmVhdHVyZUZsYWdzQ29udGV4dFByb3ZpZGVyIGZlYXR1cmVGbGFncz17ZmVhdHVyZUZsYWdzfT5cbiAgICAgICAgICAgIDxJbnRsUHJvdmlkZXIgbG9jYWxlPXt1aVN0YXRlLmxvY2FsZX0gbWVzc2FnZXM9e2xvY2FsZU1lc3NhZ2VzW3VpU3RhdGUubG9jYWxlXX0+XG4gICAgICAgICAgICAgIDxTdHlsZVNoZWV0TWFuYWdlciBzaG91bGRGb3J3YXJkUHJvcD17c2hvdWxkRm9yd2FyZFByb3B9PlxuICAgICAgICAgICAgICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZX0+XG4gICAgICAgICAgICAgICAgICA8Q2xvdWRMaXN0UHJvdmlkZXIgcHJvdmlkZXJzPXtjbG91ZFByb3ZpZGVyc30+XG4gICAgICAgICAgICAgICAgICAgIDxHbG9iYWxTdHlsZVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImtlcGxlci1nbFwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2BrZXBsZXItZ2xfXyR7aWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBgJHt3aWR0aH1weGAsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGAke2hlaWdodH1weGBcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy5yb290fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPE5vdGlmaWNhdGlvblBhbmVsIHsuLi5ub3RpZmljYXRpb25QYW5lbEZpZWxkc30gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8RG5kQ29udGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHshdWlTdGF0ZS5yZWFkT25seSAmJiAhcmVhZE9ubHkgJiYgPFNpZGVQYW5lbCB7Li4uc2lkZUZpZWxkc30gLz59XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFwc0xheW91dCBjbGFzc05hbWU9XCJtYXBzXCIgbWFwU3RhdGU9e3RoaXMucHJvcHMubWFwU3RhdGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7bWFwQ29udGFpbmVyc31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTWFwc0xheW91dD5cbiAgICAgICAgICAgICAgICAgICAgICA8L0RuZENvbnRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAge2lzRXhwb3J0aW5nSW1hZ2UgJiYgPFBsb3RDb250YWluZXIgey4uLnBsb3RDb250YWluZXJGaWVsZHN9IC8+fVxuICAgICAgICAgICAgICAgICAgICAgIHsvKiAxIGdlb2NvZGVyOiBzaW5nbGUgbW9kZSBPUiBzcGxpdCBtb2RlIGFuZCBzeW5jZWQgdmlld3BvcnRzICovfVxuICAgICAgICAgICAgICAgICAgICAgIHshaXNWaWV3cG9ydERpc2pvaW50ZWQodGhpcy5wcm9wcykgJiYgaW50ZXJhY3Rpb25Db25maWcuZ2VvY29kZXIuZW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8R2VvQ29kZXJQYW5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4uZ2VvQ29kZXJQYW5lbEZpZWxkc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9ezB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3luY2VkVmlld3BvcnRzPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICB7LyogMiBnZW9jb2RlcnM6IHNwbGl0IG1vZGUgYW5kIHVuc3luY2VkIHZpZXdwb3J0cyAqL31cbiAgICAgICAgICAgICAgICAgICAgICB7aXNWaWV3cG9ydERpc2pvaW50ZWQodGhpcy5wcm9wcykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcENvbnRhaW5lcnMubWFwKChfbWFwQ29udGFpbmVyLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8R2VvQ29kZXJQYW5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLmdlb0NvZGVyUGFuZWxGaWVsZHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3luY2VkVmlld3BvcnRzPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgPEJvdHRvbVdpZGdldE91dGVyIGFic29sdXRlPXshaGFzUG9ydGFibGVXaWR0aChicmVha1BvaW50VmFsdWVzKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm90dG9tV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RSZWY9e3RoaXMuYm90dG9tV2lkZ2V0UmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4uYm90dG9tV2lkZ2V0RmllbGRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJXPXtkaW1lbnNpb25zLndpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvQm90dG9tV2lkZ2V0T3V0ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPE1vZGFsQ29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4ubW9kYWxDb250YWluZXJGaWVsZHN9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJXPXtkaW1lbnNpb25zLndpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVySD17ZGltZW5zaW9ucy5oZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9HbG9iYWxTdHlsZT5cbiAgICAgICAgICAgICAgICAgIDwvQ2xvdWRMaXN0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9UaGVtZVByb3ZpZGVyPlxuICAgICAgICAgICAgICA8L1N0eWxlU2hlZXRNYW5hZ2VyPlxuICAgICAgICAgICAgPC9JbnRsUHJvdmlkZXI+XG4gICAgICAgICAgPC9GZWF0dXJlRmxhZ3NDb250ZXh0UHJvdmlkZXI+XG4gICAgICAgIDwvUm9vdENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBrZXBsZXJHbENvbm5lY3QoXG4gICAgbWFwU3RhdGVUb1Byb3BzLFxuICAgIG1ha2VNYXBEaXNwYXRjaFRvUHJvcHNcbiAgKSh3aXRoVGhlbWUoS2VwbGVyR0wpKSBhcyBSZXR1cm5UeXBlPHR5cGVvZiBLZXBsZXJHbEZhY3Rvcnk+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwU3RhdGVUb1Byb3BzKHN0YXRlOiBLZXBsZXJHbFN0YXRlLCBwcm9wczogS2VwbGVyR0xQcm9wcykge1xuICByZXR1cm4ge1xuICAgIC4uLnByb3BzLFxuICAgIHZpc1N0YXRlOiBzdGF0ZS52aXNTdGF0ZSxcbiAgICBtYXBTdHlsZTogc3RhdGUubWFwU3R5bGUsXG4gICAgbWFwU3RhdGU6IHN0YXRlLm1hcFN0YXRlLFxuICAgIHVpU3RhdGU6IHN0YXRlLnVpU3RhdGUsXG4gICAgcHJvdmlkZXJTdGF0ZTogc3RhdGUucHJvdmlkZXJTdGF0ZVxuICB9O1xufVxuXG5jb25zdCBkZWZhdWx0VXNlckFjdGlvbnMgPSB7fTtcblxuY29uc3QgZ2V0RGlzcGF0Y2ggPSBkaXNwYXRjaCA9PiBkaXNwYXRjaDtcbmNvbnN0IGdldFVzZXJBY3Rpb25zID0gKGRpc3BhdGNoLCBwcm9wcykgPT4gcHJvcHMuYWN0aW9ucyB8fCBkZWZhdWx0VXNlckFjdGlvbnM7XG5cbi8qKiBAdHlwZSB7KCkgPT4gaW1wb3J0KCdyZXNlbGVjdCcpLk91dHB1dFBhcmFtZXRyaWNTZWxlY3RvcjxhbnksIGFueSwgYW55LCBhbnk+fSAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VHZXRBY3Rpb25DcmVhdG9ycygpIHtcbiAgcmV0dXJuIGNyZWF0ZVNlbGVjdG9yKFtnZXREaXNwYXRjaCwgZ2V0VXNlckFjdGlvbnNdLCAoZGlzcGF0Y2gsIHVzZXJBY3Rpb25zKSA9PiB7XG4gICAgY29uc3QgW3Zpc1N0YXRlQWN0aW9ucywgbWFwU3RhdGVBY3Rpb25zLCBtYXBTdHlsZUFjdGlvbnMsIHVpU3RhdGVBY3Rpb25zLCBwcm92aWRlckFjdGlvbnNdID0gW1xuICAgICAgVmlzU3RhdGVBY3Rpb25zLFxuICAgICAgTWFwU3RhdGVBY3Rpb25zLFxuICAgICAgTWFwU3R5bGVBY3Rpb25zLFxuICAgICAgVUlTdGF0ZUFjdGlvbnMsXG4gICAgICBQcm92aWRlckFjdGlvbnNcbiAgICBdLm1hcChhY3Rpb25zID0+IGJpbmRBY3Rpb25DcmVhdG9ycyhtZXJnZUFjdGlvbnMoYWN0aW9ucywgdXNlckFjdGlvbnMpLCBkaXNwYXRjaCkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgIG1hcFN0YXRlQWN0aW9ucyxcbiAgICAgIG1hcFN0eWxlQWN0aW9ucyxcbiAgICAgIHVpU3RhdGVBY3Rpb25zLFxuICAgICAgcHJvdmlkZXJBY3Rpb25zLFxuICAgICAgZGlzcGF0Y2hcbiAgICB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFrZU1hcERpc3BhdGNoVG9Qcm9wcygpIHtcbiAgY29uc3QgZ2V0QWN0aW9uQ3JlYXRvcnMgPSBtYWtlR2V0QWN0aW9uQ3JlYXRvcnMoKTtcbiAgY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gKGRpc3BhdGNoLCBvd25Qcm9wcykgPT4ge1xuICAgIGNvbnN0IGdyb3VwZWRBY3Rpb25DcmVhdG9ycyA9IGdldEFjdGlvbkNyZWF0b3JzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZ3JvdXBlZEFjdGlvbkNyZWF0b3JzLFxuICAgICAgZGlzcGF0Y2hcbiAgICB9O1xuICB9O1xuXG4gIHJldHVybiBtYXBEaXNwYXRjaFRvUHJvcHM7XG59XG5cbi8qKlxuICogT3ZlcnJpZGUgZGVmYXVsdCBrZXBsZXIuZ2wgYWN0aW9ucyB3aXRoIHVzZXIgZGVmaW5lZCBhY3Rpb25zIHVzaW5nIHRoZSBzYW1lIGtleVxuICovXG5mdW5jdGlvbiBtZXJnZUFjdGlvbnMoYWN0aW9ucywgdXNlckFjdGlvbnMpIHtcbiAgY29uc3Qgb3ZlcnJpZGVzID0ge307XG4gIGZvciAoY29uc3Qga2V5IGluIHVzZXJBY3Rpb25zKSB7XG4gICAgaWYgKFxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHVzZXJBY3Rpb25zLCBrZXkpICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYWN0aW9ucywga2V5KVxuICAgICkge1xuICAgICAgb3ZlcnJpZGVzW2tleV0gPSB1c2VyQWN0aW9uc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7Li4uYWN0aW9ucywgLi4ub3ZlcnJpZGVzfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgS2VwbGVyR2xGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssaUJBQUEsR0FBQU4sdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFNBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLGdCQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxVQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxhQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxRQUFBLEdBQUFWLE9BQUE7QUFTQSxJQUFBVyxRQUFBLEdBQUFYLE9BQUE7QUFRQSxJQUFBWSxZQUFBLEdBQUFaLE9BQUE7QUFVQSxJQUFBYSxVQUFBLEdBQUFiLE9BQUE7QUFVQSxJQUFBYyxVQUFBLEdBQUFaLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBZSxjQUFBLEdBQUFiLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBZ0IsV0FBQSxHQUFBZCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQWlCLGFBQUEsR0FBQWYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFrQixlQUFBLEdBQUFoQixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQW1CLGNBQUEsR0FBQWpCLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBb0Isa0JBQUEsR0FBQWxCLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBcUIsY0FBQSxHQUFBbkIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFzQixjQUFBLEdBQUFwQixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQXVCLFdBQUEsR0FBQXJCLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBd0IscUJBQUEsR0FBQXhCLE9BQUE7QUFFQSxJQUFBeUIsTUFBQSxHQUFBekIsT0FBQTtBQVVBLElBQUEwQixPQUFBLEdBQUExQixPQUFBO0FBQTBGLElBQUEyQixlQUFBLEVBdkUxRjtBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUE5Qix3QkFBQThCLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssUUFBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFdBQUFDLENBQUEsSUFBQWQsQ0FBQSxvQkFBQWMsQ0FBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsQ0FBQSxTQUFBRyxDQUFBLEdBQUFQLENBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBYixDQUFBLEVBQUFjLENBQUEsVUFBQUcsQ0FBQSxLQUFBQSxDQUFBLENBQUFWLEdBQUEsSUFBQVUsQ0FBQSxDQUFBQyxHQUFBLElBQUFQLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSixDQUFBLEVBQUFNLENBQUEsRUFBQUcsQ0FBQSxJQUFBVCxDQUFBLENBQUFNLENBQUEsSUFBQWQsQ0FBQSxDQUFBYyxDQUFBLFlBQUFOLENBQUEsY0FBQVIsQ0FBQSxFQUFBRyxDQUFBLElBQUFBLENBQUEsQ0FBQWUsR0FBQSxDQUFBbEIsQ0FBQSxFQUFBUSxDQUFBLEdBQUFBLENBQUE7QUFBQSxTQUFBVyxXQUFBaEIsQ0FBQSxFQUFBaUIsQ0FBQSxFQUFBcEIsQ0FBQSxXQUFBb0IsQ0FBQSxPQUFBQyxnQkFBQSxhQUFBRCxDQUFBLE9BQUFFLDJCQUFBLGFBQUFuQixDQUFBLEVBQUFvQix5QkFBQSxLQUFBQyxPQUFBLENBQUFDLFNBQUEsQ0FBQUwsQ0FBQSxFQUFBcEIsQ0FBQSxZQUFBcUIsZ0JBQUEsYUFBQWxCLENBQUEsRUFBQXVCLFdBQUEsSUFBQU4sQ0FBQSxDQUFBTyxLQUFBLENBQUF4QixDQUFBLEVBQUFILENBQUE7QUFBQSxTQUFBdUIsMEJBQUEsY0FBQXBCLENBQUEsSUFBQXlCLE9BQUEsQ0FBQUMsU0FBQSxDQUFBQyxPQUFBLENBQUFkLElBQUEsQ0FBQVEsT0FBQSxDQUFBQyxTQUFBLENBQUFHLE9BQUEsaUNBQUF6QixDQUFBLGFBQUFvQix5QkFBQSxZQUFBQSwwQkFBQSxhQUFBcEIsQ0FBQTtBQUFBLFNBQUE0QixRQUFBL0IsQ0FBQSxFQUFBRSxDQUFBLFFBQUFDLENBQUEsR0FBQVEsTUFBQSxDQUFBcUIsSUFBQSxDQUFBaEMsQ0FBQSxPQUFBVyxNQUFBLENBQUFzQixxQkFBQSxRQUFBYixDQUFBLEdBQUFULE1BQUEsQ0FBQXNCLHFCQUFBLENBQUFqQyxDQUFBLEdBQUFFLENBQUEsS0FBQWtCLENBQUEsR0FBQUEsQ0FBQSxDQUFBYyxNQUFBLFdBQUFoQyxDQUFBLFdBQUFTLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBRSxDQUFBLEVBQUFpQyxVQUFBLE9BQUFoQyxDQUFBLENBQUFpQyxJQUFBLENBQUFULEtBQUEsQ0FBQXhCLENBQUEsRUFBQWlCLENBQUEsWUFBQWpCLENBQUE7QUFBQSxTQUFBa0MsY0FBQXJDLENBQUEsYUFBQUUsQ0FBQSxNQUFBQSxDQUFBLEdBQUFvQyxTQUFBLENBQUFDLE1BQUEsRUFBQXJDLENBQUEsVUFBQUMsQ0FBQSxXQUFBbUMsU0FBQSxDQUFBcEMsQ0FBQSxJQUFBb0MsU0FBQSxDQUFBcEMsQ0FBQSxRQUFBQSxDQUFBLE9BQUE2QixPQUFBLENBQUFwQixNQUFBLENBQUFSLENBQUEsT0FBQXFDLE9BQUEsV0FBQXRDLENBQUEsUUFBQXVDLGdCQUFBLGFBQUF6QyxDQUFBLEVBQUFFLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFTLE1BQUEsQ0FBQStCLHlCQUFBLEdBQUEvQixNQUFBLENBQUFnQyxnQkFBQSxDQUFBM0MsQ0FBQSxFQUFBVyxNQUFBLENBQUErQix5QkFBQSxDQUFBdkMsQ0FBQSxLQUFBNEIsT0FBQSxDQUFBcEIsTUFBQSxDQUFBUixDQUFBLEdBQUFxQyxPQUFBLFdBQUF0QyxDQUFBLElBQUFTLE1BQUEsQ0FBQUMsY0FBQSxDQUFBWixDQUFBLEVBQUFFLENBQUEsRUFBQVMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBVixDQUFBLEVBQUFELENBQUEsaUJBQUFGLENBQUE7QUEwRUE7QUFDQSxTQUFTNEMsaUJBQWlCQSxDQUFDQyxRQUFRLEVBQUVDLE1BQU0sRUFBRTtFQUMzQyxJQUFJLE9BQU9BLE1BQU0sS0FBSyxRQUFRLEVBQUU7SUFDOUI7SUFDQSxPQUFPLElBQUFDLHVCQUFXLEVBQUNGLFFBQVEsQ0FBQztFQUM5QjtFQUNBO0VBQ0EsT0FBTyxJQUFJO0FBQ2I7O0FBRUE7QUFDQTtBQUNBLElBQU1HLFdBQVcsR0FBR0MsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBcEQsZUFBQSxLQUFBQSxlQUFBLE9BQUFxRCx1QkFBQSw2Z0JBQ2IsVUFBQUMsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDQyxVQUFVO0FBQUEsR0FDL0IsVUFBQUYsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDRSxVQUFVO0FBQUEsR0FDakMsVUFBQUgsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDRyxRQUFRO0FBQUEsR0FDM0IsVUFBQUosS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDSSxVQUFVO0FBQUEsR0FxQm5DLFVBQUFMLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ0ssVUFBVTtBQUFBLEVBVTNDO0FBTUQsSUFBTUMsaUJBQWlCLEdBQUdWLDRCQUFNLENBQUNDLEdBQUcsQ0FDbEMsVUFBQVUsSUFBQTtFQUFBLElBQUVDLFFBQVEsR0FBQUQsSUFBQSxDQUFSQyxRQUFRO0VBQUEsY0FBQUMsTUFBQSxDQUNSRCxRQUFRLEdBQUcsMENBQTBDLEdBQUcsRUFBRTtBQUFBLENBTTlELENBQUM7QUFFTSxJQUFNRSxvQkFBb0IsR0FBQUMsT0FBQSxDQUFBRCxvQkFBQSxHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUdYLEtBQUssRUFBSTtFQUMzQyxPQUNFQSxLQUFLLENBQUNhLFFBQVEsQ0FBQ0MsT0FBTyxJQUN0QixDQUFDZCxLQUFLLENBQUNhLFFBQVEsQ0FBQ0UsZ0JBQWdCLElBQ2hDZixLQUFLLENBQUNhLFFBQVEsQ0FBQ0csaUJBQWlCLENBQUM3QixNQUFNLEdBQUcsQ0FBQztBQUUvQyxDQUFDO0FBRU0sSUFBTThCLGdCQUFnQixHQUFBTCxPQUFBLENBQUFLLGdCQUFBLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBSWpCLEtBQVUsRUFBRWtCLEtBQWEsRUFBVTtFQUNsRSxJQUFJLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRixLQUFLLENBQUMsRUFBRTtJQUMzQjtJQUNBO0lBQ0E7SUFDQSxPQUFPbEIsS0FBSyxDQUFDYSxRQUFRO0VBQ3ZCO0VBRUEsT0FBT0Ysb0JBQW9CLENBQUNYLEtBQUssQ0FBQyxHQUM5QjtFQUFBZixhQUFBLENBQUFBLGFBQUEsS0FDSWUsS0FBSyxDQUFDYSxRQUFRLEdBQUtiLEtBQUssQ0FBQ2EsUUFBUSxDQUFDRyxpQkFBaUIsQ0FBQ0UsS0FBSyxDQUFDO0VBQzlEO0VBQ0FsQixLQUFLLENBQUNhLFFBQVE7QUFDcEIsQ0FBQztBQUVNLElBQU1RLGlCQUFpQixHQUFBVCxPQUFBLENBQUFTLGlCQUFBLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBSXJCLEtBQW9CO0VBQUEsSUFBRWtCLEtBQUssR0FBQWhDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFvQyxTQUFBLEdBQUFwQyxTQUFBLE1BQUcsQ0FBQztFQUFBLE9BQU07SUFDckVxQyxZQUFZLEVBQUV2QixLQUFLLENBQUN1QixZQUFZO0lBQ2hDQyxvQkFBb0IsRUFBRXhCLEtBQUssQ0FBQ3dCLG9CQUFvQjtJQUNoREMsWUFBWSxFQUFFekIsS0FBSyxDQUFDeUIsWUFBWSxHQUFHekIsS0FBSyxDQUFDeUIsWUFBWSxHQUFHQyx1QkFBdUIsQ0FBQ0QsWUFBWTtJQUM1RlosUUFBUSxFQUFFSSxnQkFBZ0IsQ0FBQ2pCLEtBQUssRUFBRWtCLEtBQUssQ0FBQztJQUN4Q1MsbUJBQW1CLEVBQUVDLG1CQUFtQixDQUFDNUIsS0FBSyxDQUFDLENBQUM2QixPQUFPO0lBQ3ZEQyxRQUFRLEVBQUU5QixLQUFLLENBQUM4QixRQUFRO0lBQ3hCQyxpQkFBaUIsRUFBRS9CLEtBQUssQ0FBQytCLGlCQUFpQjtJQUMxQ0MsaUJBQWlCLEVBQUVoQyxLQUFLLENBQUNnQyxpQkFBaUI7SUFDMUNDLFdBQVcsRUFBRWpDLEtBQUssQ0FBQ2lDLFdBQVc7SUFDOUJDLFdBQVcsRUFBRWxDLEtBQUssQ0FBQ2tDLFdBQVc7SUFDOUJDLGNBQWMsRUFBRW5DLEtBQUssQ0FBQ21DLGNBQWM7SUFDcENDLGVBQWUsRUFBRXBDLEtBQUssQ0FBQ29DLGVBQWU7SUFDdENDLGVBQWUsRUFBRXJDLEtBQUssQ0FBQ3FDLGVBQWU7SUFFdEM7SUFDQUMsUUFBUSxFQUFFdEMsS0FBSyxDQUFDc0MsUUFBUTtJQUV4QjtJQUNBQyxlQUFlLEVBQUV2QyxLQUFLLENBQUN3QyxPQUFPLENBQUNELGVBQWU7SUFDOUNFLFdBQVcsRUFBRXpDLEtBQUssQ0FBQ3dDLE9BQU8sQ0FBQ0MsV0FBVztJQUN0Q0MsUUFBUSxFQUFFMUMsS0FBSyxDQUFDd0MsT0FBTyxDQUFDRSxRQUFRO0lBQ2hDQyxNQUFNLEVBQUUzQyxLQUFLLENBQUN3QyxPQUFPLENBQUNHLE1BQU07SUFDNUJDLHlCQUF5QixFQUFFekIsTUFBTSxDQUFDbkIsS0FBSyxDQUFDd0MsT0FBTyxDQUFDSyxxQkFBcUIsQ0FBQyxHQUFHLENBQUM7SUFDMUVDLGNBQWMsRUFBRTlDLEtBQUssQ0FBQzhDLGNBQWMsR0FBRzlDLEtBQUssQ0FBQzhDLGNBQWMsR0FBR3BCLHVCQUF1QixDQUFDcUIsS0FBSztJQUUzRjtJQUNBQyxvQkFBb0IsRUFBRWhELEtBQUssQ0FBQ2dELG9CQUFvQjtJQUNoREMsdUJBQXVCLEVBQUVqRCxLQUFLLENBQUNpRCx1QkFBdUI7SUFFdEQ7SUFDQUMsZ0JBQWdCLEVBQUVsRCxLQUFLLENBQUNrRDtFQUMxQixDQUFDO0FBQUEsQ0FBQztBQUVLLFNBQVNDLGtCQUFrQkEsQ0FBQ0MsUUFBUSxFQUFFO0VBQzNDO0VBQ0EsT0FBTyxJQUFBQyw4QkFBdUIsRUFBQ0QsUUFBUSxFQUFFLFVBQUFFLEdBQUc7SUFBQSxPQUFJQSxHQUFHLEtBQUtDLGdDQUFxQjtFQUFBLEVBQUM7QUFDaEY7QUFFTyxJQUFNQyxpQkFBaUIsR0FBQTVDLE9BQUEsQ0FBQTRDLGlCQUFBLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBSXhELEtBQW9CLEVBQUV5RCxrQkFBa0IsRUFBRUMsZ0JBQWdCO0VBQUEsT0FBTTtJQUNoR0MsT0FBTyxFQUFFM0QsS0FBSyxDQUFDMkQsT0FBTyxHQUFHM0QsS0FBSyxDQUFDMkQsT0FBTyxHQUFHakMsdUJBQXVCLENBQUNpQyxPQUFPO0lBQ3hFQyxPQUFPLEVBQUU1RCxLQUFLLENBQUM0RCxPQUFPLEdBQUc1RCxLQUFLLENBQUM0RCxPQUFPLEdBQUdsQyx1QkFBdUIsQ0FBQ2tDLE9BQU87SUFDeEVDLFVBQVUsRUFBRTdELEtBQUssQ0FBQzZELFVBQVU7SUFDNUIvQixRQUFRLEVBQUU5QixLQUFLLENBQUM4QixRQUFRO0lBQ3hCZ0MsU0FBUyxFQUFFOUQsS0FBSyxDQUFDOEQsU0FBUztJQUMxQnRCLE9BQU8sRUFBRXhDLEtBQUssQ0FBQ3dDLE9BQU87SUFDdEJ1QixlQUFlLEVBQUUvRCxLQUFLLENBQUMrRCxlQUFlO0lBQ3RDM0IsZUFBZSxFQUFFcEMsS0FBSyxDQUFDb0MsZUFBZTtJQUN0Q0QsY0FBYyxFQUFFbkMsS0FBSyxDQUFDbUMsY0FBYztJQUNwQ0UsZUFBZSxFQUFFckMsS0FBSyxDQUFDcUMsZUFBZTtJQUV0Q2UsUUFBUSxFQUFFTSxnQkFBZ0I7SUFDMUJNLE9BQU8sRUFBRWhFLEtBQUssQ0FBQ3NDLFFBQVEsQ0FBQzBCLE9BQU87SUFDL0JDLE1BQU0sRUFBRWpFLEtBQUssQ0FBQ3NDLFFBQVEsQ0FBQzJCLE1BQU07SUFDN0JDLFVBQVUsRUFBRWxFLEtBQUssQ0FBQ3NDLFFBQVEsQ0FBQzRCLFVBQVU7SUFDckNDLFlBQVksRUFBRW5FLEtBQUssQ0FBQ3NDLFFBQVEsQ0FBQzZCLFlBQVk7SUFDekNDLGlCQUFpQixFQUFFcEUsS0FBSyxDQUFDc0MsUUFBUSxDQUFDOEIsaUJBQWlCO0lBQ25EQyxPQUFPLEVBQUVyRSxLQUFLLENBQUNzQyxRQUFRLENBQUMrQixPQUFPO0lBQy9CQyxhQUFhLEVBQUV0RSxLQUFLLENBQUNzQyxRQUFRLENBQUNnQyxhQUFhO0lBQzNDQyxlQUFlLEVBQUV2RSxLQUFLLENBQUNzQyxRQUFRLENBQUNpQyxlQUFlO0lBRS9DeEIsS0FBSyxFQUFFL0MsS0FBSyxDQUFDOEMsY0FBYyxHQUFHOUMsS0FBSyxDQUFDOEMsY0FBYyxHQUFHcEIsdUJBQXVCLENBQUNxQixLQUFLO0lBQ2xGVSxrQkFBa0IsRUFBbEJBLGtCQUFrQjtJQUNsQmUsUUFBUSxFQUFFeEUsS0FBSyxDQUFDeUUsYUFBYSxDQUFDRDtFQUNoQyxDQUFDO0FBQUEsQ0FBQztBQUVLLElBQU1FLHFCQUFxQixHQUFBOUQsT0FBQSxDQUFBOEQscUJBQUEsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFJMUUsS0FBb0I7RUFBQSxPQUFNO0lBQzlEK0MsS0FBSyxFQUFFL0MsS0FBSyxDQUFDK0MsS0FBSztJQUNsQjRCLE1BQU0sRUFBRTNFLEtBQUssQ0FBQzJFLE1BQU07SUFDcEJDLGtCQUFrQixFQUFFNUUsS0FBSyxDQUFDd0MsT0FBTyxDQUFDcUMsV0FBVztJQUM3Q0MsU0FBUyxFQUFFekQsaUJBQWlCLENBQUNyQixLQUFLLENBQUM7SUFDbkMrRSxlQUFlLEVBQUUvRSxLQUFLLENBQUNtQyxjQUFjLENBQUM0QyxlQUFlO0lBQ3JEQyxxQkFBcUIsRUFBRWhGLEtBQUssQ0FBQ21DLGNBQWMsQ0FBQzZDLHFCQUFxQjtJQUNqRUMscUJBQXFCLEVBQUVqRixLQUFLLENBQUNtQyxjQUFjLENBQUM4QyxxQkFBcUI7SUFDakVDLG1CQUFtQixFQUFFbEYsS0FBSyxDQUFDbUMsY0FBYyxDQUFDK0MsbUJBQW1CO0lBQzdEQyxTQUFTLEVBQUVuRixLQUFLLENBQUNzQyxRQUFRLENBQUM2QztFQUM1QixDQUFDO0FBQUEsQ0FBQztBQUVLLElBQU1DLGVBQWUsR0FBQXhFLE9BQUEsQ0FBQXdFLGVBQUEsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBSXBGLEtBQW9CO0VBQUEsT0FDbERBLEtBQUssQ0FBQ3NDLFFBQVEsQ0FBQzZDLFNBQVMsSUFBSW5GLEtBQUssQ0FBQ3NDLFFBQVEsQ0FBQzZDLFNBQVMsQ0FBQ2hHLE1BQU0sR0FBRyxDQUFDO0FBQUE7QUFFMUQsSUFBTWtHLG9CQUFvQixHQUFBekUsT0FBQSxDQUFBeUUsb0JBQUEsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFJckYsS0FBb0IsRUFBRUMsS0FBSztFQUFBLE9BQU07SUFDcEUrRCxPQUFPLEVBQUVoRSxLQUFLLENBQUNzQyxRQUFRLENBQUMwQixPQUFPO0lBQy9CWixRQUFRLEVBQUVwRCxLQUFLLENBQUNzQyxRQUFRLENBQUNjLFFBQVE7SUFDakNaLE9BQU8sRUFBRXhDLEtBQUssQ0FBQ3dDLE9BQU87SUFDdEJ5QixNQUFNLEVBQUVqRSxLQUFLLENBQUNzQyxRQUFRLENBQUMyQixNQUFNO0lBQzdCcUIsZUFBZSxFQUFFdEYsS0FBSyxDQUFDc0MsUUFBUSxDQUFDZ0QsZUFBZTtJQUMvQ2xELGVBQWUsRUFBRXBDLEtBQUssQ0FBQ29DLGVBQWU7SUFDdENtRCxXQUFXLEVBQUV2RixLQUFLLENBQUNtQyxjQUFjLENBQUNvRCxXQUFXO0lBQzdDekMsY0FBYyxFQUFFOUMsS0FBSyxDQUFDd0MsT0FBTyxDQUFDRSxRQUFRLEdBQUcsQ0FBQyxHQUFHMUMsS0FBSyxDQUFDOEMsY0FBYyxHQUFHN0MsS0FBSyxDQUFDdUYsU0FBUyxDQUFDQyxNQUFNLENBQUNDO0VBQzdGLENBQUM7QUFBQSxDQUFDO0FBRUssSUFBTUMsc0JBQXNCLEdBQUEvRSxPQUFBLENBQUErRSxzQkFBQSxHQUFHLFNBQXpCQSxzQkFBc0JBLENBQUkzRixLQUFvQixFQUFFNEYsUUFBUTtFQUFBLE9BQU07SUFDekVqQyxPQUFPLEVBQUUzRCxLQUFLLENBQUMyRCxPQUFPLEdBQUczRCxLQUFLLENBQUMyRCxPQUFPLEdBQUdqQyx1QkFBdUIsQ0FBQ2lDLE9BQU87SUFDeEU3QixRQUFRLEVBQUU5QixLQUFLLENBQUM4QixRQUFRO0lBQ3hCUSxRQUFRLEVBQUV0QyxLQUFLLENBQUNzQyxRQUFRO0lBQ3hCekIsUUFBUSxFQUFFYixLQUFLLENBQUNhLFFBQVE7SUFDeEIyQixPQUFPLEVBQUV4QyxLQUFLLENBQUN3QyxPQUFPO0lBQ3RCaUMsYUFBYSxFQUFFekUsS0FBSyxDQUFDeUUsYUFBYTtJQUVsQ2pELG9CQUFvQixFQUFFeEIsS0FBSyxDQUFDd0Isb0JBQW9CO0lBQ2hEQyxZQUFZLEVBQUV6QixLQUFLLENBQUN5QixZQUFZO0lBQ2hDVyxlQUFlLEVBQUVwQyxLQUFLLENBQUNvQyxlQUFlO0lBQ3RDRCxjQUFjLEVBQUVuQyxLQUFLLENBQUNtQyxjQUFjO0lBQ3BDNEIsZUFBZSxFQUFFL0QsS0FBSyxDQUFDK0QsZUFBZTtJQUN0QzhCLGVBQWUsRUFBRTdGLEtBQUssQ0FBQzZGLGVBQWU7SUFFdENELFFBQVEsRUFBUkEsUUFBUTtJQUNSO0lBQ0FFLGNBQWMsRUFBRTlGLEtBQUssQ0FBQzhGLGNBQWMsR0FDaEM5RixLQUFLLENBQUM4RixjQUFjLEdBQ3BCcEUsdUJBQXVCLENBQUNvRSxjQUFjO0lBQzFDQyxzQkFBc0IsRUFBRS9GLEtBQUssQ0FBQytGLHNCQUFzQjtJQUNwREMscUJBQXFCLEVBQUVoRyxLQUFLLENBQUNnRyxxQkFBcUI7SUFDbERDLG1CQUFtQixFQUFFakcsS0FBSyxDQUFDaUcsbUJBQW1CO0lBQzlDQyxvQkFBb0IsRUFBRWxHLEtBQUssQ0FBQ2tHO0VBQzlCLENBQUM7QUFBQSxDQUFDO0FBRUssSUFBTUMscUJBQXFCLEdBQUF2RixPQUFBLENBQUF1RixxQkFBQSxHQUFHLFNBQXhCQSxxQkFBcUJBLENBQ2hDbkcsS0FBb0IsRUFDcEJvRyxVQUEyQztFQUFBLE9BQ3ZDO0lBQ0pDLGlCQUFpQixFQUFFckcsS0FBSyxDQUFDc0MsUUFBUSxDQUFDOEIsaUJBQWlCLENBQUNrQyxRQUFRLENBQUNDLE9BQU87SUFDcEUvRSxvQkFBb0IsRUFBRXhCLEtBQUssQ0FBQ3dCLG9CQUFvQjtJQUNoRFgsUUFBUSxFQUFFYixLQUFLLENBQUNhLFFBQVE7SUFDeEIyQixPQUFPLEVBQUV4QyxLQUFLLENBQUN3QyxPQUFPO0lBQ3RCMEIsVUFBVSxFQUFFbEUsS0FBSyxDQUFDc0MsUUFBUSxDQUFDNEIsVUFBVTtJQUNyQ3NDLGFBQWEsRUFBRXhHLEtBQUssQ0FBQ29DLGVBQWUsQ0FBQ29FLGFBQWE7SUFDbERDLGFBQWEsRUFBRXpHLEtBQUssQ0FBQ29DLGVBQWUsQ0FBQ3FFLGFBQWE7SUFDbERDLFNBQVMsRUFBRTFHLEtBQUssQ0FBQ3FDLGVBQWUsQ0FBQ3FFLFNBQVM7SUFDMUNDLFFBQVEsRUFBRVAsVUFBVSxDQUFDckQ7RUFDdkIsQ0FBQztBQUFBLENBQUM7O0FBRUY7QUFDQTtBQUNBO0FBQ08sSUFBTTZELDBCQUEwQixHQUFBaEcsT0FBQSxDQUFBZ0csMEJBQUEsR0FBRyxJQUFBQyx3QkFBYyxFQUN0RCxDQUFDLFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUN4RSxRQUFRLENBQUNjLFFBQVE7QUFBQSxFQUFDLEVBQ2xDLFVBQUFBLFFBQVEsRUFBSTtFQUNWLElBQU0yRCxrQkFBd0MsR0FBRyxFQUFFO0VBQ25EeEosTUFBTSxDQUFDcUIsSUFBSSxDQUFDd0UsUUFBUSxDQUFDLENBQUNoRSxPQUFPLENBQUMsVUFBQWtFLEdBQUcsRUFBSTtJQUFBLElBQUEwRCxZQUFBO0lBQ25DLElBQU1DLEVBQUUsR0FBRzdELFFBQVEsQ0FBQ0UsR0FBRyxDQUFDO0lBQ3hCLElBQU00RCxZQUFZLEdBQUdELEVBQUUsYUFBRkEsRUFBRSxnQkFBQUQsWUFBQSxHQUFGQyxFQUFFLENBQUVFLFFBQVEsY0FBQUgsWUFBQSx1QkFBWkEsWUFBQSxDQUFjRSxZQUFZO0lBQy9DLElBQUlFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSCxZQUFZLENBQUMsRUFBRTtNQUMvQkEsWUFBWSxDQUFDOUgsT0FBTyxDQUFDLFVBQUFrSSxXQUFXLEVBQUk7UUFDbEMsSUFBSSxPQUFPQSxXQUFXLEtBQUssUUFBUSxFQUFFO1VBQ25DO1VBQ0EsSUFBTUMsS0FBSyxHQUFHRCxXQUFXLENBQUNFLEtBQUssQ0FBQyxZQUFZLENBQUM7VUFDN0MsSUFBSUQsS0FBSyxFQUFFO1lBQ1QsSUFBSTtjQUNGQSxLQUFLLGFBQUxBLEtBQUssZUFBTEEsS0FBSyxDQUFFbkksT0FBTyxDQUFDLFVBQUFxSSxJQUFJLEVBQUk7Z0JBQUEsSUFBQUMsV0FBQSxFQUFBQyxZQUFBO2dCQUNyQixJQUFNQyxJQUFJLElBQUFGLFdBQUEsR0FBR0QsSUFBSSxDQUFDRCxLQUFLLENBQUMsZUFBZSxDQUFDLGNBQUFFLFdBQUEsdUJBQTNCQSxXQUFBLENBQThCLENBQUMsQ0FBQztnQkFDN0MsSUFBTUcsS0FBSyxJQUFBRixZQUFBLEdBQUdGLElBQUksQ0FBQ0QsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGNBQUFHLFlBQUEsdUJBQTVCQSxZQUFBLENBQStCLENBQUMsQ0FBQztnQkFDL0MsSUFBSUMsSUFBSSxJQUFJQyxLQUFLLEVBQUU7a0JBQ2pCZCxrQkFBa0IsQ0FBQy9ILElBQUksQ0FBQztvQkFDdEI2SSxLQUFLLEtBQUFuSCxNQUFBLENBQUsrRyxJQUFJLENBQUNLLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBQXBILE1BQUEsQ0FBR21ILEtBQUssQ0FBRTtvQkFDM0RFLEdBQUcsRUFBRUg7a0JBQ1AsQ0FBQyxDQUFDO2dCQUNKO2NBQ0YsQ0FBQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLE9BQU9JLEtBQUssRUFBRTtjQUNkO1lBQUE7VUFFSixDQUFDLE1BQU07WUFDTGpCLGtCQUFrQixDQUFDL0gsSUFBSSxDQUFDO2NBQUM2SSxLQUFLLEVBQUVQLFdBQVc7Y0FBRVMsR0FBRyxFQUFFO1lBQUksQ0FBQyxDQUFDO1VBQzFEO1FBQ0Y7TUFDRixDQUFDLENBQUM7SUFDSjtFQUNGLENBQUMsQ0FBQztFQUNGLE9BQU9oQixrQkFBa0I7QUFDM0IsQ0FDRixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTW5GLG1CQUFtQixHQUFBaEIsT0FBQSxDQUFBZ0IsbUJBQUEsR0FBRyxJQUFBaUYsd0JBQWMsRUFDL0MsQ0FBQ0QsMEJBQTBCLENBQUMsRUFDNUIsVUFBQWpGLG1CQUFtQixFQUFJO0VBQ3JCO0VBQ0EsSUFBTXNHLHNCQUFzQixHQUFHdEcsbUJBQW1CO0VBQ2xELElBQU11RyxLQUE2QixHQUFHLEVBQUU7RUFFeEMsT0FBTztJQUFDckcsT0FBTyxFQUFFb0csc0JBQXNCO0lBQUVDLEtBQUssRUFBTEE7RUFBSyxDQUFDO0FBQ2pELENBQ0YsQ0FBQztBQUVNLElBQU1DLHlCQUF5QixHQUFBdkgsT0FBQSxDQUFBdUgseUJBQUEsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUFJbkksS0FBb0I7RUFBQSxPQUFNO0lBQ2xFb0ksa0JBQWtCLEVBQUVwSSxLQUFLLENBQUNtQyxjQUFjLENBQUNpRyxrQkFBa0I7SUFDM0RDLGFBQWEsRUFBRXJJLEtBQUssQ0FBQ3dDLE9BQU8sQ0FBQzZGO0VBQy9CLENBQUM7QUFBQSxDQUFDO0FBRUssSUFBTTNHLHVCQUF1QixHQUFBZCxPQUFBLENBQUFjLHVCQUFBLEdBQUc7RUFDckM0RyxTQUFTLEVBQUUsRUFBRTtFQUNiQyx1QkFBdUIsRUFBRSxLQUFLO0VBQzlCOUcsWUFBWSxFQUFFK0csaUNBQXNCO0VBQ3BDekYsS0FBSyxFQUFFLEdBQUc7RUFDVjRCLE1BQU0sRUFBRSxHQUFHO0VBQ1hoQixPQUFPLEVBQUU4RSx5QkFBYztFQUN2QjdFLE9BQU8sRUFBRThFLDRCQUFpQjtFQUMxQjVGLGNBQWMsRUFBRTZGLHFCQUFVLENBQUNuRCxTQUFTLENBQUN6QyxLQUFLO0VBQzFDOUMsS0FBSyxFQUFFLENBQUMsQ0FBQztFQUNUNkYsY0FBYyxFQUFFLEVBQUU7RUFDbEJwRCxRQUFRLEVBQUUsS0FBSztFQUNma0csWUFBWSxFQUFFLENBQUM7QUFDakIsQ0FBQztBQTZDREMsZUFBZSxDQUFDQyxJQUFJLEdBQUcsQ0FDckJDLHdCQUFtQixFQUNuQkMseUJBQW9CLEVBQ3BCQyx5QkFBbUIsRUFDbkJDLHNCQUFpQixFQUNqQkMsMEJBQXFCLEVBQ3JCQyxxQkFBZ0IsRUFDaEJDLHlCQUFvQixFQUNwQkMsNkJBQXdCLEVBQ3hCQyxzQkFBaUIsRUFDakJDLHlCQUFvQixDQUNyQjtBQUVELFNBQVNYLGVBQWVBLENBQ3RCWSxZQUFvRCxFQUNwREMsYUFBc0QsRUFDdERDLFlBQW9ELEVBQ3BEQyxVQUFnRCxFQUNoREMsY0FBd0QsRUFDeERDLFNBQThDLEVBQzlDQyxhQUFzRCxFQUN0REMsaUJBQThELEVBQzlEQyxVQUFnRCxFQUN5QztFQUN6RjtFQUNBO0VBQUEsSUFDTUMsUUFBUSwwQkFBQUMsVUFBQTtJQUFBLFNBQUFELFNBQUE7TUFBQSxJQUFBRSxLQUFBO01BQUEsSUFBQUMsZ0JBQUEsbUJBQUFILFFBQUE7TUFBQSxTQUFBSSxJQUFBLEdBQUFwTCxTQUFBLENBQUFDLE1BQUEsRUFBQW9MLElBQUEsT0FBQW5ELEtBQUEsQ0FBQWtELElBQUEsR0FBQUUsSUFBQSxNQUFBQSxJQUFBLEdBQUFGLElBQUEsRUFBQUUsSUFBQTtRQUFBRCxJQUFBLENBQUFDLElBQUEsSUFBQXRMLFNBQUEsQ0FBQXNMLElBQUE7TUFBQTtNQUFBSixLQUFBLEdBQUFyTSxVQUFBLE9BQUFtTSxRQUFBLEtBQUF4SixNQUFBLENBQUE2SixJQUFBO01BQUEsSUFBQWxMLGdCQUFBLGFBQUErSyxLQUFBLFdBTWU7UUFDekJoRSxVQUFVLEVBQUU7TUFDZCxDQUFDO01BQUEsSUFBQS9HLGdCQUFBLGFBQUErSyxLQUFBLG1CQXFCZSxVQUFBaEUsVUFBVSxFQUFJO1FBQzVCZ0UsS0FBQSxDQUFLSyxRQUFRLENBQUM7VUFBQ3JFLFVBQVUsRUFBVkE7UUFBVSxDQUFDLENBQUM7TUFDN0IsQ0FBQztNQUFBLElBQUEvRyxnQkFBQSxhQUFBK0ssS0FBQSx1QkFJTSxJQUFBTSxnQkFBUyxFQUFpQixDQUFDO01BQUEsSUFBQXJMLGdCQUFBLGFBQUErSyxLQUFBLGtDQUNoQixJQUFBTSxnQkFBUyxFQUFpQixDQUFDO01BRTdDO01BQUEsSUFBQXJMLGdCQUFBLGFBQUErSyxLQUFBLG1CQUNnQixVQUFBcEssS0FBSztRQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSztNQUFBO01BQUEsSUFBQVosZ0JBQUEsYUFBQStLLEtBQUEsNEJBQ1gsSUFBQXZELHdCQUFjLEVBQUN1RCxLQUFBLENBQUtPLGFBQWEsRUFBRSxVQUFBMUssS0FBSztRQUFBLE9BQy9ELElBQUEySyxRQUFBLGFBQU8zSyxLQUFLLE1BQUssUUFBUSxHQUFBaEIsYUFBQSxDQUFBQSxhQUFBLEtBRWhCNEwsYUFBVSxHQUNWNUssS0FBSyxJQUVWQSxLQUFLLEtBQUs2SyxnQkFBSyxDQUFDQyxLQUFLLEdBQ3JCQyxlQUFPLEdBQ1AvSyxLQUFLLEtBQUs2SyxnQkFBSyxDQUFDRyxJQUFJLEdBQ3BCQyxlQUFPLEdBQ1BqTCxLQUFLO01BQUEsQ0FDWCxDQUFDO01BQUEsSUFBQVosZ0JBQUEsYUFBQStLLEtBQUEsc0JBRWtCLFVBQUFwSyxLQUFLO1FBQUEsT0FBSUEsS0FBSyxDQUFDc0MsUUFBUSxDQUFDYyxRQUFRO01BQUE7TUFBQSxJQUFBL0QsZ0JBQUEsYUFBQStLLEtBQUEsOEJBQ3hCLElBQUF2RCx3QkFBYyxFQUFDdUQsS0FBQSxDQUFLZSxnQkFBZ0IsRUFBRWhJLGtCQUFrQixDQUFDO01BQUEsSUFBQTlELGdCQUFBLGFBQUErSyxLQUFBLHdCQUUvRCxJQUFBdkQsd0JBQWMsRUFDakMsVUFBQzdHLEtBQW9CO1FBQUEsT0FBS0EsS0FBSyxDQUFDOEYsY0FBYztNQUFBLEdBQzlDLFVBQUFzRixTQUFTO1FBQUEsT0FDUGhFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDK0QsU0FBUyxDQUFDLElBQUlBLFNBQVMsQ0FBQ2pNLE1BQU0sR0FDeEM7VUFDRWtNLFVBQVUsRUFBRUQsU0FBUyxDQUFDRSxJQUFJLENBQUMsVUFBQUMsQ0FBQztZQUFBLE9BQUlBLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztVQUFBLEVBQUM7VUFDdERDLFFBQVEsRUFBRUwsU0FBUyxDQUFDRSxJQUFJLENBQUMsVUFBQUMsQ0FBQztZQUFBLE9BQUlBLENBQUMsQ0FBQ0csYUFBYSxDQUFDLENBQUM7VUFBQTtRQUNqRCxDQUFDLEdBQ0QsQ0FBQyxDQUFDO01BQUEsQ0FDVixDQUFDO01BQUEsSUFBQXJNLGdCQUFBLGFBQUErSyxLQUFBLDRCQUV3QixJQUFBdkQsd0JBQWMsRUFDckMsVUFBQzdHLEtBQW9CO1FBQUEsT0FBS0EsS0FBSyxDQUFDMkwsY0FBYztNQUFBLEdBQzlDLFVBQUFDLGNBQWM7UUFBQSxPQUFLQSxjQUFjLEdBQUcsSUFBQUMsb0JBQWEsRUFBQ0Msc0JBQVEsRUFBRUYsY0FBYyxDQUFDLEdBQUdFLHNCQUFRO01BQUEsQ0FDeEYsQ0FBQztNQUFBLElBQUF6TSxnQkFBQSxhQUFBK0ssS0FBQSxtQkFVZSxZQUFNO1FBQ3BCLElBQU0yQixhQUFhLEdBQUd4TyxNQUFNLENBQUN5TyxNQUFNLENBQUM1QixLQUFBLENBQUtwSyxLQUFLLENBQUM4QixRQUFRLENBQUN3RyxTQUFTLENBQUM7UUFDbEU7UUFDQSxJQUFNMkQsWUFBWSxHQUFHLENBQUM3QixLQUFBLENBQUtwSyxLQUFLLENBQUNzSSxTQUFTLElBQUksRUFBRSxFQUFFNEQsR0FBRyxDQUFDLFVBQUFDLEVBQUU7VUFBQSxPQUFBbE4sYUFBQSxDQUFBQSxhQUFBLEtBQ25Ea04sRUFBRTtZQUNMQyxFQUFFLEVBQUVELEVBQUUsQ0FBQ0MsRUFBRSxJQUFJLElBQUFDLDJCQUFjLEVBQUM7VUFBQztRQUFBLENBQzdCLENBQUM7UUFFSCxJQUFNQyxTQUFTLEdBQUcsR0FBQTVMLE1BQUEsS0FBQTZMLG1CQUFBLGFBQUlOLFlBQVksR0FBS0YsYUFBYSxFQUFFUyxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFQyxLQUFLLEVBQUs7VUFDNUVELElBQUksQ0FBQ0MsS0FBSyxDQUFDTixFQUFFLENBQUMsR0FBR00sS0FBSztVQUN0QixPQUFPRCxJQUFJO1FBQ2IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRU5yQyxLQUFBLENBQUtwSyxLQUFLLENBQUMrRCxlQUFlLENBQUM0SSxhQUFhLENBQUNMLFNBQVMsQ0FBQztNQUNyRCxDQUFDO01BQUEsSUFBQWpOLGdCQUFBLGFBQUErSyxLQUFBLHNCQUVrQixVQUFDd0MsV0FBVyxFQUFFQyxPQUFPLEVBQUs7UUFDM0N6QyxLQUFBLENBQUtwSyxLQUFLLENBQUNvQyxlQUFlLENBQUMwSyxpQkFBaUIsQ0FBQ0YsV0FBVyxFQUFFQyxPQUFPLENBQUM7TUFDcEUsQ0FBQztNQUFBLE9BQUF6QyxLQUFBO0lBQUE7SUFBQSxJQUFBMkMsVUFBQSxhQUFBN0MsUUFBQSxFQUFBQyxVQUFBO0lBQUEsV0FBQTZDLGFBQUEsYUFBQTlDLFFBQUE7TUFBQTVHLEdBQUE7TUFBQTJKLEtBQUEsRUF4RkQsU0FBQUMsaUJBQWlCQSxDQUFBLEVBQUc7UUFBQSxJQUFBQyxxQkFBQTtRQUNsQixJQUFJLEVBQUFBLHFCQUFBLE9BQUFDLDJCQUFvQixFQUFDLENBQUMsQ0FBQ0Msb0JBQW9CLGNBQUFGLHFCQUFBLGdCQUFBQSxxQkFBQSxHQUEzQ0EscUJBQUEsQ0FBOEMsUUFBUSxDQUFDLGNBQUFBLHFCQUFBLHVCQUF2REEscUJBQUEsQ0FBeURHLFVBQVUsTUFBSyxRQUFRLEVBQUU7VUFDcEYsSUFBSSxDQUFDQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzdCO1FBQ0EsSUFBSSxDQUFDQyxhQUFhLENBQUMsQ0FBQztRQUNwQixJQUFJLE9BQU8sSUFBSSxDQUFDeE4sS0FBSyxDQUFDeU4scUJBQXFCLEtBQUssVUFBVSxFQUFFO1VBQzFELElBQUksQ0FBQ3pOLEtBQUssQ0FBQ3lOLHFCQUFxQixDQUFDLENBQUM7UUFDcEM7UUFDQSxJQUFJLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxPQUFPLFlBQVlDLFdBQVcsRUFBRTtVQUM1QyxJQUFBQyx3QkFBaUIsRUFBQyxJQUFJLENBQUNILElBQUksQ0FBQ0MsT0FBTyxFQUFFLElBQUksQ0FBQ0csYUFBYSxDQUFDO1FBQzFEO01BQ0Y7SUFBQztNQUFBeEssR0FBQTtNQUFBMkosS0FBQSxFQUVELFNBQUFjLG9CQUFvQkEsQ0FBQSxFQUFHO1FBQ3JCLElBQUksSUFBSSxDQUFDTCxJQUFJLENBQUNDLE9BQU8sWUFBWUMsV0FBVyxFQUFFO1VBQzVDLElBQUFJLDBCQUFtQixFQUFDLElBQUksQ0FBQ04sSUFBSSxDQUFDQyxPQUFPLENBQUM7UUFDeEM7TUFDRjtJQUFDO01BQUFySyxHQUFBO01BQUEySixLQUFBLEVBNkNEO01BQ0EsU0FBQU0sb0JBQW9CQSxDQUFBLEVBQUc7UUFDckIsSUFBTy9MLG9CQUFvQixHQUFJLElBQUksQ0FBQ3hCLEtBQUssQ0FBbEN3QixvQkFBb0I7UUFDM0IsSUFBSSxDQUFDLElBQUF5TSxvQkFBYSxFQUFDek0sb0JBQW9CLENBQUMsRUFBRTtVQUN4QzBNLG1CQUFPLENBQUNDLElBQUksQ0FBQ0MsK0JBQW9CLENBQUM7UUFDcEM7TUFDRjtJQUFDO01BQUE5SyxHQUFBO01BQUEySixLQUFBO01Bc0JEO01BQ0EsU0FBQW9CLE1BQU1BLENBQUEsRUFBRztRQUFBLElBQUFDLE1BQUE7UUFDUCxJQUFBQyxXQUFBLEdBY0ksSUFBSSxDQUFDdk8sS0FBSztVQUFBd08sY0FBQSxHQUFBRCxXQUFBLENBYlpuQyxFQUFFO1VBQUZBLEVBQUUsR0FBQW9DLGNBQUEsY0FBRyxLQUFLLEdBQUFBLGNBQUE7VUFBQUMsaUJBQUEsR0FBQUYsV0FBQSxDQUNWeEwsS0FBSztVQUFMQSxLQUFLLEdBQUEwTCxpQkFBQSxjQUFHL00sdUJBQXVCLENBQUNxQixLQUFLLEdBQUEwTCxpQkFBQTtVQUFBQyxrQkFBQSxHQUFBSCxXQUFBLENBQ3JDNUosTUFBTTtVQUFOQSxNQUFNLEdBQUErSixrQkFBQSxjQUFHaE4sdUJBQXVCLENBQUNpRCxNQUFNLEdBQUErSixrQkFBQTtVQUN2Q2xNLE9BQU8sR0FBQStMLFdBQUEsQ0FBUC9MLE9BQU87VUFDUEYsUUFBUSxHQUFBaU0sV0FBQSxDQUFSak0sUUFBUTtVQUVSSSxRQUFRLEdBQUE2TCxXQUFBLENBQVI3TCxRQUFRO1VBR1JrRyxZQUFZLEdBQUEyRixXQUFBLENBQVozRixZQUFZO1VBQUErRixxQkFBQSxHQUFBSixXQUFBLENBR1p6SSxjQUFjO1VBQWRBLGNBQWMsR0FBQTZJLHFCQUFBLGNBQUcsRUFBRSxHQUFBQSxxQkFBQTtRQUdyQixJQUFNdkksVUFBVSxHQUFHLElBQUksQ0FBQ1UsS0FBSyxDQUFDVixVQUFVLElBQUk7VUFBQ3JELEtBQUssRUFBTEEsS0FBSztVQUFFNEIsTUFBTSxFQUFOQTtRQUFNLENBQUM7UUFDM0QsSUFDRVEsU0FBUyxHQUVQN0MsUUFBUSxDQUZWNkMsU0FBUztVQUNUZixpQkFBaUIsR0FDZjlCLFFBQVEsQ0FEVjhCLGlCQUFpQjtRQUduQixJQUFNdEQsT0FBTyxHQUFHc0UsZUFBZSxDQUFDLElBQUksQ0FBQ3BGLEtBQUssQ0FBQztRQUMzQyxJQUFNQyxLQUFLLEdBQUcsSUFBSSxDQUFDMk8sc0JBQXNCLENBQUMsSUFBSSxDQUFDNU8sS0FBSyxDQUFDO1FBQ3JELElBQU0yTCxjQUFjLEdBQUcsSUFBSSxDQUFDa0Qsc0JBQXNCLENBQUMsSUFBSSxDQUFDN08sS0FBSyxDQUFDO1FBQzlELElBQU04TyxnQkFBZ0IsR0FBR3RNLE9BQU8sQ0FBQ3FDLFdBQVcsQ0FBQ2tLLFNBQVM7UUFDdEQsSUFBTXRMLGtCQUFrQixHQUFHLElBQUksQ0FBQ0Esa0JBQWtCLENBQUMsSUFBSSxDQUFDekQsS0FBSyxDQUFDO1FBRTlELElBQU0wRCxnQkFBZ0IsR0FBRyxJQUFJLENBQUNzTCx3QkFBd0IsQ0FBQyxJQUFJLENBQUNoUCxLQUFLLENBQUM7UUFDbEUsSUFBTWlQLFVBQVUsR0FBR3pMLGlCQUFpQixDQUFDLElBQUksQ0FBQ3hELEtBQUssRUFBRXlELGtCQUFrQixFQUFFQyxnQkFBZ0IsQ0FBQztRQUN0RixJQUFNd0wsbUJBQW1CLEdBQUd4SyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMxRSxLQUFLLENBQUM7UUFDN0QsSUFBTW1QLGtCQUFrQixHQUFHOUosb0JBQW9CLENBQUMsSUFBSSxDQUFDckYsS0FBSyxFQUFFQyxLQUFLLENBQUM7UUFDbEUsSUFBTW1QLG9CQUFvQixHQUFHekosc0JBQXNCLENBQUMsSUFBSSxDQUFDM0YsS0FBSyxFQUFFLElBQUksQ0FBQzBOLElBQUksQ0FBQ0MsT0FBTyxDQUFDO1FBQ2xGLElBQU0wQixtQkFBbUIsR0FBR2xKLHFCQUFxQixDQUFDLElBQUksQ0FBQ25HLEtBQUssRUFBRW9HLFVBQVUsQ0FBQztRQUN6RSxJQUFNa0osdUJBQXVCLEdBQUduSCx5QkFBeUIsQ0FBQyxJQUFJLENBQUNuSSxLQUFLLENBQUM7UUFFckUsSUFBTXVQLGFBQWEsR0FBRyxDQUFDek8sT0FBTyxHQUMxQixjQUNFakcsTUFBQSxZQUFBMlUsYUFBQSxDQUFDN0YsWUFBWSxNQUFBOEYsU0FBQTtVQUNYQyxPQUFPLEVBQUUsSUFBSztVQUNkcE0sR0FBRyxFQUFFLENBQUU7VUFDUHBDLEtBQUssRUFBRTtRQUFFLEdBQ0xHLGlCQUFpQixDQUFDLElBQUksQ0FBQ3JCLEtBQUssQ0FBQztVQUNqQzRNLFdBQVcsRUFBRSxDQUFFO1VBQ2YrQyxlQUFlLEVBQUUsSUFBSSxDQUFDQztRQUFpQixFQUN4QyxDQUFDLENBQ0gsR0FDRHpLLFNBQVMsQ0FBQytHLEdBQUcsQ0FBQyxVQUFDMkQsUUFBUSxFQUFFM08sS0FBSztVQUFBLG9CQUM1QnJHLE1BQUEsWUFBQTJVLGFBQUEsQ0FBQzdGLFlBQVksTUFBQThGLFNBQUE7WUFDWG5NLEdBQUcsRUFBRXBDLEtBQU07WUFDWEEsS0FBSyxFQUFFQSxLQUFNO1lBQ2J3TyxPQUFPLEVBQUV4TyxLQUFLLEtBQUs7VUFBRSxHQUNqQkcsaUJBQWlCLENBQUNpTixNQUFJLENBQUN0TyxLQUFLLEVBQUVrQixLQUFLLENBQUM7WUFDeEMwTCxXQUFXLEVBQUUxTCxLQUFNO1lBQ25CeU8sZUFBZSxFQUFFckIsTUFBSSxDQUFDc0I7VUFBaUIsRUFDeEMsQ0FBQztRQUFBLENBQ0gsQ0FBQztRQUVOLG9CQUNFL1UsTUFBQSxZQUFBMlUsYUFBQSxDQUFDL1QsUUFBQSxDQUFBcVUsV0FBVyxDQUFDQyxRQUFRO1VBQUM5QyxLQUFLLEVBQUUsSUFBSSxDQUFDUztRQUFLLGdCQUNyQzdTLE1BQUEsWUFBQTJVLGFBQUEsQ0FBQy9ULFFBQUEsQ0FBQXVVLDJCQUEyQjtVQUFDcEgsWUFBWSxFQUFFQTtRQUFhLGdCQUN0RC9OLE1BQUEsWUFBQTJVLGFBQUEsQ0FBQ2pVLFVBQUEsQ0FBQTBVLFlBQVk7VUFBQ3ROLE1BQU0sRUFBRUgsT0FBTyxDQUFDRyxNQUFPO1VBQUNtSixRQUFRLEVBQUVILGNBQWMsQ0FBQ25KLE9BQU8sQ0FBQ0csTUFBTTtRQUFFLGdCQUM3RTlILE1BQUEsWUFBQTJVLGFBQUEsQ0FBQ3BVLGlCQUFBLENBQUE4VSxpQkFBaUI7VUFBQzFRLGlCQUFpQixFQUFFQTtRQUFrQixnQkFDdEQzRSxNQUFBLFlBQUEyVSxhQUFBLENBQUNwVSxpQkFBQSxDQUFBK1UsYUFBYTtVQUFDbFEsS0FBSyxFQUFFQTtRQUFNLGdCQUMxQnBGLE1BQUEsWUFBQTJVLGFBQUEsQ0FBQ2pULHFCQUFBLENBQUE2VCxpQkFBaUI7VUFBQ2hGLFNBQVMsRUFBRXRGO1FBQWUsZ0JBQzNDakwsTUFBQSxZQUFBMlUsYUFBQSxDQUFDNVAsV0FBVztVQUNWeVEsU0FBUyxFQUFDLFdBQVc7VUFDckJqRSxFQUFFLGdCQUFBMUwsTUFBQSxDQUFnQjBMLEVBQUUsQ0FBRztVQUN2Qk0sS0FBSyxFQUFFO1lBQ0w0RCxPQUFPLEVBQUUsTUFBTTtZQUNmQyxhQUFhLEVBQUUsUUFBUTtZQUN2QkMsUUFBUSxFQUFFLFVBQVU7WUFDcEJ6TixLQUFLLEtBQUFyQyxNQUFBLENBQUtxQyxLQUFLLE9BQUk7WUFDbkI0QixNQUFNLEtBQUFqRSxNQUFBLENBQUtpRSxNQUFNO1VBQ25CLENBQUU7VUFDRjhMLEdBQUcsRUFBRSxJQUFJLENBQUMvQztRQUFLLGdCQUVmN1MsTUFBQSxZQUFBMlUsYUFBQSxDQUFDeEYsaUJBQWlCLEVBQUtzRix1QkFBMEIsQ0FBQyxlQUNsRHpVLE1BQUEsWUFBQTJVLGFBQUEsQ0FBQ3ZGLFVBQVUsUUFDUixDQUFDekgsT0FBTyxDQUFDRSxRQUFRLElBQUksQ0FBQ0EsUUFBUSxpQkFBSTdILE1BQUEsWUFBQTJVLGFBQUEsQ0FBQzFGLFNBQVMsRUFBS21GLFVBQWEsQ0FBQyxlQUNoRXBVLE1BQUEsWUFBQTJVLGFBQUEsQ0FBQzVGLFVBQVU7VUFBQ3lHLFNBQVMsRUFBQyxNQUFNO1VBQUN4UCxRQUFRLEVBQUUsSUFBSSxDQUFDYixLQUFLLENBQUNhO1FBQVMsR0FDeEQwTyxhQUNTLENBQ0YsQ0FBQyxFQUNaVCxnQkFBZ0IsaUJBQUlqVSxNQUFBLFlBQUEyVSxhQUFBLENBQUN6RixhQUFhLEVBQUttRixtQkFBc0IsQ0FBQyxFQUU5RCxDQUFDdk8sb0JBQW9CLENBQUMsSUFBSSxDQUFDWCxLQUFLLENBQUMsSUFBSW9FLGlCQUFpQixDQUFDa0MsUUFBUSxDQUFDQyxPQUFPLGlCQUN0RTFMLE1BQUEsWUFBQTJVLGFBQUEsQ0FBQzlGLGFBQWEsTUFBQStGLFNBQUEsaUJBQ1JKLG1CQUFtQjtVQUN2Qm5PLEtBQUssRUFBRSxDQUFFO1VBQ1R3UCxpQkFBaUIsRUFBRTtRQUFNLEVBQzFCLENBQ0YsRUFFQS9QLG9CQUFvQixDQUFDLElBQUksQ0FBQ1gsS0FBSyxDQUFDLElBQy9Cb0UsaUJBQWlCLENBQUNrQyxRQUFRLENBQUNDLE9BQU8sSUFDbENnSixhQUFhLENBQUNyRCxHQUFHLENBQUMsVUFBQ3lFLGFBQWEsRUFBRXpQLEtBQUs7VUFBQSxvQkFDckNyRyxNQUFBLFlBQUEyVSxhQUFBLENBQUM5RixhQUFhLE1BQUErRixTQUFBO1lBQ1puTSxHQUFHLEVBQUVwQztVQUFNLEdBQ1BtTyxtQkFBbUI7WUFDdkJuTyxLQUFLLEVBQUVBLEtBQU07WUFDYndQLGlCQUFpQixFQUFFO1VBQUssRUFDekIsQ0FBQztRQUFBLENBQ0gsQ0FBQyxlQUNKN1YsTUFBQSxZQUFBMlUsYUFBQSxDQUFDalAsaUJBQWlCO1VBQUNFLFFBQVEsRUFBRSxDQUFDLElBQUFtUSx1QkFBZ0IsRUFBQ0Msd0JBQWdCO1FBQUUsZ0JBQy9EaFcsTUFBQSxZQUFBMlUsYUFBQSxDQUFDL0YsWUFBWSxNQUFBZ0csU0FBQTtVQUNYcUIsT0FBTyxFQUFFLElBQUksQ0FBQ0M7UUFBZ0IsR0FDMUI1QixrQkFBa0I7VUFDdEI2QixVQUFVLEVBQUU1SyxVQUFVLENBQUNyRCxLQUFNO1VBQzdCOUMsS0FBSyxFQUFFQTtRQUFNLEVBQ2QsQ0FDZ0IsQ0FBQyxlQUNwQnBGLE1BQUEsWUFBQTJVLGFBQUEsQ0FBQzNGLGNBQWMsTUFBQTRGLFNBQUEsaUJBQ1RMLG9CQUFvQjtVQUN4QjRCLFVBQVUsRUFBRTVLLFVBQVUsQ0FBQ3JELEtBQU07VUFDN0JrTyxVQUFVLEVBQUU3SyxVQUFVLENBQUN6QjtRQUFPLEVBQy9CLENBQ1UsQ0FDSSxDQUNOLENBQ0UsQ0FDUCxDQUNhLENBQ1QsQ0FBQztNQUUzQjtJQUFDO0VBQUEsRUFuT29CdU0sZ0JBQVM7RUFBQSxJQUFBN1IsZ0JBQUEsYUFBMUI2SyxRQUFRLGtCQUlVeEksdUJBQXVCO0VBQUEsSUFBQXJDLGdCQUFBLGFBSnpDNkssUUFBUSxpQkFpQ1M0RixvQkFBVztFQXFNbEMsT0FBTyxJQUFBcUIsd0JBQWUsRUFDcEJDLGVBQWUsRUFDZkMsc0JBQ0YsQ0FBQyxDQUFDLElBQUFDLDJCQUFTLEVBQUNwSCxRQUFRLENBQUMsQ0FBQztBQUN4QjtBQUVPLFNBQVNrSCxlQUFlQSxDQUFDdEssS0FBb0IsRUFBRTlHLEtBQW9CLEVBQUU7RUFDMUUsT0FBQWYsYUFBQSxDQUFBQSxhQUFBLEtBQ0tlLEtBQUs7SUFDUnNDLFFBQVEsRUFBRXdFLEtBQUssQ0FBQ3hFLFFBQVE7SUFDeEJSLFFBQVEsRUFBRWdGLEtBQUssQ0FBQ2hGLFFBQVE7SUFDeEJqQixRQUFRLEVBQUVpRyxLQUFLLENBQUNqRyxRQUFRO0lBQ3hCMkIsT0FBTyxFQUFFc0UsS0FBSyxDQUFDdEUsT0FBTztJQUN0QmlDLGFBQWEsRUFBRXFDLEtBQUssQ0FBQ3JDO0VBQWE7QUFFdEM7QUFFQSxJQUFNOE0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBRTdCLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFHQyxRQUFRO0VBQUEsT0FBSUEsUUFBUTtBQUFBO0FBQ3hDLElBQU1DLGNBQWMsR0FBRyxTQUFqQkEsY0FBY0EsQ0FBSUQsUUFBUSxFQUFFelIsS0FBSztFQUFBLE9BQUtBLEtBQUssQ0FBQzJSLE9BQU8sSUFBSUosa0JBQWtCO0FBQUE7O0FBRS9FO0FBQ08sU0FBU0sscUJBQXFCQSxDQUFBLEVBQUc7RUFDdEMsT0FBTyxJQUFBL0ssd0JBQWMsRUFBQyxDQUFDMkssV0FBVyxFQUFFRSxjQUFjLENBQUMsRUFBRSxVQUFDRCxRQUFRLEVBQUVJLFdBQVcsRUFBSztJQUM5RSxJQUFBQyxJQUFBLEdBQTZGLENBQzNGQyx3QkFBZSxFQUNmQyx3QkFBZSxFQUNmQyx3QkFBZSxFQUNmQyx1QkFBYyxFQUNkQyx3QkFBZSxDQUNoQixDQUFDakcsR0FBRyxDQUFDLFVBQUF5RixPQUFPO1FBQUEsT0FBSSxJQUFBUyx5QkFBa0IsRUFBQ0MsWUFBWSxDQUFDVixPQUFPLEVBQUVFLFdBQVcsQ0FBQyxFQUFFSixRQUFRLENBQUM7TUFBQSxFQUFDO01BQUFhLEtBQUEsT0FBQUMsZUFBQSxhQUFBVCxJQUFBO01BTjNFMVAsZUFBZSxHQUFBa1EsS0FBQTtNQUFFalEsZUFBZSxHQUFBaVEsS0FBQTtNQUFFdk8sZUFBZSxHQUFBdU8sS0FBQTtNQUFFblEsY0FBYyxHQUFBbVEsS0FBQTtNQUFFek0sZUFBZSxHQUFBeU0sS0FBQTtJQVF6RixPQUFPO01BQ0xsUSxlQUFlLEVBQWZBLGVBQWU7TUFDZkMsZUFBZSxFQUFmQSxlQUFlO01BQ2YwQixlQUFlLEVBQWZBLGVBQWU7TUFDZjVCLGNBQWMsRUFBZEEsY0FBYztNQUNkMEQsZUFBZSxFQUFmQSxlQUFlO01BQ2Y0TCxRQUFRLEVBQVJBO0lBQ0YsQ0FBQztFQUNILENBQUMsQ0FBQztBQUNKO0FBRUEsU0FBU0osc0JBQXNCQSxDQUFBLEVBQUc7RUFDaEMsSUFBTW1CLGlCQUFpQixHQUFHWixxQkFBcUIsQ0FBQyxDQUFDO0VBQ2pELElBQU1hLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUloQixRQUFRLEVBQUVpQixRQUFRLEVBQUs7SUFDakQsSUFBTUMscUJBQXFCLEdBQUdILGlCQUFpQixDQUFDZixRQUFRLEVBQUVpQixRQUFRLENBQUM7SUFFbkUsT0FBQXpULGFBQUEsQ0FBQUEsYUFBQSxLQUNLMFQscUJBQXFCO01BQ3hCbEIsUUFBUSxFQUFSQTtJQUFRO0VBRVosQ0FBQztFQUVELE9BQU9nQixrQkFBa0I7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBU0osWUFBWUEsQ0FBQ1YsT0FBTyxFQUFFRSxXQUFXLEVBQUU7RUFDMUMsSUFBTWUsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNwQixLQUFLLElBQU10UCxHQUFHLElBQUl1TyxXQUFXLEVBQUU7SUFDN0IsSUFDRXRVLE1BQU0sQ0FBQ2tCLFNBQVMsQ0FBQ2QsY0FBYyxDQUFDQyxJQUFJLENBQUNpVSxXQUFXLEVBQUV2TyxHQUFHLENBQUMsSUFDdEQvRixNQUFNLENBQUNrQixTQUFTLENBQUNkLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDK1QsT0FBTyxFQUFFck8sR0FBRyxDQUFDLEVBQ2xEO01BQ0FzUCxTQUFTLENBQUN0UCxHQUFHLENBQUMsR0FBR3VPLFdBQVcsQ0FBQ3ZPLEdBQUcsQ0FBQztJQUNuQztFQUNGO0VBRUEsT0FBQXJFLGFBQUEsQ0FBQUEsYUFBQSxLQUFXMFMsT0FBTyxHQUFLaUIsU0FBUztBQUNsQztBQUFDLElBQUFDLFFBQUEsR0FBQWpTLE9BQUEsY0FFY2lJLGVBQWUiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
declare type StyledContainerProps = {
|
|
3
|
+
isVisible?: boolean;
|
|
4
|
+
left: number;
|
|
5
|
+
};
|
|
6
|
+
export declare const StyledContainer: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").Substitute<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, StyledContainerProps>>;
|
|
7
|
+
declare type LoadingIndicatorProps = {
|
|
8
|
+
isVisible?: boolean;
|
|
9
|
+
activeSidePanel?: boolean;
|
|
10
|
+
sidePanelWidth?: number;
|
|
11
|
+
};
|
|
12
|
+
declare const _default: React.FC<React.PropsWithChildren<LoadingIndicatorProps>>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = exports.StyledContainer = void 0;
|
|
9
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
12
|
+
var _templateObject; // SPDX-License-Identifier: MIT
|
|
13
|
+
// Copyright contributors to the kepler.gl project
|
|
14
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
15
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
16
|
+
var StyledContainer = exports.StyledContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n left: ", "px;\n bottom: ", "px;\n z-index: 1;\n color: ", ";\n opacity: ", ";\n transition: opacity 0.5s ease-in-out;\n background-color: ", ";\n border-radius: 0px;\n padding-left: 3px;\n padding-right: 3px;\n font-size: 12px;\n"])), function (props) {
|
|
17
|
+
return props.left;
|
|
18
|
+
}, function (props) {
|
|
19
|
+
return props.theme.sidePanel.margin.left;
|
|
20
|
+
}, function (props) {
|
|
21
|
+
return props.theme.textColorHl;
|
|
22
|
+
}, function (props) {
|
|
23
|
+
return props.isVisible ? 1 : 0;
|
|
24
|
+
}, function (props) {
|
|
25
|
+
return props.theme.sidePanelBg;
|
|
26
|
+
});
|
|
27
|
+
var LoadingIndicator = function LoadingIndicator(_ref) {
|
|
28
|
+
var isVisible = _ref.isVisible,
|
|
29
|
+
children = _ref.children,
|
|
30
|
+
activeSidePanel = _ref.activeSidePanel,
|
|
31
|
+
sidePanelWidth = _ref.sidePanelWidth,
|
|
32
|
+
theme = _ref.theme;
|
|
33
|
+
var left = (activeSidePanel ? sidePanelWidth || 0 : 0) + theme.sidePanel.margin.left;
|
|
34
|
+
return /*#__PURE__*/_react["default"].createElement(StyledContainer, {
|
|
35
|
+
isVisible: isVisible,
|
|
36
|
+
left: left
|
|
37
|
+
}, children);
|
|
38
|
+
};
|
|
39
|
+
var _default = exports["default"] = (0, _styledComponents.withTheme)(LoadingIndicator);
|
|
40
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdGVtcGxhdGVPYmplY3QiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJTdHlsZWRDb250YWluZXIiLCJleHBvcnRzIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsImxlZnQiLCJ0aGVtZSIsInNpZGVQYW5lbCIsIm1hcmdpbiIsInRleHRDb2xvckhsIiwiaXNWaXNpYmxlIiwic2lkZVBhbmVsQmciLCJMb2FkaW5nSW5kaWNhdG9yIiwiX3JlZiIsImNoaWxkcmVuIiwiYWN0aXZlU2lkZVBhbmVsIiwic2lkZVBhbmVsV2lkdGgiLCJjcmVhdGVFbGVtZW50IiwiX2RlZmF1bHQiLCJ3aXRoVGhlbWUiXSwic291cmNlcyI6WyIuLi9zcmMvbG9hZGluZy1pbmRpY2F0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge1Byb3BzV2l0aENoaWxkcmVufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkLCB7d2l0aFRoZW1lfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbnR5cGUgU3R5bGVkQ29udGFpbmVyUHJvcHMgPSB7XG4gIGlzVmlzaWJsZT86IGJvb2xlYW47XG4gIGxlZnQ6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBTdHlsZWRDb250YWluZXIgPSBzdHlsZWQuZGl2PFN0eWxlZENvbnRhaW5lclByb3BzPmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAke3Byb3BzID0+IHByb3BzLmxlZnR9cHg7XG4gIGJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zaWRlUGFuZWwubWFyZ2luLmxlZnR9cHg7XG4gIHotaW5kZXg6IDE7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckhsfTtcbiAgb3BhY2l0eTogJHtwcm9wcyA9PiAocHJvcHMuaXNWaXNpYmxlID8gMSA6IDApfTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGVhc2UtaW4tb3V0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNpZGVQYW5lbEJnfTtcbiAgYm9yZGVyLXJhZGl1czogMHB4O1xuICBwYWRkaW5nLWxlZnQ6IDNweDtcbiAgcGFkZGluZy1yaWdodDogM3B4O1xuICBmb250LXNpemU6IDEycHg7XG5gO1xuXG50eXBlIExvYWRpbmdJbmRpY2F0b3JQcm9wcyA9IHtcbiAgaXNWaXNpYmxlPzogYm9vbGVhbjtcbiAgYWN0aXZlU2lkZVBhbmVsPzogYm9vbGVhbjtcbiAgc2lkZVBhbmVsV2lkdGg/OiBudW1iZXI7XG59O1xuXG5jb25zdCBMb2FkaW5nSW5kaWNhdG9yOiBSZWFjdC5GQzxQcm9wc1dpdGhDaGlsZHJlbjxMb2FkaW5nSW5kaWNhdG9yUHJvcHM+ICYge3RoZW1lOiBhbnl9PiA9ICh7XG4gIGlzVmlzaWJsZSxcbiAgY2hpbGRyZW4sXG4gIGFjdGl2ZVNpZGVQYW5lbCxcbiAgc2lkZVBhbmVsV2lkdGgsXG4gIHRoZW1lXG59KSA9PiB7XG4gIGNvbnN0IGxlZnQgPSAoYWN0aXZlU2lkZVBhbmVsID8gc2lkZVBhbmVsV2lkdGggfHwgMCA6IDApICsgdGhlbWUuc2lkZVBhbmVsLm1hcmdpbi5sZWZ0O1xuXG4gIHJldHVybiAoXG4gICAgPFN0eWxlZENvbnRhaW5lciBpc1Zpc2libGU9e2lzVmlzaWJsZX0gbGVmdD17bGVmdH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9TdHlsZWRDb250YWluZXI+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoVGhlbWUoTG9hZGluZ0luZGljYXRvcikgYXMgUmVhY3QuRkM8UHJvcHNXaXRoQ2hpbGRyZW48TG9hZGluZ0luZGljYXRvclByb3BzPj47XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFBb0QsSUFBQUcsZUFBQSxFQUpwRDtBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFILHdCQUFBRyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLGNBQUFSLENBQUEsRUFBQUcsQ0FBQSxJQUFBQSxDQUFBLENBQUFlLEdBQUEsQ0FBQWxCLENBQUEsRUFBQVEsQ0FBQSxHQUFBQSxDQUFBO0FBVU8sSUFBTVcsZUFBZSxHQUFBQyxPQUFBLENBQUFELGVBQUEsR0FBR0UsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBeEIsZUFBQSxLQUFBQSxlQUFBLE9BQUF5Qix1QkFBQSwrUkFFL0IsVUFBQUMsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsSUFBSTtBQUFBLEdBQ2pCLFVBQUFELEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNFLEtBQUssQ0FBQ0MsU0FBUyxDQUFDQyxNQUFNLENBQUNILElBQUk7QUFBQSxHQUUzQyxVQUFBRCxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDRSxLQUFLLENBQUNHLFdBQVc7QUFBQSxHQUM5QixVQUFBTCxLQUFLO0VBQUEsT0FBS0EsS0FBSyxDQUFDTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFBQSxDQUFDLEVBRXpCLFVBQUFOLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNFLEtBQUssQ0FBQ0ssV0FBVztBQUFBLEVBS3JEO0FBUUQsSUFBTUMsZ0JBQW1GLEdBQUcsU0FBdEZBLGdCQUFtRkEsQ0FBQUMsSUFBQSxFQU1uRjtFQUFBLElBTEpILFNBQVMsR0FBQUcsSUFBQSxDQUFUSCxTQUFTO0lBQ1RJLFFBQVEsR0FBQUQsSUFBQSxDQUFSQyxRQUFRO0lBQ1JDLGVBQWUsR0FBQUYsSUFBQSxDQUFmRSxlQUFlO0lBQ2ZDLGNBQWMsR0FBQUgsSUFBQSxDQUFkRyxjQUFjO0lBQ2RWLEtBQUssR0FBQU8sSUFBQSxDQUFMUCxLQUFLO0VBRUwsSUFBTUQsSUFBSSxHQUFHLENBQUNVLGVBQWUsR0FBR0MsY0FBYyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUlWLEtBQUssQ0FBQ0MsU0FBUyxDQUFDQyxNQUFNLENBQUNILElBQUk7RUFFdEYsb0JBQ0VoQyxNQUFBLFlBQUE0QyxhQUFBLENBQUNsQixlQUFlO0lBQUNXLFNBQVMsRUFBRUEsU0FBVTtJQUFDTCxJQUFJLEVBQUVBO0VBQUssR0FDL0NTLFFBQ2MsQ0FBQztBQUV0QixDQUFDO0FBQUMsSUFBQUksUUFBQSxHQUFBbEIsT0FBQSxjQUVhLElBQUFtQiwyQkFBUyxFQUFDUCxnQkFBZ0IsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -43,6 +43,9 @@ export interface MapContainerProps {
|
|
|
43
43
|
index?: number;
|
|
44
44
|
deleteMapLabels?: (containerId: string, layerId: string) => void;
|
|
45
45
|
containerId?: number;
|
|
46
|
+
isLoadingIndicatorVisible?: boolean;
|
|
47
|
+
activeSidePanel: string | null;
|
|
48
|
+
sidePanelWidth?: number;
|
|
46
49
|
locale?: any;
|
|
47
50
|
theme?: any;
|
|
48
51
|
editor?: any;
|