@openmrs/esm-app-shell 6.3.1-pre.3105 → 6.3.1-pre.3119
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/.turbo/turbo-build.log +8 -8
- package/dist/1aeb256985e33864.js +1 -0
- package/dist/1aeb256985e33864.js.map +1 -0
- package/dist/f1bf92ff5d8517a7.js.map +1 -0
- package/dist/index.html +1 -1
- package/dist/{openmrs.10f6e2cb10b05c80.js → openmrs.e1b0b176bb0e5d2d.js} +1 -1
- package/dist/{openmrs.10f6e2cb10b05c80.js.map → openmrs.e1b0b176bb0e5d2d.js.map} +1 -1
- package/dist/service-worker.js +1 -1
- package/lib/{54e8981b7823f373.js → 0b8132da55d43cec.js} +8 -8
- package/lib/25718c5560d56ff1.js +112 -0
- package/lib/esm-devtools-app/180.js +2 -0
- package/lib/esm-devtools-app/180.js.LICENSE.txt +5 -0
- package/lib/esm-devtools-app/180.js.map +1 -0
- package/lib/esm-devtools-app/248.js +1 -0
- package/lib/esm-devtools-app/248.js.map +1 -0
- package/lib/esm-devtools-app/326.js +2 -0
- package/lib/esm-devtools-app/326.js.LICENSE.txt +9 -0
- package/lib/esm-devtools-app/326.js.map +1 -0
- package/lib/esm-devtools-app/623.js +2 -0
- package/lib/esm-devtools-app/623.js.LICENSE.txt +19 -0
- package/lib/esm-devtools-app/623.js.map +1 -0
- package/lib/esm-devtools-app/731.js +2 -0
- package/lib/esm-devtools-app/731.js.LICENSE.txt +24 -0
- package/lib/esm-devtools-app/731.js.map +1 -0
- package/lib/esm-devtools-app/769.js +2 -0
- package/lib/esm-devtools-app/769.js.LICENSE.txt +39 -0
- package/lib/esm-devtools-app/769.js.map +1 -0
- package/lib/esm-devtools-app/770.js +2 -0
- package/lib/esm-devtools-app/770.js.LICENSE.txt +14 -0
- package/lib/esm-devtools-app/770.js.map +1 -0
- package/lib/esm-devtools-app/810.js +1 -0
- package/lib/esm-devtools-app/810.js.map +1 -0
- package/lib/esm-devtools-app/907.js +1 -0
- package/lib/esm-devtools-app/907.js.map +1 -0
- package/lib/esm-devtools-app/929.js +1 -0
- package/lib/esm-devtools-app/929.js.map +1 -0
- package/lib/esm-devtools-app/932.js +2 -0
- package/lib/esm-devtools-app/932.js.LICENSE.txt +5 -0
- package/lib/esm-devtools-app/932.js.map +1 -0
- package/lib/esm-devtools-app/main.js +1 -0
- package/lib/esm-devtools-app/main.js.map +1 -0
- package/lib/esm-devtools-app/openmrs-esm-devtools-app.js +1 -0
- package/lib/esm-devtools-app/openmrs-esm-devtools-app.js.buildmanifest.json +447 -0
- package/lib/esm-devtools-app/openmrs-esm-devtools-app.js.map +1 -0
- package/lib/esm-devtools-app/routes.json +1 -0
- package/lib/esm-help-menu-app/810.js +1 -1
- package/lib/esm-help-menu-app/810.js.map +1 -1
- package/lib/esm-help-menu-app/main.js +1 -1
- package/lib/esm-help-menu-app/openmrs-esm-help-menu-app.js +1 -1
- package/lib/esm-help-menu-app/openmrs-esm-help-menu-app.js.buildmanifest.json +5 -5
- package/lib/esm-help-menu-app/routes.json +1 -1
- package/lib/esm-implementer-tools-app/3150.js.map +1 -1
- package/lib/esm-implementer-tools-app/4810.js +1 -1
- package/lib/esm-implementer-tools-app/4810.js.map +1 -1
- package/lib/esm-implementer-tools-app/main.js +1 -1
- package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js +1 -1
- package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js.buildmanifest.json +6 -6
- package/lib/esm-implementer-tools-app/routes.json +1 -1
- package/lib/esm-login-app/5906.js +2 -2
- package/lib/esm-login-app/5906.js.map +1 -1
- package/lib/esm-login-app/main.js +1 -1
- package/lib/esm-login-app/main.js.map +1 -1
- package/lib/esm-login-app/openmrs-esm-login-app.js +2 -2
- package/lib/esm-login-app/openmrs-esm-login-app.js.buildmanifest.json +5 -5
- package/lib/esm-login-app/openmrs-esm-login-app.js.map +1 -1
- package/lib/esm-login-app/routes.json +1 -1
- package/lib/esm-offline-tools-app/4810.js +1 -1
- package/lib/esm-offline-tools-app/4810.js.map +1 -1
- package/lib/esm-offline-tools-app/main.js +1 -1
- package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js +1 -1
- package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js.buildmanifest.json +5 -5
- package/lib/esm-offline-tools-app/routes.json +1 -1
- package/lib/esm-primary-navigation-app/1404.js.map +1 -1
- package/lib/esm-primary-navigation-app/2395.js +1 -1
- package/lib/esm-primary-navigation-app/2395.js.map +1 -1
- package/lib/esm-primary-navigation-app/3758.js.map +1 -1
- package/lib/esm-primary-navigation-app/8577.js.map +1 -1
- package/lib/esm-primary-navigation-app/main.js +1 -1
- package/lib/esm-primary-navigation-app/main.js.map +1 -1
- package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js +1 -1
- package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js.buildmanifest.json +12 -12
- package/lib/esm-primary-navigation-app/routes.json +1 -1
- package/lib/index.html +2 -2
- package/lib/openmrs.js +4 -4
- package/lib/service-worker.js +1 -1
- package/package.json +3 -3
- package/dist/1d86aa5e7b7a2d81.js +0 -1
- package/dist/1d86aa5e7b7a2d81.js.map +0 -1
- package/dist/6b8a9c458e21b16e.js.map +0 -1
- package/lib/db1303a22cb3a6d3.js +0 -112
- /package/dist/{6b8a9c458e21b16e.js → f1bf92ff5d8517a7.js} +0 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
4
|
+
* This devtool is neither made for production nor for readable output files.
|
|
5
|
+
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
6
|
+
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
7
|
+
* or disable the default devtool with "devtool: false".
|
|
8
|
+
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
9
|
+
*/
|
|
10
|
+
(self["webpackChunk_openmrs_esm_app_shell"] = self["webpackChunk_openmrs_esm_app_shell"] || []).push([["framework_esm-config_dist_index_js"],{
|
|
11
|
+
|
|
12
|
+
/***/ "../../framework/esm-config/dist/index.js":
|
|
13
|
+
/*!************************************************!*\
|
|
14
|
+
!*** ../../framework/esm-config/dist/index.js ***!
|
|
15
|
+
\************************************************/
|
|
16
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
17
|
+
|
|
18
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Type: () => (/* reexport safe */ _types_js__WEBPACK_IMPORTED_MODULE_4__.Type),\n/* harmony export */ clearConfigErrors: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.clearConfigErrors),\n/* harmony export */ configExtensionStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.configExtensionStore),\n/* harmony export */ configInternalStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.configInternalStore),\n/* harmony export */ defineConfigSchema: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.defineConfigSchema),\n/* harmony export */ defineExtensionConfigSchema: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.defineExtensionConfigSchema),\n/* harmony export */ getConfig: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.getConfig),\n/* harmony export */ getConfigStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.getConfigStore),\n/* harmony export */ getExtensionConfig: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.getExtensionConfig),\n/* harmony export */ getExtensionConfigFromStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.getExtensionConfigFromStore),\n/* harmony export */ getExtensionSlotConfig: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.getExtensionSlotConfig),\n/* harmony export */ getExtensionSlotConfigFromStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.getExtensionSlotConfigFromStore),\n/* harmony export */ getExtensionSlotsConfigStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.getExtensionSlotsConfigStore),\n/* harmony export */ getExtensionsConfigStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.getExtensionsConfigStore),\n/* harmony export */ getTranslationOverrides: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.getTranslationOverrides),\n/* harmony export */ implementerToolsConfigStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.implementerToolsConfigStore),\n/* harmony export */ inRange: () => (/* reexport safe */ _validators_validators_js__WEBPACK_IMPORTED_MODULE_3__.inRange),\n/* harmony export */ isUrl: () => (/* reexport safe */ _validators_validators_js__WEBPACK_IMPORTED_MODULE_3__.isUrl),\n/* harmony export */ isUrlWithTemplateParameters: () => (/* reexport safe */ _validators_validators_js__WEBPACK_IMPORTED_MODULE_3__.isUrlWithTemplateParameters),\n/* harmony export */ oneOf: () => (/* reexport safe */ _validators_validators_js__WEBPACK_IMPORTED_MODULE_3__.oneOf),\n/* harmony export */ processConfig: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.processConfig),\n/* harmony export */ provide: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.provide),\n/* harmony export */ registerModuleLoad: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.registerModuleLoad),\n/* harmony export */ registerModuleWithConfigSystem: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.registerModuleWithConfigSystem),\n/* harmony export */ registerTranslationNamespace: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.registerTranslationNamespace),\n/* harmony export */ temporaryConfigStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.temporaryConfigStore),\n/* harmony export */ validator: () => (/* reexport safe */ _validators_validator_js__WEBPACK_IMPORTED_MODULE_2__.validator),\n/* harmony export */ validators: () => (/* reexport safe */ _validators_validators_js__WEBPACK_IMPORTED_MODULE_3__.validators)\n/* harmony export */ });\n/* harmony import */ var _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./module-config/module-config.js */ \"../../framework/esm-config/dist/module-config/module-config.js\");\n/* harmony import */ var _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./module-config/state.js */ \"../../framework/esm-config/dist/module-config/state.js\");\n/* harmony import */ var _validators_validator_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./validators/validator.js */ \"../../framework/esm-config/dist/validators/validator.js\");\n/* harmony import */ var _validators_validators_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./validators/validators.js */ \"../../framework/esm-config/dist/validators/validators.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./types.js */ \"../../framework/esm-config/dist/types.js\");\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBaUQ7QUFDUjtBQUNDO0FBQ0M7QUFDaEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uL2ZyYW1ld29yay9lc20tY29uZmlnL2Rpc3QvaW5kZXguanM/Mjc3MCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9tb2R1bGUtY29uZmlnL21vZHVsZS1jb25maWcuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vZHVsZS1jb25maWcvc3RhdGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZhbGlkYXRvcnMvdmFsaWRhdG9yLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92YWxpZGF0b3JzL3ZhbGlkYXRvcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/index.js\n");
|
|
19
|
+
|
|
20
|
+
/***/ }),
|
|
21
|
+
|
|
22
|
+
/***/ "../../framework/esm-config/dist/module-config/module-config.js":
|
|
23
|
+
/*!**********************************************************************!*\
|
|
24
|
+
!*** ../../framework/esm-config/dist/module-config/module-config.js ***!
|
|
25
|
+
\**********************************************************************/
|
|
26
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
27
|
+
|
|
28
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ clearConfigErrors: () => (/* binding */ clearConfigErrors),\n/* harmony export */ defineConfigSchema: () => (/* binding */ defineConfigSchema),\n/* harmony export */ defineExtensionConfigSchema: () => (/* binding */ defineExtensionConfigSchema),\n/* harmony export */ getConfig: () => (/* binding */ getConfig),\n/* harmony export */ getTranslationOverrides: () => (/* binding */ getTranslationOverrides),\n/* harmony export */ processConfig: () => (/* binding */ processConfig),\n/* harmony export */ provide: () => (/* binding */ provide),\n/* harmony export */ registerModuleLoad: () => (/* binding */ registerModuleLoad),\n/* harmony export */ registerModuleWithConfigSystem: () => (/* binding */ registerModuleWithConfigSystem),\n/* harmony export */ registerTranslationNamespace: () => (/* binding */ registerTranslationNamespace)\n/* harmony export */ });\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/equals.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/mergeDeepRight.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/omit.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/clone.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/reduce.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types.js */ \"../../framework/esm-config/dist/types.js\");\n/* harmony import */ var _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../validators/type-validators.js */ \"../../framework/esm-config/dist/validators/type-validators.js\");\n/* harmony import */ var _validators_validator_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../validators/validator.js */ \"../../framework/esm-config/dist/validators/validator.js\");\n/* harmony import */ var _state_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./state.js */ \"../../framework/esm-config/dist/module-config/state.js\");\n/** @module @category Config */ \n\n\n\n\n/**\n * Store setup\n *\n *\n * Set up stores and subscriptions so that inputs get processed appropriately.\n *\n * There are *input* stores and *output* stores. The *input* stores\n * are configInternalStore, temporaryConfigStore, and configExtensionStore. The\n * output stores are set in the `compute...` functions. They are the module\n * config stores, the extension slot config stores (by module), the extension\n * config stores, and the implementer tools config store.\n *\n * This code sets up the subscriptions so that when an input store changes,\n * the correct set of output stores are updated.\n *\n * All `compute...` functions except `computeExtensionConfigs` are pure\n * (or are supposed to be), other than the fact that they all `setState`\n * store values at the end. `computeExtensionConfigs` calls `getGlobalStore`,\n * which creates stores.\n */ computeModuleConfig(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe((configState)=>computeModuleConfig(configState, _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState()));\n_state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe((tempConfigState)=>computeModuleConfig(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), tempConfigState));\ncomputeImplementerToolsConfig(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe((configState)=>computeImplementerToolsConfig(configState, _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState()));\n_state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe((tempConfigState)=>computeImplementerToolsConfig(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), tempConfigState));\ncomputeExtensionSlotConfigs(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe((configState)=>computeExtensionSlotConfigs(configState, _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState()));\n_state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe((tempConfigState)=>computeExtensionSlotConfigs(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), tempConfigState));\ncomputeExtensionConfigs(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state_js__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.getState(), _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe((configState)=>{\n computeExtensionConfigs(configState, _state_js__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.getState(), _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n});\n_state_js__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.subscribe((extensionState)=>{\n computeExtensionConfigs(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), extensionState, _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n});\n_state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe((tempConfigState)=>{\n computeExtensionConfigs(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state_js__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.getState(), tempConfigState);\n});\n/** Keep track of which validation errors we have displayed. Each one should only be displayed once. */ let displayedValidationMessages = new Set();\nfunction computeModuleConfig(state, tempState) {\n for (let moduleName of Object.keys(state.schemas)){\n // At this point the schema could be either just the implicit schema or the actually\n // defined schema. We run with just the implicit schema because we want to populate\n // the config store with the translation overrides as soon as possible. In fact, the\n // translation system will throw for Suspense until the translation overrides are\n // available, which as of this writing blocks the schema definition from occurring\n // for modules loaded based on their extensions.\n const moduleStore = (0,_state_js__WEBPACK_IMPORTED_MODULE_3__.getConfigStore)(moduleName);\n if (state.moduleLoaded[moduleName]) {\n const config = getConfigForModule(moduleName, state, tempState);\n moduleStore.setState({\n translationOverridesLoaded: true,\n loaded: true,\n config\n });\n } else {\n const config = getConfigForModuleImplicitSchema(moduleName, state, tempState);\n moduleStore.setState({\n translationOverridesLoaded: true,\n loaded: false,\n config\n });\n }\n }\n}\nfunction computeExtensionSlotConfigs(state, tempState) {\n const slotConfigs = getExtensionSlotConfigs(state, tempState);\n const newSlotStoreEntries = Object.fromEntries(Object.entries(slotConfigs).map(([slotName, config])=>[\n slotName,\n {\n loaded: true,\n config\n }\n ]));\n const slotStore = (0,_state_js__WEBPACK_IMPORTED_MODULE_3__.getExtensionSlotsConfigStore)();\n const oldState = slotStore.getState();\n const newState = {\n slots: {\n ...oldState.slots,\n ...newSlotStoreEntries\n }\n };\n if (!(0,ramda__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(oldState, newState)) {\n slotStore.setState(newState);\n }\n}\nfunction computeImplementerToolsConfig(state, tempConfigState) {\n const config = getImplementerToolsConfig(state, tempConfigState);\n _state_js__WEBPACK_IMPORTED_MODULE_3__.implementerToolsConfigStore.setState({\n config\n });\n}\nfunction computeExtensionConfigs(configState, extensionState, tempConfigState) {\n const configs = {};\n // We assume that the module schema has already been defined, since the extension\n // it contains is mounted.\n for (let extension of extensionState.mountedExtensions){\n const config = computeExtensionConfig(extension.slotModuleName, extension.extensionModuleName, extension.slotName, extension.extensionId, configState, tempConfigState);\n configs[extension.slotName] = {\n ...configs[extension.slotName],\n [extension.extensionId]: {\n config,\n loaded: true\n }\n };\n }\n (0,_state_js__WEBPACK_IMPORTED_MODULE_3__.getExtensionsConfigStore)().setState({\n configs\n });\n}\n/*\n * API\n *\n */ /**\n * This defines a configuration schema for a module. The schema tells the\n * configuration system how the module can be configured. It specifies\n * what makes configuration valid or invalid.\n *\n * See [Configuration System](https://o3-docs.openmrs.org/docs/configuration-system)\n * for more information about defining a config schema.\n *\n * @param moduleName Name of the module the schema is being defined for. Generally\n * should be the one in which the `defineConfigSchema` call takes place.\n * @param schema The config schema for the module\n */ function defineConfigSchema(moduleName, schema) {\n validateConfigSchema(moduleName, schema);\n const enhancedSchema = (0,ramda__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(schema, implicitConfigSchema);\n _state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [moduleName]: enhancedSchema\n },\n moduleLoaded: {\n ...state.moduleLoaded,\n [moduleName]: true\n }\n }));\n}\n/**\n * This alerts the configuration system that a module exists. This allows config to be\n * processed, while still allowing the extension system to know whether the module has\n * actually had its front bundle executed yet.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param moduleName\n */ function registerModuleWithConfigSystem(moduleName) {\n _state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [moduleName]: implicitConfigSchema\n }\n }));\n}\n/**\n * This alerts the configuration system that a module has been loaded.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param moduleName\n */ function registerModuleLoad(moduleName) {\n _state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState((state)=>({\n ...state,\n moduleLoaded: {\n ...state.moduleLoaded,\n [moduleName]: true\n }\n }));\n}\n/**\n * This allows the config system to support translation overrides for namespaces that\n * do not correspond to modules.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param namespace\n */ function registerTranslationNamespace(namespace) {\n _state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [namespace]: translationOverridesSchema\n }\n }));\n}\n/**\n * This defines a configuration schema for an extension. When a schema is defined\n * for an extension, that extension will receive the configuration corresponding\n * to that schema, rather than the configuration corresponding to the module\n * in which it is defined.\n *\n * The schema tells the configuration system how the module can be configured.\n * It specifies what makes configuration valid or invalid.\n *\n * See [Configuration System](https://o3-docs.openmrs.org/docs/configuration-system)\n * for more information about defining a config schema.\n *\n * @param extensionName Name of the extension the schema is being defined for.\n * Should match the `name` of one of the `extensions` entries being returned\n * by `setupOpenMRS`.\n * @param schema The config schema for the extension\n */ function defineExtensionConfigSchema(extensionName, schema) {\n validateConfigSchema(extensionName, schema);\n const enhancedSchema = (0,ramda__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(schema, implicitConfigSchema);\n const state = _state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState();\n if (state.schemas[extensionName]) {\n console.error(`Config schema for extension ${extensionName} already exists. If there are multiple extensions with this same name, one will probably crash.`);\n }\n _state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [extensionName]: enhancedSchema\n }\n }));\n}\nfunction provide(config, sourceName = 'provided') {\n _state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState((state)=>({\n ...state,\n providedConfigs: [\n ...state.providedConfigs,\n {\n source: sourceName,\n config\n }\n ]\n }));\n}\n/**\n * A promise-based way to access the config as soon as it is fully loaded.\n * If it is already loaded, resolves the config in its present state.\n *\n * This is a useful function if you need to get the config in the course\n * of the execution of a function.\n *\n * @param moduleName The name of the module for which to look up the config\n */ function getConfig(moduleName) {\n return new Promise((resolve)=>{\n const store = (0,_state_js__WEBPACK_IMPORTED_MODULE_3__.getConfigStore)(moduleName);\n function update(state) {\n if (state.loaded && state.config) {\n const config = (0,ramda__WEBPACK_IMPORTED_MODULE_6__[\"default\"])([\n 'Display conditions',\n 'Translation overrides'\n ], state.config);\n resolve(config);\n if (unsubscribe) {\n unsubscribe();\n }\n }\n }\n update(store.getState());\n const unsubscribe = store.subscribe(update);\n });\n}\n/** @internal */ function getTranslationOverrides(moduleName, slotName, extensionId) {\n const promises = [\n new Promise((resolve)=>{\n const configStore = (0,_state_js__WEBPACK_IMPORTED_MODULE_3__.getConfigStore)(moduleName);\n function update(state) {\n if (state.translationOverridesLoaded && state.config) {\n const translationOverrides = state.config['Translation overrides'] ?? {};\n resolve(translationOverrides);\n if (unsubscribe) {\n unsubscribe();\n }\n }\n }\n update(configStore.getState());\n const unsubscribe = configStore.subscribe(update);\n })\n ];\n if (slotName && extensionId) {\n promises.push(new Promise((resolve)=>{\n const configStore = (0,_state_js__WEBPACK_IMPORTED_MODULE_3__.getExtensionConfig)(slotName, extensionId);\n function update(state) {\n if (state.loaded && state.config) {\n const translationOverrides = state.config['Translation overrides'] ?? {};\n resolve(translationOverrides);\n if (unsubscribe) {\n unsubscribe();\n }\n }\n }\n update(configStore.getState());\n const unsubscribe = configStore.subscribe(update);\n }));\n }\n return Promise.all(promises);\n}\n/**\n * Validate and interpolate defaults for `providedConfig` according to `schema`\n *\n * @param schema a configuration schema\n * @param providedConfig an object of config values (without the top-level module name)\n * @param keyPathContext a dot-deparated string which helps the user figure out where\n * the provided config came from\n * @internal\n */ function processConfig(schema, providedConfig, keyPathContext) {\n validateStructure(schema, providedConfig, keyPathContext);\n const config = setDefaults(schema, providedConfig);\n runAllValidatorsInConfigTree(schema, config, keyPathContext);\n return config;\n}\n/*\n * Helper functions\n *\n */ /**\n * Returns the configuration for an extension. This configuration is specific\n * to the slot in which it is mounted, and its ID within that slot.\n *\n * The schema for that configuration is the extension schema. If no extension\n * schema has been provided, the schema used is the schema of the module in\n * which the extension is defined.\n *\n * @param slotModuleName The name of the module which defines the extension slot\n * @param extensionModuleName The name of the module which defines the extension (and therefore the config schema)\n * @param slotName The name of the extension slot where the extension is mounted\n * @param extensionId The ID of the extension in its slot\n */ function computeExtensionConfig(slotModuleName, extensionModuleName, slotName, extensionId, configState, tempConfigState) {\n const extensionName = getExtensionNameFromId(extensionId);\n const extensionConfigSchema = configState.schemas[extensionName];\n const nameOfSchemaSource = extensionConfigSchema ? extensionName : extensionModuleName;\n const providedConfigs = getProvidedConfigs(configState, tempConfigState);\n const slotModuleConfig = mergeConfigsFor(slotModuleName, providedConfigs);\n const configOverride = slotModuleConfig?.extensionSlots?.[slotName]?.configure?.[extensionId] ?? {};\n const extensionConfig = mergeConfigsFor(nameOfSchemaSource, providedConfigs);\n const combinedConfig = mergeConfigs([\n extensionConfig,\n configOverride\n ]);\n const schema = extensionConfigSchema ?? configState.schemas[extensionModuleName];\n validateStructure(schema, combinedConfig, nameOfSchemaSource);\n const config = setDefaults(schema, combinedConfig);\n runAllValidatorsInConfigTree(schema, config, nameOfSchemaSource);\n delete config.extensionSlots;\n return config;\n}\nfunction getImplementerToolsConfig(configState, tempConfigState) {\n let result = getSchemaWithValuesAndSources((0,ramda__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(configState.schemas));\n const configsAndSources = [\n ...configState.providedConfigs.map((c)=>[\n c.config,\n c.source\n ]),\n [\n tempConfigState.config,\n 'temporary config'\n ]\n ];\n for (let [config, source] of configsAndSources){\n result = mergeConfigs([\n result,\n createValuesAndSourcesTree(config, source)\n ]);\n }\n return result;\n}\nfunction getSchemaWithValuesAndSources(schema) {\n if (schema.hasOwnProperty('_default')) {\n return {\n ...schema,\n _value: schema._default,\n _source: 'default'\n };\n } else if (isOrdinaryObject(schema)) {\n return Object.keys(schema).reduce((obj, key)=>{\n obj[key] = getSchemaWithValuesAndSources(schema[key]);\n return obj;\n }, {});\n } else {\n // at this point, the schema is bad and an error will have been logged during schema validation\n return {};\n }\n}\nfunction createValuesAndSourcesTree(config, source) {\n if (isOrdinaryObject(config)) {\n return Object.keys(config).reduce((obj, key)=>{\n obj[key] = createValuesAndSourcesTree(config[key], source);\n return obj;\n }, {});\n } else {\n return {\n _value: config,\n _source: source\n };\n }\n}\nfunction getExtensionSlotConfigs(configState, tempConfigState) {\n const allConfigs = mergeConfigs(getProvidedConfigs(configState, tempConfigState));\n const slotConfigPerModule = Object.keys(allConfigs).reduce((obj, key)=>{\n if (allConfigs[key]?.extensionSlots) {\n obj[key] = allConfigs[key]?.extensionSlots;\n }\n return obj;\n }, {});\n validateAllExtensionSlotConfigs(slotConfigPerModule);\n const slotConfigs = Object.keys(slotConfigPerModule).reduce((obj, key)=>{\n obj = {\n ...obj,\n ...slotConfigPerModule[key]\n };\n return obj;\n }, {});\n return slotConfigs;\n}\nfunction validateAllExtensionSlotConfigs(slotConfigPerModule) {\n for (let [moduleName, configBySlotName] of Object.entries(slotConfigPerModule)){\n for (let [slotName, config] of Object.entries(configBySlotName)){\n validateExtensionSlotConfig(config, moduleName, slotName);\n }\n }\n}\nfunction validateExtensionSlotConfig(config, moduleName, slotName) {\n const keyPath = `${moduleName}.extensionSlots.${slotName}`;\n const errorPrefix = `Extension slot config '${keyPath}'`;\n const invalidKeys = Object.keys(config).filter((k)=>![\n 'add',\n 'remove',\n 'order',\n 'configure'\n ].includes(k));\n if (invalidKeys.length) {\n logError(keyPath, errorPrefix + `' contains invalid keys '${invalidKeys.join(\"', '\")}'`);\n }\n if (config.add) {\n if (!Array.isArray(config.add) || !config.add.every((n)=>typeof n === 'string')) {\n logError(keyPath, errorPrefix + `.add' is invalid. Must be an array of strings (extension IDs)`);\n }\n }\n if (config.remove) {\n if (!Array.isArray(config.remove) || !config.remove.every((n)=>typeof n === 'string')) {\n logError(keyPath, errorPrefix + `.remove' is invalid. Must be an array of strings (extension IDs)`);\n }\n }\n if (config.order) {\n if (!Array.isArray(config.order) || !config.order.every((n)=>typeof n === 'string')) {\n logError(keyPath, errorPrefix + `.order' is invalid. Must be an array of strings (extension IDs)`);\n }\n }\n if (config.configure) {\n if (!isOrdinaryObject(config.configure)) {\n logError(keyPath, errorPrefix + `.configure' is invalid. Must be an object with extension IDs for keys`);\n }\n }\n}\nfunction getProvidedConfigs(configState, tempConfigState) {\n return [\n ...configState.providedConfigs.map((c)=>c.config),\n tempConfigState.config\n ];\n}\n/**\n * Validates the config schema for a module. Since problems identified here are programming errors\n * that hopefully will be caught during development, this function logs errors to the console directly;\n * it's fine if we spam the user with these errors.\n */ function validateConfigSchema(moduleName, schema, keyPath = '') {\n const updateMessage = `Please verify that you are running the latest version and, if so, alert the maintainer.`;\n for (const key of Object.keys(schema).filter((k)=>!k.startsWith('_'))){\n const thisKeyPath = keyPath + (keyPath && '.') + key;\n const schemaPart = schema[key];\n if (thisKeyPath === 'Display conditions') {\n console.error(`${moduleName} declares a configuration option called \"Display conditions\"; the \"Display conditions\" option is a reserved name. ${updateMessage}`);\n }\n if (thisKeyPath === 'Translation overrides') {\n console.error(`${moduleName} declares a configuration option called \"Translation overrides\"; the \"Translation overrides\" option is a reserved name. ${updateMessage}`);\n }\n if (!isOrdinaryObject(schemaPart)) {\n console.error(`${moduleName} has bad config schema definition for key '${thisKeyPath}'. ${updateMessage}`);\n continue;\n }\n if (!schemaPart.hasOwnProperty('_default')) {\n // recurse for nested config keys\n validateConfigSchema(moduleName, schemaPart, thisKeyPath);\n }\n const elements = schemaPart._elements;\n if (hasObjectSchema(elements)) {\n validateConfigSchema(moduleName, elements, thisKeyPath + '._elements');\n }\n if (schemaPart._validators) {\n for (let validator of schemaPart._validators){\n if (typeof validator !== 'function') {\n console.error(`${moduleName} has invalid validator for key '${thisKeyPath}' ${updateMessage}.` + `\\n\\nIf you're the maintainer: validators must be functions that return either ` + `undefined or an error string. Received ${validator}.`);\n }\n }\n }\n const valueType = schemaPart._type;\n if (valueType && !Object.values(_types_js__WEBPACK_IMPORTED_MODULE_0__.Type).includes(valueType)) {\n console.error(`${moduleName} has invalid type for key '${thisKeyPath}' ${updateMessage}.` + `\\n\\nIf you're the maintainer: the allowed types are ${Object.values(_types_js__WEBPACK_IMPORTED_MODULE_0__.Type).join(', ')}. ` + `Received '${valueType}'`);\n }\n if (Object.keys(schemaPart).every((k)=>[\n '_description',\n '_validators',\n '_elements',\n '_type'\n ].includes(k)) && !keyPath.includes('._elements')) {\n console.error(`${moduleName} has bad config schema definition for key '${thisKeyPath}'. ${updateMessage}.` + `\\n\\nIf you're the maintainer: all config elements must have a default. ` + `Received ${JSON.stringify(schemaPart)}`);\n }\n if (elements && valueType && ![\n _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Array,\n _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Object\n ].includes(valueType)) {\n console.error(`${moduleName} has bad config schema definition for key '${thisKeyPath}'. ${updateMessage}.` + `\\n\\nIf you're the maintainer: the 'elements' key only works with '_type' equal to 'Array' or 'Object'. ` + `Received ${JSON.stringify(valueType)}`);\n }\n }\n}\nfunction getConfigForModule(moduleName, configState, tempConfigState) {\n const schema = configState.schemas[moduleName];\n const inputConfig = mergeConfigsFor(moduleName, getProvidedConfigs(configState, tempConfigState));\n validateStructure(schema, inputConfig, moduleName);\n const config = setDefaults(schema, inputConfig);\n runAllValidatorsInConfigTree(schema, config, moduleName);\n delete config.extensionSlots;\n return config;\n}\nfunction getConfigForModuleImplicitSchema(moduleName, configState, tempConfigState) {\n const inputConfig = mergeConfigsFor(moduleName, getProvidedConfigs(configState, tempConfigState));\n const config = setDefaults(implicitConfigSchema, inputConfig);\n runAllValidatorsInConfigTree(implicitConfigSchema, config, moduleName);\n delete config.extensionSlots;\n return config;\n}\nfunction mergeConfigsFor(moduleName, allConfigs) {\n const allConfigsForModule = allConfigs.map(({ [moduleName]: c })=>c).filter((c)=>!!c);\n return mergeConfigs(allConfigsForModule);\n}\nfunction mergeConfigs(configs) {\n const mergeDeepAll = (0,ramda__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(ramda__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n return mergeDeepAll({}, configs);\n}\n/**\n * Recursively check the provided config tree to make sure that all\n * of the provided properties exist in the schema, and that types are\n * correct. Does not run validators yet, since those will be run on\n * the config with the defaults filled in.\n */ function validateStructure(schema, config, keyPath = '') {\n // validate each constituent element\n for (const key of Object.keys(config)){\n const value = config[key];\n const thisKeyPath = keyPath + '.' + key;\n const schemaPart = schema[key];\n if (!schema.hasOwnProperty(key)) {\n if (!(key === 'extensionSlots' && keyPath !== '')) {\n logError(thisKeyPath, `Unknown config key '${thisKeyPath}' provided. Ignoring.`);\n }\n continue;\n }\n validateBranchStructure(schemaPart, value, thisKeyPath);\n }\n}\nfunction validateBranchStructure(schemaPart, value, keyPath) {\n checkType(keyPath, schemaPart._type, value);\n if (isOrdinaryObject(value)) {\n if (schemaPart._type === _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Object) {\n // validate as freeform object\n validateFreeformObjectStructure(schemaPart, value, keyPath);\n } else if (!(schemaPart.hasOwnProperty('_default') || schemaPart.hasOwnProperty('_type'))) {\n // validate as normal nested config\n validateStructure(schemaPart, value, keyPath);\n }\n } else {\n if (schemaPart._type === _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Array) {\n validateArrayStructure(schemaPart, value, keyPath);\n }\n }\n}\nfunction validateFreeformObjectStructure(freeformObjectSchema, config, keyPath) {\n if (freeformObjectSchema._elements) {\n for (const key of Object.keys(config)){\n const value = config[key];\n validateBranchStructure(freeformObjectSchema._elements, value, `${keyPath}.${key}`);\n }\n }\n}\nfunction validateArrayStructure(arraySchema, value, keyPath) {\n const validatedAsArray = checkType(keyPath, _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Array, value);\n if (!validatedAsArray) {\n return;\n }\n // if there is an array element object schema, verify that elements match it\n if (hasObjectSchema(arraySchema._elements)) {\n for(let i = 0; i < value.length; i++){\n validateBranchStructure(arraySchema._elements, value[i], `${keyPath}[${i}]`);\n }\n }\n for(let i = 0; i < value.length; i++){\n checkType(`${keyPath}[${i}]`, arraySchema._elements?._type, value[i]);\n }\n}\n/**\n * Run all the validators in the config tree. This should be run\n * on the config object after it has been filled in with all the defaults, since\n * higher-level validators may refer to default values.\n */ function runAllValidatorsInConfigTree(schema, config, keyPath = '') {\n // If `!schema`, there should have been a structural validation error printed already.\n if (schema) {\n if (config !== schema._default) {\n runValidators(keyPath, schema._validators, config);\n }\n if (isOrdinaryObject(config)) {\n for (const key of Object.keys(config)){\n const value = config[key];\n const thisKeyPath = keyPath + '.' + key;\n const schemaPart = schema[key];\n if (schema._type === _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Object && schema._elements) {\n runAllValidatorsInConfigTree(schema._elements, value, thisKeyPath);\n } else {\n runAllValidatorsInConfigTree(schemaPart, value, thisKeyPath);\n }\n }\n } else if (Array.isArray(config) && schema._elements) {\n for(let i = 0; i < config.length; i++){\n runAllValidatorsInConfigTree(schema._elements, config[i], `${keyPath}[${i}]`);\n }\n }\n }\n}\n/**\n * Run type validation for the value, logging any errors.\n * @returns true if validation passes, false otherwise\n */ function checkType(keyPath, _type, value) {\n if (_type) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n const validator = {\n Array: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isArray,\n Boolean: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isBoolean,\n ConceptUuid: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n Number: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isNumber,\n Object: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isObject,\n String: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isString,\n UUID: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n PersonAttributeTypeUuid: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n PatientIdentifierTypeUuid: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isUuid\n };\n return runValidators(keyPath, [\n validator[_type]\n ], value);\n }\n return true;\n}\n/**\n * Runs validators, logging errors.\n * @returns true if all pass, false otherwise.\n */ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nfunction runValidators(keyPath, validators, value) {\n let returnValue = true;\n if (validators) {\n try {\n for (let validator of validators){\n const validatorResult = validator(value);\n if (typeof validatorResult === 'string') {\n const message = typeof value === 'object' ? `Invalid configuration for ${keyPath}: ${validatorResult}` : `Invalid configuration value ${value} for ${keyPath}: ${validatorResult}`;\n logError(keyPath, message);\n returnValue = false;\n }\n }\n } catch (e) {\n console.error(`Skipping invalid validator at \"${keyPath}\". Encountered error\\n\\t${e}`);\n }\n }\n return returnValue;\n}\n// Recursively fill in the config with values from the schema.\nconst setDefaults = (schema, inputConfig)=>{\n const config = (0,ramda__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(inputConfig);\n if (!schema) {\n return config;\n }\n for (const key of Object.keys(schema)){\n const configPart = config[key];\n const schemaPart = schema[key];\n // The `schemaPart &&` clause of this `if` statement will only fail\n // if the schema is very invalid. It is there to prevent the app from\n // crashing completely, though it will produce unexpected behavior.\n // If this happens, there should be legible errors in the console from\n // the schema validator.\n if (schemaPart && (schemaPart.hasOwnProperty('_type') || schemaPart.hasOwnProperty('_default'))) {\n // We assume that schemaPart defines a config value, since it has\n // a property `_type` or `_default`.\n if (!config.hasOwnProperty(key)) {\n config[key] = schemaPart['_default'];\n }\n // We also check if it is an object or array with object elements, in which case we recurse\n const elements = schemaPart._elements;\n if (configPart && hasObjectSchema(elements)) {\n if (schemaPart._type === _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Array && Array.isArray(configPart)) {\n const configWithDefaults = configPart.map((conf)=>setDefaults(elements, conf));\n config[key] = configWithDefaults;\n } else if (schemaPart._type === _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Object) {\n for (let objectKey of Object.keys(configPart)){\n configPart[objectKey] = setDefaults(elements, configPart[objectKey]);\n }\n }\n }\n } else if (isOrdinaryObject(schemaPart)) {\n // Since schemaPart has no property \"_type\", if it's an ordinary object\n // (unlike, importantly, the validators array), we assume it is a parent config property.\n // We recurse to config[key] and schema[key]. Default config[key] to {}.\n const selectedConfigPart = configPart ?? {};\n // There will have been a validation error already if configPart is not a plain object.\n if (isOrdinaryObject(selectedConfigPart)) {\n config[key] = setDefaults(schemaPart, selectedConfigPart);\n }\n }\n }\n return config;\n};\nfunction hasObjectSchema(elementsSchema) {\n return !!elementsSchema && Object.keys(elementsSchema).filter((e)=>![\n '_default',\n '_validators'\n ].includes(e)).length > 0;\n}\nfunction isOrdinaryObject(value) {\n return typeof value === 'object' && !Array.isArray(value) && value !== null;\n}\nfunction logError(keyPath, message) {\n const key = `${keyPath}:::${message}`;\n // technically, this should not be possible, but because of how things wind-up transpiled, this isn't impossible\n if (!displayedValidationMessages) {\n displayedValidationMessages = new Set();\n }\n if (!displayedValidationMessages.has(key)) {\n console.error(message);\n displayedValidationMessages.add(key);\n }\n}\n/**\n * Normally, configuration errors are only displayed once. This function clears the list of\n * displayed errors, so that they will be displayed again.\n *\n * @internal\n */ function clearConfigErrors(keyPath) {\n if (keyPath) {\n displayedValidationMessages.forEach((key)=>{\n if (key.startsWith(keyPath)) {\n displayedValidationMessages.delete(key);\n }\n });\n } else {\n displayedValidationMessages.clear();\n }\n}\n/**\n * Copied over from esm-extensions. It rightly belongs to that module, but esm-config\n * cannot depend on esm-extensions.\n */ function getExtensionNameFromId(extensionId) {\n const [extensionName] = extensionId.split('#');\n return extensionName;\n}\n/**\n * The translation overrides schema is used in the implicit schema given to every module;\n * plus any additional translation namespaces (at time of writing, this is just 'core').\n */ const translationOverridesSchema = {\n 'Translation overrides': {\n _description: 'Per-language overrides for frontend translations should be keyed by language code and each language dictionary contains the translation key and the display value',\n _type: _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Object,\n _default: {},\n _validators: [\n (0,_validators_validator_js__WEBPACK_IMPORTED_MODULE_2__.validator)((o)=>Object.keys(o).every((k)=>/^[a-z]{2,3}(-[A-Z]{2,3})?$/.test(k)), (o)=>{\n const badKeys = Object.keys(o).filter((k)=>!/^[a-z]{2,3}(-[A-Z]{2,3})?$/.test(k));\n return `The 'Translation overrides' object should have language codes for keys. Language codes must be in the form of a two-to-three letter language code optionally followed by a hyphen and a two-to-three letter country code. The following keys do not conform: ${badKeys.join(', ')}.`;\n })\n ]\n }\n};\n/**\n * The implicitConfigSchema is implicitly included in every configuration schema\n */ const implicitConfigSchema = {\n 'Display conditions': {\n privileges: {\n _description: 'The privilege(s) the user must have to use this extension',\n _type: _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Array,\n _default: []\n }\n },\n ...translationOverridesSchema\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC9tb2R1bGUtY29uZmlnL21vZHVsZS1jb25maWcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZCQUE2QixHQUF1RTtBQUNqRTtBQUN5RTtBQUNyRDtBQUMrSjtBQUN0Tjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1CQyxHQUFHcUIsb0JBQW9CUiwwREFBbUJBLENBQUNTLFFBQVEsSUFBSUgsMkRBQW9CQSxDQUFDRyxRQUFRO0FBQ3JGVCwwREFBbUJBLENBQUNVLFNBQVMsQ0FBQyxDQUFDQyxjQUFjSCxvQkFBb0JHLGFBQWFMLDJEQUFvQkEsQ0FBQ0csUUFBUTtBQUMzR0gsMkRBQW9CQSxDQUFDSSxTQUFTLENBQUMsQ0FBQ0Usa0JBQWtCSixvQkFBb0JSLDBEQUFtQkEsQ0FBQ1MsUUFBUSxJQUFJRztBQUN0R0MsOEJBQThCYiwwREFBbUJBLENBQUNTLFFBQVEsSUFBSUgsMkRBQW9CQSxDQUFDRyxRQUFRO0FBQzNGVCwwREFBbUJBLENBQUNVLFNBQVMsQ0FBQyxDQUFDQyxjQUFjRSw4QkFBOEJGLGFBQWFMLDJEQUFvQkEsQ0FBQ0csUUFBUTtBQUNySEgsMkRBQW9CQSxDQUFDSSxTQUFTLENBQUMsQ0FBQ0Usa0JBQWtCQyw4QkFBOEJiLDBEQUFtQkEsQ0FBQ1MsUUFBUSxJQUFJRztBQUNoSEUsNEJBQTRCZCwwREFBbUJBLENBQUNTLFFBQVEsSUFBSUgsMkRBQW9CQSxDQUFDRyxRQUFRO0FBQ3pGVCwwREFBbUJBLENBQUNVLFNBQVMsQ0FBQyxDQUFDQyxjQUFjRyw0QkFBNEJILGFBQWFMLDJEQUFvQkEsQ0FBQ0csUUFBUTtBQUNuSEgsMkRBQW9CQSxDQUFDSSxTQUFTLENBQUMsQ0FBQ0Usa0JBQWtCRSw0QkFBNEJkLDBEQUFtQkEsQ0FBQ1MsUUFBUSxJQUFJRztBQUM5R0csd0JBQXdCZiwwREFBbUJBLENBQUNTLFFBQVEsSUFBSVIsMkRBQW9CQSxDQUFDUSxRQUFRLElBQUlILDJEQUFv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TTtRQUNsQnFGLFVBQVUsQ0FBQztRQUNYZ0MsYUFBYTtZQUNUNUksbUVBQVNBLENBQUMsQ0FBQ3dMLElBQUlqSyxPQUFPQyxJQUFJLENBQUNnSyxHQUFHdkQsS0FBSyxDQUFDLENBQUNQLElBQUksNkJBQTZCK0QsSUFBSSxDQUFDL0QsS0FBSyxDQUFDOEQ7Z0JBQzdFLE1BQU1FLFVBQVVuSyxPQUFPQyxJQUFJLENBQUNnSyxHQUFHL0QsTUFBTSxDQUFDLENBQUNDLElBQUksQ0FBQyw2QkFBNkIrRCxJQUFJLENBQUMvRDtnQkFDOUUsT0FBTyxDQUFDLDZQQUE2UCxFQUFFZ0UsUUFBUTVELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoUztTQUNIO0lBQ0w7QUFDSjtBQUNBOztDQUVDLEdBQUcsTUFBTXJFLHVCQUF1QjtJQUM3QixzQkFBc0I7UUFDbEJrSSxZQUFZO1lBQ1JKLGNBQWM7WUFDZHpDLE9BQU9ySiwyQ0FBSUEsQ0FBQ3VJLEtBQUs7WUFDakJwQixVQUFVLEVBQUU7UUFDaEI7SUFDSjtJQUNBLEdBQUc5QywwQkFBMEI7QUFDakMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uL2ZyYW1ld29yay9lc20tY29uZmlnL2Rpc3QvbW9kdWxlLWNvbmZpZy9tb2R1bGUtY29uZmlnLmpzPzhkZmUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBtb2R1bGUgQGNhdGVnb3J5IENvbmZpZyAqLyBpbXBvcnQgeyBjbG9uZSwgcmVkdWNlLCBtZXJnZURlZXBSaWdodCwgZXF1YWxzLCBvbWl0IH0gZnJvbSBcInJhbWRhXCI7XG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0Jvb2xlYW4sIGlzVXVpZCwgaXNOdW1iZXIsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gXCIuLi92YWxpZGF0b3JzL3R5cGUtdmFsaWRhdG9ycy5qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSBcIi4uL3ZhbGlkYXRvcnMvdmFsaWRhdG9yLmpzXCI7XG5pbXBvcnQgeyBjb25maWdJbnRlcm5hbFN0b3JlLCBjb25maWdFeHRlbnNpb25TdG9yZSwgZ2V0Q29uZmlnU3RvcmUsIGdldEV4dGVuc2lvbkNvbmZpZywgZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlLCBpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUsIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLCBnZXRFeHRlbnNpb25TbG90c0NvbmZpZ1N0b3JlIH0gZnJvbSBcIi4vc3RhdGUuanNcIjtcbi8qKlxuICogU3RvcmUgc2V0dXBcbiAqXG4gKlxuICogU2V0IHVwIHN0b3JlcyBhbmQgc3Vic2NyaXB0aW9ucyBzbyB0aGF0IGlucHV0cyBnZXQgcHJvY2Vzc2VkIGFwcHJvcHJpYXRlbHkuXG4gKlxuICogVGhlcmUgYXJlICppbnB1dCogc3RvcmVzIGFuZCAqb3V0cHV0KiBzdG9yZXMuIFRoZSAqaW5wdXQqIHN0b3Jlc1xuICogYXJlIGNvbmZpZ0ludGVybmFsU3RvcmUsIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLCBhbmQgY29uZmlnRXh0ZW5zaW9uU3RvcmUuIFRoZVxuICogb3V0cHV0IHN0b3JlcyBhcmUgc2V0IGluIHRoZSBgY29tcHV0ZS4uLmAgZnVuY3Rpb25zLiBUaGV5IGFyZSB0aGUgbW9kdWxlXG4gKiBjb25maWcgc3RvcmVzLCB0aGUgZXh0ZW5zaW9uIHNsb3QgY29uZmlnIHN0b3JlcyAoYnkgbW9kdWxlKSwgdGhlIGV4dGVuc2lvblxuICogY29uZmlnIHN0b3JlcywgYW5kIHRoZSBpbXBsZW1lbnRlciB0b29scyBjb25maWcgc3RvcmUuXG4gKlxuICogVGhpcyBjb2RlIHNldHMgdXAgdGhlIHN1YnNjcmlwdGlvbnMgc28gdGhhdCB3aGVuIGFuIGlucHV0IHN0b3JlIGNoYW5nZXMsXG4gKiB0aGUgY29ycmVjdCBzZXQgb2Ygb3V0cHV0IHN0b3JlcyBhcmUgdXBkYXRlZC5cbiAqXG4gKiBBbGwgYGNvbXB1dGUuLi5gIGZ1bmN0aW9ucyBleGNlcHQgYGNvbXB1dGVFeHRlbnNpb25Db25maWdzYCBhcmUgcHVyZVxuICogKG9yIGFyZSBzdXBwb3NlZCB0byBiZSksIG90aGVyIHRoYW4gdGhlIGZhY3QgdGhhdCB0aGV5IGFsbCBgc2V0U3RhdGVgXG4gKiBzdG9yZSB2YWx1ZXMgYXQgdGhlIGVuZC4gYGNvbXB1dGVFeHRlbnNpb25Db25maWdzYCBjYWxscyBgZ2V0R2xvYmFsU3RvcmVgLFxuICogd2hpY2ggY3JlYXRlcyBzdG9yZXMuXG4gKi8gY29tcHV0ZU1vZHVsZUNvbmZpZyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpO1xuY29uZmlnSW50ZXJuYWxTdG9yZS5zdWJzY3JpYmUoKGNvbmZpZ1N0YXRlKT0+Y29tcHV0ZU1vZHVsZUNvbmZpZyhjb25maWdTdGF0ZSwgdGVtcG9yYXJ5Q29uZmlnU3RvcmUuZ2V0U3RhdGUoKSkpO1xudGVtcG9yYXJ5Q29uZmlnU3RvcmUuc3Vic2NyaWJlKCh0ZW1wQ29uZmlnU3RhdGUpPT5jb21wdXRlTW9kdWxlQ29uZmlnKGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKSwgdGVtcENvbmZpZ1N0YXRlKSk7XG5jb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpO1xuY29uZmlnSW50ZXJuYWxTdG9yZS5zdWJzY3JpYmUoKGNvbmZpZ1N0YXRlKT0+Y29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWcoY29uZmlnU3RhdGUsIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpKTtcbnRlbXBvcmFyeUNvbmZpZ1N0b3JlLnN1YnNjcmliZSgodGVtcENvbmZpZ1N0YXRlKT0+Y29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWcoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wQ29uZmlnU3RhdGUpKTtcbmNvbXB1dGVFeHRlbnNpb25TbG90Q29uZmlncyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpO1xuY29uZmlnSW50ZXJuYWxTdG9yZS5zdWJzY3JpYmUoKGNvbmZpZ1N0YXRlKT0+Y29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKSk7XG50ZW1wb3JhcnlDb25maWdTdG9yZS5zdWJzY3JpYmUoKHRlbXBDb25maWdTdGF0ZSk9PmNvbXB1dGVFeHRlbnNpb25TbG90Q29uZmlncyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIHRlbXBDb25maWdTdGF0ZSkpO1xuY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCBjb25maWdFeHRlbnNpb25TdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbmNvbmZpZ0ludGVybmFsU3RvcmUuc3Vic2NyaWJlKChjb25maWdTdGF0ZSk9PntcbiAgICBjb21wdXRlRXh0ZW5zaW9uQ29uZmlncyhjb25maWdTdGF0ZSwgY29uZmlnRXh0ZW5zaW9uU3RvcmUuZ2V0U3RhdGUoKSwgdGVtcG9yYXJ5Q29uZmlnU3RvcmUuZ2V0U3RhdGUoKSk7XG59KTtcbmNvbmZpZ0V4dGVuc2lvblN0b3JlLnN1YnNjcmliZSgoZXh0ZW5zaW9uU3RhdGUpPT57XG4gICAgY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCBleHRlbnNpb25TdGF0ZSwgdGVtcG9yYXJ5Q29uZmlnU3RvcmUuZ2V0U3RhdGUoKSk7XG59KTtcbnRlbXBvcmFyeUNvbmZpZ1N0b3JlLnN1YnNjcmliZSgodGVtcENvbmZpZ1N0YXRlKT0+e1xuICAgIGNvbXB1dGVFeHRlbnNpb25Db25maWdzKGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKSwgY29uZmlnRXh0ZW5zaW9uU3RvcmUuZ2V0U3RhdGUoKSwgdGVtcENvbmZpZ1N0YXRlKTtcbn0pO1xuLyoqIEtlZXAgdHJhY2sgb2Ygd2hpY2ggdmFsaWRhdGlvbiBlcnJvcnMgd2UgaGF2ZSBkaXNwbGF5ZWQuIEVhY2ggb25lIHNob3VsZCBvbmx5IGJlIGRpc3BsYXllZCBvbmNlLiAqLyBsZXQgZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzID0gbmV3IFNldCgpO1xuZnVuY3Rpb24gY29tcHV0ZU1vZHVsZUNvbmZpZyhzdGF0ZSwgdGVtcFN0YXRlKSB7XG4gICAgZm9yIChsZXQgbW9kdWxlTmFtZSBvZiBPYmplY3Qua2V5cyhzdGF0ZS5zY2hlbWFzKSl7XG4gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHNjaGVtYSBjb3VsZCBiZSBlaXRoZXIganVzdCB0aGUgaW1wbGljaXQgc2NoZW1hIG9yIHRoZSBhY3R1YWxseVxuICAgICAgICAvLyBkZWZpbmVkIHNjaGVtYS4gV2UgcnVuIHdpdGgganVzdCB0aGUgaW1wbGljaXQgc2NoZW1hIGJlY2F1c2Ugd2Ugd2FudCB0byBwb3B1bGF0ZVxuICAgICAgICAvLyB0aGUgY29uZmlnIHN0b3JlIHdpdGggdGhlIHRyYW5zbGF0aW9uIG92ZXJyaWRlcyBhcyBzb29uIGFzIHBvc3NpYmxlLiBJbiBmYWN0LCB0aGVcbiAgICAgICAgLy8gdHJhbnNsYXRpb24gc3lzdGVtIHdpbGwgdGhyb3cgZm9yIFN1c3BlbnNlIHVudGlsIHRoZSB0cmFuc2xhdGlvbiBvdmVycmlkZXMgYXJlXG4gICAgICAgIC8vIGF2YWlsYWJsZSwgd2hpY2ggYXMgb2YgdGhpcyB3cml0aW5nIGJsb2NrcyB0aGUgc2NoZW1hIGRlZmluaXRpb24gZnJvbSBvY2N1cnJpbmdcbiAgICAgICAgLy8gZm9yIG1vZHVsZXMgbG9hZGVkIGJhc2VkIG9uIHRoZWlyIGV4dGVuc2lvbnMuXG4gICAgICAgIGNvbnN0IG1vZHVsZVN0b3JlID0gZ2V0Q29uZmlnU3RvcmUobW9kdWxlTmFtZSk7XG4gICAgICAgIGlmIChzdGF0ZS5tb2R1bGVMb2FkZWRbbW9kdWxlTmFtZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zvck1vZHVsZShtb2R1bGVOYW1lLCBzdGF0ZSwgdGVtcFN0YXRlKTtcbiAgICAgICAgICAgIG1vZHVsZVN0b3JlLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk92ZXJyaWRlc0xvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zvck1vZHVsZUltcGxpY2l0U2NoZW1hKG1vZHVsZU5hbWUsIHN0YXRlLCB0ZW1wU3RhdGUpO1xuICAgICAgICAgICAgbW9kdWxlU3RvcmUuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT3ZlcnJpZGVzTG9hZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxvYWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGNvbXB1dGVFeHRlbnNpb25TbG90Q29uZmlncyhzdGF0ZSwgdGVtcFN0YXRlKSB7XG4gICAgY29uc3Qgc2xvdENvbmZpZ3MgPSBnZXRFeHRlbnNpb25TbG90Q29uZmlncyhzdGF0ZSwgdGVtcFN0YXRlKTtcbiAgICBjb25zdCBuZXdTbG90U3RvcmVFbnRyaWVzID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHNsb3RDb25maWdzKS5tYXAoKFtzbG90TmFtZSwgY29uZmlnXSk9PltcbiAgICAgICAgICAgIHNsb3ROYW1lLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb25maWdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSkpO1xuICAgIGNvbnN0IHNsb3RTdG9yZSA9IGdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUoKTtcbiAgICBjb25zdCBvbGRTdGF0ZSA9IHNsb3RTdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBzbG90czoge1xuICAgICAgICAgICAgLi4ub2xkU3RhdGUuc2xvdHMsXG4gICAgICAgICAgICAuLi5uZXdTbG90U3RvcmVFbnRyaWVzXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGlmICghZXF1YWxzKG9sZFN0YXRlLCBuZXdTdGF0ZSkpIHtcbiAgICAgICAgc2xvdFN0b3JlLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZyhzdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSB7XG4gICAgY29uc3QgY29uZmlnID0gZ2V0SW1wbGVtZW50ZXJUb29sc0NvbmZpZyhzdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKTtcbiAgICBpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUuc2V0U3RhdGUoe1xuICAgICAgICBjb25maWdcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVFeHRlbnNpb25Db25maWdzKGNvbmZpZ1N0YXRlLCBleHRlbnNpb25TdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSB7XG4gICAgY29uc3QgY29uZmlncyA9IHt9O1xuICAgIC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBtb2R1bGUgc2NoZW1hIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCwgc2luY2UgdGhlIGV4dGVuc2lvblxuICAgIC8vIGl0IGNvbnRhaW5zIGlzIG1vdW50ZWQuXG4gICAgZm9yIChsZXQgZXh0ZW5zaW9uIG9mIGV4dGVuc2lvblN0YXRlLm1vdW50ZWRFeHRlbnNpb25zKXtcbiAgICAgICAgY29uc3QgY29uZmlnID0gY29tcHV0ZUV4dGVuc2lvbkNvbmZpZyhleHRlbnNpb24uc2xvdE1vZHVsZU5hbWUsIGV4dGVuc2lvbi5leHRlbnNpb25Nb2R1bGVOYW1lLCBleHRlbnNpb24uc2xvdE5hbWUsIGV4dGVuc2lvbi5leHRlbnNpb25JZCwgY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSk7XG4gICAgICAgIGNvbmZpZ3NbZXh0ZW5zaW9uLnNsb3ROYW1lXSA9IHtcbiAgICAgICAgICAgIC4uLmNvbmZpZ3NbZXh0ZW5zaW9uLnNsb3ROYW1lXSxcbiAgICAgICAgICAgIFtleHRlbnNpb24uZXh0ZW5zaW9uSWRdOiB7XG4gICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgIGxvYWRlZDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICBnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUoKS5zZXRTdGF0ZSh7XG4gICAgICAgIGNvbmZpZ3NcbiAgICB9KTtcbn1cbi8qXG4gKiBBUElcbiAqXG4gKi8gLyoqXG4gKiBUaGlzIGRlZmluZXMgYSBjb25maWd1cmF0aW9uIHNjaGVtYSBmb3IgYSBtb2R1bGUuIFRoZSBzY2hlbWEgdGVsbHMgdGhlXG4gKiBjb25maWd1cmF0aW9uIHN5c3RlbSBob3cgdGhlIG1vZHVsZSBjYW4gYmUgY29uZmlndXJlZC4gSXQgc3BlY2lmaWVzXG4gKiB3aGF0IG1ha2VzIGNvbmZpZ3VyYXRpb24gdmFsaWQgb3IgaW52YWxpZC5cbiAqXG4gKiBTZWUgW0NvbmZpZ3VyYXRpb24gU3lzdGVtXShodHRwczovL28zLWRvY3Mub3Blbm1ycy5vcmcvZG9jcy9jb25maWd1cmF0aW9uLXN5c3RlbSlcbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlZmluaW5nIGEgY29uZmlnIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0gbW9kdWxlTmFtZSBOYW1lIG9mIHRoZSBtb2R1bGUgdGhlIHNjaGVtYSBpcyBiZWluZyBkZWZpbmVkIGZvci4gR2VuZXJhbGx5XG4gKiAgIHNob3VsZCBiZSB0aGUgb25lIGluIHdoaWNoIHRoZSBgZGVmaW5lQ29uZmlnU2NoZW1hYCBjYWxsIHRha2VzIHBsYWNlLlxuICogQHBhcmFtIHNjaGVtYSBUaGUgY29uZmlnIHNjaGVtYSBmb3IgdGhlIG1vZHVsZVxuICovIGV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb25maWdTY2hlbWEobW9kdWxlTmFtZSwgc2NoZW1hKSB7XG4gICAgdmFsaWRhdGVDb25maWdTY2hlbWEobW9kdWxlTmFtZSwgc2NoZW1hKTtcbiAgICBjb25zdCBlbmhhbmNlZFNjaGVtYSA9IG1lcmdlRGVlcFJpZ2h0KHNjaGVtYSwgaW1wbGljaXRDb25maWdTY2hlbWEpO1xuICAgIGNvbmZpZ0ludGVybmFsU3RvcmUuc2V0U3RhdGUoKHN0YXRlKT0+KHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgc2NoZW1hczoge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLnNjaGVtYXMsXG4gICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdOiBlbmhhbmNlZFNjaGVtYVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vZHVsZUxvYWRlZDoge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLm1vZHVsZUxvYWRlZCxcbiAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV06IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xufVxuLyoqXG4gKiBUaGlzIGFsZXJ0cyB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gdGhhdCBhIG1vZHVsZSBleGlzdHMuIFRoaXMgYWxsb3dzIGNvbmZpZyB0byBiZVxuICogcHJvY2Vzc2VkLCB3aGlsZSBzdGlsbCBhbGxvd2luZyB0aGUgZXh0ZW5zaW9uIHN5c3RlbSB0byBrbm93IHdoZXRoZXIgdGhlIG1vZHVsZSBoYXNcbiAqIGFjdHVhbGx5IGhhZCBpdHMgZnJvbnQgYnVuZGxlIGV4ZWN1dGVkIHlldC5cbiAqXG4gKiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gZXNtLWFwcC1zaGVsbC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSBtb2R1bGVOYW1lXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTW9kdWxlV2l0aENvbmZpZ1N5c3RlbShtb2R1bGVOYW1lKSB7XG4gICAgY29uZmlnSW50ZXJuYWxTdG9yZS5zZXRTdGF0ZSgoc3RhdGUpPT4oe1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBzY2hlbWFzOiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUuc2NoZW1hcyxcbiAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV06IGltcGxpY2l0Q29uZmlnU2NoZW1hXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbn1cbi8qKlxuICogVGhpcyBhbGVydHMgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIHRoYXQgYSBtb2R1bGUgaGFzIGJlZW4gbG9hZGVkLlxuICpcbiAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBlc20tYXBwLXNoZWxsLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIG1vZHVsZU5hbWVcbiAqLyBleHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNb2R1bGVMb2FkKG1vZHVsZU5hbWUpIHtcbiAgICBjb25maWdJbnRlcm5hbFN0b3JlLnNldFN0YXRlKChzdGF0ZSk9Pih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIG1vZHVsZUxvYWRlZDoge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLm1vZHVsZUxvYWRlZCxcbiAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV06IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xufVxuLyoqXG4gKiBUaGlzIGFsbG93cyB0aGUgY29uZmlnIHN5c3RlbSB0byBzdXBwb3J0IHRyYW5zbGF0aW9uIG92ZXJyaWRlcyBmb3IgbmFtZXNwYWNlcyB0aGF0XG4gKiBkbyBub3QgY29ycmVzcG9uZCB0byBtb2R1bGVzLlxuICpcbiAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBlc20tYXBwLXNoZWxsLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIG5hbWVzcGFjZVxuICovIGV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRyYW5zbGF0aW9uTmFtZXNwYWNlKG5hbWVzcGFjZSkge1xuICAgIGNvbmZpZ0ludGVybmFsU3RvcmUuc2V0U3RhdGUoKHN0YXRlKT0+KHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgc2NoZW1hczoge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLnNjaGVtYXMsXG4gICAgICAgICAgICAgICAgW25hbWVzcGFjZV06IHRyYW5zbGF0aW9uT3ZlcnJpZGVzU2NoZW1hXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbn1cbi8qKlxuICogVGhpcyBkZWZpbmVzIGEgY29uZmlndXJhdGlvbiBzY2hlbWEgZm9yIGFuIGV4dGVuc2lvbi4gV2hlbiBhIHNjaGVtYSBpcyBkZWZpbmVkXG4gKiBmb3IgYW4gZXh0ZW5zaW9uLCB0aGF0IGV4dGVuc2lvbiB3aWxsIHJlY2VpdmUgdGhlIGNvbmZpZ3VyYXRpb24gY29ycmVzcG9uZGluZ1xuICogdG8gdGhhdCBzY2hlbWEsIHJhdGhlciB0aGFuIHRoZSBjb25maWd1cmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZHVsZVxuICogaW4gd2hpY2ggaXQgaXMgZGVmaW5lZC5cbiAqXG4gKiBUaGUgc2NoZW1hIHRlbGxzIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBob3cgdGhlIG1vZHVsZSBjYW4gYmUgY29uZmlndXJlZC5cbiAqIEl0IHNwZWNpZmllcyB3aGF0IG1ha2VzIGNvbmZpZ3VyYXRpb24gdmFsaWQgb3IgaW52YWxpZC5cbiAqXG4gKiBTZWUgW0NvbmZpZ3VyYXRpb24gU3lzdGVtXShodHRwczovL28zLWRvY3Mub3Blbm1ycy5vcmcvZG9jcy9jb25maWd1cmF0aW9uLXN5c3RlbSlcbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlZmluaW5nIGEgY29uZmlnIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0gZXh0ZW5zaW9uTmFtZSBOYW1lIG9mIHRoZSBleHRlbnNpb24gdGhlIHNjaGVtYSBpcyBiZWluZyBkZWZpbmVkIGZvci5cbiAqICAgU2hvdWxkIG1hdGNoIHRoZSBgbmFtZWAgb2Ygb25lIG9mIHRoZSBgZXh0ZW5zaW9uc2AgZW50cmllcyBiZWluZyByZXR1cm5lZFxuICogICBieSBgc2V0dXBPcGVuTVJTYC5cbiAqIEBwYXJhbSBzY2hlbWEgVGhlIGNvbmZpZyBzY2hlbWEgZm9yIHRoZSBleHRlbnNpb25cbiAqLyBleHBvcnQgZnVuY3Rpb24gZGVmaW5lRXh0ZW5zaW9uQ29uZmlnU2NoZW1hKGV4dGVuc2lvbk5hbWUsIHNjaGVtYSkge1xuICAgIHZhbGlkYXRlQ29uZmlnU2NoZW1hKGV4dGVuc2lvbk5hbWUsIHNjaGVtYSk7XG4gICAgY29uc3QgZW5oYW5jZWRTY2hlbWEgPSBtZXJnZURlZXBSaWdodChzY2hlbWEsIGltcGxpY2l0Q29uZmlnU2NoZW1hKTtcbiAgICBjb25zdCBzdGF0ZSA9IGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBpZiAoc3RhdGUuc2NoZW1hc1tleHRlbnNpb25OYW1lXSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBDb25maWcgc2NoZW1hIGZvciBleHRlbnNpb24gJHtleHRlbnNpb25OYW1lfSBhbHJlYWR5IGV4aXN0cy4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGV4dGVuc2lvbnMgd2l0aCB0aGlzIHNhbWUgbmFtZSwgb25lIHdpbGwgcHJvYmFibHkgY3Jhc2guYCk7XG4gICAgfVxuICAgIGNvbmZpZ0ludGVybmFsU3RvcmUuc2V0U3RhdGUoKHN0YXRlKT0+KHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgc2NoZW1hczoge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLnNjaGVtYXMsXG4gICAgICAgICAgICAgICAgW2V4dGVuc2lvbk5hbWVdOiBlbmhhbmNlZFNjaGVtYVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZShjb25maWcsIHNvdXJjZU5hbWUgPSAncHJvdmlkZWQnKSB7XG4gICAgY29uZmlnSW50ZXJuYWxTdG9yZS5zZXRTdGF0ZSgoc3RhdGUpPT4oe1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBwcm92aWRlZENvbmZpZ3M6IFtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5wcm92aWRlZENvbmZpZ3MsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHNvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSkpO1xufVxuLyoqXG4gKiBBIHByb21pc2UtYmFzZWQgd2F5IHRvIGFjY2VzcyB0aGUgY29uZmlnIGFzIHNvb24gYXMgaXQgaXMgZnVsbHkgbG9hZGVkLlxuICogSWYgaXQgaXMgYWxyZWFkeSBsb2FkZWQsIHJlc29sdmVzIHRoZSBjb25maWcgaW4gaXRzIHByZXNlbnQgc3RhdGUuXG4gKlxuICogVGhpcyBpcyBhIHVzZWZ1bCBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBnZXQgdGhlIGNvbmZpZyBpbiB0aGUgY291cnNlXG4gKiBvZiB0aGUgZXhlY3V0aW9uIG9mIGEgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIG1vZHVsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBmb3Igd2hpY2ggdG8gbG9vayB1cCB0aGUgY29uZmlnXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZyhtb2R1bGVOYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKT0+e1xuICAgICAgICBjb25zdCBzdG9yZSA9IGdldENvbmZpZ1N0b3JlKG1vZHVsZU5hbWUpO1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGUoc3RhdGUpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5sb2FkZWQgJiYgc3RhdGUuY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gb21pdChbXG4gICAgICAgICAgICAgICAgICAgICdEaXNwbGF5IGNvbmRpdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJ1xuICAgICAgICAgICAgICAgIF0sIHN0YXRlLmNvbmZpZyk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShjb25maWcpO1xuICAgICAgICAgICAgICAgIGlmICh1bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1cGRhdGUoc3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc3RvcmUuc3Vic2NyaWJlKHVwZGF0ZSk7XG4gICAgfSk7XG59XG4vKiogQGludGVybmFsICovIGV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2xhdGlvbk92ZXJyaWRlcyhtb2R1bGVOYW1lLCBzbG90TmFtZSwgZXh0ZW5zaW9uSWQpIHtcbiAgICBjb25zdCBwcm9taXNlcyA9IFtcbiAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpPT57XG4gICAgICAgICAgICBjb25zdCBjb25maWdTdG9yZSA9IGdldENvbmZpZ1N0b3JlKG1vZHVsZU5hbWUpO1xuICAgICAgICAgICAgZnVuY3Rpb24gdXBkYXRlKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnRyYW5zbGF0aW9uT3ZlcnJpZGVzTG9hZGVkICYmIHN0YXRlLmNvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbk92ZXJyaWRlcyA9IHN0YXRlLmNvbmZpZ1snVHJhbnNsYXRpb24gb3ZlcnJpZGVzJ10gPz8ge307XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJhbnNsYXRpb25PdmVycmlkZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodW5zdWJzY3JpYmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGUoY29uZmlnU3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IGNvbmZpZ1N0b3JlLnN1YnNjcmliZSh1cGRhdGUpO1xuICAgICAgICB9KVxuICAgIF07XG4gICAgaWYgKHNsb3ROYW1lICYmIGV4dGVuc2lvbklkKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUpPT57XG4gICAgICAgICAgICBjb25zdCBjb25maWdTdG9yZSA9IGdldEV4dGVuc2lvbkNvbmZpZyhzbG90TmFtZSwgZXh0ZW5zaW9uSWQpO1xuICAgICAgICAgICAgZnVuY3Rpb24gdXBkYXRlKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmxvYWRlZCAmJiBzdGF0ZS5jb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25PdmVycmlkZXMgPSBzdGF0ZS5jb25maWdbJ1RyYW5zbGF0aW9uIG92ZXJyaWRlcyddID8/IHt9O1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRyYW5zbGF0aW9uT3ZlcnJpZGVzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlKGNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpO1xuICAgICAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBjb25maWdTdG9yZS5zdWJzY3JpYmUodXBkYXRlKTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufVxuLyoqXG4gKiBWYWxpZGF0ZSBhbmQgaW50ZXJwb2xhdGUgZGVmYXVsdHMgZm9yIGBwcm92aWRlZENvbmZpZ2AgYWNjb3JkaW5nIHRvIGBzY2hlbWFgXG4gKlxuICogQHBhcmFtIHNjaGVtYSAgYSBjb25maWd1cmF0aW9uIHNjaGVtYVxuICogQHBhcmFtIHByb3ZpZGVkQ29uZmlnICBhbiBvYmplY3Qgb2YgY29uZmlnIHZhbHVlcyAod2l0aG91dCB0aGUgdG9wLWxldmVsIG1vZHVsZSBuYW1lKVxuICogQHBhcmFtIGtleVBhdGhDb250ZXh0ICBhIGRvdC1kZXBhcmF0ZWQgc3RyaW5nIHdoaWNoIGhlbHBzIHRoZSB1c2VyIGZpZ3VyZSBvdXQgd2hlcmVcbiAqICAgICB0aGUgcHJvdmlkZWQgY29uZmlnIGNhbWUgZnJvbVxuICogQGludGVybmFsXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDb25maWcoc2NoZW1hLCBwcm92aWRlZENvbmZpZywga2V5UGF0aENvbnRleHQpIHtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZShzY2hlbWEsIHByb3ZpZGVkQ29uZmlnLCBrZXlQYXRoQ29udGV4dCk7XG4gICAgY29uc3QgY29uZmlnID0gc2V0RGVmYXVsdHMoc2NoZW1hLCBwcm92aWRlZENvbmZpZyk7XG4gICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWEsIGNvbmZpZywga2V5UGF0aENvbnRleHQpO1xuICAgIHJldHVybiBjb25maWc7XG59XG4vKlxuICogSGVscGVyIGZ1bmN0aW9uc1xuICpcbiAqLyAvKipcbiAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGFuIGV4dGVuc2lvbi4gVGhpcyBjb25maWd1cmF0aW9uIGlzIHNwZWNpZmljXG4gKiB0byB0aGUgc2xvdCBpbiB3aGljaCBpdCBpcyBtb3VudGVkLCBhbmQgaXRzIElEIHdpdGhpbiB0aGF0IHNsb3QuXG4gKlxuICogVGhlIHNjaGVtYSBmb3IgdGhhdCBjb25maWd1cmF0aW9uIGlzIHRoZSBleHRlbnNpb24gc2NoZW1hLiBJZiBubyBleHRlbnNpb25cbiAqIHNjaGVtYSBoYXMgYmVlbiBwcm92aWRlZCwgdGhlIHNjaGVtYSB1c2VkIGlzIHRoZSBzY2hlbWEgb2YgdGhlIG1vZHVsZSBpblxuICogd2hpY2ggdGhlIGV4dGVuc2lvbiBpcyBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSBzbG90TW9kdWxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdoaWNoIGRlZmluZXMgdGhlIGV4dGVuc2lvbiBzbG90XG4gKiBAcGFyYW0gZXh0ZW5zaW9uTW9kdWxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdoaWNoIGRlZmluZXMgdGhlIGV4dGVuc2lvbiAoYW5kIHRoZXJlZm9yZSB0aGUgY29uZmlnIHNjaGVtYSlcbiAqIEBwYXJhbSBzbG90TmFtZSBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHNsb3Qgd2hlcmUgdGhlIGV4dGVuc2lvbiBpcyBtb3VudGVkXG4gKiBAcGFyYW0gZXh0ZW5zaW9uSWQgVGhlIElEIG9mIHRoZSBleHRlbnNpb24gaW4gaXRzIHNsb3RcbiAqLyBmdW5jdGlvbiBjb21wdXRlRXh0ZW5zaW9uQ29uZmlnKHNsb3RNb2R1bGVOYW1lLCBleHRlbnNpb25Nb2R1bGVOYW1lLCBzbG90TmFtZSwgZXh0ZW5zaW9uSWQsIGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpIHtcbiAgICBjb25zdCBleHRlbnNpb25OYW1lID0gZ2V0RXh0ZW5zaW9uTmFtZUZyb21JZChleHRlbnNpb25JZCk7XG4gICAgY29uc3QgZXh0ZW5zaW9uQ29uZmlnU2NoZW1hID0gY29uZmlnU3RhdGUuc2NoZW1hc1tleHRlbnNpb25OYW1lXTtcbiAgICBjb25zdCBuYW1lT2ZTY2hlbWFTb3VyY2UgPSBleHRlbnNpb25Db25maWdTY2hlbWEgPyBleHRlbnNpb25OYW1lIDogZXh0ZW5zaW9uTW9kdWxlTmFtZTtcbiAgICBjb25zdCBwcm92aWRlZENvbmZpZ3MgPSBnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSk7XG4gICAgY29uc3Qgc2xvdE1vZHVsZUNvbmZpZyA9IG1lcmdlQ29uZmlnc0ZvcihzbG90TW9kdWxlTmFtZSwgcHJvdmlkZWRDb25maWdzKTtcbiAgICBjb25zdCBjb25maWdPdmVycmlkZSA9IHNsb3RNb2R1bGVDb25maWc/LmV4dGVuc2lvblNsb3RzPy5bc2xvdE5hbWVdPy5jb25maWd1cmU/LltleHRlbnNpb25JZF0gPz8ge307XG4gICAgY29uc3QgZXh0ZW5zaW9uQ29uZmlnID0gbWVyZ2VDb25maWdzRm9yKG5hbWVPZlNjaGVtYVNvdXJjZSwgcHJvdmlkZWRDb25maWdzKTtcbiAgICBjb25zdCBjb21iaW5lZENvbmZpZyA9IG1lcmdlQ29uZmlncyhbXG4gICAgICAgIGV4dGVuc2lvbkNvbmZpZyxcbiAgICAgICAgY29uZmlnT3ZlcnJpZGVcbiAgICBdKTtcbiAgICBjb25zdCBzY2hlbWEgPSBleHRlbnNpb25Db25maWdTY2hlbWEgPz8gY29uZmlnU3RhdGUuc2NoZW1hc1tleHRlbnNpb25Nb2R1bGVOYW1lXTtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZShzY2hlbWEsIGNvbWJpbmVkQ29uZmlnLCBuYW1lT2ZTY2hlbWFTb3VyY2UpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKHNjaGVtYSwgY29tYmluZWRDb25maWcpO1xuICAgIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoc2NoZW1hLCBjb25maWcsIG5hbWVPZlNjaGVtYVNvdXJjZSk7XG4gICAgZGVsZXRlIGNvbmZpZy5leHRlbnNpb25TbG90cztcbiAgICByZXR1cm4gY29uZmlnO1xufVxuZnVuY3Rpb24gZ2V0SW1wbGVtZW50ZXJUb29sc0NvbmZpZyhjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSB7XG4gICAgbGV0IHJlc3VsdCA9IGdldFNjaGVtYVdpdGhWYWx1ZXNBbmRTb3VyY2VzKGNsb25lKGNvbmZpZ1N0YXRlLnNjaGVtYXMpKTtcbiAgICBjb25zdCBjb25maWdzQW5kU291cmNlcyA9IFtcbiAgICAgICAgLi4uY29uZmlnU3RhdGUucHJvdmlkZWRDb25maWdzLm1hcCgoYyk9PltcbiAgICAgICAgICAgICAgICBjLmNvbmZpZyxcbiAgICAgICAgICAgICAgICBjLnNvdXJjZVxuICAgICAgICAgICAgXSksXG4gICAgICAgIFtcbiAgICAgICAgICAgIHRlbXBDb25maWdTdGF0ZS5jb25maWcsXG4gICAgICAgICAgICAndGVtcG9yYXJ5IGNvbmZpZydcbiAgICAgICAgXVxuICAgIF07XG4gICAgZm9yIChsZXQgW2NvbmZpZywgc291cmNlXSBvZiBjb25maWdzQW5kU291cmNlcyl7XG4gICAgICAgIHJlc3VsdCA9IG1lcmdlQ29uZmlncyhbXG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICBjcmVhdGVWYWx1ZXNBbmRTb3VyY2VzVHJlZShjb25maWcsIHNvdXJjZSlcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRTY2hlbWFXaXRoVmFsdWVzQW5kU291cmNlcyhzY2hlbWEpIHtcbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdfZGVmYXVsdCcpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICBfdmFsdWU6IHNjaGVtYS5fZGVmYXVsdCxcbiAgICAgICAgICAgIF9zb3VyY2U6ICdkZWZhdWx0J1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNPcmRpbmFyeU9iamVjdChzY2hlbWEpKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzY2hlbWEpLnJlZHVjZSgob2JqLCBrZXkpPT57XG4gICAgICAgICAgICBvYmpba2V5XSA9IGdldFNjaGVtYVdpdGhWYWx1ZXNBbmRTb3VyY2VzKHNjaGVtYVtrZXldKTtcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCB0aGUgc2NoZW1hIGlzIGJhZCBhbmQgYW4gZXJyb3Igd2lsbCBoYXZlIGJlZW4gbG9nZ2VkIGR1cmluZyBzY2hlbWEgdmFsaWRhdGlvblxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVmFsdWVzQW5kU291cmNlc1RyZWUoY29uZmlnLCBzb3VyY2UpIHtcbiAgICBpZiAoaXNPcmRpbmFyeU9iamVjdChjb25maWcpKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLnJlZHVjZSgob2JqLCBrZXkpPT57XG4gICAgICAgICAgICBvYmpba2V5XSA9IGNyZWF0ZVZhbHVlc0FuZFNvdXJjZXNUcmVlKGNvbmZpZ1trZXldLCBzb3VyY2UpO1xuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBfdmFsdWU6IGNvbmZpZyxcbiAgICAgICAgICAgIF9zb3VyY2U6IHNvdXJjZVxuICAgICAgICB9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldEV4dGVuc2lvblNsb3RDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpIHtcbiAgICBjb25zdCBhbGxDb25maWdzID0gbWVyZ2VDb25maWdzKGdldFByb3ZpZGVkQ29uZmlncyhjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSk7XG4gICAgY29uc3Qgc2xvdENvbmZpZ1Blck1vZHVsZSA9IE9iamVjdC5rZXlzKGFsbENvbmZpZ3MpLnJlZHVjZSgob2JqLCBrZXkpPT57XG4gICAgICAgIGlmIChhbGxDb25maWdzW2tleV0/LmV4dGVuc2lvblNsb3RzKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IGFsbENvbmZpZ3Nba2V5XT8uZXh0ZW5zaW9uU2xvdHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9LCB7fSk7XG4gICAgdmFsaWRhdGVBbGxFeHRlbnNpb25TbG90Q29uZmlncyhzbG90Q29uZmlnUGVyTW9kdWxlKTtcbiAgICBjb25zdCBzbG90Q29uZmlncyA9IE9iamVjdC5rZXlzKHNsb3RDb25maWdQZXJNb2R1bGUpLnJlZHVjZSgob2JqLCBrZXkpPT57XG4gICAgICAgIG9iaiA9IHtcbiAgICAgICAgICAgIC4uLm9iaixcbiAgICAgICAgICAgIC4uLnNsb3RDb25maWdQZXJNb2R1bGVba2V5XVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0sIHt9KTtcbiAgICByZXR1cm4gc2xvdENvbmZpZ3M7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZUFsbEV4dGVuc2lvblNsb3RDb25maWdzKHNsb3RDb25maWdQZXJNb2R1bGUpIHtcbiAgICBmb3IgKGxldCBbbW9kdWxlTmFtZSwgY29uZmlnQnlTbG90TmFtZV0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdENvbmZpZ1Blck1vZHVsZSkpe1xuICAgICAgICBmb3IgKGxldCBbc2xvdE5hbWUsIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnQnlTbG90TmFtZSkpe1xuICAgICAgICAgICAgdmFsaWRhdGVFeHRlbnNpb25TbG90Q29uZmlnKGNvbmZpZywgbW9kdWxlTmFtZSwgc2xvdE5hbWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdmFsaWRhdGVFeHRlbnNpb25TbG90Q29uZmlnKGNvbmZpZywgbW9kdWxlTmFtZSwgc2xvdE5hbWUpIHtcbiAgICBjb25zdCBrZXlQYXRoID0gYCR7bW9kdWxlTmFtZX0uZXh0ZW5zaW9uU2xvdHMuJHtzbG90TmFtZX1gO1xuICAgIGNvbnN0IGVycm9yUHJlZml4ID0gYEV4dGVuc2lvbiBzbG90IGNvbmZpZyAnJHtrZXlQYXRofSdgO1xuICAgIGNvbnN0IGludmFsaWRLZXlzID0gT2JqZWN0LmtleXMoY29uZmlnKS5maWx0ZXIoKGspPT4hW1xuICAgICAgICAgICAgJ2FkZCcsXG4gICAgICAgICAgICAncmVtb3ZlJyxcbiAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAnY29uZmlndXJlJ1xuICAgICAgICBdLmluY2x1ZGVzKGspKTtcbiAgICBpZiAoaW52YWxpZEtleXMubGVuZ3RoKSB7XG4gICAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIGVycm9yUHJlZml4ICsgYCcgY29udGFpbnMgaW52YWxpZCBrZXlzICcke2ludmFsaWRLZXlzLmpvaW4oXCInLCAnXCIpfSdgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5hZGQpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5hZGQpIHx8ICFjb25maWcuYWRkLmV2ZXJ5KChuKT0+dHlwZW9mIG4gPT09ICdzdHJpbmcnKSkge1xuICAgICAgICAgICAgbG9nRXJyb3Ioa2V5UGF0aCwgZXJyb3JQcmVmaXggKyBgLmFkZCcgaXMgaW52YWxpZC4gTXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIChleHRlbnNpb24gSURzKWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcucmVtb3ZlKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25maWcucmVtb3ZlKSB8fCAhY29uZmlnLnJlbW92ZS5ldmVyeSgobik9PnR5cGVvZiBuID09PSAnc3RyaW5nJykpIHtcbiAgICAgICAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIGVycm9yUHJlZml4ICsgYC5yZW1vdmUnIGlzIGludmFsaWQuIE11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyAoZXh0ZW5zaW9uIElEcylgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uZmlnLm9yZGVyKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25maWcub3JkZXIpIHx8ICFjb25maWcub3JkZXIuZXZlcnkoKG4pPT50eXBlb2YgbiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgICAgICBsb2dFcnJvcihrZXlQYXRoLCBlcnJvclByZWZpeCArIGAub3JkZXInIGlzIGludmFsaWQuIE11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyAoZXh0ZW5zaW9uIElEcylgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uZmlnLmNvbmZpZ3VyZSkge1xuICAgICAgICBpZiAoIWlzT3JkaW5hcnlPYmplY3QoY29uZmlnLmNvbmZpZ3VyZSkpIHtcbiAgICAgICAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIGVycm9yUHJlZml4ICsgYC5jb25maWd1cmUnIGlzIGludmFsaWQuIE11c3QgYmUgYW4gb2JqZWN0IHdpdGggZXh0ZW5zaW9uIElEcyBmb3Iga2V5c2ApO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UHJvdmlkZWRDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAuLi5jb25maWdTdGF0ZS5wcm92aWRlZENvbmZpZ3MubWFwKChjKT0+Yy5jb25maWcpLFxuICAgICAgICB0ZW1wQ29uZmlnU3RhdGUuY29uZmlnXG4gICAgXTtcbn1cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBjb25maWcgc2NoZW1hIGZvciBhIG1vZHVsZS4gU2luY2UgcHJvYmxlbXMgaWRlbnRpZmllZCBoZXJlIGFyZSBwcm9ncmFtbWluZyBlcnJvcnNcbiAqIHRoYXQgaG9wZWZ1bGx5IHdpbGwgYmUgY2F1Z2h0IGR1cmluZyBkZXZlbG9wbWVudCwgdGhpcyBmdW5jdGlvbiBsb2dzIGVycm9ycyB0byB0aGUgY29uc29sZSBkaXJlY3RseTtcbiAqIGl0J3MgZmluZSBpZiB3ZSBzcGFtIHRoZSB1c2VyIHdpdGggdGhlc2UgZXJyb3JzLlxuICovIGZ1bmN0aW9uIHZhbGlkYXRlQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWUsIHNjaGVtYSwga2V5UGF0aCA9ICcnKSB7XG4gICAgY29uc3QgdXBkYXRlTWVzc2FnZSA9IGBQbGVhc2UgdmVyaWZ5IHRoYXQgeW91IGFyZSBydW5uaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBhbmQsIGlmIHNvLCBhbGVydCB0aGUgbWFpbnRhaW5lci5gO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNjaGVtYSkuZmlsdGVyKChrKT0+IWsuc3RhcnRzV2l0aCgnXycpKSl7XG4gICAgICAgIGNvbnN0IHRoaXNLZXlQYXRoID0ga2V5UGF0aCArIChrZXlQYXRoICYmICcuJykgKyBrZXk7XG4gICAgICAgIGNvbnN0IHNjaGVtYVBhcnQgPSBzY2hlbWFba2V5XTtcbiAgICAgICAgaWYgKHRoaXNLZXlQYXRoID09PSAnRGlzcGxheSBjb25kaXRpb25zJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHttb2R1bGVOYW1lfSBkZWNsYXJlcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbGxlZCBcIkRpc3BsYXkgY29uZGl0aW9uc1wiOyB0aGUgXCJEaXNwbGF5IGNvbmRpdGlvbnNcIiBvcHRpb24gaXMgYSByZXNlcnZlZCBuYW1lLiAke3VwZGF0ZU1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXNLZXlQYXRoID09PSAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHttb2R1bGVOYW1lfSBkZWNsYXJlcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbGxlZCBcIlRyYW5zbGF0aW9uIG92ZXJyaWRlc1wiOyB0aGUgXCJUcmFuc2xhdGlvbiBvdmVycmlkZXNcIiBvcHRpb24gaXMgYSByZXNlcnZlZCBuYW1lLiAke3VwZGF0ZU1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc09yZGluYXJ5T2JqZWN0KHNjaGVtYVBhcnQpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBiYWQgY29uZmlnIHNjaGVtYSBkZWZpbml0aW9uIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9Jy4gJHt1cGRhdGVNZXNzYWdlfWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzY2hlbWFQYXJ0Lmhhc093blByb3BlcnR5KCdfZGVmYXVsdCcpKSB7XG4gICAgICAgICAgICAvLyByZWN1cnNlIGZvciBuZXN0ZWQgY29uZmlnIGtleXNcbiAgICAgICAgICAgIHZhbGlkYXRlQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWUsIHNjaGVtYVBhcnQsIHRoaXNLZXlQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50cyA9IHNjaGVtYVBhcnQuX2VsZW1lbnRzO1xuICAgICAgICBpZiAoaGFzT2JqZWN0U2NoZW1hKGVsZW1lbnRzKSkge1xuICAgICAgICAgICAgdmFsaWRhdGVDb25maWdTY2hlbWEobW9kdWxlTmFtZSwgZWxlbWVudHMsIHRoaXNLZXlQYXRoICsgJy5fZWxlbWVudHMnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NoZW1hUGFydC5fdmFsaWRhdG9ycykge1xuICAgICAgICAgICAgZm9yIChsZXQgdmFsaWRhdG9yIG9mIHNjaGVtYVBhcnQuX3ZhbGlkYXRvcnMpe1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7bW9kdWxlTmFtZX0gaGFzIGludmFsaWQgdmFsaWRhdG9yIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9JyAke3VwZGF0ZU1lc3NhZ2V9LmAgKyBgXFxuXFxuSWYgeW91J3JlIHRoZSBtYWludGFpbmVyOiB2YWxpZGF0b3JzIG11c3QgYmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGVpdGhlciBgICsgYHVuZGVmaW5lZCBvciBhbiBlcnJvciBzdHJpbmcuIFJlY2VpdmVkICR7dmFsaWRhdG9yfS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gc2NoZW1hUGFydC5fdHlwZTtcbiAgICAgICAgaWYgKHZhbHVlVHlwZSAmJiAhT2JqZWN0LnZhbHVlcyhUeXBlKS5pbmNsdWRlcyh2YWx1ZVR5cGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBpbnZhbGlkIHR5cGUgZm9yIGtleSAnJHt0aGlzS2V5UGF0aH0nICR7dXBkYXRlTWVzc2FnZX0uYCArIGBcXG5cXG5JZiB5b3UncmUgdGhlIG1haW50YWluZXI6IHRoZSBhbGxvd2VkIHR5cGVzIGFyZSAke09iamVjdC52YWx1ZXMoVHlwZSkuam9pbignLCAnKX0uIGAgKyBgUmVjZWl2ZWQgJyR7dmFsdWVUeXBlfSdgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2NoZW1hUGFydCkuZXZlcnkoKGspPT5bXG4gICAgICAgICAgICAgICAgJ19kZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAgICAgJ192YWxpZGF0b3JzJyxcbiAgICAgICAgICAgICAgICAnX2VsZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAnX3R5cGUnXG4gICAgICAgICAgICBdLmluY2x1ZGVzKGspKSAmJiAha2V5UGF0aC5pbmNsdWRlcygnLl9lbGVtZW50cycpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBiYWQgY29uZmlnIHNjaGVtYSBkZWZpbml0aW9uIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9Jy4gJHt1cGRhdGVNZXNzYWdlfS5gICsgYFxcblxcbklmIHlvdSdyZSB0aGUgbWFpbnRhaW5lcjogYWxsIGNvbmZpZyBlbGVtZW50cyBtdXN0IGhhdmUgYSBkZWZhdWx0LiBgICsgYFJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkoc2NoZW1hUGFydCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIHZhbHVlVHlwZSAmJiAhW1xuICAgICAgICAgICAgVHlwZS5BcnJheSxcbiAgICAgICAgICAgIFR5cGUuT2JqZWN0XG4gICAgICAgIF0uaW5jbHVkZXModmFsdWVUeXBlKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHttb2R1bGVOYW1lfSBoYXMgYmFkIGNvbmZpZyBzY2hlbWEgZGVmaW5pdGlvbiBmb3Iga2V5ICcke3RoaXNLZXlQYXRofScuICR7dXBkYXRlTWVzc2FnZX0uYCArIGBcXG5cXG5JZiB5b3UncmUgdGhlIG1haW50YWluZXI6IHRoZSAnZWxlbWVudHMnIGtleSBvbmx5IHdvcmtzIHdpdGggJ190eXBlJyBlcXVhbCB0byAnQXJyYXknIG9yICdPYmplY3QnLiBgICsgYFJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkodmFsdWVUeXBlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGdldENvbmZpZ0Zvck1vZHVsZShtb2R1bGVOYW1lLCBjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gY29uZmlnU3RhdGUuc2NoZW1hc1ttb2R1bGVOYW1lXTtcbiAgICBjb25zdCBpbnB1dENvbmZpZyA9IG1lcmdlQ29uZmlnc0Zvcihtb2R1bGVOYW1lLCBnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSkpO1xuICAgIHZhbGlkYXRlU3RydWN0dXJlKHNjaGVtYSwgaW5wdXRDb25maWcsIG1vZHVsZU5hbWUpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKHNjaGVtYSwgaW5wdXRDb25maWcpO1xuICAgIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoc2NoZW1hLCBjb25maWcsIG1vZHVsZU5hbWUpO1xuICAgIGRlbGV0ZSBjb25maWcuZXh0ZW5zaW9uU2xvdHM7XG4gICAgcmV0dXJuIGNvbmZpZztcbn1cbmZ1bmN0aW9uIGdldENvbmZpZ0Zvck1vZHVsZUltcGxpY2l0U2NoZW1hKG1vZHVsZU5hbWUsIGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpIHtcbiAgICBjb25zdCBpbnB1dENvbmZpZyA9IG1lcmdlQ29uZmlnc0Zvcihtb2R1bGVOYW1lLCBnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSkpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKGltcGxpY2l0Q29uZmlnU2NoZW1hLCBpbnB1dENvbmZpZyk7XG4gICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShpbXBsaWNpdENvbmZpZ1NjaGVtYSwgY29uZmlnLCBtb2R1bGVOYW1lKTtcbiAgICBkZWxldGUgY29uZmlnLmV4dGVuc2lvblNsb3RzO1xuICAgIHJldHVybiBjb25maWc7XG59XG5mdW5jdGlvbiBtZXJnZUNvbmZpZ3NGb3IobW9kdWxlTmFtZSwgYWxsQ29uZmlncykge1xuICAgIGNvbnN0IGFsbENvbmZpZ3NGb3JNb2R1bGUgPSBhbGxDb25maWdzLm1hcCgoeyBbbW9kdWxlTmFtZV06IGMgfSk9PmMpLmZpbHRlcigoYyk9PiEhYyk7XG4gICAgcmV0dXJuIG1lcmdlQ29uZmlncyhhbGxDb25maWdzRm9yTW9kdWxlKTtcbn1cbmZ1bmN0aW9uIG1lcmdlQ29uZmlncyhjb25maWdzKSB7XG4gICAgY29uc3QgbWVyZ2VEZWVwQWxsID0gcmVkdWNlKG1lcmdlRGVlcFJpZ2h0KTtcbiAgICByZXR1cm4gbWVyZ2VEZWVwQWxsKHt9LCBjb25maWdzKTtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgY2hlY2sgdGhlIHByb3ZpZGVkIGNvbmZpZyB0cmVlIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbFxuICogb2YgdGhlIHByb3ZpZGVkIHByb3BlcnRpZXMgZXhpc3QgaW4gdGhlIHNjaGVtYSwgYW5kIHRoYXQgdHlwZXMgYXJlXG4gKiBjb3JyZWN0LiBEb2VzIG5vdCBydW4gdmFsaWRhdG9ycyB5ZXQsIHNpbmNlIHRob3NlIHdpbGwgYmUgcnVuIG9uXG4gKiB0aGUgY29uZmlnIHdpdGggdGhlIGRlZmF1bHRzIGZpbGxlZCBpbi5cbiAqLyBmdW5jdGlvbiB2YWxpZGF0ZVN0cnVjdHVyZShzY2hlbWEsIGNvbmZpZywga2V5UGF0aCA9ICcnKSB7XG4gICAgLy8gdmFsaWRhdGUgZWFjaCBjb25zdGl0dWVudCBlbGVtZW50XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnKSl7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICAgIGNvbnN0IHRoaXNLZXlQYXRoID0ga2V5UGF0aCArICcuJyArIGtleTtcbiAgICAgICAgY29uc3Qgc2NoZW1hUGFydCA9IHNjaGVtYVtrZXldO1xuICAgICAgICBpZiAoIXNjaGVtYS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBpZiAoIShrZXkgPT09ICdleHRlbnNpb25TbG90cycgJiYga2V5UGF0aCAhPT0gJycpKSB7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IodGhpc0tleVBhdGgsIGBVbmtub3duIGNvbmZpZyBrZXkgJyR7dGhpc0tleVBhdGh9JyBwcm92aWRlZC4gSWdub3JpbmcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZUJyYW5jaFN0cnVjdHVyZShzY2hlbWFQYXJ0LCB2YWx1ZSwgdGhpc0tleVBhdGgpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlQnJhbmNoU3RydWN0dXJlKHNjaGVtYVBhcnQsIHZhbHVlLCBrZXlQYXRoKSB7XG4gICAgY2hlY2tUeXBlKGtleVBhdGgsIHNjaGVtYVBhcnQuX3R5cGUsIHZhbHVlKTtcbiAgICBpZiAoaXNPcmRpbmFyeU9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKHNjaGVtYVBhcnQuX3R5cGUgPT09IFR5cGUuT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyB2YWxpZGF0ZSBhcyBmcmVlZm9ybSBvYmplY3RcbiAgICAgICAgICAgIHZhbGlkYXRlRnJlZWZvcm1PYmplY3RTdHJ1Y3R1cmUoc2NoZW1hUGFydCwgdmFsdWUsIGtleVBhdGgpO1xuICAgICAgICB9IGVsc2UgaWYgKCEoc2NoZW1hUGFydC5oYXNPd25Qcm9wZXJ0eSgnX2RlZmF1bHQnKSB8fCBzY2hlbWFQYXJ0Lmhhc093blByb3BlcnR5KCdfdHlwZScpKSkge1xuICAgICAgICAgICAgLy8gdmFsaWRhdGUgYXMgbm9ybWFsIG5lc3RlZCBjb25maWdcbiAgICAgICAgICAgIHZhbGlkYXRlU3RydWN0dXJlKHNjaGVtYVBhcnQsIHZhbHVlLCBrZXlQYXRoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzY2hlbWFQYXJ0Ll90eXBlID09PSBUeXBlLkFycmF5KSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUFycmF5U3RydWN0dXJlKHNjaGVtYVBhcnQsIHZhbHVlLCBrZXlQYXRoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlRnJlZWZvcm1PYmplY3RTdHJ1Y3R1cmUoZnJlZWZvcm1PYmplY3RTY2hlbWEsIGNvbmZpZywga2V5UGF0aCkge1xuICAgIGlmIChmcmVlZm9ybU9iamVjdFNjaGVtYS5fZWxlbWVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnKSl7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1trZXldO1xuICAgICAgICAgICAgdmFsaWRhdGVCcmFuY2hTdHJ1Y3R1cmUoZnJlZWZvcm1PYmplY3RTY2hlbWEuX2VsZW1lbnRzLCB2YWx1ZSwgYCR7a2V5UGF0aH0uJHtrZXl9YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5U3RydWN0dXJlKGFycmF5U2NoZW1hLCB2YWx1ZSwga2V5UGF0aCkge1xuICAgIGNvbnN0IHZhbGlkYXRlZEFzQXJyYXkgPSBjaGVja1R5cGUoa2V5UGF0aCwgVHlwZS5BcnJheSwgdmFsdWUpO1xuICAgIGlmICghdmFsaWRhdGVkQXNBcnJheSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIHRoZXJlIGlzIGFuIGFycmF5IGVsZW1lbnQgb2JqZWN0IHNjaGVtYSwgdmVyaWZ5IHRoYXQgZWxlbWVudHMgbWF0Y2ggaXRcbiAgICBpZiAoaGFzT2JqZWN0U2NoZW1hKGFycmF5U2NoZW1hLl9lbGVtZW50cykpIHtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgIHZhbGlkYXRlQnJhbmNoU3RydWN0dXJlKGFycmF5U2NoZW1hLl9lbGVtZW50cywgdmFsdWVbaV0sIGAke2tleVBhdGh9WyR7aX1dYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY2hlY2tUeXBlKGAke2tleVBhdGh9WyR7aX1dYCwgYXJyYXlTY2hlbWEuX2VsZW1lbnRzPy5fdHlwZSwgdmFsdWVbaV0pO1xuICAgIH1cbn1cbi8qKlxuICogUnVuIGFsbCB0aGUgdmFsaWRhdG9ycyBpbiB0aGUgY29uZmlnIHRyZWUuIFRoaXMgc2hvdWxkIGJlIHJ1blxuICogb24gdGhlIGNvbmZpZyBvYmplY3QgYWZ0ZXIgaXQgaGFzIGJlZW4gZmlsbGVkIGluIHdpdGggYWxsIHRoZSBkZWZhdWx0cywgc2luY2VcbiAqIGhpZ2hlci1sZXZlbCB2YWxpZGF0b3JzIG1heSByZWZlciB0byBkZWZhdWx0IHZhbHVlcy5cbiAqLyBmdW5jdGlvbiBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYSwgY29uZmlnLCBrZXlQYXRoID0gJycpIHtcbiAgICAvLyBJZiBgIXNjaGVtYWAsIHRoZXJlIHNob3VsZCBoYXZlIGJlZW4gYSBzdHJ1Y3R1cmFsIHZhbGlkYXRpb24gZXJyb3IgcHJpbnRlZCBhbHJlYWR5LlxuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPT0gc2NoZW1hLl9kZWZhdWx0KSB7XG4gICAgICAgICAgICBydW5WYWxpZGF0b3JzKGtleVBhdGgsIHNjaGVtYS5fdmFsaWRhdG9ycywgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPcmRpbmFyeU9iamVjdChjb25maWcpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcpKXtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1trZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNLZXlQYXRoID0ga2V5UGF0aCArICcuJyArIGtleTtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFQYXJ0ID0gc2NoZW1hW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5fdHlwZSA9PT0gVHlwZS5PYmplY3QgJiYgc2NoZW1hLl9lbGVtZW50cykge1xuICAgICAgICAgICAgICAgICAgICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYS5fZWxlbWVudHMsIHZhbHVlLCB0aGlzS2V5UGF0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWFQYXJ0LCB2YWx1ZSwgdGhpc0tleVBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZykgJiYgc2NoZW1hLl9lbGVtZW50cykge1xuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGNvbmZpZy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICAgICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWEuX2VsZW1lbnRzLCBjb25maWdbaV0sIGAke2tleVBhdGh9WyR7aX1dYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFJ1biB0eXBlIHZhbGlkYXRpb24gZm9yIHRoZSB2YWx1ZSwgbG9nZ2luZyBhbnkgZXJyb3JzLlxuICogQHJldHVybnMgdHJ1ZSBpZiB2YWxpZGF0aW9uIHBhc3NlcywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi8gZnVuY3Rpb24gY2hlY2tUeXBlKGtleVBhdGgsIF90eXBlLCB2YWx1ZSkge1xuICAgIGlmIChfdHlwZSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1mdW5jdGlvbi10eXBlXG4gICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IHtcbiAgICAgICAgICAgIEFycmF5OiBpc0FycmF5LFxuICAgICAgICAgICAgQm9vbGVhbjogaXNCb29sZWFuLFxuICAgICAgICAgICAgQ29uY2VwdFV1aWQ6IGlzVXVpZCxcbiAgICAgICAgICAgIE51bWJlcjogaXNOdW1iZXIsXG4gICAgICAgICAgICBPYmplY3Q6IGlzT2JqZWN0LFxuICAgICAgICAgICAgU3RyaW5nOiBpc1N0cmluZyxcbiAgICAgICAgICAgIFVVSUQ6IGlzVXVpZCxcbiAgICAgICAgICAgIFBlcnNvbkF0dHJpYnV0ZVR5cGVVdWlkOiBpc1V1aWQsXG4gICAgICAgICAgICBQYXRpZW50SWRlbnRpZmllclR5cGVVdWlkOiBpc1V1aWRcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJ1blZhbGlkYXRvcnMoa2V5UGF0aCwgW1xuICAgICAgICAgICAgdmFsaWRhdG9yW190eXBlXVxuICAgICAgICBdLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBSdW5zIHZhbGlkYXRvcnMsIGxvZ2dpbmcgZXJyb3JzLlxuICogQHJldHVybnMgdHJ1ZSBpZiBhbGwgcGFzcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICovIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWZ1bmN0aW9uLXR5cGVcbmZ1bmN0aW9uIHJ1blZhbGlkYXRvcnMoa2V5UGF0aCwgdmFsaWRhdG9ycywgdmFsdWUpIHtcbiAgICBsZXQgcmV0dXJuVmFsdWUgPSB0cnVlO1xuICAgIGlmICh2YWxpZGF0b3JzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKGxldCB2YWxpZGF0b3Igb2YgdmFsaWRhdG9ycyl7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yUmVzdWx0ID0gdmFsaWRhdG9yKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRvclJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyBgSW52YWxpZCBjb25maWd1cmF0aW9uIGZvciAke2tleVBhdGh9OiAke3ZhbGlkYXRvclJlc3VsdH1gIDogYEludmFsaWQgY29uZmlndXJhdGlvbiB2YWx1ZSAke3ZhbHVlfSBmb3IgJHtrZXlQYXRofTogJHt2YWxpZGF0b3JSZXN1bHR9YDtcbiAgICAgICAgICAgICAgICAgICAgbG9nRXJyb3Ioa2V5UGF0aCwgbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBTa2lwcGluZyBpbnZhbGlkIHZhbGlkYXRvciBhdCBcIiR7a2V5UGF0aH1cIi4gRW5jb3VudGVyZWQgZXJyb3JcXG5cXHQke2V9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuLy8gUmVjdXJzaXZlbHkgZmlsbCBpbiB0aGUgY29uZmlnIHdpdGggdmFsdWVzIGZyb20gdGhlIHNjaGVtYS5cbmNvbnN0IHNldERlZmF1bHRzID0gKHNjaGVtYSwgaW5wdXRDb25maWcpPT57XG4gICAgY29uc3QgY29uZmlnID0gY2xvbmUoaW5wdXRDb25maWcpO1xuICAgIGlmICghc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNjaGVtYSkpe1xuICAgICAgICBjb25zdCBjb25maWdQYXJ0ID0gY29uZmlnW2tleV07XG4gICAgICAgIGNvbnN0IHNjaGVtYVBhcnQgPSBzY2hlbWFba2V5XTtcbiAgICAgICAgLy8gVGhlIGBzY2hlbWFQYXJ0ICYmYCBjbGF1c2Ugb2YgdGhpcyBgaWZgIHN0YXRlbWVudCB3aWxsIG9ubHkgZmFpbFxuICAgICAgICAvLyBpZiB0aGUgc2NoZW1hIGlzIHZlcnkgaW52YWxpZC4gSXQgaXMgdGhlcmUgdG8gcHJldmVudCB0aGUgYXBwIGZyb21cbiAgICAgICAgLy8gY3Jhc2hpbmcgY29tcGxldGVseSwgdGhvdWdoIGl0IHdpbGwgcHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuICAgICAgICAvLyBJZiB0aGlzIGhhcHBlbnMsIHRoZXJlIHNob3VsZCBiZSBsZWdpYmxlIGVycm9ycyBpbiB0aGUgY29uc29sZSBmcm9tXG4gICAgICAgIC8vIHRoZSBzY2hlbWEgdmFsaWRhdG9yLlxuICAgICAgICBpZiAoc2NoZW1hUGFydCAmJiAoc2NoZW1hUGFydC5oYXNPd25Qcm9wZXJ0eSgnX3R5cGUnKSB8fCBzY2hlbWFQYXJ0Lmhhc093blByb3BlcnR5KCdfZGVmYXVsdCcpKSkge1xuICAgICAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgc2NoZW1hUGFydCBkZWZpbmVzIGEgY29uZmlnIHZhbHVlLCBzaW5jZSBpdCBoYXNcbiAgICAgICAgICAgIC8vIGEgcHJvcGVydHkgYF90eXBlYCBvciBgX2RlZmF1bHRgLlxuICAgICAgICAgICAgaWYgKCFjb25maWcuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbmZpZ1trZXldID0gc2NoZW1hUGFydFsnX2RlZmF1bHQnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdlIGFsc28gY2hlY2sgaWYgaXQgaXMgYW4gb2JqZWN0IG9yIGFycmF5IHdpdGggb2JqZWN0IGVsZW1lbnRzLCBpbiB3aGljaCBjYXNlIHdlIHJlY3Vyc2VcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gc2NoZW1hUGFydC5fZWxlbWVudHM7XG4gICAgICAgICAgICBpZiAoY29uZmlnUGFydCAmJiBoYXNPYmplY3RTY2hlbWEoZWxlbWVudHMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYVBhcnQuX3R5cGUgPT09IFR5cGUuQXJyYXkgJiYgQXJyYXkuaXNBcnJheShjb25maWdQYXJ0KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWdXaXRoRGVmYXVsdHMgPSBjb25maWdQYXJ0Lm1hcCgoY29uZik9PnNldERlZmF1bHRzKGVsZW1lbnRzLCBjb25mKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1trZXldID0gY29uZmlnV2l0aERlZmF1bHRzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hUGFydC5fdHlwZSA9PT0gVHlwZS5PYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgb2JqZWN0S2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZ1BhcnQpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1BhcnRbb2JqZWN0S2V5XSA9IHNldERlZmF1bHRzKGVsZW1lbnRzLCBjb25maWdQYXJ0W29iamVjdEtleV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzT3JkaW5hcnlPYmplY3Qoc2NoZW1hUGFydCkpIHtcbiAgICAgICAgICAgIC8vIFNpbmNlIHNjaGVtYVBhcnQgaGFzIG5vIHByb3BlcnR5IFwiX3R5cGVcIiwgaWYgaXQncyBhbiBvcmRpbmFyeSBvYmplY3RcbiAgICAgICAgICAgIC8vICh1bmxpa2UsIGltcG9ydGFudGx5LCB0aGUgdmFsaWRhdG9ycyBhcnJheSksIHdlIGFzc3VtZSBpdCBpcyBhIHBhcmVudCBjb25maWcgcHJvcGVydHkuXG4gICAgICAgICAgICAvLyBXZSByZWN1cnNlIHRvIGNvbmZpZ1trZXldIGFuZCBzY2hlbWFba2V5XS4gRGVmYXVsdCBjb25maWdba2V5XSB0byB7fS5cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ29uZmlnUGFydCA9IGNvbmZpZ1BhcnQgPz8ge307XG4gICAgICAgICAgICAvLyBUaGVyZSB3aWxsIGhhdmUgYmVlbiBhIHZhbGlkYXRpb24gZXJyb3IgYWxyZWFkeSBpZiBjb25maWdQYXJ0IGlzIG5vdCBhIHBsYWluIG9iamVjdC5cbiAgICAgICAgICAgIGlmIChpc09yZGluYXJ5T2JqZWN0KHNlbGVjdGVkQ29uZmlnUGFydCkpIHtcbiAgICAgICAgICAgICAgICBjb25maWdba2V5XSA9IHNldERlZmF1bHRzKHNjaGVtYVBhcnQsIHNlbGVjdGVkQ29uZmlnUGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbn07XG5mdW5jdGlvbiBoYXNPYmplY3RTY2hlbWEoZWxlbWVudHNTY2hlbWEpIHtcbiAgICByZXR1cm4gISFlbGVtZW50c1NjaGVtYSAmJiBPYmplY3Qua2V5cyhlbGVtZW50c1NjaGVtYSkuZmlsdGVyKChlKT0+IVtcbiAgICAgICAgICAgICdfZGVmYXVsdCcsXG4gICAgICAgICAgICAnX3ZhbGlkYXRvcnMnXG4gICAgICAgIF0uaW5jbHVkZXMoZSkpLmxlbmd0aCA+IDA7XG59XG5mdW5jdGlvbiBpc09yZGluYXJ5T2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gbG9nRXJyb3Ioa2V5UGF0aCwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGtleSA9IGAke2tleVBhdGh9Ojo6JHttZXNzYWdlfWA7XG4gICAgLy8gdGVjaG5pY2FsbHksIHRoaXMgc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSwgYnV0IGJlY2F1c2Ugb2YgaG93IHRoaW5ncyB3aW5kLXVwIHRyYW5zcGlsZWQsIHRoaXMgaXNuJ3QgaW1wb3NzaWJsZVxuICAgIGlmICghZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzKSB7XG4gICAgICAgIGRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcyA9IG5ldyBTZXQoKTtcbiAgICB9XG4gICAgaWYgKCFkaXNwbGF5ZWRWYWxpZGF0aW9uTWVzc2FnZXMuaGFzKGtleSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzLmFkZChrZXkpO1xuICAgIH1cbn1cbi8qKlxuICogTm9ybWFsbHksIGNvbmZpZ3VyYXRpb24gZXJyb3JzIGFyZSBvbmx5IGRpc3BsYXllZCBvbmNlLiBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgbGlzdCBvZlxuICogZGlzcGxheWVkIGVycm9ycywgc28gdGhhdCB0aGV5IHdpbGwgYmUgZGlzcGxheWVkIGFnYWluLlxuICpcbiAqIEBpbnRlcm5hbFxuICovIGV4cG9ydCBmdW5jdGlvbiBjbGVhckNvbmZpZ0Vycm9ycyhrZXlQYXRoKSB7XG4gICAgaWYgKGtleVBhdGgpIHtcbiAgICAgICAgZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChrZXlQYXRoKSkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzLmNsZWFyKCk7XG4gICAgfVxufVxuLyoqXG4gKiBDb3BpZWQgb3ZlciBmcm9tIGVzbS1leHRlbnNpb25zLiBJdCByaWdodGx5IGJlbG9uZ3MgdG8gdGhhdCBtb2R1bGUsIGJ1dCBlc20tY29uZmlnXG4gKiBjYW5ub3QgZGVwZW5kIG9uIGVzbS1leHRlbnNpb25zLlxuICovIGZ1bmN0aW9uIGdldEV4dGVuc2lvbk5hbWVGcm9tSWQoZXh0ZW5zaW9uSWQpIHtcbiAgICBjb25zdCBbZXh0ZW5zaW9uTmFtZV0gPSBleHRlbnNpb25JZC5zcGxpdCgnIycpO1xuICAgIHJldHVybiBleHRlbnNpb25OYW1lO1xufVxuLyoqXG4gKiBUaGUgdHJhbnNsYXRpb24gb3ZlcnJpZGVzIHNjaGVtYSBpcyB1c2VkIGluIHRoZSBpbXBsaWNpdCBzY2hlbWEgZ2l2ZW4gdG8gZXZlcnkgbW9kdWxlO1xuICogcGx1cyBhbnkgYWRkaXRpb25hbCB0cmFuc2xhdGlvbiBuYW1lc3BhY2VzIChhdCB0aW1lIG9mIHdyaXRpbmcsIHRoaXMgaXMganVzdCAnY29yZScpLlxuICovIGNvbnN0IHRyYW5zbGF0aW9uT3ZlcnJpZGVzU2NoZW1hID0ge1xuICAgICdUcmFuc2xhdGlvbiBvdmVycmlkZXMnOiB7XG4gICAgICAgIF9kZXNjcmlwdGlvbjogJ1Blci1sYW5ndWFnZSBvdmVycmlkZXMgZm9yIGZyb250ZW5kIHRyYW5zbGF0aW9ucyBzaG91bGQgYmUga2V5ZWQgYnkgbGFuZ3VhZ2UgY29kZSBhbmQgZWFjaCBsYW5ndWFnZSBkaWN0aW9uYXJ5IGNvbnRhaW5zIHRoZSB0cmFuc2xhdGlvbiBrZXkgYW5kIHRoZSBkaXNwbGF5IHZhbHVlJyxcbiAgICAgICAgX3R5cGU6IFR5cGUuT2JqZWN0LFxuICAgICAgICBfZGVmYXVsdDoge30sXG4gICAgICAgIF92YWxpZGF0b3JzOiBbXG4gICAgICAgICAgICB2YWxpZGF0b3IoKG8pPT5PYmplY3Qua2V5cyhvKS5ldmVyeSgoayk9Pi9eW2Etel17MiwzfSgtW0EtWl17MiwzfSk/JC8udGVzdChrKSksIChvKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhZEtleXMgPSBPYmplY3Qua2V5cyhvKS5maWx0ZXIoKGspPT4hL15bYS16XXsyLDN9KC1bQS1aXXsyLDN9KT8kLy50ZXN0KGspKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFRoZSAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJyBvYmplY3Qgc2hvdWxkIGhhdmUgbGFuZ3VhZ2UgY29kZXMgZm9yIGtleXMuIExhbmd1YWdlIGNvZGVzIG11c3QgYmUgaW4gdGhlIGZvcm0gb2YgYSB0d28tdG8tdGhyZWUgbGV0dGVyIGxhbmd1YWdlIGNvZGUgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIGh5cGhlbiBhbmQgYSB0d28tdG8tdGhyZWUgbGV0dGVyIGNvdW50cnkgY29kZS4gVGhlIGZvbGxvd2luZyBrZXlzIGRvIG5vdCBjb25mb3JtOiAke2JhZEtleXMuam9pbignLCAnKX0uYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICB9XG59O1xuLyoqXG4gKiBUaGUgaW1wbGljaXRDb25maWdTY2hlbWEgaXMgaW1wbGljaXRseSBpbmNsdWRlZCBpbiBldmVyeSBjb25maWd1cmF0aW9uIHNjaGVtYVxuICovIGNvbnN0IGltcGxpY2l0Q29uZmlnU2NoZW1hID0ge1xuICAgICdEaXNwbGF5IGNvbmRpdGlvbnMnOiB7XG4gICAgICAgIHByaXZpbGVnZXM6IHtcbiAgICAgICAgICAgIF9kZXNjcmlwdGlvbjogJ1RoZSBwcml2aWxlZ2UocykgdGhlIHVzZXIgbXVzdCBoYXZlIHRvIHVzZSB0aGlzIGV4dGVuc2lvbicsXG4gICAgICAgICAgICBfdHlwZTogVHlwZS5BcnJheSxcbiAgICAgICAgICAgIF9kZWZhdWx0OiBbXVxuICAgICAgICB9XG4gICAgfSxcbiAgICAuLi50cmFuc2xhdGlvbk92ZXJyaWRlc1NjaGVtYVxufTtcbiJdLCJuYW1lcyI6WyJjbG9uZSIsInJlZHVjZSIsIm1lcmdlRGVlcFJpZ2h0IiwiZXF1YWxzIiwib21pdCIsIlR5cGUiLCJpc0FycmF5IiwiaXNCb29sZWFuIiwiaXNVdWlkIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzU3RyaW5nIiwidmFsaWRhdG9yIiwiY29uZmlnSW50ZXJuYWxTdG9yZSIsImNvbmZpZ0V4dGVuc2lvblN0b3JlIiwiZ2V0Q29uZmlnU3RvcmUiLCJnZXRFeHRlbnNpb25Db25maWciLCJnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUiLCJpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUiLCJ0ZW1wb3JhcnlDb25maWdTdG9yZSIsImdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUiLCJjb21wdXRlTW9kdWxlQ29uZmlnIiwiZ2V0U3RhdGUiLCJzdWJzY3JpYmUiLCJjb25maWdTdGF0ZSIsInRlbXBDb25maWdTdGF0ZSIsImNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnIiwiY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzIiwiY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MiLCJleHRlbnNpb25TdGF0ZSIsImRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcyIsIlNldCIsInN0YXRlIiwidGVtcFN0YXRlIiwibW9kdWxlTmFtZSIsIk9iamVjdCIsImtleXMiLCJzY2hlbWFzIiwibW9kdWxlU3RvcmUiLCJtb2R1bGVMb2FkZWQiLCJjb25maWciLCJnZXRDb25maWdGb3JNb2R1bGUiLCJzZXRTdGF0ZSIsInRyYW5zbGF0aW9uT3ZlcnJpZGVzTG9hZGVkIiwibG9hZGVkIiwiZ2V0Q29uZmlnRm9yTW9kdWxlSW1wbGljaXRTY2hlbWEiLCJzbG90Q29uZmlncyIsImdldEV4dGVuc2lvblNsb3RDb25maWdzIiwibmV3U2xvdFN0b3JlRW50cmllcyIsImZyb21FbnRyaWVzIiwiZW50cmllcyIsIm1hcCIsInNsb3ROYW1lIiwic2xvdFN0b3JlIiwib2xkU3RhdGUiLCJuZXdTdGF0ZSIsInNsb3RzIiwiZ2V0SW1wbGVtZW50ZXJUb29sc0NvbmZpZyIsImNvbmZpZ3MiLCJleHRlbnNpb24iLCJtb3VudGVkRXh0ZW5zaW9ucyIsImNvbXB1dGVFeHRlbnNpb25Db25maWciLCJzbG90TW9kdWxlTmFtZSIsImV4dGVuc2lvbk1vZHVsZU5hbWUiLCJleHRlbnNpb25JZCIsImRlZmluZUNvbmZpZ1NjaGVtYSIsInNjaGVtYSIsInZhbGlkYXRlQ29uZmlnU2NoZW1hIiwiZW5oYW5jZWRTY2hlbWEiLCJpbXBsaWNpdENvbmZpZ1NjaGVtYSIsInJlZ2lzdGVyTW9kdWxlV2l0aENvbmZpZ1N5c3RlbSIsInJlZ2lzdGVyTW9kdWxlTG9hZCIsInJlZ2lzdGVyVHJhbnNsYXRpb25OYW1lc3BhY2UiLCJuYW1lc3BhY2UiLCJ0cmFuc2xhdGlvbk92ZXJyaWRlc1NjaGVtYSIsImRlZmluZUV4dGVuc2lvbkNvbmZpZ1NjaGVtYSIsImV4dGVuc2lvbk5hbWUiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm92aWRlIiwic291cmNlTmFtZSIsInByb3ZpZGVkQ29uZmlncyIsInNvdXJjZSIsImdldENvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlIiwic3RvcmUiLCJ1cGRhdGUiLCJ1bnN1YnNjcmliZSIsImdldFRyYW5zbGF0aW9uT3ZlcnJpZGVzIiwicHJvbWlzZXMiLCJjb25maWdTdG9yZSIsInRyYW5zbGF0aW9uT3ZlcnJpZGVzIiwicHVzaCIsImFsbCIsInByb2Nlc3NDb25maWciLCJwcm92aWRlZENvbmZpZyIsImtleVBhdGhDb250ZXh0IiwidmFsaWRhdGVTdHJ1Y3R1cmUiLCJzZXREZWZhdWx0cyIsInJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUiLCJnZXRFeHRlbnNpb25OYW1lRnJvbUlkIiwiZXh0ZW5zaW9uQ29uZmlnU2NoZW1hIiwibmFtZU9mU2NoZW1hU291cmNlIiwiZ2V0UHJvdmlkZWRDb25maWdzIiwic2xvdE1vZHVsZUNvbmZpZyIsIm1lcmdlQ29uZmlnc0ZvciIsImNvbmZpZ092ZXJyaWRlIiwiZXh0ZW5zaW9uU2xvdHMiLCJjb25maWd1cmUiLCJleHRlbnNpb25Db25maWciLCJjb21iaW5lZENvbmZpZyIsIm1lcmdlQ29uZmlncyIsInJlc3VsdCIsImdldFNjaGVtYVdpdGhWYWx1ZXNBbmRTb3VyY2VzIiwiY29uZmlnc0FuZFNvdXJjZXMiLCJjIiwiY3JlYXRlVmFsdWVzQW5kU291cmNlc1RyZWUiLCJoYXNPd25Qcm9wZXJ0eSIsIl92YWx1ZSIsIl9kZWZhdWx0IiwiX3NvdXJjZSIsImlzT3JkaW5hcnlPYmplY3QiLCJvYmoiLCJrZXkiLCJhbGxDb25maWdzIiwic2xvdENvbmZpZ1Blck1vZHVsZSIsInZhbGlkYXRlQWxsRXh0ZW5zaW9uU2xvdENvbmZpZ3MiLCJjb25maWdCeVNsb3ROYW1lIiwidmFsaWRhdGVFeHRlbnNpb25TbG90Q29uZmlnIiwia2V5UGF0aCIsImVycm9yUHJlZml4IiwiaW52YWxpZEtleXMiLCJmaWx0ZXIiLCJrIiwiaW5jbHVkZXMiLCJsZW5ndGgiLCJsb2dFcnJvciIsImpvaW4iLCJhZGQiLCJBcnJheSIsImV2ZXJ5IiwibiIsInJlbW92ZSIsIm9yZGVyIiwidXBkYXRlTWVzc2FnZSIsInN0YXJ0c1dpdGgiLCJ0aGlzS2V5UGF0aCIsInNjaGVtYVBhcnQiLCJlbGVtZW50cyIsIl9lbGVtZW50cyIsImhhc09iamVjdFNjaGVtYSIsIl92YWxpZGF0b3JzIiwidmFsdWVUeXBlIiwiX3R5cGUiLCJ2YWx1ZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiaW5wdXRDb25maWciLCJhbGxDb25maWdzRm9yTW9kdWxlIiwibWVyZ2VEZWVwQWxsIiwidmFsdWUiLCJ2YWxpZGF0ZUJyYW5jaFN0cnVjdHVyZSIsImNoZWNrVHlwZSIsInZhbGlkYXRlRnJlZWZvcm1PYmplY3RTdHJ1Y3R1cmUiLCJ2YWxpZGF0ZUFycmF5U3RydWN0dXJlIiwiZnJlZWZvcm1PYmplY3RTY2hlbWEiLCJhcnJheVNjaGVtYSIsInZhbGlkYXRlZEFzQXJyYXkiLCJpIiwicnVuVmFsaWRhdG9ycyIsIkJvb2xlYW4iLCJDb25jZXB0VXVpZCIsIk51bWJlciIsIlN0cmluZyIsIlVVSUQiLCJQZXJzb25BdHRyaWJ1dGVUeXBlVXVpZCIsIlBhdGllbnRJZGVudGlmaWVyVHlwZVV1aWQiLCJ2YWxpZGF0b3JzIiwicmV0dXJuVmFsdWUiLCJ2YWxpZGF0b3JSZXN1bHQiLCJtZXNzYWdlIiwiZSIsImNvbmZpZ1BhcnQiLCJjb25maWdXaXRoRGVmYXVsdHMiLCJjb25mIiwib2JqZWN0S2V5Iiwic2VsZWN0ZWRDb25maWdQYXJ0IiwiZWxlbWVudHNTY2hlbWEiLCJoYXMiLCJjbGVhckNvbmZpZ0Vycm9ycyIsImZvckVhY2giLCJkZWxldGUiLCJjbGVhciIsInNwbGl0IiwiX2Rlc2NyaXB0aW9uIiwibyIsInRlc3QiLCJiYWRLZXlzIiwicHJpdmlsZWdlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/module-config/module-config.js\n");
|
|
29
|
+
|
|
30
|
+
/***/ }),
|
|
31
|
+
|
|
32
|
+
/***/ "../../framework/esm-config/dist/module-config/state.js":
|
|
33
|
+
/*!**************************************************************!*\
|
|
34
|
+
!*** ../../framework/esm-config/dist/module-config/state.js ***!
|
|
35
|
+
\**************************************************************/
|
|
36
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
37
|
+
|
|
38
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ configExtensionStore: () => (/* binding */ configExtensionStore),\n/* harmony export */ configInternalStore: () => (/* binding */ configInternalStore),\n/* harmony export */ getConfigStore: () => (/* binding */ getConfigStore),\n/* harmony export */ getExtensionConfig: () => (/* binding */ getExtensionConfig),\n/* harmony export */ getExtensionConfigFromStore: () => (/* binding */ getExtensionConfigFromStore),\n/* harmony export */ getExtensionSlotConfig: () => (/* binding */ getExtensionSlotConfig),\n/* harmony export */ getExtensionSlotConfigFromStore: () => (/* binding */ getExtensionSlotConfigFromStore),\n/* harmony export */ getExtensionSlotsConfigStore: () => (/* binding */ getExtensionSlotsConfigStore),\n/* harmony export */ getExtensionsConfigStore: () => (/* binding */ getExtensionsConfigStore),\n/* harmony export */ implementerToolsConfigStore: () => (/* binding */ implementerToolsConfigStore),\n/* harmony export */ temporaryConfigStore: () => (/* binding */ temporaryConfigStore)\n/* harmony export */ });\n/* harmony import */ var _openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @openmrs/esm-state */ \"../../framework/esm-state/dist/index.js\");\n/* harmony import */ var _openmrs_esm_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @openmrs/esm-utils */ \"../../framework/esm-utils/dist/shallowEqual.js\");\n/** @module @category Config */ \n\nconst configInternalStoreInitialValue = {\n providedConfigs: [],\n schemas: {},\n moduleLoaded: {}\n};\n/**\n * @internal\n */ const configInternalStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)('config-internal', configInternalStoreInitialValue);\n/** @internal */ const temporaryConfigStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)('temporary-config', {\n config: getTemporaryConfig()\n});\ntemporaryConfigStore.subscribe((state)=>{\n setTemporaryConfig(state.config);\n});\nfunction setTemporaryConfig(value) {\n localStorage.setItem('openmrs:temporaryConfig', JSON.stringify(value));\n}\nfunction getTemporaryConfig() {\n try {\n return JSON.parse(localStorage.getItem('openmrs:temporaryConfig') || '{}');\n } catch (e) {\n return {};\n }\n}\n/** @internal */ const configExtensionStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)('config-store-of-extension-state', {\n mountedExtensions: []\n});\nfunction initializeConfigStore() {\n return {\n config: null,\n loaded: false,\n translationOverridesLoaded: false\n };\n}\n/** @internal */ function getConfigStore(moduleName) {\n // We use a store for each module's config, named `config-${moduleName}`\n return (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.getGlobalStore)(`config-module-${moduleName}`, initializeConfigStore());\n}\n/** @internal */ function getExtensionSlotsConfigStore() {\n return (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.getGlobalStore)(`config-extension-slots`, {\n slots: {}\n });\n}\n/** @internal */ function getExtensionSlotConfig(slotName) {\n return getExtensionSlotConfigFromStore(getExtensionSlotsConfigStore().getState(), slotName);\n}\n/** @internal */ function getExtensionSlotConfigFromStore(state, slotName) {\n const slotConfig = state.slots[slotName];\n return slotConfig ?? {\n loaded: false,\n config: {}\n };\n}\n/**\n * One store for all the extensions\n * @internal\n */ function getExtensionsConfigStore() {\n return (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.getGlobalStore)(`config-extensions`, {\n configs: {}\n });\n}\n/** @internal */ function getExtensionConfig(slotName, extensionId) {\n if (typeof slotName !== 'string' || typeof extensionId !== 'string' || slotName === '__proto__' || extensionId === '__proto__' || slotName === 'constructor' || extensionId === 'constructor' || slotName === 'prototype' || extensionId === 'prototype') {\n throw new Error('Attempted to call `getExtensionConfig()` with invalid argument');\n }\n const extensionConfigStore = getExtensionsConfigStore();\n const selector = (configStore)=>configStore.configs[slotName]?.[extensionId];\n return {\n getInitialState () {\n return selector(extensionConfigStore.getInitialState());\n },\n getState () {\n return selector(extensionConfigStore.getState()) ?? {\n loaded: false,\n config: null\n };\n },\n setState (partial, replace = false) {\n extensionConfigStore.setState((state)=>{\n if (!state.configs[slotName]) {\n state.configs[slotName] = {};\n }\n const newState = typeof partial === 'function' ? partial(state.configs.slotName[extensionId]) : partial;\n if (replace) {\n state.configs[slotName][extensionId] = Object.assign({}, newState);\n } else {\n state.configs[slotName][extensionId] = Object.assign({}, state.configs[slotName][extensionId], newState);\n }\n return state;\n });\n },\n subscribe (listener) {\n return extensionConfigStore.subscribe((state, prevState)=>{\n const newState = selector(state);\n const oldState = selector(prevState);\n if (!(0,_openmrs_esm_utils__WEBPACK_IMPORTED_MODULE_1__.shallowEqual)(newState, oldState)) {\n listener(newState, oldState);\n }\n });\n },\n destroy () {\n /* this is a no-op */ }\n };\n}\n/** @internal */ function getExtensionConfigFromStore(state, slotName, extensionId) {\n const extensionConfig = state.configs[slotName]?.[extensionId];\n return extensionConfig ?? {\n loaded: false,\n config: null\n };\n}\n/** @internal */ const implementerToolsConfigStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)('config-implementer-tools', {\n config: {}\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC9tb2R1bGUtY29uZmlnL3N0YXRlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2QkFBNkIsR0FBMEU7QUFDckQ7QUFDbEQsTUFBTUcsa0NBQWtDO0lBQ3BDQyxpQkFBaUIsRUFBRTtJQUNuQkMsU0FBUyxDQUFDO0lBQ1ZDLGNBQWMsQ0FBQztBQUNuQjtBQUNBOztDQUVDLEdBQVUsTUFBTUMsc0JBQXNCUCxxRUFBaUJBLENBQUMsbUJBQW1CRyxpQ0FBaUM7QUFDN0csY0FBYyxHQUFVLE1BQU1LLHVCQUF1QlIscUVBQWlCQSxDQUFDLG9CQUFvQjtJQUN2RlMsUUFBUUM7QUFDWixHQUFHO0FBQ0hGLHFCQUFxQkcsU0FBUyxDQUFDLENBQUNDO0lBQzVCQyxtQkFBbUJELE1BQU1ILE1BQU07QUFDbkM7QUFDQSxTQUFTSSxtQkFBbUJDLEtBQUs7SUFDN0JDLGFBQWFDLE9BQU8sQ0FBQywyQkFBMkJDLEtBQUtDLFNBQVMsQ0FBQ0o7QUFDbkU7QUFDQSxTQUFTSjtJQUNMLElBQUk7UUFDQSxPQUFPTyxLQUFLRSxLQUFLLENBQUNKLGFBQWFLLE9BQU8sQ0FBQyw4QkFBOEI7SUFDekUsRUFBRSxPQUFPQyxHQUFHO1FBQ1IsT0FBTyxDQUFDO0lBQ1o7QUFDSjtBQUNBLGNBQWMsR0FBVSxNQUFNQyx1QkFBdUJ0QixxRUFBaUJBLENBQUMsbUNBQW1DO0lBQ3RHdUIsbUJBQW1CLEVBQUU7QUFDekIsR0FBRztBQUNILFNBQVNDO0lBQ0wsT0FBTztRQUNIZixRQUFRO1FBQ1JnQixRQUFRO1FBQ1JDLDRCQUE0QjtJQUNoQztBQUNKO0FBQ0EsY0FBYyxHQUFVLFNBQVNDLGVBQWVDLFVBQVU7SUFDdEQsd0VBQXdFO0lBQ3hFLE9BQU8zQixrRUFBY0EsQ0FBQyxDQUFDLGNBQWMsRUFBRTJCLFlBQVksRUFBRUo7QUFDekQ7QUFDQSxjQUFjLEdBQVUsU0FBU0s7SUFDN0IsT0FBTzVCLGtFQUFjQSxDQUFDLENBQUMs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Ly4uL2ZyYW1ld29yay9lc20tY29uZmlnL2Rpc3QvbW9kdWxlLWNvbmZpZy9zdGF0ZS5qcz9lOTAwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbW9kdWxlIEBjYXRlZ29yeSBDb25maWcgKi8gaW1wb3J0IHsgY3JlYXRlR2xvYmFsU3RvcmUsIGdldEdsb2JhbFN0b3JlIH0gZnJvbSBcIkBvcGVubXJzL2VzbS1zdGF0ZVwiO1xuaW1wb3J0IHsgc2hhbGxvd0VxdWFsIH0gZnJvbSBcIkBvcGVubXJzL2VzbS11dGlsc1wiO1xuY29uc3QgY29uZmlnSW50ZXJuYWxTdG9yZUluaXRpYWxWYWx1ZSA9IHtcbiAgICBwcm92aWRlZENvbmZpZ3M6IFtdLFxuICAgIHNjaGVtYXM6IHt9LFxuICAgIG1vZHVsZUxvYWRlZDoge31cbn07XG4vKipcbiAqIEBpbnRlcm5hbFxuICovIGV4cG9ydCBjb25zdCBjb25maWdJbnRlcm5hbFN0b3JlID0gY3JlYXRlR2xvYmFsU3RvcmUoJ2NvbmZpZy1pbnRlcm5hbCcsIGNvbmZpZ0ludGVybmFsU3RvcmVJbml0aWFsVmFsdWUpO1xuLyoqIEBpbnRlcm5hbCAqLyBleHBvcnQgY29uc3QgdGVtcG9yYXJ5Q29uZmlnU3RvcmUgPSBjcmVhdGVHbG9iYWxTdG9yZSgndGVtcG9yYXJ5LWNvbmZpZycsIHtcbiAgICBjb25maWc6IGdldFRlbXBvcmFyeUNvbmZpZygpXG59KTtcbnRlbXBvcmFyeUNvbmZpZ1N0b3JlLnN1YnNjcmliZSgoc3RhdGUpPT57XG4gICAgc2V0VGVtcG9yYXJ5Q29uZmlnKHN0YXRlLmNvbmZpZyk7XG59KTtcbmZ1bmN0aW9uIHNldFRlbXBvcmFyeUNvbmZpZyh2YWx1ZSkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdvcGVubXJzOnRlbXBvcmFyeUNvbmZpZycsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG59XG5mdW5jdGlvbiBnZXRUZW1wb3JhcnlDb25maWcoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ29wZW5tcnM6dGVtcG9yYXJ5Q29uZmlnJykgfHwgJ3t9Jyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxufVxuLyoqIEBpbnRlcm5hbCAqLyBleHBvcnQgY29uc3QgY29uZmlnRXh0ZW5zaW9uU3RvcmUgPSBjcmVhdGVHbG9iYWxTdG9yZSgnY29uZmlnLXN0b3JlLW9mLWV4dGVuc2lvbi1zdGF0ZScsIHtcbiAgICBtb3VudGVkRXh0ZW5zaW9uczogW11cbn0pO1xuZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbmZpZ1N0b3JlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNvbmZpZzogbnVsbCxcbiAgICAgICAgbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgdHJhbnNsYXRpb25PdmVycmlkZXNMb2FkZWQ6IGZhbHNlXG4gICAgfTtcbn1cbi8qKiBAaW50ZXJuYWwgKi8gZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ1N0b3JlKG1vZHVsZU5hbWUpIHtcbiAgICAvLyBXZSB1c2UgYSBzdG9yZSBmb3IgZWFjaCBtb2R1bGUncyBjb25maWcsIG5hbWVkIGBjb25maWctJHttb2R1bGVOYW1lfWBcbiAgICByZXR1cm4gZ2V0R2xvYmFsU3RvcmUoYGNvbmZpZy1tb2R1bGUtJHttb2R1bGVOYW1lfWAsIGluaXRpYWxpemVDb25maWdTdG9yZSgpKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi8gZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUoKSB7XG4gICAgcmV0dXJuIGdldEdsb2JhbFN0b3JlKGBjb25maWctZXh0ZW5zaW9uLXNsb3RzYCwge1xuICAgICAgICBzbG90czoge31cbiAgICB9KTtcbn1cbi8qKiBAaW50ZXJuYWwgKi8gZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuc2lvblNsb3RDb25maWcoc2xvdE5hbWUpIHtcbiAgICByZXR1cm4gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ0Zyb21TdG9yZShnZXRFeHRlbnNpb25TbG90c0NvbmZpZ1N0b3JlKCkuZ2V0U3RhdGUoKSwgc2xvdE5hbWUpO1xufVxuLyoqIEBpbnRlcm5hbCAqLyBleHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ0Zyb21TdG9yZShzdGF0ZSwgc2xvdE5hbWUpIHtcbiAgICBjb25zdCBzbG90Q29uZmlnID0gc3RhdGUuc2xvdHNbc2xvdE5hbWVdO1xuICAgIHJldHVybiBzbG90Q29uZmlnID8/IHtcbiAgICAgICAgbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgY29uZmlnOiB7fVxuICAgIH07XG59XG4vKipcbiAqIE9uZSBzdG9yZSBmb3IgYWxsIHRoZSBleHRlbnNpb25zXG4gKiBAaW50ZXJuYWxcbiAqLyBleHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlKCkge1xuICAgIHJldHVybiBnZXRHbG9iYWxTdG9yZShgY29uZmlnLWV4dGVuc2lvbnNgLCB7XG4gICAgICAgIGNvbmZpZ3M6IHt9XG4gICAgfSk7XG59XG4vKiogQGludGVybmFsICovIGV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25Db25maWcoc2xvdE5hbWUsIGV4dGVuc2lvbklkKSB7XG4gICAgaWYgKHR5cGVvZiBzbG90TmFtZSAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIGV4dGVuc2lvbklkICE9PSAnc3RyaW5nJyB8fCBzbG90TmFtZSA9PT0gJ19fcHJvdG9fXycgfHwgZXh0ZW5zaW9uSWQgPT09ICdfX3Byb3RvX18nIHx8IHNsb3ROYW1lID09PSAnY29uc3RydWN0b3InIHx8IGV4dGVuc2lvbklkID09PSAnY29uc3RydWN0b3InIHx8IHNsb3ROYW1lID09PSAncHJvdG90eXBlJyB8fCBleHRlbnNpb25JZCA9PT0gJ3Byb3RvdHlwZScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gY2FsbCBgZ2V0RXh0ZW5zaW9uQ29uZmlnKClgIHdpdGggaW52YWxpZCBhcmd1bWVudCcpO1xuICAgIH1cbiAgICBjb25zdCBleHRlbnNpb25Db25maWdTdG9yZSA9IGdldEV4dGVuc2lvbnNDb25maWdTdG9yZSgpO1xuICAgIGNvbnN0IHNlbGVjdG9yID0gKGNvbmZpZ1N0b3JlKT0+Y29uZmlnU3RvcmUuY29uZmlnc1tzbG90TmFtZV0/LltleHRlbnNpb25JZF07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0SW5pdGlhbFN0YXRlICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RvcihleHRlbnNpb25Db25maWdTdG9yZS5nZXRJbml0aWFsU3RhdGUoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFN0YXRlICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RvcihleHRlbnNpb25Db25maWdTdG9yZS5nZXRTdGF0ZSgpKSA/PyB7XG4gICAgICAgICAgICAgICAgbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb25maWc6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIHNldFN0YXRlIChwYXJ0aWFsLCByZXBsYWNlID0gZmFsc2UpIHtcbiAgICAgICAgICAgIGV4dGVuc2lvbkNvbmZpZ1N0b3JlLnNldFN0YXRlKChzdGF0ZSk9PntcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLmNvbmZpZ3Nbc2xvdE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvbmZpZ3Nbc2xvdE5hbWVdID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0gdHlwZW9mIHBhcnRpYWwgPT09ICdmdW5jdGlvbicgPyBwYXJ0aWFsKHN0YXRlLmNvbmZpZ3Muc2xvdE5hbWVbZXh0ZW5zaW9uSWRdKSA6IHBhcnRpYWw7XG4gICAgICAgICAgICAgICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29uZmlnc1tzbG90TmFtZV1bZXh0ZW5zaW9uSWRdID0gT2JqZWN0LmFzc2lnbih7fSwgbmV3U3RhdGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvbmZpZ3Nbc2xvdE5hbWVdW2V4dGVuc2lvbklkXSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmNvbmZpZ3Nbc2xvdE5hbWVdW2V4dGVuc2lvbklkXSwgbmV3U3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc3Vic2NyaWJlIChsaXN0ZW5lcikge1xuICAgICAgICAgICAgcmV0dXJuIGV4dGVuc2lvbkNvbmZpZ1N0b3JlLnN1YnNjcmliZSgoc3RhdGUsIHByZXZTdGF0ZSk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHNlbGVjdG9yKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRTdGF0ZSA9IHNlbGVjdG9yKHByZXZTdGF0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzaGFsbG93RXF1YWwobmV3U3RhdGUsIG9sZFN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcihuZXdTdGF0ZSwgb2xkU3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBkZXN0cm95ICgpIHtcbiAgICAgICAgLyogdGhpcyBpcyBhIG5vLW9wICovIH1cbiAgICB9O1xufVxuLyoqIEBpbnRlcm5hbCAqLyBleHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQ29uZmlnRnJvbVN0b3JlKHN0YXRlLCBzbG90TmFtZSwgZXh0ZW5zaW9uSWQpIHtcbiAgICBjb25zdCBleHRlbnNpb25Db25maWcgPSBzdGF0ZS5jb25maWdzW3Nsb3ROYW1lXT8uW2V4dGVuc2lvbklkXTtcbiAgICByZXR1cm4gZXh0ZW5zaW9uQ29uZmlnID8/IHtcbiAgICAgICAgbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgY29uZmlnOiBudWxsXG4gICAgfTtcbn1cbi8qKiBAaW50ZXJuYWwgKi8gZXhwb3J0IGNvbnN0IGltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZSA9IGNyZWF0ZUdsb2JhbFN0b3JlKCdjb25maWctaW1wbGVtZW50ZXItdG9vbHMnLCB7XG4gICAgY29uZmlnOiB7fVxufSk7XG4iXSwibmFtZXMiOlsiY3JlYXRlR2xvYmFsU3RvcmUiLCJnZXRHbG9iYWxTdG9yZSIsInNoYWxsb3dFcXVhbCIsImNvbmZpZ0ludGVybmFsU3RvcmVJbml0aWFsVmFsdWUiLCJwcm92aWRlZENvbmZpZ3MiLCJzY2hlbWFzIiwibW9kdWxlTG9hZGVkIiwiY29uZmlnSW50ZXJuYWxTdG9yZSIsInRlbXBvcmFyeUNvbmZpZ1N0b3JlIiwiY29uZmlnIiwiZ2V0VGVtcG9yYXJ5Q29uZmlnIiwic3Vic2NyaWJlIiwic3RhdGUiLCJzZXRUZW1wb3JhcnlDb25maWciLCJ2YWx1ZSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwicGFyc2UiLCJnZXRJdGVtIiwiZSIsImNvbmZpZ0V4dGVuc2lvblN0b3JlIiwibW91bnRlZEV4dGVuc2lvbnMiLCJpbml0aWFsaXplQ29uZmlnU3RvcmUiLCJsb2FkZWQiLCJ0cmFuc2xhdGlvbk92ZXJyaWRlc0xvYWRlZCIsImdldENvbmZpZ1N0b3JlIiwibW9kdWxlTmFtZSIsImdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUiLCJzbG90cyIsImdldEV4dGVuc2lvblNsb3RDb25maWciLCJzbG90TmFtZSIsImdldEV4dGVuc2lvblNsb3RDb25maWdGcm9tU3RvcmUiLCJnZXRTdGF0ZSIsInNsb3RDb25maWciLCJnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUiLCJjb25maWdzIiwiZ2V0RXh0ZW5zaW9uQ29uZmlnIiwiZXh0ZW5zaW9uSWQiLCJFcnJvciIsImV4dGVuc2lvbkNvbmZpZ1N0b3JlIiwic2VsZWN0b3IiLCJjb25maWdTdG9yZSIsImdldEluaXRpYWxTdGF0ZSIsInNldFN0YXRlIiwicGFydGlhbCIsInJlcGxhY2UiLCJuZXdTdGF0ZSIsIk9iamVjdCIsImFzc2lnbiIsImxpc3RlbmVyIiwicHJldlN0YXRlIiwib2xkU3RhdGUiLCJkZXN0cm95IiwiZ2V0RXh0ZW5zaW9uQ29uZmlnRnJvbVN0b3JlIiwiZXh0ZW5zaW9uQ29uZmlnIiwiaW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/module-config/state.js\n");
|
|
39
|
+
|
|
40
|
+
/***/ }),
|
|
41
|
+
|
|
42
|
+
/***/ "../../framework/esm-config/dist/types.js":
|
|
43
|
+
/*!************************************************!*\
|
|
44
|
+
!*** ../../framework/esm-config/dist/types.js ***!
|
|
45
|
+
\************************************************/
|
|
46
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
47
|
+
|
|
48
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Type: () => (/* binding */ Type)\n/* harmony export */ });\nvar Type = /*#__PURE__*/ function(Type) {\n Type[\"Array\"] = \"Array\";\n Type[\"Boolean\"] = \"Boolean\";\n Type[\"ConceptUuid\"] = \"ConceptUuid\";\n Type[\"Number\"] = \"Number\";\n Type[\"Object\"] = \"Object\";\n Type[\"String\"] = \"String\";\n Type[\"UUID\"] = \"UUID\";\n Type[\"PersonAttributeTypeUuid\"] = \"PersonAttributeTypeUuid\";\n Type[\"PatientIdentifierTypeUuid\"] = \"PatientIdentifierTypeUuid\";\n return Type;\n}({});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC90eXBlcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU8sSUFBSUEsT0FBTyxXQUFXLEdBQUcsU0FBU0EsSUFBSTtJQUN6Q0EsSUFBSSxDQUFDLFFBQVEsR0FBRztJQUNoQkEsSUFBSSxDQUFDLFVBQVUsR0FBRztJQUNsQkEsSUFBSSxDQUFDLGNBQWMsR0FBRztJQUN0QkEsSUFBSSxDQUFDLFNBQVMsR0FBRztJQUNqQkEsSUFBSSxDQUFDLFNBQVMsR0FBRztJQUNqQkEsSUFBSSxDQUFDLFNBQVMsR0FBRztJQUNqQkEsSUFBSSxDQUFDLE9BQU8sR0FBRztJQUNmQSxJQUFJLENBQUMsMEJBQTBCLEdBQUc7SUFDbENBLElBQUksQ0FBQyw0QkFBNEIsR0FBRztJQUNwQyxPQUFPQTtBQUNYLEVBQUUsQ0FBQyxHQUFHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLWNvbmZpZy9kaXN0L3R5cGVzLmpzPzQ3MjEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciBUeXBlID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihUeXBlKSB7XG4gICAgVHlwZVtcIkFycmF5XCJdID0gXCJBcnJheVwiO1xuICAgIFR5cGVbXCJCb29sZWFuXCJdID0gXCJCb29sZWFuXCI7XG4gICAgVHlwZVtcIkNvbmNlcHRVdWlkXCJdID0gXCJDb25jZXB0VXVpZFwiO1xuICAgIFR5cGVbXCJOdW1iZXJcIl0gPSBcIk51bWJlclwiO1xuICAgIFR5cGVbXCJPYmplY3RcIl0gPSBcIk9iamVjdFwiO1xuICAgIFR5cGVbXCJTdHJpbmdcIl0gPSBcIlN0cmluZ1wiO1xuICAgIFR5cGVbXCJVVUlEXCJdID0gXCJVVUlEXCI7XG4gICAgVHlwZVtcIlBlcnNvbkF0dHJpYnV0ZVR5cGVVdWlkXCJdID0gXCJQZXJzb25BdHRyaWJ1dGVUeXBlVXVpZFwiO1xuICAgIFR5cGVbXCJQYXRpZW50SWRlbnRpZmllclR5cGVVdWlkXCJdID0gXCJQYXRpZW50SWRlbnRpZmllclR5cGVVdWlkXCI7XG4gICAgcmV0dXJuIFR5cGU7XG59KHt9KTtcbiJdLCJuYW1lcyI6WyJUeXBlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/types.js\n");
|
|
49
|
+
|
|
50
|
+
/***/ }),
|
|
51
|
+
|
|
52
|
+
/***/ "../../framework/esm-config/dist/validators/type-validators.js":
|
|
53
|
+
/*!*********************************************************************!*\
|
|
54
|
+
!*** ../../framework/esm-config/dist/validators/type-validators.js ***!
|
|
55
|
+
\*********************************************************************/
|
|
56
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
57
|
+
|
|
58
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ isArray: () => (/* binding */ isArray),\n/* harmony export */ isBoolean: () => (/* binding */ isBoolean),\n/* harmony export */ isNumber: () => (/* binding */ isNumber),\n/* harmony export */ isObject: () => (/* binding */ isObject),\n/* harmony export */ isString: () => (/* binding */ isString),\n/* harmony export */ isUuid: () => (/* binding */ isUuid)\n/* harmony export */ });\n/* harmony import */ var _validator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./validator.js */ \"../../framework/esm-config/dist/validators/validator.js\");\n\nconst isArray = (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>Array.isArray(val), 'must be an array');\nconst isBoolean = (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>typeof val === 'boolean', 'must be a boolean');\nconst isNumber = (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>typeof val === 'number', 'must be a number');\nconst isString = (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>typeof val === 'string', 'must be a string');\nconst isObject = (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>typeof val === 'object' && !Array.isArray(val) && val !== null, 'must be an object (not an array or null)');\nconst isUuid = (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) || /^[0-9a-f]{36}$/i.test(val), 'must be a valid UUID or a 36-character hexadecimal string');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC92YWxpZGF0b3JzL3R5cGUtdmFsaWRhdG9ycy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQTJDO0FBQ3BDLE1BQU1DLFVBQVVELHdEQUFTQSxDQUFDLENBQUNFLE1BQU1DLE1BQU1GLE9BQU8sQ0FBQ0MsTUFBTSxvQkFBb0I7QUFDekUsTUFBTUUsWUFBWUosd0RBQVNBLENBQUMsQ0FBQ0UsTUFBTSxPQUFPQSxRQUFRLFdBQVcscUJBQXFCO0FBQ2xGLE1BQU1HLFdBQVdMLHdEQUFTQSxDQUFDLENBQUNFLE1BQU0sT0FBT0EsUUFBUSxVQUFVLG9CQUFvQjtBQUMvRSxNQUFNSSxXQUFXTix3REFBU0EsQ0FBQyxDQUFDRSxNQUFNLE9BQU9BLFFBQVEsVUFBVSxvQkFBb0I7QUFDL0UsTUFBTUssV0FBV1Asd0RBQVNBLENBQUMsQ0FBQ0UsTUFBTSxPQUFPQSxRQUFRLFlBQVksQ0FBQ0MsTUFBTUYsT0FBTyxDQUFDQyxRQUFRQSxRQUFRLE1BQU0sNENBQTRDO0FBQzlJLE1BQU1NLFNBQVNSLHdEQUFTQSxDQUFDLENBQUNFLE1BQU0sa0VBQWtFTyxJQUFJLENBQUNQLFFBQVEsa0JBQWtCTyxJQUFJLENBQUNQLE1BQU0sNkRBQTZEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLWNvbmZpZy9kaXN0L3ZhbGlkYXRvcnMvdHlwZS12YWxpZGF0b3JzLmpzP2E0N2IiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSBcIi4vdmFsaWRhdG9yLmpzXCI7XG5leHBvcnQgY29uc3QgaXNBcnJheSA9IHZhbGlkYXRvcigodmFsKT0+QXJyYXkuaXNBcnJheSh2YWwpLCAnbXVzdCBiZSBhbiBhcnJheScpO1xuZXhwb3J0IGNvbnN0IGlzQm9vbGVhbiA9IHZhbGlkYXRvcigodmFsKT0+dHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nLCAnbXVzdCBiZSBhIGJvb2xlYW4nKTtcbmV4cG9ydCBjb25zdCBpc051bWJlciA9IHZhbGlkYXRvcigodmFsKT0+dHlwZW9mIHZhbCA9PT0gJ251bWJlcicsICdtdXN0IGJlIGEgbnVtYmVyJyk7XG5leHBvcnQgY29uc3QgaXNTdHJpbmcgPSB2YWxpZGF0b3IoKHZhbCk9PnR5cGVvZiB2YWwgPT09ICdzdHJpbmcnLCAnbXVzdCBiZSBhIHN0cmluZycpO1xuZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gdmFsaWRhdG9yKCh2YWwpPT50eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbCAhPT0gbnVsbCwgJ211c3QgYmUgYW4gb2JqZWN0IChub3QgYW4gYXJyYXkgb3IgbnVsbCknKTtcbmV4cG9ydCBjb25zdCBpc1V1aWQgPSB2YWxpZGF0b3IoKHZhbCk9Pi9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JC9pLnRlc3QodmFsKSB8fCAvXlswLTlhLWZdezM2fSQvaS50ZXN0KHZhbCksICdtdXN0IGJlIGEgdmFsaWQgVVVJRCBvciBhIDM2LWNoYXJhY3RlciBoZXhhZGVjaW1hbCBzdHJpbmcnKTtcbiJdLCJuYW1lcyI6WyJ2YWxpZGF0b3IiLCJpc0FycmF5IiwidmFsIiwiQXJyYXkiLCJpc0Jvb2xlYW4iLCJpc051bWJlciIsImlzU3RyaW5nIiwiaXNPYmplY3QiLCJpc1V1aWQiLCJ0ZXN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/validators/type-validators.js\n");
|
|
59
|
+
|
|
60
|
+
/***/ }),
|
|
61
|
+
|
|
62
|
+
/***/ "../../framework/esm-config/dist/validators/validator.js":
|
|
63
|
+
/*!***************************************************************!*\
|
|
64
|
+
!*** ../../framework/esm-config/dist/validators/validator.js ***!
|
|
65
|
+
\***************************************************************/
|
|
66
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
67
|
+
|
|
68
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ validator: () => (/* binding */ validator)\n/* harmony export */ });\n/** @module @category Config Validation */ /**\n * Constructs a custom validator.\n *\n * ### Example\n *\n * ```typescript\n * {\n * foo: {\n * _default: 0,\n * _validators: [\n * validator(val => val >= 0, \"Must not be negative.\")\n * ]\n * }\n * }\n * ```\n * @param validationFunction Takes the configured value as input. Returns true\n * if it is valid, false otherwise.\n * @param message A string message that explains why the value is invalid. Can\n * also be a function that takes the value as input and returns a string.\n * @returns A validator ready for use in a config schema\n */ function validator(validationFunction, message) {\n return (value)=>{\n if (!validationFunction(value)) {\n if (typeof message === 'function') {\n return message(value);\n } else {\n return message;\n }\n }\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC92YWxpZGF0b3JzL3ZhbGlkYXRvci5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsd0NBQXdDLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBb0IxQyxHQUFVLFNBQVNBLFVBQVVDLGtCQUFrQixFQUFFQyxPQUFPO0lBQ3JELE9BQU8sQ0FBQ0M7UUFDSixJQUFJLENBQUNGLG1CQUFtQkUsUUFBUTtZQUM1QixJQUFJLE9BQU9ELFlBQVksWUFBWTtnQkFDL0IsT0FBT0EsUUFBUUM7WUFDbkIsT0FBTztnQkFDSCxPQUFPRDtZQUNYO1FBQ0o7SUFDSjtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLWNvbmZpZy9kaXN0L3ZhbGlkYXRvcnMvdmFsaWRhdG9yLmpzPzkwNDgiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBtb2R1bGUgQGNhdGVnb3J5IENvbmZpZyBWYWxpZGF0aW9uICovIC8qKlxuICogQ29uc3RydWN0cyBhIGN1c3RvbSB2YWxpZGF0b3IuXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB7XG4gKiAgIGZvbzoge1xuICogICAgIF9kZWZhdWx0OiAwLFxuICogICAgIF92YWxpZGF0b3JzOiBbXG4gKiAgICAgICB2YWxpZGF0b3IodmFsID0+IHZhbCA+PSAwLCBcIk11c3Qgbm90IGJlIG5lZ2F0aXZlLlwiKVxuICogICAgIF1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKiBAcGFyYW0gdmFsaWRhdGlvbkZ1bmN0aW9uIFRha2VzIHRoZSBjb25maWd1cmVkIHZhbHVlIGFzIGlucHV0LiBSZXR1cm5zIHRydWVcbiAqICAgIGlmIGl0IGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAcGFyYW0gbWVzc2FnZSBBIHN0cmluZyBtZXNzYWdlIHRoYXQgZXhwbGFpbnMgd2h5IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLiBDYW5cbiAqICAgIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSB2YWx1ZSBhcyBpbnB1dCBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqIEByZXR1cm5zIEEgdmFsaWRhdG9yIHJlYWR5IGZvciB1c2UgaW4gYSBjb25maWcgc2NoZW1hXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWxpZGF0aW9uRnVuY3Rpb24sIG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gKHZhbHVlKT0+e1xuICAgICAgICBpZiAoIXZhbGlkYXRpb25GdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlKHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuIl0sIm5hbWVzIjpbInZhbGlkYXRvciIsInZhbGlkYXRpb25GdW5jdGlvbiIsIm1lc3NhZ2UiLCJ2YWx1ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/validators/validator.js\n");
|
|
69
|
+
|
|
70
|
+
/***/ }),
|
|
71
|
+
|
|
72
|
+
/***/ "../../framework/esm-config/dist/validators/validators.js":
|
|
73
|
+
/*!****************************************************************!*\
|
|
74
|
+
!*** ../../framework/esm-config/dist/validators/validators.js ***!
|
|
75
|
+
\****************************************************************/
|
|
76
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
77
|
+
|
|
78
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ inRange: () => (/* binding */ inRange),\n/* harmony export */ isUrl: () => (/* binding */ isUrl),\n/* harmony export */ isUrlWithTemplateParameters: () => (/* binding */ isUrlWithTemplateParameters),\n/* harmony export */ oneOf: () => (/* binding */ oneOf),\n/* harmony export */ validators: () => (/* binding */ validators)\n/* harmony export */ });\n/* harmony import */ var _validator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./validator.js */ \"../../framework/esm-config/dist/validators/validator.js\");\n/** @module @category Config Validation */ \n/**\n * Verifies that the value is between the provided minimum and maximum\n *\n * @param min Minimum acceptable value\n * @param max Maximum acceptable value\n */ const inRange = (min, max)=>{\n return (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>min <= val && val <= max, `must be between ${min} and ${max}`);\n};\n/**\n * Verifies that a string contains only the default URL template\n * parameters, plus any specified in `allowedTemplateParameters`.\n *\n * @param allowedTemplateParameters To be added to `openmrsBase` and `openmrsSpaBase`\n * @category Navigation\n */ const isUrlWithTemplateParameters = (allowedTemplateParameters)=>{\n const allowedParams = allowedTemplateParameters.concat([\n 'openmrsBase',\n 'openmrsSpaBase'\n ]);\n return (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>{\n if (!val || typeof val != 'string') {\n return false;\n }\n const rx = /\\${(.*?)}/g;\n let match = rx.exec(val);\n while(match){\n if (!allowedParams.includes(match[1])) {\n return false;\n }\n match = rx.exec(val);\n }\n return true;\n }, 'Should be a URL or path. The allowed template parameters are ' + allowedParams.map((p)=>'${' + p + '}').join(', '));\n};\n/**\n * Verifies that a string contains only the default URL template parameters.\n *\n * @category Navigation\n */ const isUrl = isUrlWithTemplateParameters([]);\n/**\n * Verifies that the value is one of the allowed options.\n * @param allowedValues The list of allowable values\n */ const oneOf = (allowedValues)=>{\n return (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>allowedValues.includes(val), `Must be one of the following: '${allowedValues.join(\"', '\")}'.`);\n};\nconst validators = {\n inRange,\n isUrl,\n isUrlWithTemplateParameters,\n oneOf\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC92YWxpZGF0b3JzL3ZhbGlkYXRvcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsd0NBQXdDLEdBQThDO0FBQ3RGOzs7OztDQUtDLEdBQVUsTUFBTUMsVUFBVSxDQUFDQyxLQUFLQztJQUM3QixPQUFPSCx3REFBU0EsQ0FBQyxDQUFDSSxNQUFNRixPQUFPRSxPQUFPQSxPQUFPRCxLQUFLLENBQUMsZ0JBQWdCLEVBQUVELElBQUksS0FBSyxFQUFFQyxLQUFLO0FBQ3pGLEVBQUU7QUFDRjs7Ozs7O0NBTUMsR0FBVSxNQUFNRSw4QkFBOEIsQ0FBQ0M7SUFDNUMsTUFBTUMsZ0JBQWdCRCwwQkFBMEJFLE1BQU0sQ0FBQztRQUNuRDtRQUNBO0tBQ0g7SUFDRCxPQUFPUix3REFBU0EsQ0FBQyxDQUFDSTtRQUNkLElBQUksQ0FBQ0EsT0FBTyxPQUFPQSxPQUFPLFVBQVU7WUFDaEMsT0FBTztRQUNYO1FBQ0EsTUFBTUssS0FBSztRQUNYLElBQUlDLFFBQVFELEdBQUdFLElBQUksQ0FBQ1A7UUFDcEIsTUFBTU0sTUFBTTtZQUNSLElBQUksQ0FBQ0gsY0FBY0ssUUFBUSxDQUFDRixLQUFLLENBQUMsRUFBRSxHQUFHO2dCQUNuQyxPQUFPO1lBQ1g7WUFDQUEsUUFBUUQsR0FBR0UsSUFBSSxDQUFDUDtRQUNwQjtRQUNBLE9BQU87SUFDWCxHQUFHLGtFQUFrRUcsY0FBY00sR0FBRyxDQUFDLENBQUNDLElBQUksT0FBT0EsSUFBSSxLQUFLQyxJQUFJLENBQUM7QUFDckgsRUFBRTtBQUNGOzs7O0NBSUMsR0FBVSxNQUFNQyxRQUFRWCw0QkFBNEIsRUFBRSxFQUFFO0FBQ3pEOzs7Q0FHQyxHQUFVLE1BQU1ZLFFBQVEsQ0FBQ0M7SUFDdEIsT0FBT2xCLHdEQUFTQSxDQUFDLENBQUNJLE1BQU1jLGNBQWNOLFFBQVEsQ0FBQ1IsTUFBTSxDQUFDLCtCQUErQixFQUFFYyxjQUFjSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDekgsRUFBRTtBQUNLLE1BQU1JLGFBQWE7SUFDdEJsQjtJQUNBZTtJQUNBWDtJQUNBWTtBQUNKLEVBQUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uL2ZyYW1ld29yay9lc20tY29uZmlnL2Rpc3QvdmFsaWRhdG9ycy92YWxpZGF0b3JzLmpzPzJmYjAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBtb2R1bGUgQGNhdGVnb3J5IENvbmZpZyBWYWxpZGF0aW9uICovIGltcG9ydCB7IHZhbGlkYXRvciB9IGZyb20gXCIuL3ZhbGlkYXRvci5qc1wiO1xuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSB2YWx1ZSBpcyBiZXR3ZWVuIHRoZSBwcm92aWRlZCBtaW5pbXVtIGFuZCBtYXhpbXVtXG4gKlxuICogQHBhcmFtIG1pbiBNaW5pbXVtIGFjY2VwdGFibGUgdmFsdWVcbiAqIEBwYXJhbSBtYXggTWF4aW11bSBhY2NlcHRhYmxlIHZhbHVlXG4gKi8gZXhwb3J0IGNvbnN0IGluUmFuZ2UgPSAobWluLCBtYXgpPT57XG4gICAgcmV0dXJuIHZhbGlkYXRvcigodmFsKT0+bWluIDw9IHZhbCAmJiB2YWwgPD0gbWF4LCBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YCk7XG59O1xuLyoqXG4gKiBWZXJpZmllcyB0aGF0IGEgc3RyaW5nIGNvbnRhaW5zIG9ubHkgdGhlIGRlZmF1bHQgVVJMIHRlbXBsYXRlXG4gKiBwYXJhbWV0ZXJzLCBwbHVzIGFueSBzcGVjaWZpZWQgaW4gYGFsbG93ZWRUZW1wbGF0ZVBhcmFtZXRlcnNgLlxuICpcbiAqIEBwYXJhbSBhbGxvd2VkVGVtcGxhdGVQYXJhbWV0ZXJzIFRvIGJlIGFkZGVkIHRvIGBvcGVubXJzQmFzZWAgYW5kIGBvcGVubXJzU3BhQmFzZWBcbiAqIEBjYXRlZ29yeSBOYXZpZ2F0aW9uXG4gKi8gZXhwb3J0IGNvbnN0IGlzVXJsV2l0aFRlbXBsYXRlUGFyYW1ldGVycyA9IChhbGxvd2VkVGVtcGxhdGVQYXJhbWV0ZXJzKT0+e1xuICAgIGNvbnN0IGFsbG93ZWRQYXJhbXMgPSBhbGxvd2VkVGVtcGxhdGVQYXJhbWV0ZXJzLmNvbmNhdChbXG4gICAgICAgICdvcGVubXJzQmFzZScsXG4gICAgICAgICdvcGVubXJzU3BhQmFzZSdcbiAgICBdKTtcbiAgICByZXR1cm4gdmFsaWRhdG9yKCh2YWwpPT57XG4gICAgICAgIGlmICghdmFsIHx8IHR5cGVvZiB2YWwgIT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByeCA9IC9cXCR7KC4qPyl9L2c7XG4gICAgICAgIGxldCBtYXRjaCA9IHJ4LmV4ZWModmFsKTtcbiAgICAgICAgd2hpbGUobWF0Y2gpe1xuICAgICAgICAgICAgaWYgKCFhbGxvd2VkUGFyYW1zLmluY2x1ZGVzKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoID0gcnguZXhlYyh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sICdTaG91bGQgYmUgYSBVUkwgb3IgcGF0aC4gVGhlIGFsbG93ZWQgdGVtcGxhdGUgcGFyYW1ldGVycyBhcmUgJyArIGFsbG93ZWRQYXJhbXMubWFwKChwKT0+JyR7JyArIHAgKyAnfScpLmpvaW4oJywgJykpO1xufTtcbi8qKlxuICogVmVyaWZpZXMgdGhhdCBhIHN0cmluZyBjb250YWlucyBvbmx5IHRoZSBkZWZhdWx0IFVSTCB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLlxuICpcbiAqIEBjYXRlZ29yeSBOYXZpZ2F0aW9uXG4gKi8gZXhwb3J0IGNvbnN0IGlzVXJsID0gaXNVcmxXaXRoVGVtcGxhdGVQYXJhbWV0ZXJzKFtdKTtcbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgdmFsdWUgaXMgb25lIG9mIHRoZSBhbGxvd2VkIG9wdGlvbnMuXG4gKiBAcGFyYW0gYWxsb3dlZFZhbHVlcyBUaGUgbGlzdCBvZiBhbGxvd2FibGUgdmFsdWVzXG4gKi8gZXhwb3J0IGNvbnN0IG9uZU9mID0gKGFsbG93ZWRWYWx1ZXMpPT57XG4gICAgcmV0dXJuIHZhbGlkYXRvcigodmFsKT0+YWxsb3dlZFZhbHVlcy5pbmNsdWRlcyh2YWwpLCBgTXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogJyR7YWxsb3dlZFZhbHVlcy5qb2luKFwiJywgJ1wiKX0nLmApO1xufTtcbmV4cG9ydCBjb25zdCB2YWxpZGF0b3JzID0ge1xuICAgIGluUmFuZ2UsXG4gICAgaXNVcmwsXG4gICAgaXNVcmxXaXRoVGVtcGxhdGVQYXJhbWV0ZXJzLFxuICAgIG9uZU9mXG59O1xuIl0sIm5hbWVzIjpbInZhbGlkYXRvciIsImluUmFuZ2UiLCJtaW4iLCJtYXgiLCJ2YWwiLCJpc1VybFdpdGhUZW1wbGF0ZVBhcmFtZXRlcnMiLCJhbGxvd2VkVGVtcGxhdGVQYXJhbWV0ZXJzIiwiYWxsb3dlZFBhcmFtcyIsImNvbmNhdCIsInJ4IiwibWF0Y2giLCJleGVjIiwiaW5jbHVkZXMiLCJtYXAiLCJwIiwiam9pbiIsImlzVXJsIiwib25lT2YiLCJhbGxvd2VkVmFsdWVzIiwidmFsaWRhdG9ycyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/validators/validators.js\n");
|
|
79
|
+
|
|
80
|
+
/***/ }),
|
|
81
|
+
|
|
82
|
+
/***/ "../../framework/esm-state/dist/index.js":
|
|
83
|
+
/*!***********************************************!*\
|
|
84
|
+
!*** ../../framework/esm-state/dist/index.js ***!
|
|
85
|
+
\***********************************************/
|
|
86
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
87
|
+
|
|
88
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createGlobalStore: () => (/* reexport safe */ _state_js__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore),\n/* harmony export */ getGlobalStore: () => (/* reexport safe */ _state_js__WEBPACK_IMPORTED_MODULE_0__.getGlobalStore),\n/* harmony export */ registerGlobalStore: () => (/* reexport safe */ _state_js__WEBPACK_IMPORTED_MODULE_0__.registerGlobalStore),\n/* harmony export */ subscribeTo: () => (/* reexport safe */ _state_js__WEBPACK_IMPORTED_MODULE_0__.subscribeTo)\n/* harmony export */ });\n/* harmony import */ var _state_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./state.js */ \"../../framework/esm-state/dist/state.js\");\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1zdGF0ZS9kaXN0L2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQTJCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLXN0YXRlL2Rpc3QvaW5kZXguanM/NzgxYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9zdGF0ZS5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../framework/esm-state/dist/index.js\n");
|
|
89
|
+
|
|
90
|
+
/***/ }),
|
|
91
|
+
|
|
92
|
+
/***/ "../../framework/esm-state/dist/state.js":
|
|
93
|
+
/*!***********************************************!*\
|
|
94
|
+
!*** ../../framework/esm-state/dist/state.js ***!
|
|
95
|
+
\***********************************************/
|
|
96
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
97
|
+
|
|
98
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createGlobalStore: () => (/* binding */ createGlobalStore),\n/* harmony export */ getGlobalStore: () => (/* binding */ getGlobalStore),\n/* harmony export */ registerGlobalStore: () => (/* binding */ registerGlobalStore),\n/* harmony export */ subscribeTo: () => (/* binding */ subscribeTo)\n/* harmony export */ });\n/* harmony import */ var _openmrs_esm_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @openmrs/esm-utils */ \"../../framework/esm-utils/dist/shallowEqual.js\");\n/* harmony import */ var zustand_vanilla__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zustand/vanilla */ \"../../../node_modules/zustand/esm/vanilla.mjs\");\n/** @module @category Store */ \n\nconst availableStores = {};\n// spaEnv isn't available immediately. Wait a bit before making stores available\n// on window in development mode.\nsetTimeout(()=>{\n if (window.spaEnv === 'development') {\n window['stores'] = availableStores;\n }\n}, 1000);\n/**\n * Creates a Zustand store.\n *\n * @param name A name by which the store can be looked up later.\n * Must be unique across the entire application.\n * @param initialState An object which will be the initial state of the store.\n * @returns The newly created store.\n */ function createGlobalStore(name, initialState) {\n const available = availableStores[name];\n if (available) {\n if (available.active) {\n console.error(`Attempted to override the existing store ${name}. Make sure that stores are only created once.`);\n } else {\n available.value.setState(initialState, true);\n }\n available.active = true;\n return available.value;\n } else {\n const store = (0,zustand_vanilla__WEBPACK_IMPORTED_MODULE_0__.createStore)()(()=>initialState);\n availableStores[name] = {\n value: store,\n active: true\n };\n return store;\n }\n}\n/**\n * Registers an existing Zustand store.\n *\n * @param name A name by which the store can be looked up later.\n * Must be unique across the entire application.\n * @param store The Zustand store to use for this.\n * @returns The newly registered store.\n */ function registerGlobalStore(name, store) {\n const available = availableStores[name];\n if (available) {\n if (available.active) {\n console.error(`Attempted to override the existing store ${name}. Make sure that stores are only created once.`);\n } else {\n available.value = store;\n }\n available.active = true;\n return available.value;\n } else {\n availableStores[name] = {\n value: store,\n active: true\n };\n return store;\n }\n}\n/**\n * Returns the existing store named `name`,\n * or creates a new store named `name` if none exists.\n *\n * @param name The name of the store to look up.\n * @param fallbackState The initial value of the new store if no store named `name` exists.\n * @returns The found or newly created store.\n */ function getGlobalStore(name, fallbackState) {\n const available = availableStores[name];\n if (!available) {\n const store = (0,zustand_vanilla__WEBPACK_IMPORTED_MODULE_0__.createStore)()(()=>fallbackState ?? {});\n availableStores[name] = {\n value: store,\n active: false\n };\n return store;\n }\n return available.value;\n}\nfunction subscribeTo(...args) {\n const [store, select, handle] = args;\n const handler = typeof handle === 'undefined' ? select : handle;\n const selector = typeof handle === 'undefined' ? (state)=>state : select;\n handler(selector(store.getState()));\n return store.subscribe((state, previous)=>{\n const current = selector(state);\n if (!(0,_openmrs_esm_utils__WEBPACK_IMPORTED_MODULE_1__.shallowEqual)(previous, current)) {\n handler(current);\n }\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1zdGF0ZS9kaXN0L3N0YXRlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDRCQUE0QixHQUFxRDtBQUNuQztBQUM5QyxNQUFNRSxrQkFBa0IsQ0FBQztBQUN6QixnRkFBZ0Y7QUFDaEYsaUNBQWlDO0FBQ2pDQyxXQUFXO0lBQ1AsSUFBSUMsT0FBT0MsTUFBTSxLQUFLLGVBQWU7UUFDakNELE1BQU0sQ0FBQyxTQUFTLEdBQUdGO0lBQ3ZCO0FBQ0osR0FBRztBQUNIOzs7Ozs7O0NBT0MsR0FBVSxTQUFTSSxrQkFBa0JDLElBQUksRUFBRUMsWUFBWTtJQUNwRCxNQUFNQyxZQUFZUCxlQUFlLENBQUNLLEtBQUs7SUFDdkMsSUFBSUUsV0FBVztRQUNYLElBQUlBLFVBQVVDLE1BQU0sRUFBRTtZQUNsQkMsUUFBUUMsS0FBSyxDQUFDLENBQUMseUNBQXlDLEVBQUVMLEtBQUssOENBQThDLENBQUM7UUFDbEgsT0FBTztZQUNIRSxVQUFVSSxLQUFLLENBQUNDLFFBQVEsQ0FBQ04sY0FBYztRQUMzQztRQUNBQyxVQUFVQyxNQUFNLEdBQUc7UUFDbkIsT0FBT0QsVUFBVUksS0FBSztJQUMxQixPQUFPO1FBQ0gsTUFBTUUsUUFBUWQsNERBQVdBLEdBQUcsSUFBSU87UUFDaENOLGVBQWUsQ0FBQ0ssS0FBSyxHQUFHO1lBQ3BCTSxPQUFPRTtZQUNQTCxRQUFRO1FBQ1o7UUFDQSxPQUFPSztJQUNYO0FBQ0o7QUFDQTs7Ozs7OztDQU9DLEdBQVUsU0FBU0Msb0JBQW9CVCxJQUFJLEVBQUVRLEtBQUs7SUFDL0MsTUFBTU4sWUFBWVAsZUFBZSxDQUFDSyxLQUFLO0lBQ3ZDLElBQUlFLFdBQVc7UUFDWCxJQUFJQSxVQUFVQyxNQUFNLEVBQUU7WUFDbEJDLFFBQVFDLEtBQUssQ0FBQyxDQUFDLHlDQUF5QyxFQUFFTCxLQUFLLDhDQUE4QyxDQUFDO1FBQ2xILE9BQU87WUFDSEUsVUFBVUksS0FBSyxHQUFHRTtRQUN0QjtRQUNBTixVQUFVQyxNQUFNLEdBQUc7UUFDbkIsT0FBT0QsVUFBVUksS0FBSztJQUMxQixPQUFPO1FBQ0hYLGVBQWUsQ0FBQ0ssS0FBSyxHQUFHO1lBQ3BCTSxPQUFPRTtZQUNQTCxRQUFRO1FBQ1o7UUFDQSxPQUFPSztJQUNYO0FBQ0o7QUFDQTs7Ozs7OztDQU9DLEdBQVUsU0FBU0UsZUFBZVYsSUFBSSxFQUFFVyxhQUFhO0lBQ2xELE1BQU1ULFlBQVlQLGVBQWUsQ0FBQ0ssS0FBSztJQUN2QyxJQUFJLENBQUNFLFdBQVc7UUFDWixNQUFNTSxRQUFRZCw0REFBV0EsR0FBRyxJQUFJaUIsaUJBQWlCLENBQUM7UUFDbERoQixlQUFlLENBQUNLLEtBQUssR0FBRztZQUNwQk0sT0FBT0U7WUFDUEwsUUFBUTtRQUNaO1FBQ0EsT0FBT0s7SUFDWDtJQUNBLE9BQU9OLFVBQVVJLEtBQUs7QUFDMUI7QUFDTyxTQUFTTSxZQUFZLEdBQUdDLElBQUk7SUFDL0IsTUFBTSxDQUFDTCxPQUFPTSxRQUFRQyxPQUFPLEdBQUdGO0lBQ2hDLE1BQU1HLFVBQVUsT0FBT0QsV0FBVyxjQUFjRCxTQUFTQztJQUN6RCxNQUFNRSxXQUFXLE9BQU9GLFdBQVcsY0FBYyxDQUFDRyxRQUFRQSxRQUFRSjtJQUNsRUUsUUFBUUMsU0FBU1QsTUFBTVcsUUFBUTtJQUMvQixPQUFPWCxNQUFNWSxTQUFTLENBQUMsQ0FBQ0YsT0FBT0c7UUFDM0IsTUFBTUMsVUFBVUwsU0FBU0M7UUFDekIsSUFBSSxDQUFDekIsZ0VBQVlBLENBQUM0QixVQUFVQyxVQUFVO1lBQ2xDTixRQUFRTTtRQUNaO0lBQ0o7QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS1zdGF0ZS9kaXN0L3N0YXRlLmpzPzAwZWMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBtb2R1bGUgQGNhdGVnb3J5IFN0b3JlICovIGltcG9ydCB7IHNoYWxsb3dFcXVhbCB9IGZyb20gXCJAb3Blbm1ycy9lc20tdXRpbHNcIjtcbmltcG9ydCB7IGNyZWF0ZVN0b3JlIH0gZnJvbSBcInp1c3RhbmQvdmFuaWxsYVwiO1xuY29uc3QgYXZhaWxhYmxlU3RvcmVzID0ge307XG4vLyBzcGFFbnYgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LiBXYWl0IGEgYml0IGJlZm9yZSBtYWtpbmcgc3RvcmVzIGF2YWlsYWJsZVxuLy8gb24gd2luZG93IGluIGRldmVsb3BtZW50IG1vZGUuXG5zZXRUaW1lb3V0KCgpPT57XG4gICAgaWYgKHdpbmRvdy5zcGFFbnYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgd2luZG93WydzdG9yZXMnXSA9IGF2YWlsYWJsZVN0b3JlcztcbiAgICB9XG59LCAxMDAwKTtcbi8qKlxuICogQ3JlYXRlcyBhIFp1c3RhbmQgc3RvcmUuXG4gKlxuICogQHBhcmFtIG5hbWUgQSBuYW1lIGJ5IHdoaWNoIHRoZSBzdG9yZSBjYW4gYmUgbG9va2VkIHVwIGxhdGVyLlxuICogICAgTXVzdCBiZSB1bmlxdWUgYWNyb3NzIHRoZSBlbnRpcmUgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0gaW5pdGlhbFN0YXRlIEFuIG9iamVjdCB3aGljaCB3aWxsIGJlIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBzdG9yZS5cbiAqIEByZXR1cm5zIFRoZSBuZXdseSBjcmVhdGVkIHN0b3JlLlxuICovIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHbG9iYWxTdG9yZShuYW1lLCBpbml0aWFsU3RhdGUpIHtcbiAgICBjb25zdCBhdmFpbGFibGUgPSBhdmFpbGFibGVTdG9yZXNbbmFtZV07XG4gICAgaWYgKGF2YWlsYWJsZSkge1xuICAgICAgICBpZiAoYXZhaWxhYmxlLmFjdGl2ZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQXR0ZW1wdGVkIHRvIG92ZXJyaWRlIHRoZSBleGlzdGluZyBzdG9yZSAke25hbWV9LiBNYWtlIHN1cmUgdGhhdCBzdG9yZXMgYXJlIG9ubHkgY3JlYXRlZCBvbmNlLmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXZhaWxhYmxlLnZhbHVlLnNldFN0YXRlKGluaXRpYWxTdGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXZhaWxhYmxlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBhdmFpbGFibGUudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZSgpKCgpPT5pbml0aWFsU3RhdGUpO1xuICAgICAgICBhdmFpbGFibGVTdG9yZXNbbmFtZV0gPSB7XG4gICAgICAgICAgICB2YWx1ZTogc3RvcmUsXG4gICAgICAgICAgICBhY3RpdmU6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHN0b3JlO1xuICAgIH1cbn1cbi8qKlxuICogUmVnaXN0ZXJzIGFuIGV4aXN0aW5nIFp1c3RhbmQgc3RvcmUuXG4gKlxuICogQHBhcmFtIG5hbWUgQSBuYW1lIGJ5IHdoaWNoIHRoZSBzdG9yZSBjYW4gYmUgbG9va2VkIHVwIGxhdGVyLlxuICogICAgTXVzdCBiZSB1bmlxdWUgYWNyb3NzIHRoZSBlbnRpcmUgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0gc3RvcmUgVGhlIFp1c3RhbmQgc3RvcmUgdG8gdXNlIGZvciB0aGlzLlxuICogQHJldHVybnMgVGhlIG5ld2x5IHJlZ2lzdGVyZWQgc3RvcmUuXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyR2xvYmFsU3RvcmUobmFtZSwgc3RvcmUpIHtcbiAgICBjb25zdCBhdmFpbGFibGUgPSBhdmFpbGFibGVTdG9yZXNbbmFtZV07XG4gICAgaWYgKGF2YWlsYWJsZSkge1xuICAgICAgICBpZiAoYXZhaWxhYmxlLmFjdGl2ZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQXR0ZW1wdGVkIHRvIG92ZXJyaWRlIHRoZSBleGlzdGluZyBzdG9yZSAke25hbWV9LiBNYWtlIHN1cmUgdGhhdCBzdG9yZXMgYXJlIG9ubHkgY3JlYXRlZCBvbmNlLmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXZhaWxhYmxlLnZhbHVlID0gc3RvcmU7XG4gICAgICAgIH1cbiAgICAgICAgYXZhaWxhYmxlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBhdmFpbGFibGUudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXZhaWxhYmxlU3RvcmVzW25hbWVdID0ge1xuICAgICAgICAgICAgdmFsdWU6IHN0b3JlLFxuICAgICAgICAgICAgYWN0aXZlOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdG9yZTtcbiAgICB9XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGV4aXN0aW5nIHN0b3JlIG5hbWVkIGBuYW1lYCxcbiAqIG9yIGNyZWF0ZXMgYSBuZXcgc3RvcmUgbmFtZWQgYG5hbWVgIGlmIG5vbmUgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBzdG9yZSB0byBsb29rIHVwLlxuICogQHBhcmFtIGZhbGxiYWNrU3RhdGUgVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIG5ldyBzdG9yZSBpZiBubyBzdG9yZSBuYW1lZCBgbmFtZWAgZXhpc3RzLlxuICogQHJldHVybnMgVGhlIGZvdW5kIG9yIG5ld2x5IGNyZWF0ZWQgc3RvcmUuXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGdldEdsb2JhbFN0b3JlKG5hbWUsIGZhbGxiYWNrU3RhdGUpIHtcbiAgICBjb25zdCBhdmFpbGFibGUgPSBhdmFpbGFibGVTdG9yZXNbbmFtZV07XG4gICAgaWYgKCFhdmFpbGFibGUpIHtcbiAgICAgICAgY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZSgpKCgpPT5mYWxsYmFja1N0YXRlID8/IHt9KTtcbiAgICAgICAgYXZhaWxhYmxlU3RvcmVzW25hbWVdID0ge1xuICAgICAgICAgICAgdmFsdWU6IHN0b3JlLFxuICAgICAgICAgICAgYWN0aXZlOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc3RvcmU7XG4gICAgfVxuICAgIHJldHVybiBhdmFpbGFibGUudmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gc3Vic2NyaWJlVG8oLi4uYXJncykge1xuICAgIGNvbnN0IFtzdG9yZSwgc2VsZWN0LCBoYW5kbGVdID0gYXJncztcbiAgICBjb25zdCBoYW5kbGVyID0gdHlwZW9mIGhhbmRsZSA9PT0gJ3VuZGVmaW5lZCcgPyBzZWxlY3QgOiBoYW5kbGU7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0eXBlb2YgaGFuZGxlID09PSAndW5kZWZpbmVkJyA/IChzdGF0ZSk9PnN0YXRlIDogc2VsZWN0O1xuICAgIGhhbmRsZXIoc2VsZWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSkpO1xuICAgIHJldHVybiBzdG9yZS5zdWJzY3JpYmUoKHN0YXRlLCBwcmV2aW91cyk9PntcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHNlbGVjdG9yKHN0YXRlKTtcbiAgICAgICAgaWYgKCFzaGFsbG93RXF1YWwocHJldmlvdXMsIGN1cnJlbnQpKSB7XG4gICAgICAgICAgICBoYW5kbGVyKGN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4iXSwibmFtZXMiOlsic2hhbGxvd0VxdWFsIiwiY3JlYXRlU3RvcmUiLCJhdmFpbGFibGVTdG9yZXMiLCJzZXRUaW1lb3V0Iiwid2luZG93Iiwic3BhRW52IiwiY3JlYXRlR2xvYmFsU3RvcmUiLCJuYW1lIiwiaW5pdGlhbFN0YXRlIiwiYXZhaWxhYmxlIiwiYWN0aXZlIiwiY29uc29sZSIsImVycm9yIiwidmFsdWUiLCJzZXRTdGF0ZSIsInN0b3JlIiwicmVnaXN0ZXJHbG9iYWxTdG9yZSIsImdldEdsb2JhbFN0b3JlIiwiZmFsbGJhY2tTdGF0ZSIsInN1YnNjcmliZVRvIiwiYXJncyIsInNlbGVjdCIsImhhbmRsZSIsImhhbmRsZXIiLCJzZWxlY3RvciIsInN0YXRlIiwiZ2V0U3RhdGUiLCJzdWJzY3JpYmUiLCJwcmV2aW91cyIsImN1cnJlbnQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../framework/esm-state/dist/state.js\n");
|
|
99
|
+
|
|
100
|
+
/***/ }),
|
|
101
|
+
|
|
102
|
+
/***/ "../../framework/esm-utils/dist/shallowEqual.js":
|
|
103
|
+
/*!******************************************************!*\
|
|
104
|
+
!*** ../../framework/esm-utils/dist/shallowEqual.js ***!
|
|
105
|
+
\******************************************************/
|
|
106
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
107
|
+
|
|
108
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ shallowEqual: () => (/* binding */ shallowEqual)\n/* harmony export */ });\n/** @module @category Utility */ /**\n * Checks whether two objects are equal, using a shallow comparison, similar to React.\n *\n * In essence, shallowEquals ensures two objects have the same own properties and that the values\n * of these are equal (===) to each other.\n *\n * @param a The first value to compare\n * @param b The second value to compare\n * @returns true if the objects are shallowly equal to each other\n */ function shallowEqual(a, b) {\n if (a === b || Object.is(a, b)) {\n return true;\n }\n if (Array.isArray(a)) {\n if (!Array.isArray(b)) {\n return false;\n }\n if (a.length !== b.length) {\n return false;\n }\n for(let i = 0; i < a.length; i++){\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n } else if (Array.isArray(b)) {\n return false;\n }\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) {\n return false;\n }\n const objAKeys = Object.getOwnPropertyNames(a);\n const objBKeys = Object.getOwnPropertyNames(b);\n return objAKeys.length === objBKeys.length && objAKeys.every((key)=>a[key] === b[key]);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS11dGlscy9kaXN0L3NoYWxsb3dFcXVhbC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsOEJBQThCLEdBQUc7Ozs7Ozs7OztDQVNoQyxHQUFVLFNBQVNBLGFBQWFDLENBQUMsRUFBRUMsQ0FBQztJQUNqQyxJQUFJRCxNQUFNQyxLQUFLQyxPQUFPQyxFQUFFLENBQUNILEdBQUdDLElBQUk7UUFDNUIsT0FBTztJQUNYO0lBQ0EsSUFBSUcsTUFBTUMsT0FBTyxDQUFDTCxJQUFJO1FBQ2xCLElBQUksQ0FBQ0ksTUFBTUMsT0FBTyxDQUFDSixJQUFJO1lBQ25CLE9BQU87UUFDWDtRQUNBLElBQUlELEVBQUVNLE1BQU0sS0FBS0wsRUFBRUssTUFBTSxFQUFFO1lBQ3ZCLE9BQU87UUFDWDtRQUNBLElBQUksSUFBSUMsSUFBSSxHQUFHQSxJQUFJUCxFQUFFTSxNQUFNLEVBQUVDLElBQUk7WUFDN0IsSUFBSVAsQ0FBQyxDQUFDTyxFQUFFLEtBQUtOLENBQUMsQ0FBQ00sRUFBRSxFQUFFO2dCQUNmLE9BQU87WUFDWDtRQUNKO1FBQ0EsT0FBTztJQUNYLE9BQU8sSUFBSUgsTUFBTUMsT0FBTyxDQUFDSixJQUFJO1FBQ3pCLE9BQU87SUFDWDtJQUNBLElBQUksT0FBT0QsTUFBTSxZQUFZQSxNQUFNLFFBQVEsT0FBT0MsTUFBTSxZQUFZQSxNQUFNLE1BQU07UUFDNUUsT0FBTztJQUNYO0lBQ0EsTUFBTU8sV0FBV04sT0FBT08sbUJBQW1CLENBQUNUO0lBQzVDLE1BQU1VLFdBQVdSLE9BQU9PLG1CQUFtQixDQUFDUjtJQUM1QyxPQUFPTyxTQUFTRixNQUFNLEtBQUtJLFNBQVNKLE1BQU0sSUFBSUUsU0FBU0csS0FBSyxDQUFDLENBQUNDLE1BQU1aLENBQUMsQ0FBQ1ksSUFBSSxLQUFLWCxDQUFDLENBQUNXLElBQUk7QUFDekYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uL2ZyYW1ld29yay9lc20tdXRpbHMvZGlzdC9zaGFsbG93RXF1YWwuanM/M2M1MSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQG1vZHVsZSBAY2F0ZWdvcnkgVXRpbGl0eSAqLyAvKipcbiAqIENoZWNrcyB3aGV0aGVyIHR3byBvYmplY3RzIGFyZSBlcXVhbCwgdXNpbmcgYSBzaGFsbG93IGNvbXBhcmlzb24sIHNpbWlsYXIgdG8gUmVhY3QuXG4gKlxuICogSW4gZXNzZW5jZSwgc2hhbGxvd0VxdWFscyBlbnN1cmVzIHR3byBvYmplY3RzIGhhdmUgdGhlIHNhbWUgb3duIHByb3BlcnRpZXMgYW5kIHRoYXQgdGhlIHZhbHVlc1xuICogb2YgdGhlc2UgYXJlIGVxdWFsICg9PT0pIHRvIGVhY2ggb3RoZXIuXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0cyBhcmUgc2hhbGxvd2x5IGVxdWFsIHRvIGVhY2ggb3RoZXJcbiAqLyBleHBvcnQgZnVuY3Rpb24gc2hhbGxvd0VxdWFsKGEsIGIpIHtcbiAgICBpZiAoYSA9PT0gYiB8fCBPYmplY3QuaXMoYSwgYikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShiKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnIHx8IGEgPT09IG51bGwgfHwgdHlwZW9mIGIgIT09ICdvYmplY3QnIHx8IGIgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBvYmpBS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpO1xuICAgIGNvbnN0IG9iakJLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYik7XG4gICAgcmV0dXJuIG9iakFLZXlzLmxlbmd0aCA9PT0gb2JqQktleXMubGVuZ3RoICYmIG9iakFLZXlzLmV2ZXJ5KChrZXkpPT5hW2tleV0gPT09IGJba2V5XSk7XG59XG4iXSwibmFtZXMiOlsic2hhbGxvd0VxdWFsIiwiYSIsImIiLCJPYmplY3QiLCJpcyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImkiLCJvYmpBS2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJvYmpCS2V5cyIsImV2ZXJ5Iiwia2V5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-utils/dist/shallowEqual.js\n");
|
|
109
|
+
|
|
110
|
+
/***/ })
|
|
111
|
+
|
|
112
|
+
}]);
|