kepler.gl 3.1.7 → 3.1.8
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/ui-state-actions.d.ts +0 -16
- package/dist/src/actions/src/vis-state-actions.d.ts +26 -0
- package/dist/src/ai-assistant/src/constants.d.ts +2 -5
- package/dist/src/ai-assistant/src/tools/geo-tools.d.ts +76 -25
- package/dist/src/ai-assistant/src/tools/tools.d.ts +76 -25
- package/dist/src/components/src/side-panel/add-by-dataset-button.d.ts +0 -1
- package/dist/src/duckdb/src/table/duckdb-table-utils.d.ts +8 -9
- package/dist/src/localization/src/translations/ca.d.ts +2 -0
- package/dist/src/localization/src/translations/cn.d.ts +2 -0
- package/dist/src/localization/src/translations/en.d.ts +2 -0
- package/dist/src/localization/src/translations/es.d.ts +2 -0
- package/dist/src/localization/src/translations/fi.d.ts +2 -0
- package/dist/src/localization/src/translations/ja.d.ts +2 -0
- package/dist/src/localization/src/translations/pt.d.ts +2 -0
- package/dist/src/localization/src/translations/ru.d.ts +2 -0
- package/dist/src/reducers/src/ui-state-updaters.d.ts +0 -10
- package/dist/src/reducers/src/vis-state-updaters.d.ts +16 -1
- package/dist/src/reducers/src/vis-state.d.ts +4 -0
- package/dist/src/schemas/src/vis-state-schema.d.ts +1 -0
- package/package.json +2 -2
- package/src/actions/dist/ui-state-actions.d.ts +0 -16
- package/src/actions/dist/ui-state-actions.js +2 -17
- package/src/actions/dist/vis-state-actions.d.ts +26 -0
- package/src/actions/dist/vis-state-actions.js +25 -1
- package/src/actions/package.json +8 -8
- package/src/actions/src/ui-state-actions.ts +0 -22
- package/src/actions/src/vis-state-actions.ts +30 -0
- package/src/ai-assistant/dist/components/ai-assistant-component.js +63 -4
- package/src/ai-assistant/dist/components/ai-assistant-config.js +55 -17
- package/src/ai-assistant/dist/constants.d.ts +2 -5
- package/src/ai-assistant/dist/constants.js +3 -21
- package/src/ai-assistant/dist/reducers/index.js +2 -2
- package/src/ai-assistant/dist/tools/geo-tools.d.ts +76 -25
- package/src/ai-assistant/dist/tools/geo-tools.js +44 -8
- package/src/ai-assistant/dist/tools/lisa-tool.js +17 -6
- package/src/ai-assistant/dist/tools/tools.d.ts +76 -25
- package/src/ai-assistant/package.json +19 -14
- package/src/ai-assistant/src/components/ai-assistant-component.tsx +34 -4
- package/src/ai-assistant/src/components/ai-assistant-config.tsx +64 -18
- package/src/ai-assistant/src/config/models.json +5 -24
- package/src/ai-assistant/src/constants.ts +21 -26
- package/src/ai-assistant/src/reducers/index.ts +1 -1
- package/src/ai-assistant/src/tools/geo-tools.tsx +70 -9
- package/src/ai-assistant/src/tools/lisa-tool.tsx +15 -4
- package/src/cloud-providers/package.json +2 -2
- package/src/common-utils/package.json +3 -3
- package/src/components/dist/kepler-gl.js +2 -2
- package/src/components/dist/map/map-popover.js +2 -2
- package/src/components/dist/map-container.js +2 -2
- package/src/components/dist/side-panel/add-by-dataset-button.d.ts +0 -1
- package/src/components/dist/side-panel/add-by-dataset-button.js +1 -3
- package/src/components/dist/side-panel/filter-panel/add-filter-button.js +1 -2
- package/src/components/dist/side-panel/layer-panel/add-layer-button.js +1 -2
- package/src/components/dist/side-panel/layer-panel/custom-picker.js +18 -5
- package/src/components/package.json +15 -15
- package/src/components/src/kepler-gl.tsx +1 -1
- package/src/components/src/map/map-popover.tsx +1 -1
- package/src/components/src/map-container.tsx +1 -1
- package/src/components/src/side-panel/add-by-dataset-button.tsx +0 -3
- package/src/components/src/side-panel/filter-panel/add-filter-button.tsx +0 -1
- package/src/components/src/side-panel/layer-panel/add-layer-button.tsx +0 -1
- package/src/components/src/side-panel/layer-panel/custom-picker.tsx +15 -1
- package/src/constants/dist/default-settings.js +1 -1
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e6/16/9fd3750f7cfc51cf980ec6937f88e24e5b03b144d0439efabdec6a028ce7442883abce42b76f97bffa8d37bfb65c10508e48d68a2b019c4b750a48374080 +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/b6/51/9b3488269917e0404a46b4db6235f226deef2d5b5b5ffb7414dafaa60b52 +2 -0
- package/src/constants/package.json +2 -2
- package/src/constants/umd/keplergl.min.js +1 -1
- package/src/deckgl-arrow-layers/package.json +2 -2
- package/src/deckgl-layers/package.json +4 -4
- package/src/duckdb/dist/components/sql-panel.js +34 -33
- package/src/duckdb/dist/table/duckdb-table-utils.d.ts +8 -9
- package/src/duckdb/dist/table/duckdb-table-utils.js +21 -23
- package/src/duckdb/dist/table/duckdb-table.js +20 -17
- package/src/duckdb/package.json +6 -6
- package/src/duckdb/src/components/sql-panel.tsx +3 -5
- package/src/duckdb/src/table/duckdb-table-utils.ts +19 -18
- package/src/duckdb/src/table/duckdb-table.ts +7 -4
- package/src/effects/package.json +5 -5
- package/src/layers/dist/geojson-layer/geojson-layer.js +5 -2
- package/src/layers/package.json +9 -9
- package/src/layers/src/geojson-layer/geojson-layer.ts +4 -1
- package/src/localization/dist/translations/ca.d.ts +2 -0
- package/src/localization/dist/translations/ca.js +3 -1
- package/src/localization/dist/translations/cn.d.ts +2 -0
- package/src/localization/dist/translations/cn.js +3 -1
- package/src/localization/dist/translations/en.d.ts +2 -0
- package/src/localization/dist/translations/en.js +4 -2
- package/src/localization/dist/translations/es.d.ts +2 -0
- package/src/localization/dist/translations/es.js +3 -1
- package/src/localization/dist/translations/fi.d.ts +2 -0
- package/src/localization/dist/translations/fi.js +3 -1
- package/src/localization/dist/translations/ja.d.ts +2 -0
- package/src/localization/dist/translations/ja.js +3 -1
- package/src/localization/dist/translations/pt.d.ts +2 -0
- package/src/localization/dist/translations/pt.js +3 -1
- package/src/localization/dist/translations/ru.d.ts +2 -0
- package/src/localization/dist/translations/ru.js +3 -1
- package/src/localization/package.json +1 -1
- package/src/localization/src/translations/ca.ts +2 -0
- package/src/localization/src/translations/cn.ts +2 -0
- package/src/localization/src/translations/en.ts +4 -2
- package/src/localization/src/translations/es.ts +2 -0
- package/src/localization/src/translations/fi.ts +2 -0
- package/src/localization/src/translations/ja.ts +2 -0
- package/src/localization/src/translations/pt.ts +2 -0
- package/src/localization/src/translations/ru.ts +2 -0
- package/src/processors/dist/file-handler.js +13 -14
- package/src/processors/package.json +7 -7
- package/src/processors/src/file-handler.ts +0 -1
- package/src/reducers/dist/combined-updaters.js +4 -2
- package/src/reducers/dist/ui-state-updaters.d.ts +0 -10
- package/src/reducers/dist/ui-state-updaters.js +2 -22
- package/src/reducers/dist/ui-state.js +2 -2
- package/src/reducers/dist/vis-state-updaters.d.ts +16 -1
- package/src/reducers/dist/vis-state-updaters.js +79 -45
- package/src/reducers/dist/vis-state.d.ts +4 -0
- package/src/reducers/dist/vis-state.js +2 -2
- package/src/reducers/package.json +16 -16
- package/src/reducers/src/combined-updaters.ts +1 -0
- package/src/reducers/src/ui-state-updaters.ts +0 -24
- package/src/reducers/src/ui-state.ts +1 -3
- package/src/reducers/src/vis-state-updaters.ts +74 -22
- package/src/reducers/src/vis-state.ts +3 -1
- package/src/schemas/dist/vis-state-schema.d.ts +1 -0
- package/src/schemas/dist/vis-state-schema.js +1 -1
- package/src/schemas/package.json +7 -7
- package/src/schemas/src/vis-state-schema.ts +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f9/fc/86ccce4fa2c3e73042785814bc24476cb7cc9531d16a7c2ecb66bfc154f7b35d7416d852faa175d172da177931675cd2ba82e3b7898e8f4bf499921b00c2 +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/ba/31/d609a3a75657c3640471d5a925a4a64689ea3853d9379bdcd675dba816a2 +2 -0
- package/src/styles/package.json +2 -2
- package/src/styles/umd/keplergl.min.js +1 -1
- package/src/table/package.json +5 -5
- package/src/tasks/package.json +2 -2
- package/src/types/package.json +1 -1
- package/src/utils/package.json +4 -4
- package/umd/keplergl.min.js +1350 -1312
|
@@ -56,6 +56,7 @@ exports.setFilterPlot = setFilterPlot;
|
|
|
56
56
|
exports.setFilterView = setFilterView;
|
|
57
57
|
exports.setLayerAnimationTime = setLayerAnimationTime;
|
|
58
58
|
exports.setLayerAnimationTimeConfig = setLayerAnimationTimeConfig;
|
|
59
|
+
exports.setLoadingIndicator = void 0;
|
|
59
60
|
exports.setMapInfo = setMapInfo;
|
|
60
61
|
exports.setPolygonFilterLayer = setPolygonFilterLayer;
|
|
61
62
|
exports.setSelectedFeature = setSelectedFeature;
|
|
@@ -1091,6 +1092,13 @@ function layerFilteredItemsChange(layer, event) {
|
|
|
1091
1092
|
event: event
|
|
1092
1093
|
};
|
|
1093
1094
|
}
|
|
1095
|
+
/**
|
|
1096
|
+
* Sync time filter with layer timeline
|
|
1097
|
+
* @memberof visStateActions
|
|
1098
|
+
* @param idx
|
|
1099
|
+
* @param enable
|
|
1100
|
+
* @return action
|
|
1101
|
+
*/
|
|
1094
1102
|
function syncTimeFilterWithLayerTimeline(idx, enable) {
|
|
1095
1103
|
return {
|
|
1096
1104
|
type: _actionTypes["default"].SYNC_TIME_FILTER_WITH_LAYER_TIMELINE,
|
|
@@ -1098,6 +1106,13 @@ function syncTimeFilterWithLayerTimeline(idx, enable) {
|
|
|
1098
1106
|
enable: enable
|
|
1099
1107
|
};
|
|
1100
1108
|
}
|
|
1109
|
+
/**
|
|
1110
|
+
* Set time filter sync timeline mode
|
|
1111
|
+
* @memberof visStateActions
|
|
1112
|
+
* @param id
|
|
1113
|
+
* @param mode
|
|
1114
|
+
* @return action
|
|
1115
|
+
*/
|
|
1101
1116
|
function setTimeFilterSyncTimelineMode(_ref3) {
|
|
1102
1117
|
var id = _ref3.id,
|
|
1103
1118
|
mode = _ref3.mode;
|
|
@@ -1109,11 +1124,20 @@ function setTimeFilterSyncTimelineMode(_ref3) {
|
|
|
1109
1124
|
}
|
|
1110
1125
|
/**
|
|
1111
1126
|
* Called when a new dataset is created successfully via async table methods
|
|
1127
|
+
* @memberof visStateActions
|
|
1112
1128
|
* @param payload
|
|
1113
1129
|
* @param payload.results - results of promises.allSettlted
|
|
1114
1130
|
* @returns
|
|
1115
1131
|
*/
|
|
1116
1132
|
var createNewDatasetSuccess = exports.createNewDatasetSuccess = (0, _toolkit.createAction)(_actionTypes["default"].CREATE_NEW_DATASET_SUCCESS);
|
|
1133
|
+
/**
|
|
1134
|
+
* Change of number of active loading items, used to render loading indicator.
|
|
1135
|
+
* @memberof visStateActions
|
|
1136
|
+
* @param payload
|
|
1137
|
+
* @param payload.change Change of number of active loading actions.
|
|
1138
|
+
* @public
|
|
1139
|
+
*/
|
|
1140
|
+
var setLoadingIndicator = exports.setLoadingIndicator = (0, _toolkit.createAction)(_actionTypes["default"].SET_LOADING_INDICATOR);
|
|
1117
1141
|
|
|
1118
1142
|
/**
|
|
1119
1143
|
* This declaration is needed to group actions in docs
|
|
@@ -1129,4 +1153,4 @@ var createNewDatasetSuccess = exports.createNewDatasetSuccess = (0, _toolkit.cre
|
|
|
1129
1153
|
// @ts-ignore
|
|
1130
1154
|
var visStateActions = null;
|
|
1131
1155
|
/* eslint-enable @typescript-eslint/no-unused-vars */
|
|
1132
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0aW9uVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl90b29sa2l0IiwiYXBwbHlMYXllckNvbmZpZyIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJ0eXBlIiwiQWN0aW9uVHlwZXMiLCJBUFBMWV9MQVlFUl9DT05GSUciLCJsYXllckNvbmZpZ0NoYW5nZSIsIm9sZExheWVyIiwibmV3Q29uZmlnIiwiTEFZRVJfQ09ORklHX0NIQU5HRSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eSIsImxheWVySWQiLCJpc1Zpc2libGUiLCJzcGxpdE1hcElkIiwiTEFZRVJfVE9HR0xFX1ZJU0lCSUxJVFkiLCJsYXllclRleHRMYWJlbENoYW5nZSIsImlkeCIsInByb3AiLCJ2YWx1ZSIsIkxBWUVSX1RFWFRfTEFCRUxfQ0hBTkdFIiwibGF5ZXJTZXRJc1ZhbGlkIiwiaXNWYWxpZCIsIkxBWUVSX1NFVF9JU19WQUxJRCIsImxheWVyVHlwZUNoYW5nZSIsIm5ld1R5cGUiLCJMQVlFUl9UWVBFX0NIQU5HRSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImNoYW5uZWwiLCJuZXdWaXNDb25maWciLCJMQVlFUl9WSVNVQUxfQ0hBTk5FTF9DSEFOR0UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsIkxBWUVSX1ZJU19DT05GSUdfQ0hBTkdFIiwibGF5ZXJDb2xvclVJQ2hhbmdlIiwiTEFZRVJfQ09MT1JfVUlfQ0hBTkdFIiwidXBkYXRlTGF5ZXJCbGVuZGluZyIsIm1vZGUiLCJVUERBVEVfTEFZRVJfQkxFTkRJTkciLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmciLCJVUERBVEVfT1ZFUkxBWV9CTEVORElORyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlIiwiY29uZmlnIiwiSU5URVJBQ1RJT05fQ09ORklHX0NIQU5HRSIsImFwcGx5RmlsdGVyQ29uZmlnIiwiZmlsdGVySWQiLCJuZXdGaWx0ZXIiLCJBUFBMWV9GSUxURVJfQ09ORklHIiwic2V0RmlsdGVyIiwidmFsdWVJbmRleCIsIlNFVF9GSUxURVIiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lIiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRSIsInNldEZpbHRlckFuaW1hdGlvbldpbmRvdyIsIl9yZWYiLCJpZCIsImFuaW1hdGlvbldpbmRvdyIsIlNFVF9GSUxURVJfQU5JTUFUSU9OX1dJTkRPVyIsImFkZEZpbHRlciIsImRhdGFJZCIsIkFERF9GSUxURVIiLCJjcmVhdGVPclVwZGF0ZUZpbHRlciIsImZpZWxkIiwiQ1JFQVRFX09SX1VQREFURV9GSUxURVIiLCJhZGRMYXllciIsImRhdGFzZXRJZCIsIkFERF9MQVlFUiIsInJlb3JkZXJMYXllciIsIm9yZGVyIiwiUkVPUkRFUl9MQVlFUiIsInJlbW92ZUZpbHRlciIsIlJFTU9WRV9GSUxURVIiLCJyZW1vdmVMYXllciIsIlJFTU9WRV9MQVlFUiIsImR1cGxpY2F0ZUxheWVyIiwiRFVQTElDQVRFX0xBWUVSIiwiYWRkRWZmZWN0IiwiQUREX0VGRkVDVCIsInJlb3JkZXJFZmZlY3QiLCJSRU9SREVSX0VGRkVDVCIsInJlbW92ZUVmZmVjdCIsIlJFTU9WRV9FRkZFQ1QiLCJ1cGRhdGVFZmZlY3QiLCJwcm9wcyIsIlVQREFURV9FRkZFQ1QiLCJyZW1vdmVEYXRhc2V0IiwiUkVNT1ZFX0RBVEFTRVQiLCJzaG93RGF0YXNldFRhYmxlIiwiU0hPV19EQVRBU0VUX1RBQkxFIiwidXBkYXRlVGFibGVDb2xvciIsIm5ld0NvbG9yIiwiVVBEQVRFX1RBQkxFX0NPTE9SIiwic29ydFRhYmxlQ29sdW1uIiwiY29sdW1uIiwiU09SVF9UQUJMRV9DT0xVTU4iLCJwaW5UYWJsZUNvbHVtbiIsIlBJTl9UQUJMRV9DT0xVTU4iLCJjb3B5VGFibGVDb2x1bW4iLCJDT1BZX1RBQkxFX0NPTFVNTiIsInNldENvbHVtbkRpc3BsYXlGb3JtYXQiLCJmb3JtYXRzIiwiU0VUX0NPTFVNTl9ESVNQTEFZX0ZPUk1BVCIsInVwZGF0ZVZpc0RhdGEiLCJkYXRhc2V0cyIsIm9wdGlvbnMiLCJVUERBVEVfVklTX0RBVEEiLCJyZW5hbWVEYXRhc2V0IiwibGFiZWwiLCJSRU5BTUVfREFUQVNFVCIsInVwZGF0ZURhdGFzZXRQcm9wcyIsIlVQREFURV9EQVRBU0VUX1BST1BTIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uIiwiVE9HR0xFX0ZJTFRFUl9BTklNQVRJT04iLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZCIsInNwZWVkIiwiVVBEQVRFX0ZJTFRFUl9BTklNQVRJT05fU1BFRUQiLCJzZXRBbmltYXRpb25Db25maWciLCJTRVRfQU5JTUFUSU9OX0NPTkZJRyIsInNldExheWVyQW5pbWF0aW9uVGltZSIsIlNFVF9MQVlFUl9BTklNQVRJT05fVElNRSIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWQiLCJVUERBVEVfTEFZRVJfQU5JTUFUSU9OX1NQRUVEIiwidG9nZ2xlTGF5ZXJBbmltYXRpb24iLCJUT0dHTEVfTEFZRVJfQU5JTUFUSU9OIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sIiwiVE9HR0xFX0xBWUVSX0FOSU1BVElPTl9DT05UUk9MIiwic2V0RmlsdGVyVmlldyIsInZpZXciLCJTRVRfRklMVEVSX1ZJRVciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlIiwiVE9HR0xFX0ZJTFRFUl9GRUFUVVJFIiwib25MYXllckhvdmVyIiwiaW5mbyIsIm1hcEluZGV4IiwiTEFZRVJfSE9WRVIiLCJvbkxheWVyQ2xpY2siLCJMQVlFUl9DTElDSyIsIm9uTWFwQ2xpY2siLCJNQVBfQ0xJQ0siLCJvbk1vdXNlTW92ZSIsImV2dCIsIk1PVVNFX01PVkUiLCJ0b2dnbGVMYXllckZvck1hcCIsIlRPR0dMRV9MQVlFUl9GT1JfTUFQIiwic2V0RmlsdGVyUGxvdCIsIm5ld1Byb3AiLCJTRVRfRklMVEVSX1BMT1QiLCJzZXRNYXBJbmZvIiwiU0VUX01BUF9JTkZPIiwibG9hZEZpbGVzIiwiZmlsZXMiLCJvbkZpbmlzaCIsIkxPQURfRklMRVMiLCJsb2FkTmV4dEZpbGUiLCJMT0FEX05FWFRfRklMRSIsImxvYWRGaWxlc1N1Y2Nlc3MiLCJyZXN1bHQiLCJMT0FEX0ZJTEVTX1NVQ0NFU1MiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzIiwiX3JlZjIiLCJmaWxlTmFtZSIsImZpbGVDYWNoZSIsIkxPQURfRklMRV9TVEVQX1NVQ0NFU1MiLCJsb2FkRmlsZXNFcnIiLCJlcnJvciIsIkxPQURfRklMRVNfRVJSIiwic2V0RmVhdHVyZXMiLCJmZWF0dXJlcyIsIlNFVF9GRUFUVVJFUyIsInNldFBvbHlnb25GaWx0ZXJMYXllciIsImxheWVyIiwiZmVhdHVyZSIsIlNFVF9QT0xZR09OX0ZJTFRFUl9MQVlFUiIsInNldFNlbGVjdGVkRmVhdHVyZSIsInNlbGVjdGlvbkNvbnRleHQiLCJTRVRfU0VMRUNURURfRkVBVFVSRSIsImRlbGV0ZUZlYXR1cmUiLCJERUxFVEVfRkVBVFVSRSIsInNldEVkaXRvck1vZGUiLCJTRVRfRURJVE9SX01PREUiLCJhcHBseUNQVUZpbHRlciIsIkFQUExZX0NQVV9GSUxURVIiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5IiwiVE9HR0xFX0VESVRPUl9WSVNJQklMSVRZIiwibmV4dEZpbGVCYXRjaCIsInBheWxvYWQiLCJORVhUX0ZJTEVfQkFUQ0giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJQUk9DRVNTX0ZJTEVfQ09OVEVOVCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyIsIlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UiLCJldmVudCIsIkxBWUVSX0ZJTFRFUkVEX0lURU1TX0NIQU5HRSIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmUiLCJlbmFibGUiLCJTWU5DX1RJTUVfRklMVEVSX1dJVEhfTEFZRVJfVElNRUxJTkUiLCJzZXRUaW1lRmlsdGVyU3luY1RpbWVsaW5lTW9kZSIsIl9yZWYzIiwiU1lOQ19USU1FX0ZJTFRFUl9USU1FTElORV9NT0RFIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MiLCJleHBvcnRzIiwiY3JlYXRlQWN0aW9uIiwiQ1JFQVRFX05FV19EQVRBU0VUX1NVQ0NFU1MiLCJ2aXNTdGF0ZUFjdGlvbnMiXSwic291cmNlcyI6WyIuLi9zcmMvdmlzLXN0YXRlLWFjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gdmlzLXN0YXRlLXJlZHVjZXJcbmltcG9ydCB7UGlja0luZm99IGZyb20gJ0BkZWNrLmdsL2NvcmUvbGliL2RlY2snO1xuaW1wb3J0IHtkZWZhdWx0IGFzIEFjdGlvblR5cGVzfSBmcm9tICcuL2FjdGlvbi10eXBlcyc7XG5pbXBvcnQge0ZpbGVDYWNoZUl0ZW19IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5pbXBvcnQge0xheWVyLCBMYXllckJhc2VDb25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7S2VwbGVyVGFibGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtcbiAgQWRkRGF0YVRvTWFwUGF5bG9hZCxcbiAgVmFsdWVPZixcbiAgTWVyZ2UsXG4gIFJHQkNvbG9yLFxuICBOZXN0ZWRQYXJ0aWFsLFxuICBMYXllclZpc0NvbmZpZyxcbiAgQ29sb3JVSSxcbiAgRmVhdHVyZSxcbiAgRmVhdHVyZVNlbGVjdGlvbkNvbnRleHQsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBGaWx0ZXIsXG4gIFBhcnNlZENvbmZpZyxcbiAgUGFyc2VkTGF5ZXIsXG4gIEVmZmVjdFByb3BzUGFydGlhbCxcbiAgU3luY1RpbWVsaW5lTW9kZSxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBGaWx0ZXJBbmltYXRpb25Db25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge2NyZWF0ZUFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbi8vIFRPRE8gLSBpbXBvcnQgTG9hZGVyT2JqZWN0IHR5cGUgZnJvbSBAbG9hZGVycy5nbC9jb3JlIHdoZW4gc3VwcG9ydGVkXG4vLyBUT0RPIC0gaW1wb3J0IExvYWRPcHRpb25zIHR5cGUgZnJvbSBAbG9hZGVycy5nbC9jb3JlIHdoZW4gc3VwcG9ydGVkXG5cbmV4cG9ydCB0eXBlIEFwcGx5TGF5ZXJDb25maWdVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcklkOiBzdHJpbmc7XG4gIG5ld0xheWVyQ29uZmlnOiBQYXJzZWRMYXllcjtcbiAgbGF5ZXJJbmRleD86IG51bWJlcjtcbn07XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQHBhcmFtIG9sZExheWVySWQgLSBsYXllciBpZCB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3TGF5ZXJDb25maWcgLSBuZXcgbGF5ZXIgY29uZmlnXG4gKiBAcGFyYW0gbGF5ZXJJbmRleCAtIChPcHRpb25hbCkgSW5kZXggb2YgdGhlIGxheWVyIHRvIGJlIHVwZGF0ZWQgKGNhbiBiZSB1c2VmdWwgaW4gc29tZSBjYXNlcywgYmVjYXVzZVxuICogICAgICAgICAgICAgICAgICAgICB0aGUgbGF5ZXIgaWQgbWlnaHQgY2hhbmdlIGR1cmluZyB1cGRhdGUsIGUuZy4gd2hlbiB0aGUgdHlwZSBvZiB0aGUgbGF5ZXIgY2hhbmdlcylcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMYXllckNvbmZpZyhcbiAgb2xkTGF5ZXJJZDogc3RyaW5nLFxuICBuZXdMYXllckNvbmZpZzogUGFyc2VkTGF5ZXIsXG4gIGxheWVySW5kZXg/OiBudW1iZXJcbik6IE1lcmdlPEFwcGx5TGF5ZXJDb25maWdVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFQUExZX0xBWUVSX0NPTkZJR30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BUFBMWV9MQVlFUl9DT05GSUcsXG4gICAgb2xkTGF5ZXJJZCxcbiAgICBuZXdMYXllckNvbmZpZyxcbiAgICBsYXllckluZGV4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIExheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJbJ2NvbmZpZyddPjtcbn07XG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBuZXdDb25maWcgLSBuZXcgY29uZmlnIHRvIGJlIG1lcmdlZCB3aXRoIG9sZCBjb25maWdcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2UoXG4gIG9sZExheWVyOiBMYXllcixcbiAgbmV3Q29uZmlnOiBQYXJ0aWFsPExheWVyQmFzZUNvbmZpZz5cbik6IE1lcmdlPExheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9DT05GSUdfQ0hBTkdFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX0NPTkZJR19DSEFOR0UsXG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIExheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGxheWVySWQ6IHN0cmluZztcbiAgaXNWaXNpYmxlOiBib29sZWFuO1xuICBzcGxpdE1hcElkPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdmlzaWJpbGl0eSBkZXBlbmRzIG9uIHNwbGl0TWFwIHNpbmdsZSBvciBkdWFsXG4gKiBAcGFyYW0gbGF5ZXJJZCAtIGxheWVySWQgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIGlzVmlzaWJsZSAtIHdoZXRoZXIgdGhpcyBsYXllciBpcyB2aXNpYmxlIGdsb2JhbGx5XG4gKiBAcGFyYW0gc3BsaXRNYXBJZCAtIGlkIGZvciB0aGlzIHNwbGl0TWFwXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVG9nZ2xlVmlzaWJpbGl0eShcbiAgbGF5ZXJJZDogc3RyaW5nLFxuICBpc1Zpc2libGU6IGJvb2xlYW4sXG4gIHNwbGl0TWFwSWQ/OiBzdHJpbmdcbik6IE1lcmdlPExheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfVE9HR0xFX1ZJU0lCSUxJVFl9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfVE9HR0xFX1ZJU0lCSUxJVFksXG4gICAgbGF5ZXJJZCxcbiAgICBpc1Zpc2libGUsXG4gICAgc3BsaXRNYXBJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBMYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG9sZExheWVyOiBMYXllcjtcbiAgaWR4OiBudW1iZXIgfCAnYWxsJztcbiAgcHJvcDogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdGV4dCBsYWJlbFxuICogQHBhcmFtIG9sZExheWVyIC0gbGF5ZXIgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIGlkeCAtYGlkeGAgb2YgdGV4dCBsYWJlbCB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gcHJvcCAtIGBwcm9wYCBvZiB0ZXh0IGxhYmVsLCBlLGcsIGBhbmNob3JgLCBgYWxpZ25tZW50YCwgYGNvbG9yYCwgYHNpemVgLCBgZmllbGRgLCBgb3V0bGluZVdpZHRoYCwgYG91dGxpbmVDb2xvcmBcbiAqIEBwYXJhbSB2YWx1ZSAtIG5ldyB2YWx1ZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBpZHg6IG51bWJlciB8ICdhbGwnLFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnlcbik6IE1lcmdlPExheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9URVhUX0xBQkVMX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9URVhUX0xBQkVMX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZVxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBMYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIGlzVmFsaWQ6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdmFsdWUgb2YgaXNWYWxpZCBmbGFnIGZvciBhIGxheWVyLlxuICogVGhlIGFjdGlvbiBhbHNvIHVwZGF0ZXMgdmlzaWJpbGl0eSBvZiB0aGUgbGF5ZXIgYmFzZWQgb24gaXNWYWxpZC5cbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBpc1ZhbGlkIC0gbmV3IHZhbHVlIGZvciBpc1ZhbGlkIGZsYWdcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJTZXRJc1ZhbGlkKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIGlzVmFsaWQ6IGJvb2xlYW5cbik6IE1lcmdlPExheWVyU2V0SXNWYWxpZFVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfU0VUX0lTX1ZBTElEfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX1NFVF9JU19WQUxJRCxcbiAgICBvbGRMYXllcixcbiAgICBpc1ZhbGlkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG9sZExheWVyOiBMYXllcjtcbiAgbmV3VHlwZTogc3RyaW5nO1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQHBhcmFtIG9sZExheWVyIC0gbGF5ZXIgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIG5ld1R5cGUgLSBuZXcgdHlwZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclR5cGVDaGFuZ2UoXG4gIG9sZExheWVyOiBMYXllcixcbiAgbmV3VHlwZTogc3RyaW5nXG4pOiBNZXJnZTxMYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX1RZUEVfQ0hBTkdFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX1RZUEVfQ0hBTkdFLFxuICAgIG9sZExheWVyLFxuICAgIG5ld1R5cGVcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIExheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG9sZExheWVyOiBMYXllcjtcbiAgbmV3Q29uZmlnOiBQYXJ0aWFsPExheWVyWydjb25maWcnXT47XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgbmV3VmlzQ29uZmlnPzogUGFydGlhbDxMYXllclZpc0NvbmZpZz47XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdmlzdWFsIGNoYW5uZWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBuZXdDb25maWcgLSBuZXcgdmlzdWFsIGNoYW5uZWwgY29uZmlnXG4gKiBAcGFyYW0gY2hhbm5lbCAtIGNoYW5uZWwgdG8gYmUgdXBkYXRlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UoXG4gIG9sZExheWVyOiBMYXllcixcbiAgbmV3Q29uZmlnOiBQYXJ0aWFsPExheWVyQmFzZUNvbmZpZz4sXG4gIGNoYW5uZWw6IHN0cmluZyxcbiAgbmV3VmlzQ29uZmlnPzogUGFydGlhbDxMYXllclZpc0NvbmZpZz5cbik6IE1lcmdlPFxuICBMYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX1ZJU1VBTF9DSEFOTkVMX0NIQU5HRX1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX1ZJU1VBTF9DSEFOTkVMX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWcsXG4gICAgY2hhbm5lbCxcbiAgICBuZXdWaXNDb25maWdcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIExheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBuZXdWaXNDb25maWc6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+O1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIGB2aXNDb25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3VmlzQ29uZmlnIC0gbmV3IHZpc0NvbmZpZyBhcyBhIGtleSB2YWx1ZSBtYXA6IGUuZy4gYHtvcGFjaXR5OiAwLjh9YFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc0NvbmZpZ0NoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBuZXdWaXNDb25maWc6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+XG4pOiBNZXJnZTxMYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfVklTX0NPTkZJR19DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfVklTX0NPTkZJR19DSEFOR0UsXG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3VmlzQ29uZmlnXG4gIH07XG59XG5leHBvcnQgdHlwZSBMYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIHByb3A6IHN0cmluZztcbiAgbmV3Q29uZmlnOiBOZXN0ZWRQYXJ0aWFsPENvbG9yVUk+O1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGNvbG9yIHBhbGV0dGUgdWkgZm9yIGxheWVyIGNvbG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gcHJvcCAtIHdoaWNoIGNvbG9yIHByb3BcbiAqIEBwYXJhbSBuZXdDb25maWcgLSB0byBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb2xvclVJQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIHByb3A6IHN0cmluZyxcbiAgbmV3Q29uZmlnOiBOZXN0ZWRQYXJ0aWFsPENvbG9yVUk+XG4pOiBNZXJnZTxMYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX0NPTE9SX1VJX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9DT0xPUl9VSV9DSEFOR0UsXG4gICAgb2xkTGF5ZXIsXG4gICAgcHJvcCxcbiAgICBuZXdDb25maWdcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb24gPSB7XG4gIG1vZGU6ICdhZGRpdGl2ZScgfCAnbm9ybWFsJyB8ICdzdWJ0cmFjdGl2ZSc7XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG1vZGUgb25lIG9mIGBhZGRpdGl2ZWAsIGBub3JtYWxgIGFuZCBgc3VidHJhY3RpdmVgXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxheWVyQmxlbmRpbmcoXG4gIG1vZGU6ICdhZGRpdGl2ZScgfCAnbm9ybWFsJyB8ICdzdWJ0cmFjdGl2ZSdcbik6IE1lcmdlPFVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9MQVlFUl9CTEVORElOR30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfTEFZRVJfQkxFTkRJTkcsXG4gICAgbW9kZVxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyQWN0aW9uID0ge1xuICBtb2RlOiAnc2NyZWVuJyB8ICdub3JtYWwnIHwgJ2Rhcmtlbic7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBtb2RlIG9uZSBvZiBgc2NyZWVuYCwgYG5vcm1hbGAgYW5kIGBkYXJrZW5gXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZU92ZXJsYXlCbGVuZGluZyhcbiAgbW9kZTogJ3NjcmVlbicgfCAnbm9ybWFsJyB8ICdkYXJrZW4nXG4pOiBNZXJnZTxVcGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9PVkVSTEFZX0JMRU5ESU5HfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9PVkVSTEFZX0JMRU5ESU5HLFxuICAgIG1vZGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBjb25maWc6IFZhbHVlT2Y8SW50ZXJhY3Rpb25Db25maWc+O1xufTtcbi8qKlxuICogVXBkYXRlIGBpbnRlcmFjdGlvbkNvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBjb25maWcgLSBuZXcgY29uZmlnIGFzIGtleSB2YWx1ZSBtYXA6IGB7dG9vbHRpcDoge2VuYWJsZWQ6IHRydWV9fWBcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJhY3Rpb25Db25maWdDaGFuZ2UoXG4gIGNvbmZpZzogVmFsdWVPZjxJbnRlcmFjdGlvbkNvbmZpZz5cbik6IE1lcmdlPFxuICBJbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuSU5URVJBQ1RJT05fQ09ORklHX0NIQU5HRX1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLklOVEVSQUNUSU9OX0NPTkZJR19DSEFOR0UsXG4gICAgY29uZmlnXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlckFjdGlvbiA9IHtcbiAgZmlsdGVySWQ6IHN0cmluZztcbiAgbmV3RmlsdGVyOiBGaWx0ZXI7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgY29uZmlnXG4gKiBAcGFyYW0gZmlsdGVySWQgLSBpZCBvZiB0aGUgZmlsdGVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBuZXdGaWx0ZXIgLSBuZXcgZmlsdGVyIGNvbmZpZ1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlckNvbmZpZyhcbiAgZmlsdGVySWQ6IHN0cmluZyxcbiAgbmV3RmlsdGVyOiBGaWx0ZXJcbik6IE1lcmdlPEFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5BUFBMWV9GSUxURVJfQ09ORklHfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkFQUExZX0ZJTFRFUl9DT05GSUcsXG4gICAgZmlsdGVySWQsXG4gICAgbmV3RmlsdGVyXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZpbHRlclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBwcm9wOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgdmFsdWU6IGFueTtcbiAgdmFsdWVJbmRleD86IG51bWJlcjtcbn07XG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLWBpZHhgIG9mIGZpbHRlciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gcHJvcCAtIGBwcm9wYCBvZiBmaWx0ZXIsIGUsZywgYGRhdGFJZGAsIGBuYW1lYCwgYHZhbHVlYFxuICogICAgICAgICAgICAgICAgb3IgYW4gYXJyYXkgZS5nLiBbJ2lkeCcsICduYW1lJ10uIGluIHRoYXQgY2FzZSB0aGUgdmFsdWVcbiAqICAgICAgICAgICAgICAgIHNob3VsZCBhbHNvIGJlIGFuIGFycmF5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyAoYnkgaW5kZXgpXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IC0gZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcihcbiAgaWR4OiBudW1iZXIsXG4gIHByb3A6IHN0cmluZyB8IHN0cmluZ1tdLFxuICB2YWx1ZTogYW55LFxuICB2YWx1ZUluZGV4PzogbnVtYmVyXG4pOiBNZXJnZTxTZXRGaWx0ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUixcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZSxcbiAgICB2YWx1ZUluZGV4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgcHJvcDogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xuICB2YWx1ZUluZGV4PzogbnVtYmVyO1xufTtcbi8qKlxuICogU2FtZSBhcyBVcGRhdGUgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IC1gaWR4YCBvZiBmaWx0ZXIgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIHByb3AgLSBgcHJvcGAgb2YgZmlsdGVyLCBlLGcsIGBkYXRhSWRgLCBgbmFtZWAsIGB2YWx1ZWBcbiAqIEBwYXJhbSB2YWx1ZSAtIG5ldyB2YWx1ZVxuICogQHBhcmFtIHZhbHVlSW5kZXggLSBkYXRhSWQgaW5kZXhcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZShcbiAgaWR4OiBudW1iZXIsXG4gIHByb3A6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgdmFsdWVJbmRleD86IG51bWJlclxuKTogTWVyZ2U8XG4gIFNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9GSUxURVJfQU5JTUFUSU9OX1RJTUV9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX0FOSU1BVElPTl9USU1FLFxuICAgIGlkeCxcbiAgICBwcm9wLFxuICAgIHZhbHVlLFxuICAgIHZhbHVlSW5kZXhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlckFjdGlvbiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYW5pbWF0aW9uV2luZG93OiBzdHJpbmc7XG59O1xuLyoqXG4gKiBTYW1lIGFzIFVwZGF0ZSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvbldpbmRvdyh7XG4gIGlkLFxuICBhbmltYXRpb25XaW5kb3dcbn06IFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24pOiBNZXJnZTxcbiAgU2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX0FOSU1BVElPTl9XSU5ET1d9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX0FOSU1BVElPTl9XSU5ET1csXG4gICAgaWQsXG4gICAgYW5pbWF0aW9uV2luZG93XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEFkZEZpbHRlclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZD86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbDtcbiAgaWQ/OiBzdHJpbmc7XG59O1xuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkIC0gZGF0YXNldCBgaWRgIHRoaXMgbmV3IGZpbHRlciBpcyBhc3NvY2lhdGVkIHdpdGhcbiAqIEBwYXJhbSBpZCAtIGBpZGAgZm9yIHRoZSBuZXcgZmlsdGVyXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEZpbHRlcihcbiAgZGF0YUlkOiBzdHJpbmcgfCBudWxsLFxuICBpZD86IHN0cmluZ1xuKTogTWVyZ2U8QWRkRmlsdGVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5BRERfRklMVEVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkFERF9GSUxURVIsXG4gICAgZGF0YUlkLFxuICAgIGlkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIENyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGRhdGFJZD86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBmaWVsZD86IHN0cmluZyB8IHN0cmluZ1tdO1xuICB2YWx1ZT86IGFueTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZXMgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBkYXRhSWQgLSBkYXRhc2V0IGBpZGAgdGhpcyBuZXcgZmlsdGVyIGlzIGFzc29jaWF0ZWQgd2l0aFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPclVwZGF0ZUZpbHRlcihcbiAgaWQ/OiBzdHJpbmcsXG4gIGRhdGFJZD86IHN0cmluZyB8IHN0cmluZ1tdLFxuICBmaWVsZD86IHN0cmluZyB8IHN0cmluZ1tdLFxuICB2YWx1ZT86IGFueVxuKTogTWVyZ2U8Q3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkNSRUFURV9PUl9VUERBVEVfRklMVEVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkNSRUFURV9PUl9VUERBVEVfRklMVEVSLFxuICAgIGlkLFxuICAgIGRhdGFJZCxcbiAgICBmaWVsZCxcbiAgICB2YWx1ZVxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBZGRMYXllclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGNvbmZpZz86IG9iamVjdDtcbiAgZGF0YXNldElkPzogc3RyaW5nO1xufTtcbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gY29uZmlnIC0gbmV3IGxheWVyIGNvbmZpZ1xuICogQHBhcmFtIGRhdGFzZXRJZCAtIGRhdGFzZXQgaWQgdXNlZCBmb3IgY3JlYXRpbmcgYW4gZW1wdHkgbGF5ZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkTGF5ZXIoXG4gIGNvbmZpZz86IG9iamVjdCxcbiAgZGF0YXNldElkPzogc3RyaW5nXG4pOiBNZXJnZTxBZGRMYXllclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQUREX0xBWUVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkFERF9MQVlFUixcbiAgICBjb25maWcsXG4gICAgZGF0YXNldElkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb24gPSB7XG4gIG9yZGVyOiBzdHJpbmdbXTtcbn07XG4vKipcbiAqIFJlb3JkZXIgbGF5ZXIsIG9yZGVyIGlzIGFuIGFycmF5IG9mIGxheWVyIGluZGV4ZXMsIGluZGV4IDAgd2lsbCBiZSB0aGUgb25lIGF0IHRoZSBib3R0b21cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBvcmRlciBhbiBhcnJheSBvZiBsYXllciBpbmRleGVzXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogYnJpbmcgYGxheWVyc1sxXWAgYmVsb3cgYGxheWVyc1swXWAsIHRoZSBzZXF1ZW5jZSBsYXllcnMgd2lsbCBiZSByZW5kZXJlZCBpcyBgbGF5ZXJzWzFdLmlkYCwgYGxheWVyc1swXS5pZGAsIGBsYXllcnNbMl0uaWRgLCBgbGF5ZXJzWzNdLmlkYC5cbiAqIGBsYXllcnNbMV1gIHdpbGwgYmUgYXQgdGhlIGJvdHRvbSwgYGxheWVyc1sxM11gIHdpbGwgYmUgYXQgdGhlIHRvcC5cbiAqIHRoaXMucHJvcHMuZGlzcGF0Y2gocmVvcmRlckxheWVyKFtgbGF5ZXJzWzFdLmlkYCwgYGxheWVyc1swXS5pZGAsIGBsYXllcnNbMl0uaWRgLCBgbGF5ZXJzWzNdLmlkYF0pKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlb3JkZXJMYXllcihcbiAgb3JkZXI6IHN0cmluZ1tdXG4pOiBNZXJnZTxSZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlJFT1JERVJfTEFZRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVPUkRFUl9MQVlFUixcbiAgICBvcmRlclxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFJlbW92ZSBhIGZpbHRlciBmcm9tIGB2aXNTdGF0ZS5maWx0ZXJzYCwgb25jZSBhIGZpbHRlciBpcyByZW1vdmVkLCBkYXRhIHdpbGwgYmUgcmUtZmlsdGVyZWQgYW5kIGxheWVyIHdpbGwgYmUgdXBkYXRlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCBpZHggb2YgZmlsdGVyIHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRmlsdGVyKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8UmVtb3ZlRmlsdGVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5SRU1PVkVfRklMVEVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFTU9WRV9GSUxURVIsXG4gICAgaWR4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFJlbW92ZUxheWVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaWQ6IHN0cmluZztcbn07XG4vKipcbiAqIFJlbW92ZSBhIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWQgaWR4IG9mIGxheWVyIHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXIoXG4gIGlkOiBzdHJpbmdcbik6IE1lcmdlPFJlbW92ZUxheWVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5SRU1PVkVfTEFZRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVNT1ZFX0xBWUVSLFxuICAgIGlkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIER1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaWQ6IHN0cmluZztcbn07XG4vKipcbiAqIER1cGxpY2F0ZSBhIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWQgaWQgb2YgbGF5ZXIgdG8gYmUgZHVwbGljYXRlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkdXBsaWNhdGVMYXllcihcbiAgaWQ6IHN0cmluZ1xuKTogTWVyZ2U8RHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkRVUExJQ0FURV9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5EVVBMSUNBVEVfTEFZRVIsXG4gICAgaWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQWRkRWZmZWN0VXBkYXRlckFjdGlvbiA9IHtcbiAgY29uZmlnOiBFZmZlY3RQcm9wc1BhcnRpYWw7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBjb25maWcgLSBuZXcgZWZmZWN0IGNvbmZpZ1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFZmZlY3QoXG4gIGNvbmZpZzogRWZmZWN0UHJvcHNQYXJ0aWFsXG4pOiBNZXJnZTxBZGRFZmZlY3RVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFERF9FRkZFQ1R9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQUREX0VGRkVDVCxcbiAgICBjb25maWdcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVvcmRlckVmZmVjdFVwZGF0ZXJBY3Rpb24gPSB7XG4gIG9yZGVyOiBzdHJpbmdbXTtcbn07XG5cbi8qKlxuICogUmVvcmRlciBlZmZlY3RzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb3JkZXIgYW4gYXJyYXkgb2YgZWZmZWN0IGlkc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW9yZGVyRWZmZWN0KFxuICBvcmRlcjogc3RyaW5nW11cbik6IE1lcmdlPFJlb3JkZXJFZmZlY3RVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlJFT1JERVJfRUZGRUNUfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFT1JERVJfRUZGRUNULFxuICAgIG9yZGVyXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFJlbW92ZUVmZmVjdFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZCBpZHggb2YgdGhlIGVmZmVjdCB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVmZmVjdChcbiAgaWQ6IHN0cmluZ1xuKTogTWVyZ2U8UmVtb3ZlRWZmZWN0VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5SRU1PVkVfRUZGRUNUfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFTU9WRV9FRkZFQ1QsXG4gICAgaWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlRWZmZWN0VXBkYXRlckFjdGlvbiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgcHJvcHM6IEVmZmVjdFByb3BzUGFydGlhbDtcbn07XG5cbi8qKlxuICogVXBkYXRlIGFuIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIHByb3BzIGlkeCBvZiB0aGUgZWZmZWN0IHRvIGJlIHVwZGF0ZWQgd2l0aCBzcGVjaWZpZWQgcHJvcHNcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRWZmZWN0KFxuICBpZDogc3RyaW5nLFxuICBwcm9wczogRWZmZWN0UHJvcHNQYXJ0aWFsXG4pOiBNZXJnZTxVcGRhdGVFZmZlY3RVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9FRkZFQ1R9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVVBEQVRFX0VGRkVDVCxcbiAgICBpZCxcbiAgICBwcm9wc1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCBkYXRhc2V0IGlkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXQoXG4gIGRhdGFJZDogc3RyaW5nXG4pOiBNZXJnZTxSZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5SRU1PVkVfREFUQVNFVH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU1PVkVfREFUQVNFVCxcbiAgICBkYXRhSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xufTtcbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBkYXRhSWQgZGF0YXNldCBpZCB0byBzaG93IGluIHRhYmxlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dEYXRhc2V0VGFibGUoXG4gIGRhdGFJZDogc3RyaW5nXG4pOiBNZXJnZTxTaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TSE9XX0RBVEFTRVRfVEFCTEV9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0hPV19EQVRBU0VUX1RBQkxFLFxuICAgIGRhdGFJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgbmV3Q29sb3I6IFJHQkNvbG9yO1xufTtcbi8qKlxuICogVXBkYXRlIGRhdGFzZXQgY29sb3IgdG8gY3VzdG9tIGJ5IG1lYW5zIG9mIGNvbG9yIHBpY2tlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCBkYXRhc2V0IGBpZGAgdGhpcyBjdXN0b20gY29sb3IgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcGFyYW0gbmV3Q29sb3IgY3VzdG9tIGNvbG9yIGluIFJHQmZvcm1hdFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUYWJsZUNvbG9yKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgbmV3Q29sb3I6IFJHQkNvbG9yXG4pOiBNZXJnZTxVcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9UQUJMRV9DT0xPUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfVEFCTEVfQ09MT1IsXG4gICAgZGF0YUlkLFxuICAgIG5ld0NvbG9yXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBjb2x1bW46IHN0cmluZztcbiAgbW9kZT86IHN0cmluZztcbn07XG4vKipcbiAqIFNvcnQgZGF0YXNldCBjb2x1bW4sIGZvciB0YWJsZSBkaXNwbGF5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcGFyYW0gbW9kZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW4oXG4gIGRhdGFJZDogc3RyaW5nLFxuICBjb2x1bW46IHN0cmluZyxcbiAgbW9kZT86IHN0cmluZ1xuKTogTWVyZ2U8U29ydFRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TT1JUX1RBQkxFX0NPTFVNTn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TT1JUX1RBQkxFX0NPTFVNTixcbiAgICBkYXRhSWQsXG4gICAgY29sdW1uLFxuICAgIG1vZGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUGluVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBQaW4gZGF0YXNldCBjb2x1bW4sIGZvciB0YWJsZSBkaXNwbGF5XG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1uKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29sdW1uOiBzdHJpbmdcbik6IE1lcmdlPFBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5QSU5fVEFCTEVfQ09MVU1OfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlBJTl9UQUJMRV9DT0xVTU4sXG4gICAgZGF0YUlkLFxuICAgIGNvbHVtblxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBDb3B5VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBDb3B5IGNvbHVtbiwgZm9yIHRhYmxlIGRpc3BsYXlcbiAqIEBwYXJhbSBkYXRhSWRcbiAqIEBwYXJhbSBjb2x1bW5cbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29sdW1uOiBzdHJpbmdcbik6IE1lcmdlPENvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQ09QWV9UQUJMRV9DT0xVTU59PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQ09QWV9UQUJMRV9DT0xVTU4sXG4gICAgZGF0YUlkLFxuICAgIGNvbHVtblxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmc7XG4gIGZvcm1hdHM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH07XG59O1xuXG4vKipcbiAqIFNldCBjb2x1bW4gZGlzcGxheSBmb3JtYXRcbiAqIEBwYXJhbSBkYXRhSWRcbiAqIEBwYXJhbSBmb3JtYXRzXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENvbHVtbkRpc3BsYXlGb3JtYXQoXG4gIGRhdGFJZDogU2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXJBY3Rpb25bJ2RhdGFJZCddLFxuICBmb3JtYXRzOiBTZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblsnZm9ybWF0cyddXG4pOiBNZXJnZTxcbiAgU2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0NPTFVNTl9ESVNQTEFZX0ZPUk1BVH1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9DT0xVTU5fRElTUExBWV9GT1JNQVQsXG4gICAgZGF0YUlkLFxuICAgIGZvcm1hdHNcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQWRkRGF0YVRvTWFwVXBkYXRlck9wdGlvbnMgPSB7XG4gIGNlbnRlck1hcD86IGJvb2xlYW47XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAga2VlcEV4aXN0aW5nQ29uZmlnPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhc2V0czogQWRkRGF0YVRvTWFwUGF5bG9hZFsnZGF0YXNldHMnXTtcbiAgb3B0aW9uczogQWRkRGF0YVRvTWFwUGF5bG9hZFsnb3B0aW9ucyddO1xuICBjb25maWc/OiBQYXJzZWRDb25maWc7XG59O1xuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvIC1pbmZvIG9mIGEgZGF0YXNldFxuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvLmlkIC0gaWQgb2YgdGhpcyBkYXRhc2V0LiBJZiBjb25maWcgaXMgZGVmaW5lZCwgYGlkYCBzaG91bGQgbWF0Y2hlcyB0aGUgYGRhdGFJZGAgaW4gY29uZmlnLlxuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvLmxhYmVsIC0gQSBkaXNwbGF5IG5hbWUgb2YgdGhpcyBkYXRhc2V0XG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEgLSAqKipyZXF1aXJlZCoqIFRoZSBkYXRhIG9iamVjdCwgaW4gYSB0YWJ1bGFyIGZvcm1hdCB3aXRoIDIgcHJvcGVydGllcyBgZmllbGRzYCBhbmQgYHJvd3NgXG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEuZmllbGRzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiBmaWVsZHMsXG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEuZmllbGRzLm5hbWUgLSAqKipyZXF1aXJlZCoqIE5hbWUgb2YgdGhlIGZpZWxkLFxuLy8gKiBAcGFyYW0gZGF0YXNldC5kYXRhLnJvd3MgLSAqKipyZXF1aXJlZCoqIEFycmF5IG9mIHJvd3MsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCBgZmllbGRzYCBhbmQgYHJvd3NgXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFzZXRzIC0gKioqcmVxdWlyZWQqKiBkYXRhc2V0cyBjYW4gYmUgYSBkYXRhc2V0IG9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKiBFYWNoIGRhdGFzZXQgb2JqZWN0IG5lZWRzIHRvIGhhdmUgYGluZm9gIGFuZCBgZGF0YWAgcHJvcGVydHkuXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMuY2VudGVyTWFwIGBkZWZhdWx0OiB0cnVlYCBpZiBgY2VudGVyTWFwYCBpcyBzZXQgdG8gYHRydWVgIGtlcGxlci5nbCB3aWxsXG4gKiBwbGFjZSB0aGUgbWFwIHZpZXcgd2l0aGluIHRoZSBkYXRhIHBvaW50cyBib3VuZGFyaWVzXG4gKiBAcGFyYW0gb3B0aW9ucy5yZWFkT25seSBgZGVmYXVsdDogZmFsc2VgIGlmIGByZWFkT25seWAgaXMgc2V0IHRvIGB0cnVlYFxuICogdGhlIGxlZnQgc2V0dGluZyBwYW5lbCB3aWxsIGJlIGhpZGRlblxuICogQHBhcmFtIGNvbmZpZyB0aGlzIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIGZ1bGwga2VwbGVyLmdsIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24ge21hcFN0YXRlLCBtYXBTdHlsZSwgdmlzU3RhdGV9XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpc0RhdGEoXG4gIGRhdGFzZXRzOiBBZGREYXRhVG9NYXBQYXlsb2FkWydkYXRhc2V0cyddLFxuICBvcHRpb25zOiBBZGREYXRhVG9NYXBQYXlsb2FkWydvcHRpb25zJ10sXG4gIGNvbmZpZz86IFBhcnNlZENvbmZpZ1xuKTogTWVyZ2U8VXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVVBEQVRFX1ZJU19EQVRBfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9WSVNfREFUQSxcbiAgICBkYXRhc2V0cyxcbiAgICBvcHRpb25zLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW5hbWVEYXRhc2V0VXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBSZW5hbWUgYW4gZXhpc3RpbmcgZGF0YXNldCBpbiBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkIC0gKioqcmVxdWlyZWQqKiBJZCBvZiB0aGUgZGF0YXNldCB0byB1cGRhdGVcbiAqIEBwYXJhbSBsYWJlbCAtICoqKnJlcXVpcmVkKiogTmV3IG5hbWUgZm9yIHRoZSBkYXRhc2V0XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURhdGFzZXQoXG4gIGRhdGFJZDogc3RyaW5nLFxuICBsYWJlbDogc3RyaW5nXG4pOiBNZXJnZTxSZW5hbWVEYXRhc2V0VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5SRU5BTUVfREFUQVNFVH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU5BTUVfREFUQVNFVCxcbiAgICBkYXRhSWQsXG4gICAgbGFiZWxcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlRGF0YXNldFByb3BzVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmc7XG4gIHByb3BzOiB7XG4gICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgY29sb3I/OiBSR0JDb2xvcjtcbiAgICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9O1xufTtcbi8qKlxuICogVXBkYXRlIGFuIGV4aXN0aW5nIGRhdGFzZXQgcHJvcHMgaW4gYHZpc1N0YXRlYFxuICogQHBhcmFtIGRhdGFJZCAtICoqKnJlcXVpcmVkKiogSWQgb2YgdGhlIGRhdGFzZXQgdG8gdXBkYXRlXG4gKiBAcGFyYW0gcHJvcHMgLSAqKipyZXF1aXJlZCoqIE5ldyBwcm9wcyB0byB1cGRhdGVcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFByb3BzKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgcHJvcHM6IHtcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBjb2xvcj86IFJHQkNvbG9yO1xuICAgIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cbik6IE1lcmdlPFVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVVBEQVRFX0RBVEFTRVRfUFJPUFN9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVVBEQVRFX0RBVEFTRVRfUFJPUFMsXG4gICAgZGF0YUlkLFxuICAgIHByb3BzXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xufTtcbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0ge051bWJlcn0gaWR4IG9mIGZpbHRlclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVGaWx0ZXJBbmltYXRpb24oXG4gIGlkeDogbnVtYmVyXG4pOiBNZXJnZTxUb2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OLFxuICAgIGlkeFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBzcGVlZDogbnVtYmVyO1xufTtcbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSAgYGlkeGAgb2YgZmlsdGVyXG4gKiBAcGFyYW0gc3BlZWQgLSBgc3BlZWRgIHRvIGNoYW5nZSBpdCB0by4gYHNwZWVkYCBpcyBhIG11bHRpcGxpZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQoXG4gIGlkeDogbnVtYmVyLFxuICBzcGVlZDogbnVtYmVyXG4pOiBNZXJnZTxcbiAgVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9GSUxURVJfQU5JTUFUSU9OX1NQRUVEfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVVBEQVRFX0ZJTFRFUl9BTklNQVRJT05fU1BFRUQsXG4gICAgaWR4LFxuICAgIHNwZWVkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnO1xufTtcbi8qKlxuICogU2V0IGFuaW1hdGlvbiBjb25maWc6IHdvcmtzIHdpdGggYm90aCBsYXllciBhbmltYXRpb24gYW5kIGZpbHRlciBhbmltYXRpb25cbiAqIEBwYXJhbSBjb25maWdcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnKFxuICBjb25maWc6IEFuaW1hdGlvbkNvbmZpZyB8IEZpbHRlckFuaW1hdGlvbkNvbmZpZ1xuKTogTWVyZ2U8U2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfQU5JTUFUSU9OX0NPTkZJR30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfQU5JTUFUSU9OX0NPTkZJRyxcbiAgICBjb25maWdcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbiA9IHtcbiAgdmFsdWU6IG51bWJlciB8IG51bGw7XG59O1xuLyoqXG4gKiBSZXNldCBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSB2YWx1ZSAtICBDdXJyZW50IHZhbHVlIG9mIHRoZSBzbGlkZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lKFxuICB2YWx1ZTogbnVtYmVyXG4pOiBNZXJnZTxTZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9MQVlFUl9BTklNQVRJT05fVElNRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUUsXG4gICAgdmFsdWVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24gPSB7XG4gIHNwZWVkOiBudW1iZXI7XG59O1xuLyoqXG4gKiB1cGRhdGUgdHJpcCBsYXllciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBzcGVlZCAtIGBzcGVlZGAgdG8gY2hhbmdlIGl0IHRvLiBgc3BlZWRgIGlzIGEgbXVsdGlwbGllclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkKFxuICBzcGVlZDogbnVtYmVyXG4pOiBNZXJnZTxcbiAgVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVVBEQVRFX0xBWUVSX0FOSU1BVElPTl9TUEVFRH1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9MQVlFUl9BTklNQVRJT05fU1BFRUQsXG4gICAgc3BlZWRcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvbiA9IHZvaWQ7XG4vKipcbiAqIHN0YXJ0IGVuZCBlbmQgbGF5ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUxheWVyQW5pbWF0aW9uKCk6IE1lcmdlPFxuICBUb2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0xBWUVSX0FOSU1BVElPTn1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9BTklNQVRJT05cbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlckFjdGlvbiA9IHZvaWQ7XG4vKipcbiAqIGhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sKCk6IE1lcmdlPFxuICBUb2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9BTklNQVRJT05fQ09OVFJPTH1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9BTklNQVRJT05fQ09OVFJPTFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJWaWV3VXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG4gIHZpZXc6IEZpbHRlclsndmlldyddO1xufTtcbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCAtIGluZGV4IG9mIGZpbHRlciB0byBlbmxhcmdlXG4gKiBAcGFyYW0gdmlldyAtIHR5cGUgb2YgZmlsdGVyIHZpZXdcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVmlldyhcbiAgaWR4OiBudW1iZXIsXG4gIHZpZXc6IEZpbHRlclsndmlldyddXG4pOiBNZXJnZTxTZXRGaWx0ZXJWaWV3VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX1ZJRVd9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9WSUVXLFxuICAgIGlkeCxcbiAgICB2aWV3XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFNob3cvaGlkZSBmaWx0ZXIgZmVhdHVyZSBvbiBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSBpbmRleCBvZiBmaWx0ZXIgZmVhdHVyZSB0byBzaG93L2hpZGVcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVGaWx0ZXJGZWF0dXJlKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8VG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0ZJTFRFUl9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfRkVBVFVSRSxcbiAgICBpZHhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT25MYXllckhvdmVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaW5mbzogUGlja0luZm88YW55PiB8IG51bGw7XG4gIG1hcEluZGV4PzogbnVtYmVyO1xufTtcbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaW5mbyAtIE9iamVjdCBob3ZlcmVkLCByZXR1cm5lZCBieSBkZWNrLmdsLlxuICogQHBhcmFtIG1hcEluZGV4IC0gT3B0aW9uYWwgcHJvcGVydHkgZm9yIGxpbWl0aW5nIHRoZSBkaXNwbGF5IG9mIHRoZSBgPE1hcFBvcG92ZXI+YCB0byB0aGUgYDxNYXBDb250YWluZXI+YCB0aGUgdXNlciBpcyBpbnRlcmFjdGluZyB3aXRoLlxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkxheWVySG92ZXIoXG4gIGluZm86IFBpY2tJbmZvPGFueT4gfCBudWxsLFxuICBtYXBJbmRleD86IG51bWJlclxuKTogTWVyZ2U8T25MYXllckhvdmVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9IT1ZFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9IT1ZFUixcbiAgICBpbmZvLFxuICAgIG1hcEluZGV4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIE9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGluZm86IFBpY2tJbmZvPGFueT4gfCBudWxsO1xufTtcbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaW5mbyAtIE9iamVjdCBjbGlja2VkLCByZXR1cm5lZCBieSBkZWNrLmdsXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uTGF5ZXJDbGljayhcbiAgaW5mbzogUGlja0luZm88YW55PiB8IG51bGxcbik6IE1lcmdlPE9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfQ0xJQ0t9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfQ0xJQ0ssXG4gICAgaW5mb1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBPbk1hcENsaWNrVXBkYXRlckFjdGlvbiA9IHZvaWQ7XG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbk1hcENsaWNrKCk6IE1lcmdlPE9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk1BUF9DTElDS30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5NQVBfQ0xJQ0tcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uID0ge1xuICBldnQ7XG59O1xuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3VzZSBtb3ZlZXZlbnQsIHBheWxvYWQgd291bGQgYmVcbiAqIFJlYWN0LW1hcC1nbCBNYXBMYXllck1vdXNlRXZlbnRcbiAqIGh0dHBzOi8vdmlzZ2wuZ2l0aHViLmlvL3JlYWN0LW1hcC1nbC9kb2NzL2FwaS1yZWZlcmVuY2UvdHlwZXMjbWFwbGF5ZXJtb3VzZWV2ZW50XG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGV2dCAtIE1hcExheWVyTW91c2VFdmVudFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbk1vdXNlTW92ZShcbiAgZXZ0XG4pOiBNZXJnZTxPbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTU9VU0VfTU9WRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5NT1VTRV9NT1ZFLFxuICAgIGV2dFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBUb2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb24gPSB7XG4gIG1hcEluZGV4OiBudW1iZXI7XG4gIGxheWVySWQ6IHN0cmluZztcbn07XG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgaW4gYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBtYXBJbmRleCAtIGluZGV4IG9mIHRoZSBzcGxpdCBtYXBcbiAqIEBwYXJhbSBsYXllcklkIC0gaWQgb2YgdGhlIGxheWVyXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUxheWVyRm9yTWFwKFxuICBtYXBJbmRleDogbnVtYmVyLFxuICBsYXllcklkOiBzdHJpbmdcbik6IE1lcmdlPFRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5UT0dHTEVfTEFZRVJfRk9SX01BUH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfTEFZRVJfRk9SX01BUCxcbiAgICBtYXBJbmRleCxcbiAgICBsYXllcklkXG4gIH07XG59XG5cbnR5cGUgRmlsdGVyUGxvdE5ld1Byb3AgPSB7XG4gIHlBeGlzPzogbnVsbCB8IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHBsb3RUeXBlPzoge3R5cGU6IHN0cmluZ307XG59O1xuZXhwb3J0IHR5cGUgU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBuZXdQcm9wOiBGaWx0ZXJQbG90TmV3UHJvcDtcbiAgdmFsdWVJbmRleD86IG51bWJlcjtcbn07XG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeFxuICogQHBhcmFtIG5ld1Byb3Aga2V5IHZhbHVlIG1hcHBpbmcgb2YgbmV3IHByb3AgYHt5QXhpczogJ2hpc3RvZ3JhbSd9YFxuICogQHBhcmFtIHZhbHVlSW5kZXggZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlclBsb3QoXG4gIGlkeDogbnVtYmVyLFxuICBuZXdQcm9wOiBGaWx0ZXJQbG90TmV3UHJvcCxcbiAgdmFsdWVJbmRleD86IG51bWJlclxuKTogTWVyZ2U8U2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9QTE9UfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9GSUxURVJfUExPVCxcbiAgICBpZHgsXG4gICAgbmV3UHJvcCxcbiAgICB2YWx1ZUluZGV4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldE1hcEluZm9VcGRhdGVyQWN0aW9uID0ge1xuICBpbmZvOiBhbnk7XG59O1xuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpbmZvXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldE1hcEluZm8oXG4gIGluZm86IGFueVxuKTogTWVyZ2U8U2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX01BUF9JTkZPfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9NQVBfSU5GTyxcbiAgICBpbmZvXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIExvYWRGaWxlc1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGZpbGVzOiBGaWxlW107XG4gIG9uRmluaXNoPyhyZXN1bHQ6IGFueSk6IGFueTtcbn07XG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGZpbGVzIGFycmF5IG9mIGZpbGVibG9iXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlcyhcbiAgZmlsZXM6IEZpbGVbXSxcbiAgb25GaW5pc2g/OiAocmVzdWx0OiBhbnkpID0+IGFueVxuKTogTWVyZ2U8TG9hZEZpbGVzVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MT0FEX0ZJTEVTfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQURfRklMRVMsXG4gICAgZmlsZXMsXG4gICAgb25GaW5pc2hcbiAgfTtcbn1cblxuLyoqXG4gKiBDYWxsZWQgd2l0aCBuZXh0IGZpbGUgdG8gbG9hZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTmV4dEZpbGUoKToge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MT0FEX05FWFRfRklMRX0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQURfTkVYVF9GSUxFXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyQWN0aW9uID0ge1xuICByZXN1bHQ6IEZpbGVDYWNoZUl0ZW1bXTtcbn07XG4vKipcbiAqIGNhbGxlZCB3aGVuIGFsbCBmaWxlcyBhcmUgcHJvY2Vzc2VkIGFuZCBsb2FkZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSByZXN1bHRcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVzU3VjY2VzcyhcbiAgcmVzdWx0OiBGaWxlQ2FjaGVJdGVtW11cbik6IE1lcmdlPGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRVNfU1VDQ0VTU30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MT0FEX0ZJTEVTX1NVQ0NFU1MsXG4gICAgcmVzdWx0XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIExvYWRGaWxlU3RlcFN1Y2Nlc3NBY3Rpb24gPSB7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIGZpbGVDYWNoZTogRmlsZUNhY2hlSXRlbVtdO1xufTtcbi8qKlxuICogY2FsbGVkIHdoZW4gc3VjY2Vzc2Z1bGx5IGxvYWRlZCBvbmUgZmlsZSwgcmVhZHkgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCBvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSByZXN1bHRcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzcyh7XG4gIGZpbGVOYW1lLFxuICBmaWxlQ2FjaGVcbn06IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZmlsZUNhY2hlOiBGaWxlQ2FjaGVJdGVtW107XG59KTogTWVyZ2U8TG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MT0FEX0ZJTEVfU1RFUF9TVUNDRVNTfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQURfRklMRV9TVEVQX1NVQ0NFU1MsXG4gICAgZmlsZU5hbWUsXG4gICAgZmlsZUNhY2hlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIExvYWRGaWxlc0VyclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIGVycm9yOiBhbnk7XG59O1xuLyoqXG4gKiBUcmlnZ2VyIGxvYWRpbmcgZmlsZSBlcnJvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtICBlcnJvclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlc0VycihcbiAgZmlsZU5hbWU6IHN0cmluZyxcbiAgZXJyb3I6IGFueVxuKTogTWVyZ2U8TG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MT0FEX0ZJTEVTX0VSUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MT0FEX0ZJTEVTX0VSUixcbiAgICBmaWxlTmFtZSxcbiAgICBlcnJvclxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGZlYXR1cmVzOiBGZWF0dXJlW107XG59O1xuLyoqXG4gKiBTdG9yZSBmZWF0dXJlcyB0byBzdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGZlYXR1cmVzXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzKFxuICBmZWF0dXJlczogRmVhdHVyZVtdXG4pOiBNZXJnZTxTZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0ZFQVRVUkVTfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9GRUFUVVJFUyxcbiAgICBmZWF0dXJlc1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBsYXllcjogTGF5ZXI7XG4gIGZlYXR1cmU6IEZlYXR1cmU7XG59O1xuLyoqXG4gKiBJdCB3aWxsIGFwcGx5IHRoZSBwcm92aWRlIGZlYXR1cmUgYXMgZmlsdGVyIHRvIHRoZSBnaXZlbiBsYXllci5cbiAqIElmIHRoZSBnaXZlbiBmZWF0dXJlIGlzIGFscmVhZHkgYXBwbGllZCBhcyBmaWx0ZXIgdG8gdGhlIGxheWVyLCBpdCB3aWxsIHJlbW92ZSB0aGUgbGF5ZXIgZnJvbSB0aGUgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gbGF5ZXJcbiAqIEBwYXJhbSBmZWF0dXJlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllcihcbiAgbGF5ZXI6IExheWVyLFxuICBmZWF0dXJlOiBGZWF0dXJlXG4pOiBNZXJnZTxTZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9QT0xZR09OX0ZJTFRFUl9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfUE9MWUdPTl9GSUxURVJfTEFZRVIsXG4gICAgbGF5ZXIsXG4gICAgZmVhdHVyZVxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uID0ge1xuICBmZWF0dXJlOiBGZWF0dXJlIHwgbnVsbDtcbiAgc2VsZWN0aW9uQ29udGV4dD86IEZlYXR1cmVTZWxlY3Rpb25Db250ZXh0O1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgZmVhdHVyZSB0byBiZSBlZGl0ZWQvZGVsZXRlZCxcbiAqIGFuZCB0aGUgY29udGV4dCBvZiBob3cgdGhlIGZlYXR1cmUgd2FzIHNlbGVjdGVkLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGZlYXR1cmVcbiAqIEBwYXJhbSBzZWxlY3Rpb25Db250ZXh0XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFNlbGVjdGVkRmVhdHVyZShcbiAgZmVhdHVyZTogRmVhdHVyZSB8IG51bGwsXG4gIHNlbGVjdGlvbkNvbnRleHQ/OiBGZWF0dXJlU2VsZWN0aW9uQ29udGV4dFxuKTogTWVyZ2U8U2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfU0VMRUNURURfRkVBVFVSRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfU0VMRUNURURfRkVBVFVSRSxcbiAgICBmZWF0dXJlLFxuICAgIHNlbGVjdGlvbkNvbnRleHRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGZlYXR1cmU6IEZlYXR1cmU7XG59O1xuLyoqXG4gKiBEZWxldGUgdGhlIGdpdmVuIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBmZWF0dXJlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmUoXG4gIGZlYXR1cmU6IEZlYXR1cmVcbik6IE1lcmdlPERlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkRFTEVURV9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkRFTEVURV9GRUFUVVJFLFxuICAgIGZlYXR1cmVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG1vZGU6IHN0cmluZztcbn07XG4vKiogU2V0IHRoZSBtYXAgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG1vZGUgb25lIG9mIEVESVRPUl9NT0RFU1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHtzZXRNYXBNb2RlfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuICogaW1wb3J0IHtFRElUT1JfTU9ERVN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbiAqXG4gKiB0aGlzLnByb3BzLmRpc3BhdGNoKHNldE1hcE1vZGUoRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTikpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRpdG9yTW9kZShcbiAgbW9kZTogc3RyaW5nXG4pOiBNZXJnZTxTZXRFZGl0b3JNb2RlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRURJVE9SX01PREV9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0VESVRPUl9NT0RFLFxuICAgIG1vZGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQXBwbHlDUFVGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdO1xufTtcbi8qKlxuICogVHJpZ2dlciBDUFUgZmlsdGVyIG9mIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBkYXRhSWQgLSBzaW5nbGUgZGF0YUlkIG9yIGFuIGFycmF5IG9mIGRhdGFJZHNcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlDUFVGaWx0ZXIoXG4gIGRhdGFJZDogc3RyaW5nIHwgc3RyaW5nW11cbik6IE1lcmdlPEFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5BUFBMWV9DUFVfRklMVEVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkFQUExZX0NQVV9GSUxURVIsXG4gICAgZGF0YUlkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uID0gdm9pZDtcbi8qKlxuICogVG9nZ2xlIGVkaXRvciBsYXllciB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcmV0dXJuIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlRWRpdG9yVmlzaWJpbGl0eSgpOiBNZXJnZTxcbiAgVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0VESVRPUl9WSVNJQklMSVRZfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVE9HR0xFX0VESVRPUl9WSVNJQklMSVRZXG4gIH07XG59XG5cbnR5cGUgRmlsZUNvbnRlbnQgPSB7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIGhlYWRlcjogc3RyaW5nW107XG4gIGRhdGE6IGFueTtcbn07XG5leHBvcnQgdHlwZSBOZXh0RmlsZUJhdGNoVXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDoge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4gICAgZ2VuOiBBc3luY0dlbmVyYXRvcjxGaWxlQ29udGVudD47XG4gICAgZmlsZU5hbWU6IHN0cmluZztcbiAgICBwcm9ncmVzcz86IGFueTtcbiAgICBhY2N1bXVsYXRlZD86IGFueTtcbiAgICBvbkZpbmlzaDogKHJlc3VsdDogYW55KSA9PiBhbnk7XG4gIH07XG59O1xuLyoqXG4gKiBQcm9jZXNzIHRoZSBuZXh0IGZpbGUgYmF0Y2hcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gYmF0Y2ggcGF5bG9hZFxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRGaWxlQmF0Y2goXG4gIHBheWxvYWQ6IE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbik6IE1lcmdlPE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk5FWFRfRklMRV9CQVRDSH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5ORVhUX0ZJTEVfQkFUQ0gsXG4gICAgcGF5bG9hZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBQcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgY29udGVudDogRmlsZUNvbnRlbnQ7XG4gICAgZmlsZUNhY2hlOiBGaWxlQ2FjaGVJdGVtW107XG4gIH07XG59O1xuLyoqXG4gKiBQcm9jZXNzIHRoZSBmaWxlIGNvbnRlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gdGhlIGZpbGUgY29udGVudFxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudChcbiAgcGF5bG9hZDogUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pOiBNZXJnZTxQcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlBST0NFU1NfRklMRV9DT05URU5UfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlBST0NFU1NfRklMRV9DT05URU5ULFxuICAgIHBheWxvYWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uID0ge1xuICBjb25maWc6IHtcbiAgICB0aW1lem9uZT86IHN0cmluZztcbiAgICB0aW1lRm9ybWF0Pzogc3RyaW5nO1xuICB9O1xufTtcbi8qKlxuICogU2V0IGxheWVyIGFuaW1hdGlvbiB0aW1lIGZvcm1hdCBhbmQgdGltZXpvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBjb25maWcgLSB7dGltZUZvcm1hdDogc3RyaW5nLCB0aW1lem9uZTogc3RyaW5nfVxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyhcbiAgY29uZmlnOiBTZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25bJ2NvbmZpZyddXG4pOiBNZXJnZTxcbiAgU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUd9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgY29uZmlnOiB7XG4gICAgdGltZXpvbmU/OiBzdHJpbmc7XG4gICAgdGltZUZvcm1hdD86IHN0cmluZztcbiAgfTtcbn07XG4vKipcbiAqIFNldCBGaWx0ZXIgYW5pbWF0aW9uIHRpbWUgZm9ybWF0IGFuZCB0aW1lem9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeFxuICogQHBhcmFtIGNvbmZpZ1xuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWcoXG4gIGlkeDogU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblsnaWR4J10sXG4gIGNvbmZpZzogU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblsnY29uZmlnJ11cbik6IE1lcmdlPFxuICBTZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9GSUxURVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUcsXG4gICAgaWR4LFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBMYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VBY3Rpb24gPSB7XG4gIGV2ZW50OiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb3VudDogbnVtYmVyO1xuICB9O1xuICBsYXllcjogTGF5ZXI7XG59O1xuXG4vKipcbiAqIGRlY2suZ2wgbGF5ZXIgZ3B1IGZpbHRlciBjYWxsYmFja1xuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGxheWVyXG4gKiBAcGFyYW0gZXZlbnRcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UoXG4gIGxheWVyOiBMYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VBY3Rpb25bJ2xheWVyJ10sXG4gIGV2ZW50OiBMYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VBY3Rpb25bJ2V2ZW50J11cbik6IE1lcmdlPExheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9GSUxURVJFRF9JVEVNU19DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfRklMVEVSRURfSVRFTVNfQ0hBTkdFLFxuICAgIGxheWVyLFxuICAgIGV2ZW50XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBlbmFibGU6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZShcbiAgaWR4OiBTeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uWydpZHgnXSxcbiAgZW5hYmxlOiBTeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uWydlbmFibGUnXVxuKTogTWVyZ2U8XG4gIFN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU1lOQ19USU1FX0ZJTFRFUl9XSVRIX0xBWUVSX1RJTUVMSU5FfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU1lOQ19USU1FX0ZJTFRFUl9XSVRIX0xBWUVSX1RJTUVMSU5FLFxuICAgIGlkeCxcbiAgICBlbmFibGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG1vZGU6IFN5bmNUaW1lbGluZU1vZGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGUoe1xuICBpZCxcbiAgbW9kZVxufTogc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb24pOiBNZXJnZTxcbiAgc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU1lOQ19USU1FX0ZJTFRFUl9USU1FTElORV9NT0RFfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU1lOQ19USU1FX0ZJTFRFUl9USU1FTElORV9NT0RFLFxuICAgIGlkLFxuICAgIG1vZGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkID0ge1xuICByZXN1bHRzOiAoUHJvbWlzZUZ1bGZpbGxlZFJlc3VsdDxLZXBsZXJUYWJsZT4gfCBQcm9taXNlUmVqZWN0ZWRSZXN1bHQpW107XG4gIGFkZFRvTWFwT3B0aW9uczogQWRkRGF0YVRvTWFwUGF5bG9hZFsnb3B0aW9ucyddO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBhIG5ldyBkYXRhc2V0IGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5IHZpYSBhc3luYyB0YWJsZSBtZXRob2RzXG4gKiBAcGFyYW0gcGF5bG9hZFxuICogQHBhcmFtIHBheWxvYWQucmVzdWx0cyAtIHJlc3VsdHMgb2YgcHJvbWlzZXMuYWxsU2V0dGx0ZWRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyA9IGNyZWF0ZUFjdGlvbjxDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQ+KFxuICBBY3Rpb25UeXBlcy5DUkVBVEVfTkVXX0RBVEFTRVRfU1VDQ0VTU1xuKTtcblxuLyoqXG4gKiBUaGlzIGRlY2xhcmF0aW9uIGlzIG5lZWRlZCB0byBncm91cCBhY3Rpb25zIGluIGRvY3NcbiAqL1xuLyoqXG4gKiBBY3Rpb25zIGhhbmRsZWQgbW9zdGx5IGJ5IGB2aXNTdGF0ZWAgcmVkdWNlci5cbiAqIFRoZXkgbWFuYWdlIGhvdyBkYXRhIGlzIHByb2Nlc3NlZCwgZmlsdGVyZWQgYW5kIGRpc3BsYXllZCBvbiB0aGUgbWFwIGJ5IG9wZXJhdGVzIG9uIGxheWVycyxcbiAqIGZpbHRlcnMgYW5kIGludGVyYWN0aW9uIHNldHRpbmdzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZUFjdGlvbnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUtBLElBQUFBLFlBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQXVCQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUE1QkE7QUFDQTs7QUFFQTs7QUEyQkE7QUFDQTs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRSxnQkFBZ0JBLENBQzlCQyxVQUFrQixFQUNsQkMsY0FBMkIsRUFDM0JDLFVBQW1CLEVBQ2tFO0VBQ3JGLE9BQU87SUFDTEMsSUFBSSxFQUFFQyx1QkFBVyxDQUFDQyxrQkFBa0I7SUFDcENMLFVBQVUsRUFBVkEsVUFBVTtJQUNWQyxjQUFjLEVBQWRBLGNBQWM7SUFDZEMsVUFBVSxFQUFWQTtFQUNGLENBQUM7QUFDSDtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0ksaUJBQWlCQSxDQUMvQkMsUUFBZSxFQUNmQyxTQUFtQyxFQUNvRDtFQUN2RixPQUFPO0lBQ0xMLElBQUksRUFBRUMsdUJBQVcsQ0FBQ0ssbUJBQW1CO0lBQ3JDRixRQUFRLEVBQVJBLFFBQVE7SUFDUkMsU0FBUyxFQUFUQTtFQUNGLENBQUM7QUFDSDtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRSxxQkFBcUJBLENBQ25DQyxP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
|
|
1156
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0aW9uVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl90b29sa2l0IiwiYXBwbHlMYXllckNvbmZpZyIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJ0eXBlIiwiQWN0aW9uVHlwZXMiLCJBUFBMWV9MQVlFUl9DT05GSUciLCJsYXllckNvbmZpZ0NoYW5nZSIsIm9sZExheWVyIiwibmV3Q29uZmlnIiwiTEFZRVJfQ09ORklHX0NIQU5HRSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eSIsImxheWVySWQiLCJpc1Zpc2libGUiLCJzcGxpdE1hcElkIiwiTEFZRVJfVE9HR0xFX1ZJU0lCSUxJVFkiLCJsYXllclRleHRMYWJlbENoYW5nZSIsImlkeCIsInByb3AiLCJ2YWx1ZSIsIkxBWUVSX1RFWFRfTEFCRUxfQ0hBTkdFIiwibGF5ZXJTZXRJc1ZhbGlkIiwiaXNWYWxpZCIsIkxBWUVSX1NFVF9JU19WQUxJRCIsImxheWVyVHlwZUNoYW5nZSIsIm5ld1R5cGUiLCJMQVlFUl9UWVBFX0NIQU5HRSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImNoYW5uZWwiLCJuZXdWaXNDb25maWciLCJMQVlFUl9WSVNVQUxfQ0hBTk5FTF9DSEFOR0UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsIkxBWUVSX1ZJU19DT05GSUdfQ0hBTkdFIiwibGF5ZXJDb2xvclVJQ2hhbmdlIiwiTEFZRVJfQ09MT1JfVUlfQ0hBTkdFIiwidXBkYXRlTGF5ZXJCbGVuZGluZyIsIm1vZGUiLCJVUERBVEVfTEFZRVJfQkxFTkRJTkciLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmciLCJVUERBVEVfT1ZFUkxBWV9CTEVORElORyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlIiwiY29uZmlnIiwiSU5URVJBQ1RJT05fQ09ORklHX0NIQU5HRSIsImFwcGx5RmlsdGVyQ29uZmlnIiwiZmlsdGVySWQiLCJuZXdGaWx0ZXIiLCJBUFBMWV9GSUxURVJfQ09ORklHIiwic2V0RmlsdGVyIiwidmFsdWVJbmRleCIsIlNFVF9GSUxURVIiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lIiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRSIsInNldEZpbHRlckFuaW1hdGlvbldpbmRvdyIsIl9yZWYiLCJpZCIsImFuaW1hdGlvbldpbmRvdyIsIlNFVF9GSUxURVJfQU5JTUFUSU9OX1dJTkRPVyIsImFkZEZpbHRlciIsImRhdGFJZCIsIkFERF9GSUxURVIiLCJjcmVhdGVPclVwZGF0ZUZpbHRlciIsImZpZWxkIiwiQ1JFQVRFX09SX1VQREFURV9GSUxURVIiLCJhZGRMYXllciIsImRhdGFzZXRJZCIsIkFERF9MQVlFUiIsInJlb3JkZXJMYXllciIsIm9yZGVyIiwiUkVPUkRFUl9MQVlFUiIsInJlbW92ZUZpbHRlciIsIlJFTU9WRV9GSUxURVIiLCJyZW1vdmVMYXllciIsIlJFTU9WRV9MQVlFUiIsImR1cGxpY2F0ZUxheWVyIiwiRFVQTElDQVRFX0xBWUVSIiwiYWRkRWZmZWN0IiwiQUREX0VGRkVDVCIsInJlb3JkZXJFZmZlY3QiLCJSRU9SREVSX0VGRkVDVCIsInJlbW92ZUVmZmVjdCIsIlJFTU9WRV9FRkZFQ1QiLCJ1cGRhdGVFZmZlY3QiLCJwcm9wcyIsIlVQREFURV9FRkZFQ1QiLCJyZW1vdmVEYXRhc2V0IiwiUkVNT1ZFX0RBVEFTRVQiLCJzaG93RGF0YXNldFRhYmxlIiwiU0hPV19EQVRBU0VUX1RBQkxFIiwidXBkYXRlVGFibGVDb2xvciIsIm5ld0NvbG9yIiwiVVBEQVRFX1RBQkxFX0NPTE9SIiwic29ydFRhYmxlQ29sdW1uIiwiY29sdW1uIiwiU09SVF9UQUJMRV9DT0xVTU4iLCJwaW5UYWJsZUNvbHVtbiIsIlBJTl9UQUJMRV9DT0xVTU4iLCJjb3B5VGFibGVDb2x1bW4iLCJDT1BZX1RBQkxFX0NPTFVNTiIsInNldENvbHVtbkRpc3BsYXlGb3JtYXQiLCJmb3JtYXRzIiwiU0VUX0NPTFVNTl9ESVNQTEFZX0ZPUk1BVCIsInVwZGF0ZVZpc0RhdGEiLCJkYXRhc2V0cyIsIm9wdGlvbnMiLCJVUERBVEVfVklTX0RBVEEiLCJyZW5hbWVEYXRhc2V0IiwibGFiZWwiLCJSRU5BTUVfREFUQVNFVCIsInVwZGF0ZURhdGFzZXRQcm9wcyIsIlVQREFURV9EQVRBU0VUX1BST1BTIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uIiwiVE9HR0xFX0ZJTFRFUl9BTklNQVRJT04iLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZCIsInNwZWVkIiwiVVBEQVRFX0ZJTFRFUl9BTklNQVRJT05fU1BFRUQiLCJzZXRBbmltYXRpb25Db25maWciLCJTRVRfQU5JTUFUSU9OX0NPTkZJRyIsInNldExheWVyQW5pbWF0aW9uVGltZSIsIlNFVF9MQVlFUl9BTklNQVRJT05fVElNRSIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWQiLCJVUERBVEVfTEFZRVJfQU5JTUFUSU9OX1NQRUVEIiwidG9nZ2xlTGF5ZXJBbmltYXRpb24iLCJUT0dHTEVfTEFZRVJfQU5JTUFUSU9OIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sIiwiVE9HR0xFX0xBWUVSX0FOSU1BVElPTl9DT05UUk9MIiwic2V0RmlsdGVyVmlldyIsInZpZXciLCJTRVRfRklMVEVSX1ZJRVciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlIiwiVE9HR0xFX0ZJTFRFUl9GRUFUVVJFIiwib25MYXllckhvdmVyIiwiaW5mbyIsIm1hcEluZGV4IiwiTEFZRVJfSE9WRVIiLCJvbkxheWVyQ2xpY2siLCJMQVlFUl9DTElDSyIsIm9uTWFwQ2xpY2siLCJNQVBfQ0xJQ0siLCJvbk1vdXNlTW92ZSIsImV2dCIsIk1PVVNFX01PVkUiLCJ0b2dnbGVMYXllckZvck1hcCIsIlRPR0dMRV9MQVlFUl9GT1JfTUFQIiwic2V0RmlsdGVyUGxvdCIsIm5ld1Byb3AiLCJTRVRfRklMVEVSX1BMT1QiLCJzZXRNYXBJbmZvIiwiU0VUX01BUF9JTkZPIiwibG9hZEZpbGVzIiwiZmlsZXMiLCJvbkZpbmlzaCIsIkxPQURfRklMRVMiLCJsb2FkTmV4dEZpbGUiLCJMT0FEX05FWFRfRklMRSIsImxvYWRGaWxlc1N1Y2Nlc3MiLCJyZXN1bHQiLCJMT0FEX0ZJTEVTX1NVQ0NFU1MiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzIiwiX3JlZjIiLCJmaWxlTmFtZSIsImZpbGVDYWNoZSIsIkxPQURfRklMRV9TVEVQX1NVQ0NFU1MiLCJsb2FkRmlsZXNFcnIiLCJlcnJvciIsIkxPQURfRklMRVNfRVJSIiwic2V0RmVhdHVyZXMiLCJmZWF0dXJlcyIsIlNFVF9GRUFUVVJFUyIsInNldFBvbHlnb25GaWx0ZXJMYXllciIsImxheWVyIiwiZmVhdHVyZSIsIlNFVF9QT0xZR09OX0ZJTFRFUl9MQVlFUiIsInNldFNlbGVjdGVkRmVhdHVyZSIsInNlbGVjdGlvbkNvbnRleHQiLCJTRVRfU0VMRUNURURfRkVBVFVSRSIsImRlbGV0ZUZlYXR1cmUiLCJERUxFVEVfRkVBVFVSRSIsInNldEVkaXRvck1vZGUiLCJTRVRfRURJVE9SX01PREUiLCJhcHBseUNQVUZpbHRlciIsIkFQUExZX0NQVV9GSUxURVIiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5IiwiVE9HR0xFX0VESVRPUl9WSVNJQklMSVRZIiwibmV4dEZpbGVCYXRjaCIsInBheWxvYWQiLCJORVhUX0ZJTEVfQkFUQ0giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJQUk9DRVNTX0ZJTEVfQ09OVEVOVCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyIsIlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UiLCJldmVudCIsIkxBWUVSX0ZJTFRFUkVEX0lURU1TX0NIQU5HRSIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmUiLCJlbmFibGUiLCJTWU5DX1RJTUVfRklMVEVSX1dJVEhfTEFZRVJfVElNRUxJTkUiLCJzZXRUaW1lRmlsdGVyU3luY1RpbWVsaW5lTW9kZSIsIl9yZWYzIiwiU1lOQ19USU1FX0ZJTFRFUl9USU1FTElORV9NT0RFIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MiLCJleHBvcnRzIiwiY3JlYXRlQWN0aW9uIiwiQ1JFQVRFX05FV19EQVRBU0VUX1NVQ0NFU1MiLCJzZXRMb2FkaW5nSW5kaWNhdG9yIiwiU0VUX0xPQURJTkdfSU5ESUNBVE9SIiwidmlzU3RhdGVBY3Rpb25zIl0sInNvdXJjZXMiOlsiLi4vc3JjL3Zpcy1zdGF0ZS1hY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIHZpcy1zdGF0ZS1yZWR1Y2VyXG5pbXBvcnQge1BpY2tJbmZvfSBmcm9tICdAZGVjay5nbC9jb3JlL2xpYi9kZWNrJztcbmltcG9ydCB7ZGVmYXVsdCBhcyBBY3Rpb25UeXBlc30gZnJvbSAnLi9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0IHtGaWxlQ2FjaGVJdGVtfSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuaW1wb3J0IHtMYXllciwgTGF5ZXJCYXNlQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7XG4gIEFkZERhdGFUb01hcFBheWxvYWQsXG4gIFZhbHVlT2YsXG4gIE1lcmdlLFxuICBSR0JDb2xvcixcbiAgTmVzdGVkUGFydGlhbCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIENvbG9yVUksXG4gIEZlYXR1cmUsXG4gIEZlYXR1cmVTZWxlY3Rpb25Db250ZXh0LFxuICBJbnRlcmFjdGlvbkNvbmZpZyxcbiAgRmlsdGVyLFxuICBQYXJzZWRDb25maWcsXG4gIFBhcnNlZExheWVyLFxuICBFZmZlY3RQcm9wc1BhcnRpYWwsXG4gIFN5bmNUaW1lbGluZU1vZGUsXG4gIEFuaW1hdGlvbkNvbmZpZyxcbiAgRmlsdGVyQW5pbWF0aW9uQ29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtjcmVhdGVBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG4vLyBUT0RPIC0gaW1wb3J0IExvYWRlck9iamVjdCB0eXBlIGZyb20gQGxvYWRlcnMuZ2wvY29yZSB3aGVuIHN1cHBvcnRlZFxuLy8gVE9ETyAtIGltcG9ydCBMb2FkT3B0aW9ucyB0eXBlIGZyb20gQGxvYWRlcnMuZ2wvY29yZSB3aGVuIHN1cHBvcnRlZFxuXG5leHBvcnQgdHlwZSBBcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXJJZDogc3RyaW5nO1xuICBuZXdMYXllckNvbmZpZzogUGFyc2VkTGF5ZXI7XG4gIGxheWVySW5kZXg/OiBudW1iZXI7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBwYXJhbSBvbGRMYXllcklkIC0gbGF5ZXIgaWQgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIG5ld0xheWVyQ29uZmlnIC0gbmV3IGxheWVyIGNvbmZpZ1xuICogQHBhcmFtIGxheWVySW5kZXggLSAoT3B0aW9uYWwpIEluZGV4IG9mIHRoZSBsYXllciB0byBiZSB1cGRhdGVkIChjYW4gYmUgdXNlZnVsIGluIHNvbWUgY2FzZXMsIGJlY2F1c2VcbiAqICAgICAgICAgICAgICAgICAgICAgdGhlIGxheWVyIGlkIG1pZ2h0IGNoYW5nZSBkdXJpbmcgdXBkYXRlLCBlLmcuIHdoZW4gdGhlIHR5cGUgb2YgdGhlIGxheWVyIGNoYW5nZXMpXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGF5ZXJDb25maWcoXG4gIG9sZExheWVySWQ6IHN0cmluZyxcbiAgbmV3TGF5ZXJDb25maWc6IFBhcnNlZExheWVyLFxuICBsYXllckluZGV4PzogbnVtYmVyXG4pOiBNZXJnZTxBcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5BUFBMWV9MQVlFUl9DT05GSUd9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQVBQTFlfTEFZRVJfQ09ORklHLFxuICAgIG9sZExheWVySWQsXG4gICAgbmV3TGF5ZXJDb25maWcsXG4gICAgbGF5ZXJJbmRleFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBMYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG9sZExheWVyOiBMYXllcjtcbiAgbmV3Q29uZmlnOiBQYXJ0aWFsPExheWVyWydjb25maWcnXT47XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3Q29uZmlnIC0gbmV3IGNvbmZpZyB0byBiZSBtZXJnZWQgd2l0aCBvbGQgY29uZmlnXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+XG4pOiBNZXJnZTxMYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfQ09ORklHX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9DT05GSUdfQ0hBTkdFLFxuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBMYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyQWN0aW9uID0ge1xuICBsYXllcklkOiBzdHJpbmc7XG4gIGlzVmlzaWJsZTogYm9vbGVhbjtcbiAgc3BsaXRNYXBJZD86IHN0cmluZztcbn07XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc2liaWxpdHkgZGVwZW5kcyBvbiBzcGxpdE1hcCBzaW5nbGUgb3IgZHVhbFxuICogQHBhcmFtIGxheWVySWQgLSBsYXllcklkIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBpc1Zpc2libGUgLSB3aGV0aGVyIHRoaXMgbGF5ZXIgaXMgdmlzaWJsZSBnbG9iYWxseVxuICogQHBhcmFtIHNwbGl0TWFwSWQgLSBpZCBmb3IgdGhpcyBzcGxpdE1hcFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRvZ2dsZVZpc2liaWxpdHkoXG4gIGxheWVySWQ6IHN0cmluZyxcbiAgaXNWaXNpYmxlOiBib29sZWFuLFxuICBzcGxpdE1hcElkPzogc3RyaW5nXG4pOiBNZXJnZTxMYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX1RPR0dMRV9WSVNJQklMSVRZfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX1RPR0dMRV9WSVNJQklMSVRZLFxuICAgIGxheWVySWQsXG4gICAgaXNWaXNpYmxlLFxuICAgIHNwbGl0TWFwSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIGlkeDogbnVtYmVyIHwgJ2FsbCc7XG4gIHByb3A6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHRleHQgbGFiZWxcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBpZHggLWBpZHhgIG9mIHRleHQgbGFiZWwgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIHByb3AgLSBgcHJvcGAgb2YgdGV4dCBsYWJlbCwgZSxnLCBgYW5jaG9yYCwgYGFsaWdubWVudGAsIGBjb2xvcmAsIGBzaXplYCwgYGZpZWxkYCwgYG91dGxpbmVXaWR0aGAsIGBvdXRsaW5lQ29sb3JgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUZXh0TGFiZWxDaGFuZ2UoXG4gIG9sZExheWVyOiBMYXllcixcbiAgaWR4OiBudW1iZXIgfCAnYWxsJyxcbiAgcHJvcDogc3RyaW5nLFxuICB2YWx1ZTogYW55XG4pOiBNZXJnZTxMYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfVEVYVF9MQUJFTF9DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfVEVYVF9MQUJFTF9DSEFOR0UsXG4gICAgb2xkTGF5ZXIsXG4gICAgaWR4LFxuICAgIHByb3AsXG4gICAgdmFsdWVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTGF5ZXJTZXRJc1ZhbGlkVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBpc1ZhbGlkOiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHZhbHVlIG9mIGlzVmFsaWQgZmxhZyBmb3IgYSBsYXllci5cbiAqIFRoZSBhY3Rpb24gYWxzbyB1cGRhdGVzIHZpc2liaWxpdHkgb2YgdGhlIGxheWVyIGJhc2VkIG9uIGlzVmFsaWQuXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gaXNWYWxpZCAtIG5ldyB2YWx1ZSBmb3IgaXNWYWxpZCBmbGFnXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyU2V0SXNWYWxpZChcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBpc1ZhbGlkOiBib29sZWFuXG4pOiBNZXJnZTxMYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX1NFVF9JU19WQUxJRH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9TRVRfSVNfVkFMSUQsXG4gICAgb2xkTGF5ZXIsXG4gICAgaXNWYWxpZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBMYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld1R5cGU6IHN0cmluZztcbn07XG4vKipcbiAqIFVwZGF0ZSBsYXllciB0eXBlLiBQcmV2aWV3cyBsYXllciBjb25maWcgd2lsbCBiZSBjb3BpZWQgaWYgYXBwbGljYWJsZS5cbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBuZXdUeXBlIC0gbmV3IHR5cGVcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld1R5cGU6IHN0cmluZ1xuKTogTWVyZ2U8TGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9UWVBFX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9UWVBFX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdUeXBlXG4gIH07XG59XG5leHBvcnQgdHlwZSBMYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllclsnY29uZmlnJ10+O1xuICBjaGFubmVsOiBzdHJpbmc7XG4gIG5ld1Zpc0NvbmZpZz86IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+O1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3Q29uZmlnIC0gbmV3IHZpc3VhbCBjaGFubmVsIGNvbmZpZ1xuICogQHBhcmFtIGNoYW5uZWwgLSBjaGFubmVsIHRvIGJlIHVwZGF0ZWRcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+LFxuICBjaGFubmVsOiBzdHJpbmcsXG4gIG5ld1Zpc0NvbmZpZz86IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+XG4pOiBNZXJnZTxcbiAgTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNVQUxfQ0hBTk5FTF9DSEFOR0V9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNVQUxfQ0hBTk5FTF9DSEFOR0UsXG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnLFxuICAgIGNoYW5uZWwsXG4gICAgbmV3VmlzQ29uZmlnXG4gIH07XG59XG5leHBvcnQgdHlwZSBMYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG9sZExheWVyOiBMYXllcjtcbiAgbmV3VmlzQ29uZmlnOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPjtcbn07XG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG9sZExheWVyIC0gbGF5ZXIgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIG5ld1Zpc0NvbmZpZyAtIG5ldyB2aXNDb25maWcgYXMgYSBrZXkgdmFsdWUgbWFwOiBlLmcuIGB7b3BhY2l0eTogMC44fWBcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdDaGFuZ2UoXG4gIG9sZExheWVyOiBMYXllcixcbiAgbmV3VmlzQ29uZmlnOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPlxuKTogTWVyZ2U8TGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX1ZJU19DT05GSUdfQ0hBTkdFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX1ZJU19DT05GSUdfQ0hBTkdFLFxuICAgIG9sZExheWVyLFxuICAgIG5ld1Zpc0NvbmZpZ1xuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBwcm9wOiBzdHJpbmc7XG4gIG5ld0NvbmZpZzogTmVzdGVkUGFydGlhbDxDb2xvclVJPjtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBjb2xvciBwYWxldHRlIHVpIGZvciBsYXllciBjb2xvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG9sZExheWVyIC0gbGF5ZXIgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIHByb3AgLSB3aGljaCBjb2xvciBwcm9wXG4gKiBAcGFyYW0gbmV3Q29uZmlnIC0gdG8gYmUgbWVyZ2VkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29sb3JVSUNoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBwcm9wOiBzdHJpbmcsXG4gIG5ld0NvbmZpZzogTmVzdGVkUGFydGlhbDxDb2xvclVJPlxuKTogTWVyZ2U8TGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9DT0xPUl9VSV9DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfQ09MT1JfVUlfQ0hBTkdFLFxuICAgIG9sZExheWVyLFxuICAgIHByb3AsXG4gICAgbmV3Q29uZmlnXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uID0ge1xuICBtb2RlOiAnYWRkaXRpdmUnIHwgJ25vcm1hbCcgfCAnc3VidHJhY3RpdmUnO1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBtb2RlIG9uZSBvZiBgYWRkaXRpdmVgLCBgbm9ybWFsYCBhbmQgYHN1YnRyYWN0aXZlYFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckJsZW5kaW5nKFxuICBtb2RlOiAnYWRkaXRpdmUnIHwgJ25vcm1hbCcgfCAnc3VidHJhY3RpdmUnXG4pOiBNZXJnZTxVcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5VUERBVEVfTEFZRVJfQkxFTkRJTkd9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVVBEQVRFX0xBWUVSX0JMRU5ESU5HLFxuICAgIG1vZGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvbiA9IHtcbiAgbW9kZTogJ3NjcmVlbicgfCAnbm9ybWFsJyB8ICdkYXJrZW4nO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgb3ZlcmxheSBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gbW9kZSBvbmUgb2YgYHNjcmVlbmAsIGBub3JtYWxgIGFuZCBgZGFya2VuYFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVPdmVybGF5QmxlbmRpbmcoXG4gIG1vZGU6ICdzY3JlZW4nIHwgJ25vcm1hbCcgfCAnZGFya2VuJ1xuKTogTWVyZ2U8VXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5VUERBVEVfT1ZFUkxBWV9CTEVORElOR30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfT1ZFUkxBWV9CTEVORElORyxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgY29uZmlnOiBWYWx1ZU9mPEludGVyYWN0aW9uQ29uZmlnPjtcbn07XG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gY29uZmlnIC0gbmV3IGNvbmZpZyBhcyBrZXkgdmFsdWUgbWFwOiBge3Rvb2x0aXA6IHtlbmFibGVkOiB0cnVlfX1gXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlKFxuICBjb25maWc6IFZhbHVlT2Y8SW50ZXJhY3Rpb25Db25maWc+XG4pOiBNZXJnZTxcbiAgSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLklOVEVSQUNUSU9OX0NPTkZJR19DSEFOR0V9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5JTlRFUkFDVElPTl9DT05GSUdfQ0hBTkdFLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGZpbHRlcklkOiBzdHJpbmc7XG4gIG5ld0ZpbHRlcjogRmlsdGVyO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGNvbmZpZ1xuICogQHBhcmFtIGZpbHRlcklkIC0gaWQgb2YgdGhlIGZpbHRlciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3RmlsdGVyIC0gbmV3IGZpbHRlciBjb25maWdcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJDb25maWcoXG4gIGZpbHRlcklkOiBzdHJpbmcsXG4gIG5ld0ZpbHRlcjogRmlsdGVyXG4pOiBNZXJnZTxBcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQVBQTFlfRklMVEVSX0NPTkZJR30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BUFBMWV9GSUxURVJfQ09ORklHLFxuICAgIGZpbHRlcklkLFxuICAgIG5ld0ZpbHRlclxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgcHJvcDogc3RyaW5nIHwgc3RyaW5nW107XG4gIHZhbHVlOiBhbnk7XG4gIHZhbHVlSW5kZXg/OiBudW1iZXI7XG59O1xuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IC1gaWR4YCBvZiBmaWx0ZXIgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIHByb3AgLSBgcHJvcGAgb2YgZmlsdGVyLCBlLGcsIGBkYXRhSWRgLCBgbmFtZWAsIGB2YWx1ZWBcbiAqICAgICAgICAgICAgICAgIG9yIGFuIGFycmF5IGUuZy4gWydpZHgnLCAnbmFtZSddLiBpbiB0aGF0IGNhc2UgdGhlIHZhbHVlXG4gKiAgICAgICAgICAgICAgICBzaG91bGQgYWxzbyBiZSBhbiBhcnJheSBvZiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgKGJ5IGluZGV4KVxuICogQHBhcmFtIHZhbHVlIC0gbmV3IHZhbHVlXG4gKiBAcGFyYW0gdmFsdWVJbmRleCAtIGRhdGFJZCBpbmRleFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXIoXG4gIGlkeDogbnVtYmVyLFxuICBwcm9wOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdmFsdWU6IGFueSxcbiAgdmFsdWVJbmRleD86IG51bWJlclxuKTogTWVyZ2U8U2V0RmlsdGVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9GSUxURVIsXG4gICAgaWR4LFxuICAgIHByb3AsXG4gICAgdmFsdWUsXG4gICAgdmFsdWVJbmRleFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG4gIHByb3A6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbiAgdmFsdWVJbmRleD86IG51bWJlcjtcbn07XG4vKipcbiAqIFNhbWUgYXMgVXBkYXRlIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCAtYGlkeGAgb2YgZmlsdGVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIGZpbHRlciwgZSxnLCBgZGF0YUlkYCwgYG5hbWVgLCBgdmFsdWVgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IC0gZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWUoXG4gIGlkeDogbnVtYmVyLFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIHZhbHVlSW5kZXg/OiBudW1iZXJcbik6IE1lcmdlPFxuICBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX0FOSU1BVElPTl9USU1FfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRSxcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZSxcbiAgICB2YWx1ZUluZGV4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGFuaW1hdGlvbldpbmRvdzogc3RyaW5nO1xufTtcbi8qKlxuICogU2FtZSBhcyBVcGRhdGUgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3coe1xuICBpZCxcbiAgYW5pbWF0aW9uV2luZG93XG59OiBTZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uKTogTWVyZ2U8XG4gIFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XLFxuICAgIGlkLFxuICAgIGFuaW1hdGlvbldpbmRvd1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBZGRGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw7XG4gIGlkPzogc3RyaW5nO1xufTtcbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCAtIGRhdGFzZXQgYGlkYCB0aGlzIG5ldyBmaWx0ZXIgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcGFyYW0gaWQgLSBgaWRgIGZvciB0aGUgbmV3IGZpbHRlclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRGaWx0ZXIoXG4gIGRhdGFJZDogc3RyaW5nIHwgbnVsbCxcbiAgaWQ/OiBzdHJpbmdcbik6IE1lcmdlPEFkZEZpbHRlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQUREX0ZJTFRFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BRERfRklMVEVSLFxuICAgIGRhdGFJZCxcbiAgICBpZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBDcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkPzogc3RyaW5nO1xuICBkYXRhSWQ/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgZmllbGQ/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgdmFsdWU/OiBhbnk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBvciB1cGRhdGVzIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkIC0gZGF0YXNldCBgaWRgIHRoaXMgbmV3IGZpbHRlciBpcyBhc3NvY2lhdGVkIHdpdGhcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3JVcGRhdGVGaWx0ZXIoXG4gIGlkPzogc3RyaW5nLFxuICBkYXRhSWQ/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgZmllbGQ/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdmFsdWU/OiBhbnlcbik6IE1lcmdlPENyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5DUkVBVEVfT1JfVVBEQVRFX0ZJTFRFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5DUkVBVEVfT1JfVVBEQVRFX0ZJTFRFUixcbiAgICBpZCxcbiAgICBkYXRhSWQsXG4gICAgZmllbGQsXG4gICAgdmFsdWVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQWRkTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBjb25maWc/OiBvYmplY3Q7XG4gIGRhdGFzZXRJZD86IHN0cmluZztcbn07XG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGNvbmZpZyAtIG5ldyBsYXllciBjb25maWdcbiAqIEBwYXJhbSBkYXRhc2V0SWQgLSBkYXRhc2V0IGlkIHVzZWQgZm9yIGNyZWF0aW5nIGFuIGVtcHR5IGxheWVyXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyKFxuICBjb25maWc/OiBvYmplY3QsXG4gIGRhdGFzZXRJZD86IHN0cmluZ1xuKTogTWVyZ2U8QWRkTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFERF9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BRERfTEFZRVIsXG4gICAgY29uZmlnLFxuICAgIGRhdGFzZXRJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBvcmRlcjogc3RyaW5nW107XG59O1xuLyoqXG4gKiBSZW9yZGVyIGxheWVyLCBvcmRlciBpcyBhbiBhcnJheSBvZiBsYXllciBpbmRleGVzLCBpbmRleCAwIHdpbGwgYmUgdGhlIG9uZSBhdCB0aGUgYm90dG9tXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb3JkZXIgYW4gYXJyYXkgb2YgbGF5ZXIgaW5kZXhlc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGJyaW5nIGBsYXllcnNbMV1gIGJlbG93IGBsYXllcnNbMF1gLCB0aGUgc2VxdWVuY2UgbGF5ZXJzIHdpbGwgYmUgcmVuZGVyZWQgaXMgYGxheWVyc1sxXS5pZGAsIGBsYXllcnNbMF0uaWRgLCBgbGF5ZXJzWzJdLmlkYCwgYGxheWVyc1szXS5pZGAuXG4gKiBgbGF5ZXJzWzFdYCB3aWxsIGJlIGF0IHRoZSBib3R0b20sIGBsYXllcnNbMTNdYCB3aWxsIGJlIGF0IHRoZSB0b3AuXG4gKiB0aGlzLnByb3BzLmRpc3BhdGNoKHJlb3JkZXJMYXllcihbYGxheWVyc1sxXS5pZGAsIGBsYXllcnNbMF0uaWRgLCBgbGF5ZXJzWzJdLmlkYCwgYGxheWVyc1szXS5pZGBdKSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW9yZGVyTGF5ZXIoXG4gIG9yZGVyOiBzdHJpbmdbXVxuKTogTWVyZ2U8UmVvcmRlckxheWVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5SRU9SREVSX0xBWUVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFT1JERVJfTEFZRVIsXG4gICAgb3JkZXJcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVtb3ZlRmlsdGVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG59O1xuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXIgZnJvbSBgdmlzU3RhdGUuZmlsdGVyc2AsIG9uY2UgYSBmaWx0ZXIgaXMgcmVtb3ZlZCwgZGF0YSB3aWxsIGJlIHJlLWZpbHRlcmVkIGFuZCBsYXllciB3aWxsIGJlIHVwZGF0ZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggaWR4IG9mIGZpbHRlciB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZpbHRlcihcbiAgaWR4OiBudW1iZXJcbik6IE1lcmdlPFJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVNT1ZFX0ZJTFRFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU1PVkVfRklMVEVSLFxuICAgIGlkeFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW1vdmVMYXllclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBSZW1vdmUgYSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkIGlkeCBvZiBsYXllciB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyKFxuICBpZDogc3RyaW5nXG4pOiBNZXJnZTxSZW1vdmVMYXllclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVNT1ZFX0xBWUVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFTU9WRV9MQVlFUixcbiAgICBpZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBEdXBsaWNhdGVMYXllclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBEdXBsaWNhdGUgYSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkIGlkIG9mIGxheWVyIHRvIGJlIGR1cGxpY2F0ZWRcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZHVwbGljYXRlTGF5ZXIoXG4gIGlkOiBzdHJpbmdcbik6IE1lcmdlPER1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5EVVBMSUNBVEVfTEFZRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuRFVQTElDQVRFX0xBWUVSLFxuICAgIGlkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEFkZEVmZmVjdFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGNvbmZpZzogRWZmZWN0UHJvcHNQYXJ0aWFsO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gY29uZmlnIC0gbmV3IGVmZmVjdCBjb25maWdcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRWZmZWN0KFxuICBjb25maWc6IEVmZmVjdFByb3BzUGFydGlhbFxuKTogTWVyZ2U8QWRkRWZmZWN0VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5BRERfRUZGRUNUfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkFERF9FRkZFQ1QsXG4gICAgY29uZmlnXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFJlb3JkZXJFZmZlY3RVcGRhdGVyQWN0aW9uID0ge1xuICBvcmRlcjogc3RyaW5nW107XG59O1xuXG4vKipcbiAqIFJlb3JkZXIgZWZmZWN0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG9yZGVyIGFuIGFycmF5IG9mIGVmZmVjdCBpZHNcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckVmZmVjdChcbiAgb3JkZXI6IHN0cmluZ1tdXG4pOiBNZXJnZTxSZW9yZGVyRWZmZWN0VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5SRU9SREVSX0VGRkVDVH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU9SREVSX0VGRkVDVCxcbiAgICBvcmRlclxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW1vdmVFZmZlY3RVcGRhdGVyQWN0aW9uID0ge1xuICBpZDogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWQgaWR4IG9mIHRoZSBlZmZlY3QgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFZmZlY3QoXG4gIGlkOiBzdHJpbmdcbik6IE1lcmdlPFJlbW92ZUVmZmVjdFVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVNT1ZFX0VGRkVDVH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU1PVkVfRUZGRUNULFxuICAgIGlkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFVwZGF0ZUVmZmVjdFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHByb3BzOiBFZmZlY3RQcm9wc1BhcnRpYWw7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwcm9wcyBpZHggb2YgdGhlIGVmZmVjdCB0byBiZSB1cGRhdGVkIHdpdGggc3BlY2lmaWVkIHByb3BzXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUVmZmVjdChcbiAgaWQ6IHN0cmluZyxcbiAgcHJvcHM6IEVmZmVjdFByb3BzUGFydGlhbFxuKTogTWVyZ2U8VXBkYXRlRWZmZWN0VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5VUERBVEVfRUZGRUNUfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9FRkZFQ1QsXG4gICAgaWQsXG4gICAgcHJvcHNcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVtb3ZlRGF0YXNldFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xufTtcbi8qKlxuICogUmVtb3ZlIGEgZGF0YXNldCBhbmQgYWxsIGxheWVycywgZmlsdGVycywgdG9vbHRpcCBjb25maWdzIHRoYXQgYmFzZWQgb24gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBkYXRhSWQgZGF0YXNldCBpZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEYXRhc2V0KFxuICBkYXRhSWQ6IHN0cmluZ1xuKTogTWVyZ2U8UmVtb3ZlRGF0YXNldFVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVNT1ZFX0RBVEFTRVR9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVNT1ZFX0RBVEFTRVQsXG4gICAgZGF0YUlkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbn07XG4vKipcbiAqIERpc3BsYXkgZGF0YXNldCB0YWJsZSBpbiBhIG1vZGFsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkIGRhdGFzZXQgaWQgdG8gc2hvdyBpbiB0YWJsZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG93RGF0YXNldFRhYmxlKFxuICBkYXRhSWQ6IHN0cmluZ1xuKTogTWVyZ2U8U2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0hPV19EQVRBU0VUX1RBQkxFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNIT1dfREFUQVNFVF9UQUJMRSxcbiAgICBkYXRhSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlRGF0YXNldENvbG9yVXBkYXRlciA9IHtcbiAgZGF0YUlkOiBzdHJpbmc7XG4gIG5ld0NvbG9yOiBSR0JDb2xvcjtcbn07XG4vKipcbiAqIFVwZGF0ZSBkYXRhc2V0IGNvbG9yIHRvIGN1c3RvbSBieSBtZWFucyBvZiBjb2xvciBwaWNrZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBkYXRhSWQgZGF0YXNldCBgaWRgIHRoaXMgY3VzdG9tIGNvbG9yIGlzIGFzc29jaWF0ZWQgd2l0aFxuICogQHBhcmFtIG5ld0NvbG9yIGN1c3RvbSBjb2xvciBpbiBSR0Jmb3JtYXRcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVGFibGVDb2xvcihcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIG5ld0NvbG9yOiBSR0JDb2xvclxuKTogTWVyZ2U8VXBkYXRlRGF0YXNldENvbG9yVXBkYXRlciwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5VUERBVEVfVEFCTEVfQ09MT1J9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVVBEQVRFX1RBQkxFX0NPTE9SLFxuICAgIGRhdGFJZCxcbiAgICBuZXdDb2xvclxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG4gIG1vZGU/OiBzdHJpbmc7XG59O1xuLyoqXG4gKiBTb3J0IGRhdGFzZXQgY29sdW1uLCBmb3IgdGFibGUgZGlzcGxheVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZFxuICogQHBhcmFtIGNvbHVtblxuICogQHBhcmFtIG1vZGVcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFRhYmxlQ29sdW1uKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29sdW1uOiBzdHJpbmcsXG4gIG1vZGU/OiBzdHJpbmdcbik6IE1lcmdlPFNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU09SVF9UQUJMRV9DT0xVTU59PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU09SVF9UQUJMRV9DT0xVTU4sXG4gICAgZGF0YUlkLFxuICAgIGNvbHVtbixcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmc7XG4gIGNvbHVtbjogc3RyaW5nO1xufTtcbi8qKlxuICogUGluIGRhdGFzZXQgY29sdW1uLCBmb3IgdGFibGUgZGlzcGxheVxuICogQHBhcmFtIGRhdGFJZFxuICogQHBhcmFtIGNvbHVtblxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaW5UYWJsZUNvbHVtbihcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGNvbHVtbjogc3RyaW5nXG4pOiBNZXJnZTxQaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUElOX1RBQkxFX0NPTFVNTn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5QSU5fVEFCTEVfQ09MVU1OLFxuICAgIGRhdGFJZCxcbiAgICBjb2x1bW5cbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ29weVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmc7XG4gIGNvbHVtbjogc3RyaW5nO1xufTtcbi8qKlxuICogQ29weSBjb2x1bW4sIGZvciB0YWJsZSBkaXNwbGF5XG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtbihcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGNvbHVtbjogc3RyaW5nXG4pOiBNZXJnZTxDb3B5VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkNPUFlfVEFCTEVfQ09MVU1OfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkNPUFlfVEFCTEVfQ09MVU1OLFxuICAgIGRhdGFJZCxcbiAgICBjb2x1bW5cbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBmb3JtYXRzOiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9O1xufTtcblxuLyoqXG4gKiBTZXQgY29sdW1uIGRpc3BsYXkgZm9ybWF0XG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gZm9ybWF0c1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0KFxuICBkYXRhSWQ6IFNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyQWN0aW9uWydkYXRhSWQnXSxcbiAgZm9ybWF0czogU2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXJBY3Rpb25bJ2Zvcm1hdHMnXVxuKTogTWVyZ2U8XG4gIFNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9DT0xVTU5fRElTUExBWV9GT1JNQVR9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfQ09MVU1OX0RJU1BMQVlfRk9STUFULFxuICAgIGRhdGFJZCxcbiAgICBmb3JtYXRzXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEFkZERhdGFUb01hcFVwZGF0ZXJPcHRpb25zID0ge1xuICBjZW50ZXJNYXA/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG4gIGtlZXBFeGlzdGluZ0NvbmZpZz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBVcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YXNldHM6IEFkZERhdGFUb01hcFBheWxvYWRbJ2RhdGFzZXRzJ107XG4gIG9wdGlvbnM6IEFkZERhdGFUb01hcFBheWxvYWRbJ29wdGlvbnMnXTtcbiAgY29uZmlnPzogUGFyc2VkQ29uZmlnO1xufTtcbi8vICogQHBhcmFtIGRhdGFzZXQuaW5mbyAtaW5mbyBvZiBhIGRhdGFzZXRcbi8vICogQHBhcmFtIGRhdGFzZXQuaW5mby5pZCAtIGlkIG9mIHRoaXMgZGF0YXNldC4gSWYgY29uZmlnIGlzIGRlZmluZWQsIGBpZGAgc2hvdWxkIG1hdGNoZXMgdGhlIGBkYXRhSWRgIGluIGNvbmZpZy5cbi8vICogQHBhcmFtIGRhdGFzZXQuaW5mby5sYWJlbCAtIEEgZGlzcGxheSBuYW1lIG9mIHRoaXMgZGF0YXNldFxuLy8gKiBAcGFyYW0gZGF0YXNldC5kYXRhIC0gKioqcmVxdWlyZWQqKiBUaGUgZGF0YSBvYmplY3QsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCAyIHByb3BlcnRpZXMgYGZpZWxkc2AgYW5kIGByb3dzYFxuLy8gKiBAcGFyYW0gZGF0YXNldC5kYXRhLmZpZWxkcyAtICoqKnJlcXVpcmVkKiogQXJyYXkgb2YgZmllbGRzLFxuLy8gKiBAcGFyYW0gZGF0YXNldC5kYXRhLmZpZWxkcy5uYW1lIC0gKioqcmVxdWlyZWQqKiBOYW1lIG9mIHRoZSBmaWVsZCxcbi8vICogQHBhcmFtIGRhdGFzZXQuZGF0YS5yb3dzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiByb3dzLCBpbiBhIHRhYnVsYXIgZm9ybWF0IHdpdGggYGZpZWxkc2AgYW5kIGByb3dzYFxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBkYXRhc2V0cyAtICoqKnJlcXVpcmVkKiogZGF0YXNldHMgY2FuIGJlIGEgZGF0YXNldCBvciBhbiBhcnJheSBvZiBkYXRhc2V0c1xuICogRWFjaCBkYXRhc2V0IG9iamVjdCBuZWVkcyB0byBoYXZlIGBpbmZvYCBhbmQgYGRhdGFgIHByb3BlcnR5LlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSBvcHRpb25zLmNlbnRlck1hcCBgZGVmYXVsdDogdHJ1ZWAgaWYgYGNlbnRlck1hcGAgaXMgc2V0IHRvIGB0cnVlYCBrZXBsZXIuZ2wgd2lsbFxuICogcGxhY2UgdGhlIG1hcCB2aWV3IHdpdGhpbiB0aGUgZGF0YSBwb2ludHMgYm91bmRhcmllc1xuICogQHBhcmFtIG9wdGlvbnMucmVhZE9ubHkgYGRlZmF1bHQ6IGZhbHNlYCBpZiBgcmVhZE9ubHlgIGlzIHNldCB0byBgdHJ1ZWBcbiAqIHRoZSBsZWZ0IHNldHRpbmcgcGFuZWwgd2lsbCBiZSBoaWRkZW5cbiAqIEBwYXJhbSBjb25maWcgdGhpcyBvYmplY3Qgd2lsbCBjb250YWluIHRoZSBmdWxsIGtlcGxlci5nbCBpbnN0YW5jZSBjb25maWd1cmF0aW9uIHttYXBTdGF0ZSwgbWFwU3R5bGUsIHZpc1N0YXRlfVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWaXNEYXRhKFxuICBkYXRhc2V0czogQWRkRGF0YVRvTWFwUGF5bG9hZFsnZGF0YXNldHMnXSxcbiAgb3B0aW9uczogQWRkRGF0YVRvTWFwUGF5bG9hZFsnb3B0aW9ucyddLFxuICBjb25maWc/OiBQYXJzZWRDb25maWdcbik6IE1lcmdlPFVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9WSVNfREFUQX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfVklTX0RBVEEsXG4gICAgZGF0YXNldHMsXG4gICAgb3B0aW9ucyxcbiAgICBjb25maWdcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xufTtcbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCAtICoqKnJlcXVpcmVkKiogSWQgb2YgdGhlIGRhdGFzZXQgdG8gdXBkYXRlXG4gKiBAcGFyYW0gbGFiZWwgLSAqKipyZXF1aXJlZCoqIE5ldyBuYW1lIGZvciB0aGUgZGF0YXNldFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0KFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgbGFiZWw6IHN0cmluZ1xuKTogTWVyZ2U8UmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVOQU1FX0RBVEFTRVR9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVOQU1FX0RBVEFTRVQsXG4gICAgZGF0YUlkLFxuICAgIGxhYmVsXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBwcm9wczoge1xuICAgIGxhYmVsPzogc3RyaW5nO1xuICAgIGNvbG9yPzogUkdCQ29sb3I7XG4gICAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfTtcbn07XG4vKipcbiAqIFVwZGF0ZSBhbiBleGlzdGluZyBkYXRhc2V0IHByb3BzIGluIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSBkYXRhSWQgLSAqKipyZXF1aXJlZCoqIElkIG9mIHRoZSBkYXRhc2V0IHRvIHVwZGF0ZVxuICogQHBhcmFtIHByb3BzIC0gKioqcmVxdWlyZWQqKiBOZXcgcHJvcHMgdG8gdXBkYXRlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRQcm9wcyhcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIHByb3BzOiB7XG4gICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgY29sb3I/OiBSR0JDb2xvcjtcbiAgICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG4pOiBNZXJnZTxVcGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9EQVRBU0VUX1BST1BTfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9EQVRBU0VUX1BST1BTLFxuICAgIGRhdGFJZCxcbiAgICBwcm9wc1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBUb2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIHtOdW1iZXJ9IGlkeCBvZiBmaWx0ZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlRmlsdGVyQW5pbWF0aW9uKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8VG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5UT0dHTEVfRklMVEVSX0FOSU1BVElPTn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfRklMVEVSX0FOSU1BVElPTixcbiAgICBpZHhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgc3BlZWQ6IG51bWJlcjtcbn07XG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IC0gIGBpZHhgIG9mIGZpbHRlclxuICogQHBhcmFtIHNwZWVkIC0gYHNwZWVkYCB0byBjaGFuZ2UgaXQgdG8uIGBzcGVlZGAgaXMgYSBtdWx0aXBsaWVyXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkKFxuICBpZHg6IG51bWJlcixcbiAgc3BlZWQ6IG51bWJlclxuKTogTWVyZ2U8XG4gIFVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5VUERBVEVfRklMVEVSX0FOSU1BVElPTl9TUEVFRH1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9GSUxURVJfQU5JTUFUSU9OX1NQRUVELFxuICAgIGlkeCxcbiAgICBzcGVlZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uID0ge1xuICBjb25maWc6IEFuaW1hdGlvbkNvbmZpZyB8IEZpbHRlckFuaW1hdGlvbkNvbmZpZztcbn07XG4vKipcbiAqIFNldCBhbmltYXRpb24gY29uZmlnOiB3b3JrcyB3aXRoIGJvdGggbGF5ZXIgYW5pbWF0aW9uIGFuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAcGFyYW0gY29uZmlnXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEFuaW1hdGlvbkNvbmZpZyhcbiAgY29uZmlnOiBBbmltYXRpb25Db25maWcgfCBGaWx0ZXJBbmltYXRpb25Db25maWdcbik6IE1lcmdlPFNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0FOSU1BVElPTl9DT05GSUd9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0FOSU1BVElPTl9DT05GSUcsXG4gICAgY29uZmlnXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIHZhbHVlOiBudW1iZXIgfCBudWxsO1xufTtcbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gdmFsdWUgLSAgQ3VycmVudCB2YWx1ZSBvZiB0aGUgc2xpZGVyXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExheWVyQW5pbWF0aW9uVGltZShcbiAgdmFsdWU6IG51bWJlclxuKTogTWVyZ2U8U2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUV9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0xBWUVSX0FOSU1BVElPTl9USU1FLFxuICAgIHZhbHVlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uID0ge1xuICBzcGVlZDogbnVtYmVyO1xufTtcbi8qKlxuICogdXBkYXRlIHRyaXAgbGF5ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gc3BlZWQgLSBgc3BlZWRgIHRvIGNoYW5nZSBpdCB0by4gYHNwZWVkYCBpcyBhIG11bHRpcGxpZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZChcbiAgc3BlZWQ6IG51bWJlclxuKTogTWVyZ2U8XG4gIFVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9MQVlFUl9BTklNQVRJT05fU1BFRUR9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfTEFZRVJfQU5JTUFUSU9OX1NQRUVELFxuICAgIHNwZWVkXG4gIH07XG59XG5leHBvcnQgdHlwZSBUb2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXJBY3Rpb24gPSB2b2lkO1xuLyoqXG4gKiBzdGFydCBlbmQgZW5kIGxheWVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMYXllckFuaW1hdGlvbigpOiBNZXJnZTxcbiAgVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9BTklNQVRJT059XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfTEFZRVJfQU5JTUFUSU9OXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXJBY3Rpb24gPSB2b2lkO1xuLyoqXG4gKiBoaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbCgpOiBNZXJnZTxcbiAgVG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5UT0dHTEVfTEFZRVJfQU5JTUFUSU9OX0NPTlRST0x9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfTEFZRVJfQU5JTUFUSU9OX0NPTlRST0xcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICB2aWV3OiBGaWx0ZXJbJ3ZpZXcnXTtcbn07XG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSBpbmRleCBvZiBmaWx0ZXIgdG8gZW5sYXJnZVxuICogQHBhcmFtIHZpZXcgLSB0eXBlIG9mIGZpbHRlciB2aWV3XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlclZpZXcoXG4gIGlkeDogbnVtYmVyLFxuICB2aWV3OiBGaWx0ZXJbJ3ZpZXcnXVxuKTogTWVyZ2U8U2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9WSUVXfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9GSUxURVJfVklFVyxcbiAgICBpZHgsXG4gICAgdmlld1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBUb2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG59O1xuLyoqXG4gKiBTaG93L2hpZGUgZmlsdGVyIGZlYXR1cmUgb24gbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IC0gaW5kZXggb2YgZmlsdGVyIGZlYXR1cmUgdG8gc2hvdy9oaWRlXG4gKiBAcmV0dXJuIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlRmlsdGVyRmVhdHVyZShcbiAgaWR4OiBudW1iZXJcbik6IE1lcmdlPFRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfRkVBVFVSRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfRklMVEVSX0ZFQVRVUkUsXG4gICAgaWR4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIE9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGluZm86IFBpY2tJbmZvPGFueT4gfCBudWxsO1xuICBtYXBJbmRleD86IG51bWJlcjtcbn07XG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGluZm8gLSBPYmplY3QgaG92ZXJlZCwgcmV0dXJuZWQgYnkgZGVjay5nbC5cbiAqIEBwYXJhbSBtYXBJbmRleCAtIE9wdGlvbmFsIHByb3BlcnR5IGZvciBsaW1pdGluZyB0aGUgZGlzcGxheSBvZiB0aGUgYDxNYXBQb3BvdmVyPmAgdG8gdGhlIGA8TWFwQ29udGFpbmVyPmAgdGhlIHVzZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aC5cbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gb25MYXllckhvdmVyKFxuICBpbmZvOiBQaWNrSW5mbzxhbnk+IHwgbnVsbCxcbiAgbWFwSW5kZXg/OiBudW1iZXJcbik6IE1lcmdlPE9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfSE9WRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfSE9WRVIsXG4gICAgaW5mbyxcbiAgICBtYXBJbmRleFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBPbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uID0ge1xuICBpbmZvOiBQaWNrSW5mbzxhbnk+IHwgbnVsbDtcbn07XG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGluZm8gLSBPYmplY3QgY2xpY2tlZCwgcmV0dXJuZWQgYnkgZGVjay5nbFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkxheWVyQ2xpY2soXG4gIGluZm86IFBpY2tJbmZvPGFueT4gfCBudWxsXG4pOiBNZXJnZTxPbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX0NMSUNLfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX0NMSUNLLFxuICAgIGluZm9cbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT25NYXBDbGlja1VwZGF0ZXJBY3Rpb24gPSB2b2lkO1xuLyoqXG4gKiBUcmlnZ2VyIG1hcCBjbGljayBldmVudCwgdW5zZWxlY3QgY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gb25NYXBDbGljaygpOiBNZXJnZTxPbk1hcENsaWNrVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5NQVBfQ0xJQ0t9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTUFQX0NMSUNLXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIE9uTW91c2VNb3ZlVXBkYXRlckFjdGlvbiA9IHtcbiAgZXZ0O1xufTtcbi8qKlxuICogVHJpZ2dlciBtYXAgbW91c2UgbW92ZWV2ZW50LCBwYXlsb2FkIHdvdWxkIGJlXG4gKiBSZWFjdC1tYXAtZ2wgTWFwTGF5ZXJNb3VzZUV2ZW50XG4gKiBodHRwczovL3Zpc2dsLmdpdGh1Yi5pby9yZWFjdC1tYXAtZ2wvZG9jcy9hcGktcmVmZXJlbmNlL3R5cGVzI21hcGxheWVybW91c2VldmVudFxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBldnQgLSBNYXBMYXllck1vdXNlRXZlbnRcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gb25Nb3VzZU1vdmUoXG4gIGV2dFxuKTogTWVyZ2U8T25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk1PVVNFX01PVkV9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTU9VU0VfTU9WRSxcbiAgICBldnRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uID0ge1xuICBtYXBJbmRleDogbnVtYmVyO1xuICBsYXllcklkOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gbWFwSW5kZXggLSBpbmRleCBvZiB0aGUgc3BsaXQgbWFwXG4gKiBAcGFyYW0gbGF5ZXJJZCAtIGlkIG9mIHRoZSBsYXllclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMYXllckZvck1hcChcbiAgbWFwSW5kZXg6IG51bWJlcixcbiAgbGF5ZXJJZDogc3RyaW5nXG4pOiBNZXJnZTxUb2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0xBWUVSX0ZPUl9NQVB9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVE9HR0xFX0xBWUVSX0ZPUl9NQVAsXG4gICAgbWFwSW5kZXgsXG4gICAgbGF5ZXJJZFxuICB9O1xufVxuXG50eXBlIEZpbHRlclBsb3ROZXdQcm9wID0ge1xuICB5QXhpcz86IG51bGwgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBwbG90VHlwZT86IHt0eXBlOiBzdHJpbmd9O1xufTtcbmV4cG9ydCB0eXBlIFNldEZpbHRlclBsb3RVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgbmV3UHJvcDogRmlsdGVyUGxvdE5ld1Byb3A7XG4gIHZhbHVlSW5kZXg/OiBudW1iZXI7XG59O1xuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHhcbiAqIEBwYXJhbSBuZXdQcm9wIGtleSB2YWx1ZSBtYXBwaW5nIG9mIG5ldyBwcm9wIGB7eUF4aXM6ICdoaXN0b2dyYW0nfWBcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IGRhdGFJZCBpbmRleFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJQbG90KFxuICBpZHg6IG51bWJlcixcbiAgbmV3UHJvcDogRmlsdGVyUGxvdE5ld1Byb3AsXG4gIHZhbHVlSW5kZXg/OiBudW1iZXJcbik6IE1lcmdlPFNldEZpbHRlclBsb3RVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9GSUxURVJfUExPVH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX1BMT1QsXG4gICAgaWR4LFxuICAgIG5ld1Byb3AsXG4gICAgdmFsdWVJbmRleFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRNYXBJbmZvVXBkYXRlckFjdGlvbiA9IHtcbiAgaW5mbzogYW55O1xufTtcbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaW5mb1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRNYXBJbmZvKFxuICBpbmZvOiBhbnlcbik6IE1lcmdlPFNldE1hcEluZm9VcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9NQVBfSU5GT30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfTUFQX0lORk8sXG4gICAgaW5mb1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBMb2FkRmlsZXNVcGRhdGVyQWN0aW9uID0ge1xuICBmaWxlczogRmlsZVtdO1xuICBvbkZpbmlzaD8ocmVzdWx0OiBhbnkpOiBhbnk7XG59O1xuLyoqXG4gKiBUcmlnZ2VyIGZpbGUgbG9hZGluZyBkaXNwYXRjaCBgYWRkRGF0YVRvTWFwYCBpZiBzdWNjZWVkLCBvciBgbG9hZEZpbGVzRXJyYCBpZiBmYWlsZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBmaWxlcyBhcnJheSBvZiBmaWxlYmxvYlxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXMoXG4gIGZpbGVzOiBGaWxlW10sXG4gIG9uRmluaXNoPzogKHJlc3VsdDogYW55KSA9PiBhbnlcbik6IE1lcmdlPExvYWRGaWxlc1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTE9BRF9GSUxFU30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MT0FEX0ZJTEVTLFxuICAgIGZpbGVzLFxuICAgIG9uRmluaXNoXG4gIH07XG59XG5cbi8qKlxuICogQ2FsbGVkIHdpdGggbmV4dCBmaWxlIHRvIGxvYWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlKCk6IHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTE9BRF9ORVhUX0ZJTEV9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MT0FEX05FWFRfRklMRVxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBsb2FkRmlsZXNTdWNjZXNzVXBkYXRlckFjdGlvbiA9IHtcbiAgcmVzdWx0OiBGaWxlQ2FjaGVJdGVtW107XG59O1xuLyoqXG4gKiBjYWxsZWQgd2hlbiBhbGwgZmlsZXMgYXJlIHByb2Nlc3NlZCBhbmQgbG9hZGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gcmVzdWx0XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlc1N1Y2Nlc3MoXG4gIHJlc3VsdDogRmlsZUNhY2hlSXRlbVtdXG4pOiBNZXJnZTxsb2FkRmlsZXNTdWNjZXNzVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MT0FEX0ZJTEVTX1NVQ0NFU1N9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9GSUxFU19TVUNDRVNTLFxuICAgIHJlc3VsdFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBMb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uID0ge1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBmaWxlQ2FjaGU6IEZpbGVDYWNoZUl0ZW1bXTtcbn07XG4vKipcbiAqIGNhbGxlZCB3aGVuIHN1Y2Nlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIHJlYWR5IHRvIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gcmVzdWx0XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlU3RlcFN1Y2Nlc3Moe1xuICBmaWxlTmFtZSxcbiAgZmlsZUNhY2hlXG59OiB7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIGZpbGVDYWNoZTogRmlsZUNhY2hlSXRlbVtdO1xufSk6IE1lcmdlPExvYWRGaWxlU3RlcFN1Y2Nlc3NBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTE9BRF9GSUxFX1NURVBfU1VDQ0VTU30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MT0FEX0ZJTEVfU1RFUF9TVUNDRVNTLFxuICAgIGZpbGVOYW1lLFxuICAgIGZpbGVDYWNoZVxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uID0ge1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBlcnJvcjogYW55O1xufTtcbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSAgZXJyb3JcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXNFcnIoXG4gIGZpbGVOYW1lOiBzdHJpbmcsXG4gIGVycm9yOiBhbnlcbik6IE1lcmdlPExvYWRGaWxlc0VyclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTE9BRF9GSUxFU19FUlJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9GSUxFU19FUlIsXG4gICAgZmlsZU5hbWUsXG4gICAgZXJyb3JcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RmVhdHVyZXNVcGRhdGVyQWN0aW9uID0ge1xuICBmZWF0dXJlczogRmVhdHVyZVtdO1xufTtcbi8qKlxuICogU3RvcmUgZmVhdHVyZXMgdG8gc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBmZWF0dXJlc1xuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGZWF0dXJlcyhcbiAgZmVhdHVyZXM6IEZlYXR1cmVbXVxuKTogTWVyZ2U8U2V0RmVhdHVyZXNVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9GRUFUVVJFU30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfRkVBVFVSRVMsXG4gICAgZmVhdHVyZXNcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlckFjdGlvbiA9IHtcbiAgbGF5ZXI6IExheWVyO1xuICBmZWF0dXJlOiBGZWF0dXJlO1xufTtcbi8qKlxuICogSXQgd2lsbCBhcHBseSB0aGUgcHJvdmlkZSBmZWF0dXJlIGFzIGZpbHRlciB0byB0aGUgZ2l2ZW4gbGF5ZXIuXG4gKiBJZiB0aGUgZ2l2ZW4gZmVhdHVyZSBpcyBhbHJlYWR5IGFwcGxpZWQgYXMgZmlsdGVyIHRvIHRoZSBsYXllciwgaXQgd2lsbCByZW1vdmUgdGhlIGxheWVyIGZyb20gdGhlIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGxheWVyXG4gKiBAcGFyYW0gZmVhdHVyZVxuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyTGF5ZXIoXG4gIGxheWVyOiBMYXllcixcbiAgZmVhdHVyZTogRmVhdHVyZVxuKTogTWVyZ2U8U2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfUE9MWUdPTl9GSUxURVJfTEFZRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX1BPTFlHT05fRklMVEVSX0xBWUVSLFxuICAgIGxheWVyLFxuICAgIGZlYXR1cmVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlckFjdGlvbiA9IHtcbiAgZmVhdHVyZTogRmVhdHVyZSB8IG51bGw7XG4gIHNlbGVjdGlvbkNvbnRleHQ/OiBGZWF0dXJlU2VsZWN0aW9uQ29udGV4dDtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IGZlYXR1cmUgdG8gYmUgZWRpdGVkL2RlbGV0ZWQsXG4gKiBhbmQgdGhlIGNvbnRleHQgb2YgaG93IHRoZSBmZWF0dXJlIHdhcyBzZWxlY3RlZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBmZWF0dXJlXG4gKiBAcGFyYW0gc2VsZWN0aW9uQ29udGV4dFxuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRTZWxlY3RlZEZlYXR1cmUoXG4gIGZlYXR1cmU6IEZlYXR1cmUgfCBudWxsLFxuICBzZWxlY3Rpb25Db250ZXh0PzogRmVhdHVyZVNlbGVjdGlvbkNvbnRleHRcbik6IE1lcmdlPFNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX1NFTEVDVEVEX0ZFQVRVUkV9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX1NFTEVDVEVEX0ZFQVRVUkUsXG4gICAgZmVhdHVyZSxcbiAgICBzZWxlY3Rpb25Db250ZXh0XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIERlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uID0ge1xuICBmZWF0dXJlOiBGZWF0dXJlO1xufTtcbi8qKlxuICogRGVsZXRlIHRoZSBnaXZlbiBmZWF0dXJlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZmVhdHVyZVxuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlKFxuICBmZWF0dXJlOiBGZWF0dXJlXG4pOiBNZXJnZTxEZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5ERUxFVEVfRkVBVFVSRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5ERUxFVEVfRkVBVFVSRSxcbiAgICBmZWF0dXJlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEVkaXRvck1vZGVVcGRhdGVyQWN0aW9uID0ge1xuICBtb2RlOiBzdHJpbmc7XG59O1xuLyoqIFNldCB0aGUgbWFwIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBtb2RlIG9uZSBvZiBFRElUT1JfTU9ERVNcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7c2V0TWFwTW9kZX0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbiAqIGltcG9ydCB7RURJVE9SX01PREVTfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG4gKlxuICogdGhpcy5wcm9wcy5kaXNwYXRjaChzZXRNYXBNb2RlKEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04pKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRvck1vZGUoXG4gIG1vZGU6IHN0cmluZ1xuKTogTWVyZ2U8U2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0VESVRPUl9NT0RFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9FRElUT1JfTU9ERSxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXTtcbn07XG4vKipcbiAqIFRyaWdnZXIgQ1BVIGZpbHRlciBvZiBzZWxlY3RlZCBkYXRhc2V0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkIC0gc2luZ2xlIGRhdGFJZCBvciBhbiBhcnJheSBvZiBkYXRhSWRzXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5Q1BVRmlsdGVyKFxuICBkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdXG4pOiBNZXJnZTxBcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQVBQTFlfQ1BVX0ZJTFRFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BUFBMWV9DUFVfRklMVEVSLFxuICAgIGRhdGFJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBUb2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvbiA9IHZvaWQ7XG4vKipcbiAqIFRvZ2dsZSBlZGl0b3IgbGF5ZXIgdmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclZpc2liaWxpdHkoKTogTWVyZ2U8XG4gIFRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9FRElUT1JfVklTSUJJTElUWX1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9FRElUT1JfVklTSUJJTElUWVxuICB9O1xufVxuXG50eXBlIEZpbGVDb250ZW50ID0ge1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBoZWFkZXI6IHN0cmluZ1tdO1xuICBkYXRhOiBhbnk7XG59O1xuZXhwb3J0IHR5cGUgTmV4dEZpbGVCYXRjaFVwZGF0ZXJBY3Rpb24gPSB7XG4gIHBheWxvYWQ6IHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuICAgIGdlbjogQXN5bmNHZW5lcmF0b3I8RmlsZUNvbnRlbnQ+O1xuICAgIGZpbGVOYW1lOiBzdHJpbmc7XG4gICAgcHJvZ3Jlc3M/OiBhbnk7XG4gICAgYWNjdW11bGF0ZWQ/OiBhbnk7XG4gICAgb25GaW5pc2g6IChyZXN1bHQ6IGFueSkgPT4gYW55O1xuICB9O1xufTtcbi8qKlxuICogUHJvY2VzcyB0aGUgbmV4dCBmaWxlIGJhdGNoXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gcGF5bG9hZCAtIGJhdGNoIHBheWxvYWRcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0RmlsZUJhdGNoKFxuICBwYXlsb2FkOiBOZXh0RmlsZUJhdGNoVXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pOiBNZXJnZTxOZXh0RmlsZUJhdGNoVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5ORVhUX0ZJTEVfQkFUQ0h9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTkVYVF9GSUxFX0JBVENILFxuICAgIHBheWxvYWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDoge1xuICAgIGNvbnRlbnQ6IEZpbGVDb250ZW50O1xuICAgIGZpbGVDYWNoZTogRmlsZUNhY2hlSXRlbVtdO1xuICB9O1xufTtcbi8qKlxuICogUHJvY2VzcyB0aGUgZmlsZSBjb250ZW50XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gcGF5bG9hZCAtIHRoZSBmaWxlIGNvbnRlbnRcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZUNvbnRlbnQoXG4gIHBheWxvYWQ6IFByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVxuKTogTWVyZ2U8UHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5QUk9DRVNTX0ZJTEVfQ09OVEVOVH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5QUk9DRVNTX0ZJTEVfQ09OVEVOVCxcbiAgICBwYXlsb2FkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvbiA9IHtcbiAgY29uZmlnOiB7XG4gICAgdGltZXpvbmU/OiBzdHJpbmc7XG4gICAgdGltZUZvcm1hdD86IHN0cmluZztcbiAgfTtcbn07XG4vKipcbiAqIFNldCBsYXllciBhbmltYXRpb24gdGltZSBmb3JtYXQgYW5kIHRpbWV6b25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gY29uZmlnIC0ge3RpbWVGb3JtYXQ6IHN0cmluZywgdGltZXpvbmU6IHN0cmluZ31cbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcoXG4gIGNvbmZpZzogU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uWydjb25maWcnXVxuKTogTWVyZ2U8XG4gIFNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0xBWUVSX0FOSU1BVElPTl9USU1FX0NPTkZJRyxcbiAgICBjb25maWdcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG4gIGNvbmZpZzoge1xuICAgIHRpbWV6b25lPzogc3RyaW5nO1xuICAgIHRpbWVGb3JtYXQ/OiBzdHJpbmc7XG4gIH07XG59O1xuLyoqXG4gKiBTZXQgRmlsdGVyIGFuaW1hdGlvbiB0aW1lIGZvcm1hdCBhbmQgdGltZXpvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHhcbiAqIEBwYXJhbSBjb25maWdcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnKFxuICBpZHg6IFNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25bJ2lkeCddLFxuICBjb25maWc6IFNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25bJ2NvbmZpZyddXG4pOiBNZXJnZTxcbiAgU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX0FOSU1BVElPTl9USU1FX0NPTkZJR31cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9GSUxURVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHLFxuICAgIGlkeCxcbiAgICBjb25maWdcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uID0ge1xuICBldmVudDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgfTtcbiAgbGF5ZXI6IExheWVyO1xufTtcblxuLyoqXG4gKiBkZWNrLmdsIGxheWVyIGdwdSBmaWx0ZXIgY2FsbGJhY2tcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBsYXllclxuICogQHBhcmFtIGV2ZW50XG4gKiBAcmV0dXJuIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlKFxuICBsYXllcjogTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uWydsYXllciddLFxuICBldmVudDogTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uWydldmVudCddXG4pOiBNZXJnZTxMYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfRklMVEVSRURfSVRFTVNfQ0hBTkdFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX0ZJTFRFUkVEX0lURU1TX0NIQU5HRSxcbiAgICBsYXllcixcbiAgICBldmVudFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgZW5hYmxlOiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBTeW5jIHRpbWUgZmlsdGVyIHdpdGggbGF5ZXIgdGltZWxpbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHhcbiAqIEBwYXJhbSBlbmFibGVcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lKFxuICBpZHg6IFN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVBY3Rpb25bJ2lkeCddLFxuICBlbmFibGU6IFN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVBY3Rpb25bJ2VuYWJsZSddXG4pOiBNZXJnZTxcbiAgU3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZUFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TWU5DX1RJTUVfRklMVEVSX1dJVEhfTEFZRVJfVElNRUxJTkV9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TWU5DX1RJTUVfRklMVEVSX1dJVEhfTEFZRVJfVElNRUxJTkUsXG4gICAgaWR4LFxuICAgIGVuYWJsZVxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBzZXRUaW1lRmlsdGVyU3luY1RpbWVsaW5lTW9kZUFjdGlvbiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbW9kZTogU3luY1RpbWVsaW5lTW9kZTtcbn07XG5cbi8qKlxuICogU2V0IHRpbWUgZmlsdGVyIHN5bmMgdGltZWxpbmUgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkXG4gKiBAcGFyYW0gbW9kZVxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlKHtcbiAgaWQsXG4gIG1vZGVcbn06IHNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlQWN0aW9uKTogTWVyZ2U8XG4gIHNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNZTkNfVElNRV9GSUxURVJfVElNRUxJTkVfTU9ERX1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNZTkNfVElNRV9GSUxURVJfVElNRUxJTkVfTU9ERSxcbiAgICBpZCxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCA9IHtcbiAgcmVzdWx0czogKFByb21pc2VGdWxmaWxsZWRSZXN1bHQ8S2VwbGVyVGFibGU+IHwgUHJvbWlzZVJlamVjdGVkUmVzdWx0KVtdO1xuICBhZGRUb01hcE9wdGlvbnM6IEFkZERhdGFUb01hcFBheWxvYWRbJ29wdGlvbnMnXTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gYSBuZXcgZGF0YXNldCBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseSB2aWEgYXN5bmMgdGFibGUgbWV0aG9kc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIHBheWxvYWRcbiAqIEBwYXJhbSBwYXlsb2FkLnJlc3VsdHMgLSByZXN1bHRzIG9mIHByb21pc2VzLmFsbFNldHRsdGVkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MgPSBjcmVhdGVBY3Rpb248Q3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkPihcbiAgQWN0aW9uVHlwZXMuQ1JFQVRFX05FV19EQVRBU0VUX1NVQ0NFU1Ncbik7XG5cbmV4cG9ydCB0eXBlIFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkID0ge1xuICBjaGFuZ2U6IG51bWJlcjtcbn07XG5cbi8qKlxuICogQ2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBpdGVtcywgdXNlZCB0byByZW5kZXIgbG9hZGluZyBpbmRpY2F0b3IuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gcGF5bG9hZFxuICogQHBhcmFtIHBheWxvYWQuY2hhbmdlIENoYW5nZSBvZiBudW1iZXIgb2YgYWN0aXZlIGxvYWRpbmcgYWN0aW9ucy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExvYWRpbmdJbmRpY2F0b3IgPSBjcmVhdGVBY3Rpb248U2V0TG9hZGluZ0luZGljYXRvclBheWxvYWQ+KFxuICBBY3Rpb25UeXBlcy5TRVRfTE9BRElOR19JTkRJQ0FUT1Jcbik7XG5cbi8qKlxuICogVGhpcyBkZWNsYXJhdGlvbiBpcyBuZWVkZWQgdG8gZ3JvdXAgYWN0aW9ucyBpbiBkb2NzXG4gKi9cbi8qKlxuICogQWN0aW9ucyBoYW5kbGVkIG1vc3RseSBieSBgdmlzU3RhdGVgIHJlZHVjZXIuXG4gKiBUaGV5IG1hbmFnZSBob3cgZGF0YSBpcyBwcm9jZXNzZWQsIGZpbHRlcmVkIGFuZCBkaXNwbGF5ZWQgb24gdGhlIG1hcCBieSBvcGVyYXRlcyBvbiBsYXllcnMsXG4gKiBmaWx0ZXJzIGFuZCBpbnRlcmFjdGlvbiBzZXR0aW5ncy5cbiAqXG4gKiBAcHVibGljXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVBY3Rpb25zID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS0EsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBdUJBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQTVCQTtBQUNBOztBQUVBOztBQTJCQTtBQUNBOztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNFLGdCQUFnQkEsQ0FDOUJDLFVBQWtCLEVBQ2xCQyxjQUEyQixFQUMzQkMsVUFBbUIsRUFDa0U7RUFDckYsT0FBTztJQUNMQyxJQUFJLEVBQUVDLHVCQUFXLENBQUNDLGtCQUFrQjtJQUNwQ0wsVUFBVSxFQUFWQSxVQUFVO0lBQ1ZDLGNBQWMsRUFBZEEsY0FBYztJQUNkQyxVQUFVLEVBQVZBO0VBQ0YsQ0FBQztBQUNIO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSSxpQkFBaUJBLENBQy9CQyxRQUFlLEVBQ2ZDLFNBQW1DLEVBQ29EO0VBQ3ZGLE9BQU87SUFDTEwsSUFBSSxFQUFFQyx1QkFBVyxDQUFDSyxtQkFBbUI7SUFDckNGLFFBQVEsRUFBUkEsUUFBUTtJQUNSQyxTQUFTLEVBQVRBO0VBQ0YsQ0FBQztBQUNIO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNFLHFCQUFxQkEsQ0FDbkNDLE9BQWUsRUFDZkMsU0FBa0IsRUFDbEJDLFVBQW1CLEVBQzRFO0VBQy9GLE9BQU87SUFDTFYsSUFBSSxFQUFFQyx1QkFBVyxDQUFDVSx1QkFBdUI7SUFDekNILE9BQU8sRUFBUEEsT0FBTztJQUNQQyxTQUFTLEVBQVRBLFNBQVM7SUFDVEMsVUFBVSxFQUFWQTtFQUNGLENB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
|
package/src/actions/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/actions",
|
|
3
3
|
"author": "Shan He <shan@uber.com>",
|
|
4
|
-
"version": "3.1.
|
|
4
|
+
"version": "3.1.8",
|
|
5
5
|
"description": "kepler.gl constants used by kepler.gl components, actions and reducers",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -31,13 +31,13 @@
|
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@deck.gl/core": "^8.9.27",
|
|
34
|
-
"@kepler.gl/cloud-providers": "3.1.
|
|
35
|
-
"@kepler.gl/constants": "3.1.
|
|
36
|
-
"@kepler.gl/layers": "3.1.
|
|
37
|
-
"@kepler.gl/processors": "3.1.
|
|
38
|
-
"@kepler.gl/table": "3.1.
|
|
39
|
-
"@kepler.gl/types": "3.1.
|
|
40
|
-
"@kepler.gl/utils": "3.1.
|
|
34
|
+
"@kepler.gl/cloud-providers": "3.1.8",
|
|
35
|
+
"@kepler.gl/constants": "3.1.8",
|
|
36
|
+
"@kepler.gl/layers": "3.1.8",
|
|
37
|
+
"@kepler.gl/processors": "3.1.8",
|
|
38
|
+
"@kepler.gl/table": "3.1.8",
|
|
39
|
+
"@kepler.gl/types": "3.1.8",
|
|
40
|
+
"@kepler.gl/utils": "3.1.8",
|
|
41
41
|
"@reduxjs/toolkit": "^1.7.2",
|
|
42
42
|
"@types/lodash": "4.17.5",
|
|
43
43
|
"@types/react-redux": "^7.1.23",
|
|
@@ -495,25 +495,3 @@ export const togglePanelListView: (
|
|
|
495
495
|
// @ts-ignore
|
|
496
496
|
const uiStateActions = null;
|
|
497
497
|
/* eslint-enable @typescript-eslint/no-unused-vars */
|
|
498
|
-
|
|
499
|
-
/** SET_LOADING_INDICATOR */
|
|
500
|
-
export type SetLoadingIndicatorAction = {
|
|
501
|
-
payload: {
|
|
502
|
-
change: number;
|
|
503
|
-
};
|
|
504
|
-
};
|
|
505
|
-
|
|
506
|
-
/**
|
|
507
|
-
* Change of number of active loading actions.
|
|
508
|
-
* @memberof uiStateActions
|
|
509
|
-
* @param payload
|
|
510
|
-
* @param payload.change Change of number of active loading actions.
|
|
511
|
-
* @public
|
|
512
|
-
*/
|
|
513
|
-
export const setLoadingIndicator: (
|
|
514
|
-
payload: SetLoadingIndicatorAction['payload']
|
|
515
|
-
) => Merge<SetLoadingIndicatorAction, {type: typeof ActionTypes.SET_LOADING_INDICATOR}> =
|
|
516
|
-
createAction(
|
|
517
|
-
ActionTypes.SET_LOADING_INDICATOR,
|
|
518
|
-
(payload: SetLoadingIndicatorAction['payload']) => ({payload})
|
|
519
|
-
);
|
|
@@ -1634,6 +1634,13 @@ export type SyncTimeFilterWithLayerTimelineAction = {
|
|
|
1634
1634
|
enable: boolean;
|
|
1635
1635
|
};
|
|
1636
1636
|
|
|
1637
|
+
/**
|
|
1638
|
+
* Sync time filter with layer timeline
|
|
1639
|
+
* @memberof visStateActions
|
|
1640
|
+
* @param idx
|
|
1641
|
+
* @param enable
|
|
1642
|
+
* @return action
|
|
1643
|
+
*/
|
|
1637
1644
|
export function syncTimeFilterWithLayerTimeline(
|
|
1638
1645
|
idx: SyncTimeFilterWithLayerTimelineAction['idx'],
|
|
1639
1646
|
enable: SyncTimeFilterWithLayerTimelineAction['enable']
|
|
@@ -1653,6 +1660,13 @@ export type setTimeFilterSyncTimelineModeAction = {
|
|
|
1653
1660
|
mode: SyncTimelineMode;
|
|
1654
1661
|
};
|
|
1655
1662
|
|
|
1663
|
+
/**
|
|
1664
|
+
* Set time filter sync timeline mode
|
|
1665
|
+
* @memberof visStateActions
|
|
1666
|
+
* @param id
|
|
1667
|
+
* @param mode
|
|
1668
|
+
* @return action
|
|
1669
|
+
*/
|
|
1656
1670
|
export function setTimeFilterSyncTimelineMode({
|
|
1657
1671
|
id,
|
|
1658
1672
|
mode
|
|
@@ -1674,6 +1688,7 @@ export type CreateNewDatasetSuccessPayload = {
|
|
|
1674
1688
|
|
|
1675
1689
|
/**
|
|
1676
1690
|
* Called when a new dataset is created successfully via async table methods
|
|
1691
|
+
* @memberof visStateActions
|
|
1677
1692
|
* @param payload
|
|
1678
1693
|
* @param payload.results - results of promises.allSettlted
|
|
1679
1694
|
* @returns
|
|
@@ -1682,6 +1697,21 @@ export const createNewDatasetSuccess = createAction<CreateNewDatasetSuccessPaylo
|
|
|
1682
1697
|
ActionTypes.CREATE_NEW_DATASET_SUCCESS
|
|
1683
1698
|
);
|
|
1684
1699
|
|
|
1700
|
+
export type SetLoadingIndicatorPayload = {
|
|
1701
|
+
change: number;
|
|
1702
|
+
};
|
|
1703
|
+
|
|
1704
|
+
/**
|
|
1705
|
+
* Change of number of active loading items, used to render loading indicator.
|
|
1706
|
+
* @memberof visStateActions
|
|
1707
|
+
* @param payload
|
|
1708
|
+
* @param payload.change Change of number of active loading actions.
|
|
1709
|
+
* @public
|
|
1710
|
+
*/
|
|
1711
|
+
export const setLoadingIndicator = createAction<SetLoadingIndicatorPayload>(
|
|
1712
|
+
ActionTypes.SET_LOADING_INDICATOR
|
|
1713
|
+
);
|
|
1714
|
+
|
|
1685
1715
|
/**
|
|
1686
1716
|
* This declaration is needed to group actions in docs
|
|
1687
1717
|
*/
|