kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
374 lines (326 loc) • 40.5 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.toggleSidePanelCloseButton = exports.toggleSidePanel = exports.togglePanelListView = exports.toggleModal = exports.toggleMapControl = exports.startExportingImage = exports.showExportDropdown = exports.setUserMapboxAccessToken = exports.setMapControlVisibility = exports.setMapControlSettings = exports.setLocale = exports.setExportSelectedDataset = exports.setExportMapFormat = exports.setExportImageSetting = exports.setExportImageError = exports.setExportImageDataUri = exports.setExportHTMLMapMode = exports.setExportFiltered = exports.setExportDataType = exports.setExportData = exports.removeNotification = exports.openDeleteModal = exports.hideExportDropdown = exports.cleanupExportImage = exports.addNotification = void 0;
var _toolkit = require("@reduxjs/toolkit");
var _actionTypes = _interopRequireDefault(require("./action-types"));
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
/** TOGGLE_SIDE_PANEL */
/**
* Toggle active side panel
* @memberof uiStateActions
* @param id id of side panel to be shown, one of `layer`, `filter`, `interaction`, `map`
* @public
*/
var toggleSidePanel = exports.toggleSidePanel = (0, _toolkit.createAction)(_actionTypes["default"].TOGGLE_SIDE_PANEL, function (id) {
return {
payload: id
};
});
/** TOGGLE_MODAL */
/**
* Show and hide modal dialog
* @memberof uiStateActions
* @param id - id of modal to be shown, null to hide modals. One of:
* - [`DATA_TABLE_ID`](../constants/default-settings.md#data_table_id)
* - [`DELETE_DATA_ID`](../constants/default-settings.md#delete_data_id)
* - [`ADD_DATA_ID`](../constants/default-settings.md#add_data_id)
* - [`EXPORT_IMAGE_ID`](../constants/default-settings.md#export_image_id)
* - [`EXPORT_DATA_ID`](../constants/default-settings.md#export_data_id)
* - [`ADD_MAP_STYLE_ID`](../constants/default-settings.md#add_map_style_id)
* @public
*/
var toggleModal = exports.toggleModal = (0, _toolkit.createAction)(_actionTypes["default"].TOGGLE_MODAL, function (id) {
return {
payload: id
};
});
/** SHOW_EXPORT_DROPDOWN */
/**
* Hide and show side panel header dropdown, activated by clicking the share link on top of the side panel
* @memberof uiStateActions
* @param id - id of the dropdown
* @public
*/
var showExportDropdown = exports.showExportDropdown = (0, _toolkit.createAction)(_actionTypes["default"].SHOW_EXPORT_DROPDOWN, function (id) {
return {
payload: id
};
});
/**
* Hide side panel header dropdown, activated by clicking the share link on top of the side panel
* @memberof uiStateActions
* @public
*/
var hideExportDropdown = exports.hideExportDropdown = (0, _toolkit.createAction)(_actionTypes["default"].HIDE_EXPORT_DROPDOWN);
/** TOGGLE_SIDE_PANEL_CLOSE_BUTTON*/
/**
* Toggle side panel close button
* @memberof uiStateActions
* @param show - if side panel button visible
* @public
*/
var toggleSidePanelCloseButton = exports.toggleSidePanelCloseButton = (0, _toolkit.createAction)(_actionTypes["default"].TOGGLE_SIDE_PANEL_CLOSE_BUTTON, function (show) {
return {
payload: {
show: show
}
};
});
/** TOGGLE_MAP_CONTROL */
/**
* Toggle active map control panel
* @memberof uiStateActions
* @param panelId - map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
* @public
*/
var toggleMapControl = exports.toggleMapControl = (0, _toolkit.createAction)(_actionTypes["default"].TOGGLE_MAP_CONTROL, function (panelId, index) {
return {
payload: {
panelId: panelId,
index: index
}
};
});
/** SET_MAP_CONTROL_VISIBILITY */
/**
* Toggle active map control panel
* @memberof uiStateActions
* @param panelId - map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
* @public
*/
var setMapControlVisibility = exports.setMapControlVisibility = (0, _toolkit.createAction)(_actionTypes["default"].SET_MAP_CONTROL_VISIBILITY, function (panelId, show) {
return {
payload: {
panelId: panelId,
show: show
}
};
});
/** SET_MAP_CONTROL_SETTINGS */
/**
* Set map control settings
* @memberof uiStateActions
* @param panelId - map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
* @public
*/
var setMapControlSettings = exports.setMapControlSettings = (0, _toolkit.createAction)(_actionTypes["default"].SET_MAP_CONTROL_SETTINGS, function (panelId, settings) {
return {
payload: {
panelId: panelId,
settings: settings
}
};
});
/** OPEN_DELETE_MODAL */
/**
* Toggle active map control panel
* @memberof uiStateActions
* @param datasetId - `id` of the dataset to be deleted
* @public
*/
var openDeleteModal = exports.openDeleteModal = (0, _toolkit.createAction)(_actionTypes["default"].OPEN_DELETE_MODAL, function (datasetId) {
return {
payload: datasetId
};
});
/** ADD_NOTIFICATION */
/**
* Add a notification to be displayed.
* Existing notification will be updated in case of matching id.
* @memberof uiStateActions
* @param notification - The `notification` object to be added or updated
* @public
*/
var addNotification = exports.addNotification = (0, _toolkit.createAction)(_actionTypes["default"].ADD_NOTIFICATION, function (notification) {
return {
payload: notification
};
});
/** REMOVE_NOTIFICATION */
/**
* Remove a notification
* @memberof uiStateActions
* @param id - `id` of the notification to be removed
* @public
*/
var removeNotification = exports.removeNotification = (0, _toolkit.createAction)(_actionTypes["default"].REMOVE_NOTIFICATION, function (id) {
return {
payload: id
};
});
/** SET_EXPORT_IMAGE_SETTING */
/**
* Set `exportImage` settings: ratio, resolution, legend
* @memberof uiStateActions
* @param newSetting - {ratio: '1x'}
* @public
*/
var setExportImageSetting = exports.setExportImageSetting = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_IMAGE_SETTING, function (newSetting) {
return {
payload: newSetting
};
});
/**
* Start exporting image flow
* @memberof uiStateActions
* @public
*/
var startExportingImage = exports.startExportingImage = (0, _toolkit.createAction)(_actionTypes["default"].START_EXPORTING_IMAGE, function (payload) {
return {
payload: payload
};
});
/** SET_EXPORT_IMAGE_DATA_URI */
/**
* Set `exportImage.setExportImageDataUri` to a dataUri
* @memberof uiStateActions
* @param dataUri - export image data uri
* @public
*/
var setExportImageDataUri = exports.setExportImageDataUri = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_IMAGE_DATA_URI, function (dataUri) {
return {
payload: dataUri
};
});
/** SET_EXPORT_IMAGE_ERROR */
/**
* Set Export image error
* @memberof uiStateActions
* @public
*/
var setExportImageError = exports.setExportImageError = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_IMAGE_ERROR, function (error) {
return {
payload: error
};
});
/**
* Delete cached export image
* @memberof uiStateActions
* @public
*/
var cleanupExportImage = exports.cleanupExportImage = (0, _toolkit.createAction)(_actionTypes["default"].CLEANUP_EXPORT_IMAGE);
/** SET_EXPORT_SELECTED_DATASET */
/**
* Set selected dataset for export
* @memberof uiStateActions
* @param datasetId - dataset id
* @public
*/
var setExportSelectedDataset = exports.setExportSelectedDataset = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_SELECTED_DATASET, function (datasetId) {
return {
payload: datasetId
};
});
/** SET_EXPORT_DATA_TYPE */
/**
* Set data format for exporting data
* @memberof uiStateActions
* @param dataType - one of `'text/csv'`
* @public
*/
var setExportDataType = exports.setExportDataType = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_DATA_TYPE, function (dataType) {
return {
payload: dataType
};
});
/** SET_EXPORT_FILTERED */
/**
* Whether to export filtered data, `true` or `false`
* @memberof uiStateActions
* @param payload - set `true` to ony export filtered data
* @public
*/
var setExportFiltered = exports.setExportFiltered = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_FILTERED, function (payload) {
return {
payload: payload
};
});
/**
* Whether to including data in map config, toggle between `true` or `false`
* @memberof uiStateActions
* @public
*/
var setExportData = exports.setExportData = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_DATA);
/** SET_USER_MAPBOX_ACCESS_TOKEN */
/**
* Whether we export a mapbox access token used to create a single map html file
* @memberof uiStateActions
* @param payload - mapbox access token
* @public
*/
var setUserMapboxAccessToken = exports.setUserMapboxAccessToken = (0, _toolkit.createAction)(_actionTypes["default"].SET_USER_MAPBOX_ACCESS_TOKEN, function (payload) {
return {
payload: payload
};
});
/** SET_EXPORT_MAP_FORMAT */
/**
* Set the export map format (html, json)
* @memberOf uiStateActions
* @param payload - map format
* @public
*/
var setExportMapFormat = exports.setExportMapFormat = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_MAP_FORMAT, function (payload) {
return {
payload: payload
};
});
/** SET_EXPORT_MAP_HTML_MODE */
/**
* Set the HTML mode to use to export HTML mode
* @memberOf uiStateActions
* @param payload - map mode
*/
var setExportHTMLMapMode = exports.setExportHTMLMapMode = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_MAP_HTML_MODE, function (payload) {
return {
payload: payload
};
});
/** SET_LOCALE */
/**
* Set `locale` value
* @memberof uiStateActions
* @param locale - locale of the UI
* @public
*/
var setLocale = exports.setLocale = (0, _toolkit.createAction)(_actionTypes["default"].SET_LOCALE, function (locale) {
return {
payload: {
locale: locale
}
};
});
/** TOGGLE_PANEL_LIST_VIEW */
/**
* Toggle layer panel list view
* @memberof uiStateActions
* @param payload
* @param payload.panelId panel id.
* @param payload.listView layer panel listView value. Can be 'list' or 'sortByDataset'
* @public
*/
var togglePanelListView = exports.togglePanelListView = (0, _toolkit.createAction)(_actionTypes["default"].TOGGLE_PANEL_LIST_VIEW, function (payload) {
return {
payload: payload
};
});
/**
* This declaration is needed to group actions in docs
*/
/**
* Actions handled mostly by `uiState` reducer.
* They manage UI changes in tha app, such as open and close side panel,
* switch between tabs in the side panel, open and close modal dialog for exporting data / images etc.
* It also manges which settings are selected during image and map export
*
* @public
*/
/* eslint-disable @typescript-eslint/no-unused-vars */
// @ts-ignore
var uiStateActions = null;
/* eslint-enable @typescript-eslint/no-unused-vars */
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9vbGtpdCIsInJlcXVpcmUiLCJfYWN0aW9uVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwidG9nZ2xlU2lkZVBhbmVsIiwiZXhwb3J0cyIsImNyZWF0ZUFjdGlvbiIsIkFjdGlvblR5cGVzIiwiVE9HR0xFX1NJREVfUEFORUwiLCJpZCIsInBheWxvYWQiLCJ0b2dnbGVNb2RhbCIsIlRPR0dMRV9NT0RBTCIsInNob3dFeHBvcnREcm9wZG93biIsIlNIT1dfRVhQT1JUX0RST1BET1dOIiwiaGlkZUV4cG9ydERyb3Bkb3duIiwiSElERV9FWFBPUlRfRFJPUERPV04iLCJ0b2dnbGVTaWRlUGFuZWxDbG9zZUJ1dHRvbiIsIlRPR0dMRV9TSURFX1BBTkVMX0NMT1NFX0JVVFRPTiIsInNob3ciLCJ0b2dnbGVNYXBDb250cm9sIiwiVE9HR0xFX01BUF9DT05UUk9MIiwicGFuZWxJZCIsImluZGV4Iiwic2V0TWFwQ29udHJvbFZpc2liaWxpdHkiLCJTRVRfTUFQX0NPTlRST0xfVklTSUJJTElUWSIsInNldE1hcENvbnRyb2xTZXR0aW5ncyIsIlNFVF9NQVBfQ09OVFJPTF9TRVRUSU5HUyIsInNldHRpbmdzIiwib3BlbkRlbGV0ZU1vZGFsIiwiT1BFTl9ERUxFVEVfTU9EQUwiLCJkYXRhc2V0SWQiLCJhZGROb3RpZmljYXRpb24iLCJBRERfTk9USUZJQ0FUSU9OIiwibm90aWZpY2F0aW9uIiwicmVtb3ZlTm90aWZpY2F0aW9uIiwiUkVNT1ZFX05PVElGSUNBVElPTiIsInNldEV4cG9ydEltYWdlU2V0dGluZyIsIlNFVF9FWFBPUlRfSU1BR0VfU0VUVElORyIsIm5ld1NldHRpbmciLCJzdGFydEV4cG9ydGluZ0ltYWdlIiwiU1RBUlRfRVhQT1JUSU5HX0lNQUdFIiwic2V0RXhwb3J0SW1hZ2VEYXRhVXJpIiwiU0VUX0VYUE9SVF9JTUFHRV9EQVRBX1VSSSIsImRhdGFVcmkiLCJzZXRFeHBvcnRJbWFnZUVycm9yIiwiU0VUX0VYUE9SVF9JTUFHRV9FUlJPUiIsImVycm9yIiwiY2xlYW51cEV4cG9ydEltYWdlIiwiQ0xFQU5VUF9FWFBPUlRfSU1BR0UiLCJzZXRFeHBvcnRTZWxlY3RlZERhdGFzZXQiLCJTRVRfRVhQT1JUX1NFTEVDVEVEX0RBVEFTRVQiLCJzZXRFeHBvcnREYXRhVHlwZSIsIlNFVF9FWFBPUlRfREFUQV9UWVBFIiwiZGF0YVR5cGUiLCJzZXRFeHBvcnRGaWx0ZXJlZCIsIlNFVF9FWFBPUlRfRklMVEVSRUQiLCJzZXRFeHBvcnREYXRhIiwiU0VUX0VYUE9SVF9EQVRBIiwic2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuIiwiU0VUX1VTRVJfTUFQQk9YX0FDQ0VTU19UT0tFTiIsInNldEV4cG9ydE1hcEZvcm1hdCIsIlNFVF9FWFBPUlRfTUFQX0ZPUk1BVCIsInNldEV4cG9ydEhUTUxNYXBNb2RlIiwiU0VUX0VYUE9SVF9NQVBfSFRNTF9NT0RFIiwic2V0TG9jYWxlIiwiU0VUX0xPQ0FMRSIsImxvY2FsZSIsInRvZ2dsZVBhbmVsTGlzdFZpZXciLCJUT0dHTEVfUEFORUxfTElTVF9WSUVXIiwidWlTdGF0ZUFjdGlvbnMiXSwic291cmNlcyI6WyIuLi9zcmMvdWktc3RhdGUtYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2NyZWF0ZUFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5pbXBvcnQge2RlZmF1bHQgYXMgQWN0aW9uVHlwZXN9IGZyb20gJy4vYWN0aW9uLXR5cGVzJztcbmltcG9ydCB7TWVyZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtFeHBvcnRJbWFnZX0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG4vKiogVE9HR0xFX1NJREVfUEFORUwgKi9cbmV4cG9ydCB0eXBlIFRvZ2dsZVNpZGVQYW5lbFVwZGF0ZXJBY3Rpb24gPSB7XG4gIHBheWxvYWQ6IHN0cmluZyB8IG51bGw7XG59O1xuLyoqXG4gKiBUb2dnbGUgYWN0aXZlIHNpZGUgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkICBpZCBvZiBzaWRlIHBhbmVsIHRvIGJlIHNob3duLCBvbmUgb2YgYGxheWVyYCwgYGZpbHRlcmAsIGBpbnRlcmFjdGlvbmAsIGBtYXBgXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTaWRlUGFuZWw6IChcbiAgaWQ6IFRvZ2dsZVNpZGVQYW5lbFVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVxuKSA9PiBNZXJnZTxUb2dnbGVTaWRlUGFuZWxVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9TSURFX1BBTkVMfT4gPVxuICBjcmVhdGVBY3Rpb24oQWN0aW9uVHlwZXMuVE9HR0xFX1NJREVfUEFORUwsIChpZDogc3RyaW5nIHwgbnVsbCkgPT4gKHtwYXlsb2FkOiBpZH0pKTtcblxuLyoqIFRPR0dMRV9NT0RBTCAqL1xuZXhwb3J0IHR5cGUgVG9nZ2xlTW9kYWxVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiBzdHJpbmcgfCBudWxsO1xufTtcbi8qKlxuICogU2hvdyBhbmQgaGlkZSBtb2RhbCBkaWFsb2dcbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkIC0gaWQgb2YgbW9kYWwgdG8gYmUgc2hvd24sIG51bGwgdG8gaGlkZSBtb2RhbHMuIE9uZSBvZjpcbiAqICAtIFtgREFUQV9UQUJMRV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2RhdGFfdGFibGVfaWQpXG4gKiAgLSBbYERFTEVURV9EQVRBX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjZGVsZXRlX2RhdGFfaWQpXG4gKiAgLSBbYEFERF9EQVRBX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjYWRkX2RhdGFfaWQpXG4gKiAgLSBbYEVYUE9SVF9JTUFHRV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2V4cG9ydF9pbWFnZV9pZClcbiAqICAtIFtgRVhQT1JUX0RBVEFfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNleHBvcnRfZGF0YV9pZClcbiAqICAtIFtgQUREX01BUF9TVFlMRV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2FkZF9tYXBfc3R5bGVfaWQpXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVNb2RhbDogKFxuICBpZDogVG9nZ2xlTW9kYWxVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbikgPT4gTWVyZ2U8VG9nZ2xlTW9kYWxVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9NT0RBTH0+ID0gY3JlYXRlQWN0aW9uKFxuICBBY3Rpb25UeXBlcy5UT0dHTEVfTU9EQUwsXG4gIChpZDogVG9nZ2xlTW9kYWxVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ10pID0+ICh7XG4gICAgcGF5bG9hZDogaWRcbiAgfSlcbik7XG5cbi8qKiBTSE9XX0VYUE9SVF9EUk9QRE9XTiAqL1xuZXhwb3J0IHR5cGUgU2hvd0V4cG9ydERyb3Bkb3duVXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDogc3RyaW5nO1xufTtcbi8qKlxuICogSGlkZSBhbmQgc2hvdyBzaWRlIHBhbmVsIGhlYWRlciBkcm9wZG93biwgYWN0aXZhdGVkIGJ5IGNsaWNraW5nIHRoZSBzaGFyZSBsaW5rIG9uIHRvcCBvZiB0aGUgc2lkZSBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWQgLSBpZCBvZiB0aGUgZHJvcGRvd25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dFeHBvcnREcm9wZG93bjogKFxuICBpZDogU2hvd0V4cG9ydERyb3Bkb3duVXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pID0+IE1lcmdlPFNob3dFeHBvcnREcm9wZG93blVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0hPV19FWFBPUlRfRFJPUERPV059PiA9XG4gIGNyZWF0ZUFjdGlvbihcbiAgICBBY3Rpb25UeXBlcy5TSE9XX0VYUE9SVF9EUk9QRE9XTixcbiAgICAoaWQ6IFNob3dFeHBvcnREcm9wZG93blVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXSkgPT4gKHtwYXlsb2FkOiBpZH0pXG4gICk7XG5cbi8qKlxuICogSGlkZSBzaWRlIHBhbmVsIGhlYWRlciBkcm9wZG93biwgYWN0aXZhdGVkIGJ5IGNsaWNraW5nIHRoZSBzaGFyZSBsaW5rIG9uIHRvcCBvZiB0aGUgc2lkZSBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBoaWRlRXhwb3J0RHJvcGRvd246ICgpID0+IHtcbiAgdHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkhJREVfRVhQT1JUX0RST1BET1dOO1xufSA9IGNyZWF0ZUFjdGlvbihBY3Rpb25UeXBlcy5ISURFX0VYUE9SVF9EUk9QRE9XTik7XG5cbi8qKiBUT0dHTEVfU0lERV9QQU5FTF9DTE9TRV9CVVRUT04qL1xuZXhwb3J0IHR5cGUgVG9nZ2xlU2lkZVBhbmVsQ2xvc2VCdXR0b25VcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgc2hvdzogYm9vbGVhbjtcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlIHNpZGUgcGFuZWwgY2xvc2UgYnV0dG9uXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBzaG93IC0gaWYgc2lkZSBwYW5lbCBidXR0b24gdmlzaWJsZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU2lkZVBhbmVsQ2xvc2VCdXR0b246IChcbiAgc2hvdzogYm9vbGVhblxuKSA9PiBNZXJnZTxcbiAgVG9nZ2xlU2lkZVBhbmVsQ2xvc2VCdXR0b25VcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9TSURFX1BBTkVMX0NMT1NFX0JVVFRPTn1cbj4gPSBjcmVhdGVBY3Rpb24oQWN0aW9uVHlwZXMuVE9HR0xFX1NJREVfUEFORUxfQ0xPU0VfQlVUVE9OLCBzaG93ID0+ICh7cGF5bG9hZDoge3Nob3d9fSkpO1xuXG4vKiogVE9HR0xFX01BUF9DT05UUk9MICovXG5leHBvcnQgdHlwZSBUb2dnbGVNYXBDb250cm9sVXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDoge1xuICAgIHBhbmVsSWQ6IHN0cmluZztcbiAgICBpbmRleDogbnVtYmVyO1xuICB9O1xufTtcbi8qKlxuICogVG9nZ2xlIGFjdGl2ZSBtYXAgY29udHJvbCBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gcGFuZWxJZCAtIG1hcCBjb250cm9sIHBhbmVsIGlkLCBvbmUgb2YgdGhlIGtleXMgb2Y6IFtgREVGQVVMVF9NQVBfQ09OVFJPTFNgXSgjZGVmYXVsdF9tYXBfY29udHJvbHMpXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVNYXBDb250cm9sOiAoXG4gIHBhbmVsSWQ6IFRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11bJ3BhbmVsSWQnXSxcbiAgaW5kZXg6IFRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11bJ2luZGV4J11cbikgPT4gTWVyZ2U8VG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX01BUF9DT05UUk9MfT4gPVxuICBjcmVhdGVBY3Rpb24oXG4gICAgQWN0aW9uVHlwZXMuVE9HR0xFX01BUF9DT05UUk9MLFxuICAgIChcbiAgICAgIHBhbmVsSWQ6IFRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11bJ3BhbmVsSWQnXSxcbiAgICAgIGluZGV4OiBUb2dnbGVNYXBDb250cm9sVXBkYXRlckFjdGlvblsncGF5bG9hZCddWydpbmRleCddXG4gICAgKSA9PiAoe1xuICAgICAgcGF5bG9hZDoge1xuICAgICAgICBwYW5lbElkLFxuICAgICAgICBpbmRleFxuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbi8qKiBTRVRfTUFQX0NPTlRST0xfVklTSUJJTElUWSAqL1xuZXhwb3J0IHR5cGUgc2V0TWFwQ29udHJvbFZpc2liaWxpdHlVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgcGFuZWxJZDogc3RyaW5nO1xuICAgIHNob3c6IGJvb2xlYW47XG4gIH07XG59O1xuLyoqXG4gKiBUb2dnbGUgYWN0aXZlIG1hcCBjb250cm9sIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYW5lbElkIC0gbWFwIGNvbnRyb2wgcGFuZWwgaWQsIG9uZSBvZiB0aGUga2V5cyBvZjogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcENvbnRyb2xWaXNpYmlsaXR5OiAoXG4gIHBhbmVsSWQ6IHNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlckFjdGlvblsncGF5bG9hZCddWydwYW5lbElkJ10sXG4gIHNob3c6IHNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlckFjdGlvblsncGF5bG9hZCddWydzaG93J11cbikgPT4gTWVyZ2U8XG4gIHNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfTUFQX0NPTlRST0xfVklTSUJJTElUWX1cbj4gPSBjcmVhdGVBY3Rpb24oXG4gIEFjdGlvblR5cGVzLlNFVF9NQVBfQ09OVFJPTF9WSVNJQklMSVRZLFxuICAoXG4gICAgcGFuZWxJZDogc2V0TWFwQ29udHJvbFZpc2liaWxpdHlVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11bJ3BhbmVsSWQnXSxcbiAgICBzaG93OiBzZXRNYXBDb250cm9sVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVsnc2hvdyddXG4gICkgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICBwYW5lbElkLFxuICAgICAgc2hvd1xuICAgIH1cbiAgfSlcbik7XG5cbi8qKiBTRVRfTUFQX0NPTlRST0xfU0VUVElOR1MgKi9cbmV4cG9ydCB0eXBlIHNldE1hcENvbnRyb2xTZXR0aW5nc1VwZGF0ZXJBY3Rpb24gPSB7XG4gIHBheWxvYWQ6IHtcbiAgICBwYW5lbElkOiBzdHJpbmc7XG4gICAgc2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9O1xufTtcblxuLyoqXG4gKiBTZXQgbWFwIGNvbnRyb2wgc2V0dGluZ3NcbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHBhcmFtIHBhbmVsSWQgLSBtYXAgY29udHJvbCBwYW5lbCBpZCwgb25lIG9mIHRoZSBrZXlzIG9mOiBbYERFRkFVTFRfTUFQX0NPTlRST0xTYF0oI2RlZmF1bHRfbWFwX2NvbnRyb2xzKVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwQ29udHJvbFNldHRpbmdzOiAoXG4gIHBhbmVsSWQ6IHN0cmluZyxcbiAgc2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pID0+IE1lcmdlPFxuICBzZXRNYXBDb250cm9sU2V0dGluZ3NVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9NQVBfQ09OVFJPTF9TRVRUSU5HU31cbj4gPSBjcmVhdGVBY3Rpb24oQWN0aW9uVHlwZXMuU0VUX01BUF9DT05UUk9MX1NFVFRJTkdTLCAocGFuZWxJZCwgc2V0dGluZ3MpID0+ICh7XG4gIHBheWxvYWQ6IHtwYW5lbElkLCBzZXR0aW5nc31cbn0pKTtcblxuLyoqIE9QRU5fREVMRVRFX01PREFMICovXG5leHBvcnQgdHlwZSBPcGVuRGVsZXRlTW9kYWxVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBUb2dnbGUgYWN0aXZlIG1hcCBjb250cm9sIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBkYXRhc2V0SWQgLSBgaWRgIG9mIHRoZSBkYXRhc2V0IHRvIGJlIGRlbGV0ZWRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG9wZW5EZWxldGVNb2RhbDogKFxuICBkYXRhc2V0SWQ6IE9wZW5EZWxldGVNb2RhbFVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVxuKSA9PiBNZXJnZTxPcGVuRGVsZXRlTW9kYWxVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk9QRU5fREVMRVRFX01PREFMfT4gPVxuICBjcmVhdGVBY3Rpb24oXG4gICAgQWN0aW9uVHlwZXMuT1BFTl9ERUxFVEVfTU9EQUwsXG4gICAgKGRhdGFzZXRJZDogT3BlbkRlbGV0ZU1vZGFsVXBkYXRlckFjdGlvblsncGF5bG9hZCddKSA9PiAoe3BheWxvYWQ6IGRhdGFzZXRJZH0pXG4gICk7XG5cbi8qKiBBRERfTk9USUZJQ0FUSU9OICovXG5leHBvcnQgdHlwZSBBZGROb3RpZmljYXRpb25VcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiBvYmplY3Q7XG59O1xuLyoqXG4gKiBBZGQgYSBub3RpZmljYXRpb24gdG8gYmUgZGlzcGxheWVkLlxuICogRXhpc3Rpbmcgbm90aWZpY2F0aW9uIHdpbGwgYmUgdXBkYXRlZCBpbiBjYXNlIG9mIG1hdGNoaW5nIGlkLlxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gbm90aWZpY2F0aW9uIC0gVGhlIGBub3RpZmljYXRpb25gIG9iamVjdCB0byBiZSBhZGRlZCBvciB1cGRhdGVkXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGROb3RpZmljYXRpb246IChub3RpZmljYXRpb246IEFkZE5vdGlmaWNhdGlvblVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXSkgPT4gTWVyZ2U8XG4gIEFkZE5vdGlmaWNhdGlvblVwZGF0ZXJBY3Rpb24sXG4gIHtcbiAgICB0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQUREX05PVElGSUNBVElPTjtcbiAgfVxuPiA9IGNyZWF0ZUFjdGlvbihcbiAgQWN0aW9uVHlwZXMuQUREX05PVElGSUNBVElPTixcbiAgKG5vdGlmaWNhdGlvbjogQWRkTm90aWZpY2F0aW9uVXBkYXRlckFjdGlvblsncGF5bG9hZCddKSA9PiAoe3BheWxvYWQ6IG5vdGlmaWNhdGlvbn0pXG4pO1xuXG4vKiogUkVNT1ZFX05PVElGSUNBVElPTiAqL1xuZXhwb3J0IHR5cGUgUmVtb3ZlTm90aWZpY2F0aW9uVXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDogc3RyaW5nO1xufTtcbi8qKlxuICogUmVtb3ZlIGEgbm90aWZpY2F0aW9uXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZCAtIGBpZGAgb2YgdGhlIG5vdGlmaWNhdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVOb3RpZmljYXRpb246IChcbiAgaWQ6IFJlbW92ZU5vdGlmaWNhdGlvblVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVxuKSA9PiBNZXJnZTxSZW1vdmVOb3RpZmljYXRpb25VcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlJFTU9WRV9OT1RJRklDQVRJT059PiA9XG4gIGNyZWF0ZUFjdGlvbihcbiAgICBBY3Rpb25UeXBlcy5SRU1PVkVfTk9USUZJQ0FUSU9OLFxuICAgIChpZDogUmVtb3ZlTm90aWZpY2F0aW9uVXBkYXRlckFjdGlvblsncGF5bG9hZCddKSA9PiAoe3BheWxvYWQ6IGlkfSlcbiAgKTtcblxuLyoqIFNFVF9FWFBPUlRfSU1BR0VfU0VUVElORyAqL1xuZXhwb3J0IHR5cGUgU2V0RXhwb3J0SW1hZ2VTZXR0aW5nVXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDogUGFydGlhbDxFeHBvcnRJbWFnZT47XG59O1xuLyoqXG4gKiBTZXQgYGV4cG9ydEltYWdlYCBzZXR0aW5nczogcmF0aW8sIHJlc29sdXRpb24sIGxlZ2VuZFxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gbmV3U2V0dGluZyAtIHtyYXRpbzogJzF4J31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlU2V0dGluZzogKFxuICBuZXdTZXR0aW5nOiBTZXRFeHBvcnRJbWFnZVNldHRpbmdVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbikgPT4gTWVyZ2U8XG4gIFNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0VYUE9SVF9JTUFHRV9TRVRUSU5HfVxuPiA9IGNyZWF0ZUFjdGlvbihcbiAgQWN0aW9uVHlwZXMuU0VUX0VYUE9SVF9JTUFHRV9TRVRUSU5HLFxuICAobmV3U2V0dGluZzogU2V0RXhwb3J0SW1hZ2VTZXR0aW5nVXBkYXRlckFjdGlvblsncGF5bG9hZCddKSA9PiAoe3BheWxvYWQ6IG5ld1NldHRpbmd9KVxuKTtcblxuLyoqXG4gKiBTdGFydCBleHBvcnRpbmcgaW1hZ2UgZmxvd1xuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzdGFydEV4cG9ydGluZ0ltYWdlOiAob3B0aW9ucz86IHtcbiAgcmF0aW8/OiBzdHJpbmc7XG4gIHJlc29sdXRpb24/OiBzdHJpbmc7XG4gIGxlZ2VuZD86IHN0cmluZztcbiAgY2VudGVyPzogYm9vbGVhbjtcbn0pID0+IE1lcmdlPFNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU1RBUlRfRVhQT1JUSU5HX0lNQUdFfT4gPVxuICBjcmVhdGVBY3Rpb24oQWN0aW9uVHlwZXMuU1RBUlRfRVhQT1JUSU5HX0lNQUdFLCAocGF5bG9hZDogYW55KSA9PiAoe3BheWxvYWR9KSk7XG5cbi8qKiBTRVRfRVhQT1JUX0lNQUdFX0RBVEFfVVJJICovXG5leHBvcnQgdHlwZSBTZXRFeHBvcnRJbWFnZURhdGFVcmlVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBTZXQgYGV4cG9ydEltYWdlLnNldEV4cG9ydEltYWdlRGF0YVVyaWAgdG8gYSBkYXRhVXJpXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBkYXRhVXJpIC0gZXhwb3J0IGltYWdlIGRhdGEgdXJpXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRJbWFnZURhdGFVcmk6IChcbiAgZGF0YVVyaTogU2V0RXhwb3J0SW1hZ2VEYXRhVXJpVXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pID0+IE1lcmdlPFxuICBTZXRFeHBvcnRJbWFnZURhdGFVcmlVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9FWFBPUlRfSU1BR0VfREFUQV9VUkl9XG4+ID0gY3JlYXRlQWN0aW9uKFxuICBBY3Rpb25UeXBlcy5TRVRfRVhQT1JUX0lNQUdFX0RBVEFfVVJJLFxuICAoZGF0YVVyaTogU2V0RXhwb3J0SW1hZ2VEYXRhVXJpVXBkYXRlckFjdGlvblsncGF5bG9hZCddKSA9PiAoe3BheWxvYWQ6IGRhdGFVcml9KVxuKTtcblxuLyoqIFNFVF9FWFBPUlRfSU1BR0VfRVJST1IgKi9cbmV4cG9ydCB0eXBlIFNldEV4cG9ydEltYWdlRXJyb3JVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiBFcnJvcjtcbn07XG4vKipcbiAqIFNldCBFeHBvcnQgaW1hZ2UgZXJyb3JcbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0SW1hZ2VFcnJvcjogKFxuICBlcnJvcjogU2V0RXhwb3J0SW1hZ2VFcnJvclVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVxuKSA9PiBNZXJnZTxTZXRFeHBvcnRJbWFnZUVycm9yVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRVhQT1JUX0lNQUdFX0VSUk9SfT4gPVxuICBjcmVhdGVBY3Rpb24oXG4gICAgQWN0aW9uVHlwZXMuU0VUX0VYUE9SVF9JTUFHRV9FUlJPUixcbiAgICAoZXJyb3I6IFNldEV4cG9ydEltYWdlRXJyb3JVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ10pID0+ICh7cGF5bG9hZDogZXJyb3J9KVxuICApO1xuXG4vKipcbiAqIERlbGV0ZSBjYWNoZWQgZXhwb3J0IGltYWdlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZUFjdGlvbnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFudXBFeHBvcnRJbWFnZTogKCkgPT4ge1xuICB0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQ0xFQU5VUF9FWFBPUlRfSU1BR0U7XG59ID0gY3JlYXRlQWN0aW9uKEFjdGlvblR5cGVzLkNMRUFOVVBfRVhQT1JUX0lNQUdFKTtcblxuLyoqIFNFVF9FWFBPUlRfU0VMRUNURURfREFUQVNFVCAqL1xuZXhwb3J0IHR5cGUgU2V0RXhwb3J0U2VsZWN0ZWREYXRhc2V0VXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDogc3RyaW5nO1xufTtcbi8qKlxuICogU2V0IHNlbGVjdGVkIGRhdGFzZXQgZm9yIGV4cG9ydFxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YXNldElkIC0gZGF0YXNldCBpZFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0U2VsZWN0ZWREYXRhc2V0OiAoXG4gIGRhdGFzZXRJZDogU2V0RXhwb3J0U2VsZWN0ZWREYXRhc2V0VXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pID0+IE1lcmdlPFxuICBTZXRFeHBvcnRTZWxlY3RlZERhdGFzZXRVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9FWFBPUlRfU0VMRUNURURfREFUQVNFVH1cbj4gPSBjcmVhdGVBY3Rpb24oXG4gIEFjdGlvblR5cGVzLlNFVF9FWFBPUlRfU0VMRUNURURfREFUQVNFVCxcbiAgKGRhdGFzZXRJZDogU2V0RXhwb3J0U2VsZWN0ZWREYXRhc2V0VXBkYXRlckFjdGlvblsncGF5bG9hZCddKSA9PiAoe3BheWxvYWQ6IGRhdGFzZXRJZH0pXG4pO1xuXG4vKiogU0VUX0VYUE9SVF9EQVRBX1RZUEUgKi9cbmV4cG9ydCB0eXBlIFNldEV4cG9ydERhdGFUeXBlVXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDogc3RyaW5nO1xufTtcbi8qKlxuICogU2V0IGRhdGEgZm9ybWF0IGZvciBleHBvcnRpbmcgZGF0YVxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YVR5cGUgLSBvbmUgb2YgYCd0ZXh0L2NzdidgXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnREYXRhVHlwZTogKFxuICBkYXRhVHlwZTogU2V0RXhwb3J0RGF0YVR5cGVVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbikgPT4gTWVyZ2U8U2V0RXhwb3J0RGF0YVR5cGVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9FWFBPUlRfREFUQV9UWVBFfT4gPVxuICBjcmVhdGVBY3Rpb24oXG4gICAgQWN0aW9uVHlwZXMuU0VUX0VYUE9SVF9EQVRBX1RZUEUsXG4gICAgKGRhdGFUeXBlOiBTZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXSkgPT4gKHtwYXlsb2FkOiBkYXRhVHlwZX0pXG4gICk7XG5cbi8qKiBTRVRfRVhQT1JUX0ZJTFRFUkVEICovXG5leHBvcnQgdHlwZSBTZXRFeHBvcnRGaWx0ZXJlZFVwZGF0ZXJBY3Rpb24gPSB7XG4gIHBheWxvYWQ6IGJvb2xlYW47XG59O1xuLyoqXG4gKiBXaGV0aGVyIHRvIGV4cG9ydCBmaWx0ZXJlZCBkYXRhLCBgdHJ1ZWAgb3IgYGZhbHNlYFxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gcGF5bG9hZCAtIHNldCBgdHJ1ZWAgdG8gb255IGV4cG9ydCBmaWx0ZXJlZCBkYXRhXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRGaWx0ZXJlZDogKFxuICBleHBvcnRGaWx0ZXJlZDogU2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbikgPT4gTWVyZ2U8U2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9FWFBPUlRfRklMVEVSRUR9PiA9XG4gIGNyZWF0ZUFjdGlvbihcbiAgICBBY3Rpb25UeXBlcy5TRVRfRVhQT1JUX0ZJTFRFUkVELFxuICAgIChwYXlsb2FkOiBTZXRFeHBvcnRGaWx0ZXJlZFVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXSkgPT4gKHtwYXlsb2FkfSlcbiAgKTtcblxuLyoqXG4gKiBXaGV0aGVyIHRvIGluY2x1ZGluZyBkYXRhIGluIG1hcCBjb25maWcsIHRvZ2dsZSBiZXR3ZWVuIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZUFjdGlvbnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydERhdGE6ICgpID0+IHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0VYUE9SVF9EQVRBfSA9IGNyZWF0ZUFjdGlvbihcbiAgQWN0aW9uVHlwZXMuU0VUX0VYUE9SVF9EQVRBXG4pO1xuXG4vKiogU0VUX1VTRVJfTUFQQk9YX0FDQ0VTU19UT0tFTiAqL1xuZXhwb3J0IHR5cGUgU2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuVXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDogc3RyaW5nO1xufTtcbi8qKlxuICogV2hldGhlciB3ZSBleHBvcnQgYSBtYXBib3ggYWNjZXNzIHRva2VuIHVzZWQgdG8gY3JlYXRlIGEgc2luZ2xlIG1hcCBodG1sIGZpbGVcbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHBhcmFtIHBheWxvYWQgLSBtYXBib3ggYWNjZXNzIHRva2VuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRVc2VyTWFwYm94QWNjZXNzVG9rZW46IChcbiAgcGF5bG9hZDogU2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuVXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pID0+IE1lcmdlPFxuICBTZXRVc2VyTWFwYm94QWNjZXNzVG9rZW5VcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9VU0VSX01BUEJPWF9BQ0NFU1NfVE9LRU59XG4+ID0gY3JlYXRlQWN0aW9uKFxuICBBY3Rpb25UeXBlcy5TRVRfVVNFUl9NQVBCT1hfQUNDRVNTX1RPS0VOLFxuICAocGF5bG9hZDogU2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuVXBkYXRlckFjdGlvblsncGF5bG9hZCddKSA9PiAoe3BheWxvYWR9KVxuKTtcblxuLyoqIFNFVF9FWFBPUlRfTUFQX0ZPUk1BVCAqL1xuZXhwb3J0IHR5cGUgU2V0RXhwb3J0TWFwRm9ybWF0VXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDogc3RyaW5nO1xufTtcbi8qKlxuICogU2V0IHRoZSBleHBvcnQgbWFwIGZvcm1hdCAoaHRtbCwganNvbilcbiAqIEBtZW1iZXJPZiB1aVN0YXRlQWN0aW9uc1xuICogQHBhcmFtIHBheWxvYWQgLSBtYXAgZm9ybWF0XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRNYXBGb3JtYXQ6IChcbiAgbWFwRm9ybWF0OiBTZXRFeHBvcnRNYXBGb3JtYXRVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbikgPT4gTWVyZ2U8U2V0RXhwb3J0TWFwRm9ybWF0VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRVhQT1JUX01BUF9GT1JNQVR9PiA9XG4gIGNyZWF0ZUFjdGlvbihcbiAgICBBY3Rpb25UeXBlcy5TRVRfRVhQT1JUX01BUF9GT1JNQVQsXG4gICAgKHBheWxvYWQ6IFNldEV4cG9ydE1hcEZvcm1hdFVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXSkgPT4gKHtwYXlsb2FkfSlcbiAgKTtcblxuLyoqIFNFVF9FWFBPUlRfTUFQX0hUTUxfTU9ERSAqL1xuZXhwb3J0IHR5cGUgU2V0RXhwb3J0SFRNTE1hcE1vZGVVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBTZXQgdGhlIEhUTUwgbW9kZSB0byB1c2UgdG8gZXhwb3J0IEhUTUwgbW9kZVxuICogQG1lbWJlck9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gcGF5bG9hZCAtIG1hcCBtb2RlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRIVE1MTWFwTW9kZTogKFxuICBtb2RlOiBTZXRFeHBvcnRIVE1MTWFwTW9kZVVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVxuKSA9PiBNZXJnZTxTZXRFeHBvcnRIVE1MTWFwTW9kZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0VYUE9SVF9NQVBfSFRNTF9NT0RFfT4gPVxuICBjcmVhdGVBY3Rpb24oXG4gICAgQWN0aW9uVHlwZXMuU0VUX0VYUE9SVF9NQVBfSFRNTF9NT0RFLFxuICAgIChwYXlsb2FkOiBTZXRFeHBvcnRIVE1MTWFwTW9kZVVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXSkgPT4gKHtwYXlsb2FkfSlcbiAgKTtcblxuLyoqIFNFVF9MT0NBTEUgKi9cbmV4cG9ydCB0eXBlIFNldExvY2FsZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIHBheWxvYWQ6IHtsb2NhbGU6IHN0cmluZ307XG59O1xuLyoqXG4gKiBTZXQgYGxvY2FsZWAgdmFsdWVcbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHBhcmFtIGxvY2FsZSAtIGxvY2FsZSBvZiB0aGUgVUlcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExvY2FsZTogKFxuICBsb2NhbGU6IFNldExvY2FsZVVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVsnbG9jYWxlJ11cbikgPT4gTWVyZ2U8U2V0TG9jYWxlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfTE9DQUxFfT4gPSBjcmVhdGVBY3Rpb24oXG4gIEFjdGlvblR5cGVzLlNFVF9MT0NBTEUsXG4gIChsb2NhbGU6IFNldExvY2FsZVVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVsnbG9jYWxlJ10pID0+ICh7XG4gICAgcGF5bG9hZDoge1xuICAgICAgbG9jYWxlXG4gICAgfVxuICB9KVxuKTtcblxuLyoqIFRPR0dMRV9QQU5FTF9MSVNUX1ZJRVcgKi9cbmV4cG9ydCB0eXBlIFRvZ2dsZVBhbmVsTGlzdFZpZXdBY3Rpb24gPSB7XG4gIHBheWxvYWQ6IHtcbiAgICBwYW5lbElkOiBzdHJpbmc7XG4gICAgbGlzdFZpZXc6IHN0cmluZztcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlIGxheWVyIHBhbmVsIGxpc3Qgdmlld1xuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gcGF5bG9hZFxuICogQHBhcmFtIHBheWxvYWQucGFuZWxJZCBwYW5lbCBpZC5cbiAqIEBwYXJhbSBwYXlsb2FkLmxpc3RWaWV3IGxheWVyIHBhbmVsIGxpc3RWaWV3IHZhbHVlLiBDYW4gYmUgJ2xpc3QnIG9yICdzb3J0QnlEYXRhc2V0J1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlUGFuZWxMaXN0VmlldzogKFxuICBwYXlsb2FkOiBUb2dnbGVQYW5lbExpc3RWaWV3QWN0aW9uWydwYXlsb2FkJ11cbikgPT4gTWVyZ2U8VG9nZ2xlUGFuZWxMaXN0Vmlld0FjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5UT0dHTEVfUEFORUxfTElTVF9WSUVXfT4gPVxuICBjcmVhdGVBY3Rpb24oXG4gICAgQWN0aW9uVHlwZXMuVE9HR0xFX1BBTkVMX0xJU1RfVklFVyxcbiAgICAocGF5bG9hZDogVG9nZ2xlUGFuZWxMaXN0Vmlld0FjdGlvblsncGF5bG9hZCddKSA9PiAoe3BheWxvYWR9KVxuICApO1xuXG4vKipcbiAqIFRoaXMgZGVjbGFyYXRpb24gaXMgbmVlZGVkIHRvIGdyb3VwIGFjdGlvbnMgaW4gZG9jc1xuICovXG4vKipcbiAqIEFjdGlvbnMgaGFuZGxlZCBtb3N0bHkgYnkgIGB1aVN0YXRlYCByZWR1Y2VyLlxuICogVGhleSBtYW5hZ2UgVUkgY2hhbmdlcyBpbiB0aGEgYXBwLCBzdWNoIGFzIG9wZW4gYW5kIGNsb3NlIHNpZGUgcGFuZWwsXG4gKiBzd2l0Y2ggYmV0d2VlbiB0YWJzIGluIHRoZSBzaWRlIHBhbmVsLCBvcGVuIGFuZCBjbG9zZSBtb2RhbCBkaWFsb2cgZm9yIGV4cG9ydGluZyBkYXRhIC8gaW1hZ2VzIGV0Yy5cbiAqIEl0IGFsc28gbWFuZ2VzIHdoaWNoIHNldHRpbmdzIGFyZSBzZWxlY3RlZCBkdXJpbmcgaW1hZ2UgYW5kIG1hcCBleHBvcnRcbiAqXG4gKiBAcHVibGljXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdWlTdGF0ZUFjdGlvbnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFlBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUpBO0FBQ0E7O0FBT0E7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUcsZUFFeUUsR0FBQUMsT0FBQSxDQUFBRCxlQUFBLEdBQ3BGLElB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