aboutsummaryrefslogtreecommitdiffstats
path: root/settings/js/main.js
diff options
context:
space:
mode:
Diffstat (limited to 'settings/js/main.js')
-rw-r--r--settings/js/main.js2
1 files changed, 1 insertions, 1 deletions
diff --git a/settings/js/main.js b/settings/js/main.js
index 5402d540da6..0033ed9e143 100644
--- a/settings/js/main.js
+++ b/settings/js/main.js
@@ -127,7 +127,7 @@ eval("//\n//\n//\n//\n\n/* harmony default export */ __webpack_exports__[\"a\"]
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
-eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_appNavigation__ = __webpack_require__(32);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_userList__ = __webpack_require__(39);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_vue_localstorage__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_vue_localstorage___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_vue_localstorage__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_vue_multiselect__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_vue_multiselect___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_vue_multiselect__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__store_api__ = __webpack_require__(5);\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n__WEBPACK_IMPORTED_MODULE_2_vue__[\"a\" /* default */].use(__WEBPACK_IMPORTED_MODULE_3_vue_localstorage___default.a);\n__WEBPACK_IMPORTED_MODULE_2_vue__[\"a\" /* default */].use(__WEBPACK_IMPORTED_MODULE_3_vue_localstorage___default.a);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n\tname: 'Users',\n\tprops: ['selectedGroup'],\n\tcomponents: {\n\t\tappNavigation: __WEBPACK_IMPORTED_MODULE_0__components_appNavigation__[\"a\" /* default */],\n\t\tuserList: __WEBPACK_IMPORTED_MODULE_1__components_userList__[\"a\" /* default */],\n\t\tMultiselect: __WEBPACK_IMPORTED_MODULE_4_vue_multiselect___default.a\n\t},\n\tbeforeMount: function beforeMount() {\n\t\tthis.$store.commit('initGroups', {\n\t\t\tgroups: this.$store.getters.getServerData.groups,\n\t\t\torderBy: this.$store.getters.getServerData.sortGroups,\n\t\t\tuserCount: this.$store.getters.getServerData.userCount\n\t\t});\n\t\tthis.$store.dispatch('getPasswordPolicyMinLength');\n\t},\n\tdata: function data() {\n\t\treturn {\n\t\t\t// default quota is unlimited\n\t\t\tunlimitedQuota: { id: 'default', label: t('settings', 'Unlimited') },\n\t\t\t// temporary value used for multiselect change\n\t\t\tselectedQuota: false,\n\t\t\tshowConfig: {\n\t\t\t\tshowStoragePath: false,\n\t\t\t\tshowUserBackend: false,\n\t\t\t\tshowLastLogin: false,\n\t\t\t\tshowNewUserForm: false,\n\t\t\t\tshowLanguages: false\n\t\t\t}\n\t\t};\n\t},\n\n\tmethods: {\n\t\tgetLocalstorage: function getLocalstorage(key) {\n\t\t\t// force initialization\n\t\t\tthis.showConfig[key] = this.$localStorage.get(key) === 'true';\n\t\t\treturn this.showConfig[key];\n\t\t},\n\t\tsetLocalStorage: function setLocalStorage(key, status) {\n\t\t\tthis.showConfig[key] = status;\n\t\t\tthis.$localStorage.set(key, status);\n\t\t\treturn status;\n\t\t},\n\t\tremoveGroup: function removeGroup(groupid) {\n\t\t\tvar self = this;\n\t\t\t// TODO migrate to a vue js confirm dialog component \n\t\t\tOC.dialogs.confirm(t('settings', 'You are about to remove the group {group}. The users will NOT be deleted.', { group: groupid }), t('settings', 'Please confirm the group removal '), function (success) {\n\t\t\t\tif (success) {\n\t\t\t\t\tself.$store.dispatch('removeGroup', groupid);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\n\t\t/**\n * Dispatch default quota set request\n * \n * @param {string|Object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n * @returns {string}\n */\n\t\tsetDefaultQuota: function setDefaultQuota() {\n\t\t\tvar _this = this;\n\n\t\t\tvar quota = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'none';\n\n\t\t\tthis.$store.dispatch('setAppConfig', {\n\t\t\t\tapp: 'files',\n\t\t\t\tkey: 'default_quota',\n\t\t\t\t// ensure we only send the preset id\n\t\t\t\tvalue: quota.id ? quota.id : quota\n\t\t\t}).then(function () {\n\t\t\t\tif ((typeof quota === 'undefined' ? 'undefined' : _typeof(quota)) !== 'object') {\n\t\t\t\t\tquota = { id: quota, label: quota };\n\t\t\t\t}\n\t\t\t\t_this.defaultQuota = quota;\n\t\t\t});\n\t\t},\n\n\n\t\t/**\n * Validate quota string to make sure it's a valid human file size\n * \n * @param {string} quota Quota in readable format '5 GB'\n * @returns {Promise|boolean}\n */\n\t\tvalidateQuota: function validateQuota(quota) {\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tvar validQuota = OC.Util.computerFileSize(quota);\n\t\t\tif (validQuota === 0) {\n\t\t\t\treturn this.setDefaultQuota('none');\n\t\t\t} else if (validQuota !== null) {\n\t\t\t\t// unify format output\n\t\t\t\treturn this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n\t\t\t}\n\t\t\t// if no valid do not change\n\t\t\treturn false;\n\t\t}\n\t},\n\tcomputed: {\n\t\tusers: function users() {\n\t\t\treturn this.$store.getters.getUsers;\n\t\t},\n\t\tloading: function loading() {\n\t\t\treturn Object.keys(this.users).length === 0;\n\t\t},\n\t\tusersOffset: function usersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset;\n\t\t},\n\t\tusersLimit: function usersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit;\n\t\t},\n\n\n\t\t// Local settings\n\t\tshowLanguages: {\n\t\t\tget: function get() {\n\t\t\t\treturn this.getLocalstorage('showLanguages');\n\t\t\t},\n\t\t\tset: function set(status) {\n\t\t\t\tthis.setLocalStorage('showLanguages', status);\n\t\t\t}\n\t\t},\n\t\tshowLastLogin: {\n\t\t\tget: function get() {\n\t\t\t\treturn this.getLocalstorage('showLastLogin');\n\t\t\t},\n\t\t\tset: function set(status) {\n\t\t\t\tthis.setLocalStorage('showLastLogin', status);\n\t\t\t}\n\t\t},\n\t\tshowUserBackend: {\n\t\t\tget: function get() {\n\t\t\t\treturn this.getLocalstorage('showUserBackend');\n\t\t\t},\n\t\t\tset: function set(status) {\n\t\t\t\tthis.setLocalStorage('showUserBackend', status);\n\t\t\t}\n\t\t},\n\t\tshowStoragePath: {\n\t\t\tget: function get() {\n\t\t\t\treturn this.getLocalstorage('showStoragePath');\n\t\t\t},\n\t\t\tset: function set(status) {\n\t\t\t\tthis.setLocalStorage('showStoragePath', status);\n\t\t\t}\n\t\t},\n\n\t\tuserCount: function userCount() {\n\t\t\treturn this.$store.getters.getUserCount;\n\t\t},\n\t\tsettings: function settings() {\n\t\t\treturn this.$store.getters.getServerData;\n\t\t},\n\n\n\t\t// default quota\n\t\tquotaOptions: function quotaOptions() {\n\t\t\t// convert the preset array into objects\n\t\t\tvar quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {\n\t\t\t\treturn acc.concat({ id: cur, label: cur });\n\t\t\t}, []);\n\t\t\t// add default presets\n\t\t\tquotaPreset.unshift(this.unlimitedQuota);\n\t\t\treturn quotaPreset;\n\t\t},\n\n\t\t// mapping saved values to objects\n\t\tdefaultQuota: {\n\t\t\tget: function get() {\n\t\t\t\tif (this.selectedQuota !== false) {\n\t\t\t\t\treturn this.selectedQuota;\n\t\t\t\t}\n\t\t\t\tif (OC.Util.computerFileSize(this.settings.defaultQuota) > 0) {\n\t\t\t\t\t// if value is valid, let's map the quotaOptions or return custom quota\n\t\t\t\t\treturn { id: this.settings.defaultQuota, label: this.settings.defaultQuota };\n\t\t\t\t}\n\t\t\t\treturn this.unlimitedQuota; // unlimited\n\t\t\t},\n\t\t\tset: function set(quota) {\n\t\t\t\tthis.selectedQuota = quota;\n\t\t\t}\n\n\t\t},\n\n\t\t// BUILD APP NAVIGATION MENU OBJECT\n\t\tmenu: function menu() {\n\t\t\tvar _this2 = this;\n\n\t\t\t// Data provided php side\n\t\t\tvar groups = this.$store.getters.getGroups;\n\t\t\tgroups = Array.isArray(groups) ? groups : [];\n\n\t\t\t// Map groups\n\t\t\tgroups = groups.map(function (group) {\n\t\t\t\tvar item = {};\n\t\t\t\titem.id = group.id.replace(' ', '_');\n\t\t\t\titem.classes = []; // empty classes, active will be set later\n\t\t\t\titem.router = { // router link to\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tparams: { selectedGroup: group.id }\n\t\t\t\t};\n\t\t\t\titem.text = group.name; // group name\n\t\t\t\titem.utils = { counter: group.usercount }; // users count\n\n\t\t\t\tif (item.id !== 'admin' && item.id !== 'disabled') {\n\t\t\t\t\t// add delete button on real groups\n\t\t\t\t\tvar self = _this2;\n\t\t\t\t\titem.utils.actions = [{\n\t\t\t\t\t\ticon: 'icon-delete',\n\t\t\t\t\t\ttext: t('settings', 'Remove group'),\n\t\t\t\t\t\taction: function action() {\n\t\t\t\t\t\t\tself.removeGroup(group.id);\n\t\t\t\t\t\t}\n\t\t\t\t\t}];\n\t\t\t\t};\n\t\t\t\treturn item;\n\t\t\t});\n\n\t\t\t// Adjust data\n\t\t\tvar adminGroup = groups.find(function (group) {\n\t\t\t\treturn group.id == 'admin';\n\t\t\t});\n\t\t\tvar disabledGroupIndex = groups.findIndex(function (group) {\n\t\t\t\treturn group.id == 'disabled';\n\t\t\t});\n\t\t\tvar disabledGroup = groups[disabledGroupIndex];\n\t\t\tif (adminGroup && adminGroup.text) {\n\t\t\t\tadminGroup.text = t('settings', 'Admins'); // rename admin group\n\t\t\t}\n\t\t\tif (disabledGroup && disabledGroup.text) {\n\t\t\t\tdisabledGroup.text = t('settings', 'Disabled users'); // rename disabled group\n\t\t\t\tif (disabledGroup.utils.counter === 0) {\n\t\t\t\t\tgroups.splice(disabledGroupIndex, 1); // remove disabled if empty\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add everyone group\n\t\t\tgroups.unshift({\n\t\t\t\tid: 'everyone',\n\t\t\t\tclasses: [],\n\t\t\t\trouter: { name: 'users' },\n\t\t\t\ttext: t('settings', 'Everyone'),\n\t\t\t\tutils: { counter: this.userCount }\n\t\t\t});\n\n\t\t\t// Set current group as active\n\t\t\tvar activeGroup = groups.findIndex(function (group) {\n\t\t\t\treturn group.id === _this2.selectedGroup;\n\t\t\t});\n\t\t\tif (activeGroup >= 0) {\n\t\t\t\tgroups[activeGroup].classes.push('active');\n\t\t\t} else {\n\t\t\t\tgroups[0].classes.push('active');\n\t\t\t}\n\n\t\t\t// Return\n\t\t\treturn {\n\t\t\t\tid: 'usergrouplist',\n\t\t\t\tnew: {\n\t\t\t\t\tid: 'new-user-button',\n\t\t\t\t\ttext: t('settings', 'New user'),\n\t\t\t\t\ticon: 'icon-add',\n\t\t\t\t\taction: function action() {\n\t\t\t\t\t\treturn _this2.showConfig.showNewUserForm = !_this2.showConfig.showNewUserForm;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\titems: groups\n\t\t\t};\n\t\t}\n\t}\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL3ZpZXdzL1VzZXJzLnZ1ZT8wNzZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtPQUVBO1NBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBSkE7cUNBS0E7OzZDQUVBOzhDQUNBO2dEQUVBO0FBSkE7dUJBS0E7QUFDQTt1QkFDQTs7QUFFQTt5REFDQTtBQUNBO2tCQUNBOztxQkFFQTtxQkFDQTttQkFDQTtxQkFDQTttQkFHQTtBQVBBO0FBTEE7QUFhQTs7O2lEQUVBO0FBQ0E7MERBQ0E7MEJBQ0E7QUFDQTt5REFDQTswQkFDQTsrQkFDQTtVQUNBO0FBQ0E7NkNBQ0E7Y0FDQTtBQUNBO2NBQ0EsNEdBQ0EsMEJBQ0EseURBQ0E7aUJBQ0E7eUNBQ0E7QUFDQTtBQUVBO0FBRUE7OztBQU1BOzs7Ozs7O0FBQ0E7Ozs7O1NBRUE7U0FDQTtBQUNBO2lDQUNBO0FBSkEsdUJBS0E7b0ZBQ0E7aUNBQ0E7QUFDQTt5QkFDQTtBQUNBO0FBRUE7OztBQU1BOzs7Ozs7K0NBQ0E7QUFDQTs2Q0FDQTt5QkFDQTtnQ0FDQTttQ0FDQTtBQUNBOytFQUNBO0FBQ0E7QUFDQTtVQUNBO0FBRUE7QUEvREE7OzBCQWlFQTs4QkFDQTtBQUNBOzhCQUNBOzZDQUNBO0FBQ0E7c0NBQ0E7OEJBQ0E7QUFDQTtvQ0FDQTs4QkFDQTtBQUVBOzs7QUFDQTs7OztBQUVBOzZCQUNBOzBDQUNBO0FBRUE7QUFMQTs7OztBQU9BOzZCQUNBOzBDQUNBO0FBRUE7QUFMQTs7OztBQU9BOzZCQUNBOzRDQUNBO0FBRUE7QUFMQTs7OztBQU9BOzZCQUNBOzRDQUNBO0FBR0E7QUFOQTs7a0NBT0E7OEJBQ0E7QUFDQTtnQ0FDQTs4QkFDQTtBQUVBOzs7QUFDQTt3Q0FDQTtBQUNBOzs7TUFDQTtBQUNBOzRCQUNBO1VBQ0E7QUFDQTs7QUFDQTs7dUJBRUE7c0NBQ0E7aUJBQ0E7QUFDQTtrRUFDQTtBQUNBO21FQUNBO0FBQ0E7Z0NBQ0E7QUFDQTs0QkFDQTt5QkFDQTtBQUlBOztBQWhCQTs7QUFpQkE7O0FBQ0E7O0FBQ0E7b0NBQ0E7NkNBRUE7O0FBQ0E7O2VBRUE7b0NBQ0E7c0JBRkEsQ0FHQTtvQkFDQTtXQUNBO29DQUVBOzs0QkFDQTsrQ0FFQTs7dURBQ0E7QUFDQTtTQUNBOztZQUVBOzBCQUNBOzs7QUFFQTtBQUpBO0FBS0E7V0FDQTtBQUVBOztBQUNBOzt1QkFDQTs7O3VCQUNBOzs4QkFDQTtzQ0FDQTsrQ0FDQTtBQUNBOzRDQUNBOzBEQUNBOzswQ0FDQSxDQUNBO0FBQ0E7QUFFQTs7QUFDQTs7UUFFQTthQUNBO29CQUNBO3dCQUNBOzJCQUdBO0FBUEE7O0FBUUE7OytCQUNBOzt5QkFDQTtxQ0FDQTtVQUNBOzJCQUNBO0FBRUE7O0FBQ0E7O1FBRUE7O1NBRUE7eUJBQ0E7V0FDQTs7b0VBRUE7O0FBTEE7V0FPQTtBQVRBO0FBV0E7QUFsSkE7QUEvRkEiLCJmaWxlIjoiOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cblx0PGRpdiBpZD1cImFwcFwiPlxuXHRcdDxhcHAtbmF2aWdhdGlvbiA6bWVudT1cIm1lbnVcIj5cblx0XHRcdDx0ZW1wbGF0ZSBzbG90PVwic2V0dGluZ3MtY29udGVudFwiPlxuXHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdDxwPnt7dCgnc2V0dGluZ3MnLCAnRGVmYXVsdCBxdW90YSA6Jyl9fTwvcD5cblx0XHRcdFx0XHQ8bXVsdGlzZWxlY3QgOnZhbHVlPVwiZGVmYXVsdFF1b3RhXCIgOm9wdGlvbnM9XCJxdW90YU9wdGlvbnNcIlxuXHRcdFx0XHRcdFx0XHRcdHRhZy1wbGFjZWhvbGRlcj1cImNyZWF0ZVwiIDpwbGFjZWhvbGRlcj1cInQoJ3NldHRpbmdzJywgJ1NlbGVjdCBkZWZhdWx0IHF1b3RhJylcIlxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsPVwibGFiZWxcIiB0cmFjay1ieT1cImlkXCIgY2xhc3M9XCJtdWx0aXNlbGVjdC12dWVcIlxuXHRcdFx0XHRcdFx0XHRcdDphbGxvd0VtcHR5PVwiZmFsc2VcIiA6dGFnZ2FibGU9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdFx0XHRAdGFnPVwidmFsaWRhdGVRdW90YVwiIEBpbnB1dD1cInNldERlZmF1bHRRdW90YVwiPlxuXHRcdFx0XHRcdDwvbXVsdGlzZWxlY3Q+XG5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwic2hvd0xhbmd1YWdlc1wiIGNsYXNzPVwiY2hlY2tib3hcIlxuXHRcdFx0XHRcdFx0ICAgOmNoZWNrZWQ9XCJzaG93TGFuZ3VhZ2VzXCIgdi1tb2RlbD1cInNob3dMYW5ndWFnZXNcIj5cblx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwic2hvd0xhbmd1YWdlc1wiPnt7dCgnc2V0dGluZ3MnLCAnU2hvdyBMYW5ndWFnZXMnKX19PC9sYWJlbD5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwic2hvd0xhc3RMb2dpblwiIGNsYXNzPVwiY2hlY2tib3hcIlxuXHRcdFx0XHRcdFx0ICAgOmNoZWNrZWQ9XCJzaG93TGFzdExvZ2luXCIgdi1tb2RlbD1cInNob3dMYXN0TG9naW5cIj5cblx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwic2hvd0xhc3RMb2dpblwiPnt7dCgnc2V0dGluZ3MnLCAnU2hvdyBsYXN0IGxvZ2luJyl9fTwvbGFiZWw+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInNob3dVc2VyQmFja2VuZFwiIGNsYXNzPVwiY2hlY2tib3hcIlxuXHRcdFx0XHRcdFx0ICAgOmNoZWNrZWQ9XCJzaG93VXNlckJhY2tlbmRcIiB2LW1vZGVsPVwic2hvd1VzZXJCYWNrZW5kXCI+XG5cdFx0XHRcdFx0PGxhYmVsIGZvcj1cInNob3dVc2VyQmFja2VuZFwiPnt7dCgnc2V0dGluZ3MnLCAnU2hvdyB1c2VyIGJhY2tlbmQnKX19PC9sYWJlbD5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwic2hvd1N0b3JhZ2VQYXRoXCIgY2xhc3M9XCJjaGVja2JveFwiXG5cdFx0XHRcdFx0XHQgICA6Y2hlY2tlZD1cInNob3dTdG9yYWdlUGF0aFwiIHYtbW9kZWw9XCJzaG93U3RvcmFnZVBhdGhcIj5cblx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwic2hvd1N0b3JhZ2VQYXRoXCI+e3t0KCdzZXR0aW5ncycsICdTaG93IHN0b3JhZ2UgcGF0aCcpfX08L2xhYmVsPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvdGVtcGxhdGU+XG5cdFx0PC9hcHAtbmF2aWdhdGlvbj5cblx0XHQ8dXNlci1saXN0IDp1c2Vycz1cInVzZXJzXCIgOnNob3dDb25maWc9XCJzaG93Q29uZmlnXCIgOnNlbGVjdGVkR3JvdXA9XCJzZWxlY3RlZEdyb3VwXCIgLz5cblx0PC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IGFwcE5hdmlnYXRpb24gZnJvbSAnLi4vY29tcG9uZW50cy9hcHBOYXZpZ2F0aW9uJztcbmltcG9ydCB1c2VyTGlzdCBmcm9tICcuLi9jb21wb25lbnRzL3VzZXJMaXN0JztcbmltcG9ydCBWdWUgZnJvbSAndnVlJztcbmltcG9ydCBWdWVMb2NhbFN0b3JhZ2UgZnJvbSAndnVlLWxvY2Fsc3RvcmFnZSdcbmltcG9ydCBNdWx0aXNlbGVjdCBmcm9tICd2dWUtbXVsdGlzZWxlY3QnO1xuaW1wb3J0IGFwaSBmcm9tICcuLi9zdG9yZS9hcGknO1xuXG5WdWUudXNlKFZ1ZUxvY2FsU3RvcmFnZSlcblZ1ZS51c2UoVnVlTG9jYWxTdG9yYWdlKVxuXG5leHBvcnQgZGVmYXVsdCB7XG5cdG5hbWU6ICdVc2VycycsXG5cdHByb3BzOiBbJ3NlbGVjdGVkR3JvdXAnXSxcblx0Y29tcG9uZW50czoge1xuXHRcdGFwcE5hdmlnYXRpb24sXG5cdFx0dXNlckxpc3QsXG5cdFx0TXVsdGlzZWxlY3Rcblx0fSxcblx0YmVmb3JlTW91bnQoKSB7XG5cdFx0dGhpcy4kc3RvcmUuY29tbWl0KCdpbml0R3JvdXBzJywge1xuXHRcdFx0Z3JvdXBzOiB0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFNlcnZlckRhdGEuZ3JvdXBzLFxuXHRcdFx0b3JkZXJCeTogdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTZXJ2ZXJEYXRhLnNvcnRHcm91cHMsXG5cdFx0XHR1c2VyQ291bnQ6IHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0U2VydmVyRGF0YS51c2VyQ291bnRcblx0XHR9KTtcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0UGFzc3dvcmRQb2xpY3lNaW5MZW5ndGgnKTtcblx0fSxcblx0ZGF0YSgpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Ly8gZGVmYXVsdCBxdW90YSBpcyB1bmxpbWl0ZWRcblx0XHRcdHVubGltaXRlZFF1b3RhOiB7aWQ6J2RlZmF1bHQnLCBsYWJlbDp0KCdzZXR0aW5ncycsICdVbmxpbWl0ZWQnKX0sXG5cdFx0XHQvLyB0ZW1wb3JhcnkgdmFsdWUgdXNlZCBmb3IgbXVsdGlzZWxlY3QgY2hhbmdlXG5cdFx0XHRzZWxlY3RlZFF1b3RhOiBmYWxzZSxcblx0XHRcdHNob3dDb25maWc6IHtcblx0XHRcdFx0c2hvd1N0b3JhZ2VQYXRoOiBmYWxzZSxcblx0XHRcdFx0c2hvd1VzZXJCYWNrZW5kOiBmYWxzZSxcblx0XHRcdFx0c2hvd0xhc3RMb2dpbjogZmFsc2UsXG5cdFx0XHRcdHNob3dOZXdVc2VyRm9ybTogZmFsc2UsXG5cdFx0XHRcdHNob3dMYW5ndWFnZXM6IGZhbHNlXG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRtZXRob2RzOiB7XG5cdFx0Z2V0TG9jYWxzdG9yYWdlKGtleSkge1xuXHRcdFx0Ly8gZm9yY2UgaW5pdGlhbGl6YXRpb25cblx0XHRcdHRoaXMuc2hvd0NvbmZpZ1trZXldID0gdGhpcy4kbG9jYWxTdG9yYWdlLmdldChrZXkpID09PSAndHJ1ZSc7XG5cdFx0XHRyZXR1cm4gdGhpcy5zaG93Q29uZmlnW2tleV07XG5cdFx0fSxcblx0XHRzZXRMb2NhbFN0b3JhZ2Uoa2V5LCBzdGF0dXMpIHtcblx0XHRcdHRoaXMuc2hvd0NvbmZpZ1trZXldID0gc3RhdHVzO1xuXHRcdFx0dGhpcy4kbG9jYWxTdG9yYWdlLnNldChrZXksIHN0YXR1cyk7XG5cdFx0XHRyZXR1cm4gc3RhdHVzO1xuXHRcdH0sXG5cdFx0cmVtb3ZlR3JvdXAoZ3JvdXBpZCkge1xuXHRcdFx0bGV0IHNlbGYgPSB0aGlzO1xuXHRcdFx0Ly8gVE9ETyBtaWdyYXRlIHRvIGEgdnVlIGpzIGNvbmZpcm0gZGlhbG9nIGNvbXBvbmVudCBcblx0XHRcdE9DLmRpYWxvZ3MuY29uZmlybShcblx0XHRcdFx0dCgnc2V0dGluZ3MnLCAnWW91IGFyZSBhYm91dCB0byByZW1vdmUgdGhlIGdyb3VwIHtncm91cH0uIFRoZSB1c2VycyB3aWxsIE5PVCBiZSBkZWxldGVkLicsIHtncm91cDogZ3JvdXBpZH0pLFxuXHRcdFx0XHR0KCdzZXR0aW5ncycsJ1BsZWFzZSBjb25maXJtIHRoZSBncm91cCByZW1vdmFsICcpLFxuXHRcdFx0XHRmdW5jdGlvbiAoc3VjY2Vzcykge1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzKSB7XG5cdFx0XHRcdFx0XHRzZWxmLiRzdG9yZS5kaXNwYXRjaCgncmVtb3ZlR3JvdXAnLCBncm91cGlkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIERpc3BhdGNoIGRlZmF1bHQgcXVvdGEgc2V0IHJlcXVlc3Rcblx0XHQgKiBcblx0XHQgKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IHF1b3RhIFF1b3RhIGluIHJlYWRhYmxlIGZvcm1hdCAnNSBHQicgb3IgT2JqZWN0IHtpZDogJzUgR0InLCBsYWJlbDogJzVHQid9XG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cblx0XHQgKi9cblx0XHRzZXREZWZhdWx0UXVvdGEocXVvdGEgPSAnbm9uZScpIHtcblx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdzZXRBcHBDb25maWcnLCB7XG5cdFx0XHRcdGFwcDogJ2ZpbGVzJyxcblx0XHRcdFx0a2V5OiAnZGVmYXVsdF9xdW90YScsXG5cdFx0XHRcdC8vIGVuc3VyZSB3ZSBvbmx5IHNlbmQgdGhlIHByZXNldCBpZFxuXHRcdFx0XHR2YWx1ZTogcXVvdGEuaWQgPyBxdW90YS5pZCA6IHF1b3RhXG5cdFx0XHR9KS50aGVuKCgpID0+IHtcblx0XHRcdFx0aWYgKHR5cGVvZiBxdW90YSAhPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHRxdW90YSA9IHtpZDogcXVvdGEsIGxhYmVsOiBxdW90YX07XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5kZWZhdWx0UXVvdGEgPSBxdW90YTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBWYWxpZGF0ZSBxdW90YSBzdHJpbmcgdG8gbWFrZSBzdXJlIGl0J3MgYSB2YWxpZCBodW1hbiBmaWxlIHNpemVcblx0XHQgKiBcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gcXVvdGEgUXVvdGEgaW4gcmVhZGFibGUgZm9ybWF0ICc1IEdCJ1xuXHRcdCAqIEByZXR1cm5zIHtQcm9taXNlfGJvb2xlYW59XG5cdFx0ICovXG5cdFx0dmFsaWRhdGVRdW90YShxdW90YSkge1xuXHRcdFx0Ly8gb25seSB1c2VkIGZvciBuZXcgcHJlc2V0cyBzZW50IHRocm91Z2ggQFRhZ1xuXHRcdFx0bGV0IHZhbGlkUXVvdGEgPSBPQy5VdGlsLmNvbXB1dGVyRmlsZVNpemUocXVvdGEpO1xuXHRcdFx0aWYgKHZhbGlkUXVvdGEgPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0RGVmYXVsdFF1b3RhKCdub25lJyk7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbGlkUXVvdGEgIT09IG51bGwpIHtcblx0XHRcdFx0Ly8gdW5pZnkgZm9ybWF0IG91dHB1dFxuXHRcdFx0XHRyZXR1cm4gdGhpcy5zZXREZWZhdWx0UXVvdGEoT0MuVXRpbC5odW1hbkZpbGVTaXplKE9DLlV0aWwuY29tcHV0ZXJGaWxlU2l6ZShxdW90YSkpKTtcblx0XHRcdH1cblx0XHRcdC8vIGlmIG5vIHZhbGlkIGRvIG5vdCBjaGFuZ2Vcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHR9LFxuXHRjb21wdXRlZDoge1xuXHRcdHVzZXJzKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0VXNlcnM7XG5cdFx0fSxcblx0XHRsb2FkaW5nKCkge1xuXHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMudXNlcnMpLmxlbmd0aCA9PT0gMDtcblx0XHR9LFxuXHRcdHVzZXJzT2Zmc2V0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0VXNlcnNPZmZzZXQ7XG5cdFx0fSxcblx0XHR1c2Vyc0xpbWl0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0VXNlcnNMaW1pdDtcblx0XHR9LFxuXG5cdFx0Ly8gTG9jYWwgc2V0dGluZ3Ncblx0XHRzaG93TGFuZ3VhZ2VzOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmdldExvY2Fsc3RvcmFnZSgnc2hvd0xhbmd1YWdlcycpfSxcblx0XHRcdHNldDogZnVuY3Rpb24oc3RhdHVzKSB7XG5cdFx0XHRcdHRoaXMuc2V0TG9jYWxTdG9yYWdlKCdzaG93TGFuZ3VhZ2VzJywgc3RhdHVzKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNob3dMYXN0TG9naW46IHtcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZ2V0TG9jYWxzdG9yYWdlKCdzaG93TGFzdExvZ2luJyl9LFxuXHRcdFx0c2V0OiBmdW5jdGlvbihzdGF0dXMpIHtcblx0XHRcdFx0dGhpcy5zZXRMb2NhbFN0b3JhZ2UoJ3Nob3dMYXN0TG9naW4nLCBzdGF0dXMpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0c2hvd1VzZXJCYWNrZW5kOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmdldExvY2Fsc3RvcmFnZSgnc2hvd1VzZXJCYWNrZW5kJyl9LFxuXHRcdFx0c2V0OiBmdW5jdGlvbihzdGF0dXMpIHtcblx0XHRcdFx0dGhpcy5zZXRMb2NhbFN0b3JhZ2UoJ3Nob3dVc2VyQmFja2VuZCcsIHN0YXR1cyk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzaG93U3RvcmFnZVBhdGg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZ2V0TG9jYWxzdG9yYWdlKCdzaG93U3RvcmFnZVBhdGgnKX0sXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKHN0YXR1cykge1xuXHRcdFx0XHR0aGlzLnNldExvY2FsU3RvcmFnZSgnc2hvd1N0b3JhZ2VQYXRoJywgc3RhdHVzKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0dXNlckNvdW50KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0VXNlckNvdW50O1xuXHRcdH0sXG5cdFx0c2V0dGluZ3MoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTZXJ2ZXJEYXRhO1xuXHRcdH0sXG5cblx0XHQvLyBkZWZhdWx0IHF1b3RhXG5cdFx0cXVvdGFPcHRpb25zKCkge1xuXHRcdFx0Ly8gY29udmVydCB0aGUgcHJlc2V0IGFycmF5IGludG8gb2JqZWN0c1xuXHRcdFx0bGV0IHF1b3RhUHJlc2V0ID0gdGhpcy5zZXR0aW5ncy5xdW90YVByZXNldC5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MuY29uY2F0KHtpZDpjdXIsIGxhYmVsOmN1cn0pLCBbXSk7XG5cdFx0XHQvLyBhZGQgZGVmYXVsdCBwcmVzZXRzXG5cdFx0XHRxdW90YVByZXNldC51bnNoaWZ0KHRoaXMudW5saW1pdGVkUXVvdGEpO1xuXHRcdFx0cmV0dXJuIHF1b3RhUHJlc2V0O1xuXHRcdH0sXG5cdFx0Ly8gbWFwcGluZyBzYXZlZCB2YWx1ZXMgdG8gb2JqZWN0c1xuXHRcdGRlZmF1bHRRdW90YToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRRdW90YSAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZWxlY3RlZFF1b3RhO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChPQy5VdGlsLmNvbXB1dGVyRmlsZVNpemUodGhpcy5zZXR0aW5ncy5kZWZhdWx0UXVvdGEpID4gMCkge1xuXHRcdFx0XHRcdC8vIGlmIHZhbHVlIGlzIHZhbGlkLCBsZXQncyBtYXAgdGhlIHF1b3RhT3B0aW9ucyBvciByZXR1cm4gY3VzdG9tIHF1b3RhXG5cdFx0XHRcdFx0cmV0dXJuIHtpZDp0aGlzLnNldHRpbmdzLmRlZmF1bHRRdW90YSwgbGFiZWw6dGhpcy5zZXR0aW5ncy5kZWZhdWx0UXVvdGF9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzLnVubGltaXRlZFF1b3RhOyAvLyB1bmxpbWl0ZWRcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKHF1b3RhKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRRdW90YSA9ICBxdW90YTtcblx0XHRcdH1cblx0XHRcdFxuXHRcdH0sXG5cblx0XHQvLyBCVUlMRCBBUFAgTkFWSUdBVElPTiBNRU5VIE9CSkVDVFxuXHRcdG1lbnUoKSB7XG5cdFx0XHQvLyBEYXRhIHByb3ZpZGVkIHBocCBzaWRlXG5cdFx0XHRsZXQgZ3JvdXBzID0gdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRHcm91cHM7XG5cdFx0XHRncm91cHMgPSBBcnJheS5pc0FycmF5KGdyb3VwcykgPyBncm91cHMgOiBbXTtcblxuXHRcdFx0Ly8gTWFwIGdyb3Vwc1xuXHRcdFx0Z3JvdXBzID0gZ3JvdXBzLm1hcChncm91cCA9PiB7XG5cdFx0XHRcdGxldCBpdGVtID0ge307XG5cdFx0XHRcdGl0ZW0uaWQgPSBncm91cC5pZC5yZXBsYWNlKCcgJywgJ18nKTtcblx0XHRcdFx0aXRlbS5jbGFzc2VzID0gW107XHRcdFx0XHRcdFx0XHQvLyBlbXB0eSBjbGFzc2VzLCBhY3RpdmUgd2lsbCBiZSBzZXQgbGF0ZXJcblx0XHRcdFx0aXRlbS5yb3V0ZXIgPSB7XHRcdFx0XHRcdFx0XHRcdC8vIHJvdXRlciBsaW5rIHRvXG5cdFx0XHRcdFx0bmFtZTogJ2dyb3VwJyxcblx0XHRcdFx0XHRwYXJhbXM6IHtzZWxlY3RlZEdyb3VwOiBncm91cC5pZH1cblx0XHRcdFx0fTtcblx0XHRcdFx0aXRlbS50ZXh0ID0gZ3JvdXAubmFtZTtcdFx0XHRcdFx0XHQvLyBncm91cCBuYW1lXG5cdFx0XHRcdGl0ZW0udXRpbHMgPSB7Y291bnRlcjogZ3JvdXAudXNlcmNvdW50fTtcdC8vIHVzZXJzIGNvdW50XG5cblx0XHRcdFx0aWYgKGl0ZW0uaWQgIT09ICdhZG1pbicgJiYgaXRlbS5pZCAhPT0gJ2Rpc2FibGVkJykge1xuXHRcdFx0XHRcdC8vIGFkZCBkZWxldGUgYnV0dG9uIG9uIHJlYWwgZ3JvdXBzXG5cdFx0XHRcdFx0bGV0IHNlbGYgPSB0aGlzO1xuXHRcdFx0XHRcdGl0ZW0udXRpbHMuYWN0aW9ucyA9IFt7XG5cdFx0XHRcdFx0XHRpY29uOiAnaWNvbi1kZWxldGUnLFxuXHRcdFx0XHRcdFx0dGV4dDogdCgnc2V0dGluZ3MnLCAnUmVtb3ZlIGdyb3VwJyksXG5cdFx0XHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKCkge3NlbGYucmVtb3ZlR3JvdXAoZ3JvdXAuaWQpfVxuXHRcdFx0XHRcdH1dO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBZGp1c3QgZGF0YVxuXHRcdFx0bGV0IGFkbWluR3JvdXAgPSBncm91cHMuZmluZChncm91cCA9PiBncm91cC5pZCA9PSAnYWRtaW4nKTtcblx0XHRcdGxldCBkaXNhYmxlZEdyb3VwSW5kZXggPSBncm91cHMuZmluZEluZGV4KGdyb3VwID0+IGdyb3VwLmlkID09ICdkaXNhYmxlZCcpO1xuXHRcdFx0bGV0IGRpc2FibGVkR3JvdXAgPSBncm91cHNbZGlzYWJsZWRHcm91cEluZGV4XTtcblx0XHRcdGlmIChhZG1pbkdyb3VwICYmIGFkbWluR3JvdXAudGV4dCkge1xuXHRcdFx0XHRhZG1pbkdyb3VwLnRleHQgPSB0KCdzZXR0aW5ncycsICdBZG1pbnMnKTsgLy8gcmVuYW1lIGFkbWluIGdyb3VwXG5cdFx0XHR9XG5cdFx0XHRpZiAoZGlzYWJsZWRHcm91cCAmJiBkaXNhYmxlZEdyb3VwLnRleHQpIHtcblx0XHRcdFx0ZGlzYWJsZWRHcm91cC50ZXh0ID0gdCgnc2V0dGluZ3MnLCAnRGlzYWJsZWQgdXNlcnMnKTsgLy8gcmVuYW1lIGRpc2FibGVkIGdyb3VwXG5cdFx0XHRcdGlmIChkaXNhYmxlZEdyb3VwLnV0aWxzLmNvdW50ZXIgPT09IDApIHtcblx0XHRcdFx0XHRncm91cHMuc3BsaWNlKGRpc2FibGVkR3JvdXBJbmRleCwgMSk7IC8vIHJlbW92ZSBkaXNhYmxlZCBpZiBlbXB0eVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBldmVyeW9uZSBncm91cFxuXHRcdFx0Z3JvdXBzLnVuc2hpZnQoe1xuXHRcdFx0XHRpZDogJ2V2ZXJ5b25lJyxcblx0XHRcdFx0Y2xhc3NlczogW10sXG5cdFx0XHRcdHJvdXRlcjoge25hbWU6J3VzZXJzJ30sXG5cdFx0XHRcdHRleHQ6IHQoJ3NldHRpbmdzJywgJ0V2ZXJ5b25lJyksXG5cdFx0XHRcdHV0aWxzOiB7Y291bnRlcjogdGhpcy51c2VyQ291bnR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gU2V0IGN1cnJlbnQgZ3JvdXAgYXMgYWN0aXZlXG5cdFx0XHRsZXQgYWN0aXZlR3JvdXAgPSBncm91cHMuZmluZEluZGV4KGdyb3VwID0+IGdyb3VwLmlkID09PSB0aGlzLnNlbGVjdGVkR3JvdXApO1xuXHRcdFx0aWYgKGFjdGl2ZUdyb3VwID49IDApIHtcblx0XHRcdFx0Z3JvdXBzW2FjdGl2ZUdyb3VwXS5jbGFzc2VzLnB1c2goJ2FjdGl2ZScpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Z3JvdXBzWzBdLmNsYXNzZXMucHVzaCgnYWN0aXZlJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVyblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aWQ6ICd1c2VyZ3JvdXBsaXN0Jyxcblx0XHRcdFx0bmV3OiB7XG5cdFx0XHRcdFx0aWQ6J25ldy11c2VyLWJ1dHRvbicsXG5cdFx0XHRcdFx0dGV4dDogdCgnc2V0dGluZ3MnLCdOZXcgdXNlcicpLFxuXHRcdFx0XHRcdGljb246ICdpY29uLWFkZCcsXG5cdFx0XHRcdFx0YWN0aW9uOiAoKSA9PiB0aGlzLnNob3dDb25maWcuc2hvd05ld1VzZXJGb3JtPSF0aGlzLnNob3dDb25maWcuc2hvd05ld1VzZXJGb3JtXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGl0ZW1zOiBncm91cHNcblx0XHRcdH1cblx0XHR9LFxuXHR9XG59XG48L3NjcmlwdD5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvdmlld3MvVXNlcnMudnVlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n");
+eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_appNavigation__ = __webpack_require__(32);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_userList__ = __webpack_require__(39);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_vue_localstorage__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_vue_localstorage___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_vue_localstorage__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_vue_multiselect__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_vue_multiselect___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_vue_multiselect__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__store_api__ = __webpack_require__(5);\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n__WEBPACK_IMPORTED_MODULE_2_vue__[\"a\" /* default */].use(__WEBPACK_IMPORTED_MODULE_3_vue_localstorage___default.a);\n__WEBPACK_IMPORTED_MODULE_2_vue__[\"a\" /* default */].use(__WEBPACK_IMPORTED_MODULE_3_vue_localstorage___default.a);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n\tname: 'Users',\n\tprops: ['selectedGroup'],\n\tcomponents: {\n\t\tappNavigation: __WEBPACK_IMPORTED_MODULE_0__components_appNavigation__[\"a\" /* default */],\n\t\tuserList: __WEBPACK_IMPORTED_MODULE_1__components_userList__[\"a\" /* default */],\n\t\tMultiselect: __WEBPACK_IMPORTED_MODULE_4_vue_multiselect___default.a\n\t},\n\tbeforeMount: function beforeMount() {\n\t\tthis.$store.commit('initGroups', {\n\t\t\tgroups: this.$store.getters.getServerData.groups,\n\t\t\torderBy: this.$store.getters.getServerData.sortGroups,\n\t\t\tuserCount: this.$store.getters.getServerData.userCount\n\t\t});\n\t\tthis.$store.dispatch('getPasswordPolicyMinLength');\n\t},\n\tdata: function data() {\n\t\treturn {\n\t\t\t// default quota is unlimited\n\t\t\tunlimitedQuota: { id: 'default', label: t('settings', 'Unlimited') },\n\t\t\t// temporary value used for multiselect change\n\t\t\tselectedQuota: false,\n\t\t\tshowConfig: {\n\t\t\t\tshowStoragePath: false,\n\t\t\t\tshowUserBackend: false,\n\t\t\t\tshowLastLogin: false,\n\t\t\t\tshowNewUserForm: false,\n\t\t\t\tshowLanguages: false\n\t\t\t}\n\t\t};\n\t},\n\n\tmethods: {\n\t\tgetLocalstorage: function getLocalstorage(key) {\n\t\t\t// force initialization\n\t\t\tvar localConfig = this.$localStorage.get(key);\n\t\t\t// if localstorage is null, fallback to original values\n\t\t\tthis.showConfig[key] = localConfig !== null ? localConfig === 'true' : this.showConfig[key];\n\t\t\treturn this.showConfig[key];\n\t\t},\n\t\tsetLocalStorage: function setLocalStorage(key, status) {\n\t\t\tthis.showConfig[key] = status;\n\t\t\tthis.$localStorage.set(key, status);\n\t\t\treturn status;\n\t\t},\n\t\tremoveGroup: function removeGroup(groupid) {\n\t\t\tvar self = this;\n\t\t\t// TODO migrate to a vue js confirm dialog component \n\t\t\tOC.dialogs.confirm(t('settings', 'You are about to remove the group {group}. The users will NOT be deleted.', { group: groupid }), t('settings', 'Please confirm the group removal '), function (success) {\n\t\t\t\tif (success) {\n\t\t\t\t\tself.$store.dispatch('removeGroup', groupid);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\n\t\t/**\n * Dispatch default quota set request\n * \n * @param {string|Object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n * @returns {string}\n */\n\t\tsetDefaultQuota: function setDefaultQuota() {\n\t\t\tvar _this = this;\n\n\t\t\tvar quota = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'none';\n\n\t\t\tthis.$store.dispatch('setAppConfig', {\n\t\t\t\tapp: 'files',\n\t\t\t\tkey: 'default_quota',\n\t\t\t\t// ensure we only send the preset id\n\t\t\t\tvalue: quota.id ? quota.id : quota\n\t\t\t}).then(function () {\n\t\t\t\tif ((typeof quota === 'undefined' ? 'undefined' : _typeof(quota)) !== 'object') {\n\t\t\t\t\tquota = { id: quota, label: quota };\n\t\t\t\t}\n\t\t\t\t_this.defaultQuota = quota;\n\t\t\t});\n\t\t},\n\n\n\t\t/**\n * Validate quota string to make sure it's a valid human file size\n * \n * @param {string} quota Quota in readable format '5 GB'\n * @returns {Promise|boolean}\n */\n\t\tvalidateQuota: function validateQuota(quota) {\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tvar validQuota = OC.Util.computerFileSize(quota);\n\t\t\tif (validQuota === 0) {\n\t\t\t\treturn this.setDefaultQuota('none');\n\t\t\t} else if (validQuota !== null) {\n\t\t\t\t// unify format output\n\t\t\t\treturn this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n\t\t\t}\n\t\t\t// if no valid do not change\n\t\t\treturn false;\n\t\t}\n\t},\n\tcomputed: {\n\t\tusers: function users() {\n\t\t\treturn this.$store.getters.getUsers;\n\t\t},\n\t\tloading: function loading() {\n\t\t\treturn Object.keys(this.users).length === 0;\n\t\t},\n\t\tusersOffset: function usersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset;\n\t\t},\n\t\tusersLimit: function usersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit;\n\t\t},\n\n\n\t\t// Local settings\n\t\tshowLanguages: {\n\t\t\tget: function get() {\n\t\t\t\treturn this.getLocalstorage('showLanguages');\n\t\t\t},\n\t\t\tset: function set(status) {\n\t\t\t\tthis.setLocalStorage('showLanguages', status);\n\t\t\t}\n\t\t},\n\t\tshowLastLogin: {\n\t\t\tget: function get() {\n\t\t\t\treturn this.getLocalstorage('showLastLogin');\n\t\t\t},\n\t\t\tset: function set(status) {\n\t\t\t\tthis.setLocalStorage('showLastLogin', status);\n\t\t\t}\n\t\t},\n\t\tshowUserBackend: {\n\t\t\tget: function get() {\n\t\t\t\treturn this.getLocalstorage('showUserBackend');\n\t\t\t},\n\t\t\tset: function set(status) {\n\t\t\t\tthis.setLocalStorage('showUserBackend', status);\n\t\t\t}\n\t\t},\n\t\tshowStoragePath: {\n\t\t\tget: function get() {\n\t\t\t\treturn this.getLocalstorage('showStoragePath');\n\t\t\t},\n\t\t\tset: function set(status) {\n\t\t\t\tthis.setLocalStorage('showStoragePath', status);\n\t\t\t}\n\t\t},\n\n\t\tuserCount: function userCount() {\n\t\t\treturn this.$store.getters.getUserCount;\n\t\t},\n\t\tsettings: function settings() {\n\t\t\treturn this.$store.getters.getServerData;\n\t\t},\n\n\n\t\t// default quota\n\t\tquotaOptions: function quotaOptions() {\n\t\t\t// convert the preset array into objects\n\t\t\tvar quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {\n\t\t\t\treturn acc.concat({ id: cur, label: cur });\n\t\t\t}, []);\n\t\t\t// add default presets\n\t\t\tquotaPreset.unshift(this.unlimitedQuota);\n\t\t\treturn quotaPreset;\n\t\t},\n\n\t\t// mapping saved values to objects\n\t\tdefaultQuota: {\n\t\t\tget: function get() {\n\t\t\t\tif (this.selectedQuota !== false) {\n\t\t\t\t\treturn this.selectedQuota;\n\t\t\t\t}\n\t\t\t\tif (OC.Util.computerFileSize(this.settings.defaultQuota) > 0) {\n\t\t\t\t\t// if value is valid, let's map the quotaOptions or return custom quota\n\t\t\t\t\treturn { id: this.settings.defaultQuota, label: this.settings.defaultQuota };\n\t\t\t\t}\n\t\t\t\treturn this.unlimitedQuota; // unlimited\n\t\t\t},\n\t\t\tset: function set(quota) {\n\t\t\t\tthis.selectedQuota = quota;\n\t\t\t}\n\n\t\t},\n\n\t\t// BUILD APP NAVIGATION MENU OBJECT\n\t\tmenu: function menu() {\n\t\t\tvar _this2 = this;\n\n\t\t\t// Data provided php side\n\t\t\tvar groups = this.$store.getters.getGroups;\n\t\t\tgroups = Array.isArray(groups) ? groups : [];\n\n\t\t\t// Map groups\n\t\t\tgroups = groups.map(function (group) {\n\t\t\t\tvar item = {};\n\t\t\t\titem.id = group.id.replace(' ', '_');\n\t\t\t\titem.classes = []; // empty classes, active will be set later\n\t\t\t\titem.router = { // router link to\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tparams: { selectedGroup: group.id }\n\t\t\t\t};\n\t\t\t\titem.text = group.name; // group name\n\t\t\t\titem.utils = { counter: group.usercount }; // users count\n\n\t\t\t\tif (item.id !== 'admin' && item.id !== 'disabled') {\n\t\t\t\t\t// add delete button on real groups\n\t\t\t\t\tvar self = _this2;\n\t\t\t\t\titem.utils.actions = [{\n\t\t\t\t\t\ticon: 'icon-delete',\n\t\t\t\t\t\ttext: t('settings', 'Remove group'),\n\t\t\t\t\t\taction: function action() {\n\t\t\t\t\t\t\tself.removeGroup(group.id);\n\t\t\t\t\t\t}\n\t\t\t\t\t}];\n\t\t\t\t};\n\t\t\t\treturn item;\n\t\t\t});\n\n\t\t\t// Adjust data\n\t\t\tvar adminGroup = groups.find(function (group) {\n\t\t\t\treturn group.id == 'admin';\n\t\t\t});\n\t\t\tvar disabledGroupIndex = groups.findIndex(function (group) {\n\t\t\t\treturn group.id == 'disabled';\n\t\t\t});\n\t\t\tvar disabledGroup = groups[disabledGroupIndex];\n\t\t\tif (adminGroup && adminGroup.text) {\n\t\t\t\tadminGroup.text = t('settings', 'Admins'); // rename admin group\n\t\t\t}\n\t\t\tif (disabledGroup && disabledGroup.text) {\n\t\t\t\tdisabledGroup.text = t('settings', 'Disabled users'); // rename disabled group\n\t\t\t\tif (disabledGroup.utils.counter === 0) {\n\t\t\t\t\tgroups.splice(disabledGroupIndex, 1); // remove disabled if empty\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add everyone group\n\t\t\tgroups.unshift({\n\t\t\t\tid: 'everyone',\n\t\t\t\tclasses: [],\n\t\t\t\trouter: { name: 'users' },\n\t\t\t\ttext: t('settings', 'Everyone'),\n\t\t\t\tutils: { counter: this.userCount }\n\t\t\t});\n\n\t\t\t// Set current group as active\n\t\t\tvar activeGroup = groups.findIndex(function (group) {\n\t\t\t\treturn group.id === _this2.selectedGroup;\n\t\t\t});\n\t\t\tif (activeGroup >= 0) {\n\t\t\t\tgroups[activeGroup].classes.push('active');\n\t\t\t} else {\n\t\t\t\tgroups[0].classes.push('active');\n\t\t\t}\n\n\t\t\t// Return\n\t\t\treturn {\n\t\t\t\tid: 'usergrouplist',\n\t\t\t\tnew: {\n\t\t\t\t\tid: 'new-user-button',\n\t\t\t\t\ttext: t('settings', 'New user'),\n\t\t\t\t\ticon: 'icon-add',\n\t\t\t\t\taction: function action() {\n\t\t\t\t\t\treturn _this2.showConfig.showNewUserForm = !_this2.showConfig.showNewUserForm;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\titems: groups\n\t\t\t};\n\t\t}\n\t}\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL3ZpZXdzL1VzZXJzLnZ1ZT8wNzZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtPQUVBO1NBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBSkE7cUNBS0E7OzZDQUVBOzhDQUNBO2dEQUVBO0FBSkE7dUJBS0E7QUFDQTt1QkFDQTs7QUFFQTt5REFDQTtBQUNBO2tCQUNBOztxQkFFQTtxQkFDQTttQkFDQTtxQkFDQTttQkFHQTtBQVBBO0FBTEE7QUFhQTs7O2lEQUVBO0FBQ0E7NENBQ0E7QUFDQTswRkFDQTswQkFDQTtBQUNBO3lEQUNBOzBCQUNBOytCQUNBO1VBQ0E7QUFDQTs2Q0FDQTtjQUNBO0FBQ0E7Y0FDQSw0R0FDQSwwQkFDQSx5REFDQTtpQkFDQTt5Q0FDQTtBQUNBO0FBRUE7QUFFQTs7O0FBTUE7Ozs7Ozs7QUFDQTs7Ozs7U0FFQTtTQUNBO0FBQ0E7aUNBQ0E7QUFKQSx1QkFLQTtvRkFDQTtpQ0FDQTtBQUNBO3lCQUNBO0FBQ0E7QUFFQTs7O0FBTUE7Ozs7OzsrQ0FDQTtBQUNBOzZDQUNBO3lCQUNBO2dDQUNBO21DQUNBO0FBQ0E7K0VBQ0E7QUFDQTtBQUNBO1VBQ0E7QUFFQTtBQWpFQTs7MEJBbUVBOzhCQUNBO0FBQ0E7OEJBQ0E7NkNBQ0E7QUFDQTtzQ0FDQTs4QkFDQTtBQUNBO29DQUNBOzhCQUNBO0FBRUE7OztBQUNBOzs7O0FBRUE7NkJBQ0E7MENBQ0E7QUFFQTtBQUxBOzs7O0FBT0E7NkJBQ0E7MENBQ0E7QUFFQTtBQUxBOzs7O0FBT0E7NkJBQ0E7NENBQ0E7QUFFQTtBQUxBOzs7O0FBT0E7NkJBQ0E7NENBQ0E7QUFHQTtBQU5BOztrQ0FPQTs4QkFDQTtBQUNBO2dDQUNBOzhCQUNBO0FBRUE7OztBQUNBO3dDQUNBO0FBQ0E7OztNQUNBO0FBQ0E7NEJBQ0E7VUFDQTtBQUNBOztBQUNBOzt1QkFFQTtzQ0FDQTtpQkFDQTtBQUNBO2tFQUNBO0FBQ0E7bUVBQ0E7QUFDQTtnQ0FDQTtBQUNBOzRCQUNBO3lCQUNBO0FBSUE7O0FBaEJBOztBQWlCQTs7QUFDQTs7QUFDQTtvQ0FDQTs2Q0FFQTs7QUFDQTs7ZUFFQTtvQ0FDQTtzQkFGQSxDQUdBO29CQUNBO1dBQ0E7b0NBRUE7OzRCQUNBOytDQUVBOzt1REFDQTtBQUNBO1NBQ0E7O1lBRUE7MEJBQ0E7OztBQUVBO0FBSkE7QUFLQTtXQUNBO0FBRUE7O0FBQ0E7O3VCQUNBOzs7dUJBQ0E7OzhCQUNBO3NDQUNBOytDQUNBO0FBQ0E7NENBQ0E7MERBQ0E7OzBDQUNBLENBQ0E7QUFDQTtBQUVBOztBQUNBOztRQUVBO2FBQ0E7b0JBQ0E7d0JBQ0E7MkJBR0E7QUFQQTs7QUFRQTs7K0JBQ0E7O3lCQUNBO3FDQUNBO1VBQ0E7MkJBQ0E7QUFFQTs7QUFDQTs7UUFFQTs7U0FFQTt5QkFDQTtXQUNBOztvRUFFQTs7QUFMQTtXQU9BO0FBVEE7QUFXQTtBQWxKQTtBQWpHQSIsImZpbGUiOiI5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuXHQ8ZGl2IGlkPVwiYXBwXCI+XG5cdFx0PGFwcC1uYXZpZ2F0aW9uIDptZW51PVwibWVudVwiPlxuXHRcdFx0PHRlbXBsYXRlIHNsb3Q9XCJzZXR0aW5ncy1jb250ZW50XCI+XG5cdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0PHA+e3t0KCdzZXR0aW5ncycsICdEZWZhdWx0IHF1b3RhIDonKX19PC9wPlxuXHRcdFx0XHRcdDxtdWx0aXNlbGVjdCA6dmFsdWU9XCJkZWZhdWx0UXVvdGFcIiA6b3B0aW9ucz1cInF1b3RhT3B0aW9uc1wiXG5cdFx0XHRcdFx0XHRcdFx0dGFnLXBsYWNlaG9sZGVyPVwiY3JlYXRlXCIgOnBsYWNlaG9sZGVyPVwidCgnc2V0dGluZ3MnLCAnU2VsZWN0IGRlZmF1bHQgcXVvdGEnKVwiXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw9XCJsYWJlbFwiIHRyYWNrLWJ5PVwiaWRcIiBjbGFzcz1cIm11bHRpc2VsZWN0LXZ1ZVwiXG5cdFx0XHRcdFx0XHRcdFx0OmFsbG93RW1wdHk9XCJmYWxzZVwiIDp0YWdnYWJsZT1cInRydWVcIlxuXHRcdFx0XHRcdFx0XHRcdEB0YWc9XCJ2YWxpZGF0ZVF1b3RhXCIgQGlucHV0PVwic2V0RGVmYXVsdFF1b3RhXCI+XG5cdFx0XHRcdFx0PC9tdWx0aXNlbGVjdD5cblxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJzaG93TGFuZ3VhZ2VzXCIgY2xhc3M9XCJjaGVja2JveFwiXG5cdFx0XHRcdFx0XHQgICA6Y2hlY2tlZD1cInNob3dMYW5ndWFnZXNcIiB2LW1vZGVsPVwic2hvd0xhbmd1YWdlc1wiPlxuXHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJzaG93TGFuZ3VhZ2VzXCI+e3t0KCdzZXR0aW5ncycsICdTaG93IExhbmd1YWdlcycpfX08L2xhYmVsPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJzaG93TGFzdExvZ2luXCIgY2xhc3M9XCJjaGVja2JveFwiXG5cdFx0XHRcdFx0XHQgICA6Y2hlY2tlZD1cInNob3dMYXN0TG9naW5cIiB2LW1vZGVsPVwic2hvd0xhc3RMb2dpblwiPlxuXHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJzaG93TGFzdExvZ2luXCI+e3t0KCdzZXR0aW5ncycsICdTaG93IGxhc3QgbG9naW4nKX19PC9sYWJlbD5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwic2hvd1VzZXJCYWNrZW5kXCIgY2xhc3M9XCJjaGVja2JveFwiXG5cdFx0XHRcdFx0XHQgICA6Y2hlY2tlZD1cInNob3dVc2VyQmFja2VuZFwiIHYtbW9kZWw9XCJzaG93VXNlckJhY2tlbmRcIj5cblx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwic2hvd1VzZXJCYWNrZW5kXCI+e3t0KCdzZXR0aW5ncycsICdTaG93IHVzZXIgYmFja2VuZCcpfX08L2xhYmVsPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJzaG93U3RvcmFnZVBhdGhcIiBjbGFzcz1cImNoZWNrYm94XCJcblx0XHRcdFx0XHRcdCAgIDpjaGVja2VkPVwic2hvd1N0b3JhZ2VQYXRoXCIgdi1tb2RlbD1cInNob3dTdG9yYWdlUGF0aFwiPlxuXHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJzaG93U3RvcmFnZVBhdGhcIj57e3QoJ3NldHRpbmdzJywgJ1Nob3cgc3RvcmFnZSBwYXRoJyl9fTwvbGFiZWw+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC90ZW1wbGF0ZT5cblx0XHQ8L2FwcC1uYXZpZ2F0aW9uPlxuXHRcdDx1c2VyLWxpc3QgOnVzZXJzPVwidXNlcnNcIiA6c2hvd0NvbmZpZz1cInNob3dDb25maWdcIiA6c2VsZWN0ZWRHcm91cD1cInNlbGVjdGVkR3JvdXBcIiAvPlxuXHQ8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgYXBwTmF2aWdhdGlvbiBmcm9tICcuLi9jb21wb25lbnRzL2FwcE5hdmlnYXRpb24nO1xuaW1wb3J0IHVzZXJMaXN0IGZyb20gJy4uL2NvbXBvbmVudHMvdXNlckxpc3QnO1xuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IFZ1ZUxvY2FsU3RvcmFnZSBmcm9tICd2dWUtbG9jYWxzdG9yYWdlJ1xuaW1wb3J0IE11bHRpc2VsZWN0IGZyb20gJ3Z1ZS1tdWx0aXNlbGVjdCc7XG5pbXBvcnQgYXBpIGZyb20gJy4uL3N0b3JlL2FwaSc7XG5cblZ1ZS51c2UoVnVlTG9jYWxTdG9yYWdlKVxuVnVlLnVzZShWdWVMb2NhbFN0b3JhZ2UpXG5cbmV4cG9ydCBkZWZhdWx0IHtcblx0bmFtZTogJ1VzZXJzJyxcblx0cHJvcHM6IFsnc2VsZWN0ZWRHcm91cCddLFxuXHRjb21wb25lbnRzOiB7XG5cdFx0YXBwTmF2aWdhdGlvbixcblx0XHR1c2VyTGlzdCxcblx0XHRNdWx0aXNlbGVjdFxuXHR9LFxuXHRiZWZvcmVNb3VudCgpIHtcblx0XHR0aGlzLiRzdG9yZS5jb21taXQoJ2luaXRHcm91cHMnLCB7XG5cdFx0XHRncm91cHM6IHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0U2VydmVyRGF0YS5ncm91cHMsXG5cdFx0XHRvcmRlckJ5OiB0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFNlcnZlckRhdGEuc29ydEdyb3Vwcyxcblx0XHRcdHVzZXJDb3VudDogdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTZXJ2ZXJEYXRhLnVzZXJDb3VudFxuXHRcdH0pO1xuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRQYXNzd29yZFBvbGljeU1pbkxlbmd0aCcpO1xuXHR9LFxuXHRkYXRhKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQvLyBkZWZhdWx0IHF1b3RhIGlzIHVubGltaXRlZFxuXHRcdFx0dW5saW1pdGVkUXVvdGE6IHtpZDonZGVmYXVsdCcsIGxhYmVsOnQoJ3NldHRpbmdzJywgJ1VubGltaXRlZCcpfSxcblx0XHRcdC8vIHRlbXBvcmFyeSB2YWx1ZSB1c2VkIGZvciBtdWx0aXNlbGVjdCBjaGFuZ2Vcblx0XHRcdHNlbGVjdGVkUXVvdGE6IGZhbHNlLFxuXHRcdFx0c2hvd0NvbmZpZzoge1xuXHRcdFx0XHRzaG93U3RvcmFnZVBhdGg6IGZhbHNlLFxuXHRcdFx0XHRzaG93VXNlckJhY2tlbmQ6IGZhbHNlLFxuXHRcdFx0XHRzaG93TGFzdExvZ2luOiBmYWxzZSxcblx0XHRcdFx0c2hvd05ld1VzZXJGb3JtOiBmYWxzZSxcblx0XHRcdFx0c2hvd0xhbmd1YWdlczogZmFsc2Vcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdG1ldGhvZHM6IHtcblx0XHRnZXRMb2NhbHN0b3JhZ2Uoa2V5KSB7XG5cdFx0XHQvLyBmb3JjZSBpbml0aWFsaXphdGlvblxuXHRcdFx0bGV0IGxvY2FsQ29uZmlnID0gdGhpcy4kbG9jYWxTdG9yYWdlLmdldChrZXkpO1xuXHRcdFx0Ly8gaWYgbG9jYWxzdG9yYWdlIGlzIG51bGwsIGZhbGxiYWNrIHRvIG9yaWdpbmFsIHZhbHVlc1xuXHRcdFx0dGhpcy5zaG93Q29uZmlnW2tleV0gPSBsb2NhbENvbmZpZyAhPT0gbnVsbCA/IGxvY2FsQ29uZmlnID09PSAndHJ1ZScgOiB0aGlzLnNob3dDb25maWdba2V5XTtcblx0XHRcdHJldHVybiB0aGlzLnNob3dDb25maWdba2V5XTtcblx0XHR9LFxuXHRcdHNldExvY2FsU3RvcmFnZShrZXksIHN0YXR1cykge1xuXHRcdFx0dGhpcy5zaG93Q29uZmlnW2tleV0gPSBzdGF0dXM7XG5cdFx0XHR0aGlzLiRsb2NhbFN0b3JhZ2Uuc2V0KGtleSwgc3RhdHVzKTtcblx0XHRcdHJldHVybiBzdGF0dXM7XG5cdFx0fSxcblx0XHRyZW1vdmVHcm91cChncm91cGlkKSB7XG5cdFx0XHRsZXQgc2VsZiA9IHRoaXM7XG5cdFx0XHQvLyBUT0RPIG1pZ3JhdGUgdG8gYSB2dWUganMgY29uZmlybSBkaWFsb2cgY29tcG9uZW50IFxuXHRcdFx0T0MuZGlhbG9ncy5jb25maXJtKFxuXHRcdFx0XHR0KCdzZXR0aW5ncycsICdZb3UgYXJlIGFib3V0IHRvIHJlbW92ZSB0aGUgZ3JvdXAge2dyb3VwfS4gVGhlIHVzZXJzIHdpbGwgTk9UIGJlIGRlbGV0ZWQuJywge2dyb3VwOiBncm91cGlkfSksXG5cdFx0XHRcdHQoJ3NldHRpbmdzJywnUGxlYXNlIGNvbmZpcm0gdGhlIGdyb3VwIHJlbW92YWwgJyksXG5cdFx0XHRcdGZ1bmN0aW9uIChzdWNjZXNzKSB7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MpIHtcblx0XHRcdFx0XHRcdHNlbGYuJHN0b3JlLmRpc3BhdGNoKCdyZW1vdmVHcm91cCcsIGdyb3VwaWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRGlzcGF0Y2ggZGVmYXVsdCBxdW90YSBzZXQgcmVxdWVzdFxuXHRcdCAqIFxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gcXVvdGEgUXVvdGEgaW4gcmVhZGFibGUgZm9ybWF0ICc1IEdCJyBvciBPYmplY3Qge2lkOiAnNSBHQicsIGxhYmVsOiAnNUdCJ31cblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdHNldERlZmF1bHRRdW90YShxdW90YSA9ICdub25lJykge1xuXHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3NldEFwcENvbmZpZycsIHtcblx0XHRcdFx0YXBwOiAnZmlsZXMnLFxuXHRcdFx0XHRrZXk6ICdkZWZhdWx0X3F1b3RhJyxcblx0XHRcdFx0Ly8gZW5zdXJlIHdlIG9ubHkgc2VuZCB0aGUgcHJlc2V0IGlkXG5cdFx0XHRcdHZhbHVlOiBxdW90YS5pZCA/IHF1b3RhLmlkIDogcXVvdGFcblx0XHRcdH0pLnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIHF1b3RhICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdHF1b3RhID0ge2lkOiBxdW90YSwgbGFiZWw6IHF1b3RhfTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmRlZmF1bHRRdW90YSA9IHF1b3RhO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFZhbGlkYXRlIHF1b3RhIHN0cmluZyB0byBtYWtlIHN1cmUgaXQncyBhIHZhbGlkIGh1bWFuIGZpbGUgc2l6ZVxuXHRcdCAqIFxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBxdW90YSBRdW90YSBpbiByZWFkYWJsZSBmb3JtYXQgJzUgR0InXG5cdFx0ICogQHJldHVybnMge1Byb21pc2V8Ym9vbGVhbn1cblx0XHQgKi9cblx0XHR2YWxpZGF0ZVF1b3RhKHF1b3RhKSB7XG5cdFx0XHQvLyBvbmx5IHVzZWQgZm9yIG5ldyBwcmVzZXRzIHNlbnQgdGhyb3VnaCBAVGFnXG5cdFx0XHRsZXQgdmFsaWRRdW90YSA9IE9DLlV0aWwuY29tcHV0ZXJGaWxlU2l6ZShxdW90YSk7XG5cdFx0XHRpZiAodmFsaWRRdW90YSA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5zZXREZWZhdWx0UXVvdGEoJ25vbmUnKTtcblx0XHRcdH0gZWxzZSBpZiAodmFsaWRRdW90YSAhPT0gbnVsbCkge1xuXHRcdFx0XHQvLyB1bmlmeSBmb3JtYXQgb3V0cHV0XG5cdFx0XHRcdHJldHVybiB0aGlzLnNldERlZmF1bHRRdW90YShPQy5VdGlsLmh1bWFuRmlsZVNpemUoT0MuVXRpbC5jb21wdXRlckZpbGVTaXplKHF1b3RhKSkpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gaWYgbm8gdmFsaWQgZG8gbm90IGNoYW5nZVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdH0sXG5cdGNvbXB1dGVkOiB7XG5cdFx0dXNlcnMoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRVc2Vycztcblx0XHR9LFxuXHRcdGxvYWRpbmcoKSB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmtleXModGhpcy51c2VycykubGVuZ3RoID09PSAwO1xuXHRcdH0sXG5cdFx0dXNlcnNPZmZzZXQoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRVc2Vyc09mZnNldDtcblx0XHR9LFxuXHRcdHVzZXJzTGltaXQoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRVc2Vyc0xpbWl0O1xuXHRcdH0sXG5cblx0XHQvLyBMb2NhbCBzZXR0aW5nc1xuXHRcdHNob3dMYW5ndWFnZXM6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZ2V0TG9jYWxzdG9yYWdlKCdzaG93TGFuZ3VhZ2VzJyl9LFxuXHRcdFx0c2V0OiBmdW5jdGlvbihzdGF0dXMpIHtcblx0XHRcdFx0dGhpcy5zZXRMb2NhbFN0b3JhZ2UoJ3Nob3dMYW5ndWFnZXMnLCBzdGF0dXMpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0c2hvd0xhc3RMb2dpbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5nZXRMb2NhbHN0b3JhZ2UoJ3Nob3dMYXN0TG9naW4nKX0sXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKHN0YXR1cykge1xuXHRcdFx0XHR0aGlzLnNldExvY2FsU3RvcmFnZSgnc2hvd0xhc3RMb2dpbicsIHN0YXR1cyk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzaG93VXNlckJhY2tlbmQ6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZ2V0TG9jYWxzdG9yYWdlKCdzaG93VXNlckJhY2tlbmQnKX0sXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKHN0YXR1cykge1xuXHRcdFx0XHR0aGlzLnNldExvY2FsU3RvcmFnZSgnc2hvd1VzZXJCYWNrZW5kJywgc3RhdHVzKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNob3dTdG9yYWdlUGF0aDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5nZXRMb2NhbHN0b3JhZ2UoJ3Nob3dTdG9yYWdlUGF0aCcpfSxcblx0XHRcdHNldDogZnVuY3Rpb24oc3RhdHVzKSB7XG5cdFx0XHRcdHRoaXMuc2V0TG9jYWxTdG9yYWdlKCdzaG93U3RvcmFnZVBhdGgnLCBzdGF0dXMpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR1c2VyQ291bnQoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRVc2VyQ291bnQ7XG5cdFx0fSxcblx0XHRzZXR0aW5ncygpIHtcblx0XHRcdHJldHVybiB0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFNlcnZlckRhdGE7XG5cdFx0fSxcblxuXHRcdC8vIGRlZmF1bHQgcXVvdGFcblx0XHRxdW90YU9wdGlvbnMoKSB7XG5cdFx0XHQvLyBjb252ZXJ0IHRoZSBwcmVzZXQgYXJyYXkgaW50byBvYmplY3RzXG5cdFx0XHRsZXQgcXVvdGFQcmVzZXQgPSB0aGlzLnNldHRpbmdzLnF1b3RhUHJlc2V0LnJlZHVjZSgoYWNjLCBjdXIpID0+IGFjYy5jb25jYXQoe2lkOmN1ciwgbGFiZWw6Y3VyfSksIFtdKTtcblx0XHRcdC8vIGFkZCBkZWZhdWx0IHByZXNldHNcblx0XHRcdHF1b3RhUHJlc2V0LnVuc2hpZnQodGhpcy51bmxpbWl0ZWRRdW90YSk7XG5cdFx0XHRyZXR1cm4gcXVvdGFQcmVzZXQ7XG5cdFx0fSxcblx0XHQvLyBtYXBwaW5nIHNhdmVkIHZhbHVlcyB0byBvYmplY3RzXG5cdFx0ZGVmYXVsdFF1b3RhOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAodGhpcy5zZWxlY3RlZFF1b3RhICE9PSBmYWxzZSkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNlbGVjdGVkUXVvdGE7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKE9DLlV0aWwuY29tcHV0ZXJGaWxlU2l6ZSh0aGlzLnNldHRpbmdzLmRlZmF1bHRRdW90YSkgPiAwKSB7XG5cdFx0XHRcdFx0Ly8gaWYgdmFsdWUgaXMgdmFsaWQsIGxldCdzIG1hcCB0aGUgcXVvdGFPcHRpb25zIG9yIHJldHVybiBjdXN0b20gcXVvdGFcblx0XHRcdFx0XHRyZXR1cm4ge2lkOnRoaXMuc2V0dGluZ3MuZGVmYXVsdFF1b3RhLCBsYWJlbDp0aGlzLnNldHRpbmdzLmRlZmF1bHRRdW90YX07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXMudW5saW1pdGVkUXVvdGE7IC8vIHVubGltaXRlZFxuXHRcdFx0fSxcblx0XHRcdHNldDogZnVuY3Rpb24ocXVvdGEpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZFF1b3RhID0gIHF1b3RhO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0fSxcblxuXHRcdC8vIEJVSUxEIEFQUCBOQVZJR0FUSU9OIE1FTlUgT0JKRUNUXG5cdFx0bWVudSgpIHtcblx0XHRcdC8vIERhdGEgcHJvdmlkZWQgcGhwIHNpZGVcblx0XHRcdGxldCBncm91cHMgPSB0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldEdyb3Vwcztcblx0XHRcdGdyb3VwcyA9IEFycmF5LmlzQXJyYXkoZ3JvdXBzKSA/IGdyb3VwcyA6IFtdO1xuXG5cdFx0XHQvLyBNYXAgZ3JvdXBzXG5cdFx0XHRncm91cHMgPSBncm91cHMubWFwKGdyb3VwID0+IHtcblx0XHRcdFx0bGV0IGl0ZW0gPSB7fTtcblx0XHRcdFx0aXRlbS5pZCA9IGdyb3VwLmlkLnJlcGxhY2UoJyAnLCAnXycpO1xuXHRcdFx0XHRpdGVtLmNsYXNzZXMgPSBbXTtcdFx0XHRcdFx0XHRcdC8vIGVtcHR5IGNsYXNzZXMsIGFjdGl2ZSB3aWxsIGJlIHNldCBsYXRlclxuXHRcdFx0XHRpdGVtLnJvdXRlciA9IHtcdFx0XHRcdFx0XHRcdFx0Ly8gcm91dGVyIGxpbmsgdG9cblx0XHRcdFx0XHRuYW1lOiAnZ3JvdXAnLFxuXHRcdFx0XHRcdHBhcmFtczoge3NlbGVjdGVkR3JvdXA6IGdyb3VwLmlkfVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpdGVtLnRleHQgPSBncm91cC5uYW1lO1x0XHRcdFx0XHRcdC8vIGdyb3VwIG5hbWVcblx0XHRcdFx0aXRlbS51dGlscyA9IHtjb3VudGVyOiBncm91cC51c2VyY291bnR9O1x0Ly8gdXNlcnMgY291bnRcblxuXHRcdFx0XHRpZiAoaXRlbS5pZCAhPT0gJ2FkbWluJyAmJiBpdGVtLmlkICE9PSAnZGlzYWJsZWQnKSB7XG5cdFx0XHRcdFx0Ly8gYWRkIGRlbGV0ZSBidXR0b24gb24gcmVhbCBncm91cHNcblx0XHRcdFx0XHRsZXQgc2VsZiA9IHRoaXM7XG5cdFx0XHRcdFx0aXRlbS51dGlscy5hY3Rpb25zID0gW3tcblx0XHRcdFx0XHRcdGljb246ICdpY29uLWRlbGV0ZScsXG5cdFx0XHRcdFx0XHR0ZXh0OiB0KCdzZXR0aW5ncycsICdSZW1vdmUgZ3JvdXAnKSxcblx0XHRcdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oKSB7c2VsZi5yZW1vdmVHcm91cChncm91cC5pZCl9XG5cdFx0XHRcdFx0fV07XG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiBpdGVtO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEFkanVzdCBkYXRhXG5cdFx0XHRsZXQgYWRtaW5Hcm91cCA9IGdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLmlkID09ICdhZG1pbicpO1xuXHRcdFx0bGV0IGRpc2FibGVkR3JvdXBJbmRleCA9IGdyb3Vwcy5maW5kSW5kZXgoZ3JvdXAgPT4gZ3JvdXAuaWQgPT0gJ2Rpc2FibGVkJyk7XG5cdFx0XHRsZXQgZGlzYWJsZWRHcm91cCA9IGdyb3Vwc1tkaXNhYmxlZEdyb3VwSW5kZXhdO1xuXHRcdFx0aWYgKGFkbWluR3JvdXAgJiYgYWRtaW5Hcm91cC50ZXh0KSB7XG5cdFx0XHRcdGFkbWluR3JvdXAudGV4dCA9IHQoJ3NldHRpbmdzJywgJ0FkbWlucycpOyAvLyByZW5hbWUgYWRtaW4gZ3JvdXBcblx0XHRcdH1cblx0XHRcdGlmIChkaXNhYmxlZEdyb3VwICYmIGRpc2FibGVkR3JvdXAudGV4dCkge1xuXHRcdFx0XHRkaXNhYmxlZEdyb3VwLnRleHQgPSB0KCdzZXR0aW5ncycsICdEaXNhYmxlZCB1c2VycycpOyAvLyByZW5hbWUgZGlzYWJsZWQgZ3JvdXBcblx0XHRcdFx0aWYgKGRpc2FibGVkR3JvdXAudXRpbHMuY291bnRlciA9PT0gMCkge1xuXHRcdFx0XHRcdGdyb3Vwcy5zcGxpY2UoZGlzYWJsZWRHcm91cEluZGV4LCAxKTsgLy8gcmVtb3ZlIGRpc2FibGVkIGlmIGVtcHR5XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGV2ZXJ5b25lIGdyb3VwXG5cdFx0XHRncm91cHMudW5zaGlmdCh7XG5cdFx0XHRcdGlkOiAnZXZlcnlvbmUnLFxuXHRcdFx0XHRjbGFzc2VzOiBbXSxcblx0XHRcdFx0cm91dGVyOiB7bmFtZTondXNlcnMnfSxcblx0XHRcdFx0dGV4dDogdCgnc2V0dGluZ3MnLCAnRXZlcnlvbmUnKSxcblx0XHRcdFx0dXRpbHM6IHtjb3VudGVyOiB0aGlzLnVzZXJDb3VudH1cblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBTZXQgY3VycmVudCBncm91cCBhcyBhY3RpdmVcblx0XHRcdGxldCBhY3RpdmVHcm91cCA9IGdyb3Vwcy5maW5kSW5kZXgoZ3JvdXAgPT4gZ3JvdXAuaWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cCk7XG5cdFx0XHRpZiAoYWN0aXZlR3JvdXAgPj0gMCkge1xuXHRcdFx0XHRncm91cHNbYWN0aXZlR3JvdXBdLmNsYXNzZXMucHVzaCgnYWN0aXZlJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRncm91cHNbMF0uY2xhc3Nlcy5wdXNoKCdhY3RpdmUnKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpZDogJ3VzZXJncm91cGxpc3QnLFxuXHRcdFx0XHRuZXc6IHtcblx0XHRcdFx0XHRpZDonbmV3LXVzZXItYnV0dG9uJyxcblx0XHRcdFx0XHR0ZXh0OiB0KCdzZXR0aW5ncycsJ05ldyB1c2VyJyksXG5cdFx0XHRcdFx0aWNvbjogJ2ljb24tYWRkJyxcblx0XHRcdFx0XHRhY3Rpb246ICgpID0+IHRoaXMuc2hvd0NvbmZpZy5zaG93TmV3VXNlckZvcm09IXRoaXMuc2hvd0NvbmZpZy5zaG93TmV3VXNlckZvcm1cblx0XHRcdFx0fSxcblx0XHRcdFx0aXRlbXM6IGdyb3Vwc1xuXHRcdFx0fVxuXHRcdH0sXG5cdH1cbn1cbjwvc2NyaXB0PlxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy92aWV3cy9Vc2Vycy52dWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9\n");
/***/ }),
/* 10 */