@openmrs/esm-app-shell 5.3.3-pre.1251 → 5.3.3-pre.1256
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 +98 -98
- package/dist/index.html +1 -1
- package/dist/{openmrs.098b05f4e6c77afd.js → openmrs.55697339bf2055a3.js} +2 -2
- package/dist/{openmrs.098b05f4e6c77afd.js.map → openmrs.55697339bf2055a3.js.map} +1 -1
- package/dist/service-worker.js +1 -1
- package/lib/esm-devtools-app/main.js +1 -1
- package/lib/esm-devtools-app/openmrs-esm-devtools-app.js +1 -1
- package/lib/esm-devtools-app/openmrs-esm-devtools-app.js.buildmanifest.json +2 -2
- package/lib/esm-devtools-app/routes.json +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 +2 -2
- package/lib/esm-implementer-tools-app/routes.json +1 -1
- package/lib/esm-login-app/main.js +1 -1
- package/lib/esm-login-app/openmrs-esm-login-app.js +1 -1
- package/lib/esm-login-app/openmrs-esm-login-app.js.buildmanifest.json +2 -2
- package/lib/esm-login-app/routes.json +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 +2 -2
- package/lib/esm-offline-tools-app/routes.json +1 -1
- package/lib/esm-primary-navigation-app/main.js +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 +2 -2
- package/lib/esm-primary-navigation-app/routes.json +1 -1
- package/lib/index.html +1 -1
- package/lib/openmrs.js +5 -5
- package/lib/service-worker.js +2 -2
- package/package.json +3 -3
- /package/dist/{openmrs.098b05f4e6c77afd.js.LICENSE.txt → openmrs.55697339bf2055a3.js.LICENSE.txt} +0 -0
package/lib/openmrs.js
CHANGED
|
@@ -6545,7 +6545,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
6545
6545
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
6546
6546
|
|
|
6547
6547
|
"use strict";
|
|
6548
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ defineConfigSchema: () => (/* binding */ defineConfigSchema),\n/* harmony export */ defineExtensionConfigSchema: () => (/* binding */ defineExtensionConfigSchema),\n/* harmony export */ getConfig: () => (/* binding */ getConfig),\n/* harmony export */ getConfigInternal: () => (/* binding */ getConfigInternal),\n/* harmony export */ processConfig: () => (/* binding */ processConfig),\n/* harmony export */ provide: () => (/* binding */ provide)\n/* harmony export */ });\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/equals.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/mergeDeepRight.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/omit.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/clone.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/reduce.js\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ \"../../framework/esm-config/src/types.ts\");\n/* harmony import */ var _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../validators/type-validators */ \"../../framework/esm-config/src/validators/type-validators.ts\");\n/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./state */ \"../../framework/esm-config/src/module-config/state.ts\");\n/** @module @category Config */ function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _array_with_holes(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction _array_without_holes(arr) {\n if (Array.isArray(arr)) return _array_like_to_array(arr);\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _iterable_to_array(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _iterable_to_array_limit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally{\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally{\n if (_d) throw _e;\n }\n }\n return _arr;\n}\nfunction _non_iterable_rest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _non_iterable_spread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _object_spread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _define_property(target, key, source[key]);\n });\n }\n return target;\n}\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _object_spread_props(target, source) {\n source = source != null ? source : {};\n if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _sliced_to_array(arr, i) {\n return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();\n}\nfunction _to_consumable_array(arr) {\n return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\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__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.subscribe(function(configState) {\n return computeModuleConfig(configState, _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.subscribe(function(tempConfigState) {\n return computeModuleConfig(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), tempConfigState);\n});\ncomputeImplementerToolsConfig(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.subscribe(function(configState) {\n return computeImplementerToolsConfig(configState, _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.subscribe(function(tempConfigState) {\n return computeImplementerToolsConfig(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), tempConfigState);\n});\ncomputeExtensionSlotConfigs(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.subscribe(function(configState) {\n return computeExtensionSlotConfigs(configState, _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.subscribe(function(tempConfigState) {\n return computeExtensionSlotConfigs(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), tempConfigState);\n});\ncomputeExtensionConfigs(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_2__.configExtensionStore.getState(), _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.subscribe(function(configState) {\n computeExtensionConfigs(configState, _state__WEBPACK_IMPORTED_MODULE_2__.configExtensionStore.getState(), _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_2__.configExtensionStore.subscribe(function(extensionState) {\n computeExtensionConfigs(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), extensionState, _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.subscribe(function(tempConfigState) {\n computeExtensionConfigs(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_2__.configExtensionStore.getState(), tempConfigState);\n});\nfunction computeModuleConfig(state, tempState) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(state.schemas)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var moduleName = _step.value;\n var config = getConfigForModule(moduleName, state, tempState);\n var moduleStore = (0,_state__WEBPACK_IMPORTED_MODULE_2__.getConfigStore)(moduleName);\n moduleStore.setState({\n loaded: true,\n config: config\n });\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction computeExtensionSlotConfigs(state, tempState) {\n var slotConfigs = getExtensionSlotConfigs(state, tempState);\n var newSlotStoreEntries = Object.fromEntries(Object.entries(slotConfigs).map(function(param) {\n var _param = _sliced_to_array(param, 2), slotName = _param[0], config = _param[1];\n return [\n slotName,\n {\n loaded: true,\n config: config\n }\n ];\n }));\n var slotStore = (0,_state__WEBPACK_IMPORTED_MODULE_2__.getExtensionSlotsConfigStore)();\n var oldState = slotStore.getState();\n var newState = {\n slots: _object_spread({}, oldState.slots, newSlotStoreEntries)\n };\n if (!(0,ramda__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(oldState, newState)) {\n slotStore.setState(newState);\n }\n}\nfunction computeImplementerToolsConfig(state, tempConfigState) {\n var config = getImplementerToolsConfig(state, tempConfigState);\n _state__WEBPACK_IMPORTED_MODULE_2__.implementerToolsConfigStore.setState({\n config: config\n });\n}\nfunction computeExtensionConfigs(configState, extensionState, tempConfigState) {\n var configs = {};\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = extensionState.mountedExtensions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var extension = _step.value;\n var config = computeExtensionConfig(extension.slotModuleName, extension.extensionModuleName, extension.slotName, extension.extensionId, configState, tempConfigState);\n configs[extension.slotName] = _object_spread_props(_object_spread({}, configs[extension.slotName]), _define_property({}, extension.extensionId, {\n config: config,\n loaded: true\n }));\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n (0,_state__WEBPACK_IMPORTED_MODULE_2__.getExtensionsConfigStore)().setState({\n configs: 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](http://o3-dev.docs.openmrs.org/#/main/config)\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 var enhancedSchema = (0,ramda__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(schema, implicitConfigSchema);\n var state = _state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState();\n _state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.setState({\n schemas: _object_spread_props(_object_spread({}, state.schemas), _define_property({}, moduleName, enhancedSchema))\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](http://o3-dev.docs.openmrs.org/#/main/config)\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 var enhancedSchema = (0,ramda__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(schema, implicitConfigSchema);\n var state = _state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState();\n if (state.schemas[extensionName]) {\n console.warn(\"Config schema for extension \".concat(extensionName, \" already exists. If there are multiple extensions with this same name, one will probably crash.\"));\n }\n _state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.setState({\n schemas: _object_spread_props(_object_spread({}, state.schemas), _define_property({}, extensionName, enhancedSchema))\n });\n}\nfunction provide(config) {\n var sourceName = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : \"provided\";\n var state = _state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState();\n _state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.setState({\n providedConfigs: _to_consumable_array(state.providedConfigs).concat([\n {\n source: sourceName,\n config: 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(function(resolve) {\n var update = function update(state) {\n if (state.loaded && state.config) {\n var config = (0,ramda__WEBPACK_IMPORTED_MODULE_5__[\"default\"])([\n \"Display conditions\",\n \"Translation overrides\"\n ], state.config);\n resolve(config);\n unsubscribe && unsubscribe();\n }\n };\n var store = (0,_state__WEBPACK_IMPORTED_MODULE_2__.getConfigStore)(moduleName);\n update(store.getState());\n var unsubscribe = store.subscribe(update);\n });\n}\n/** @internal */ function getConfigInternal(moduleName) {\n return new Promise(function(resolve) {\n var update = function update(state) {\n if (state.loaded && state.config) {\n var config = state.config;\n resolve(config);\n unsubscribe && unsubscribe();\n }\n };\n var store = (0,_state__WEBPACK_IMPORTED_MODULE_2__.getConfigStore)(moduleName);\n update(store.getState());\n var unsubscribe = store.subscribe(update);\n });\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 var 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 var _slotModuleConfig_extensionSlots, _slotModuleConfig_extensionSlots_slotName, _slotModuleConfig_extensionSlots_slotName_configure;\n var extensionName = getExtensionNameFromId(extensionId);\n var extensionConfigSchema = configState.schemas[extensionName];\n var nameOfSchemaSource = extensionConfigSchema ? extensionName : extensionModuleName;\n var providedConfigs = getProvidedConfigs(configState, tempConfigState);\n var slotModuleConfig = mergeConfigsFor(slotModuleName, providedConfigs);\n var _slotModuleConfig_extensionSlots_slotName_configure_extensionId;\n var configOverride = (_slotModuleConfig_extensionSlots_slotName_configure_extensionId = slotModuleConfig === null || slotModuleConfig === void 0 ? void 0 : (_slotModuleConfig_extensionSlots = slotModuleConfig.extensionSlots) === null || _slotModuleConfig_extensionSlots === void 0 ? void 0 : (_slotModuleConfig_extensionSlots_slotName = _slotModuleConfig_extensionSlots[slotName]) === null || _slotModuleConfig_extensionSlots_slotName === void 0 ? void 0 : (_slotModuleConfig_extensionSlots_slotName_configure = _slotModuleConfig_extensionSlots_slotName.configure) === null || _slotModuleConfig_extensionSlots_slotName_configure === void 0 ? void 0 : _slotModuleConfig_extensionSlots_slotName_configure[extensionId]) !== null && _slotModuleConfig_extensionSlots_slotName_configure_extensionId !== void 0 ? _slotModuleConfig_extensionSlots_slotName_configure_extensionId : {};\n var extensionConfig = mergeConfigsFor(nameOfSchemaSource, providedConfigs);\n var combinedConfig = mergeConfigs([\n extensionConfig,\n configOverride\n ]);\n // TODO: validate that a schema exists for the module\n var schema = extensionConfigSchema !== null && extensionConfigSchema !== void 0 ? extensionConfigSchema : configState.schemas[extensionModuleName];\n validateStructure(schema, combinedConfig, nameOfSchemaSource);\n var config = setDefaults(schema, combinedConfig);\n runAllValidatorsInConfigTree(schema, config, nameOfSchemaSource);\n delete config.extensionSlots;\n return config;\n}\nfunction getImplementerToolsConfig(configState, tempConfigState) {\n var result = getSchemaWithValuesAndSources((0,ramda__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(configState.schemas));\n var configsAndSources = _to_consumable_array(configState.providedConfigs.map(function(c) {\n return [\n c.config,\n c.source\n ];\n })).concat([\n [\n tempConfigState.config,\n \"temporary config\"\n ]\n ]);\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = configsAndSources[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var _step_value = _sliced_to_array(_step.value, 2), config = _step_value[0], source = _step_value[1];\n result = mergeConfigs([\n result,\n createValuesAndSourcesTree(config, source)\n ]);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return result;\n}\nfunction getSchemaWithValuesAndSources(schema) {\n if (schema.hasOwnProperty(\"_default\")) {\n return _object_spread_props(_object_spread({}, schema), {\n _value: schema._default,\n _source: \"default\"\n });\n } else if (isOrdinaryObject(schema)) {\n return Object.keys(schema).reduce(function(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(function(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 var allConfigs = mergeConfigs(getProvidedConfigs(configState, tempConfigState));\n var slotConfigPerModule = Object.keys(allConfigs).reduce(function(obj, key) {\n var _allConfigs_key;\n if ((_allConfigs_key = allConfigs[key]) === null || _allConfigs_key === void 0 ? void 0 : _allConfigs_key.extensionSlots) {\n var _allConfigs_key1;\n obj[key] = (_allConfigs_key1 = allConfigs[key]) === null || _allConfigs_key1 === void 0 ? void 0 : _allConfigs_key1.extensionSlots;\n }\n return obj;\n }, {});\n validateAllExtensionSlotConfigs(slotConfigPerModule);\n var slotConfigs = Object.keys(slotConfigPerModule).reduce(function(obj, key) {\n obj = _object_spread({}, obj, slotConfigPerModule[key]);\n return obj;\n }, {});\n return slotConfigs;\n}\nfunction validateAllExtensionSlotConfigs(slotConfigPerModule) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.entries(slotConfigPerModule)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var _step_value = _sliced_to_array(_step.value, 2), moduleName = _step_value[0], configBySlotName = _step_value[1];\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;\n try {\n for(var _iterator1 = Object.entries(configBySlotName)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){\n var _step_value1 = _sliced_to_array(_step1.value, 2), slotName = _step_value1[0], config = _step_value1[1];\n validateExtensionSlotConfig(config, moduleName, slotName);\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally{\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction validateExtensionSlotConfig(config, moduleName, slotName) {\n var errorPrefix = \"Extension slot config '\".concat(moduleName, \".extensionSlots.\").concat(slotName);\n var invalidKeys = Object.keys(config).filter(function(k) {\n return ![\n \"add\",\n \"remove\",\n \"order\",\n \"configure\"\n ].includes(k);\n });\n if (invalidKeys.length) {\n console.error(errorPrefix + \"' contains invalid keys '\".concat(invalidKeys.join(\"', '\"), \"'\"));\n }\n if (config.add) {\n if (!Array.isArray(config.add) || !config.add.every(function(n) {\n return typeof n === \"string\";\n })) {\n console.error(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(function(n) {\n return typeof n === \"string\";\n })) {\n console.error(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(function(n) {\n return typeof n === \"string\";\n })) {\n console.error(errorPrefix + \".order' is invalid. Must be an array of strings (extension IDs)\");\n }\n }\n if (config.configure) {\n if (!isOrdinaryObject(config.configure)) {\n console.error(errorPrefix + \".configure' is invalid. Must be an object with extension IDs for keys\");\n }\n }\n}\nfunction getProvidedConfigs(configState, tempConfigState) {\n return _to_consumable_array(configState.providedConfigs.map(function(c) {\n return c.config;\n })).concat([\n tempConfigState.config\n ]);\n}\nfunction validateConfigSchema(moduleName, schema) {\n var keyPath = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : \"\";\n var updateMessage = \"Please verify that you are running the latest version and, if so, alert the maintainer.\";\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n var _loop = function() {\n var key = _step.value;\n var thisKeyPath = keyPath + (keyPath && \".\") + key;\n var schemaPart = schema[key];\n if (thisKeyPath === \"Display conditions\") {\n console.error(\"\".concat(moduleName, ' declares a configuration option called \"Display conditions\"; the \"Display conditions\" option is a reserved name. ').concat(updateMessage));\n }\n if (thisKeyPath === \"Translation overrides\") {\n console.error(\"\".concat(moduleName, ' declares a configuration option called \"Translation overrides\"; the \"Translation overrides\" option is a reserved name. ').concat(updateMessage));\n }\n if (!isOrdinaryObject(schemaPart)) {\n console.error(\"\".concat(moduleName, \" has bad config schema definition for key '\").concat(thisKeyPath, \"'. \").concat(updateMessage));\n return \"continue\";\n }\n if (!schemaPart.hasOwnProperty(\"_default\")) {\n // recurse for nested config keys\n validateConfigSchema(moduleName, schemaPart, thisKeyPath);\n }\n var elements = schemaPart._elements;\n if (hasObjectSchema(elements)) {\n validateConfigSchema(moduleName, elements, thisKeyPath + \"._elements\");\n }\n if (schemaPart._validators) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = schemaPart._validators[Symbol.iterator](), _step1; !(_iteratorNormalCompletion = (_step1 = _iterator.next()).done); _iteratorNormalCompletion = true){\n var validator = _step1.value;\n if (typeof validator !== \"function\") {\n console.error(\"\".concat(moduleName, \" has invalid validator for key '\").concat(thisKeyPath, \"' \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: validators must be functions that return either \" + \"undefined or an error string. Received \".concat(validator, \".\"));\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n var valueType = schemaPart._type;\n if (valueType && !Object.values(_types__WEBPACK_IMPORTED_MODULE_0__.Type).includes(valueType)) {\n console.error(\"\".concat(moduleName, \" has invalid type for key '\").concat(thisKeyPath, \"' \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: the allowed types are \".concat(Object.values(_types__WEBPACK_IMPORTED_MODULE_0__.Type).join(\", \"), \". \") + \"Received '\".concat(valueType, \"'\"));\n }\n if (Object.keys(schemaPart).every(function(k) {\n return [\n \"_description\",\n \"_validators\",\n \"_elements\",\n \"_type\"\n ].includes(k);\n }) && !keyPath.includes(\"._elements\")) {\n console.error(\"\".concat(moduleName, \" has bad config schema definition for key '\").concat(thisKeyPath, \"'. \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: all config elements must have a default. \" + \"Received \".concat(JSON.stringify(schemaPart)));\n }\n if (elements && valueType && ![\n _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array,\n _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object\n ].includes(valueType)) {\n console.error(\"\".concat(moduleName, \" has bad config schema definition for key '\").concat(thisKeyPath, \"'. \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: the 'elements' key only works with '_type' equal to 'Array' or 'Object'. \" + \"Received \".concat(JSON.stringify(valueType)));\n }\n };\n for(var _iterator = Object.keys(schema).filter(function(k) {\n return !k.startsWith(\"_\");\n })[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction getConfigForModule(moduleName, configState, tempConfigState) {\n if (!configState.schemas.hasOwnProperty(moduleName)) {\n throw Error(\"No config schema has been defined for \" + moduleName);\n }\n var schema = configState.schemas[moduleName];\n var inputConfig = mergeConfigsFor(moduleName, getProvidedConfigs(configState, tempConfigState));\n validateStructure(schema, inputConfig, moduleName);\n var config = setDefaults(schema, inputConfig);\n runAllValidatorsInConfigTree(schema, config, moduleName);\n delete config.extensionSlots;\n return config;\n}\nfunction mergeConfigsFor(moduleName, allConfigs) {\n var allConfigsForModule = allConfigs.map(function(param) {\n var c = param[moduleName];\n return c;\n }).filter(function(c) {\n return !!c;\n });\n return mergeConfigs(allConfigsForModule);\n}\nfunction mergeConfigs(configs) {\n var mergeDeepAll = (0,ramda__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(ramda__WEBPACK_IMPORTED_MODULE_4__[\"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) {\n var keyPath = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : \"\";\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n // validate each constituent element\n for(var _iterator = Object.keys(config)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var key = _step.value;\n var value = config[key];\n var thisKeyPath = keyPath + \".\" + key;\n var schemaPart = schema[key];\n if (!schema.hasOwnProperty(key)) {\n if (!(key === \"extensionSlots\" && keyPath !== \"\")) {\n console.error(\"Unknown config key '\".concat(thisKeyPath, \"' provided. Ignoring.\"));\n }\n continue;\n }\n validateBranchStructure(schemaPart, value, thisKeyPath);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction validateBranchStructure(schemaPart, value, keyPath) {\n checkType(keyPath, schemaPart._type, value);\n if (isOrdinaryObject(value)) {\n // structurally validate only if there's elements specified\n // or there's no `_default` value (which would indicate a freeform object)\n if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object) {\n validateDictionaryStructure(schemaPart, value, keyPath);\n } else if (!schemaPart.hasOwnProperty(\"_default\")) {\n // recurse to validate nested object structure\n validateStructure(schemaPart, value, keyPath);\n }\n } else {\n if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array) {\n validateArrayStructure(schemaPart, value, keyPath);\n }\n }\n}\nfunction validateDictionaryStructure(dictionarySchema, config, keyPath) {\n if (dictionarySchema._elements) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(config)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var key = _step.value;\n var value = config[key];\n validateStructure(dictionarySchema._elements, value, \"\".concat(keyPath, \".\").concat(key));\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n}\nfunction validateArrayStructure(arraySchema, value, keyPath) {\n // if there is an array element object schema, verify that elements match it\n if (hasObjectSchema(arraySchema._elements)) {\n for(var i = 0; i < value.length; i++){\n validateBranchStructure(arraySchema._elements, value[i], \"\".concat(keyPath, \"[\").concat(i, \"]\"));\n }\n }\n for(var i1 = 0; i1 < value.length; i1++){\n var _arraySchema__elements;\n checkType(\"\".concat(keyPath, \"[\").concat(i1, \"]\"), (_arraySchema__elements = arraySchema._elements) === null || _arraySchema__elements === void 0 ? void 0 : _arraySchema__elements._type, value[i1]);\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) {\n var keyPath = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : \"\";\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 var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(config)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var key = _step.value;\n var value = config[key];\n var thisKeyPath = keyPath + \".\" + key;\n var schemaPart = schema[key];\n if (schema._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object && schema._elements) {\n runAllValidatorsInConfigTree(schema._elements, value, thisKeyPath);\n } else {\n runAllValidatorsInConfigTree(schemaPart, value, thisKeyPath);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n } else if (Array.isArray(config) && schema._elements) {\n for(var i = 0; i < config.length; i++){\n runAllValidatorsInConfigTree(schema._elements, config[i], \"\".concat(keyPath, \"[\").concat(i, \"]\"));\n }\n }\n }\n}\nfunction checkType(keyPath, _type, value) {\n if (_type) {\n var validator = {\n Array: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isArray,\n Boolean: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isBoolean,\n ConceptUuid: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n Number: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isNumber,\n Object: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isObject,\n String: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isString,\n UUID: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n PersonAttributeTypeUuid: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n PatientIdentifierTypeUuid: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid\n };\n runValidators(keyPath, [\n validator[_type]\n ], value);\n }\n}\nfunction runValidators(keyPath, validators, value) {\n if (validators) {\n try {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = validators[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var validator = _step.value;\n var validatorResult = validator(value);\n if (typeof validatorResult === \"string\") {\n if (typeof value === \"object\") {\n console.error(\"Invalid configuration for \".concat(keyPath, \": \").concat(validatorResult));\n } else {\n console.error(\"Invalid configuration value \".concat(value, \" for \").concat(keyPath, \": \").concat(validatorResult));\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n } catch (e) {\n console.error('Skipping invalid validator at \"'.concat(keyPath, '\". Encountered error\\n\t').concat(e));\n }\n }\n}\n// Recursively fill in the config with values from the schema.\nvar setDefaults = function(schema, inputConfig) {\n var config = (0,ramda__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(inputConfig);\n if (!schema) {\n return config;\n }\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n var _loop = function() {\n var key = _step.value;\n var configPart = config[key];\n var 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(\"_default\")) {\n // We assume that schemaPart defines a config value, since it has\n // a property `_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 var elements = schemaPart._elements;\n if (configPart && hasObjectSchema(elements)) {\n if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array && Array.isArray(configPart)) {\n var configWithDefaults = configPart.map(function(conf) {\n return setDefaults(elements, conf);\n });\n config[key] = configWithDefaults;\n } else if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(configPart)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion = (_step1 = _iterator.next()).done); _iteratorNormalCompletion = true){\n var objectKey = _step1.value;\n configPart[objectKey] = setDefaults(elements, configPart[objectKey]);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n }\n } else if (isOrdinaryObject(schemaPart)) {\n // Since schemaPart has no property \"_default\", 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 var selectedConfigPart = config.hasOwnProperty(key) ? configPart : {};\n if (isOrdinaryObject(selectedConfigPart)) {\n config[key] = setDefaults(schemaPart, selectedConfigPart);\n }\n }\n };\n for(var _iterator = Object.keys(schema)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return config;\n};\nfunction hasObjectSchema(elementsSchema) {\n return !!elementsSchema && Object.keys(elementsSchema).filter(function(e) {\n return ![\n \"_default\",\n \"_validators\"\n ].includes(e);\n }).length > 0;\n}\nfunction isOrdinaryObject(value) {\n return typeof value === \"object\" && !Array.isArray(value) && value !== null;\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 var _extensionId_split = _sliced_to_array(extensionId.split(\"#\"), 1), extensionName = _extensionId_split[0];\n return extensionName;\n}\n/**\n * The implicitConfigSchema is implicitly included in every configuration schema\n */ var implicitConfigSchema = {\n \"Display conditions\": {\n privileges: {\n _description: \"The privilege(s) the user must have to use this extension\",\n _type: _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array,\n _default: []\n }\n },\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__WEBPACK_IMPORTED_MODULE_0__.Type.Object,\n _default: {}\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvc3JjL21vZHVsZS1jb25maWcvbW9kdWxlLWNvbmZpZy50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZCQUE2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDdUM7QUFDZ0Q7QUFDWDtBQVl4RjtBQUlqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1CQyxHQUNEbUIsb0JBQW9CUCx1REFBbUJBLENBQUNRLFFBQVEsSUFBSUgsd0RBQW9CQSxDQUFDRyxRQUFRO0FBQ2pGUix1REFBbUJBLENBQUNTLFNBQVMsQ0FBQyxTQUFDQztXQUFnQkgsb0JBQW9CRyxhQUFhTCx3REFBb0JBLENBQUNHLFFBQVE7O0FBQzdHSCx3REFBb0JBLENBQUNJLFNBQVMsQ0FBQyxTQUFDRTtXQUM5Qkosb0JBQW9CUCx1REFBbUJBLENBQUNRLFFBQVEsSUFBSUc7O0FBR3REQyw4QkFBOEJaLHVEQUFtQkEsQ0FBQ1EsUUFBUSxJQUFJSCx3REFBb0JBLENBQUNHLFFBQVE7QUFDM0ZSLHVEQUFtQkEsQ0FBQ1MsU0FBUyxDQUFDLFNBQUNDO1dBQzdCRSw4QkFBOEJGLGFBQWFMLHdEQUFvQkEsQ0FBQ0csUUFBUTs7QUFFMUVILHdEQUFvQkEsQ0FBQ0ksU0FBUyxDQUFDLFNBQUNFO1dBQzlCQyw4QkFBOEJaLHVEQUFtQkEsQ0FBQ1EsUUFBUSxJQUFJRzs7QUFHaEVFLDRCQUE0QmIsdURBQW1CQSxDQUFDUSxRQUFRLElBQUlILHdEQUFvQkEsQ0FBQ0csUUFBUTtBQUN6RlIsdURBQW1CQSxDQUFDUyxTQUFTLENBQUMsU0FBQ0M7V0FDN0JHLDRCQUE0QkgsYUFBYUwsd0RBQW9CQSxDQUFDRyxRQUFROztBQUV4RUgsd0RBQW9CQSxDQUFDSSxTQUFTLENBQUMsU0FBQ0U7V0FDOUJFLDRC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QzJJLGdCQUFnQnZELE1BQU0sQ0FBQyxTQUFDaUQ7ZUFBTSxDQUFDO1lBQUM7WUFBWTtTQUFjLENBQUMvQyxRQUFRLENBQUMrQztPQUFJOUMsTUFBTSxHQUFHO0FBRXJIO0FBRUEsU0FBU2IsaUJBQWlCeUMsS0FBSyxFQUFFO0lBQy9CLE9BQU8sT0FBT0EsVUFBVSxZQUFZLENBQUN4QixNQUFNcEgsT0FBTyxDQUFDNEksVUFBVUEsVUFBVSxJQUFJO0FBQzdFO0FBRUE7OztDQUdDLEdBQ0QsU0FBUzdELHVCQUF1QjVCLFdBQW1CLEVBQUU7SUFDbkQsSUFBd0JBLHNDQUFBQSxZQUFZa0gsS0FBSyxDQUFDLFVBQW5DM0csZ0JBQWlCUDtJQUN4QixPQUFPTztBQUNUO0FBRUE7O0NBRUMsR0FDRCxJQUFNRix1QkFBcUM7SUFDekMsc0JBQXNCO1FBQ3BCOEcsWUFBWTtZQUNWQyxjQUFjO1lBQ2RwQyxPQUFPcEksd0NBQUlBLENBQUNxSCxLQUFLO1lBQ2pCbkIsVUFBVSxFQUFFO1FBQ2Q7SUFDRjtJQUNBLHlCQUF5QjtRQUN2QnNFLGNBQ0U7UUFDRnBDLE9BQU9wSSx3Q0FBSUEsQ0FBQ3lCLE1BQU07UUFDbEJ5RSxVQUFVLENBQUM7SUFDYjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLWNvbmZpZy9zcmMvbW9kdWxlLWNvbmZpZy9tb2R1bGUtY29uZmlnLnRzPzdjYTEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBtb2R1bGUgQGNhdGVnb3J5IENvbmZpZyAqL1xuaW1wb3J0IHsgY2xvbmUsIHJlZHVjZSwgbWVyZ2VEZWVwUmlnaHQsIGVxdWFscywgb21pdCB9IGZyb20gJ3JhbWRhJztcbmltcG9ydCB7IENvbmZpZywgQ29uZmlnT2JqZWN0LCBDb25maWdTY2hlbWEsIEV4dGVuc2lvblNsb3RDb25maWcsIEV4dGVuc2lvblNsb3RDb25maWdPYmplY3QsIFR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0Jvb2xlYW4sIGlzVXVpZCwgaXNOdW1iZXIsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uL3ZhbGlkYXRvcnMvdHlwZS12YWxpZGF0b3JzJztcbmltcG9ydCB7XG4gIENvbmZpZ0V4dGVuc2lvblN0b3JlLFxuICBDb25maWdJbnRlcm5hbFN0b3JlLFxuICBjb25maWdJbnRlcm5hbFN0b3JlLFxuICBDb25maWdTdG9yZSxcbiAgY29uZmlnRXh0ZW5zaW9uU3RvcmUsXG4gIGdldENvbmZpZ1N0b3JlLFxuICBnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUsXG4gIGltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZSxcbiAgdGVtcG9yYXJ5Q29uZmlnU3RvcmUsXG4gIGdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUsXG59IGZyb20gJy4vc3RhdGUnO1xuaW1wb3J0IHR5cGUge30gZnJvbSAnQG9wZW5tcnMvZXNtLWdsb2JhbHMnO1xuaW1wb3J0IHsgVGVtcG9yYXJ5Q29uZmlnU3RvcmUgfSBmcm9tICcuLic7XG5cbi8qKlxuICogU3RvcmUgc2V0dXBcbiAqXG4gKlxuICogU2V0IHVwIHN0b3JlcyBhbmQgc3Vic2NyaXB0aW9ucyBzbyB0aGF0IGlucHV0cyBnZXQgcHJvY2Vzc2VkIGFwcHJvcHJpYXRlbHkuXG4gKlxuICogVGhlcmUgYXJlICppbnB1dCogc3RvcmVzIGFuZCAqb3V0cHV0KiBzdG9yZXMuIFRoZSAqaW5wdXQqIHN0b3Jlc1xuICogYXJlIGNvbmZpZ0ludGVybmFsU3RvcmUsIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLCBhbmQgY29uZmlnRXh0ZW5zaW9uU3RvcmUuIFRoZVxuICogb3V0cHV0IHN0b3JlcyBhcmUgc2V0IGluIHRoZSBgY29tcHV0ZS4uLmAgZnVuY3Rpb25zLiBUaGV5IGFyZSB0aGUgbW9kdWxlXG4gKiBjb25maWcgc3RvcmVzLCB0aGUgZXh0ZW5zaW9uIHNsb3QgY29uZmlnIHN0b3JlcyAoYnkgbW9kdWxlKSwgdGhlIGV4dGVuc2lvblxuICogY29uZmlnIHN0b3JlcywgYW5kIHRoZSBpbXBsZW1lbnRlciB0b29scyBjb25maWcgc3RvcmUuXG4gKlxuICogVGhpcyBjb2RlIHNldHMgdXAgdGhlIHN1YnNjcmlwdGlvbnMgc28gdGhhdCB3aGVuIGFuIGlucHV0IHN0b3JlIGNoYW5nZXMsXG4gKiB0aGUgY29ycmVjdCBzZXQgb2Ygb3V0cHV0IHN0b3JlcyBhcmUgdXBkYXRlZC5cbiAqXG4gKiBBbGwgYGNvbXB1dGUuLi5gIGZ1bmN0aW9ucyBleGNlcHQgYGNvbXB1dGVFeHRlbnNpb25Db25maWdzYCBhcmUgcHVyZVxuICogKG9yIGFyZSBzdXBwb3NlZCB0byBiZSksIG90aGVyIHRoYW4gdGhlIGZhY3QgdGhhdCB0aGV5IGFsbCBgc2V0U3RhdGVgXG4gKiBzdG9yZSB2YWx1ZXMgYXQgdGhlIGVuZC4gYGNvbXB1dGVFeHRlbnNpb25Db25maWdzYCBjYWxscyBgZ2V0R2xvYmFsU3RvcmVgLFxuICogd2hpY2ggY3JlYXRlcyBzdG9yZXMuXG4gKi9cbmNvbXB1dGVNb2R1bGVDb25maWcoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbmNvbmZpZ0ludGVybmFsU3RvcmUuc3Vic2NyaWJlKChjb25maWdTdGF0ZSkgPT4gY29tcHV0ZU1vZHVsZUNvbmZpZyhjb25maWdTdGF0ZSwgdGVtcG9yYXJ5Q29uZmlnU3RvcmUuZ2V0U3RhdGUoKSkpO1xudGVtcG9yYXJ5Q29uZmlnU3RvcmUuc3Vic2NyaWJlKCh0ZW1wQ29uZmlnU3RhdGUpID0+XG4gIGNvbXB1dGVNb2R1bGVDb25maWcoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wQ29uZmlnU3RhdGUpLFxuKTtcblxuY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWcoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbmNvbmZpZ0ludGVybmFsU3RvcmUuc3Vic2NyaWJlKChjb25maWdTdGF0ZSkgPT5cbiAgY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWcoY29uZmlnU3RhdGUsIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpLFxuKTtcbnRlbXBvcmFyeUNvbmZpZ1N0b3JlLnN1YnNjcmliZSgodGVtcENvbmZpZ1N0YXRlKSA9PlxuICBjb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIHRlbXBDb25maWdTdGF0ZSksXG4pO1xuXG5jb21wdXRlRXh0ZW5zaW9uU2xvdENvbmZpZ3MoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbmNvbmZpZ0ludGVybmFsU3RvcmUuc3Vic2NyaWJlKChjb25maWdTdGF0ZSkgPT5cbiAgY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKSxcbik7XG50ZW1wb3JhcnlDb25maWdTdG9yZS5zdWJzY3JpYmUoKHRlbXBDb25maWdTdGF0ZSkgPT5cbiAgY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzKGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKSwgdGVtcENvbmZpZ1N0YXRlKSxcbik7XG5cbmNvbXB1dGVFeHRlbnNpb25Db25maWdzKFxuICBjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksXG4gIGNvbmZpZ0V4dGVuc2lvblN0b3JlLmdldFN0YXRlKCksXG4gIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCksXG4pO1xuY29uZmlnSW50ZXJuYWxTdG9yZS5zdWJzY3JpYmUoKGNvbmZpZ1N0YXRlKSA9PiB7XG4gIGNvbXB1dGVFeHRlbnNpb25Db25maWdzKGNvbmZpZ1N0YXRlLCBjb25maWdFeHRlbnNpb25TdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbn0pO1xuY29uZmlnRXh0ZW5zaW9uU3RvcmUuc3Vic2NyaWJlKChleHRlbnNpb25TdGF0ZSkgPT4ge1xuICBjb21wdXRlRXh0ZW5zaW9uQ29uZmlncyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIGV4dGVuc2lvblN0YXRlLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbn0pO1xudGVtcG9yYXJ5Q29uZmlnU3RvcmUuc3Vic2NyaWJlKCh0ZW1wQ29uZmlnU3RhdGUpID0+IHtcbiAgY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCBjb25maWdFeHRlbnNpb25TdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wQ29uZmlnU3RhdGUpO1xufSk7XG5cbmZ1bmN0aW9uIGNvbXB1dGVNb2R1bGVDb25maWcoc3RhdGU6IENvbmZpZ0ludGVybmFsU3RvcmUsIHRlbXBTdGF0ZTogVGVtcG9yYXJ5Q29uZmlnU3RvcmUpIHtcbiAgZm9yIChsZXQgbW9kdWxlTmFtZSBvZiBPYmplY3Qua2V5cyhzdGF0ZS5zY2hlbWFzKSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zvck1vZHVsZShtb2R1bGVOYW1lLCBzdGF0ZSwgdGVtcFN0YXRlKTtcbiAgICBjb25zdCBtb2R1bGVTdG9yZSA9IGdldENvbmZpZ1N0b3JlKG1vZHVsZU5hbWUpO1xuICAgIG1vZHVsZVN0b3JlLnNldFN0YXRlKHsgbG9hZGVkOiB0cnVlLCBjb25maWcgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzKHN0YXRlOiBDb25maWdJbnRlcm5hbFN0b3JlLCB0ZW1wU3RhdGU6IFRlbXBvcmFyeUNvbmZpZ1N0b3JlKSB7XG4gIGNvbnN0IHNsb3RDb25maWdzID0gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ3Moc3RhdGUsIHRlbXBTdGF0ZSk7XG4gIGNvbnN0IG5ld1Nsb3RTdG9yZUVudHJpZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoc2xvdENvbmZpZ3MpLm1hcCgoW3Nsb3ROYW1lLCBjb25maWddKSA9PiBbc2xvdE5hbWUsIHsgbG9hZGVkOiB0cnVlLCBjb25maWcgfV0pLFxuICApO1xuICBjb25zdCBzbG90U3RvcmUgPSBnZXRFeHRlbnNpb25TbG90c0NvbmZpZ1N0b3JlKCk7XG4gIGNvbnN0IG9sZFN0YXRlID0gc2xvdFN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IG5ld1N0YXRlID0geyBzbG90czogeyAuLi5vbGRTdGF0ZS5zbG90cywgLi4ubmV3U2xvdFN0b3JlRW50cmllcyB9IH07XG4gIGlmICghZXF1YWxzKG9sZFN0YXRlLCBuZXdTdGF0ZSkpIHtcbiAgICBzbG90U3RvcmUuc2V0U3RhdGUobmV3U3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnKHN0YXRlOiBDb25maWdJbnRlcm5hbFN0b3JlLCB0ZW1wQ29uZmlnU3RhdGU6IFRlbXBvcmFyeUNvbmZpZ1N0b3JlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldEltcGxlbWVudGVyVG9vbHNDb25maWcoc3RhdGUsIHRlbXBDb25maWdTdGF0ZSk7XG4gIGltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZS5zZXRTdGF0ZSh7IGNvbmZpZyB9KTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MoXG4gIGNvbmZpZ1N0YXRlOiBDb25maWdJbnRlcm5hbFN0b3JlLFxuICBleHRlbnNpb25TdGF0ZTogQ29uZmlnRXh0ZW5zaW9uU3RvcmUsXG4gIHRlbXBDb25maWdTdGF0ZTogVGVtcG9yYXJ5Q29uZmlnU3RvcmUsXG4pIHtcbiAgY29uc3QgY29uZmlncyA9IHt9O1xuICBmb3IgKGxldCBleHRlbnNpb24gb2YgZXh0ZW5zaW9uU3RhdGUubW91bnRlZEV4dGVuc2lvbnMpIHtcbiAgICBjb25zdCBjb25maWcgPSBjb21wdXRlRXh0ZW5zaW9uQ29uZmlnKFxuICAgICAgZXh0ZW5zaW9uLnNsb3RNb2R1bGVOYW1lLFxuICAgICAgZXh0ZW5zaW9uLmV4dGVuc2lvbk1vZHVsZU5hbWUsXG4gICAgICBleHRlbnNpb24uc2xvdE5hbWUsXG4gICAgICBleHRlbnNpb24uZXh0ZW5zaW9uSWQsXG4gICAgICBjb25maWdTdGF0ZSxcbiAgICAgIHRlbXBDb25maWdTdGF0ZSxcbiAgICApO1xuICAgIGNvbmZpZ3NbZXh0ZW5zaW9uLnNsb3ROYW1lXSA9IHtcbiAgICAgIC4uLmNvbmZpZ3NbZXh0ZW5zaW9uLnNsb3ROYW1lXSxcbiAgICAgIFtleHRlbnNpb24uZXh0ZW5zaW9uSWRdOiB7IGNvbmZpZywgbG9hZGVkOiB0cnVlIH0sXG4gICAgfTtcbiAgfVxuICBnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUoKS5zZXRTdGF0ZSh7IGNvbmZpZ3MgfSk7XG59XG5cbi8qXG4gKiBBUElcbiAqXG4gKi9cblxuLyoqXG4gKiBUaGlzIGRlZmluZXMgYSBjb25maWd1cmF0aW9uIHNjaGVtYSBmb3IgYSBtb2R1bGUuIFRoZSBzY2hlbWEgdGVsbHMgdGhlXG4gKiBjb25maWd1cmF0aW9uIHN5c3RlbSBob3cgdGhlIG1vZHVsZSBjYW4gYmUgY29uZmlndXJlZC4gSXQgc3BlY2lmaWVzXG4gKiB3aGF0IG1ha2VzIGNvbmZpZ3VyYXRpb24gdmFsaWQgb3IgaW52YWxpZC5cbiAqXG4gKiBTZWUgW0NvbmZpZ3VyYXRpb24gU3lzdGVtXShodHRwOi8vbzMtZGV2LmRvY3Mub3Blbm1ycy5vcmcvIy9tYWluL2NvbmZpZylcbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlZmluaW5nIGEgY29uZmlnIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0gbW9kdWxlTmFtZSBOYW1lIG9mIHRoZSBtb2R1bGUgdGhlIHNjaGVtYSBpcyBiZWluZyBkZWZpbmVkIGZvci4gR2VuZXJhbGx5XG4gKiAgIHNob3VsZCBiZSB0aGUgb25lIGluIHdoaWNoIHRoZSBgZGVmaW5lQ29uZmlnU2NoZW1hYCBjYWxsIHRha2VzIHBsYWNlLlxuICogQHBhcmFtIHNjaGVtYSBUaGUgY29uZmlnIHNjaGVtYSBmb3IgdGhlIG1vZHVsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWU6IHN0cmluZywgc2NoZW1hOiBDb25maWdTY2hlbWEpIHtcbiAgdmFsaWRhdGVDb25maWdTY2hlbWEobW9kdWxlTmFtZSwgc2NoZW1hKTtcbiAgY29uc3QgZW5oYW5jZWRTY2hlbWEgPSBtZXJnZURlZXBSaWdodChzY2hlbWEsIGltcGxpY2l0Q29uZmlnU2NoZW1hKSBhcyBDb25maWdTY2hlbWE7XG5cbiAgY29uc3Qgc3RhdGUgPSBjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbmZpZ0ludGVybmFsU3RvcmUuc2V0U3RhdGUoe1xuICAgIHNjaGVtYXM6IHsgLi4uc3RhdGUuc2NoZW1hcywgW21vZHVsZU5hbWVdOiBlbmhhbmNlZFNjaGVtYSB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGRlZmluZXMgYSBjb25maWd1cmF0aW9uIHNjaGVtYSBmb3IgYW4gZXh0ZW5zaW9uLiBXaGVuIGEgc2NoZW1hIGlzIGRlZmluZWRcbiAqIGZvciBhbiBleHRlbnNpb24sIHRoYXQgZXh0ZW5zaW9uIHdpbGwgcmVjZWl2ZSB0aGUgY29uZmlndXJhdGlvbiBjb3JyZXNwb25kaW5nXG4gKiB0byB0aGF0IHNjaGVtYSwgcmF0aGVyIHRoYW4gdGhlIGNvbmZpZ3VyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGUgbW9kdWxlXG4gKiBpbiB3aGljaCBpdCBpcyBkZWZpbmVkLlxuICpcbiAqIFRoZSBzY2hlbWEgdGVsbHMgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGhvdyB0aGUgbW9kdWxlIGNhbiBiZSBjb25maWd1cmVkLlxuICogSXQgc3BlY2lmaWVzIHdoYXQgbWFrZXMgY29uZmlndXJhdGlvbiB2YWxpZCBvciBpbnZhbGlkLlxuICpcbiAqIFNlZSBbQ29uZmlndXJhdGlvbiBTeXN0ZW1dKGh0dHA6Ly9vMy1kZXYuZG9jcy5vcGVubXJzLm9yZy8jL21haW4vY29uZmlnKVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGVmaW5pbmcgYSBjb25maWcgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSBleHRlbnNpb25OYW1lIE5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0aGUgc2NoZW1hIGlzIGJlaW5nIGRlZmluZWQgZm9yLlxuICogICBTaG91bGQgbWF0Y2ggdGhlIGBuYW1lYCBvZiBvbmUgb2YgdGhlIGBleHRlbnNpb25zYCBlbnRyaWVzIGJlaW5nIHJldHVybmVkXG4gKiAgIGJ5IGBzZXR1cE9wZW5NUlNgLlxuICogQHBhcmFtIHNjaGVtYSBUaGUgY29uZmlnIHNjaGVtYSBmb3IgdGhlIGV4dGVuc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRXh0ZW5zaW9uQ29uZmlnU2NoZW1hKGV4dGVuc2lvbk5hbWU6IHN0cmluZywgc2NoZW1hOiBDb25maWdTY2hlbWEpIHtcbiAgdmFsaWRhdGVDb25maWdTY2hlbWEoZXh0ZW5zaW9uTmFtZSwgc2NoZW1hKTtcbiAgY29uc3QgZW5oYW5jZWRTY2hlbWEgPSBtZXJnZURlZXBSaWdodChzY2hlbWEsIGltcGxpY2l0Q29uZmlnU2NoZW1hKSBhcyBDb25maWdTY2hlbWE7XG5cbiAgY29uc3Qgc3RhdGUgPSBjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCk7XG4gIGlmIChzdGF0ZS5zY2hlbWFzW2V4dGVuc2lvbk5hbWVdKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYENvbmZpZyBzY2hlbWEgZm9yIGV4dGVuc2lvbiAke2V4dGVuc2lvbk5hbWV9IGFscmVhZHkgZXhpc3RzLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZXh0ZW5zaW9ucyB3aXRoIHRoaXMgc2FtZSBuYW1lLCBvbmUgd2lsbCBwcm9iYWJseSBjcmFzaC5gLFxuICAgICk7XG4gIH1cblxuICBjb25maWdJbnRlcm5hbFN0b3JlLnNldFN0YXRlKHtcbiAgICBzY2hlbWFzOiB7IC4uLnN0YXRlLnNjaGVtYXMsIFtleHRlbnNpb25OYW1lXTogZW5oYW5jZWRTY2hlbWEgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlKGNvbmZpZzogQ29uZmlnLCBzb3VyY2VOYW1lID0gJ3Byb3ZpZGVkJykge1xuICBjb25zdCBzdGF0ZSA9IGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uZmlnSW50ZXJuYWxTdG9yZS5zZXRTdGF0ZSh7XG4gICAgcHJvdmlkZWRDb25maWdzOiBbLi4uc3RhdGUucHJvdmlkZWRDb25maWdzLCB7IHNvdXJjZTogc291cmNlTmFtZSwgY29uZmlnIH1dLFxuICB9KTtcbn1cblxuLyoqXG4gKiBBIHByb21pc2UtYmFzZWQgd2F5IHRvIGFjY2VzcyB0aGUgY29uZmlnIGFzIHNvb24gYXMgaXQgaXMgZnVsbHkgbG9hZGVkLlxuICogSWYgaXQgaXMgYWxyZWFkeSBsb2FkZWQsIHJlc29sdmVzIHRoZSBjb25maWcgaW4gaXRzIHByZXNlbnQgc3RhdGUuXG4gKlxuICogVGhpcyBpcyBhIHVzZWZ1bCBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBnZXQgdGhlIGNvbmZpZyBpbiB0aGUgY291cnNlXG4gKiBvZiB0aGUgZXhlY3V0aW9uIG9mIGEgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIG1vZHVsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBmb3Igd2hpY2ggdG8gbG9vayB1cCB0aGUgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWcobW9kdWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxDb25maWc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPENvbmZpZz4oKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBzdG9yZSA9IGdldENvbmZpZ1N0b3JlKG1vZHVsZU5hbWUpO1xuICAgIGZ1bmN0aW9uIHVwZGF0ZShzdGF0ZTogQ29uZmlnU3RvcmUpIHtcbiAgICAgIGlmIChzdGF0ZS5sb2FkZWQgJiYgc3RhdGUuY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IG9taXQoWydEaXNwbGF5IGNvbmRpdGlvbnMnLCAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJ10sIHN0YXRlLmNvbmZpZyk7XG4gICAgICAgIHJlc29sdmUoY29uZmlnKTtcbiAgICAgICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlKHN0b3JlLmdldFN0YXRlKCkpO1xuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc3RvcmUuc3Vic2NyaWJlKHVwZGF0ZSk7XG4gIH0pO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnSW50ZXJuYWwobW9kdWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxDb25maWc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPENvbmZpZz4oKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBzdG9yZSA9IGdldENvbmZpZ1N0b3JlKG1vZHVsZU5hbWUpO1xuICAgIGZ1bmN0aW9uIHVwZGF0ZShzdGF0ZTogQ29uZmlnU3RvcmUpIHtcbiAgICAgIGlmIChzdGF0ZS5sb2FkZWQgJiYgc3RhdGUuY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHN0YXRlLmNvbmZpZztcbiAgICAgICAgcmVzb2x2ZShjb25maWcpO1xuICAgICAgICB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGUoc3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSBzdG9yZS5zdWJzY3JpYmUodXBkYXRlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW5kIGludGVycG9sYXRlIGRlZmF1bHRzIGZvciBgcHJvdmlkZWRDb25maWdgIGFjY29yZGluZyB0byBgc2NoZW1hYFxuICpcbiAqIEBwYXJhbSBzY2hlbWEgIGEgY29uZmlndXJhdGlvbiBzY2hlbWFcbiAqIEBwYXJhbSBwcm92aWRlZENvbmZpZyAgYW4gb2JqZWN0IG9mIGNvbmZpZyB2YWx1ZXMgKHdpdGhvdXQgdGhlIHRvcC1sZXZlbCBtb2R1bGUgbmFtZSlcbiAqIEBwYXJhbSBrZXlQYXRoQ29udGV4dCAgYSBkb3QtZGVwYXJhdGVkIHN0cmluZyB3aGljaCBoZWxwcyB0aGUgdXNlciBmaWd1cmUgb3V0IHdoZXJlXG4gKiAgICAgdGhlIHByb3ZpZGVkIGNvbmZpZyBjYW1lIGZyb21cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0NvbmZpZyhzY2hlbWE6IENvbmZpZ1NjaGVtYSwgcHJvdmlkZWRDb25maWc6IENvbmZpZ09iamVjdCwga2V5UGF0aENvbnRleHQ6IHN0cmluZykge1xuICB2YWxpZGF0ZVN0cnVjdHVyZShzY2hlbWEsIHByb3ZpZGVkQ29uZmlnLCBrZXlQYXRoQ29udGV4dCk7XG4gIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKHNjaGVtYSwgcHJvdmlkZWRDb25maWcpO1xuICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYSwgY29uZmlnLCBrZXlQYXRoQ29udGV4dCk7XG4gIHJldHVybiBjb25maWc7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zXG4gKlxuICovXG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBmb3IgYW4gZXh0ZW5zaW9uLiBUaGlzIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWNcbiAqIHRvIHRoZSBzbG90IGluIHdoaWNoIGl0IGlzIG1vdW50ZWQsIGFuZCBpdHMgSUQgd2l0aGluIHRoYXQgc2xvdC5cbiAqXG4gKiBUaGUgc2NoZW1hIGZvciB0aGF0IGNvbmZpZ3VyYXRpb24gaXMgdGhlIGV4dGVuc2lvbiBzY2hlbWEuIElmIG5vIGV4dGVuc2lvblxuICogc2NoZW1hIGhhcyBiZWVuIHByb3ZpZGVkLCB0aGUgc2NoZW1hIHVzZWQgaXMgdGhlIHNjaGVtYSBvZiB0aGUgbW9kdWxlIGluXG4gKiB3aGljaCB0aGUgZXh0ZW5zaW9uIGlzIGRlZmluZWQuXG4gKlxuICogQHBhcmFtIHNsb3RNb2R1bGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgd2hpY2ggZGVmaW5lcyB0aGUgZXh0ZW5zaW9uIHNsb3RcbiAqIEBwYXJhbSBleHRlbnNpb25Nb2R1bGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgd2hpY2ggZGVmaW5lcyB0aGUgZXh0ZW5zaW9uIChhbmQgdGhlcmVmb3JlIHRoZSBjb25maWcgc2NoZW1hKVxuICogQHBhcmFtIHNsb3ROYW1lIFRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gc2xvdCB3aGVyZSB0aGUgZXh0ZW5zaW9uIGlzIG1vdW50ZWRcbiAqIEBwYXJhbSBleHRlbnNpb25JZCBUaGUgSUQgb2YgdGhlIGV4dGVuc2lvbiBpbiBpdHMgc2xvdFxuICovXG5mdW5jdGlvbiBjb21wdXRlRXh0ZW5zaW9uQ29uZmlnKFxuICBzbG90TW9kdWxlTmFtZTogc3RyaW5nLFxuICBleHRlbnNpb25Nb2R1bGVOYW1lOiBzdHJpbmcsXG4gIHNsb3ROYW1lOiBzdHJpbmcsXG4gIGV4dGVuc2lvbklkOiBzdHJpbmcsXG4gIGNvbmZpZ1N0YXRlOiBDb25maWdJbnRlcm5hbFN0b3JlLFxuICB0ZW1wQ29uZmlnU3RhdGU6IFRlbXBvcmFyeUNvbmZpZ1N0b3JlLFxuKSB7XG4gIGNvbnN0IGV4dGVuc2lvbk5hbWUgPSBnZXRFeHRlbnNpb25OYW1lRnJvbUlkKGV4dGVuc2lvbklkKTtcbiAgY29uc3QgZXh0ZW5zaW9uQ29uZmlnU2NoZW1hID0gY29uZmlnU3RhdGUuc2NoZW1hc1tleHRlbnNpb25OYW1lXTtcbiAgY29uc3QgbmFtZU9mU2NoZW1hU291cmNlID0gZXh0ZW5zaW9uQ29uZmlnU2NoZW1hID8gZXh0ZW5zaW9uTmFtZSA6IGV4dGVuc2lvbk1vZHVsZU5hbWU7XG4gIGNvbnN0IHByb3ZpZGVkQ29uZmlncyA9IGdldFByb3ZpZGVkQ29uZmlncyhjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKTtcbiAgY29uc3Qgc2xvdE1vZHVsZUNvbmZpZyA9IG1lcmdlQ29uZmlnc0ZvcihzbG90TW9kdWxlTmFtZSwgcHJvdmlkZWRDb25maWdzKTtcbiAgY29uc3QgY29uZmlnT3ZlcnJpZGUgPSBzbG90TW9kdWxlQ29uZmlnPy5leHRlbnNpb25TbG90cz8uW3Nsb3ROYW1lXT8uY29uZmlndXJlPy5bZXh0ZW5zaW9uSWRdID8/IHt9O1xuICBjb25zdCBleHRlbnNpb25Db25maWcgPSBtZXJnZUNvbmZpZ3NGb3IobmFtZU9mU2NoZW1hU291cmNlLCBwcm92aWRlZENvbmZpZ3MpO1xuICBjb25zdCBjb21iaW5lZENvbmZpZyA9IG1lcmdlQ29uZmlncyhbZXh0ZW5zaW9uQ29uZmlnLCBjb25maWdPdmVycmlkZV0pO1xuICAvLyBUT0RPOiB2YWxpZGF0ZSB0aGF0IGEgc2NoZW1hIGV4aXN0cyBmb3IgdGhlIG1vZHVsZVxuICBjb25zdCBzY2hlbWEgPSBleHRlbnNpb25Db25maWdTY2hlbWEgPz8gY29uZmlnU3RhdGUuc2NoZW1hc1tleHRlbnNpb25Nb2R1bGVOYW1lXTtcbiAgdmFsaWRhdGVTdHJ1Y3R1cmUoc2NoZW1hLCBjb21iaW5lZENvbmZpZywgbmFtZU9mU2NoZW1hU291cmNlKTtcbiAgY29uc3QgY29uZmlnID0gc2V0RGVmYXVsdHMoc2NoZW1hLCBjb21iaW5lZENvbmZpZyk7XG4gIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoc2NoZW1hLCBjb25maWcsIG5hbWVPZlNjaGVtYVNvdXJjZSk7XG4gIGRlbGV0ZSBjb25maWcuZXh0ZW5zaW9uU2xvdHM7XG4gIHJldHVybiBjb25maWc7XG59XG5cbmZ1bmN0aW9uIGdldEltcGxlbWVudGVyVG9vbHNDb25maWcoXG4gIGNvbmZpZ1N0YXRlOiBDb25maWdJbnRlcm5hbFN0b3JlLFxuICB0ZW1wQ29uZmlnU3RhdGU6IFRlbXBvcmFyeUNvbmZpZ1N0b3JlLFxuKTogUmVjb3JkPHN0cmluZywgQ29uZmlnPiB7XG4gIGxldCByZXN1bHQgPSBnZXRTY2hlbWFXaXRoVmFsdWVzQW5kU291cmNlcyhjbG9uZShjb25maWdTdGF0ZS5zY2hlbWFzKSk7XG4gIGNvbnN0IGNvbmZpZ3NBbmRTb3VyY2VzID0gW1xuICAgIC4uLmNvbmZpZ1N0YXRlLnByb3ZpZGVkQ29uZmlncy5tYXAoKGMpID0+IFtjLmNvbmZpZywgYy5zb3VyY2VdKSxcbiAgICBbdGVtcENvbmZpZ1N0YXRlLmNvbmZpZywgJ3RlbXBvcmFyeSBjb25maWcnXSxcbiAgXSBhcyBBcnJheTxbQ29uZmlnLCBzdHJpbmddPjtcbiAgZm9yIChsZXQgW2NvbmZpZywgc291cmNlXSBvZiBjb25maWdzQW5kU291cmNlcykge1xuICAgIHJlc3VsdCA9IG1lcmdlQ29uZmlncyhbcmVzdWx0LCBjcmVhdGVWYWx1ZXNBbmRTb3VyY2VzVHJlZShjb25maWcsIHNvdXJjZSldKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZXRTY2hlbWFXaXRoVmFsdWVzQW5kU291cmNlcyhzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnX2RlZmF1bHQnKSkge1xuICAgIHJldHVybiB7IC4uLnNjaGVtYSwgX3ZhbHVlOiBzY2hlbWEuX2RlZmF1bHQsIF9zb3VyY2U6ICdkZWZhdWx0JyB9O1xuICB9IGVsc2UgaWYgKGlzT3JkaW5hcnlPYmplY3Qoc2NoZW1hKSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzY2hlbWEpLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICAgIG9ialtrZXldID0gZ2V0U2NoZW1hV2l0aFZhbHVlc0FuZFNvdXJjZXMoc2NoZW1hW2tleV0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gYXQgdGhpcyBwb2ludCwgdGhlIHNjaGVtYSBpcyBiYWQgYW5kIGFuIGVycm9yIHdpbGwgaGF2ZSBiZWVuIGxvZ2dlZCBkdXJpbmcgc2NoZW1hIHZhbGlkYXRpb25cbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlVmFsdWVzQW5kU291cmNlc1RyZWUoY29uZmlnOiBDb25maWdPYmplY3QsIHNvdXJjZTogc3RyaW5nKSB7XG4gIGlmIChpc09yZGluYXJ5T2JqZWN0KGNvbmZpZykpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgICBvYmpba2V5XSA9IGNyZWF0ZVZhbHVlc0FuZFNvdXJjZXNUcmVlKGNvbmZpZ1trZXldLCBzb3VyY2UpO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgX3ZhbHVlOiBjb25maWcsIF9zb3VyY2U6IHNvdXJjZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEV4dGVuc2lvblNsb3RDb25maWdzKFxuICBjb25maWdTdGF0ZTogQ29uZmlnSW50ZXJuYWxTdG9yZSxcbiAgdGVtcENvbmZpZ1N0YXRlOiBUZW1wb3JhcnlDb25maWdTdG9yZSxcbik6IFJlY29yZDxzdHJpbmcsIEV4dGVuc2lvblNsb3RDb25maWdPYmplY3Q+IHtcbiAgY29uc3QgYWxsQ29uZmlncyA9IG1lcmdlQ29uZmlncyhnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSkpO1xuICBjb25zdCBzbG90Q29uZmlnUGVyTW9kdWxlOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBFeHRlbnNpb25TbG90Q29uZmlnPj4gPSBPYmplY3Qua2V5cyhhbGxDb25maWdzKS5yZWR1Y2UoXG4gICAgKG9iaiwga2V5KSA9PiB7XG4gICAgICBpZiAoYWxsQ29uZmlnc1trZXldPy5leHRlbnNpb25TbG90cykge1xuICAgICAgICBvYmpba2V5XSA9IGFsbENvbmZpZ3Nba2V5XT8uZXh0ZW5zaW9uU2xvdHM7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAge30sXG4gICk7XG4gIHZhbGlkYXRlQWxsRXh0ZW5zaW9uU2xvdENvbmZpZ3Moc2xvdENvbmZpZ1Blck1vZHVsZSk7XG4gIGNvbnN0IHNsb3RDb25maWdzID0gT2JqZWN0LmtleXMoc2xvdENvbmZpZ1Blck1vZHVsZSkucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgIG9iaiA9IHsgLi4ub2JqLCAuLi5zbG90Q29uZmlnUGVyTW9kdWxlW2tleV0gfTtcbiAgICByZXR1cm4gb2JqO1xuICB9LCB7fSk7XG4gIHJldHVybiBzbG90Q29uZmlncztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBbGxFeHRlbnNpb25TbG90Q29uZmlncyhzbG90Q29uZmlnUGVyTW9kdWxlOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBFeHRlbnNpb25TbG90Q29uZmlnPj4pIHtcbiAgZm9yIChsZXQgW21vZHVsZU5hbWUsIGNvbmZpZ0J5U2xvdE5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RDb25maWdQZXJNb2R1bGUpKSB7XG4gICAgZm9yIChsZXQgW3Nsb3ROYW1lLCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZ0J5U2xvdE5hbWUpKSB7XG4gICAgICB2YWxpZGF0ZUV4dGVuc2lvblNsb3RDb25maWcoY29uZmlnLCBtb2R1bGVOYW1lLCBzbG90TmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXh0ZW5zaW9uU2xvdENvbmZpZyhjb25maWc6IEV4dGVuc2lvblNsb3RDb25maWcsIG1vZHVsZU5hbWU6IHN0cmluZywgc2xvdE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBlcnJvclByZWZpeCA9IGBFeHRlbnNpb24gc2xvdCBjb25maWcgJyR7bW9kdWxlTmFtZX0uZXh0ZW5zaW9uU2xvdHMuJHtzbG90TmFtZX1gO1xuICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZykuZmlsdGVyKChrKSA9PiAhWydhZGQnLCAncmVtb3ZlJywgJ29yZGVyJywgJ2NvbmZpZ3VyZSddLmluY2x1ZGVzKGspKTtcbiAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCkge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JQcmVmaXggKyBgJyBjb250YWlucyBpbnZhbGlkIGtleXMgJyR7aW52YWxpZEtleXMuam9pbihcIicsICdcIil9J2ApO1xuICB9XG4gIGlmIChjb25maWcuYWRkKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5hZGQpIHx8ICFjb25maWcuYWRkLmV2ZXJ5KChuKSA9PiB0eXBlb2YgbiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yUHJlZml4ICsgYC5hZGQnIGlzIGludmFsaWQuIE11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyAoZXh0ZW5zaW9uIElEcylgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbmZpZy5yZW1vdmUpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLnJlbW92ZSkgfHwgIWNvbmZpZy5yZW1vdmUuZXZlcnkoKG4pID0+IHR5cGVvZiBuID09PSAnc3RyaW5nJykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JQcmVmaXggKyBgLnJlbW92ZScgaXMgaW52YWxpZC4gTXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIChleHRlbnNpb24gSURzKWApO1xuICAgIH1cbiAgfVxuICBpZiAoY29uZmlnLm9yZGVyKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5vcmRlcikgfHwgIWNvbmZpZy5vcmRlci5ldmVyeSgobikgPT4gdHlwZW9mIG4gPT09ICdzdHJpbmcnKSkge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvclByZWZpeCArIGAub3JkZXInIGlzIGludmFsaWQuIE11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyAoZXh0ZW5zaW9uIElEcylgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbmZpZy5jb25maWd1cmUpIHtcbiAgICBpZiAoIWlzT3JkaW5hcnlPYmplY3QoY29uZmlnLmNvbmZpZ3VyZSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JQcmVmaXggKyBgLmNvbmZpZ3VyZScgaXMgaW52YWxpZC4gTXVzdCBiZSBhbiBvYmplY3Qgd2l0aCBleHRlbnNpb24gSURzIGZvciBrZXlzYCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFByb3ZpZGVkQ29uZmlncyhjb25maWdTdGF0ZTogQ29uZmlnSW50ZXJuYWxTdG9yZSwgdGVtcENvbmZpZ1N0YXRlOiBUZW1wb3JhcnlDb25maWdTdG9yZSk6IEFycmF5PENvbmZpZz4ge1xuICByZXR1cm4gWy4uLmNvbmZpZ1N0YXRlLnByb3ZpZGVkQ29uZmlncy5tYXAoKGMpID0+IGMuY29uZmlnKSwgdGVtcENvbmZpZ1N0YXRlLmNvbmZpZ107XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWU6IHN0cmluZywgc2NoZW1hOiBDb25maWdTY2hlbWEsIGtleVBhdGggPSAnJykge1xuICBjb25zdCB1cGRhdGVNZXNzYWdlID0gYFBsZWFzZSB2ZXJpZnkgdGhhdCB5b3UgYXJlIHJ1bm5pbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIGFuZCwgaWYgc28sIGFsZXJ0IHRoZSBtYWludGFpbmVyLmA7XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoc2NoZW1hKS5maWx0ZXIoKGspID0+ICFrLnN0YXJ0c1dpdGgoJ18nKSkpIHtcbiAgICBjb25zdCB0aGlzS2V5UGF0aCA9IGtleVBhdGggKyAoa2V5UGF0aCAmJiAnLicpICsga2V5O1xuICAgIGNvbnN0IHNjaGVtYVBhcnQgPSBzY2hlbWFba2V5XSBhcyBDb25maWdTY2hlbWE7XG5cbiAgICBpZiAodGhpc0tleVBhdGggPT09ICdEaXNwbGF5IGNvbmRpdGlvbnMnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgJHttb2R1bGVOYW1lfSBkZWNsYXJlcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbGxlZCBcIkRpc3BsYXkgY29uZGl0aW9uc1wiOyB0aGUgXCJEaXNwbGF5IGNvbmRpdGlvbnNcIiBvcHRpb24gaXMgYSByZXNlcnZlZCBuYW1lLiAke3VwZGF0ZU1lc3NhZ2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXNLZXlQYXRoID09PSAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJykge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYCR7bW9kdWxlTmFtZX0gZGVjbGFyZXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBjYWxsZWQgXCJUcmFuc2xhdGlvbiBvdmVycmlkZXNcIjsgdGhlIFwiVHJhbnNsYXRpb24gb3ZlcnJpZGVzXCIgb3B0aW9uIGlzIGEgcmVzZXJ2ZWQgbmFtZS4gJHt1cGRhdGVNZXNzYWdlfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghaXNPcmRpbmFyeU9iamVjdChzY2hlbWFQYXJ0KSkge1xuICAgICAgY29uc29sZS5lcnJvcihgJHttb2R1bGVOYW1lfSBoYXMgYmFkIGNvbmZpZyBzY2hlbWEgZGVmaW5pdGlvbiBmb3Iga2V5ICcke3RoaXNLZXlQYXRofScuICR7dXBkYXRlTWVzc2FnZX1gKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghc2NoZW1hUGFydC5oYXNPd25Qcm9wZXJ0eSgnX2RlZmF1bHQnKSkge1xuICAgICAgLy8gcmVjdXJzZSBmb3IgbmVzdGVkIGNvbmZpZyBrZXlzXG4gICAgICB2YWxpZGF0ZUNvbmZpZ1NjaGVtYShtb2R1bGVOYW1lLCBzY2hlbWFQYXJ0LCB0aGlzS2V5UGF0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudHMgPSBzY2hlbWFQYXJ0Ll9lbGVtZW50cztcbiAgICBpZiAoaGFzT2JqZWN0U2NoZW1hKGVsZW1lbnRzKSkge1xuICAgICAgdmFsaWRhdGVDb25maWdTY2hlbWEobW9kdWxlTmFtZSwgZWxlbWVudHMsIHRoaXNLZXlQYXRoICsgJy5fZWxlbWVudHMnKTtcbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hUGFydC5fdmFsaWRhdG9ycykge1xuICAgICAgZm9yIChsZXQgdmFsaWRhdG9yIG9mIHNjaGVtYVBhcnQuX3ZhbGlkYXRvcnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYCR7bW9kdWxlTmFtZX0gaGFzIGludmFsaWQgdmFsaWRhdG9yIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9JyAke3VwZGF0ZU1lc3NhZ2V9LmAgK1xuICAgICAgICAgICAgICBgXFxuXFxuSWYgeW91J3JlIHRoZSBtYWludGFpbmVyOiB2YWxpZGF0b3JzIG11c3QgYmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGVpdGhlciBgICtcbiAgICAgICAgICAgICAgYHVuZGVmaW5lZCBvciBhbiBlcnJvciBzdHJpbmcuIFJlY2VpdmVkICR7dmFsaWRhdG9yfS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZVR5cGUgPSBzY2hlbWFQYXJ0Ll90eXBlO1xuICAgIGlmICh2YWx1ZVR5cGUgJiYgIU9iamVjdC52YWx1ZXMoVHlwZSkuaW5jbHVkZXModmFsdWVUeXBlKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYCR7bW9kdWxlTmFtZX0gaGFzIGludmFsaWQgdHlwZSBmb3Iga2V5ICcke3RoaXNLZXlQYXRofScgJHt1cGRhdGVNZXNzYWdlfS5gICtcbiAgICAgICAgICBgXFxuXFxuSWYgeW91J3JlIHRoZSBtYWludGFpbmVyOiB0aGUgYWxsb3dlZCB0eXBlcyBhcmUgJHtPYmplY3QudmFsdWVzKFR5cGUpLmpvaW4oJywgJyl9LiBgICtcbiAgICAgICAgICBgUmVjZWl2ZWQgJyR7dmFsdWVUeXBlfSdgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBPYmplY3Qua2V5cyhzY2hlbWFQYXJ0KS5ldmVyeSgoaykgPT4gWydfZGVzY3JpcHRpb24nLCAnX3ZhbGlkYXRvcnMnLCAnX2VsZW1lbnRzJywgJ190eXBlJ10uaW5jbHVkZXMoaykpICYmXG4gICAgICAha2V5UGF0aC5pbmNsdWRlcygnLl9lbGVtZW50cycpXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgJHttb2R1bGVOYW1lfSBoYXMgYmFkIGNvbmZpZyBzY2hlbWEgZGVmaW5pdGlvbiBmb3Iga2V5ICcke3RoaXNLZXlQYXRofScuICR7dXBkYXRlTWVzc2FnZX0uYCArXG4gICAgICAgICAgYFxcblxcbklmIHlvdSdyZSB0aGUgbWFpbnRhaW5lcjogYWxsIGNvbmZpZyBlbGVtZW50cyBtdXN0IGhhdmUgYSBkZWZhdWx0LiBgICtcbiAgICAgICAgICBgUmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeShzY2hlbWFQYXJ0KX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudHMgJiYgdmFsdWVUeXBlICYmICFbVHlwZS5BcnJheSwgVHlwZS5PYmplY3RdLmluY2x1ZGVzKHZhbHVlVHlwZSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGAke21vZHVsZU5hbWV9IGhhcyBiYWQgY29uZmlnIHNjaGVtYSBkZWZpbml0aW9uIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9Jy4gJHt1cGRhdGVNZXNzYWdlfS5gICtcbiAgICAgICAgICBgXFxuXFxuSWYgeW91J3JlIHRoZSBtYWludGFpbmVyOiB0aGUgJ2VsZW1lbnRzJyBrZXkgb25seSB3b3JrcyB3aXRoICdfdHlwZScgZXF1YWwgdG8gJ0FycmF5JyBvciAnT2JqZWN0Jy4gYCArXG4gICAgICAgICAgYFJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkodmFsdWVUeXBlKX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q29uZmlnRm9yTW9kdWxlKFxuICBtb2R1bGVOYW1lOiBzdHJpbmcsXG4gIGNvbmZpZ1N0YXRlOiBDb25maWdJbnRlcm5hbFN0b3JlLFxuICB0ZW1wQ29uZmlnU3RhdGU6IFRlbXBvcmFyeUNvbmZpZ1N0b3JlLFxuKTogQ29uZmlnT2JqZWN0IHtcbiAgaWYgKCFjb25maWdTdGF0ZS5zY2hlbWFzLmhhc093blByb3BlcnR5KG1vZHVsZU5hbWUpKSB7XG4gICAgdGhyb3cgRXJyb3IoJ05vIGNvbmZpZyBzY2hlbWEgaGFzIGJlZW4gZGVmaW5lZCBmb3IgJyArIG1vZHVsZU5hbWUpO1xuICB9XG5cbiAgY29uc3Qgc2NoZW1hID0gY29uZmlnU3RhdGUuc2NoZW1hc1ttb2R1bGVOYW1lXTtcbiAgY29uc3QgaW5wdXRDb25maWcgPSBtZXJnZUNvbmZpZ3NGb3IobW9kdWxlTmFtZSwgZ2V0UHJvdmlkZWRDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpKTtcbiAgdmFsaWRhdGVTdHJ1Y3R1cmUoc2NoZW1hLCBpbnB1dENvbmZpZywgbW9kdWxlTmFtZSk7XG4gIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKHNjaGVtYSwgaW5wdXRDb25maWcpO1xuICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYSwgY29uZmlnLCBtb2R1bGVOYW1lKTtcbiAgZGVsZXRlIGNvbmZpZy5leHRlbnNpb25TbG90cztcbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuZnVuY3Rpb24gbWVyZ2VDb25maWdzRm9yKG1vZHVsZU5hbWU6IHN0cmluZywgYWxsQ29uZmlnczogQXJyYXk8Q29uZmlnPik6IENvbmZpZ09iamVjdCB7XG4gIGNvbnN0IGFsbENvbmZpZ3NGb3JNb2R1bGUgPSBhbGxDb25maWdzLm1hcCgoeyBbbW9kdWxlTmFtZV06IGMgfSkgPT4gYykuZmlsdGVyKChjKSA9PiAhIWMpO1xuXG4gIHJldHVybiBtZXJnZUNvbmZpZ3MoYWxsQ29uZmlnc0Zvck1vZHVsZSk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlQ29uZmlncyhjb25maWdzOiBBcnJheTxDb25maWc+KSB7XG4gIGNvbnN0IG1lcmdlRGVlcEFsbCA9IHJlZHVjZShtZXJnZURlZXBSaWdodCk7XG4gIHJldHVybiBtZXJnZURlZXBBbGwoe30sIGNvbmZpZ3MpIGFzIENvbmZpZztcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBjaGVjayB0aGUgcHJvdmlkZWQgY29uZmlnIHRyZWUgdG8gbWFrZSBzdXJlIHRoYXQgYWxsXG4gKiBvZiB0aGUgcHJvdmlkZWQgcHJvcGVydGllcyBleGlzdCBpbiB0aGUgc2NoZW1hLCBhbmQgdGhhdCB0eXBlcyBhcmVcbiAqIGNvcnJlY3QuIERvZXMgbm90IHJ1biB2YWxpZGF0b3JzIHlldCwgc2luY2UgdGhvc2Ugd2lsbCBiZSBydW4gb25cbiAqIHRoZSBjb25maWcgd2l0aCB0aGUgZGVmYXVsdHMgZmlsbGVkIGluLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0cnVjdHVyZShzY2hlbWE6IENvbmZpZ1NjaGVtYSwgY29uZmlnOiBDb25maWdPYmplY3QsIGtleVBhdGggPSAnJykge1xuICAvLyB2YWxpZGF0ZSBlYWNoIGNvbnN0aXR1ZW50IGVsZW1lbnRcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnKSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgY29uc3QgdGhpc0tleVBhdGggPSBrZXlQYXRoICsgJy4nICsga2V5O1xuICAgIGNvbnN0IHNjaGVtYVBhcnQgPSBzY2hlbWFba2V5XSBhcyBDb25maWdTY2hlbWE7XG5cbiAgICBpZiAoIXNjaGVtYS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBpZiAoIShrZXkgPT09ICdleHRlbnNpb25TbG90cycgJiYga2V5UGF0aCAhPT0gJycpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFVua25vd24gY29uZmlnIGtleSAnJHt0aGlzS2V5UGF0aH0nIHByb3ZpZGVkLiBJZ25vcmluZy5gKTtcbiAgICAgIH1cblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVCcmFuY2hTdHJ1Y3R1cmUoc2NoZW1hUGFydCwgdmFsdWUsIHRoaXNLZXlQYXRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUJyYW5jaFN0cnVjdHVyZShzY2hlbWFQYXJ0OiBDb25maWdTY2hlbWEsIHZhbHVlOiBhbnksIGtleVBhdGg6IHN0cmluZykge1xuICBjaGVja1R5cGUoa2V5UGF0aCwgc2NoZW1hUGFydC5fdHlwZSwgdmFsdWUpO1xuXG4gIGlmIChpc09yZGluYXJ5T2JqZWN0KHZhbHVlKSkge1xuICAgIC8vIHN0cnVjdHVyYWxseSB2YWxpZGF0ZSBvbmx5IGlmIHRoZXJlJ3MgZWxlbWVudHMgc3BlY2lmaWVkXG4gICAgLy8gb3IgdGhlcmUncyBubyBgX2RlZmF1bHRgIHZhbHVlICh3aGljaCB3b3VsZCBpbmRpY2F0ZSBhIGZyZWVmb3JtIG9iamVjdClcbiAgICBpZiAoc2NoZW1hUGFydC5fdHlwZSA9PT0gVHlwZS5PYmplY3QpIHtcbiAgICAgIHZhbGlkYXRlRGljdGlvbmFyeVN0cnVjdHVyZShzY2hlbWFQYXJ0LCB2YWx1ZSwga2V5UGF0aCk7XG4gICAgfSBlbHNlIGlmICghc2NoZW1hUGFydC5oYXNPd25Qcm9wZXJ0eSgnX2RlZmF1bHQnKSkge1xuICAgICAgLy8gcmVjdXJzZSB0byB2YWxpZGF0ZSBuZXN0ZWQgb2JqZWN0IHN0cnVjdHVyZVxuICAgICAgdmFsaWRhdGVTdHJ1Y3R1cmUoc2NoZW1hUGFydCwgdmFsdWUsIGtleVBhdGgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoc2NoZW1hUGFydC5fdHlwZSA9PT0gVHlwZS5BcnJheSkge1xuICAgICAgdmFsaWRhdGVBcnJheVN0cnVjdHVyZShzY2hlbWFQYXJ0LCB2YWx1ZSwga2V5UGF0aCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGljdGlvbmFyeVN0cnVjdHVyZShkaWN0aW9uYXJ5U2NoZW1hOiBDb25maWdTY2hlbWEsIGNvbmZpZzogQ29uZmlnT2JqZWN0LCBrZXlQYXRoOiBzdHJpbmcpIHtcbiAgaWYgKGRpY3Rpb25hcnlTY2hlbWEuX2VsZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdba2V5XTtcbiAgICAgIHZhbGlkYXRlU3RydWN0dXJlKGRpY3Rpb25hcnlTY2hlbWEuX2VsZW1lbnRzLCB2YWx1ZSwgYCR7a2V5UGF0aH0uJHtrZXl9YCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXJyYXlTdHJ1Y3R1cmUoYXJyYXlTY2hlbWE6IENvbmZpZ1NjaGVtYSwgdmFsdWU6IENvbmZpZ09iamVjdCwga2V5UGF0aDogc3RyaW5nKSB7XG4gIC8vIGlmIHRoZXJlIGlzIGFuIGFycmF5IGVsZW1lbnQgb2JqZWN0IHNjaGVtYSwgdmVyaWZ5IHRoYXQgZWxlbWVudHMgbWF0Y2ggaXRcbiAgaWYgKGhhc09iamVjdFNjaGVtYShhcnJheVNjaGVtYS5fZWxlbWVudHMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsaWRhdGVCcmFuY2hTdHJ1Y3R1cmUoYXJyYXlTY2hlbWEuX2VsZW1lbnRzLCB2YWx1ZVtpXSwgYCR7a2V5UGF0aH1bJHtpfV1gKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hlY2tUeXBlKGAke2tleVBhdGh9WyR7aX1dYCwgYXJyYXlTY2hlbWEuX2VsZW1lbnRzPy5fdHlwZSwgdmFsdWVbaV0pO1xuICB9XG59XG5cbi8qKlxuICogUnVuIGFsbCB0aGUgdmFsaWRhdG9ycyBpbiB0aGUgY29uZmlnIHRyZWUuIFRoaXMgc2hvdWxkIGJlIHJ1blxuICogb24gdGhlIGNvbmZpZyBvYmplY3QgYWZ0ZXIgaXQgaGFzIGJlZW4gZmlsbGVkIGluIHdpdGggYWxsIHRoZSBkZWZhdWx0cywgc2luY2VcbiAqIGhpZ2hlci1sZXZlbCB2YWxpZGF0b3JzIG1heSByZWZlciB0byBkZWZhdWx0IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWE6IENvbmZpZ1NjaGVtYSwgY29uZmlnOiBDb25maWdPYmplY3QsIGtleVBhdGggPSAnJykge1xuICAvLyBJZiBgIXNjaGVtYWAsIHRoZXJlIHNob3VsZCBoYXZlIGJlZW4gYSBzdHJ1Y3R1cmFsIHZhbGlkYXRpb24gZXJyb3IgcHJpbnRlZCBhbHJlYWR5LlxuICBpZiAoc2NoZW1hKSB7XG4gICAgaWYgKGNvbmZpZyAhPT0gc2NoZW1hLl9kZWZhdWx0KSB7XG4gICAgICBydW5WYWxpZGF0b3JzKGtleVBhdGgsIHNjaGVtYS5fdmFsaWRhdG9ycywgY29uZmlnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNPcmRpbmFyeU9iamVjdChjb25maWcpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICAgIGNvbnN0IHRoaXNLZXlQYXRoID0ga2V5UGF0aCArICcuJyArIGtleTtcbiAgICAgICAgY29uc3Qgc2NoZW1hUGFydCA9IHNjaGVtYVtrZXldIGFzIENvbmZpZ1NjaGVtYTtcbiAgICAgICAgaWYgKHNjaGVtYS5fdHlwZSA9PT0gVHlwZS5PYmplY3QgJiYgc2NoZW1hLl9lbGVtZW50cykge1xuICAgICAgICAgIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoc2NoZW1hLl9lbGVtZW50cywgdmFsdWUsIHRoaXNLZXlQYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYVBhcnQsIHZhbHVlLCB0aGlzS2V5UGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlnKSAmJiBzY2hlbWEuX2VsZW1lbnRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZy5sZW5ndGg7IGkrKykge1xuICAgICAgICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYS5fZWxlbWVudHMsIGNvbmZpZ1tpXSwgYCR7a2V5UGF0aH1bJHtpfV1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tUeXBlKGtleVBhdGg6IHN0cmluZywgX3R5cGU6IFR5cGUgfCB1bmRlZmluZWQsIHZhbHVlOiBhbnkpIHtcbiAgaWYgKF90eXBlKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj4gPSB7XG4gICAgICBBcnJheTogaXNBcnJheSxcbiAgICAgIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgICAgIENvbmNlcHRVdWlkOiBpc1V1aWQsXG4gICAgICBOdW1iZXI6IGlzTnVtYmVyLFxuICAgICAgT2JqZWN0OiBpc09iamVjdCxcbiAgICAgIFN0cmluZzogaXNTdHJpbmcsXG4gICAgICBVVUlEOiBpc1V1aWQsXG4gICAgICBQZXJzb25BdHRyaWJ1dGVUeXBlVXVpZDogaXNVdWlkLFxuICAgICAgUGF0aWVudElkZW50aWZpZXJUeXBlVXVpZDogaXNVdWlkLFxuICAgIH07XG4gICAgcnVuVmFsaWRhdG9ycyhrZXlQYXRoLCBbdmFsaWRhdG9yW190eXBlXV0sIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBydW5WYWxpZGF0b3JzKGtleVBhdGg6IHN0cmluZywgdmFsaWRhdG9yczogQXJyYXk8RnVuY3Rpb24+IHwgdW5kZWZpbmVkLCB2YWx1ZTogYW55KSB7XG4gIGlmICh2YWxpZGF0b3JzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAobGV0IHZhbGlkYXRvciBvZiB2YWxpZGF0b3JzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvclJlc3VsdCA9IHZhbGlkYXRvcih2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0b3JSZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgY29uZmlndXJhdGlvbiBmb3IgJHtrZXlQYXRofTogJHt2YWxpZGF0b3JSZXN1bHR9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgY29uZmlndXJhdGlvbiB2YWx1ZSAke3ZhbHVlfSBmb3IgJHtrZXlQYXRofTogJHt2YWxpZGF0b3JSZXN1bHR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgU2tpcHBpbmcgaW52YWxpZCB2YWxpZGF0b3IgYXQgXCIke2tleVBhdGh9XCIuIEVuY291bnRlcmVkIGVycm9yXFxuXFx0JHtlfWApO1xuICAgIH1cbiAgfVxufVxuXG4vLyBSZWN1cnNpdmVseSBmaWxsIGluIHRoZSBjb25maWcgd2l0aCB2YWx1ZXMgZnJvbSB0aGUgc2NoZW1hLlxuY29uc3Qgc2V0RGVmYXVsdHMgPSAoc2NoZW1hOiBDb25maWdTY2hlbWEsIGlucHV0Q29uZmlnOiBDb25maWcpID0+IHtcbiAgY29uc3QgY29uZmlnID0gY2xvbmUoaW5wdXRDb25maWcpO1xuXG4gIGlmICghc2NoZW1hKSB7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNjaGVtYSkpIHtcbiAgICBjb25zdCBjb25maWdQYXJ0ID0gY29uZmlnW2tleV07XG4gICAgY29uc3Qgc2NoZW1hUGFydCA9IHNjaGVtYVtrZXldIGFzIENvbmZpZ1NjaGVtYTtcblxuICAgIC8vIFRoZSBgc2NoZW1hUGFydCAmJmAgY2xhdXNlIG9mIHRoaXMgYGlmYCBzdGF0ZW1lbnQgd2lsbCBvbmx5IGZhaWxcbiAgICAvLyBpZiB0aGUgc2NoZW1hIGlzIHZlcnkgaW52YWxpZC4gSXQgaXMgdGhlcmUgdG8gcHJldmVudCB0aGUgYXBwIGZyb21cbiAgICAvLyBjcmFzaGluZyBjb21wbGV0ZWx5LCB0aG91Z2ggaXQgd2lsbCBwcm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG4gICAgLy8gSWYgdGhpcyBoYXBwZW5zLCB0aGVyZSBzaG91bGQgYmUgbGVnaWJsZSBlcnJvcnMgaW4gdGhlIGNvbnNvbGUgZnJvbVxuICAgIC8vIHRoZSBzY2hlbWEgdmFsaWRhdG9yLlxuICAgIGlmIChzY2hlbWFQYXJ0ICYmIHNjaGVtYVBhcnQuaGFzT3duUHJvcGVydHkoJ19kZWZhdWx0JykpIHtcbiAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHNjaGVtYVBhcnQgZGVmaW5lcyBhIGNvbmZpZyB2YWx1ZSwgc2luY2UgaXQgaGFzXG4gICAgICAvLyBhIHByb3BlcnR5IGBfZGVmYXVsdGAuXG4gICAgICBpZiAoIWNvbmZpZy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIChjb25maWdba2V5XSBhcyBhbnkpID0gc2NoZW1hUGFydFsnX2RlZmF1bHQnXTtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgYWxzbyBjaGVjayBpZiBpdCBpcyBhbiBvYmplY3Qgb3IgYXJyYXkgd2l0aCBvYmplY3QgZWxlbWVudHMsIGluIHdoaWNoIGNhc2Ugd2UgcmVjdXJzZVxuICAgICAgY29uc3QgZWxlbWVudHMgPSBzY2hlbWFQYXJ0Ll9lbGVtZW50cztcblxuICAgICAgaWYgKGNvbmZpZ1BhcnQgJiYgaGFzT2JqZWN0U2NoZW1hKGVsZW1lbnRzKSkge1xuICAgICAgICBpZiAoc2NoZW1hUGFydC5fdHlwZSA9PT0gVHlwZS5BcnJheSAmJiBBcnJheS5pc0FycmF5KGNvbmZpZ1BhcnQpKSB7XG4gICAgICAgICAgY29uc3QgY29uZmlnV2l0aERlZmF1bHRzID0gY29uZmlnUGFydC5tYXAoKGNvbmY6IENvbmZpZykgPT4gc2V0RGVmYXVsdHMoZWxlbWVudHMsIGNvbmYpKTtcbiAgICAgICAgICBjb25maWdba2V5XSA9IGNvbmZpZ1dpdGhEZWZhdWx0cztcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWFQYXJ0Ll90eXBlID09PSBUeXBlLk9iamVjdCkge1xuICAgICAgICAgIGZvciAobGV0IG9iamVjdEtleSBvZiBPYmplY3Qua2V5cyhjb25maWdQYXJ0KSkge1xuICAgICAgICAgICAgY29uZmlnUGFydFtvYmplY3RLZXldID0gc2V0RGVmYXVsdHMoZWxlbWVudHMsIGNvbmZpZ1BhcnRbb2JqZWN0S2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc09yZGluYXJ5T2JqZWN0KHNjaGVtYVBhcnQpKSB7XG4gICAgICAvLyBTaW5jZSBzY2hlbWFQYXJ0IGhhcyBubyBwcm9wZXJ0eSBcIl9kZWZhdWx0XCIsIGlmIGl0J3MgYW4gb3JkaW5hcnkgb2JqZWN0XG4gICAgICAvLyAodW5saWtlLCBpbXBvcnRhbnRseSwgdGhlIHZhbGlkYXRvcnMgYXJyYXkpLCB3ZSBhc3N1bWUgaXQgaXMgYSBwYXJlbnQgY29uZmlnIHByb3BlcnR5LlxuICAgICAgLy8gV2UgcmVjdXJzZSB0byBjb25maWdba2V5XSBhbmQgc2NoZW1hW2tleV0uIERlZmF1bHQgY29uZmlnW2tleV0gdG8ge30uXG4gICAgICBjb25zdCBzZWxlY3RlZENvbmZpZ1BhcnQgPSBjb25maWcuaGFzT3duUHJvcGVydHkoa2V5KSA/IGNvbmZpZ1BhcnQgOiB7fTtcblxuICAgICAgaWYgKGlzT3JkaW5hcnlPYmplY3Qoc2VsZWN0ZWRDb25maWdQYXJ0KSkge1xuICAgICAgICBjb25maWdba2V5XSA9IHNldERlZmF1bHRzKHNjaGVtYVBhcnQsIHNlbGVjdGVkQ29uZmlnUGFydCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG5cbmZ1bmN0aW9uIGhhc09iamVjdFNjaGVtYShlbGVtZW50c1NjaGVtYTogT2JqZWN0IHwgdW5kZWZpbmVkKTogZWxlbWVudHNTY2hlbWEgaXMgQ29uZmlnU2NoZW1hIHtcbiAgcmV0dXJuIChcbiAgICAhIWVsZW1lbnRzU2NoZW1hICYmIE9iamVjdC5rZXlzKGVsZW1lbnRzU2NoZW1hKS5maWx0ZXIoKGUpID0+ICFbJ19kZWZhdWx0JywgJ192YWxpZGF0b3JzJ10uaW5jbHVkZXMoZSkpLmxlbmd0aCA+IDBcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNPcmRpbmFyeU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUgIT09IG51bGw7XG59XG5cbi8qKlxuICogQ29waWVkIG92ZXIgZnJvbSBlc20tZXh0ZW5zaW9ucy4gSXQgcmlnaHRseSBiZWxvbmdzIHRvIHRoYXQgbW9kdWxlLCBidXQgZXNtLWNvbmZpZ1xuICogY2Fubm90IGRlcGVuZCBvbiBlc20tZXh0ZW5zaW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uTmFtZUZyb21JZChleHRlbnNpb25JZDogc3RyaW5nKSB7XG4gIGNvbnN0IFtleHRlbnNpb25OYW1lXSA9IGV4dGVuc2lvbklkLnNwbGl0KCcjJyk7XG4gIHJldHVybiBleHRlbnNpb25OYW1lO1xufVxuXG4vKipcbiAqIFRoZSBpbXBsaWNpdENvbmZpZ1NjaGVtYSBpcyBpbXBsaWNpdGx5IGluY2x1ZGVkIGluIGV2ZXJ5IGNvbmZpZ3VyYXRpb24gc2NoZW1hXG4gKi9cbmNvbnN0IGltcGxpY2l0Q29uZmlnU2NoZW1hOiBDb25maWdTY2hlbWEgPSB7XG4gICdEaXNwbGF5IGNvbmRpdGlvbnMnOiB7XG4gICAgcHJpdmlsZWdlczoge1xuICAgICAgX2Rlc2NyaXB0aW9uOiAnVGhlIHByaXZpbGVnZShzKSB0aGUgdXNlciBtdXN0IGhhdmUgdG8gdXNlIHRoaXMgZXh0ZW5zaW9uJyxcbiAgICAgIF90eXBlOiBUeXBlLkFycmF5LFxuICAgICAgX2RlZmF1bHQ6IFtdLFxuICAgIH0sXG4gIH0sXG4gICdUcmFuc2xhdGlvbiBvdmVycmlkZXMnOiB7XG4gICAgX2Rlc2NyaXB0aW9uOlxuICAgICAgJ1Blci1sYW5ndWFnZSBvdmVycmlkZXMgZm9yIGZyb250ZW5kIHRyYW5zbGF0aW9ucyBzaG91bGQgYmUga2V5ZWQgYnkgbGFuZ3VhZ2UgY29kZSBhbmQgZWFjaCBsYW5ndWFnZSBkaWN0aW9uYXJ5IGNvbnRhaW5zIHRoZSB0cmFuc2xhdGlvbiBrZXkgYW5kIHRoZSBkaXNwbGF5IHZhbHVlJyxcbiAgICBfdHlwZTogVHlwZS5PYmplY3QsXG4gICAgX2RlZmF1bHQ6IHt9LFxuICB9LFxufTtcbiJdLCJuYW1lcyI6WyJjbG9uZSIsInJlZHVjZSIsIm1lcmdlRGVlcFJpZ2h0IiwiZXF1YWxzIiwib21pdCIsIlR5cGUiLCJpc0FycmF5IiwiaXNCb29sZWFuIiwiaXNVdWlkIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzU3RyaW5nIiwiY29uZmlnSW50ZXJuYWxTdG9yZSIsImNvbmZpZ0V4dGVuc2lvblN0b3JlIiwiZ2V0Q29uZmlnU3RvcmUiLCJnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUiLCJpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUiLCJ0ZW1wb3JhcnlDb25maWdTdG9yZSIsImdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUiLCJjb21wdXRlTW9kdWxlQ29uZmlnIiwiZ2V0U3RhdGUiLCJzdWJzY3JpYmUiLCJjb25maWdTdGF0ZSIsInRlbXBDb25maWdTdGF0ZSIsImNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnIiwiY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzIiwiY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MiLCJleHRlbnNpb25TdGF0ZSIsInN0YXRlIiwidGVtcFN0YXRlIiwiT2JqZWN0Iiwia2V5cyIsInNjaGVtYXMiLCJtb2R1bGVOYW1lIiwiY29uZmlnIiwiZ2V0Q29uZmlnRm9yTW9kdWxlIiwibW9kdWxlU3RvcmUiLCJzZXRTdGF0ZSIsImxvYWRlZCIsInNsb3RDb25maWdzIiwiZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ3MiLCJuZXdTbG90U3RvcmVFbnRyaWVzIiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwibWFwIiwic2xvdE5hbWUiLCJzbG90U3RvcmUiLCJvbGRTdGF0ZSIsIm5ld1N0YXRlIiwic2xvdHMiLCJnZXRJbXBsZW1lbnRlclRvb2xzQ29uZmlnIiwiY29uZmlncyIsIm1vdW50ZWRFeHRlbnNpb25zIiwiZXh0ZW5zaW9uIiwiY29tcHV0ZUV4dGVuc2lvbkNvbmZpZyIsInNsb3RNb2R1bGVOYW1lIiwiZXh0ZW5zaW9uTW9kdWxlTmFtZSIsImV4dGVuc2lvbklkIiwiZGVmaW5lQ29uZmlnU2NoZW1hIiwic2NoZW1hIiwidmFsaWRhdGVDb25maWdTY2hlbWEiLCJlbmhhbmNlZFNjaGVtYSIsImltcGxpY2l0Q29uZmlnU2NoZW1hIiwiZGVmaW5lRXh0ZW5zaW9uQ29uZmlnU2NoZW1hIiwiZXh0ZW5zaW9uTmFtZSIsImNvbnNvbGUiLCJ3YXJuIiwicHJvdmlkZSIsInNvdXJjZU5hbWUiLCJwcm92aWRlZENvbmZpZ3MiLCJzb3VyY2UiLCJnZXRDb25maWciLCJQcm9taXNlIiwicmVzb2x2ZSIsInVwZGF0ZSIsInVuc3Vic2NyaWJlIiwic3RvcmUiLCJnZXRDb25maWdJbnRlcm5hbCIsInByb2Nlc3NDb25maWciLCJwcm92aWRlZENvbmZpZyIsImtleVBhdGhDb250ZXh0IiwidmFsaWRhdGVTdHJ1Y3R1cmUiLCJzZXREZWZhdWx0cyIsInJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUiLCJzbG90TW9kdWxlQ29uZmlnIiwiZ2V0RXh0ZW5zaW9uTmFtZUZyb21JZCIsImV4dGVuc2lvbkNvbmZpZ1NjaGVtYSIsIm5hbWVPZlNjaGVtYVNvdXJjZSIsImdldFByb3ZpZGVkQ29uZmlncyIsIm1lcmdlQ29uZmlnc0ZvciIsImNvbmZpZ092ZXJyaWRlIiwiZXh0ZW5zaW9uU2xvdHMiLCJjb25maWd1cmUiLCJleHRlbnNpb25Db25maWciLCJjb21iaW5lZENvbmZpZyIsIm1lcmdlQ29uZmlncyIsInJlc3VsdCIsImdldFNjaGVtYVdpdGhWYWx1ZXNBbmRTb3VyY2VzIiwiY29uZmlnc0FuZFNvdXJjZXMiLCJjIiwiY3JlYXRlVmFsdWVzQW5kU291cmNlc1RyZWUiLCJoYXNPd25Qcm9wZXJ0eSIsIl92YWx1ZSIsIl9kZWZhdWx0IiwiX3NvdXJjZSIsImlzT3JkaW5hcnlPYmplY3QiLCJvYmoiLCJrZXkiLCJhbGxDb25maWdzIiwic2xvdENvbmZpZ1Blck1vZHVsZSIsInZhbGlkYXRlQWxsRXh0ZW5zaW9uU2xvdENvbmZpZ3MiLCJjb25maWdCeVNsb3ROYW1lIiwidmFsaWRhdGVFeHRlbnNpb25TbG90Q29uZmlnIiwiZXJyb3JQcmVmaXgiLCJpbnZhbGlkS2V5cyIsImZpbHRlciIsImsiLCJpbmNsdWRlcyIsImxlbmd0aCIsImVycm9yIiwiam9pbiIsImFkZCIsIkFycmF5IiwiZXZlcnkiLCJuIiwicmVtb3ZlIiwib3JkZXIiLCJrZXlQYXRoIiwidXBkYXRlTWVzc2FnZSIsInRoaXNLZXlQYXRoIiwic2NoZW1hUGFydCIsImVsZW1lbnRzIiwiX2VsZW1lbnRzIiwiaGFzT2JqZWN0U2NoZW1hIiwiX3ZhbGlkYXRvcnMiLCJ2YWxpZGF0b3IiLCJ2YWx1ZVR5cGUiLCJfdHlwZSIsInZhbHVlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGFydHNXaXRoIiwiRXJyb3IiLCJpbnB1dENvbmZpZyIsImFsbENvbmZpZ3NGb3JNb2R1bGUiLCJtZXJnZURlZXBBbGwiLCJ2YWx1ZSIsInZhbGlkYXRlQnJhbmNoU3RydWN0dXJlIiwiY2hlY2tUeXBlIiwidmFsaWRhdGVEaWN0aW9uYXJ5U3RydWN0dXJlIiwidmFsaWRhdGVBcnJheVN0cnVjdHVyZSIsImRpY3Rpb25hcnlTY2hlbWEiLCJhcnJheVNjaGVtYSIsImkiLCJydW5WYWxpZGF0b3JzIiwiQm9vbGVhbiIsIkNvbmNlcHRVdWlkIiwiTnVtYmVyIiwiU3RyaW5nIiwiVVVJRCIsIlBlcnNvbkF0dHJpYnV0ZVR5cGVVdWlkIiwiUGF0aWVudElkZW50aWZpZXJUeXBlVXVpZCIsInZhbGlkYXRvcnMiLCJ2YWxpZGF0b3JSZXN1bHQiLCJlIiwiY29uZmlnUGFydCIsImNvbmZpZ1dpdGhEZWZhdWx0cyIsImNvbmYiLCJvYmplY3RLZXkiLCJzZWxlY3RlZENvbmZpZ1BhcnQiLCJlbGVtZW50c1NjaGVtYSIsInNwbGl0IiwicHJpdmlsZWdlcyIsIl9kZXNjcmlwdGlvbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../framework/esm-config/src/module-config/module-config.ts\n");
|
|
6548
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ defineConfigSchema: () => (/* binding */ defineConfigSchema),\n/* harmony export */ defineExtensionConfigSchema: () => (/* binding */ defineExtensionConfigSchema),\n/* harmony export */ getConfig: () => (/* binding */ getConfig),\n/* harmony export */ getConfigInternal: () => (/* binding */ getConfigInternal),\n/* harmony export */ processConfig: () => (/* binding */ processConfig),\n/* harmony export */ provide: () => (/* binding */ provide)\n/* harmony export */ });\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/equals.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/mergeDeepRight.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/omit.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/clone.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/reduce.js\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ \"../../framework/esm-config/src/types.ts\");\n/* harmony import */ var _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../validators/type-validators */ \"../../framework/esm-config/src/validators/type-validators.ts\");\n/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./state */ \"../../framework/esm-config/src/module-config/state.ts\");\n/** @module @category Config */ function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _array_with_holes(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction _array_without_holes(arr) {\n if (Array.isArray(arr)) return _array_like_to_array(arr);\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _iterable_to_array(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _iterable_to_array_limit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally{\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally{\n if (_d) throw _e;\n }\n }\n return _arr;\n}\nfunction _non_iterable_rest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _non_iterable_spread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _object_spread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _define_property(target, key, source[key]);\n });\n }\n return target;\n}\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _object_spread_props(target, source) {\n source = source != null ? source : {};\n if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _sliced_to_array(arr, i) {\n return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();\n}\nfunction _to_consumable_array(arr) {\n return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\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__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.subscribe(function(configState) {\n return computeModuleConfig(configState, _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.subscribe(function(tempConfigState) {\n return computeModuleConfig(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), tempConfigState);\n});\ncomputeImplementerToolsConfig(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.subscribe(function(configState) {\n return computeImplementerToolsConfig(configState, _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.subscribe(function(tempConfigState) {\n return computeImplementerToolsConfig(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), tempConfigState);\n});\ncomputeExtensionSlotConfigs(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.subscribe(function(configState) {\n return computeExtensionSlotConfigs(configState, _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.subscribe(function(tempConfigState) {\n return computeExtensionSlotConfigs(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), tempConfigState);\n});\ncomputeExtensionConfigs(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_2__.configExtensionStore.getState(), _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.subscribe(function(configState) {\n computeExtensionConfigs(configState, _state__WEBPACK_IMPORTED_MODULE_2__.configExtensionStore.getState(), _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_2__.configExtensionStore.subscribe(function(extensionState) {\n computeExtensionConfigs(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), extensionState, _state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_2__.temporaryConfigStore.subscribe(function(tempConfigState) {\n computeExtensionConfigs(_state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_2__.configExtensionStore.getState(), tempConfigState);\n});\nfunction computeModuleConfig(state, tempState) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(state.schemas)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var moduleName = _step.value;\n var config = getConfigForModule(moduleName, state, tempState);\n var moduleStore = (0,_state__WEBPACK_IMPORTED_MODULE_2__.getConfigStore)(moduleName);\n moduleStore.setState({\n loaded: true,\n config: config\n });\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction computeExtensionSlotConfigs(state, tempState) {\n var slotConfigs = getExtensionSlotConfigs(state, tempState);\n var newSlotStoreEntries = Object.fromEntries(Object.entries(slotConfigs).map(function(param) {\n var _param = _sliced_to_array(param, 2), slotName = _param[0], config = _param[1];\n return [\n slotName,\n {\n loaded: true,\n config: config\n }\n ];\n }));\n var slotStore = (0,_state__WEBPACK_IMPORTED_MODULE_2__.getExtensionSlotsConfigStore)();\n var oldState = slotStore.getState();\n var newState = {\n slots: _object_spread({}, oldState.slots, newSlotStoreEntries)\n };\n if (!(0,ramda__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(oldState, newState)) {\n slotStore.setState(newState);\n }\n}\nfunction computeImplementerToolsConfig(state, tempConfigState) {\n var config = getImplementerToolsConfig(state, tempConfigState);\n _state__WEBPACK_IMPORTED_MODULE_2__.implementerToolsConfigStore.setState({\n config: config\n });\n}\nfunction computeExtensionConfigs(configState, extensionState, tempConfigState) {\n var configs = {};\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = extensionState.mountedExtensions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var extension = _step.value;\n var config = computeExtensionConfig(extension.slotModuleName, extension.extensionModuleName, extension.slotName, extension.extensionId, configState, tempConfigState);\n configs[extension.slotName] = _object_spread_props(_object_spread({}, configs[extension.slotName]), _define_property({}, extension.extensionId, {\n config: config,\n loaded: true\n }));\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n (0,_state__WEBPACK_IMPORTED_MODULE_2__.getExtensionsConfigStore)().setState({\n configs: 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 var enhancedSchema = (0,ramda__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(schema, implicitConfigSchema);\n var state = _state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState();\n _state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.setState({\n schemas: _object_spread_props(_object_spread({}, state.schemas), _define_property({}, moduleName, enhancedSchema))\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 var enhancedSchema = (0,ramda__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(schema, implicitConfigSchema);\n var state = _state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState();\n if (state.schemas[extensionName]) {\n console.warn(\"Config schema for extension \".concat(extensionName, \" already exists. If there are multiple extensions with this same name, one will probably crash.\"));\n }\n _state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.setState({\n schemas: _object_spread_props(_object_spread({}, state.schemas), _define_property({}, extensionName, enhancedSchema))\n });\n}\nfunction provide(config) {\n var sourceName = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : \"provided\";\n var state = _state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.getState();\n _state__WEBPACK_IMPORTED_MODULE_2__.configInternalStore.setState({\n providedConfigs: _to_consumable_array(state.providedConfigs).concat([\n {\n source: sourceName,\n config: 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(function(resolve) {\n var update = function update(state) {\n if (state.loaded && state.config) {\n var config = (0,ramda__WEBPACK_IMPORTED_MODULE_5__[\"default\"])([\n \"Display conditions\",\n \"Translation overrides\"\n ], state.config);\n resolve(config);\n unsubscribe && unsubscribe();\n }\n };\n var store = (0,_state__WEBPACK_IMPORTED_MODULE_2__.getConfigStore)(moduleName);\n update(store.getState());\n var unsubscribe = store.subscribe(update);\n });\n}\n/** @internal */ function getConfigInternal(moduleName) {\n return new Promise(function(resolve) {\n var update = function update(state) {\n if (state.loaded && state.config) {\n var config = state.config;\n resolve(config);\n unsubscribe && unsubscribe();\n }\n };\n var store = (0,_state__WEBPACK_IMPORTED_MODULE_2__.getConfigStore)(moduleName);\n update(store.getState());\n var unsubscribe = store.subscribe(update);\n });\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 var 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 var _slotModuleConfig_extensionSlots, _slotModuleConfig_extensionSlots_slotName, _slotModuleConfig_extensionSlots_slotName_configure;\n var extensionName = getExtensionNameFromId(extensionId);\n var extensionConfigSchema = configState.schemas[extensionName];\n var nameOfSchemaSource = extensionConfigSchema ? extensionName : extensionModuleName;\n var providedConfigs = getProvidedConfigs(configState, tempConfigState);\n var slotModuleConfig = mergeConfigsFor(slotModuleName, providedConfigs);\n var _slotModuleConfig_extensionSlots_slotName_configure_extensionId;\n var configOverride = (_slotModuleConfig_extensionSlots_slotName_configure_extensionId = slotModuleConfig === null || slotModuleConfig === void 0 ? void 0 : (_slotModuleConfig_extensionSlots = slotModuleConfig.extensionSlots) === null || _slotModuleConfig_extensionSlots === void 0 ? void 0 : (_slotModuleConfig_extensionSlots_slotName = _slotModuleConfig_extensionSlots[slotName]) === null || _slotModuleConfig_extensionSlots_slotName === void 0 ? void 0 : (_slotModuleConfig_extensionSlots_slotName_configure = _slotModuleConfig_extensionSlots_slotName.configure) === null || _slotModuleConfig_extensionSlots_slotName_configure === void 0 ? void 0 : _slotModuleConfig_extensionSlots_slotName_configure[extensionId]) !== null && _slotModuleConfig_extensionSlots_slotName_configure_extensionId !== void 0 ? _slotModuleConfig_extensionSlots_slotName_configure_extensionId : {};\n var extensionConfig = mergeConfigsFor(nameOfSchemaSource, providedConfigs);\n var combinedConfig = mergeConfigs([\n extensionConfig,\n configOverride\n ]);\n // TODO: validate that a schema exists for the module\n var schema = extensionConfigSchema !== null && extensionConfigSchema !== void 0 ? extensionConfigSchema : configState.schemas[extensionModuleName];\n validateStructure(schema, combinedConfig, nameOfSchemaSource);\n var config = setDefaults(schema, combinedConfig);\n runAllValidatorsInConfigTree(schema, config, nameOfSchemaSource);\n delete config.extensionSlots;\n return config;\n}\nfunction getImplementerToolsConfig(configState, tempConfigState) {\n var result = getSchemaWithValuesAndSources((0,ramda__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(configState.schemas));\n var configsAndSources = _to_consumable_array(configState.providedConfigs.map(function(c) {\n return [\n c.config,\n c.source\n ];\n })).concat([\n [\n tempConfigState.config,\n \"temporary config\"\n ]\n ]);\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = configsAndSources[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var _step_value = _sliced_to_array(_step.value, 2), config = _step_value[0], source = _step_value[1];\n result = mergeConfigs([\n result,\n createValuesAndSourcesTree(config, source)\n ]);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return result;\n}\nfunction getSchemaWithValuesAndSources(schema) {\n if (schema.hasOwnProperty(\"_default\")) {\n return _object_spread_props(_object_spread({}, schema), {\n _value: schema._default,\n _source: \"default\"\n });\n } else if (isOrdinaryObject(schema)) {\n return Object.keys(schema).reduce(function(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(function(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 var allConfigs = mergeConfigs(getProvidedConfigs(configState, tempConfigState));\n var slotConfigPerModule = Object.keys(allConfigs).reduce(function(obj, key) {\n var _allConfigs_key;\n if ((_allConfigs_key = allConfigs[key]) === null || _allConfigs_key === void 0 ? void 0 : _allConfigs_key.extensionSlots) {\n var _allConfigs_key1;\n obj[key] = (_allConfigs_key1 = allConfigs[key]) === null || _allConfigs_key1 === void 0 ? void 0 : _allConfigs_key1.extensionSlots;\n }\n return obj;\n }, {});\n validateAllExtensionSlotConfigs(slotConfigPerModule);\n var slotConfigs = Object.keys(slotConfigPerModule).reduce(function(obj, key) {\n obj = _object_spread({}, obj, slotConfigPerModule[key]);\n return obj;\n }, {});\n return slotConfigs;\n}\nfunction validateAllExtensionSlotConfigs(slotConfigPerModule) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.entries(slotConfigPerModule)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var _step_value = _sliced_to_array(_step.value, 2), moduleName = _step_value[0], configBySlotName = _step_value[1];\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;\n try {\n for(var _iterator1 = Object.entries(configBySlotName)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){\n var _step_value1 = _sliced_to_array(_step1.value, 2), slotName = _step_value1[0], config = _step_value1[1];\n validateExtensionSlotConfig(config, moduleName, slotName);\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally{\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction validateExtensionSlotConfig(config, moduleName, slotName) {\n var errorPrefix = \"Extension slot config '\".concat(moduleName, \".extensionSlots.\").concat(slotName);\n var invalidKeys = Object.keys(config).filter(function(k) {\n return ![\n \"add\",\n \"remove\",\n \"order\",\n \"configure\"\n ].includes(k);\n });\n if (invalidKeys.length) {\n console.error(errorPrefix + \"' contains invalid keys '\".concat(invalidKeys.join(\"', '\"), \"'\"));\n }\n if (config.add) {\n if (!Array.isArray(config.add) || !config.add.every(function(n) {\n return typeof n === \"string\";\n })) {\n console.error(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(function(n) {\n return typeof n === \"string\";\n })) {\n console.error(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(function(n) {\n return typeof n === \"string\";\n })) {\n console.error(errorPrefix + \".order' is invalid. Must be an array of strings (extension IDs)\");\n }\n }\n if (config.configure) {\n if (!isOrdinaryObject(config.configure)) {\n console.error(errorPrefix + \".configure' is invalid. Must be an object with extension IDs for keys\");\n }\n }\n}\nfunction getProvidedConfigs(configState, tempConfigState) {\n return _to_consumable_array(configState.providedConfigs.map(function(c) {\n return c.config;\n })).concat([\n tempConfigState.config\n ]);\n}\nfunction validateConfigSchema(moduleName, schema) {\n var keyPath = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : \"\";\n var updateMessage = \"Please verify that you are running the latest version and, if so, alert the maintainer.\";\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n var _loop = function() {\n var key = _step.value;\n var thisKeyPath = keyPath + (keyPath && \".\") + key;\n var schemaPart = schema[key];\n if (thisKeyPath === \"Display conditions\") {\n console.error(\"\".concat(moduleName, ' declares a configuration option called \"Display conditions\"; the \"Display conditions\" option is a reserved name. ').concat(updateMessage));\n }\n if (thisKeyPath === \"Translation overrides\") {\n console.error(\"\".concat(moduleName, ' declares a configuration option called \"Translation overrides\"; the \"Translation overrides\" option is a reserved name. ').concat(updateMessage));\n }\n if (!isOrdinaryObject(schemaPart)) {\n console.error(\"\".concat(moduleName, \" has bad config schema definition for key '\").concat(thisKeyPath, \"'. \").concat(updateMessage));\n return \"continue\";\n }\n if (!schemaPart.hasOwnProperty(\"_default\")) {\n // recurse for nested config keys\n validateConfigSchema(moduleName, schemaPart, thisKeyPath);\n }\n var elements = schemaPart._elements;\n if (hasObjectSchema(elements)) {\n validateConfigSchema(moduleName, elements, thisKeyPath + \"._elements\");\n }\n if (schemaPart._validators) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = schemaPart._validators[Symbol.iterator](), _step1; !(_iteratorNormalCompletion = (_step1 = _iterator.next()).done); _iteratorNormalCompletion = true){\n var validator = _step1.value;\n if (typeof validator !== \"function\") {\n console.error(\"\".concat(moduleName, \" has invalid validator for key '\").concat(thisKeyPath, \"' \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: validators must be functions that return either \" + \"undefined or an error string. Received \".concat(validator, \".\"));\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n var valueType = schemaPart._type;\n if (valueType && !Object.values(_types__WEBPACK_IMPORTED_MODULE_0__.Type).includes(valueType)) {\n console.error(\"\".concat(moduleName, \" has invalid type for key '\").concat(thisKeyPath, \"' \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: the allowed types are \".concat(Object.values(_types__WEBPACK_IMPORTED_MODULE_0__.Type).join(\", \"), \". \") + \"Received '\".concat(valueType, \"'\"));\n }\n if (Object.keys(schemaPart).every(function(k) {\n return [\n \"_description\",\n \"_validators\",\n \"_elements\",\n \"_type\"\n ].includes(k);\n }) && !keyPath.includes(\"._elements\")) {\n console.error(\"\".concat(moduleName, \" has bad config schema definition for key '\").concat(thisKeyPath, \"'. \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: all config elements must have a default. \" + \"Received \".concat(JSON.stringify(schemaPart)));\n }\n if (elements && valueType && ![\n _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array,\n _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object\n ].includes(valueType)) {\n console.error(\"\".concat(moduleName, \" has bad config schema definition for key '\").concat(thisKeyPath, \"'. \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: the 'elements' key only works with '_type' equal to 'Array' or 'Object'. \" + \"Received \".concat(JSON.stringify(valueType)));\n }\n };\n for(var _iterator = Object.keys(schema).filter(function(k) {\n return !k.startsWith(\"_\");\n })[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction getConfigForModule(moduleName, configState, tempConfigState) {\n if (!configState.schemas.hasOwnProperty(moduleName)) {\n throw Error(\"No config schema has been defined for \" + moduleName);\n }\n var schema = configState.schemas[moduleName];\n var inputConfig = mergeConfigsFor(moduleName, getProvidedConfigs(configState, tempConfigState));\n validateStructure(schema, inputConfig, moduleName);\n var config = setDefaults(schema, inputConfig);\n runAllValidatorsInConfigTree(schema, config, moduleName);\n delete config.extensionSlots;\n return config;\n}\nfunction mergeConfigsFor(moduleName, allConfigs) {\n var allConfigsForModule = allConfigs.map(function(param) {\n var c = param[moduleName];\n return c;\n }).filter(function(c) {\n return !!c;\n });\n return mergeConfigs(allConfigsForModule);\n}\nfunction mergeConfigs(configs) {\n var mergeDeepAll = (0,ramda__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(ramda__WEBPACK_IMPORTED_MODULE_4__[\"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) {\n var keyPath = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : \"\";\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n // validate each constituent element\n for(var _iterator = Object.keys(config)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var key = _step.value;\n var value = config[key];\n var thisKeyPath = keyPath + \".\" + key;\n var schemaPart = schema[key];\n if (!schema.hasOwnProperty(key)) {\n if (!(key === \"extensionSlots\" && keyPath !== \"\")) {\n console.error(\"Unknown config key '\".concat(thisKeyPath, \"' provided. Ignoring.\"));\n }\n continue;\n }\n validateBranchStructure(schemaPart, value, thisKeyPath);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction validateBranchStructure(schemaPart, value, keyPath) {\n checkType(keyPath, schemaPart._type, value);\n if (isOrdinaryObject(value)) {\n // structurally validate only if there's elements specified\n // or there's no `_default` value (which would indicate a freeform object)\n if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object) {\n validateDictionaryStructure(schemaPart, value, keyPath);\n } else if (!schemaPart.hasOwnProperty(\"_default\")) {\n // recurse to validate nested object structure\n validateStructure(schemaPart, value, keyPath);\n }\n } else {\n if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array) {\n validateArrayStructure(schemaPart, value, keyPath);\n }\n }\n}\nfunction validateDictionaryStructure(dictionarySchema, config, keyPath) {\n if (dictionarySchema._elements) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(config)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var key = _step.value;\n var value = config[key];\n validateStructure(dictionarySchema._elements, value, \"\".concat(keyPath, \".\").concat(key));\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n}\nfunction validateArrayStructure(arraySchema, value, keyPath) {\n // if there is an array element object schema, verify that elements match it\n if (hasObjectSchema(arraySchema._elements)) {\n for(var i = 0; i < value.length; i++){\n validateBranchStructure(arraySchema._elements, value[i], \"\".concat(keyPath, \"[\").concat(i, \"]\"));\n }\n }\n for(var i1 = 0; i1 < value.length; i1++){\n var _arraySchema__elements;\n checkType(\"\".concat(keyPath, \"[\").concat(i1, \"]\"), (_arraySchema__elements = arraySchema._elements) === null || _arraySchema__elements === void 0 ? void 0 : _arraySchema__elements._type, value[i1]);\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) {\n var keyPath = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : \"\";\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 var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(config)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var key = _step.value;\n var value = config[key];\n var thisKeyPath = keyPath + \".\" + key;\n var schemaPart = schema[key];\n if (schema._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object && schema._elements) {\n runAllValidatorsInConfigTree(schema._elements, value, thisKeyPath);\n } else {\n runAllValidatorsInConfigTree(schemaPart, value, thisKeyPath);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n } else if (Array.isArray(config) && schema._elements) {\n for(var i = 0; i < config.length; i++){\n runAllValidatorsInConfigTree(schema._elements, config[i], \"\".concat(keyPath, \"[\").concat(i, \"]\"));\n }\n }\n }\n}\nfunction checkType(keyPath, _type, value) {\n if (_type) {\n var validator = {\n Array: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isArray,\n Boolean: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isBoolean,\n ConceptUuid: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n Number: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isNumber,\n Object: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isObject,\n String: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isString,\n UUID: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n PersonAttributeTypeUuid: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n PatientIdentifierTypeUuid: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid\n };\n runValidators(keyPath, [\n validator[_type]\n ], value);\n }\n}\nfunction runValidators(keyPath, validators, value) {\n if (validators) {\n try {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = validators[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var validator = _step.value;\n var validatorResult = validator(value);\n if (typeof validatorResult === \"string\") {\n if (typeof value === \"object\") {\n console.error(\"Invalid configuration for \".concat(keyPath, \": \").concat(validatorResult));\n } else {\n console.error(\"Invalid configuration value \".concat(value, \" for \").concat(keyPath, \": \").concat(validatorResult));\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n } catch (e) {\n console.error('Skipping invalid validator at \"'.concat(keyPath, '\". Encountered error\\n\t').concat(e));\n }\n }\n}\n// Recursively fill in the config with values from the schema.\nvar setDefaults = function(schema, inputConfig) {\n var config = (0,ramda__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(inputConfig);\n if (!schema) {\n return config;\n }\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n var _loop = function() {\n var key = _step.value;\n var configPart = config[key];\n var 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(\"_default\")) {\n // We assume that schemaPart defines a config value, since it has\n // a property `_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 var elements = schemaPart._elements;\n if (configPart && hasObjectSchema(elements)) {\n if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array && Array.isArray(configPart)) {\n var configWithDefaults = configPart.map(function(conf) {\n return setDefaults(elements, conf);\n });\n config[key] = configWithDefaults;\n } else if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(configPart)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion = (_step1 = _iterator.next()).done); _iteratorNormalCompletion = true){\n var objectKey = _step1.value;\n configPart[objectKey] = setDefaults(elements, configPart[objectKey]);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n }\n } else if (isOrdinaryObject(schemaPart)) {\n // Since schemaPart has no property \"_default\", 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 var selectedConfigPart = config.hasOwnProperty(key) ? configPart : {};\n if (isOrdinaryObject(selectedConfigPart)) {\n config[key] = setDefaults(schemaPart, selectedConfigPart);\n }\n }\n };\n for(var _iterator = Object.keys(schema)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return config;\n};\nfunction hasObjectSchema(elementsSchema) {\n return !!elementsSchema && Object.keys(elementsSchema).filter(function(e) {\n return ![\n \"_default\",\n \"_validators\"\n ].includes(e);\n }).length > 0;\n}\nfunction isOrdinaryObject(value) {\n return typeof value === \"object\" && !Array.isArray(value) && value !== null;\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 var _extensionId_split = _sliced_to_array(extensionId.split(\"#\"), 1), extensionName = _extensionId_split[0];\n return extensionName;\n}\n/**\n * The implicitConfigSchema is implicitly included in every configuration schema\n */ var implicitConfigSchema = {\n \"Display conditions\": {\n privileges: {\n _description: \"The privilege(s) the user must have to use this extension\",\n _type: _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array,\n _default: []\n }\n },\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__WEBPACK_IMPORTED_MODULE_0__.Type.Object,\n _default: {}\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvc3JjL21vZHVsZS1jb25maWcvbW9kdWxlLWNvbmZpZy50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZCQUE2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDdUM7QUFDZ0Q7QUFDWDtBQVl4RjtBQUlqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1CQyxHQUNEbUIsb0JBQW9CUCx1REFBbUJBLENBQUNRLFFBQVEsSUFBSUgsd0RBQW9CQSxDQUFDRyxRQUFRO0FBQ2pGUix1REFBbUJBLENBQUNTLFNBQVMsQ0FBQyxTQUFDQztXQUFnQkgsb0JBQW9CRyxhQUFhTCx3REFBb0JBLENBQUNHLFFBQVE7O0FBQzdHSCx3REFBb0JBLENBQUNJLFNBQVMsQ0FBQyxTQUFDRTtXQUM5Qkosb0JBQW9CUCx1REFBbUJBLENBQUNRLFFBQVEsSUFBSUc7O0FBR3REQyw4QkFBOEJaLHVEQUFtQkEsQ0FBQ1EsUUFBUSxJQUFJSCx3REFBb0JBLENBQUNHLFFBQVE7QUFDM0ZSLHVEQUFtQkEsQ0FBQ1MsU0FBUyxDQUFDLFNBQUNDO1dBQzdCRSw4QkFBOEJGLGFBQWFMLHdEQUFvQkEsQ0FBQ0csUUFBUTs7QUFFMUVILHdEQUFvQkEsQ0FBQ0ksU0FBUyxDQUFDLFNBQUNFO1dBQzlCQyw4QkFBOEJaLHVEQUFtQkEsQ0FBQ1EsUUFBUSxJQUFJRzs7QUFHaEVFLDRCQUE0QmIsdURBQW1CQSxDQUFDUSxRQUFRLElBQUlILHdEQUFvQkEsQ0FBQ0csUUFBUTtBQUN6RlIsdURBQW1CQSxDQUFDUyxTQUFTLENBQUMsU0FBQ0M7V0FDN0JHLDRCQUE0QkgsYUFBYUwsd0RBQW9CQSxDQUFDRyxRQUFROztBQUV4RUgsd0RBQW9CQSxDQUFDSSxTQUFTLENBQUMsU0FBQ0U7V0FDOUJFLDRC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QzJJLGdCQUFnQnZELE1BQU0sQ0FBQyxTQUFDaUQ7ZUFBTSxDQUFDO1lBQUM7WUFBWTtTQUFjLENBQUMvQyxRQUFRLENBQUMrQztPQUFJOUMsTUFBTSxHQUFHO0FBRXJIO0FBRUEsU0FBU2IsaUJBQWlCeUMsS0FBSyxFQUFFO0lBQy9CLE9BQU8sT0FBT0EsVUFBVSxZQUFZLENBQUN4QixNQUFNcEgsT0FBTyxDQUFDNEksVUFBVUEsVUFBVSxJQUFJO0FBQzdFO0FBRUE7OztDQUdDLEdBQ0QsU0FBUzdELHVCQUF1QjVCLFdBQW1CLEVBQUU7SUFDbkQsSUFBd0JBLHNDQUFBQSxZQUFZa0gsS0FBSyxDQUFDLFVBQW5DM0csZ0JBQWlCUDtJQUN4QixPQUFPTztBQUNUO0FBRUE7O0NBRUMsR0FDRCxJQUFNRix1QkFBcUM7SUFDekMsc0JBQXNCO1FBQ3BCOEcsWUFBWTtZQUNWQyxjQUFjO1lBQ2RwQyxPQUFPcEksd0NBQUlBLENBQUNxSCxLQUFLO1lBQ2pCbkIsVUFBVSxFQUFFO1FBQ2Q7SUFDRjtJQUNBLHlCQUF5QjtRQUN2QnNFLGNBQ0U7UUFDRnBDLE9BQU9wSSx3Q0FBSUEsQ0FBQ3lCLE1BQU07UUFDbEJ5RSxVQUFVLENBQUM7SUFDYjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLWNvbmZpZy9zcmMvbW9kdWxlLWNvbmZpZy9tb2R1bGUtY29uZmlnLnRzPzdjYTEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBtb2R1bGUgQGNhdGVnb3J5IENvbmZpZyAqL1xuaW1wb3J0IHsgY2xvbmUsIHJlZHVjZSwgbWVyZ2VEZWVwUmlnaHQsIGVxdWFscywgb21pdCB9IGZyb20gJ3JhbWRhJztcbmltcG9ydCB7IENvbmZpZywgQ29uZmlnT2JqZWN0LCBDb25maWdTY2hlbWEsIEV4dGVuc2lvblNsb3RDb25maWcsIEV4dGVuc2lvblNsb3RDb25maWdPYmplY3QsIFR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0Jvb2xlYW4sIGlzVXVpZCwgaXNOdW1iZXIsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uL3ZhbGlkYXRvcnMvdHlwZS12YWxpZGF0b3JzJztcbmltcG9ydCB7XG4gIENvbmZpZ0V4dGVuc2lvblN0b3JlLFxuICBDb25maWdJbnRlcm5hbFN0b3JlLFxuICBjb25maWdJbnRlcm5hbFN0b3JlLFxuICBDb25maWdTdG9yZSxcbiAgY29uZmlnRXh0ZW5zaW9uU3RvcmUsXG4gIGdldENvbmZpZ1N0b3JlLFxuICBnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUsXG4gIGltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZSxcbiAgdGVtcG9yYXJ5Q29uZmlnU3RvcmUsXG4gIGdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUsXG59IGZyb20gJy4vc3RhdGUnO1xuaW1wb3J0IHR5cGUge30gZnJvbSAnQG9wZW5tcnMvZXNtLWdsb2JhbHMnO1xuaW1wb3J0IHsgVGVtcG9yYXJ5Q29uZmlnU3RvcmUgfSBmcm9tICcuLic7XG5cbi8qKlxuICogU3RvcmUgc2V0dXBcbiAqXG4gKlxuICogU2V0IHVwIHN0b3JlcyBhbmQgc3Vic2NyaXB0aW9ucyBzbyB0aGF0IGlucHV0cyBnZXQgcHJvY2Vzc2VkIGFwcHJvcHJpYXRlbHkuXG4gKlxuICogVGhlcmUgYXJlICppbnB1dCogc3RvcmVzIGFuZCAqb3V0cHV0KiBzdG9yZXMuIFRoZSAqaW5wdXQqIHN0b3Jlc1xuICogYXJlIGNvbmZpZ0ludGVybmFsU3RvcmUsIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLCBhbmQgY29uZmlnRXh0ZW5zaW9uU3RvcmUuIFRoZVxuICogb3V0cHV0IHN0b3JlcyBhcmUgc2V0IGluIHRoZSBgY29tcHV0ZS4uLmAgZnVuY3Rpb25zLiBUaGV5IGFyZSB0aGUgbW9kdWxlXG4gKiBjb25maWcgc3RvcmVzLCB0aGUgZXh0ZW5zaW9uIHNsb3QgY29uZmlnIHN0b3JlcyAoYnkgbW9kdWxlKSwgdGhlIGV4dGVuc2lvblxuICogY29uZmlnIHN0b3JlcywgYW5kIHRoZSBpbXBsZW1lbnRlciB0b29scyBjb25maWcgc3RvcmUuXG4gKlxuICogVGhpcyBjb2RlIHNldHMgdXAgdGhlIHN1YnNjcmlwdGlvbnMgc28gdGhhdCB3aGVuIGFuIGlucHV0IHN0b3JlIGNoYW5nZXMsXG4gKiB0aGUgY29ycmVjdCBzZXQgb2Ygb3V0cHV0IHN0b3JlcyBhcmUgdXBkYXRlZC5cbiAqXG4gKiBBbGwgYGNvbXB1dGUuLi5gIGZ1bmN0aW9ucyBleGNlcHQgYGNvbXB1dGVFeHRlbnNpb25Db25maWdzYCBhcmUgcHVyZVxuICogKG9yIGFyZSBzdXBwb3NlZCB0byBiZSksIG90aGVyIHRoYW4gdGhlIGZhY3QgdGhhdCB0aGV5IGFsbCBgc2V0U3RhdGVgXG4gKiBzdG9yZSB2YWx1ZXMgYXQgdGhlIGVuZC4gYGNvbXB1dGVFeHRlbnNpb25Db25maWdzYCBjYWxscyBgZ2V0R2xvYmFsU3RvcmVgLFxuICogd2hpY2ggY3JlYXRlcyBzdG9yZXMuXG4gKi9cbmNvbXB1dGVNb2R1bGVDb25maWcoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbmNvbmZpZ0ludGVybmFsU3RvcmUuc3Vic2NyaWJlKChjb25maWdTdGF0ZSkgPT4gY29tcHV0ZU1vZHVsZUNvbmZpZyhjb25maWdTdGF0ZSwgdGVtcG9yYXJ5Q29uZmlnU3RvcmUuZ2V0U3RhdGUoKSkpO1xudGVtcG9yYXJ5Q29uZmlnU3RvcmUuc3Vic2NyaWJlKCh0ZW1wQ29uZmlnU3RhdGUpID0+XG4gIGNvbXB1dGVNb2R1bGVDb25maWcoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wQ29uZmlnU3RhdGUpLFxuKTtcblxuY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWcoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbmNvbmZpZ0ludGVybmFsU3RvcmUuc3Vic2NyaWJlKChjb25maWdTdGF0ZSkgPT5cbiAgY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWcoY29uZmlnU3RhdGUsIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpLFxuKTtcbnRlbXBvcmFyeUNvbmZpZ1N0b3JlLnN1YnNjcmliZSgodGVtcENvbmZpZ1N0YXRlKSA9PlxuICBjb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIHRlbXBDb25maWdTdGF0ZSksXG4pO1xuXG5jb21wdXRlRXh0ZW5zaW9uU2xvdENvbmZpZ3MoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbmNvbmZpZ0ludGVybmFsU3RvcmUuc3Vic2NyaWJlKChjb25maWdTdGF0ZSkgPT5cbiAgY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKSxcbik7XG50ZW1wb3JhcnlDb25maWdTdG9yZS5zdWJzY3JpYmUoKHRlbXBDb25maWdTdGF0ZSkgPT5cbiAgY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzKGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKSwgdGVtcENvbmZpZ1N0YXRlKSxcbik7XG5cbmNvbXB1dGVFeHRlbnNpb25Db25maWdzKFxuICBjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksXG4gIGNvbmZpZ0V4dGVuc2lvblN0b3JlLmdldFN0YXRlKCksXG4gIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCksXG4pO1xuY29uZmlnSW50ZXJuYWxTdG9yZS5zdWJzY3JpYmUoKGNvbmZpZ1N0YXRlKSA9PiB7XG4gIGNvbXB1dGVFeHRlbnNpb25Db25maWdzKGNvbmZpZ1N0YXRlLCBjb25maWdFeHRlbnNpb25TdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbn0pO1xuY29uZmlnRXh0ZW5zaW9uU3RvcmUuc3Vic2NyaWJlKChleHRlbnNpb25TdGF0ZSkgPT4ge1xuICBjb21wdXRlRXh0ZW5zaW9uQ29uZmlncyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIGV4dGVuc2lvblN0YXRlLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbn0pO1xudGVtcG9yYXJ5Q29uZmlnU3RvcmUuc3Vic2NyaWJlKCh0ZW1wQ29uZmlnU3RhdGUpID0+IHtcbiAgY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCBjb25maWdFeHRlbnNpb25TdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wQ29uZmlnU3RhdGUpO1xufSk7XG5cbmZ1bmN0aW9uIGNvbXB1dGVNb2R1bGVDb25maWcoc3RhdGU6IENvbmZpZ0ludGVybmFsU3RvcmUsIHRlbXBTdGF0ZTogVGVtcG9yYXJ5Q29uZmlnU3RvcmUpIHtcbiAgZm9yIChsZXQgbW9kdWxlTmFtZSBvZiBPYmplY3Qua2V5cyhzdGF0ZS5zY2hlbWFzKSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zvck1vZHVsZShtb2R1bGVOYW1lLCBzdGF0ZSwgdGVtcFN0YXRlKTtcbiAgICBjb25zdCBtb2R1bGVTdG9yZSA9IGdldENvbmZpZ1N0b3JlKG1vZHVsZU5hbWUpO1xuICAgIG1vZHVsZVN0b3JlLnNldFN0YXRlKHsgbG9hZGVkOiB0cnVlLCBjb25maWcgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzKHN0YXRlOiBDb25maWdJbnRlcm5hbFN0b3JlLCB0ZW1wU3RhdGU6IFRlbXBvcmFyeUNvbmZpZ1N0b3JlKSB7XG4gIGNvbnN0IHNsb3RDb25maWdzID0gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ3Moc3RhdGUsIHRlbXBTdGF0ZSk7XG4gIGNvbnN0IG5ld1Nsb3RTdG9yZUVudHJpZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoc2xvdENvbmZpZ3MpLm1hcCgoW3Nsb3ROYW1lLCBjb25maWddKSA9PiBbc2xvdE5hbWUsIHsgbG9hZGVkOiB0cnVlLCBjb25maWcgfV0pLFxuICApO1xuICBjb25zdCBzbG90U3RvcmUgPSBnZXRFeHRlbnNpb25TbG90c0NvbmZpZ1N0b3JlKCk7XG4gIGNvbnN0IG9sZFN0YXRlID0gc2xvdFN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IG5ld1N0YXRlID0geyBzbG90czogeyAuLi5vbGRTdGF0ZS5zbG90cywgLi4ubmV3U2xvdFN0b3JlRW50cmllcyB9IH07XG4gIGlmICghZXF1YWxzKG9sZFN0YXRlLCBuZXdTdGF0ZSkpIHtcbiAgICBzbG90U3RvcmUuc2V0U3RhdGUobmV3U3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnKHN0YXRlOiBDb25maWdJbnRlcm5hbFN0b3JlLCB0ZW1wQ29uZmlnU3RhdGU6IFRlbXBvcmFyeUNvbmZpZ1N0b3JlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldEltcGxlbWVudGVyVG9vbHNDb25maWcoc3RhdGUsIHRlbXBDb25maWdTdGF0ZSk7XG4gIGltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZS5zZXRTdGF0ZSh7IGNvbmZpZyB9KTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MoXG4gIGNvbmZpZ1N0YXRlOiBDb25maWdJbnRlcm5hbFN0b3JlLFxuICBleHRlbnNpb25TdGF0ZTogQ29uZmlnRXh0ZW5zaW9uU3RvcmUsXG4gIHRlbXBDb25maWdTdGF0ZTogVGVtcG9yYXJ5Q29uZmlnU3RvcmUsXG4pIHtcbiAgY29uc3QgY29uZmlncyA9IHt9O1xuICBmb3IgKGxldCBleHRlbnNpb24gb2YgZXh0ZW5zaW9uU3RhdGUubW91bnRlZEV4dGVuc2lvbnMpIHtcbiAgICBjb25zdCBjb25maWcgPSBjb21wdXRlRXh0ZW5zaW9uQ29uZmlnKFxuICAgICAgZXh0ZW5zaW9uLnNsb3RNb2R1bGVOYW1lLFxuICAgICAgZXh0ZW5zaW9uLmV4dGVuc2lvbk1vZHVsZU5hbWUsXG4gICAgICBleHRlbnNpb24uc2xvdE5hbWUsXG4gICAgICBleHRlbnNpb24uZXh0ZW5zaW9uSWQsXG4gICAgICBjb25maWdTdGF0ZSxcbiAgICAgIHRlbXBDb25maWdTdGF0ZSxcbiAgICApO1xuICAgIGNvbmZpZ3NbZXh0ZW5zaW9uLnNsb3ROYW1lXSA9IHtcbiAgICAgIC4uLmNvbmZpZ3NbZXh0ZW5zaW9uLnNsb3ROYW1lXSxcbiAgICAgIFtleHRlbnNpb24uZXh0ZW5zaW9uSWRdOiB7IGNvbmZpZywgbG9hZGVkOiB0cnVlIH0sXG4gICAgfTtcbiAgfVxuICBnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUoKS5zZXRTdGF0ZSh7IGNvbmZpZ3MgfSk7XG59XG5cbi8qXG4gKiBBUElcbiAqXG4gKi9cblxuLyoqXG4gKiBUaGlzIGRlZmluZXMgYSBjb25maWd1cmF0aW9uIHNjaGVtYSBmb3IgYSBtb2R1bGUuIFRoZSBzY2hlbWEgdGVsbHMgdGhlXG4gKiBjb25maWd1cmF0aW9uIHN5c3RlbSBob3cgdGhlIG1vZHVsZSBjYW4gYmUgY29uZmlndXJlZC4gSXQgc3BlY2lmaWVzXG4gKiB3aGF0IG1ha2VzIGNvbmZpZ3VyYXRpb24gdmFsaWQgb3IgaW52YWxpZC5cbiAqXG4gKiBTZWUgW0NvbmZpZ3VyYXRpb24gU3lzdGVtXShodHRwczovL28zLWRvY3Mub3Blbm1ycy5vcmcvZG9jcy9jb25maWd1cmF0aW9uLXN5c3RlbSlcbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlZmluaW5nIGEgY29uZmlnIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0gbW9kdWxlTmFtZSBOYW1lIG9mIHRoZSBtb2R1bGUgdGhlIHNjaGVtYSBpcyBiZWluZyBkZWZpbmVkIGZvci4gR2VuZXJhbGx5XG4gKiAgIHNob3VsZCBiZSB0aGUgb25lIGluIHdoaWNoIHRoZSBgZGVmaW5lQ29uZmlnU2NoZW1hYCBjYWxsIHRha2VzIHBsYWNlLlxuICogQHBhcmFtIHNjaGVtYSBUaGUgY29uZmlnIHNjaGVtYSBmb3IgdGhlIG1vZHVsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWU6IHN0cmluZywgc2NoZW1hOiBDb25maWdTY2hlbWEpIHtcbiAgdmFsaWRhdGVDb25maWdTY2hlbWEobW9kdWxlTmFtZSwgc2NoZW1hKTtcbiAgY29uc3QgZW5oYW5jZWRTY2hlbWEgPSBtZXJnZURlZXBSaWdodChzY2hlbWEsIGltcGxpY2l0Q29uZmlnU2NoZW1hKSBhcyBDb25maWdTY2hlbWE7XG5cbiAgY29uc3Qgc3RhdGUgPSBjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbmZpZ0ludGVybmFsU3RvcmUuc2V0U3RhdGUoe1xuICAgIHNjaGVtYXM6IHsgLi4uc3RhdGUuc2NoZW1hcywgW21vZHVsZU5hbWVdOiBlbmhhbmNlZFNjaGVtYSB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGRlZmluZXMgYSBjb25maWd1cmF0aW9uIHNjaGVtYSBmb3IgYW4gZXh0ZW5zaW9uLiBXaGVuIGEgc2NoZW1hIGlzIGRlZmluZWRcbiAqIGZvciBhbiBleHRlbnNpb24sIHRoYXQgZXh0ZW5zaW9uIHdpbGwgcmVjZWl2ZSB0aGUgY29uZmlndXJhdGlvbiBjb3JyZXNwb25kaW5nXG4gKiB0byB0aGF0IHNjaGVtYSwgcmF0aGVyIHRoYW4gdGhlIGNvbmZpZ3VyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGUgbW9kdWxlXG4gKiBpbiB3aGljaCBpdCBpcyBkZWZpbmVkLlxuICpcbiAqIFRoZSBzY2hlbWEgdGVsbHMgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGhvdyB0aGUgbW9kdWxlIGNhbiBiZSBjb25maWd1cmVkLlxuICogSXQgc3BlY2lmaWVzIHdoYXQgbWFrZXMgY29uZmlndXJhdGlvbiB2YWxpZCBvciBpbnZhbGlkLlxuICpcbiAqIFNlZSBbQ29uZmlndXJhdGlvbiBTeXN0ZW1dKGh0dHBzOi8vbzMtZG9jcy5vcGVubXJzLm9yZy9kb2NzL2NvbmZpZ3VyYXRpb24tc3lzdGVtKVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGVmaW5pbmcgYSBjb25maWcgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSBleHRlbnNpb25OYW1lIE5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0aGUgc2NoZW1hIGlzIGJlaW5nIGRlZmluZWQgZm9yLlxuICogICBTaG91bGQgbWF0Y2ggdGhlIGBuYW1lYCBvZiBvbmUgb2YgdGhlIGBleHRlbnNpb25zYCBlbnRyaWVzIGJlaW5nIHJldHVybmVkXG4gKiAgIGJ5IGBzZXR1cE9wZW5NUlNgLlxuICogQHBhcmFtIHNjaGVtYSBUaGUgY29uZmlnIHNjaGVtYSBmb3IgdGhlIGV4dGVuc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRXh0ZW5zaW9uQ29uZmlnU2NoZW1hKGV4dGVuc2lvbk5hbWU6IHN0cmluZywgc2NoZW1hOiBDb25maWdTY2hlbWEpIHtcbiAgdmFsaWRhdGVDb25maWdTY2hlbWEoZXh0ZW5zaW9uTmFtZSwgc2NoZW1hKTtcbiAgY29uc3QgZW5oYW5jZWRTY2hlbWEgPSBtZXJnZURlZXBSaWdodChzY2hlbWEsIGltcGxpY2l0Q29uZmlnU2NoZW1hKSBhcyBDb25maWdTY2hlbWE7XG5cbiAgY29uc3Qgc3RhdGUgPSBjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCk7XG4gIGlmIChzdGF0ZS5zY2hlbWFzW2V4dGVuc2lvbk5hbWVdKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYENvbmZpZyBzY2hlbWEgZm9yIGV4dGVuc2lvbiAke2V4dGVuc2lvbk5hbWV9IGFscmVhZHkgZXhpc3RzLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZXh0ZW5zaW9ucyB3aXRoIHRoaXMgc2FtZSBuYW1lLCBvbmUgd2lsbCBwcm9iYWJseSBjcmFzaC5gLFxuICAgICk7XG4gIH1cblxuICBjb25maWdJbnRlcm5hbFN0b3JlLnNldFN0YXRlKHtcbiAgICBzY2hlbWFzOiB7IC4uLnN0YXRlLnNjaGVtYXMsIFtleHRlbnNpb25OYW1lXTogZW5oYW5jZWRTY2hlbWEgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlKGNvbmZpZzogQ29uZmlnLCBzb3VyY2VOYW1lID0gJ3Byb3ZpZGVkJykge1xuICBjb25zdCBzdGF0ZSA9IGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uZmlnSW50ZXJuYWxTdG9yZS5zZXRTdGF0ZSh7XG4gICAgcHJvdmlkZWRDb25maWdzOiBbLi4uc3RhdGUucHJvdmlkZWRDb25maWdzLCB7IHNvdXJjZTogc291cmNlTmFtZSwgY29uZmlnIH1dLFxuICB9KTtcbn1cblxuLyoqXG4gKiBBIHByb21pc2UtYmFzZWQgd2F5IHRvIGFjY2VzcyB0aGUgY29uZmlnIGFzIHNvb24gYXMgaXQgaXMgZnVsbHkgbG9hZGVkLlxuICogSWYgaXQgaXMgYWxyZWFkeSBsb2FkZWQsIHJlc29sdmVzIHRoZSBjb25maWcgaW4gaXRzIHByZXNlbnQgc3RhdGUuXG4gKlxuICogVGhpcyBpcyBhIHVzZWZ1bCBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBnZXQgdGhlIGNvbmZpZyBpbiB0aGUgY291cnNlXG4gKiBvZiB0aGUgZXhlY3V0aW9uIG9mIGEgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIG1vZHVsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBmb3Igd2hpY2ggdG8gbG9vayB1cCB0aGUgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWcobW9kdWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxDb25maWc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPENvbmZpZz4oKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBzdG9yZSA9IGdldENvbmZpZ1N0b3JlKG1vZHVsZU5hbWUpO1xuICAgIGZ1bmN0aW9uIHVwZGF0ZShzdGF0ZTogQ29uZmlnU3RvcmUpIHtcbiAgICAgIGlmIChzdGF0ZS5sb2FkZWQgJiYgc3RhdGUuY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IG9taXQoWydEaXNwbGF5IGNvbmRpdGlvbnMnLCAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJ10sIHN0YXRlLmNvbmZpZyk7XG4gICAgICAgIHJlc29sdmUoY29uZmlnKTtcbiAgICAgICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlKHN0b3JlLmdldFN0YXRlKCkpO1xuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc3RvcmUuc3Vic2NyaWJlKHVwZGF0ZSk7XG4gIH0pO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnSW50ZXJuYWwobW9kdWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxDb25maWc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPENvbmZpZz4oKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBzdG9yZSA9IGdldENvbmZpZ1N0b3JlKG1vZHVsZU5hbWUpO1xuICAgIGZ1bmN0aW9uIHVwZGF0ZShzdGF0ZTogQ29uZmlnU3RvcmUpIHtcbiAgICAgIGlmIChzdGF0ZS5sb2FkZWQgJiYgc3RhdGUuY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHN0YXRlLmNvbmZpZztcbiAgICAgICAgcmVzb2x2ZShjb25maWcpO1xuICAgICAgICB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGUoc3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSBzdG9yZS5zdWJzY3JpYmUodXBkYXRlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW5kIGludGVycG9sYXRlIGRlZmF1bHRzIGZvciBgcHJvdmlkZWRDb25maWdgIGFjY29yZGluZyB0byBgc2NoZW1hYFxuICpcbiAqIEBwYXJhbSBzY2hlbWEgIGEgY29uZmlndXJhdGlvbiBzY2hlbWFcbiAqIEBwYXJhbSBwcm92aWRlZENvbmZpZyAgYW4gb2JqZWN0IG9mIGNvbmZpZyB2YWx1ZXMgKHdpdGhvdXQgdGhlIHRvcC1sZXZlbCBtb2R1bGUgbmFtZSlcbiAqIEBwYXJhbSBrZXlQYXRoQ29udGV4dCAgYSBkb3QtZGVwYXJhdGVkIHN0cmluZyB3aGljaCBoZWxwcyB0aGUgdXNlciBmaWd1cmUgb3V0IHdoZXJlXG4gKiAgICAgdGhlIHByb3ZpZGVkIGNvbmZpZyBjYW1lIGZyb21cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0NvbmZpZyhzY2hlbWE6IENvbmZpZ1NjaGVtYSwgcHJvdmlkZWRDb25maWc6IENvbmZpZ09iamVjdCwga2V5UGF0aENvbnRleHQ6IHN0cmluZykge1xuICB2YWxpZGF0ZVN0cnVjdHVyZShzY2hlbWEsIHByb3ZpZGVkQ29uZmlnLCBrZXlQYXRoQ29udGV4dCk7XG4gIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKHNjaGVtYSwgcHJvdmlkZWRDb25maWcpO1xuICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYSwgY29uZmlnLCBrZXlQYXRoQ29udGV4dCk7XG4gIHJldHVybiBjb25maWc7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zXG4gKlxuICovXG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBmb3IgYW4gZXh0ZW5zaW9uLiBUaGlzIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWNcbiAqIHRvIHRoZSBzbG90IGluIHdoaWNoIGl0IGlzIG1vdW50ZWQsIGFuZCBpdHMgSUQgd2l0aGluIHRoYXQgc2xvdC5cbiAqXG4gKiBUaGUgc2NoZW1hIGZvciB0aGF0IGNvbmZpZ3VyYXRpb24gaXMgdGhlIGV4dGVuc2lvbiBzY2hlbWEuIElmIG5vIGV4dGVuc2lvblxuICogc2NoZW1hIGhhcyBiZWVuIHByb3ZpZGVkLCB0aGUgc2NoZW1hIHVzZWQgaXMgdGhlIHNjaGVtYSBvZiB0aGUgbW9kdWxlIGluXG4gKiB3aGljaCB0aGUgZXh0ZW5zaW9uIGlzIGRlZmluZWQuXG4gKlxuICogQHBhcmFtIHNsb3RNb2R1bGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgd2hpY2ggZGVmaW5lcyB0aGUgZXh0ZW5zaW9uIHNsb3RcbiAqIEBwYXJhbSBleHRlbnNpb25Nb2R1bGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgd2hpY2ggZGVmaW5lcyB0aGUgZXh0ZW5zaW9uIChhbmQgdGhlcmVmb3JlIHRoZSBjb25maWcgc2NoZW1hKVxuICogQHBhcmFtIHNsb3ROYW1lIFRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gc2xvdCB3aGVyZSB0aGUgZXh0ZW5zaW9uIGlzIG1vdW50ZWRcbiAqIEBwYXJhbSBleHRlbnNpb25JZCBUaGUgSUQgb2YgdGhlIGV4dGVuc2lvbiBpbiBpdHMgc2xvdFxuICovXG5mdW5jdGlvbiBjb21wdXRlRXh0ZW5zaW9uQ29uZmlnKFxuICBzbG90TW9kdWxlTmFtZTogc3RyaW5nLFxuICBleHRlbnNpb25Nb2R1bGVOYW1lOiBzdHJpbmcsXG4gIHNsb3ROYW1lOiBzdHJpbmcsXG4gIGV4dGVuc2lvbklkOiBzdHJpbmcsXG4gIGNvbmZpZ1N0YXRlOiBDb25maWdJbnRlcm5hbFN0b3JlLFxuICB0ZW1wQ29uZmlnU3RhdGU6IFRlbXBvcmFyeUNvbmZpZ1N0b3JlLFxuKSB7XG4gIGNvbnN0IGV4dGVuc2lvbk5hbWUgPSBnZXRFeHRlbnNpb25OYW1lRnJvbUlkKGV4dGVuc2lvbklkKTtcbiAgY29uc3QgZXh0ZW5zaW9uQ29uZmlnU2NoZW1hID0gY29uZmlnU3RhdGUuc2NoZW1hc1tleHRlbnNpb25OYW1lXTtcbiAgY29uc3QgbmFtZU9mU2NoZW1hU291cmNlID0gZXh0ZW5zaW9uQ29uZmlnU2NoZW1hID8gZXh0ZW5zaW9uTmFtZSA6IGV4dGVuc2lvbk1vZHVsZU5hbWU7XG4gIGNvbnN0IHByb3ZpZGVkQ29uZmlncyA9IGdldFByb3ZpZGVkQ29uZmlncyhjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKTtcbiAgY29uc3Qgc2xvdE1vZHVsZUNvbmZpZyA9IG1lcmdlQ29uZmlnc0ZvcihzbG90TW9kdWxlTmFtZSwgcHJvdmlkZWRDb25maWdzKTtcbiAgY29uc3QgY29uZmlnT3ZlcnJpZGUgPSBzbG90TW9kdWxlQ29uZmlnPy5leHRlbnNpb25TbG90cz8uW3Nsb3ROYW1lXT8uY29uZmlndXJlPy5bZXh0ZW5zaW9uSWRdID8/IHt9O1xuICBjb25zdCBleHRlbnNpb25Db25maWcgPSBtZXJnZUNvbmZpZ3NGb3IobmFtZU9mU2NoZW1hU291cmNlLCBwcm92aWRlZENvbmZpZ3MpO1xuICBjb25zdCBjb21iaW5lZENvbmZpZyA9IG1lcmdlQ29uZmlncyhbZXh0ZW5zaW9uQ29uZmlnLCBjb25maWdPdmVycmlkZV0pO1xuICAvLyBUT0RPOiB2YWxpZGF0ZSB0aGF0IGEgc2NoZW1hIGV4aXN0cyBmb3IgdGhlIG1vZHVsZVxuICBjb25zdCBzY2hlbWEgPSBleHRlbnNpb25Db25maWdTY2hlbWEgPz8gY29uZmlnU3RhdGUuc2NoZW1hc1tleHRlbnNpb25Nb2R1bGVOYW1lXTtcbiAgdmFsaWRhdGVTdHJ1Y3R1cmUoc2NoZW1hLCBjb21iaW5lZENvbmZpZywgbmFtZU9mU2NoZW1hU291cmNlKTtcbiAgY29uc3QgY29uZmlnID0gc2V0RGVmYXVsdHMoc2NoZW1hLCBjb21iaW5lZENvbmZpZyk7XG4gIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoc2NoZW1hLCBjb25maWcsIG5hbWVPZlNjaGVtYVNvdXJjZSk7XG4gIGRlbGV0ZSBjb25maWcuZXh0ZW5zaW9uU2xvdHM7XG4gIHJldHVybiBjb25maWc7XG59XG5cbmZ1bmN0aW9uIGdldEltcGxlbWVudGVyVG9vbHNDb25maWcoXG4gIGNvbmZpZ1N0YXRlOiBDb25maWdJbnRlcm5hbFN0b3JlLFxuICB0ZW1wQ29uZmlnU3RhdGU6IFRlbXBvcmFyeUNvbmZpZ1N0b3JlLFxuKTogUmVjb3JkPHN0cmluZywgQ29uZmlnPiB7XG4gIGxldCByZXN1bHQgPSBnZXRTY2hlbWFXaXRoVmFsdWVzQW5kU291cmNlcyhjbG9uZShjb25maWdTdGF0ZS5zY2hlbWFzKSk7XG4gIGNvbnN0IGNvbmZpZ3NBbmRTb3VyY2VzID0gW1xuICAgIC4uLmNvbmZpZ1N0YXRlLnByb3ZpZGVkQ29uZmlncy5tYXAoKGMpID0+IFtjLmNvbmZpZywgYy5zb3VyY2VdKSxcbiAgICBbdGVtcENvbmZpZ1N0YXRlLmNvbmZpZywgJ3RlbXBvcmFyeSBjb25maWcnXSxcbiAgXSBhcyBBcnJheTxbQ29uZmlnLCBzdHJpbmddPjtcbiAgZm9yIChsZXQgW2NvbmZpZywgc291cmNlXSBvZiBjb25maWdzQW5kU291cmNlcykge1xuICAgIHJlc3VsdCA9IG1lcmdlQ29uZmlncyhbcmVzdWx0LCBjcmVhdGVWYWx1ZXNBbmRTb3VyY2VzVHJlZShjb25maWcsIHNvdXJjZSldKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZXRTY2hlbWFXaXRoVmFsdWVzQW5kU291cmNlcyhzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnX2RlZmF1bHQnKSkge1xuICAgIHJldHVybiB7IC4uLnNjaGVtYSwgX3ZhbHVlOiBzY2hlbWEuX2RlZmF1bHQsIF9zb3VyY2U6ICdkZWZhdWx0JyB9O1xuICB9IGVsc2UgaWYgKGlzT3JkaW5hcnlPYmplY3Qoc2NoZW1hKSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzY2hlbWEpLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICAgIG9ialtrZXldID0gZ2V0U2NoZW1hV2l0aFZhbHVlc0FuZFNvdXJjZXMoc2NoZW1hW2tleV0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gYXQgdGhpcyBwb2ludCwgdGhlIHNjaGVtYSBpcyBiYWQgYW5kIGFuIGVycm9yIHdpbGwgaGF2ZSBiZWVuIGxvZ2dlZCBkdXJpbmcgc2NoZW1hIHZhbGlkYXRpb25cbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlVmFsdWVzQW5kU291cmNlc1RyZWUoY29uZmlnOiBDb25maWdPYmplY3QsIHNvdXJjZTogc3RyaW5nKSB7XG4gIGlmIChpc09yZGluYXJ5T2JqZWN0KGNvbmZpZykpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgICBvYmpba2V5XSA9IGNyZWF0ZVZhbHVlc0FuZFNvdXJjZXNUcmVlKGNvbmZpZ1trZXldLCBzb3VyY2UpO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgX3ZhbHVlOiBjb25maWcsIF9zb3VyY2U6IHNvdXJjZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEV4dGVuc2lvblNsb3RDb25maWdzKFxuICBjb25maWdTdGF0ZTogQ29uZmlnSW50ZXJuYWxTdG9yZSxcbiAgdGVtcENvbmZpZ1N0YXRlOiBUZW1wb3JhcnlDb25maWdTdG9yZSxcbik6IFJlY29yZDxzdHJpbmcsIEV4dGVuc2lvblNsb3RDb25maWdPYmplY3Q+IHtcbiAgY29uc3QgYWxsQ29uZmlncyA9IG1lcmdlQ29uZmlncyhnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSkpO1xuICBjb25zdCBzbG90Q29uZmlnUGVyTW9kdWxlOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBFeHRlbnNpb25TbG90Q29uZmlnPj4gPSBPYmplY3Qua2V5cyhhbGxDb25maWdzKS5yZWR1Y2UoXG4gICAgKG9iaiwga2V5KSA9PiB7XG4gICAgICBpZiAoYWxsQ29uZmlnc1trZXldPy5leHRlbnNpb25TbG90cykge1xuICAgICAgICBvYmpba2V5XSA9IGFsbENvbmZpZ3Nba2V5XT8uZXh0ZW5zaW9uU2xvdHM7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAge30sXG4gICk7XG4gIHZhbGlkYXRlQWxsRXh0ZW5zaW9uU2xvdENvbmZpZ3Moc2xvdENvbmZpZ1Blck1vZHVsZSk7XG4gIGNvbnN0IHNsb3RDb25maWdzID0gT2JqZWN0LmtleXMoc2xvdENvbmZpZ1Blck1vZHVsZSkucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgIG9iaiA9IHsgLi4ub2JqLCAuLi5zbG90Q29uZmlnUGVyTW9kdWxlW2tleV0gfTtcbiAgICByZXR1cm4gb2JqO1xuICB9LCB7fSk7XG4gIHJldHVybiBzbG90Q29uZmlncztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBbGxFeHRlbnNpb25TbG90Q29uZmlncyhzbG90Q29uZmlnUGVyTW9kdWxlOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBFeHRlbnNpb25TbG90Q29uZmlnPj4pIHtcbiAgZm9yIChsZXQgW21vZHVsZU5hbWUsIGNvbmZpZ0J5U2xvdE5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RDb25maWdQZXJNb2R1bGUpKSB7XG4gICAgZm9yIChsZXQgW3Nsb3ROYW1lLCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZ0J5U2xvdE5hbWUpKSB7XG4gICAgICB2YWxpZGF0ZUV4dGVuc2lvblNsb3RDb25maWcoY29uZmlnLCBtb2R1bGVOYW1lLCBzbG90TmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXh0ZW5zaW9uU2xvdENvbmZpZyhjb25maWc6IEV4dGVuc2lvblNsb3RDb25maWcsIG1vZHVsZU5hbWU6IHN0cmluZywgc2xvdE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBlcnJvclByZWZpeCA9IGBFeHRlbnNpb24gc2xvdCBjb25maWcgJyR7bW9kdWxlTmFtZX0uZXh0ZW5zaW9uU2xvdHMuJHtzbG90TmFtZX1gO1xuICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZykuZmlsdGVyKChrKSA9PiAhWydhZGQnLCAncmVtb3ZlJywgJ29yZGVyJywgJ2NvbmZpZ3VyZSddLmluY2x1ZGVzKGspKTtcbiAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCkge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JQcmVmaXggKyBgJyBjb250YWlucyBpbnZhbGlkIGtleXMgJyR7aW52YWxpZEtleXMuam9pbihcIicsICdcIil9J2ApO1xuICB9XG4gIGlmIChjb25maWcuYWRkKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5hZGQpIHx8ICFjb25maWcuYWRkLmV2ZXJ5KChuKSA9PiB0eXBlb2YgbiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yUHJlZml4ICsgYC5hZGQnIGlzIGludmFsaWQuIE11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyAoZXh0ZW5zaW9uIElEcylgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbmZpZy5yZW1vdmUpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLnJlbW92ZSkgfHwgIWNvbmZpZy5yZW1vdmUuZXZlcnkoKG4pID0+IHR5cGVvZiBuID09PSAnc3RyaW5nJykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JQcmVmaXggKyBgLnJlbW92ZScgaXMgaW52YWxpZC4gTXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIChleHRlbnNpb24gSURzKWApO1xuICAgIH1cbiAgfVxuICBpZiAoY29uZmlnLm9yZGVyKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5vcmRlcikgfHwgIWNvbmZpZy5vcmRlci5ldmVyeSgobikgPT4gdHlwZW9mIG4gPT09ICdzdHJpbmcnKSkge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvclByZWZpeCArIGAub3JkZXInIGlzIGludmFsaWQuIE11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyAoZXh0ZW5zaW9uIElEcylgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbmZpZy5jb25maWd1cmUpIHtcbiAgICBpZiAoIWlzT3JkaW5hcnlPYmplY3QoY29uZmlnLmNvbmZpZ3VyZSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JQcmVmaXggKyBgLmNvbmZpZ3VyZScgaXMgaW52YWxpZC4gTXVzdCBiZSBhbiBvYmplY3Qgd2l0aCBleHRlbnNpb24gSURzIGZvciBrZXlzYCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFByb3ZpZGVkQ29uZmlncyhjb25maWdTdGF0ZTogQ29uZmlnSW50ZXJuYWxTdG9yZSwgdGVtcENvbmZpZ1N0YXRlOiBUZW1wb3JhcnlDb25maWdTdG9yZSk6IEFycmF5PENvbmZpZz4ge1xuICByZXR1cm4gWy4uLmNvbmZpZ1N0YXRlLnByb3ZpZGVkQ29uZmlncy5tYXAoKGMpID0+IGMuY29uZmlnKSwgdGVtcENvbmZpZ1N0YXRlLmNvbmZpZ107XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWU6IHN0cmluZywgc2NoZW1hOiBDb25maWdTY2hlbWEsIGtleVBhdGggPSAnJykge1xuICBjb25zdCB1cGRhdGVNZXNzYWdlID0gYFBsZWFzZSB2ZXJpZnkgdGhhdCB5b3UgYXJlIHJ1bm5pbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIGFuZCwgaWYgc28sIGFsZXJ0IHRoZSBtYWludGFpbmVyLmA7XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoc2NoZW1hKS5maWx0ZXIoKGspID0+ICFrLnN0YXJ0c1dpdGgoJ18nKSkpIHtcbiAgICBjb25zdCB0aGlzS2V5UGF0aCA9IGtleVBhdGggKyAoa2V5UGF0aCAmJiAnLicpICsga2V5O1xuICAgIGNvbnN0IHNjaGVtYVBhcnQgPSBzY2hlbWFba2V5XSBhcyBDb25maWdTY2hlbWE7XG5cbiAgICBpZiAodGhpc0tleVBhdGggPT09ICdEaXNwbGF5IGNvbmRpdGlvbnMnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgJHttb2R1bGVOYW1lfSBkZWNsYXJlcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbGxlZCBcIkRpc3BsYXkgY29uZGl0aW9uc1wiOyB0aGUgXCJEaXNwbGF5IGNvbmRpdGlvbnNcIiBvcHRpb24gaXMgYSByZXNlcnZlZCBuYW1lLiAke3VwZGF0ZU1lc3NhZ2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXNLZXlQYXRoID09PSAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJykge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYCR7bW9kdWxlTmFtZX0gZGVjbGFyZXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBjYWxsZWQgXCJUcmFuc2xhdGlvbiBvdmVycmlkZXNcIjsgdGhlIFwiVHJhbnNsYXRpb24gb3ZlcnJpZGVzXCIgb3B0aW9uIGlzIGEgcmVzZXJ2ZWQgbmFtZS4gJHt1cGRhdGVNZXNzYWdlfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghaXNPcmRpbmFyeU9iamVjdChzY2hlbWFQYXJ0KSkge1xuICAgICAgY29uc29sZS5lcnJvcihgJHttb2R1bGVOYW1lfSBoYXMgYmFkIGNvbmZpZyBzY2hlbWEgZGVmaW5pdGlvbiBmb3Iga2V5ICcke3RoaXNLZXlQYXRofScuICR7dXBkYXRlTWVzc2FnZX1gKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghc2NoZW1hUGFydC5oYXNPd25Qcm9wZXJ0eSgnX2RlZmF1bHQnKSkge1xuICAgICAgLy8gcmVjdXJzZSBmb3IgbmVzdGVkIGNvbmZpZyBrZXlzXG4gICAgICB2YWxpZGF0ZUNvbmZpZ1NjaGVtYShtb2R1bGVOYW1lLCBzY2hlbWFQYXJ0LCB0aGlzS2V5UGF0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudHMgPSBzY2hlbWFQYXJ0Ll9lbGVtZW50cztcbiAgICBpZiAoaGFzT2JqZWN0U2NoZW1hKGVsZW1lbnRzKSkge1xuICAgICAgdmFsaWRhdGVDb25maWdTY2hlbWEobW9kdWxlTmFtZSwgZWxlbWVudHMsIHRoaXNLZXlQYXRoICsgJy5fZWxlbWVudHMnKTtcbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hUGFydC5fdmFsaWRhdG9ycykge1xuICAgICAgZm9yIChsZXQgdmFsaWRhdG9yIG9mIHNjaGVtYVBhcnQuX3ZhbGlkYXRvcnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYCR7bW9kdWxlTmFtZX0gaGFzIGludmFsaWQgdmFsaWRhdG9yIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9JyAke3VwZGF0ZU1lc3NhZ2V9LmAgK1xuICAgICAgICAgICAgICBgXFxuXFxuSWYgeW91J3JlIHRoZSBtYWludGFpbmVyOiB2YWxpZGF0b3JzIG11c3QgYmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGVpdGhlciBgICtcbiAgICAgICAgICAgICAgYHVuZGVmaW5lZCBvciBhbiBlcnJvciBzdHJpbmcuIFJlY2VpdmVkICR7dmFsaWRhdG9yfS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZVR5cGUgPSBzY2hlbWFQYXJ0Ll90eXBlO1xuICAgIGlmICh2YWx1ZVR5cGUgJiYgIU9iamVjdC52YWx1ZXMoVHlwZSkuaW5jbHVkZXModmFsdWVUeXBlKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYCR7bW9kdWxlTmFtZX0gaGFzIGludmFsaWQgdHlwZSBmb3Iga2V5ICcke3RoaXNLZXlQYXRofScgJHt1cGRhdGVNZXNzYWdlfS5gICtcbiAgICAgICAgICBgXFxuXFxuSWYgeW91J3JlIHRoZSBtYWludGFpbmVyOiB0aGUgYWxsb3dlZCB0eXBlcyBhcmUgJHtPYmplY3QudmFsdWVzKFR5cGUpLmpvaW4oJywgJyl9LiBgICtcbiAgICAgICAgICBgUmVjZWl2ZWQgJyR7dmFsdWVUeXBlfSdgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBPYmplY3Qua2V5cyhzY2hlbWFQYXJ0KS5ldmVyeSgoaykgPT4gWydfZGVzY3JpcHRpb24nLCAnX3ZhbGlkYXRvcnMnLCAnX2VsZW1lbnRzJywgJ190eXBlJ10uaW5jbHVkZXMoaykpICYmXG4gICAgICAha2V5UGF0aC5pbmNsdWRlcygnLl9lbGVtZW50cycpXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgJHttb2R1bGVOYW1lfSBoYXMgYmFkIGNvbmZpZyBzY2hlbWEgZGVmaW5pdGlvbiBmb3Iga2V5ICcke3RoaXNLZXlQYXRofScuICR7dXBkYXRlTWVzc2FnZX0uYCArXG4gICAgICAgICAgYFxcblxcbklmIHlvdSdyZSB0aGUgbWFpbnRhaW5lcjogYWxsIGNvbmZpZyBlbGVtZW50cyBtdXN0IGhhdmUgYSBkZWZhdWx0LiBgICtcbiAgICAgICAgICBgUmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeShzY2hlbWFQYXJ0KX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudHMgJiYgdmFsdWVUeXBlICYmICFbVHlwZS5BcnJheSwgVHlwZS5PYmplY3RdLmluY2x1ZGVzKHZhbHVlVHlwZSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGAke21vZHVsZU5hbWV9IGhhcyBiYWQgY29uZmlnIHNjaGVtYSBkZWZpbml0aW9uIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9Jy4gJHt1cGRhdGVNZXNzYWdlfS5gICtcbiAgICAgICAgICBgXFxuXFxuSWYgeW91J3JlIHRoZSBtYWludGFpbmVyOiB0aGUgJ2VsZW1lbnRzJyBrZXkgb25seSB3b3JrcyB3aXRoICdfdHlwZScgZXF1YWwgdG8gJ0FycmF5JyBvciAnT2JqZWN0Jy4gYCArXG4gICAgICAgICAgYFJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkodmFsdWVUeXBlKX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q29uZmlnRm9yTW9kdWxlKFxuICBtb2R1bGVOYW1lOiBzdHJpbmcsXG4gIGNvbmZpZ1N0YXRlOiBDb25maWdJbnRlcm5hbFN0b3JlLFxuICB0ZW1wQ29uZmlnU3RhdGU6IFRlbXBvcmFyeUNvbmZpZ1N0b3JlLFxuKTogQ29uZmlnT2JqZWN0IHtcbiAgaWYgKCFjb25maWdTdGF0ZS5zY2hlbWFzLmhhc093blByb3BlcnR5KG1vZHVsZU5hbWUpKSB7XG4gICAgdGhyb3cgRXJyb3IoJ05vIGNvbmZpZyBzY2hlbWEgaGFzIGJlZW4gZGVmaW5lZCBmb3IgJyArIG1vZHVsZU5hbWUpO1xuICB9XG5cbiAgY29uc3Qgc2NoZW1hID0gY29uZmlnU3RhdGUuc2NoZW1hc1ttb2R1bGVOYW1lXTtcbiAgY29uc3QgaW5wdXRDb25maWcgPSBtZXJnZUNvbmZpZ3NGb3IobW9kdWxlTmFtZSwgZ2V0UHJvdmlkZWRDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpKTtcbiAgdmFsaWRhdGVTdHJ1Y3R1cmUoc2NoZW1hLCBpbnB1dENvbmZpZywgbW9kdWxlTmFtZSk7XG4gIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKHNjaGVtYSwgaW5wdXRDb25maWcpO1xuICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYSwgY29uZmlnLCBtb2R1bGVOYW1lKTtcbiAgZGVsZXRlIGNvbmZpZy5leHRlbnNpb25TbG90cztcbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuZnVuY3Rpb24gbWVyZ2VDb25maWdzRm9yKG1vZHVsZU5hbWU6IHN0cmluZywgYWxsQ29uZmlnczogQXJyYXk8Q29uZmlnPik6IENvbmZpZ09iamVjdCB7XG4gIGNvbnN0IGFsbENvbmZpZ3NGb3JNb2R1bGUgPSBhbGxDb25maWdzLm1hcCgoeyBbbW9kdWxlTmFtZV06IGMgfSkgPT4gYykuZmlsdGVyKChjKSA9PiAhIWMpO1xuXG4gIHJldHVybiBtZXJnZUNvbmZpZ3MoYWxsQ29uZmlnc0Zvck1vZHVsZSk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlQ29uZmlncyhjb25maWdzOiBBcnJheTxDb25maWc+KSB7XG4gIGNvbnN0IG1lcmdlRGVlcEFsbCA9IHJlZHVjZShtZXJnZURlZXBSaWdodCk7XG4gIHJldHVybiBtZXJnZURlZXBBbGwoe30sIGNvbmZpZ3MpIGFzIENvbmZpZztcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBjaGVjayB0aGUgcHJvdmlkZWQgY29uZmlnIHRyZWUgdG8gbWFrZSBzdXJlIHRoYXQgYWxsXG4gKiBvZiB0aGUgcHJvdmlkZWQgcHJvcGVydGllcyBleGlzdCBpbiB0aGUgc2NoZW1hLCBhbmQgdGhhdCB0eXBlcyBhcmVcbiAqIGNvcnJlY3QuIERvZXMgbm90IHJ1biB2YWxpZGF0b3JzIHlldCwgc2luY2UgdGhvc2Ugd2lsbCBiZSBydW4gb25cbiAqIHRoZSBjb25maWcgd2l0aCB0aGUgZGVmYXVsdHMgZmlsbGVkIGluLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0cnVjdHVyZShzY2hlbWE6IENvbmZpZ1NjaGVtYSwgY29uZmlnOiBDb25maWdPYmplY3QsIGtleVBhdGggPSAnJykge1xuICAvLyB2YWxpZGF0ZSBlYWNoIGNvbnN0aXR1ZW50IGVsZW1lbnRcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnKSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgY29uc3QgdGhpc0tleVBhdGggPSBrZXlQYXRoICsgJy4nICsga2V5O1xuICAgIGNvbnN0IHNjaGVtYVBhcnQgPSBzY2hlbWFba2V5XSBhcyBDb25maWdTY2hlbWE7XG5cbiAgICBpZiAoIXNjaGVtYS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBpZiAoIShrZXkgPT09ICdleHRlbnNpb25TbG90cycgJiYga2V5UGF0aCAhPT0gJycpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFVua25vd24gY29uZmlnIGtleSAnJHt0aGlzS2V5UGF0aH0nIHByb3ZpZGVkLiBJZ25vcmluZy5gKTtcbiAgICAgIH1cblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVCcmFuY2hTdHJ1Y3R1cmUoc2NoZW1hUGFydCwgdmFsdWUsIHRoaXNLZXlQYXRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUJyYW5jaFN0cnVjdHVyZShzY2hlbWFQYXJ0OiBDb25maWdTY2hlbWEsIHZhbHVlOiBhbnksIGtleVBhdGg6IHN0cmluZykge1xuICBjaGVja1R5cGUoa2V5UGF0aCwgc2NoZW1hUGFydC5fdHlwZSwgdmFsdWUpO1xuXG4gIGlmIChpc09yZGluYXJ5T2JqZWN0KHZhbHVlKSkge1xuICAgIC8vIHN0cnVjdHVyYWxseSB2YWxpZGF0ZSBvbmx5IGlmIHRoZXJlJ3MgZWxlbWVudHMgc3BlY2lmaWVkXG4gICAgLy8gb3IgdGhlcmUncyBubyBgX2RlZmF1bHRgIHZhbHVlICh3aGljaCB3b3VsZCBpbmRpY2F0ZSBhIGZyZWVmb3JtIG9iamVjdClcbiAgICBpZiAoc2NoZW1hUGFydC5fdHlwZSA9PT0gVHlwZS5PYmplY3QpIHtcbiAgICAgIHZhbGlkYXRlRGljdGlvbmFyeVN0cnVjdHVyZShzY2hlbWFQYXJ0LCB2YWx1ZSwga2V5UGF0aCk7XG4gICAgfSBlbHNlIGlmICghc2NoZW1hUGFydC5oYXNPd25Qcm9wZXJ0eSgnX2RlZmF1bHQnKSkge1xuICAgICAgLy8gcmVjdXJzZSB0byB2YWxpZGF0ZSBuZXN0ZWQgb2JqZWN0IHN0cnVjdHVyZVxuICAgICAgdmFsaWRhdGVTdHJ1Y3R1cmUoc2NoZW1hUGFydCwgdmFsdWUsIGtleVBhdGgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoc2NoZW1hUGFydC5fdHlwZSA9PT0gVHlwZS5BcnJheSkge1xuICAgICAgdmFsaWRhdGVBcnJheVN0cnVjdHVyZShzY2hlbWFQYXJ0LCB2YWx1ZSwga2V5UGF0aCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGljdGlvbmFyeVN0cnVjdHVyZShkaWN0aW9uYXJ5U2NoZW1hOiBDb25maWdTY2hlbWEsIGNvbmZpZzogQ29uZmlnT2JqZWN0LCBrZXlQYXRoOiBzdHJpbmcpIHtcbiAgaWYgKGRpY3Rpb25hcnlTY2hlbWEuX2VsZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdba2V5XTtcbiAgICAgIHZhbGlkYXRlU3RydWN0dXJlKGRpY3Rpb25hcnlTY2hlbWEuX2VsZW1lbnRzLCB2YWx1ZSwgYCR7a2V5UGF0aH0uJHtrZXl9YCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXJyYXlTdHJ1Y3R1cmUoYXJyYXlTY2hlbWE6IENvbmZpZ1NjaGVtYSwgdmFsdWU6IENvbmZpZ09iamVjdCwga2V5UGF0aDogc3RyaW5nKSB7XG4gIC8vIGlmIHRoZXJlIGlzIGFuIGFycmF5IGVsZW1lbnQgb2JqZWN0IHNjaGVtYSwgdmVyaWZ5IHRoYXQgZWxlbWVudHMgbWF0Y2ggaXRcbiAgaWYgKGhhc09iamVjdFNjaGVtYShhcnJheVNjaGVtYS5fZWxlbWVudHMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsaWRhdGVCcmFuY2hTdHJ1Y3R1cmUoYXJyYXlTY2hlbWEuX2VsZW1lbnRzLCB2YWx1ZVtpXSwgYCR7a2V5UGF0aH1bJHtpfV1gKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hlY2tUeXBlKGAke2tleVBhdGh9WyR7aX1dYCwgYXJyYXlTY2hlbWEuX2VsZW1lbnRzPy5fdHlwZSwgdmFsdWVbaV0pO1xuICB9XG59XG5cbi8qKlxuICogUnVuIGFsbCB0aGUgdmFsaWRhdG9ycyBpbiB0aGUgY29uZmlnIHRyZWUuIFRoaXMgc2hvdWxkIGJlIHJ1blxuICogb24gdGhlIGNvbmZpZyBvYmplY3QgYWZ0ZXIgaXQgaGFzIGJlZW4gZmlsbGVkIGluIHdpdGggYWxsIHRoZSBkZWZhdWx0cywgc2luY2VcbiAqIGhpZ2hlci1sZXZlbCB2YWxpZGF0b3JzIG1heSByZWZlciB0byBkZWZhdWx0IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWE6IENvbmZpZ1NjaGVtYSwgY29uZmlnOiBDb25maWdPYmplY3QsIGtleVBhdGggPSAnJykge1xuICAvLyBJZiBgIXNjaGVtYWAsIHRoZXJlIHNob3VsZCBoYXZlIGJlZW4gYSBzdHJ1Y3R1cmFsIHZhbGlkYXRpb24gZXJyb3IgcHJpbnRlZCBhbHJlYWR5LlxuICBpZiAoc2NoZW1hKSB7XG4gICAgaWYgKGNvbmZpZyAhPT0gc2NoZW1hLl9kZWZhdWx0KSB7XG4gICAgICBydW5WYWxpZGF0b3JzKGtleVBhdGgsIHNjaGVtYS5fdmFsaWRhdG9ycywgY29uZmlnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNPcmRpbmFyeU9iamVjdChjb25maWcpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICAgIGNvbnN0IHRoaXNLZXlQYXRoID0ga2V5UGF0aCArICcuJyArIGtleTtcbiAgICAgICAgY29uc3Qgc2NoZW1hUGFydCA9IHNjaGVtYVtrZXldIGFzIENvbmZpZ1NjaGVtYTtcbiAgICAgICAgaWYgKHNjaGVtYS5fdHlwZSA9PT0gVHlwZS5PYmplY3QgJiYgc2NoZW1hLl9lbGVtZW50cykge1xuICAgICAgICAgIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoc2NoZW1hLl9lbGVtZW50cywgdmFsdWUsIHRoaXNLZXlQYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYVBhcnQsIHZhbHVlLCB0aGlzS2V5UGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlnKSAmJiBzY2hlbWEuX2VsZW1lbnRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZy5sZW5ndGg7IGkrKykge1xuICAgICAgICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYS5fZWxlbWVudHMsIGNvbmZpZ1tpXSwgYCR7a2V5UGF0aH1bJHtpfV1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tUeXBlKGtleVBhdGg6IHN0cmluZywgX3R5cGU6IFR5cGUgfCB1bmRlZmluZWQsIHZhbHVlOiBhbnkpIHtcbiAgaWYgKF90eXBlKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj4gPSB7XG4gICAgICBBcnJheTogaXNBcnJheSxcbiAgICAgIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgICAgIENvbmNlcHRVdWlkOiBpc1V1aWQsXG4gICAgICBOdW1iZXI6IGlzTnVtYmVyLFxuICAgICAgT2JqZWN0OiBpc09iamVjdCxcbiAgICAgIFN0cmluZzogaXNTdHJpbmcsXG4gICAgICBVVUlEOiBpc1V1aWQsXG4gICAgICBQZXJzb25BdHRyaWJ1dGVUeXBlVXVpZDogaXNVdWlkLFxuICAgICAgUGF0aWVudElkZW50aWZpZXJUeXBlVXVpZDogaXNVdWlkLFxuICAgIH07XG4gICAgcnVuVmFsaWRhdG9ycyhrZXlQYXRoLCBbdmFsaWRhdG9yW190eXBlXV0sIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBydW5WYWxpZGF0b3JzKGtleVBhdGg6IHN0cmluZywgdmFsaWRhdG9yczogQXJyYXk8RnVuY3Rpb24+IHwgdW5kZWZpbmVkLCB2YWx1ZTogYW55KSB7XG4gIGlmICh2YWxpZGF0b3JzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAobGV0IHZhbGlkYXRvciBvZiB2YWxpZGF0b3JzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvclJlc3VsdCA9IHZhbGlkYXRvcih2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0b3JSZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgY29uZmlndXJhdGlvbiBmb3IgJHtrZXlQYXRofTogJHt2YWxpZGF0b3JSZXN1bHR9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgY29uZmlndXJhdGlvbiB2YWx1ZSAke3ZhbHVlfSBmb3IgJHtrZXlQYXRofTogJHt2YWxpZGF0b3JSZXN1bHR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgU2tpcHBpbmcgaW52YWxpZCB2YWxpZGF0b3IgYXQgXCIke2tleVBhdGh9XCIuIEVuY291bnRlcmVkIGVycm9yXFxuXFx0JHtlfWApO1xuICAgIH1cbiAgfVxufVxuXG4vLyBSZWN1cnNpdmVseSBmaWxsIGluIHRoZSBjb25maWcgd2l0aCB2YWx1ZXMgZnJvbSB0aGUgc2NoZW1hLlxuY29uc3Qgc2V0RGVmYXVsdHMgPSAoc2NoZW1hOiBDb25maWdTY2hlbWEsIGlucHV0Q29uZmlnOiBDb25maWcpID0+IHtcbiAgY29uc3QgY29uZmlnID0gY2xvbmUoaW5wdXRDb25maWcpO1xuXG4gIGlmICghc2NoZW1hKSB7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNjaGVtYSkpIHtcbiAgICBjb25zdCBjb25maWdQYXJ0ID0gY29uZmlnW2tleV07XG4gICAgY29uc3Qgc2NoZW1hUGFydCA9IHNjaGVtYVtrZXldIGFzIENvbmZpZ1NjaGVtYTtcblxuICAgIC8vIFRoZSBgc2NoZW1hUGFydCAmJmAgY2xhdXNlIG9mIHRoaXMgYGlmYCBzdGF0ZW1lbnQgd2lsbCBvbmx5IGZhaWxcbiAgICAvLyBpZiB0aGUgc2NoZW1hIGlzIHZlcnkgaW52YWxpZC4gSXQgaXMgdGhlcmUgdG8gcHJldmVudCB0aGUgYXBwIGZyb21cbiAgICAvLyBjcmFzaGluZyBjb21wbGV0ZWx5LCB0aG91Z2ggaXQgd2lsbCBwcm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG4gICAgLy8gSWYgdGhpcyBoYXBwZW5zLCB0aGVyZSBzaG91bGQgYmUgbGVnaWJsZSBlcnJvcnMgaW4gdGhlIGNvbnNvbGUgZnJvbVxuICAgIC8vIHRoZSBzY2hlbWEgdmFsaWRhdG9yLlxuICAgIGlmIChzY2hlbWFQYXJ0ICYmIHNjaGVtYVBhcnQuaGFzT3duUHJvcGVydHkoJ19kZWZhdWx0JykpIHtcbiAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHNjaGVtYVBhcnQgZGVmaW5lcyBhIGNvbmZpZyB2YWx1ZSwgc2luY2UgaXQgaGFzXG4gICAgICAvLyBhIHByb3BlcnR5IGBfZGVmYXVsdGAuXG4gICAgICBpZiAoIWNvbmZpZy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIChjb25maWdba2V5XSBhcyBhbnkpID0gc2NoZW1hUGFydFsnX2RlZmF1bHQnXTtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgYWxzbyBjaGVjayBpZiBpdCBpcyBhbiBvYmplY3Qgb3IgYXJyYXkgd2l0aCBvYmplY3QgZWxlbWVudHMsIGluIHdoaWNoIGNhc2Ugd2UgcmVjdXJzZVxuICAgICAgY29uc3QgZWxlbWVudHMgPSBzY2hlbWFQYXJ0Ll9lbGVtZW50cztcblxuICAgICAgaWYgKGNvbmZpZ1BhcnQgJiYgaGFzT2JqZWN0U2NoZW1hKGVsZW1lbnRzKSkge1xuICAgICAgICBpZiAoc2NoZW1hUGFydC5fdHlwZSA9PT0gVHlwZS5BcnJheSAmJiBBcnJheS5pc0FycmF5KGNvbmZpZ1BhcnQpKSB7XG4gICAgICAgICAgY29uc3QgY29uZmlnV2l0aERlZmF1bHRzID0gY29uZmlnUGFydC5tYXAoKGNvbmY6IENvbmZpZykgPT4gc2V0RGVmYXVsdHMoZWxlbWVudHMsIGNvbmYpKTtcbiAgICAgICAgICBjb25maWdba2V5XSA9IGNvbmZpZ1dpdGhEZWZhdWx0cztcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWFQYXJ0Ll90eXBlID09PSBUeXBlLk9iamVjdCkge1xuICAgICAgICAgIGZvciAobGV0IG9iamVjdEtleSBvZiBPYmplY3Qua2V5cyhjb25maWdQYXJ0KSkge1xuICAgICAgICAgICAgY29uZmlnUGFydFtvYmplY3RLZXldID0gc2V0RGVmYXVsdHMoZWxlbWVudHMsIGNvbmZpZ1BhcnRbb2JqZWN0S2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc09yZGluYXJ5T2JqZWN0KHNjaGVtYVBhcnQpKSB7XG4gICAgICAvLyBTaW5jZSBzY2hlbWFQYXJ0IGhhcyBubyBwcm9wZXJ0eSBcIl9kZWZhdWx0XCIsIGlmIGl0J3MgYW4gb3JkaW5hcnkgb2JqZWN0XG4gICAgICAvLyAodW5saWtlLCBpbXBvcnRhbnRseSwgdGhlIHZhbGlkYXRvcnMgYXJyYXkpLCB3ZSBhc3N1bWUgaXQgaXMgYSBwYXJlbnQgY29uZmlnIHByb3BlcnR5LlxuICAgICAgLy8gV2UgcmVjdXJzZSB0byBjb25maWdba2V5XSBhbmQgc2NoZW1hW2tleV0uIERlZmF1bHQgY29uZmlnW2tleV0gdG8ge30uXG4gICAgICBjb25zdCBzZWxlY3RlZENvbmZpZ1BhcnQgPSBjb25maWcuaGFzT3duUHJvcGVydHkoa2V5KSA/IGNvbmZpZ1BhcnQgOiB7fTtcblxuICAgICAgaWYgKGlzT3JkaW5hcnlPYmplY3Qoc2VsZWN0ZWRDb25maWdQYXJ0KSkge1xuICAgICAgICBjb25maWdba2V5XSA9IHNldERlZmF1bHRzKHNjaGVtYVBhcnQsIHNlbGVjdGVkQ29uZmlnUGFydCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG5cbmZ1bmN0aW9uIGhhc09iamVjdFNjaGVtYShlbGVtZW50c1NjaGVtYTogT2JqZWN0IHwgdW5kZWZpbmVkKTogZWxlbWVudHNTY2hlbWEgaXMgQ29uZmlnU2NoZW1hIHtcbiAgcmV0dXJuIChcbiAgICAhIWVsZW1lbnRzU2NoZW1hICYmIE9iamVjdC5rZXlzKGVsZW1lbnRzU2NoZW1hKS5maWx0ZXIoKGUpID0+ICFbJ19kZWZhdWx0JywgJ192YWxpZGF0b3JzJ10uaW5jbHVkZXMoZSkpLmxlbmd0aCA+IDBcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNPcmRpbmFyeU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUgIT09IG51bGw7XG59XG5cbi8qKlxuICogQ29waWVkIG92ZXIgZnJvbSBlc20tZXh0ZW5zaW9ucy4gSXQgcmlnaHRseSBiZWxvbmdzIHRvIHRoYXQgbW9kdWxlLCBidXQgZXNtLWNvbmZpZ1xuICogY2Fubm90IGRlcGVuZCBvbiBlc20tZXh0ZW5zaW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uTmFtZUZyb21JZChleHRlbnNpb25JZDogc3RyaW5nKSB7XG4gIGNvbnN0IFtleHRlbnNpb25OYW1lXSA9IGV4dGVuc2lvbklkLnNwbGl0KCcjJyk7XG4gIHJldHVybiBleHRlbnNpb25OYW1lO1xufVxuXG4vKipcbiAqIFRoZSBpbXBsaWNpdENvbmZpZ1NjaGVtYSBpcyBpbXBsaWNpdGx5IGluY2x1ZGVkIGluIGV2ZXJ5IGNvbmZpZ3VyYXRpb24gc2NoZW1hXG4gKi9cbmNvbnN0IGltcGxpY2l0Q29uZmlnU2NoZW1hOiBDb25maWdTY2hlbWEgPSB7XG4gICdEaXNwbGF5IGNvbmRpdGlvbnMnOiB7XG4gICAgcHJpdmlsZWdlczoge1xuICAgICAgX2Rlc2NyaXB0aW9uOiAnVGhlIHByaXZpbGVnZShzKSB0aGUgdXNlciBtdXN0IGhhdmUgdG8gdXNlIHRoaXMgZXh0ZW5zaW9uJyxcbiAgICAgIF90eXBlOiBUeXBlLkFycmF5LFxuICAgICAgX2RlZmF1bHQ6IFtdLFxuICAgIH0sXG4gIH0sXG4gICdUcmFuc2xhdGlvbiBvdmVycmlkZXMnOiB7XG4gICAgX2Rlc2NyaXB0aW9uOlxuICAgICAgJ1Blci1sYW5ndWFnZSBvdmVycmlkZXMgZm9yIGZyb250ZW5kIHRyYW5zbGF0aW9ucyBzaG91bGQgYmUga2V5ZWQgYnkgbGFuZ3VhZ2UgY29kZSBhbmQgZWFjaCBsYW5ndWFnZSBkaWN0aW9uYXJ5IGNvbnRhaW5zIHRoZSB0cmFuc2xhdGlvbiBrZXkgYW5kIHRoZSBkaXNwbGF5IHZhbHVlJyxcbiAgICBfdHlwZTogVHlwZS5PYmplY3QsXG4gICAgX2RlZmF1bHQ6IHt9LFxuICB9LFxufTtcbiJdLCJuYW1lcyI6WyJjbG9uZSIsInJlZHVjZSIsIm1lcmdlRGVlcFJpZ2h0IiwiZXF1YWxzIiwib21pdCIsIlR5cGUiLCJpc0FycmF5IiwiaXNCb29sZWFuIiwiaXNVdWlkIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzU3RyaW5nIiwiY29uZmlnSW50ZXJuYWxTdG9yZSIsImNvbmZpZ0V4dGVuc2lvblN0b3JlIiwiZ2V0Q29uZmlnU3RvcmUiLCJnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUiLCJpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUiLCJ0ZW1wb3JhcnlDb25maWdTdG9yZSIsImdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUiLCJjb21wdXRlTW9kdWxlQ29uZmlnIiwiZ2V0U3RhdGUiLCJzdWJzY3JpYmUiLCJjb25maWdTdGF0ZSIsInRlbXBDb25maWdTdGF0ZSIsImNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnIiwiY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzIiwiY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MiLCJleHRlbnNpb25TdGF0ZSIsInN0YXRlIiwidGVtcFN0YXRlIiwiT2JqZWN0Iiwia2V5cyIsInNjaGVtYXMiLCJtb2R1bGVOYW1lIiwiY29uZmlnIiwiZ2V0Q29uZmlnRm9yTW9kdWxlIiwibW9kdWxlU3RvcmUiLCJzZXRTdGF0ZSIsImxvYWRlZCIsInNsb3RDb25maWdzIiwiZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ3MiLCJuZXdTbG90U3RvcmVFbnRyaWVzIiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwibWFwIiwic2xvdE5hbWUiLCJzbG90U3RvcmUiLCJvbGRTdGF0ZSIsIm5ld1N0YXRlIiwic2xvdHMiLCJnZXRJbXBsZW1lbnRlclRvb2xzQ29uZmlnIiwiY29uZmlncyIsIm1vdW50ZWRFeHRlbnNpb25zIiwiZXh0ZW5zaW9uIiwiY29tcHV0ZUV4dGVuc2lvbkNvbmZpZyIsInNsb3RNb2R1bGVOYW1lIiwiZXh0ZW5zaW9uTW9kdWxlTmFtZSIsImV4dGVuc2lvbklkIiwiZGVmaW5lQ29uZmlnU2NoZW1hIiwic2NoZW1hIiwidmFsaWRhdGVDb25maWdTY2hlbWEiLCJlbmhhbmNlZFNjaGVtYSIsImltcGxpY2l0Q29uZmlnU2NoZW1hIiwiZGVmaW5lRXh0ZW5zaW9uQ29uZmlnU2NoZW1hIiwiZXh0ZW5zaW9uTmFtZSIsImNvbnNvbGUiLCJ3YXJuIiwicHJvdmlkZSIsInNvdXJjZU5hbWUiLCJwcm92aWRlZENvbmZpZ3MiLCJzb3VyY2UiLCJnZXRDb25maWciLCJQcm9taXNlIiwicmVzb2x2ZSIsInVwZGF0ZSIsInVuc3Vic2NyaWJlIiwic3RvcmUiLCJnZXRDb25maWdJbnRlcm5hbCIsInByb2Nlc3NDb25maWciLCJwcm92aWRlZENvbmZpZyIsImtleVBhdGhDb250ZXh0IiwidmFsaWRhdGVTdHJ1Y3R1cmUiLCJzZXREZWZhdWx0cyIsInJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUiLCJzbG90TW9kdWxlQ29uZmlnIiwiZ2V0RXh0ZW5zaW9uTmFtZUZyb21JZCIsImV4dGVuc2lvbkNvbmZpZ1NjaGVtYSIsIm5hbWVPZlNjaGVtYVNvdXJjZSIsImdldFByb3ZpZGVkQ29uZmlncyIsIm1lcmdlQ29uZmlnc0ZvciIsImNvbmZpZ092ZXJyaWRlIiwiZXh0ZW5zaW9uU2xvdHMiLCJjb25maWd1cmUiLCJleHRlbnNpb25Db25maWciLCJjb21iaW5lZENvbmZpZyIsIm1lcmdlQ29uZmlncyIsInJlc3VsdCIsImdldFNjaGVtYVdpdGhWYWx1ZXNBbmRTb3VyY2VzIiwiY29uZmlnc0FuZFNvdXJjZXMiLCJjIiwiY3JlYXRlVmFsdWVzQW5kU291cmNlc1RyZWUiLCJoYXNPd25Qcm9wZXJ0eSIsIl92YWx1ZSIsIl9kZWZhdWx0IiwiX3NvdXJjZSIsImlzT3JkaW5hcnlPYmplY3QiLCJvYmoiLCJrZXkiLCJhbGxDb25maWdzIiwic2xvdENvbmZpZ1Blck1vZHVsZSIsInZhbGlkYXRlQWxsRXh0ZW5zaW9uU2xvdENvbmZpZ3MiLCJjb25maWdCeVNsb3ROYW1lIiwidmFsaWRhdGVFeHRlbnNpb25TbG90Q29uZmlnIiwiZXJyb3JQcmVmaXgiLCJpbnZhbGlkS2V5cyIsImZpbHRlciIsImsiLCJpbmNsdWRlcyIsImxlbmd0aCIsImVycm9yIiwiam9pbiIsImFkZCIsIkFycmF5IiwiZXZlcnkiLCJuIiwicmVtb3ZlIiwib3JkZXIiLCJrZXlQYXRoIiwidXBkYXRlTWVzc2FnZSIsInRoaXNLZXlQYXRoIiwic2NoZW1hUGFydCIsImVsZW1lbnRzIiwiX2VsZW1lbnRzIiwiaGFzT2JqZWN0U2NoZW1hIiwiX3ZhbGlkYXRvcnMiLCJ2YWxpZGF0b3IiLCJ2YWx1ZVR5cGUiLCJfdHlwZSIsInZhbHVlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGFydHNXaXRoIiwiRXJyb3IiLCJpbnB1dENvbmZpZyIsImFsbENvbmZpZ3NGb3JNb2R1bGUiLCJtZXJnZURlZXBBbGwiLCJ2YWx1ZSIsInZhbGlkYXRlQnJhbmNoU3RydWN0dXJlIiwiY2hlY2tUeXBlIiwidmFsaWRhdGVEaWN0aW9uYXJ5U3RydWN0dXJlIiwidmFsaWRhdGVBcnJheVN0cnVjdHVyZSIsImRpY3Rpb25hcnlTY2hlbWEiLCJhcnJheVNjaGVtYSIsImkiLCJydW5WYWxpZGF0b3JzIiwiQm9vbGVhbiIsIkNvbmNlcHRVdWlkIiwiTnVtYmVyIiwiU3RyaW5nIiwiVVVJRCIsIlBlcnNvbkF0dHJpYnV0ZVR5cGVVdWlkIiwiUGF0aWVudElkZW50aWZpZXJUeXBlVXVpZCIsInZhbGlkYXRvcnMiLCJ2YWxpZGF0b3JSZXN1bHQiLCJlIiwiY29uZmlnUGFydCIsImNvbmZpZ1dpdGhEZWZhdWx0cyIsImNvbmYiLCJvYmplY3RLZXkiLCJzZWxlY3RlZENvbmZpZ1BhcnQiLCJlbGVtZW50c1NjaGVtYSIsInNwbGl0IiwicHJpdmlsZWdlcyIsIl9kZXNjcmlwdGlvbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../framework/esm-config/src/module-config/module-config.ts\n");
|
|
6549
6549
|
|
|
6550
6550
|
/***/ }),
|
|
6551
6551
|
|
|
@@ -7007,7 +7007,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
7007
7007
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
7008
7008
|
|
|
7009
7009
|
"use strict";
|
|
7010
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ExtensionSlot: () => (/* binding */ ExtensionSlot)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"webpack/sharing/consume/default/react/react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _ComponentContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ComponentContext */ \"../../framework/esm-react-utils/src/ComponentContext.ts\");\n/* harmony import */ var _Extension__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Extension */ \"../../framework/esm-react-utils/src/Extension.tsx\");\n/* harmony import */ var _useExtensionSlot__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./useExtensionSlot */ \"../../framework/esm-react-utils/src/useExtensionSlot.ts\");\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _object_spread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _define_property(target, key, source[key]);\n });\n }\n return target;\n}\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _object_spread_props(target, source) {\n source = source != null ? source : {};\n if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _object_without_properties(source, excluded) {\n if (source == null) return {};\n var target = _object_without_properties_loose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for(i = 0; i < sourceSymbolKeys.length; i++){\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _object_without_properties_loose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for(i = 0; i < sourceKeys.length; i++){\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\n\n\n\nfunction defaultSelect(extensions) {\n return extensions;\n}\n/**\n * An [extension slot](https://o3-dev.docs.openmrs.org/#/main/extensions).\n * A place with a name. Extensions that get connected to that name\n * will be rendered into this.\n *\n * @param props.name The name of the extension slot\n * @param props.select An optional function for filtering or otherwise modifying\n * the list of extensions that will be rendered.\n * @param props.state *Only works if no children are provided*. Passes data\n * through as props to the extensions that are mounted here. If `ExtensionSlot`\n * has children, you must pass the state through the `state` param of the\n * `Extension` component.\n * @param props.children There are two different ways to use `ExtensionSlot`\n * children.\n * - Passing a `ReactNode`, the \"normal\" way. The child must contain the component\n * `Extension`. Whatever is passed as the child will be rendered once per extension.\n * See the first example below.\n * - Passing a function, the \"render props\" way. The child must be a function\n * which takes a [[ConnectedExtension]] as argument and returns a `ReactNode`.\n * the resulting react node must contain the component `Extension`. It will\n * be run for each extension. See the second example below.\n *\n * @example\n * Passing a react node as children\n *\n * ```tsx\n * <ExtensionSlot name=\"Foo\">\n * <div style={{ width: 10rem }}>\n * <Extension />\n * </div>\n * </ExtensionSlot>\n * ```\n *\n * @example\n * Passing a function as children\n *\n * ```tsx\n * <ExtensionSlot name=\"Bar\">\n * {(extension) => (\n * <h1>{extension.name}</h1>\n * <div style={{ color: extension.meta.color }}>\n * <Extension />\n * </div>\n * )}\n * </ExtensionSlot>\n * ```\n *\n */ function ExtensionSlot(_param) {\n var extensionSlotName = _param.name, legacyExtensionSlotName = _param.extensionSlotName, _param_select = _param.select, select = _param_select === void 0 ? defaultSelect : _param_select, children = _param.children, state = _param.state, style = _param.style, divProps = _object_without_properties(_param, [\n \"name\",\n \"extensionSlotName\",\n \"select\",\n \"children\",\n \"state\",\n \"style\"\n ]);\n if (children && state) {\n throw new Error(\"Both children and state have been provided. If children are provided, the state must be passed as a prop to the `Extension` component.\");\n }\n var name = extensionSlotName !== null && extensionSlotName !== void 0 ? extensionSlotName : legacyExtensionSlotName;\n var slotRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var _useExtensionSlot = (0,_useExtensionSlot__WEBPACK_IMPORTED_MODULE_3__.useExtensionSlot)(name), extensions = _useExtensionSlot.extensions, extensionSlotModuleName = _useExtensionSlot.extensionSlotModuleName;\n var extensionsToRender = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n return select(extensions);\n }, [\n select,\n extensions\n ]);\n var extensionsFromChildrenFunction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n if (typeof children == \"function\" && !/*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().isValidElement(children)) {\n return extensionsToRender.map(function(extension) {\n return children(extension);\n });\n }\n }, [\n children,\n extensionsToRender\n ]);\n var _extensionsFromChildrenFunction_i, _ref;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", _object_spread({\n ref: slotRef,\n \"data-extension-slot-name\": name,\n \"data-extension-slot-module-name\": extensionSlotModuleName,\n style: _object_spread_props(_object_spread({}, style), {\n position: \"relative\"\n })\n }, divProps), name && extensionsToRender.map(function(extension, i) {\n /*#__PURE__*/ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ComponentContext__WEBPACK_IMPORTED_MODULE_1__.ComponentContext.Provider, {\n key: extension.id,\n value: {\n moduleName: extensionSlotModuleName,\n extension: {\n extensionId: extension.id,\n extensionSlotName: name,\n extensionSlotModuleName: extensionSlotModuleName\n }\n }\n }, (_ref = (_extensionsFromChildrenFunction_i = extensionsFromChildrenFunction === null || extensionsFromChildrenFunction === void 0 ? void 0 : extensionsFromChildrenFunction[i]) !== null && _extensionsFromChildrenFunction_i !== void 0 ? _extensionsFromChildrenFunction_i : typeof children != \"function\" ? children : null) !== null && _ref !== void 0 ? _ref : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Extension__WEBPACK_IMPORTED_MODULE_2__.Extension, {\n state: state\n }));\n }));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1yZWFjdC11dGlscy9zcmMvRXh0ZW5zaW9uU2xvdC50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUErQztBQUVPO0FBQ2Q7QUFDYztBQXVCdEQsU0FBU00sY0FBY0MsVUFBcUMsRUFBRTtJQUM1RCxPQUFPQTtBQUNUO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBK0NDLEdBQ00sU0FBU0MsY0FBYyxRQVFQO1FBUHJCQyxvQkFENEIsT0FDNUJBLE1BQ0FDLDBCQUY0QixPQUU1QkEsbUNBRjRCLE9BRzVCRSxRQUFBQSxvQ0FBU04sK0JBQ1RPLFdBSjRCLE9BSTVCQSxVQUNBQyxRQUw0QixPQUs1QkEsT0FDQUMsUUFONEIsT0FNNUJBLE9BQ0dDLHNDQVB5QjtRQUM1QlA7UUFDQUM7UUFDQUU7UUFDQUM7UUFDQUM7UUFDQUM7O0lBR0EsSUFBSUYsWUFBWUMsT0FBTztRQUNyQixNQUFNLElBQUlHLE1BQ1IsMElBQ0E7SUFDSixDQUFDO0lBRUQsSUFBTVIsT0FBUUMsOEJBQUFBLCtCQUFBQSxvQkFBcUJDLHVCQUF1QjtJQUMxRCxJQUFNTyxVQUFVakIsNkNBQU1BLENBQUMsSUFBSTtJQUMzQixJQUFnREksb0JBQUFBLG1FQUFnQkEsQ0FBQ0ksT0FBekRGLGFBQXdDRixrQkFBeENFLFlBQVlZLDBCQUE0QmQsa0JBQTVCYztJQUVwQixJQUFNQyxxQkFBcUJsQiw4Q0FBT0EsQ0FBQztlQUFNVSxPQUFPTDtPQUFhO1FBQUNLO1FBQVFMO0tBQVc7SUFFakYsSUFBTWMsaUNBQWlDbkIsOENBQU9BLENBQUMsV0FBTTtRQUNuRCxJQUFJLE9BQU9XLFlBQVksY0FBYyxlQUFDYiwyREFBb0IsQ0FBQ2EsV0FBVztZQUNwRSxPQUFPTyxtQkFBbUJHLEdBQUcsQ0FBQyxTQUFDQzt1QkFBY1gsU0FBU1c7O1FBQ3hELENBQUM7SUFDSCxHQUFHO1FBQUNYO1FBQVVPO0tBQW1CO1FBdUJ0QkMsbUNBQUFBO0lBckJYLHFCQUNFLDJEQUFDSTtRQUNDQyxLQUFLUjtRQUNMUyw0QkFBMEJsQjtRQUMxQm1CLG1DQUFpQ1Q7UUFDakNKLE9BQU8sd0NBQUtBO1lBQU9jLFVBQVU7O09BQ3pCYixXQUVIUCxRQUNDVyxtQkFBbUJHLEdBQUcsQ0FBQyxTQUFDQyxXQUFXTTtzQkFDakMsa0VBQUMzQiwrREFBZ0JBLENBQUM0QixRQUFRO1lBQ3hCQyxLQUFLUixVQUFVUyxFQUFFO1lBQ2pCQyxPQUFPO2dCQUNMQyxZQUFZaEI7Z0JBQ1pLLFdBQVc7b0JBQ1RZLGFBQWFaLFVBQVVTLEVBQUU7b0JBQ3pCdkIsbUJBQW1CRDtvQkFDbkJVLHlCQUFBQTtnQkFDRjtZQUNGO1dBRUNFLENBQUFBLE9BQUFBLENBQUFBLG9DQUFBQSwyQ0FBQUEsNENBQUFBLEtBQUFBLElBQUFBLDhCQUFnQyxDQUFDUyxFQUFFLGNBQW5DVCwrQ0FBQUEsb0NBQXdDLE9BQU9SLFlBQVksYUFBYUEsV0FBVyxJQUFJLGNBQXZGUSxrQkFBQUEscUJBQ0MsMkRBQUNqQixpREFBU0E7WUFBQ1UsT0FBT0E7VUFDbkI7O0FBS2IsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS1yZWFjdC11dGlscy9zcmMvRXh0ZW5zaW9uU2xvdC50c3g/MDBlYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlUmVmLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBDb25uZWN0ZWRFeHRlbnNpb24gfSBmcm9tICdAb3Blbm1ycy9lc20tZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0IH0gZnJvbSAnLi9Db21wb25lbnRDb250ZXh0JztcbmltcG9ydCB7IEV4dGVuc2lvbiB9IGZyb20gJy4vRXh0ZW5zaW9uJztcbmltcG9ydCB7IHVzZUV4dGVuc2lvblNsb3QgfSBmcm9tICcuL3VzZUV4dGVuc2lvblNsb3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvblNsb3RCYXNlUHJvcHMge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYG5hbWVgICovXG4gIGV4dGVuc2lvblNsb3ROYW1lPzogc3RyaW5nO1xuICBzZWxlY3Q/OiAoZXh0ZW5zaW9uczogQXJyYXk8Q29ubmVjdGVkRXh0ZW5zaW9uPikgPT4gQXJyYXk8Q29ubmVjdGVkRXh0ZW5zaW9uPjtcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9sZEV4dGVuc2lvblNsb3RCYXNlUHJvcHMge1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBuYW1lYCAqL1xuICBleHRlbnNpb25TbG90TmFtZTogc3RyaW5nO1xuICBzZWxlY3Q/OiAoZXh0ZW5zaW9uczogQXJyYXk8Q29ubmVjdGVkRXh0ZW5zaW9uPikgPT4gQXJyYXk8Q29ubmVjdGVkRXh0ZW5zaW9uPjtcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG5leHBvcnQgdHlwZSBFeHRlbnNpb25TbG90UHJvcHMgPSAoT2xkRXh0ZW5zaW9uU2xvdEJhc2VQcm9wcyB8IEV4dGVuc2lvblNsb3RCYXNlUHJvcHMpICZcbiAgT21pdDxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRGl2RWxlbWVudD4sICdjaGlsZHJlbic+ICYge1xuICAgIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlIHwgKChleHRlbnNpb246IENvbm5lY3RlZEV4dGVuc2lvbikgPT4gUmVhY3QuUmVhY3ROb2RlKTtcbiAgfTtcblxuZnVuY3Rpb24gZGVmYXVsdFNlbGVjdChleHRlbnNpb25zOiBBcnJheTxDb25uZWN0ZWRFeHRlbnNpb24+KSB7XG4gIHJldHVybiBleHRlbnNpb25zO1xufVxuXG4vKipcbiAqIEFuIFtleHRlbnNpb24gc2xvdF0oaHR0cHM6Ly9vMy1kZXYuZG9jcy5vcGVubXJzLm9yZy8jL21haW4vZXh0ZW5zaW9ucykuXG4gKiBBIHBsYWNlIHdpdGggYSBuYW1lLiBFeHRlbnNpb25zIHRoYXQgZ2V0IGNvbm5lY3RlZCB0byB0aGF0IG5hbWVcbiAqIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzLlxuICpcbiAqIEBwYXJhbSBwcm9wcy5uYW1lIFRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gc2xvdFxuICogQHBhcmFtIHByb3BzLnNlbGVjdCBBbiBvcHRpb25hbCBmdW5jdGlvbiBmb3IgZmlsdGVyaW5nIG9yIG90aGVyd2lzZSBtb2RpZnlpbmdcbiAqICAgdGhlIGxpc3Qgb2YgZXh0ZW5zaW9ucyB0aGF0IHdpbGwgYmUgcmVuZGVyZWQuXG4gKiBAcGFyYW0gcHJvcHMuc3RhdGUgKk9ubHkgd29ya3MgaWYgbm8gY2hpbGRyZW4gYXJlIHByb3ZpZGVkKi4gUGFzc2VzIGRhdGFcbiAqICAgdGhyb3VnaCBhcyBwcm9wcyB0byB0aGUgZXh0ZW5zaW9ucyB0aGF0IGFyZSBtb3VudGVkIGhlcmUuIElmIGBFeHRlbnNpb25TbG90YFxuICogICBoYXMgY2hpbGRyZW4sIHlvdSBtdXN0IHBhc3MgdGhlIHN0YXRlIHRocm91Z2ggdGhlIGBzdGF0ZWAgcGFyYW0gb2YgdGhlXG4gKiAgIGBFeHRlbnNpb25gIGNvbXBvbmVudC5cbiAqIEBwYXJhbSBwcm9wcy5jaGlsZHJlbiBUaGVyZSBhcmUgdHdvIGRpZmZlcmVudCB3YXlzIHRvIHVzZSBgRXh0ZW5zaW9uU2xvdGBcbiAqICAgY2hpbGRyZW4uXG4gKiAgLSBQYXNzaW5nIGEgYFJlYWN0Tm9kZWAsIHRoZSBcIm5vcm1hbFwiIHdheS4gVGhlIGNoaWxkIG11c3QgY29udGFpbiB0aGUgY29tcG9uZW50XG4gKiAgICAgYEV4dGVuc2lvbmAuIFdoYXRldmVyIGlzIHBhc3NlZCBhcyB0aGUgY2hpbGQgd2lsbCBiZSByZW5kZXJlZCBvbmNlIHBlciBleHRlbnNpb24uXG4gKiAgICAgU2VlIHRoZSBmaXJzdCBleGFtcGxlIGJlbG93LlxuICogIC0gUGFzc2luZyBhIGZ1bmN0aW9uLCB0aGUgXCJyZW5kZXIgcHJvcHNcIiB3YXkuIFRoZSBjaGlsZCBtdXN0IGJlIGEgZnVuY3Rpb25cbiAqICAgICB3aGljaCB0YWtlcyBhIFtbQ29ubmVjdGVkRXh0ZW5zaW9uXV0gYXMgYXJndW1lbnQgYW5kIHJldHVybnMgYSBgUmVhY3ROb2RlYC5cbiAqICAgICB0aGUgcmVzdWx0aW5nIHJlYWN0IG5vZGUgbXVzdCBjb250YWluIHRoZSBjb21wb25lbnQgYEV4dGVuc2lvbmAuIEl0IHdpbGxcbiAqICAgICBiZSBydW4gZm9yIGVhY2ggZXh0ZW5zaW9uLiBTZWUgdGhlIHNlY29uZCBleGFtcGxlIGJlbG93LlxuICpcbiAqIEBleGFtcGxlXG4gKiBQYXNzaW5nIGEgcmVhY3Qgbm9kZSBhcyBjaGlsZHJlblxuICpcbiAqIGBgYHRzeFxuICogPEV4dGVuc2lvblNsb3QgbmFtZT1cIkZvb1wiPlxuICogICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAxMHJlbSB9fT5cbiAqICAgICA8RXh0ZW5zaW9uIC8+XG4gKiAgIDwvZGl2PlxuICogPC9FeHRlbnNpb25TbG90PlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFBhc3NpbmcgYSBmdW5jdGlvbiBhcyBjaGlsZHJlblxuICpcbiAqIGBgYHRzeFxuICogPEV4dGVuc2lvblNsb3QgbmFtZT1cIkJhclwiPlxuICogICB7KGV4dGVuc2lvbikgPT4gKFxuICogICAgIDxoMT57ZXh0ZW5zaW9uLm5hbWV9PC9oMT5cbiAqICAgICA8ZGl2IHN0eWxlPXt7IGNvbG9yOiBleHRlbnNpb24ubWV0YS5jb2xvciB9fT5cbiAqICAgICAgIDxFeHRlbnNpb24gLz5cbiAqICAgICA8L2Rpdj5cbiAqICAgKX1cbiAqIDwvRXh0ZW5zaW9uU2xvdD5cbiAqIGBgYFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEV4dGVuc2lvblNsb3Qoe1xuICBuYW1lOiBleHRlbnNpb25TbG90TmFtZSxcbiAgZXh0ZW5zaW9uU2xvdE5hbWU6IGxlZ2FjeUV4dGVuc2lvblNsb3ROYW1lLFxuICBzZWxlY3QgPSBkZWZhdWx0U2VsZWN0LFxuICBjaGlsZHJlbixcbiAgc3RhdGUsXG4gIHN0eWxlLFxuICAuLi5kaXZQcm9wc1xufTogRXh0ZW5zaW9uU2xvdFByb3BzKSB7XG4gIGlmIChjaGlsZHJlbiAmJiBzdGF0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCb3RoIGNoaWxkcmVuIGFuZCBzdGF0ZSBoYXZlIGJlZW4gcHJvdmlkZWQuIElmIGNoaWxkcmVuIGFyZSBwcm92aWRlZCwgdGhlIHN0YXRlIG11c3QgYmUgcGFzc2VkIGFzIGEgcHJvcCB0byB0aGUgYEV4dGVuc2lvbmAgY29tcG9uZW50LicsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG5hbWUgPSAoZXh0ZW5zaW9uU2xvdE5hbWUgPz8gbGVnYWN5RXh0ZW5zaW9uU2xvdE5hbWUpIGFzIHN0cmluZztcbiAgY29uc3Qgc2xvdFJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgeyBleHRlbnNpb25zLCBleHRlbnNpb25TbG90TW9kdWxlTmFtZSB9ID0gdXNlRXh0ZW5zaW9uU2xvdChuYW1lKTtcblxuICBjb25zdCBleHRlbnNpb25zVG9SZW5kZXIgPSB1c2VNZW1vKCgpID0+IHNlbGVjdChleHRlbnNpb25zKSwgW3NlbGVjdCwgZXh0ZW5zaW9uc10pO1xuXG4gIGNvbnN0IGV4dGVuc2lvbnNGcm9tQ2hpbGRyZW5GdW5jdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT0gJ2Z1bmN0aW9uJyAmJiAhUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICByZXR1cm4gZXh0ZW5zaW9uc1RvUmVuZGVyLm1hcCgoZXh0ZW5zaW9uKSA9PiBjaGlsZHJlbihleHRlbnNpb24pKTtcbiAgICB9XG4gIH0sIFtjaGlsZHJlbiwgZXh0ZW5zaW9uc1RvUmVuZGVyXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3Nsb3RSZWZ9XG4gICAgICBkYXRhLWV4dGVuc2lvbi1zbG90LW5hbWU9e25hbWV9XG4gICAgICBkYXRhLWV4dGVuc2lvbi1zbG90LW1vZHVsZS1uYW1lPXtleHRlbnNpb25TbG90TW9kdWxlTmFtZX1cbiAgICAgIHN0eWxlPXt7IC4uLnN0eWxlLCBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9fVxuICAgICAgey4uLmRpdlByb3BzfVxuICAgID5cbiAgICAgIHtuYW1lICYmXG4gICAgICAgIGV4dGVuc2lvbnNUb1JlbmRlci5tYXAoKGV4dGVuc2lvbiwgaSkgPT4gKFxuICAgICAgICAgIDxDb21wb25lbnRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgICBrZXk9e2V4dGVuc2lvbi5pZH1cbiAgICAgICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgICAgIG1vZHVsZU5hbWU6IGV4dGVuc2lvblNsb3RNb2R1bGVOYW1lLCAvLyBtb2R1bGVOYW1lIGlzIG5vdCB1c2VkIGJ5IHRoZSByZWNlaXZpbmcgRXh0ZW5zaW9uXG4gICAgICAgICAgICAgIGV4dGVuc2lvbjoge1xuICAgICAgICAgICAgICAgIGV4dGVuc2lvbklkOiBleHRlbnNpb24uaWQsXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uU2xvdE5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uU2xvdE1vZHVsZU5hbWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtleHRlbnNpb25zRnJvbUNoaWxkcmVuRnVuY3Rpb24/LltpXSA/PyAodHlwZW9mIGNoaWxkcmVuICE9ICdmdW5jdGlvbicgPyBjaGlsZHJlbiA6IG51bGwpID8/IChcbiAgICAgICAgICAgICAgPEV4dGVuc2lvbiBzdGF0ZT17c3RhdGV9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvQ29tcG9uZW50Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VSZWYiLCJ1c2VNZW1vIiwiQ29tcG9uZW50Q29udGV4dCIsIkV4dGVuc2lvbiIsInVzZUV4dGVuc2lvblNsb3QiLCJkZWZhdWx0U2VsZWN0IiwiZXh0ZW5zaW9ucyIsIkV4dGVuc2lvblNsb3QiLCJuYW1lIiwiZXh0ZW5zaW9uU2xvdE5hbWUiLCJsZWdhY3lFeHRlbnNpb25TbG90TmFtZSIsInNlbGVjdCIsImNoaWxkcmVuIiwic3RhdGUiLCJzdHlsZSIsImRpdlByb3BzIiwiRXJyb3IiLCJzbG90UmVmIiwiZXh0ZW5zaW9uU2xvdE1vZHVsZU5hbWUiLCJleHRlbnNpb25zVG9SZW5kZXIiLCJleHRlbnNpb25zRnJvbUNoaWxkcmVuRnVuY3Rpb24iLCJpc1ZhbGlkRWxlbWVudCIsIm1hcCIsImV4dGVuc2lvbiIsImRpdiIsInJlZiIsImRhdGEtZXh0ZW5zaW9uLXNsb3QtbmFtZSIsImRhdGEtZXh0ZW5zaW9uLXNsb3QtbW9kdWxlLW5hbWUiLCJwb3NpdGlvbiIsImkiLCJQcm92aWRlciIsImtleSIsImlkIiwidmFsdWUiLCJtb2R1bGVOYW1lIiwiZXh0ZW5zaW9uSWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../framework/esm-react-utils/src/ExtensionSlot.tsx\n");
|
|
7010
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ExtensionSlot: () => (/* binding */ ExtensionSlot)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"webpack/sharing/consume/default/react/react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _ComponentContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ComponentContext */ \"../../framework/esm-react-utils/src/ComponentContext.ts\");\n/* harmony import */ var _Extension__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Extension */ \"../../framework/esm-react-utils/src/Extension.tsx\");\n/* harmony import */ var _useExtensionSlot__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./useExtensionSlot */ \"../../framework/esm-react-utils/src/useExtensionSlot.ts\");\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _object_spread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _define_property(target, key, source[key]);\n });\n }\n return target;\n}\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _object_spread_props(target, source) {\n source = source != null ? source : {};\n if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _object_without_properties(source, excluded) {\n if (source == null) return {};\n var target = _object_without_properties_loose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for(i = 0; i < sourceSymbolKeys.length; i++){\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _object_without_properties_loose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for(i = 0; i < sourceKeys.length; i++){\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\n\n\n\nfunction defaultSelect(extensions) {\n return extensions;\n}\n/**\n * An [extension slot](https://o3-docs.openmrs.org/docs/extension-system).\n * A place with a name. Extensions that get connected to that name\n * will be rendered into this.\n *\n * @param props.name The name of the extension slot\n * @param props.select An optional function for filtering or otherwise modifying\n * the list of extensions that will be rendered.\n * @param props.state *Only works if no children are provided*. Passes data\n * through as props to the extensions that are mounted here. If `ExtensionSlot`\n * has children, you must pass the state through the `state` param of the\n * `Extension` component.\n * @param props.children There are two different ways to use `ExtensionSlot`\n * children.\n * - Passing a `ReactNode`, the \"normal\" way. The child must contain the component\n * `Extension`. Whatever is passed as the child will be rendered once per extension.\n * See the first example below.\n * - Passing a function, the \"render props\" way. The child must be a function\n * which takes a [[ConnectedExtension]] as argument and returns a `ReactNode`.\n * the resulting react node must contain the component `Extension`. It will\n * be run for each extension. See the second example below.\n *\n * @example\n * Passing a react node as children\n *\n * ```tsx\n * <ExtensionSlot name=\"Foo\">\n * <div style={{ width: 10rem }}>\n * <Extension />\n * </div>\n * </ExtensionSlot>\n * ```\n *\n * @example\n * Passing a function as children\n *\n * ```tsx\n * <ExtensionSlot name=\"Bar\">\n * {(extension) => (\n * <h1>{extension.name}</h1>\n * <div style={{ color: extension.meta.color }}>\n * <Extension />\n * </div>\n * )}\n * </ExtensionSlot>\n * ```\n *\n */ function ExtensionSlot(_param) {\n var extensionSlotName = _param.name, legacyExtensionSlotName = _param.extensionSlotName, _param_select = _param.select, select = _param_select === void 0 ? defaultSelect : _param_select, children = _param.children, state = _param.state, style = _param.style, divProps = _object_without_properties(_param, [\n \"name\",\n \"extensionSlotName\",\n \"select\",\n \"children\",\n \"state\",\n \"style\"\n ]);\n if (children && state) {\n throw new Error(\"Both children and state have been provided. If children are provided, the state must be passed as a prop to the `Extension` component.\");\n }\n var name = extensionSlotName !== null && extensionSlotName !== void 0 ? extensionSlotName : legacyExtensionSlotName;\n var slotRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var _useExtensionSlot = (0,_useExtensionSlot__WEBPACK_IMPORTED_MODULE_3__.useExtensionSlot)(name), extensions = _useExtensionSlot.extensions, extensionSlotModuleName = _useExtensionSlot.extensionSlotModuleName;\n var extensionsToRender = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n return select(extensions);\n }, [\n select,\n extensions\n ]);\n var extensionsFromChildrenFunction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n if (typeof children == \"function\" && !/*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().isValidElement(children)) {\n return extensionsToRender.map(function(extension) {\n return children(extension);\n });\n }\n }, [\n children,\n extensionsToRender\n ]);\n var _extensionsFromChildrenFunction_i, _ref;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", _object_spread({\n ref: slotRef,\n \"data-extension-slot-name\": name,\n \"data-extension-slot-module-name\": extensionSlotModuleName,\n style: _object_spread_props(_object_spread({}, style), {\n position: \"relative\"\n })\n }, divProps), name && extensionsToRender.map(function(extension, i) {\n /*#__PURE__*/ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ComponentContext__WEBPACK_IMPORTED_MODULE_1__.ComponentContext.Provider, {\n key: extension.id,\n value: {\n moduleName: extensionSlotModuleName,\n extension: {\n extensionId: extension.id,\n extensionSlotName: name,\n extensionSlotModuleName: extensionSlotModuleName\n }\n }\n }, (_ref = (_extensionsFromChildrenFunction_i = extensionsFromChildrenFunction === null || extensionsFromChildrenFunction === void 0 ? void 0 : extensionsFromChildrenFunction[i]) !== null && _extensionsFromChildrenFunction_i !== void 0 ? _extensionsFromChildrenFunction_i : typeof children != \"function\" ? children : null) !== null && _ref !== void 0 ? _ref : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Extension__WEBPACK_IMPORTED_MODULE_2__.Extension, {\n state: state\n }));\n }));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1yZWFjdC11dGlscy9zcmMvRXh0ZW5zaW9uU2xvdC50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUErQztBQUVPO0FBQ2Q7QUFDYztBQXVCdEQsU0FBU00sY0FBY0MsVUFBcUMsRUFBRTtJQUM1RCxPQUFPQTtBQUNUO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBK0NDLEdBQ00sU0FBU0MsY0FBYyxRQVFQO1FBUHJCQyxvQkFENEIsT0FDNUJBLE1BQ0FDLDBCQUY0QixPQUU1QkEsbUNBRjRCLE9BRzVCRSxRQUFBQSxvQ0FBU04sK0JBQ1RPLFdBSjRCLE9BSTVCQSxVQUNBQyxRQUw0QixPQUs1QkEsT0FDQUMsUUFONEIsT0FNNUJBLE9BQ0dDLHNDQVB5QjtRQUM1QlA7UUFDQUM7UUFDQUU7UUFDQUM7UUFDQUM7UUFDQUM7O0lBR0EsSUFBSUYsWUFBWUMsT0FBTztRQUNyQixNQUFNLElBQUlHLE1BQ1IsMElBQ0E7SUFDSixDQUFDO0lBRUQsSUFBTVIsT0FBUUMsOEJBQUFBLCtCQUFBQSxvQkFBcUJDLHVCQUF1QjtJQUMxRCxJQUFNTyxVQUFVakIsNkNBQU1BLENBQUMsSUFBSTtJQUMzQixJQUFnREksb0JBQUFBLG1FQUFnQkEsQ0FBQ0ksT0FBekRGLGFBQXdDRixrQkFBeENFLFlBQVlZLDBCQUE0QmQsa0JBQTVCYztJQUVwQixJQUFNQyxxQkFBcUJsQiw4Q0FBT0EsQ0FBQztlQUFNVSxPQUFPTDtPQUFhO1FBQUNLO1FBQVFMO0tBQVc7SUFFakYsSUFBTWMsaUNBQWlDbkIsOENBQU9BLENBQUMsV0FBTTtRQUNuRCxJQUFJLE9BQU9XLFlBQVksY0FBYyxlQUFDYiwyREFBb0IsQ0FBQ2EsV0FBVztZQUNwRSxPQUFPTyxtQkFBbUJHLEdBQUcsQ0FBQyxTQUFDQzt1QkFBY1gsU0FBU1c7O1FBQ3hELENBQUM7SUFDSCxHQUFHO1FBQUNYO1FBQVVPO0tBQW1CO1FBdUJ0QkMsbUNBQUFBO0lBckJYLHFCQUNFLDJEQUFDSTtRQUNDQyxLQUFLUjtRQUNMUyw0QkFBMEJsQjtRQUMxQm1CLG1DQUFpQ1Q7UUFDakNKLE9BQU8sd0NBQUtBO1lBQU9jLFVBQVU7O09BQ3pCYixXQUVIUCxRQUNDVyxtQkFBbUJHLEdBQUcsQ0FBQyxTQUFDQyxXQUFXTTtzQkFDakMsa0VBQUMzQiwrREFBZ0JBLENBQUM0QixRQUFRO1lBQ3hCQyxLQUFLUixVQUFVUyxFQUFFO1lBQ2pCQyxPQUFPO2dCQUNMQyxZQUFZaEI7Z0JBQ1pLLFdBQVc7b0JBQ1RZLGFBQWFaLFVBQVVTLEVBQUU7b0JBQ3pCdkIsbUJBQW1CRDtvQkFDbkJVLHlCQUFBQTtnQkFDRjtZQUNGO1dBRUNFLENBQUFBLE9BQUFBLENBQUFBLG9DQUFBQSwyQ0FBQUEsNENBQUFBLEtBQUFBLElBQUFBLDhCQUFnQyxDQUFDUyxFQUFFLGNBQW5DVCwrQ0FBQUEsb0NBQXdDLE9BQU9SLFlBQVksYUFBYUEsV0FBVyxJQUFJLGNBQXZGUSxrQkFBQUEscUJBQ0MsMkRBQUNqQixpREFBU0E7WUFBQ1UsT0FBT0E7VUFDbkI7O0FBS2IsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS1yZWFjdC11dGlscy9zcmMvRXh0ZW5zaW9uU2xvdC50c3g/MDBlYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlUmVmLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBDb25uZWN0ZWRFeHRlbnNpb24gfSBmcm9tICdAb3Blbm1ycy9lc20tZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0IH0gZnJvbSAnLi9Db21wb25lbnRDb250ZXh0JztcbmltcG9ydCB7IEV4dGVuc2lvbiB9IGZyb20gJy4vRXh0ZW5zaW9uJztcbmltcG9ydCB7IHVzZUV4dGVuc2lvblNsb3QgfSBmcm9tICcuL3VzZUV4dGVuc2lvblNsb3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvblNsb3RCYXNlUHJvcHMge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYG5hbWVgICovXG4gIGV4dGVuc2lvblNsb3ROYW1lPzogc3RyaW5nO1xuICBzZWxlY3Q/OiAoZXh0ZW5zaW9uczogQXJyYXk8Q29ubmVjdGVkRXh0ZW5zaW9uPikgPT4gQXJyYXk8Q29ubmVjdGVkRXh0ZW5zaW9uPjtcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9sZEV4dGVuc2lvblNsb3RCYXNlUHJvcHMge1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBuYW1lYCAqL1xuICBleHRlbnNpb25TbG90TmFtZTogc3RyaW5nO1xuICBzZWxlY3Q/OiAoZXh0ZW5zaW9uczogQXJyYXk8Q29ubmVjdGVkRXh0ZW5zaW9uPikgPT4gQXJyYXk8Q29ubmVjdGVkRXh0ZW5zaW9uPjtcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG5leHBvcnQgdHlwZSBFeHRlbnNpb25TbG90UHJvcHMgPSAoT2xkRXh0ZW5zaW9uU2xvdEJhc2VQcm9wcyB8IEV4dGVuc2lvblNsb3RCYXNlUHJvcHMpICZcbiAgT21pdDxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRGl2RWxlbWVudD4sICdjaGlsZHJlbic+ICYge1xuICAgIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlIHwgKChleHRlbnNpb246IENvbm5lY3RlZEV4dGVuc2lvbikgPT4gUmVhY3QuUmVhY3ROb2RlKTtcbiAgfTtcblxuZnVuY3Rpb24gZGVmYXVsdFNlbGVjdChleHRlbnNpb25zOiBBcnJheTxDb25uZWN0ZWRFeHRlbnNpb24+KSB7XG4gIHJldHVybiBleHRlbnNpb25zO1xufVxuXG4vKipcbiAqIEFuIFtleHRlbnNpb24gc2xvdF0oaHR0cHM6Ly9vMy1kb2NzLm9wZW5tcnMub3JnL2RvY3MvZXh0ZW5zaW9uLXN5c3RlbSkuXG4gKiBBIHBsYWNlIHdpdGggYSBuYW1lLiBFeHRlbnNpb25zIHRoYXQgZ2V0IGNvbm5lY3RlZCB0byB0aGF0IG5hbWVcbiAqIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzLlxuICpcbiAqIEBwYXJhbSBwcm9wcy5uYW1lIFRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gc2xvdFxuICogQHBhcmFtIHByb3BzLnNlbGVjdCBBbiBvcHRpb25hbCBmdW5jdGlvbiBmb3IgZmlsdGVyaW5nIG9yIG90aGVyd2lzZSBtb2RpZnlpbmdcbiAqICAgdGhlIGxpc3Qgb2YgZXh0ZW5zaW9ucyB0aGF0IHdpbGwgYmUgcmVuZGVyZWQuXG4gKiBAcGFyYW0gcHJvcHMuc3RhdGUgKk9ubHkgd29ya3MgaWYgbm8gY2hpbGRyZW4gYXJlIHByb3ZpZGVkKi4gUGFzc2VzIGRhdGFcbiAqICAgdGhyb3VnaCBhcyBwcm9wcyB0byB0aGUgZXh0ZW5zaW9ucyB0aGF0IGFyZSBtb3VudGVkIGhlcmUuIElmIGBFeHRlbnNpb25TbG90YFxuICogICBoYXMgY2hpbGRyZW4sIHlvdSBtdXN0IHBhc3MgdGhlIHN0YXRlIHRocm91Z2ggdGhlIGBzdGF0ZWAgcGFyYW0gb2YgdGhlXG4gKiAgIGBFeHRlbnNpb25gIGNvbXBvbmVudC5cbiAqIEBwYXJhbSBwcm9wcy5jaGlsZHJlbiBUaGVyZSBhcmUgdHdvIGRpZmZlcmVudCB3YXlzIHRvIHVzZSBgRXh0ZW5zaW9uU2xvdGBcbiAqICAgY2hpbGRyZW4uXG4gKiAgLSBQYXNzaW5nIGEgYFJlYWN0Tm9kZWAsIHRoZSBcIm5vcm1hbFwiIHdheS4gVGhlIGNoaWxkIG11c3QgY29udGFpbiB0aGUgY29tcG9uZW50XG4gKiAgICAgYEV4dGVuc2lvbmAuIFdoYXRldmVyIGlzIHBhc3NlZCBhcyB0aGUgY2hpbGQgd2lsbCBiZSByZW5kZXJlZCBvbmNlIHBlciBleHRlbnNpb24uXG4gKiAgICAgU2VlIHRoZSBmaXJzdCBleGFtcGxlIGJlbG93LlxuICogIC0gUGFzc2luZyBhIGZ1bmN0aW9uLCB0aGUgXCJyZW5kZXIgcHJvcHNcIiB3YXkuIFRoZSBjaGlsZCBtdXN0IGJlIGEgZnVuY3Rpb25cbiAqICAgICB3aGljaCB0YWtlcyBhIFtbQ29ubmVjdGVkRXh0ZW5zaW9uXV0gYXMgYXJndW1lbnQgYW5kIHJldHVybnMgYSBgUmVhY3ROb2RlYC5cbiAqICAgICB0aGUgcmVzdWx0aW5nIHJlYWN0IG5vZGUgbXVzdCBjb250YWluIHRoZSBjb21wb25lbnQgYEV4dGVuc2lvbmAuIEl0IHdpbGxcbiAqICAgICBiZSBydW4gZm9yIGVhY2ggZXh0ZW5zaW9uLiBTZWUgdGhlIHNlY29uZCBleGFtcGxlIGJlbG93LlxuICpcbiAqIEBleGFtcGxlXG4gKiBQYXNzaW5nIGEgcmVhY3Qgbm9kZSBhcyBjaGlsZHJlblxuICpcbiAqIGBgYHRzeFxuICogPEV4dGVuc2lvblNsb3QgbmFtZT1cIkZvb1wiPlxuICogICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAxMHJlbSB9fT5cbiAqICAgICA8RXh0ZW5zaW9uIC8+XG4gKiAgIDwvZGl2PlxuICogPC9FeHRlbnNpb25TbG90PlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFBhc3NpbmcgYSBmdW5jdGlvbiBhcyBjaGlsZHJlblxuICpcbiAqIGBgYHRzeFxuICogPEV4dGVuc2lvblNsb3QgbmFtZT1cIkJhclwiPlxuICogICB7KGV4dGVuc2lvbikgPT4gKFxuICogICAgIDxoMT57ZXh0ZW5zaW9uLm5hbWV9PC9oMT5cbiAqICAgICA8ZGl2IHN0eWxlPXt7IGNvbG9yOiBleHRlbnNpb24ubWV0YS5jb2xvciB9fT5cbiAqICAgICAgIDxFeHRlbnNpb24gLz5cbiAqICAgICA8L2Rpdj5cbiAqICAgKX1cbiAqIDwvRXh0ZW5zaW9uU2xvdD5cbiAqIGBgYFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEV4dGVuc2lvblNsb3Qoe1xuICBuYW1lOiBleHRlbnNpb25TbG90TmFtZSxcbiAgZXh0ZW5zaW9uU2xvdE5hbWU6IGxlZ2FjeUV4dGVuc2lvblNsb3ROYW1lLFxuICBzZWxlY3QgPSBkZWZhdWx0U2VsZWN0LFxuICBjaGlsZHJlbixcbiAgc3RhdGUsXG4gIHN0eWxlLFxuICAuLi5kaXZQcm9wc1xufTogRXh0ZW5zaW9uU2xvdFByb3BzKSB7XG4gIGlmIChjaGlsZHJlbiAmJiBzdGF0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCb3RoIGNoaWxkcmVuIGFuZCBzdGF0ZSBoYXZlIGJlZW4gcHJvdmlkZWQuIElmIGNoaWxkcmVuIGFyZSBwcm92aWRlZCwgdGhlIHN0YXRlIG11c3QgYmUgcGFzc2VkIGFzIGEgcHJvcCB0byB0aGUgYEV4dGVuc2lvbmAgY29tcG9uZW50LicsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG5hbWUgPSAoZXh0ZW5zaW9uU2xvdE5hbWUgPz8gbGVnYWN5RXh0ZW5zaW9uU2xvdE5hbWUpIGFzIHN0cmluZztcbiAgY29uc3Qgc2xvdFJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgeyBleHRlbnNpb25zLCBleHRlbnNpb25TbG90TW9kdWxlTmFtZSB9ID0gdXNlRXh0ZW5zaW9uU2xvdChuYW1lKTtcblxuICBjb25zdCBleHRlbnNpb25zVG9SZW5kZXIgPSB1c2VNZW1vKCgpID0+IHNlbGVjdChleHRlbnNpb25zKSwgW3NlbGVjdCwgZXh0ZW5zaW9uc10pO1xuXG4gIGNvbnN0IGV4dGVuc2lvbnNGcm9tQ2hpbGRyZW5GdW5jdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT0gJ2Z1bmN0aW9uJyAmJiAhUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICByZXR1cm4gZXh0ZW5zaW9uc1RvUmVuZGVyLm1hcCgoZXh0ZW5zaW9uKSA9PiBjaGlsZHJlbihleHRlbnNpb24pKTtcbiAgICB9XG4gIH0sIFtjaGlsZHJlbiwgZXh0ZW5zaW9uc1RvUmVuZGVyXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3Nsb3RSZWZ9XG4gICAgICBkYXRhLWV4dGVuc2lvbi1zbG90LW5hbWU9e25hbWV9XG4gICAgICBkYXRhLWV4dGVuc2lvbi1zbG90LW1vZHVsZS1uYW1lPXtleHRlbnNpb25TbG90TW9kdWxlTmFtZX1cbiAgICAgIHN0eWxlPXt7IC4uLnN0eWxlLCBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9fVxuICAgICAgey4uLmRpdlByb3BzfVxuICAgID5cbiAgICAgIHtuYW1lICYmXG4gICAgICAgIGV4dGVuc2lvbnNUb1JlbmRlci5tYXAoKGV4dGVuc2lvbiwgaSkgPT4gKFxuICAgICAgICAgIDxDb21wb25lbnRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgICBrZXk9e2V4dGVuc2lvbi5pZH1cbiAgICAgICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgICAgIG1vZHVsZU5hbWU6IGV4dGVuc2lvblNsb3RNb2R1bGVOYW1lLCAvLyBtb2R1bGVOYW1lIGlzIG5vdCB1c2VkIGJ5IHRoZSByZWNlaXZpbmcgRXh0ZW5zaW9uXG4gICAgICAgICAgICAgIGV4dGVuc2lvbjoge1xuICAgICAgICAgICAgICAgIGV4dGVuc2lvbklkOiBleHRlbnNpb24uaWQsXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uU2xvdE5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uU2xvdE1vZHVsZU5hbWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtleHRlbnNpb25zRnJvbUNoaWxkcmVuRnVuY3Rpb24/LltpXSA/PyAodHlwZW9mIGNoaWxkcmVuICE9ICdmdW5jdGlvbicgPyBjaGlsZHJlbiA6IG51bGwpID8/IChcbiAgICAgICAgICAgICAgPEV4dGVuc2lvbiBzdGF0ZT17c3RhdGV9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvQ29tcG9uZW50Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VSZWYiLCJ1c2VNZW1vIiwiQ29tcG9uZW50Q29udGV4dCIsIkV4dGVuc2lvbiIsInVzZUV4dGVuc2lvblNsb3QiLCJkZWZhdWx0U2VsZWN0IiwiZXh0ZW5zaW9ucyIsIkV4dGVuc2lvblNsb3QiLCJuYW1lIiwiZXh0ZW5zaW9uU2xvdE5hbWUiLCJsZWdhY3lFeHRlbnNpb25TbG90TmFtZSIsInNlbGVjdCIsImNoaWxkcmVuIiwic3RhdGUiLCJzdHlsZSIsImRpdlByb3BzIiwiRXJyb3IiLCJzbG90UmVmIiwiZXh0ZW5zaW9uU2xvdE1vZHVsZU5hbWUiLCJleHRlbnNpb25zVG9SZW5kZXIiLCJleHRlbnNpb25zRnJvbUNoaWxkcmVuRnVuY3Rpb24iLCJpc1ZhbGlkRWxlbWVudCIsIm1hcCIsImV4dGVuc2lvbiIsImRpdiIsInJlZiIsImRhdGEtZXh0ZW5zaW9uLXNsb3QtbmFtZSIsImRhdGEtZXh0ZW5zaW9uLXNsb3QtbW9kdWxlLW5hbWUiLCJwb3NpdGlvbiIsImkiLCJQcm92aWRlciIsImtleSIsImlkIiwidmFsdWUiLCJtb2R1bGVOYW1lIiwiZXh0ZW5zaW9uSWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../framework/esm-react-utils/src/ExtensionSlot.tsx\n");
|
|
7011
7011
|
|
|
7012
7012
|
/***/ }),
|
|
7013
7013
|
|
|
@@ -8185,7 +8185,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
8185
8185
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8186
8186
|
|
|
8187
8187
|
"use strict";
|
|
8188
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ setupPaths: () => (/* binding */ setupPaths),\n/* harmony export */ setupUtils: () => (/* binding */ setupUtils)\n/* harmony export */ });\n/* harmony import */ var _openmrs_esm_styleguide_dist_openmrs_esm_styleguide_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @openmrs/esm-styleguide/dist/openmrs-esm-styleguide.css */ \"../../framework/esm-styleguide/dist/openmrs-esm-styleguide.css\");\n/* harmony import */ var import_map_overrides__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! import-map-overrides */ \"../../../node_modules/import-map-overrides/dist/import-map-overrides.js\");\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @openmrs/esm-framework */ \"webpack/sharing/consume/default/@openmrs/esm-framework/@openmrs/esm-framework\");\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2__);\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, g, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n };\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(_)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\n\n\n\nfunction setupPaths(config) {\n var error = false;\n if (!config.apiUrl) {\n console.error(\"initializeSpa() was called without supplying an apiUrl. This means that the application cannot communicate with the backend.\");\n error = true;\n }\n if (!config.spaPath) {\n console.error(\"initializeSpa() was called without supplying a spaPath. This means that the application cannot properly generate urls.\");\n error = true;\n }\n if (error) {\n throw new Error(\"One or more required properties in the basic configuration of the application was missing and the application cannot be rendered. Please see the browser console for details.\");\n }\n window.openmrsBase = config.apiUrl;\n window.spaBase = config.spaPath;\n window.spaEnv = config.env || \"production\";\n window.spaVersion = \"5.3.3-pre.1251-20231208\";\n var spaBaseWithSlash = window.spaBase.endsWith(\"/\") ? window.spaBase : window.spaBase + \"/\";\n window.getOpenmrsSpaBase = function() {\n return spaBaseWithSlash;\n };\n}\nfunction setupUtils() {\n window.copyText = function(source) {\n var sel = window.getSelection();\n if (sel) {\n var r = document.createRange();\n r.selectNode(source);\n sel.removeAllRanges();\n sel.addRange(r);\n document.execCommand(\"copy\");\n sel.removeAllRanges();\n }\n };\n}\nfunction wireSpaPaths() {\n var baseElement = document.createElement(\"base\");\n var baseHref = window.getOpenmrsSpaBase();\n baseElement.href = baseHref;\n document.head.appendChild(baseElement);\n __webpack_require__.p = baseHref;\n}\n/**\n * Initializes the OpenMRS Frontend App Shell.\n * @param config The global configuration to apply.\n */ function initializeSpa(config) {\n setupUtils();\n setupPaths(config);\n wireSpaPaths();\n return Promise.resolve(__webpack_require__.I(\"default\")).then(/*#__PURE__*/ _async_to_generator(function() {\n var _config_configUrls, configUrls, _config_offline, offline, run;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _config_configUrls = config.configUrls, configUrls = _config_configUrls === void 0 ? [] : _config_configUrls, _config_offline = config.offline, offline = _config_offline === void 0 ? true : _config_offline;\n return [\n 4,\n Promise.all(/*! import() */[__webpack_require__.e(\"vendors-node_modules_i18next-browser-languagedetector_dist_esm_i18nextBrowserLanguageDetector-bec0ef\"), __webpack_require__.e(\"src_run_ts\")]).then(__webpack_require__.bind(__webpack_require__, /*! ./run */ \"./src/run.ts\"))\n ];\n case 1:\n run = _state.sent().run;\n return [\n 2,\n run(configUrls, offline)\n ];\n }\n });\n }));\n}\nwindow.initializeSpa = initializeSpa;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW5kZXgudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFpRTtBQUNuQztBQUNFO0FBR3pCLFNBQVNBLFdBQVdDLE1BQWlCLEVBQUU7SUFDNUMsSUFBSUMsUUFBUSxLQUFLO0lBQ2pCLElBQUksQ0FBQ0QsT0FBT0UsTUFBTSxFQUFFO1FBQ2xCQyxRQUFRRixLQUFLLENBQ1g7UUFFRkEsUUFBUSxJQUFJO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQ0QsT0FBT0ksT0FBTyxFQUFFO1FBQ25CRCxRQUFRRixLQUFLLENBQ1g7UUFFRkEsUUFBUSxJQUFJO0lBQ2QsQ0FBQztJQUVELElBQUlBLE9BQU87UUFDVCxNQUFNLElBQUlJLE1BQ1IsaUxBQ0E7SUFDSixDQUFDO0lBRURDLE9BQU9DLFdBQVcsR0FBR1AsT0FBT0UsTUFBTTtJQUNsQ0ksT0FBT0UsT0FBTyxHQUFHUixPQUFPSSxPQUFPO0lBQy9CRSxPQUFPRyxNQUFNLEdBQUdULE9BQU9VLEdBQUcsSUFBSTtJQUM5QkosT0FBT0ssVUFBVSxHQUFHQyx5QkFBeUI7SUFDN0MsSUFBTUUsbUJBQW1CUixPQUFPRSxPQUFPLENBQUNPLFFBQVEsQ0FBQyxPQUFPVCxPQUFPRSxPQUFPLEdBQUdGLE9BQU9FLE9BQU8sR0FBRyxHQUFHO0lBQzdGRixPQUFPVSxpQkFBaUIsR0FBRztlQUFNRjs7QUFDbkMsQ0FBQztBQUVNLFNBQVNHLGFBQWE7SUFDM0JYLE9BQU9ZLFFBQVEsR0FBRyxTQUFDQyxRQUF3QjtRQUN6QyxJQUFNQyxNQUFNZCxPQUFPZSxZQUFZO1FBRS9CLElBQUlELEtBQUs7WUFDUCxJQUFNRSxJQUFJQyxTQUFTQyxXQUFXO1lBQzlCRixFQUFFRyxVQUFVLENBQUNOO1lBQ2JDLElBQUlNLGVBQWU7WUFDbkJOLElBQUlPLFFBQVEsQ0FBQ0w7WUFDYkMsU0FBU0ssV0FBVyxDQUFDO1lBQ3JCUixJQUFJTSxlQUFlO1FBQ3JCLENBQUM7SUFDSDtBQUNGLENBQUM7QUFFRCxTQUFTRyxlQUFlO0lBQ3RCLElBQU1DLGNBQWNQLFNBQVNRLGFBQWEsQ0FBQztJQUMzQyxJQUFNQyxXQUFXMUIsT0FBT1UsaUJBQWlCO0lBQ3pDYyxZQUFZRyxJQUFJLEdBQUdEO0lBQ25CVCxTQUFTVyxJQUFJLENBQUNDLFdBQVcsQ0FBQ0w7SUFDMUJNLHFCQUF1QkEsR0FBR0o7QUFDNUI7QUFFQTs7O0NBR0MsR0FDRCxTQUFTSyxjQUFjckMsTUFBaUIsRUFBRTtJQUN4Q2lCO0lBQ0FsQixXQUFXQztJQUNYNkI7SUFDQSxPQUFPUyxRQUFRQyxPQUFPLENBQUNDLHFCQUF3QkEsQ0FBQyxZQUFZQyxJQUFJLGVBQUMsK0JBQVk7Z0NBQ25FQyw2QkFBaUJDLFNBQ2pCQzs7Ozt5Q0FEb0M1QyxPQUFwQzBDLFlBQUFBLHdGQUFvQzFDLE9BQW5CMkMsU0FBQUEsdUNBQVUsSUFBSTtvQkFDdkI7O3dCQUFNLGlSQUFPOzs7b0JBQXJCQyxNQUFRLGNBQVJBO29CQUNSOzt3QkFBT0EsSUFBSUYsWUFBWUM7Ozs7SUFDekI7QUFDRjtBQUVBckMsT0FBTytCLGFBQWEsR0FBR0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4vc3JjL2luZGV4LnRzP2FkYTIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdAb3Blbm1ycy9lc20tc3R5bGVndWlkZS9kaXN0L29wZW5tcnMtZXNtLXN0eWxlZ3VpZGUuY3NzJztcbmltcG9ydCAnaW1wb3J0LW1hcC1vdmVycmlkZXMnO1xuaW1wb3J0ICdAb3Blbm1ycy9lc20tZnJhbWV3b3JrJztcbmltcG9ydCB0eXBlIHsgU3BhQ29uZmlnIH0gZnJvbSAnQG9wZW5tcnMvZXNtLWZyYW1ld29yay9zcmMvaW50ZXJuYWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBQYXRocyhjb25maWc6IFNwYUNvbmZpZykge1xuICBsZXQgZXJyb3IgPSBmYWxzZTtcbiAgaWYgKCFjb25maWcuYXBpVXJsKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICdpbml0aWFsaXplU3BhKCkgd2FzIGNhbGxlZCB3aXRob3V0IHN1cHBseWluZyBhbiBhcGlVcmwuIFRoaXMgbWVhbnMgdGhhdCB0aGUgYXBwbGljYXRpb24gY2Fubm90IGNvbW11bmljYXRlIHdpdGggdGhlIGJhY2tlbmQuJyxcbiAgICApO1xuICAgIGVycm9yID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICghY29uZmlnLnNwYVBhdGgpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJ2luaXRpYWxpemVTcGEoKSB3YXMgY2FsbGVkIHdpdGhvdXQgc3VwcGx5aW5nIGEgc3BhUGF0aC4gVGhpcyBtZWFucyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjYW5ub3QgcHJvcGVybHkgZ2VuZXJhdGUgdXJscy4nLFxuICAgICk7XG4gICAgZXJyb3IgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ09uZSBvciBtb3JlIHJlcXVpcmVkIHByb3BlcnRpZXMgaW4gdGhlIGJhc2ljIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uIHdhcyBtaXNzaW5nIGFuZCB0aGUgYXBwbGljYXRpb24gY2Fubm90IGJlIHJlbmRlcmVkLiBQbGVhc2Ugc2VlIHRoZSBicm93c2VyIGNvbnNvbGUgZm9yIGRldGFpbHMuJyxcbiAgICApO1xuICB9XG5cbiAgd2luZG93Lm9wZW5tcnNCYXNlID0gY29uZmlnLmFwaVVybDtcbiAgd2luZG93LnNwYUJhc2UgPSBjb25maWcuc3BhUGF0aDtcbiAgd2luZG93LnNwYUVudiA9IGNvbmZpZy5lbnYgfHwgJ3Byb2R1Y3Rpb24nO1xuICB3aW5kb3cuc3BhVmVyc2lvbiA9IHByb2Nlc3MuZW52LkJVSUxEX1ZFUlNJT047XG4gIGNvbnN0IHNwYUJhc2VXaXRoU2xhc2ggPSB3aW5kb3cuc3BhQmFzZS5lbmRzV2l0aCgnLycpID8gd2luZG93LnNwYUJhc2UgOiB3aW5kb3cuc3BhQmFzZSArICcvJztcbiAgd2luZG93LmdldE9wZW5tcnNTcGFCYXNlID0gKCkgPT4gc3BhQmFzZVdpdGhTbGFzaDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwVXRpbHMoKSB7XG4gIHdpbmRvdy5jb3B5VGV4dCA9IChzb3VyY2U6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gICAgaWYgKHNlbCkge1xuICAgICAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICByLnNlbGVjdE5vZGUoc291cmNlKTtcbiAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIHNlbC5hZGRSYW5nZShyKTtcbiAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB3aXJlU3BhUGF0aHMoKSB7XG4gIGNvbnN0IGJhc2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYmFzZScpO1xuICBjb25zdCBiYXNlSHJlZiA9IHdpbmRvdy5nZXRPcGVubXJzU3BhQmFzZSgpO1xuICBiYXNlRWxlbWVudC5ocmVmID0gYmFzZUhyZWY7XG4gIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYmFzZUVsZW1lbnQpO1xuICBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyA9IGJhc2VIcmVmO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSBPcGVuTVJTIEZyb250ZW5kIEFwcCBTaGVsbC5cbiAqIEBwYXJhbSBjb25maWcgVGhlIGdsb2JhbCBjb25maWd1cmF0aW9uIHRvIGFwcGx5LlxuICovXG5mdW5jdGlvbiBpbml0aWFsaXplU3BhKGNvbmZpZzogU3BhQ29uZmlnKSB7XG4gIHNldHVwVXRpbHMoKTtcbiAgc2V0dXBQYXRocyhjb25maWcpO1xuICB3aXJlU3BhUGF0aHMoKTtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShfX3dlYnBhY2tfaW5pdF9zaGFyaW5nX18oJ2RlZmF1bHQnKSkudGhlbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjb25maWdVcmxzID0gW10sIG9mZmxpbmUgPSB0cnVlIH0gPSBjb25maWc7XG4gICAgY29uc3QgeyBydW4gfSA9IGF3YWl0IGltcG9ydCgnLi9ydW4nKTtcbiAgICByZXR1cm4gcnVuKGNvbmZpZ1VybHMsIG9mZmxpbmUpO1xuICB9KTtcbn1cblxud2luZG93LmluaXRpYWxpemVTcGEgPSBpbml0aWFsaXplU3BhO1xuIl0sIm5hbWVzIjpbInNldHVwUGF0aHMiLCJjb25maWciLCJlcnJvciIsImFwaVVybCIsImNvbnNvbGUiLCJzcGFQYXRoIiwiRXJyb3IiLCJ3aW5kb3ciLCJvcGVubXJzQmFzZSIsInNwYUJhc2UiLCJzcGFFbnYiLCJlbnYiLCJzcGFWZXJzaW9uIiwicHJvY2VzcyIsIkJVSUxEX1ZFUlNJT04iLCJzcGFCYXNlV2l0aFNsYXNoIiwiZW5kc1dpdGgiLCJnZXRPcGVubXJzU3BhQmFzZSIsInNldHVwVXRpbHMiLCJjb3B5VGV4dCIsInNvdXJjZSIsInNlbCIsImdldFNlbGVjdGlvbiIsInIiLCJkb2N1bWVudCIsImNyZWF0ZVJhbmdlIiwic2VsZWN0Tm9kZSIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwiZXhlY0NvbW1hbmQiLCJ3aXJlU3BhUGF0aHMiLCJiYXNlRWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJiYXNlSHJlZiIsImhyZWYiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJfX3dlYnBhY2tfcHVibGljX3BhdGhfXyIsImluaXRpYWxpemVTcGEiLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9fd2VicGFja19pbml0X3NoYXJpbmdfXyIsInRoZW4iLCJjb25maWdVcmxzIiwib2ZmbGluZSIsInJ1biJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/index.ts\n");
|
|
8188
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ setupPaths: () => (/* binding */ setupPaths),\n/* harmony export */ setupUtils: () => (/* binding */ setupUtils)\n/* harmony export */ });\n/* harmony import */ var _openmrs_esm_styleguide_dist_openmrs_esm_styleguide_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @openmrs/esm-styleguide/dist/openmrs-esm-styleguide.css */ \"../../framework/esm-styleguide/dist/openmrs-esm-styleguide.css\");\n/* harmony import */ var import_map_overrides__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! import-map-overrides */ \"../../../node_modules/import-map-overrides/dist/import-map-overrides.js\");\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @openmrs/esm-framework */ \"webpack/sharing/consume/default/@openmrs/esm-framework/@openmrs/esm-framework\");\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2__);\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, g, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n };\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(_)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\n\n\n\nfunction setupPaths(config) {\n var error = false;\n if (!config.apiUrl) {\n console.error(\"initializeSpa() was called without supplying an apiUrl. This means that the application cannot communicate with the backend.\");\n error = true;\n }\n if (!config.spaPath) {\n console.error(\"initializeSpa() was called without supplying a spaPath. This means that the application cannot properly generate urls.\");\n error = true;\n }\n if (error) {\n throw new Error(\"One or more required properties in the basic configuration of the application was missing and the application cannot be rendered. Please see the browser console for details.\");\n }\n window.openmrsBase = config.apiUrl;\n window.spaBase = config.spaPath;\n window.spaEnv = config.env || \"production\";\n window.spaVersion = \"5.3.3-pre.1256-20231208\";\n var spaBaseWithSlash = window.spaBase.endsWith(\"/\") ? window.spaBase : window.spaBase + \"/\";\n window.getOpenmrsSpaBase = function() {\n return spaBaseWithSlash;\n };\n}\nfunction setupUtils() {\n window.copyText = function(source) {\n var sel = window.getSelection();\n if (sel) {\n var r = document.createRange();\n r.selectNode(source);\n sel.removeAllRanges();\n sel.addRange(r);\n document.execCommand(\"copy\");\n sel.removeAllRanges();\n }\n };\n}\nfunction wireSpaPaths() {\n var baseElement = document.createElement(\"base\");\n var baseHref = window.getOpenmrsSpaBase();\n baseElement.href = baseHref;\n document.head.appendChild(baseElement);\n __webpack_require__.p = baseHref;\n}\n/**\n * Initializes the OpenMRS Frontend App Shell.\n * @param config The global configuration to apply.\n */ function initializeSpa(config) {\n setupUtils();\n setupPaths(config);\n wireSpaPaths();\n return Promise.resolve(__webpack_require__.I(\"default\")).then(/*#__PURE__*/ _async_to_generator(function() {\n var _config_configUrls, configUrls, _config_offline, offline, run;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _config_configUrls = config.configUrls, configUrls = _config_configUrls === void 0 ? [] : _config_configUrls, _config_offline = config.offline, offline = _config_offline === void 0 ? true : _config_offline;\n return [\n 4,\n Promise.all(/*! import() */[__webpack_require__.e(\"vendors-node_modules_i18next-browser-languagedetector_dist_esm_i18nextBrowserLanguageDetector-bec0ef\"), __webpack_require__.e(\"src_run_ts\")]).then(__webpack_require__.bind(__webpack_require__, /*! ./run */ \"./src/run.ts\"))\n ];\n case 1:\n run = _state.sent().run;\n return [\n 2,\n run(configUrls, offline)\n ];\n }\n });\n }));\n}\nwindow.initializeSpa = initializeSpa;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW5kZXgudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFpRTtBQUNuQztBQUNFO0FBR3pCLFNBQVNBLFdBQVdDLE1BQWlCLEVBQUU7SUFDNUMsSUFBSUMsUUFBUSxLQUFLO0lBQ2pCLElBQUksQ0FBQ0QsT0FBT0UsTUFBTSxFQUFFO1FBQ2xCQyxRQUFRRixLQUFLLENBQ1g7UUFFRkEsUUFBUSxJQUFJO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQ0QsT0FBT0ksT0FBTyxFQUFFO1FBQ25CRCxRQUFRRixLQUFLLENBQ1g7UUFFRkEsUUFBUSxJQUFJO0lBQ2QsQ0FBQztJQUVELElBQUlBLE9BQU87UUFDVCxNQUFNLElBQUlJLE1BQ1IsaUxBQ0E7SUFDSixDQUFDO0lBRURDLE9BQU9DLFdBQVcsR0FBR1AsT0FBT0UsTUFBTTtJQUNsQ0ksT0FBT0UsT0FBTyxHQUFHUixPQUFPSSxPQUFPO0lBQy9CRSxPQUFPRyxNQUFNLEdBQUdULE9BQU9VLEdBQUcsSUFBSTtJQUM5QkosT0FBT0ssVUFBVSxHQUFHQyx5QkFBeUI7SUFDN0MsSUFBTUUsbUJBQW1CUixPQUFPRSxPQUFPLENBQUNPLFFBQVEsQ0FBQyxPQUFPVCxPQUFPRSxPQUFPLEdBQUdGLE9BQU9FLE9BQU8sR0FBRyxHQUFHO0lBQzdGRixPQUFPVSxpQkFBaUIsR0FBRztlQUFNRjs7QUFDbkMsQ0FBQztBQUVNLFNBQVNHLGFBQWE7SUFDM0JYLE9BQU9ZLFFBQVEsR0FBRyxTQUFDQyxRQUF3QjtRQUN6QyxJQUFNQyxNQUFNZCxPQUFPZSxZQUFZO1FBRS9CLElBQUlELEtBQUs7WUFDUCxJQUFNRSxJQUFJQyxTQUFTQyxXQUFXO1lBQzlCRixFQUFFRyxVQUFVLENBQUNOO1lBQ2JDLElBQUlNLGVBQWU7WUFDbkJOLElBQUlPLFFBQVEsQ0FBQ0w7WUFDYkMsU0FBU0ssV0FBVyxDQUFDO1lBQ3JCUixJQUFJTSxlQUFlO1FBQ3JCLENBQUM7SUFDSDtBQUNGLENBQUM7QUFFRCxTQUFTRyxlQUFlO0lBQ3RCLElBQU1DLGNBQWNQLFNBQVNRLGFBQWEsQ0FBQztJQUMzQyxJQUFNQyxXQUFXMUIsT0FBT1UsaUJBQWlCO0lBQ3pDYyxZQUFZRyxJQUFJLEdBQUdEO0lBQ25CVCxTQUFTVyxJQUFJLENBQUNDLFdBQVcsQ0FBQ0w7SUFDMUJNLHFCQUF1QkEsR0FBR0o7QUFDNUI7QUFFQTs7O0NBR0MsR0FDRCxTQUFTSyxjQUFjckMsTUFBaUIsRUFBRTtJQUN4Q2lCO0lBQ0FsQixXQUFXQztJQUNYNkI7SUFDQSxPQUFPUyxRQUFRQyxPQUFPLENBQUNDLHFCQUF3QkEsQ0FBQyxZQUFZQyxJQUFJLGVBQUMsK0JBQVk7Z0NBQ25FQyw2QkFBaUJDLFNBQ2pCQzs7Ozt5Q0FEb0M1QyxPQUFwQzBDLFlBQUFBLHdGQUFvQzFDLE9BQW5CMkMsU0FBQUEsdUNBQVUsSUFBSTtvQkFDdkI7O3dCQUFNLGlSQUFPOzs7b0JBQXJCQyxNQUFRLGNBQVJBO29CQUNSOzt3QkFBT0EsSUFBSUYsWUFBWUM7Ozs7SUFDekI7QUFDRjtBQUVBckMsT0FBTytCLGFBQWEsR0FBR0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4vc3JjL2luZGV4LnRzP2FkYTIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdAb3Blbm1ycy9lc20tc3R5bGVndWlkZS9kaXN0L29wZW5tcnMtZXNtLXN0eWxlZ3VpZGUuY3NzJztcbmltcG9ydCAnaW1wb3J0LW1hcC1vdmVycmlkZXMnO1xuaW1wb3J0ICdAb3Blbm1ycy9lc20tZnJhbWV3b3JrJztcbmltcG9ydCB0eXBlIHsgU3BhQ29uZmlnIH0gZnJvbSAnQG9wZW5tcnMvZXNtLWZyYW1ld29yay9zcmMvaW50ZXJuYWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBQYXRocyhjb25maWc6IFNwYUNvbmZpZykge1xuICBsZXQgZXJyb3IgPSBmYWxzZTtcbiAgaWYgKCFjb25maWcuYXBpVXJsKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICdpbml0aWFsaXplU3BhKCkgd2FzIGNhbGxlZCB3aXRob3V0IHN1cHBseWluZyBhbiBhcGlVcmwuIFRoaXMgbWVhbnMgdGhhdCB0aGUgYXBwbGljYXRpb24gY2Fubm90IGNvbW11bmljYXRlIHdpdGggdGhlIGJhY2tlbmQuJyxcbiAgICApO1xuICAgIGVycm9yID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICghY29uZmlnLnNwYVBhdGgpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJ2luaXRpYWxpemVTcGEoKSB3YXMgY2FsbGVkIHdpdGhvdXQgc3VwcGx5aW5nIGEgc3BhUGF0aC4gVGhpcyBtZWFucyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjYW5ub3QgcHJvcGVybHkgZ2VuZXJhdGUgdXJscy4nLFxuICAgICk7XG4gICAgZXJyb3IgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ09uZSBvciBtb3JlIHJlcXVpcmVkIHByb3BlcnRpZXMgaW4gdGhlIGJhc2ljIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uIHdhcyBtaXNzaW5nIGFuZCB0aGUgYXBwbGljYXRpb24gY2Fubm90IGJlIHJlbmRlcmVkLiBQbGVhc2Ugc2VlIHRoZSBicm93c2VyIGNvbnNvbGUgZm9yIGRldGFpbHMuJyxcbiAgICApO1xuICB9XG5cbiAgd2luZG93Lm9wZW5tcnNCYXNlID0gY29uZmlnLmFwaVVybDtcbiAgd2luZG93LnNwYUJhc2UgPSBjb25maWcuc3BhUGF0aDtcbiAgd2luZG93LnNwYUVudiA9IGNvbmZpZy5lbnYgfHwgJ3Byb2R1Y3Rpb24nO1xuICB3aW5kb3cuc3BhVmVyc2lvbiA9IHByb2Nlc3MuZW52LkJVSUxEX1ZFUlNJT047XG4gIGNvbnN0IHNwYUJhc2VXaXRoU2xhc2ggPSB3aW5kb3cuc3BhQmFzZS5lbmRzV2l0aCgnLycpID8gd2luZG93LnNwYUJhc2UgOiB3aW5kb3cuc3BhQmFzZSArICcvJztcbiAgd2luZG93LmdldE9wZW5tcnNTcGFCYXNlID0gKCkgPT4gc3BhQmFzZVdpdGhTbGFzaDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwVXRpbHMoKSB7XG4gIHdpbmRvdy5jb3B5VGV4dCA9IChzb3VyY2U6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gICAgaWYgKHNlbCkge1xuICAgICAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICByLnNlbGVjdE5vZGUoc291cmNlKTtcbiAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIHNlbC5hZGRSYW5nZShyKTtcbiAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB3aXJlU3BhUGF0aHMoKSB7XG4gIGNvbnN0IGJhc2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYmFzZScpO1xuICBjb25zdCBiYXNlSHJlZiA9IHdpbmRvdy5nZXRPcGVubXJzU3BhQmFzZSgpO1xuICBiYXNlRWxlbWVudC5ocmVmID0gYmFzZUhyZWY7XG4gIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYmFzZUVsZW1lbnQpO1xuICBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyA9IGJhc2VIcmVmO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSBPcGVuTVJTIEZyb250ZW5kIEFwcCBTaGVsbC5cbiAqIEBwYXJhbSBjb25maWcgVGhlIGdsb2JhbCBjb25maWd1cmF0aW9uIHRvIGFwcGx5LlxuICovXG5mdW5jdGlvbiBpbml0aWFsaXplU3BhKGNvbmZpZzogU3BhQ29uZmlnKSB7XG4gIHNldHVwVXRpbHMoKTtcbiAgc2V0dXBQYXRocyhjb25maWcpO1xuICB3aXJlU3BhUGF0aHMoKTtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShfX3dlYnBhY2tfaW5pdF9zaGFyaW5nX18oJ2RlZmF1bHQnKSkudGhlbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjb25maWdVcmxzID0gW10sIG9mZmxpbmUgPSB0cnVlIH0gPSBjb25maWc7XG4gICAgY29uc3QgeyBydW4gfSA9IGF3YWl0IGltcG9ydCgnLi9ydW4nKTtcbiAgICByZXR1cm4gcnVuKGNvbmZpZ1VybHMsIG9mZmxpbmUpO1xuICB9KTtcbn1cblxud2luZG93LmluaXRpYWxpemVTcGEgPSBpbml0aWFsaXplU3BhO1xuIl0sIm5hbWVzIjpbInNldHVwUGF0aHMiLCJjb25maWciLCJlcnJvciIsImFwaVVybCIsImNvbnNvbGUiLCJzcGFQYXRoIiwiRXJyb3IiLCJ3aW5kb3ciLCJvcGVubXJzQmFzZSIsInNwYUJhc2UiLCJzcGFFbnYiLCJlbnYiLCJzcGFWZXJzaW9uIiwicHJvY2VzcyIsIkJVSUxEX1ZFUlNJT04iLCJzcGFCYXNlV2l0aFNsYXNoIiwiZW5kc1dpdGgiLCJnZXRPcGVubXJzU3BhQmFzZSIsInNldHVwVXRpbHMiLCJjb3B5VGV4dCIsInNvdXJjZSIsInNlbCIsImdldFNlbGVjdGlvbiIsInIiLCJkb2N1bWVudCIsImNyZWF0ZVJhbmdlIiwic2VsZWN0Tm9kZSIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwiZXhlY0NvbW1hbmQiLCJ3aXJlU3BhUGF0aHMiLCJiYXNlRWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJiYXNlSHJlZiIsImhyZWYiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJfX3dlYnBhY2tfcHVibGljX3BhdGhfXyIsImluaXRpYWxpemVTcGEiLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9fd2VicGFja19pbml0X3NoYXJpbmdfXyIsInRoZW4iLCJjb25maWdVcmxzIiwib2ZmbGluZSIsInJ1biJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/index.ts\n");
|
|
8189
8189
|
|
|
8190
8190
|
/***/ }),
|
|
8191
8191
|
|
|
@@ -12685,8 +12685,8 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
12685
12685
|
/******/ var promises = [];
|
|
12686
12686
|
/******/ switch(name) {
|
|
12687
12687
|
/******/ case "default": {
|
|
12688
|
-
/******/ register("@openmrs/esm-framework/src/internal", "5.3.3-pre.
|
|
12689
|
-
/******/ register("@openmrs/esm-framework", "5.3.3-pre.
|
|
12688
|
+
/******/ register("@openmrs/esm-framework/src/internal", "5.3.3-pre.1256", () => (() => (__webpack_require__(/*! ../../framework/esm-framework/src/internal.ts */ "../../framework/esm-framework/src/internal.ts"))), 1);
|
|
12689
|
+
/******/ register("@openmrs/esm-framework", "5.3.3-pre.1256", () => (() => (__webpack_require__(/*! ../../framework/esm-framework/src/index.ts */ "../../framework/esm-framework/src/index.ts"))), 1);
|
|
12690
12690
|
/******/ register("dayjs", "1.11.5", () => (() => (__webpack_require__(/*! ../../../node_modules/dayjs/dayjs.min.js */ "../../../node_modules/dayjs/dayjs.min.js"))), 1);
|
|
12691
12691
|
/******/ register("i18next", "21.10.0", () => (() => (__webpack_require__(/*! ../../../node_modules/i18next/dist/esm/i18next.js */ "../../../node_modules/i18next/dist/esm/i18next.js"))), 1);
|
|
12692
12692
|
/******/ register("react-dom", "18.2.0", () => (() => (__webpack_require__(/*! ../../../node_modules/react-dom/index.js */ "../../../node_modules/react-dom/index.js"))), 1);
|