Welcome to mirror list, hosted at ThFree Co, Russian Federation.

settings-users-settings-users.js.map « dist - github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: bd6ef53370c60f7c2f15c52e3485abd76ab2eb58 (plain)
1
{"version":3,"file":"settings-users-settings-users.js?v=3a4fbcc884b49145f7f1","sources":["webpack:///nextcloud/apps/settings/src/mixins/UserRowMixin.js","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&lang=scss&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css&","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?bf83","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?6980","webpack://nextcloud/./apps/settings/src/views/Users.vue?f7e6","webpack://nextcloud/./apps/settings/src/components/UserList.vue?9479","webpack:///nextcloud/apps/settings/src/components/UserList.vue","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue","webpack:///nextcloud/apps/settings/src/views/Users.vue","webpack://nextcloud/./apps/settings/src/components/UserList.vue?e4c2","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?8c35","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?8366","webpack://nextcloud/./apps/settings/src/views/Users.vue?083d","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=template&id=6cba3aca&scoped=true&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=77960baa&scoped=true&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=ff154a08&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=template&id=889b7562&scoped=true&"],"sourcesContent":["function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Greta Doci <gretadoci@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { generateUrl } from '@nextcloud/router';\nexport default {\n  props: {\n    user: {\n      type: Object,\n      required: true\n    },\n    settings: {\n      type: Object,\n      default: function _default() {\n        return {};\n      }\n    },\n    groups: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    subAdminsGroups: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    quotaOptions: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    showConfig: {\n      type: Object,\n      default: function _default() {\n        return {};\n      }\n    },\n    languages: {\n      type: Array,\n      required: true\n    },\n    externalActions: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    }\n  },\n  computed: {\n    /* GROUPS MANAGEMENT */\n    userGroups: function userGroups() {\n      var _this = this;\n\n      var userGroups = this.groups.filter(function (group) {\n        return _this.user.groups.includes(group.id);\n      });\n      return userGroups;\n    },\n    userSubAdminsGroups: function userSubAdminsGroups() {\n      var _this2 = this;\n\n      var userSubAdminsGroups = this.subAdminsGroups.filter(function (group) {\n        return _this2.user.subadmin.includes(group.id);\n      });\n      return userSubAdminsGroups;\n    },\n    availableGroups: function availableGroups() {\n      var _this3 = this;\n\n      return this.groups.map(function (group) {\n        // clone object because we don't want\n        // to edit the original groups\n        var groupClone = Object.assign({}, group); // two settings here:\n        // 1. user NOT in group but no permission to add\n        // 2. user is in group but no permission to remove\n\n        groupClone.$isDisabled = group.canAdd === false && !_this3.user.groups.includes(group.id) || group.canRemove === false && _this3.user.groups.includes(group.id);\n        return groupClone;\n      });\n    },\n\n    /* QUOTA MANAGEMENT */\n    usedSpace: function usedSpace() {\n      if (this.user.quota.used) {\n        return t('settings', '{size} used', {\n          size: OC.Util.humanFileSize(this.user.quota.used)\n        });\n      }\n\n      return t('settings', '{size} used', {\n        size: OC.Util.humanFileSize(0)\n      });\n    },\n    usedQuota: function usedQuota() {\n      var quota = this.user.quota.quota;\n\n      if (quota > 0) {\n        quota = Math.min(100, Math.round(this.user.quota.used / quota * 100));\n      } else {\n        var usedInGB = this.user.quota.used / (10 * Math.pow(2, 30)); // asymptotic curve approaching 50% at 10GB to visualize used stace with infinite quota\n\n        quota = 95 * (1 - 1 / (usedInGB + 1));\n      }\n\n      return isNaN(quota) ? 0 : quota;\n    },\n    // Mapping saved values to objects\n    userQuota: function userQuota() {\n      if (this.user.quota.quota >= 0) {\n        // if value is valid, let's map the quotaOptions or return custom quota\n        var humanQuota = OC.Util.humanFileSize(this.user.quota.quota);\n        var userQuota = this.quotaOptions.find(function (quota) {\n          return quota.id === humanQuota;\n        });\n        return userQuota || {\n          id: humanQuota,\n          label: humanQuota\n        };\n      } else if (this.user.quota.quota === 'default') {\n        // default quota is replaced by the proper value on load\n        return this.quotaOptions[0];\n      }\n\n      return this.quotaOptions[1]; // unlimited\n    },\n\n    /* PASSWORD POLICY? */\n    minPasswordLength: function minPasswordLength() {\n      return this.$store.getters.getPasswordPolicyMinLength;\n    },\n\n    /* LANGUAGE */\n    userLanguage: function userLanguage() {\n      var _this4 = this;\n\n      var availableLanguages = this.languages[0].languages.concat(this.languages[1].languages);\n      var userLang = availableLanguages.find(function (lang) {\n        return lang.code === _this4.user.language;\n      });\n\n      if (_typeof(userLang) !== 'object' && this.user.language !== '') {\n        return {\n          code: this.user.language,\n          name: this.user.language\n        };\n      } else if (this.user.language === '') {\n        return false;\n      }\n\n      return userLang;\n    },\n\n    /* LAST LOGIN */\n    userLastLoginTooltip: function userLastLoginTooltip() {\n      if (this.user.lastLogin > 0) {\n        return OC.Util.formatDate(this.user.lastLogin);\n      }\n\n      return '';\n    },\n    userLastLogin: function userLastLogin() {\n      if (this.user.lastLogin > 0) {\n        return OC.Util.relativeModifiedDate(this.user.lastLogin);\n      }\n\n      return t('settings', 'Never');\n    }\n  },\n  methods: {\n    /**\n     * Generate avatar url\n     *\n     * @param {string} user The user name\n     * @param {int} size Size integer, default 32\n     * @return {string}\n     */\n    generateAvatar: function generateAvatar(user) {\n      var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 32;\n      return generateUrl('/avatar/{user}/{size}?v={version}', {\n        user: user,\n        size: size,\n        version: oc_userconfig.avatar.version\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//\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//\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//\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//\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//\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus';\nimport InfiniteLoading from 'vue-infinite-loading';\nimport Vue from 'vue';\nimport { Modal } from '@nextcloud/vue';\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect';\nimport userRow from './UserList/UserRow';\nvar unlimitedQuota = {\n  id: 'none',\n  label: t('settings', 'Unlimited')\n};\nvar defaultQuota = {\n  id: 'default',\n  label: t('settings', 'Default quota')\n};\nvar newUser = {\n  id: '',\n  displayName: '',\n  password: '',\n  mailAddress: '',\n  groups: [],\n  subAdminsGroups: [],\n  quota: defaultQuota,\n  language: {\n    code: 'en',\n    name: t('settings', 'Default language')\n  }\n};\nexport default {\n  name: 'UserList',\n  components: {\n    Modal: Modal,\n    userRow: userRow,\n    Multiselect: Multiselect,\n    InfiniteLoading: InfiniteLoading\n  },\n  props: {\n    users: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    showConfig: {\n      type: Object,\n      required: true\n    },\n    selectedGroup: {\n      type: String,\n      default: null\n    },\n    externalActions: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    }\n  },\n  data: function data() {\n    return {\n      unlimitedQuota: unlimitedQuota,\n      defaultQuota: defaultQuota,\n      loading: {\n        all: false,\n        groups: false\n      },\n      scrolled: false,\n      searchQuery: '',\n      newUser: Object.assign({}, newUser)\n    };\n  },\n  computed: {\n    settings: function settings() {\n      return this.$store.getters.getServerData;\n    },\n    selectedGroupDecoded: function selectedGroupDecoded() {\n      return decodeURIComponent(this.selectedGroup);\n    },\n    filteredUsers: function filteredUsers() {\n      if (this.selectedGroup === 'disabled') {\n        return this.users.filter(function (user) {\n          return user.enabled === false;\n        });\n      }\n\n      if (!this.settings.isAdmin) {\n        // we don't want subadmins to edit themselves\n        return this.users.filter(function (user) {\n          return user.enabled !== false;\n        });\n      }\n\n      return this.users.filter(function (user) {\n        return user.enabled !== false;\n      });\n    },\n    groups: function groups() {\n      // data provided php side + remove the disabled group\n      return this.$store.getters.getGroups.filter(function (group) {\n        return group.id !== 'disabled';\n      }).sort(function (a, b) {\n        return a.name.localeCompare(b.name);\n      });\n    },\n    canAddGroups: function canAddGroups() {\n      // disabled if no permission to add new users to group\n      return this.groups.map(function (group) {\n        // clone object because we don't want\n        // to edit the original groups\n        group = Object.assign({}, group);\n        group.$isDisabled = group.canAdd === false;\n        return group;\n      });\n    },\n    subAdminsGroups: function subAdminsGroups() {\n      // data provided php side\n      return this.$store.getters.getSubadminGroups;\n    },\n    quotaOptions: function quotaOptions() {\n      // convert the preset array into objects\n      var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {\n        return acc.concat({\n          id: cur,\n          label: cur\n        });\n      }, []); // add default presets\n\n      if (this.settings.allowUnlimitedQuota) {\n        quotaPreset.unshift(this.unlimitedQuota);\n      }\n\n      quotaPreset.unshift(this.defaultQuota);\n      return quotaPreset;\n    },\n    minPasswordLength: function minPasswordLength() {\n      return this.$store.getters.getPasswordPolicyMinLength;\n    },\n    usersOffset: function usersOffset() {\n      return this.$store.getters.getUsersOffset;\n    },\n    usersLimit: function usersLimit() {\n      return this.$store.getters.getUsersLimit;\n    },\n    usersCount: function usersCount() {\n      return this.users.length;\n    },\n\n    /* LANGUAGES */\n    languages: function languages() {\n      return [{\n        label: t('settings', 'Common languages'),\n        languages: this.settings.languages.commonLanguages\n      }, {\n        label: t('settings', 'Other languages'),\n        languages: this.settings.languages.otherLanguages\n      }];\n    }\n  },\n  watch: {\n    // watch url change and group select\n    selectedGroup: function selectedGroup(val, old) {\n      // if selected is the disabled group but it's empty\n      this.redirectIfDisabled();\n      this.$store.commit('resetUsers');\n      this.$refs.infiniteLoading.stateChanger.reset();\n      this.setNewUserDefaultGroup(val);\n    },\n    // make sure the infiniteLoading state is changed if we manually\n    // add/remove data from the store\n    usersCount: function usersCount(val, old) {\n      // deleting the last user, reset the list\n      if (val === 0 && old === 1) {\n        this.$refs.infiniteLoading.stateChanger.reset(); // adding the first user, warn the infiniteLoader that\n        // the list is not empty anymore (we don't fetch the newly\n        // added user as we already have all the info we need)\n      } else if (val === 1 && old === 0) {\n        this.$refs.infiniteLoading.stateChanger.loaded();\n      }\n    }\n  },\n  mounted: function mounted() {\n    if (!this.settings.canChangePassword) {\n      OC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'));\n    }\n    /**\n     * Reset and init new user form\n     */\n\n\n    this.resetForm();\n    /**\n     * Register search\n     */\n\n    subscribe('nextcloud:unified-search.search', this.search);\n    subscribe('nextcloud:unified-search.reset', this.resetSearch);\n    /**\n     * If disabled group but empty, redirect\n     */\n\n    this.redirectIfDisabled();\n  },\n  beforeDestroy: function beforeDestroy() {\n    unsubscribe('nextcloud:unified-search.search', this.search);\n    unsubscribe('nextcloud:unified-search.reset', this.resetSearch);\n  },\n  methods: {\n    onScroll: function onScroll(event) {\n      this.scrolled = event.target.scrollTo > 0;\n    },\n\n    /**\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     * @return {object}\n     */\n    validateQuota: function validateQuota(quota) {\n      // only used for new presets sent through @Tag\n      var validQuota = OC.Util.computerFileSize(quota);\n\n      if (validQuota !== null && validQuota >= 0) {\n        // unify format output\n        quota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota));\n        this.newUser.quota = {\n          id: quota,\n          label: quota\n        };\n        return this.newUser.quota;\n      } // Default is unlimited\n\n\n      this.newUser.quota = this.quotaOptions[0];\n      return this.quotaOptions[0];\n    },\n    infiniteHandler: function infiniteHandler($state) {\n      var _this = this;\n\n      this.$store.dispatch('getUsers', {\n        offset: this.usersOffset,\n        limit: this.usersLimit,\n        group: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\n        search: this.searchQuery\n      }).then(function (usersCount) {\n        if (usersCount > 0) {\n          $state.loaded();\n        }\n\n        if (usersCount < _this.usersLimit) {\n          $state.complete();\n        }\n      });\n    },\n\n    /* SEARCH */\n    search: function search(_ref) {\n      var query = _ref.query;\n      this.searchQuery = query;\n      this.$store.commit('resetUsers');\n      this.$refs.infiniteLoading.stateChanger.reset();\n    },\n    resetSearch: function resetSearch() {\n      this.search({\n        query: ''\n      });\n    },\n    resetForm: function resetForm() {\n      // revert form to original state\n      this.newUser = Object.assign({}, newUser);\n      /**\n       * Init default language from server data. The use of this.settings\n       * requires a computed variable, which break the v-model binding of the form,\n       * this is a much easier solution than getter and setter on a computed var\n       */\n\n      if (this.settings.defaultLanguage) {\n        Vue.set(this.newUser.language, 'code', this.settings.defaultLanguage);\n      }\n      /**\n       * In case the user directly loaded the user list within a group\n       * the watch won't be triggered. We need to initialize it.\n       */\n\n\n      this.setNewUserDefaultGroup(this.selectedGroup);\n      this.loading.all = false;\n    },\n    createUser: function createUser() {\n      var _this2 = this;\n\n      this.loading.all = true;\n      this.$store.dispatch('addUser', {\n        userid: this.newUser.id,\n        password: this.newUser.password,\n        displayName: this.newUser.displayName,\n        email: this.newUser.mailAddress,\n        groups: this.newUser.groups.map(function (group) {\n          return group.id;\n        }),\n        subadmin: this.newUser.subAdminsGroups.map(function (group) {\n          return group.id;\n        }),\n        quota: this.newUser.quota.id,\n        language: this.newUser.language.code\n      }).then(function () {\n        _this2.resetForm();\n\n        _this2.$refs.newusername.focus();\n\n        _this2.closeModal();\n      }).catch(function (error) {\n        _this2.loading.all = false;\n\n        if (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n          var statuscode = error.response.data.ocs.meta.statuscode;\n\n          if (statuscode === 102) {\n            // wrong username\n            _this2.$refs.newusername.focus();\n          } else if (statuscode === 107) {\n            // wrong password\n            _this2.$refs.newuserpassword.focus();\n          }\n        }\n      });\n    },\n    setNewUserDefaultGroup: function setNewUserDefaultGroup(value) {\n      if (value && value.length > 0) {\n        // setting new user default group to the current selected one\n        var currentGroup = this.groups.find(function (group) {\n          return group.id === value;\n        });\n\n        if (currentGroup) {\n          this.newUser.groups = [currentGroup];\n          return;\n        }\n      } // fallback, empty selected group\n\n\n      this.newUser.groups = [];\n    },\n\n    /**\n     * Create a new group\n     *\n     * @param {string} gid Group id\n     * @return {Promise}\n     */\n    createGroup: function createGroup(gid) {\n      var _this3 = this;\n\n      this.loading.groups = true;\n      this.$store.dispatch('addGroup', gid).then(function (group) {\n        _this3.newUser.groups.push(_this3.groups.find(function (group) {\n          return group.id === gid;\n        }));\n\n        _this3.loading.groups = false;\n      }).catch(function () {\n        _this3.loading.groups = false;\n      });\n      return this.$store.getters.getGroups[this.groups.length];\n    },\n\n    /**\n     * If the selected group is the disabled group but the count is 0\n     * redirect to the all users page.\n     * we only check for 0 because we don't have the count on ldap\n     * and we therefore set the usercount to -1 in this specific case\n     */\n    redirectIfDisabled: function redirectIfDisabled() {\n      var allGroups = this.$store.getters.getGroups;\n\n      if (this.selectedGroup === 'disabled' && allGroups.findIndex(function (group) {\n        return group.id === 'disabled' && group.usercount === 0;\n      }) > -1) {\n        // disabled group is empty, redirection to all users\n        this.$router.push({\n          name: 'users'\n        });\n        this.$refs.infiniteLoading.stateChanger.reset();\n      }\n    },\n    closeModal: function closeModal() {\n      // eslint-disable-next-line vue/no-mutating-props\n      this.showConfig.showNewUserForm = false;\n    }\n  }\n};","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\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//\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//\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//\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//\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//\nimport ClickOutside from 'vue-click-outside';\nimport Vue from 'vue';\nimport VTooltip from 'v-tooltip';\nimport { PopoverMenu, Multiselect, Actions, ActionButton } from '@nextcloud/vue';\nimport UserRowSimple from './UserRowSimple';\nimport UserRowMixin from '../../mixins/UserRowMixin';\nVue.use(VTooltip);\nexport default {\n  name: 'UserRow',\n  components: {\n    UserRowSimple: UserRowSimple,\n    PopoverMenu: PopoverMenu,\n    Actions: Actions,\n    ActionButton: ActionButton,\n    Multiselect: Multiselect\n  },\n  directives: {\n    ClickOutside: ClickOutside\n  },\n  mixins: [UserRowMixin],\n  props: {\n    user: {\n      type: Object,\n      required: true\n    },\n    settings: {\n      type: Object,\n      default: function _default() {\n        return {};\n      }\n    },\n    groups: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    subAdminsGroups: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    quotaOptions: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    showConfig: {\n      type: Object,\n      default: function _default() {\n        return {};\n      }\n    },\n    languages: {\n      type: Array,\n      required: true\n    },\n    externalActions: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    }\n  },\n  data: function data() {\n    return {\n      rand: parseInt(Math.random() * 1000),\n      openedMenu: false,\n      feedbackMessage: '',\n      editing: false,\n      loading: {\n        all: false,\n        displayName: false,\n        password: false,\n        mailAddress: false,\n        groups: false,\n        subadmins: false,\n        quota: false,\n        delete: false,\n        disable: false,\n        languages: false,\n        wipe: false\n      }\n    };\n  },\n  computed: {\n    /* USER POPOVERMENU ACTIONS */\n    userActions: function userActions() {\n      var actions = [{\n        icon: 'icon-delete',\n        text: t('settings', 'Delete user'),\n        action: this.deleteUser\n      }, {\n        icon: 'icon-delete',\n        text: t('settings', 'Wipe all devices'),\n        action: this.wipeUserDevices\n      }, {\n        icon: this.user.enabled ? 'icon-close' : 'icon-add',\n        text: this.user.enabled ? t('settings', 'Disable user') : t('settings', 'Enable user'),\n        action: this.enableDisableUser\n      }];\n\n      if (this.user.email !== null && this.user.email !== '') {\n        actions.push({\n          icon: 'icon-mail',\n          text: t('settings', 'Resend welcome email'),\n          action: this.sendWelcomeMail\n        });\n      }\n\n      return actions.concat(this.externalActions);\n    }\n  },\n  methods: {\n    /* MENU HANDLING */\n    toggleMenu: function toggleMenu() {\n      this.openedMenu = !this.openedMenu;\n    },\n    hideMenu: function hideMenu() {\n      this.openedMenu = false;\n    },\n    wipeUserDevices: function wipeUserDevices() {\n      var _this = this;\n\n      var userid = this.user.id;\n      OC.dialogs.confirmDestructive(t('settings', 'In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet.', {\n        userid: userid\n      }), t('settings', 'Remote wipe of devices'), {\n        type: OC.dialogs.YES_NO_BUTTONS,\n        confirm: t('settings', 'Wipe {userid}\\'s devices', {\n          userid: userid\n        }),\n        confirmClasses: 'error',\n        cancel: t('settings', 'Cancel')\n      }, function (result) {\n        if (result) {\n          _this.loading.wipe = true;\n          _this.loading.all = true;\n\n          _this.$store.dispatch('wipeUserDevices', userid).then(function () {\n            _this.loading.wipe = false;\n            _this.loading.all = false;\n          });\n        }\n      }, true);\n    },\n    deleteUser: function deleteUser() {\n      var _this2 = this;\n\n      var userid = this.user.id;\n      OC.dialogs.confirmDestructive(t('settings', 'Fully delete {userid}\\'s account including all their personal files, app data, etc.', {\n        userid: userid\n      }), t('settings', 'Account deletion'), {\n        type: OC.dialogs.YES_NO_BUTTONS,\n        confirm: t('settings', 'Delete {userid}\\'s account', {\n          userid: userid\n        }),\n        confirmClasses: 'error',\n        cancel: t('settings', 'Cancel')\n      }, function (result) {\n        if (result) {\n          _this2.loading.delete = true;\n          _this2.loading.all = true;\n          return _this2.$store.dispatch('deleteUser', userid).then(function () {\n            _this2.loading.delete = false;\n            _this2.loading.all = false;\n          });\n        }\n      }, true);\n    },\n    enableDisableUser: function enableDisableUser() {\n      var _this3 = this;\n\n      this.loading.delete = true;\n      this.loading.all = true;\n      var userid = this.user.id;\n      var enabled = !this.user.enabled;\n      return this.$store.dispatch('enableDisableUser', {\n        userid: userid,\n        enabled: enabled\n      }).then(function () {\n        _this3.loading.delete = false;\n        _this3.loading.all = false;\n      });\n    },\n\n    /**\n     * Set user displayName\n     *\n     * @param {string} displayName The display name\n     */\n    updateDisplayName: function updateDisplayName() {\n      var _this4 = this;\n\n      var displayName = this.$refs.displayName.value;\n      this.loading.displayName = true;\n      this.$store.dispatch('setUserData', {\n        userid: this.user.id,\n        key: 'displayname',\n        value: displayName\n      }).then(function () {\n        _this4.loading.displayName = false;\n        _this4.$refs.displayName.value = displayName;\n      });\n    },\n\n    /**\n     * Set user password\n     *\n     * @param {string} password The email adress\n     */\n    updatePassword: function updatePassword() {\n      var _this5 = this;\n\n      var password = this.$refs.password.value;\n      this.loading.password = true;\n      this.$store.dispatch('setUserData', {\n        userid: this.user.id,\n        key: 'password',\n        value: password\n      }).then(function () {\n        _this5.loading.password = false;\n        _this5.$refs.password.value = ''; // empty & show placeholder\n      });\n    },\n\n    /**\n     * Set user mailAddress\n     *\n     * @param {string} mailAddress The email adress\n     */\n    updateEmail: function updateEmail() {\n      var _this6 = this;\n\n      var mailAddress = this.$refs.mailAddress.value;\n      this.loading.mailAddress = true;\n      this.$store.dispatch('setUserData', {\n        userid: this.user.id,\n        key: 'email',\n        value: mailAddress\n      }).then(function () {\n        _this6.loading.mailAddress = false;\n        _this6.$refs.mailAddress.value = mailAddress;\n      });\n    },\n\n    /**\n     * Create a new group and add user to it\n     *\n     * @param {string} gid Group id\n     */\n    createGroup: function createGroup(gid) {\n      var _this7 = this;\n\n      return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n        var userid;\n        return regeneratorRuntime.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _this7.loading = {\n                  groups: true,\n                  subadmins: true\n                };\n                _context.prev = 1;\n                _context.next = 4;\n                return _this7.$store.dispatch('addGroup', gid);\n\n              case 4:\n                userid = _this7.user.id;\n                _context.next = 7;\n                return _this7.$store.dispatch('addUserGroup', {\n                  userid: userid,\n                  gid: gid\n                });\n\n              case 7:\n                _context.next = 12;\n                break;\n\n              case 9:\n                _context.prev = 9;\n                _context.t0 = _context[\"catch\"](1);\n                console.error(_context.t0);\n\n              case 12:\n                _context.prev = 12;\n                _this7.loading = {\n                  groups: false,\n                  subadmins: false\n                };\n                return _context.finish(12);\n\n              case 15:\n                return _context.abrupt(\"return\", _this7.$store.getters.getGroups[_this7.groups.length]);\n\n              case 16:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee, null, [[1, 9, 12, 15]]);\n      }))();\n    },\n\n    /**\n     * Add user to group\n     *\n     * @param {object} group Group object\n     */\n    addUserGroup: function addUserGroup(group) {\n      var _this8 = this;\n\n      return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {\n        var userid, gid;\n        return regeneratorRuntime.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                if (!(group.canAdd === false)) {\n                  _context2.next = 2;\n                  break;\n                }\n\n                return _context2.abrupt(\"return\", false);\n\n              case 2:\n                _this8.loading.groups = true;\n                userid = _this8.user.id;\n                gid = group.id;\n                _context2.prev = 5;\n                _context2.next = 8;\n                return _this8.$store.dispatch('addUserGroup', {\n                  userid: userid,\n                  gid: gid\n                });\n\n              case 8:\n                _context2.next = 13;\n                break;\n\n              case 10:\n                _context2.prev = 10;\n                _context2.t0 = _context2[\"catch\"](5);\n                console.error(_context2.t0);\n\n              case 13:\n                _context2.prev = 13;\n                _this8.loading.groups = false;\n                return _context2.finish(13);\n\n              case 16:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2, null, [[5, 10, 13, 16]]);\n      }))();\n    },\n\n    /**\n     * Remove user from group\n     *\n     * @param {object} group Group object\n     */\n    removeUserGroup: function removeUserGroup(group) {\n      var _this9 = this;\n\n      return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {\n        var userid, gid;\n        return regeneratorRuntime.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                if (!(group.canRemove === false)) {\n                  _context3.next = 2;\n                  break;\n                }\n\n                return _context3.abrupt(\"return\", false);\n\n              case 2:\n                _this9.loading.groups = true;\n                userid = _this9.user.id;\n                gid = group.id;\n                _context3.prev = 5;\n                _context3.next = 8;\n                return _this9.$store.dispatch('removeUserGroup', {\n                  userid: userid,\n                  gid: gid\n                });\n\n              case 8:\n                _this9.loading.groups = false; // remove user from current list if current list is the removed group\n\n                if (_this9.$route.params.selectedGroup === gid) {\n                  _this9.$store.commit('deleteUser', userid);\n                }\n\n                _context3.next = 15;\n                break;\n\n              case 12:\n                _context3.prev = 12;\n                _context3.t0 = _context3[\"catch\"](5);\n                _this9.loading.groups = false;\n\n              case 15:\n              case \"end\":\n                return _context3.stop();\n            }\n          }\n        }, _callee3, null, [[5, 12]]);\n      }))();\n    },\n\n    /**\n     * Add user to group\n     *\n     * @param {object} group Group object\n     */\n    addUserSubAdmin: function addUserSubAdmin(group) {\n      var _this10 = this;\n\n      return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4() {\n        var userid, gid;\n        return regeneratorRuntime.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                _this10.loading.subadmins = true;\n                userid = _this10.user.id;\n                gid = group.id;\n                _context4.prev = 3;\n                _context4.next = 6;\n                return _this10.$store.dispatch('addUserSubAdmin', {\n                  userid: userid,\n                  gid: gid\n                });\n\n              case 6:\n                _this10.loading.subadmins = false;\n                _context4.next = 12;\n                break;\n\n              case 9:\n                _context4.prev = 9;\n                _context4.t0 = _context4[\"catch\"](3);\n                console.error(_context4.t0);\n\n              case 12:\n              case \"end\":\n                return _context4.stop();\n            }\n          }\n        }, _callee4, null, [[3, 9]]);\n      }))();\n    },\n\n    /**\n     * Remove user from group\n     *\n     * @param {object} group Group object\n     */\n    removeUserSubAdmin: function removeUserSubAdmin(group) {\n      var _this11 = this;\n\n      return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5() {\n        var userid, gid;\n        return regeneratorRuntime.wrap(function _callee5$(_context5) {\n          while (1) {\n            switch (_context5.prev = _context5.next) {\n              case 0:\n                _this11.loading.subadmins = true;\n                userid = _this11.user.id;\n                gid = group.id;\n                _context5.prev = 3;\n                _context5.next = 6;\n                return _this11.$store.dispatch('removeUserSubAdmin', {\n                  userid: userid,\n                  gid: gid\n                });\n\n              case 6:\n                _context5.next = 11;\n                break;\n\n              case 8:\n                _context5.prev = 8;\n                _context5.t0 = _context5[\"catch\"](3);\n                console.error(_context5.t0);\n\n              case 11:\n                _context5.prev = 11;\n                _this11.loading.subadmins = false;\n                return _context5.finish(11);\n\n              case 14:\n              case \"end\":\n                return _context5.stop();\n            }\n          }\n        }, _callee5, null, [[3, 8, 11, 14]]);\n      }))();\n    },\n\n    /**\n     * Dispatch quota set request\n     *\n     * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n     * @return {string}\n     */\n    setUserQuota: function setUserQuota() {\n      var _arguments = arguments,\n          _this12 = this;\n\n      return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee6() {\n        var quota;\n        return regeneratorRuntime.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                quota = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : 'none';\n                _this12.loading.quota = true; // ensure we only send the preset id\n\n                quota = quota.id ? quota.id : quota;\n                _context6.prev = 3;\n                _context6.next = 6;\n                return _this12.$store.dispatch('setUserData', {\n                  userid: _this12.user.id,\n                  key: 'quota',\n                  value: quota\n                });\n\n              case 6:\n                _context6.next = 11;\n                break;\n\n              case 8:\n                _context6.prev = 8;\n                _context6.t0 = _context6[\"catch\"](3);\n                console.error(_context6.t0);\n\n              case 11:\n                _context6.prev = 11;\n                _this12.loading.quota = false;\n                return _context6.finish(11);\n\n              case 14:\n                return _context6.abrupt(\"return\", quota);\n\n              case 15:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6, null, [[3, 8, 11, 14]]);\n      }))();\n    },\n\n    /**\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     * @return {Promise|boolean}\n     */\n    validateQuota: function validateQuota(quota) {\n      // only used for new presets sent through @Tag\n      var validQuota = OC.Util.computerFileSize(quota);\n\n      if (validQuota !== null && validQuota >= 0) {\n        // unify format output\n        return this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n      } // if no valid do not change\n\n\n      return false;\n    },\n\n    /**\n     * Dispatch language set request\n     *\n     * @param {object} lang language object {code:'en', name:'English'}\n     * @return {object}\n     */\n    setUserLanguage: function setUserLanguage(lang) {\n      var _this13 = this;\n\n      return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee7() {\n        return regeneratorRuntime.wrap(function _callee7$(_context7) {\n          while (1) {\n            switch (_context7.prev = _context7.next) {\n              case 0:\n                _this13.loading.languages = true; // ensure we only send the preset id\n\n                _context7.prev = 1;\n                _context7.next = 4;\n                return _this13.$store.dispatch('setUserData', {\n                  userid: _this13.user.id,\n                  key: 'language',\n                  value: lang.code\n                });\n\n              case 4:\n                _context7.next = 9;\n                break;\n\n              case 6:\n                _context7.prev = 6;\n                _context7.t0 = _context7[\"catch\"](1);\n                console.error(_context7.t0);\n\n              case 9:\n                _context7.prev = 9;\n                _this13.loading.languages = false;\n                return _context7.finish(9);\n\n              case 12:\n                return _context7.abrupt(\"return\", lang);\n\n              case 13:\n              case \"end\":\n                return _context7.stop();\n            }\n          }\n        }, _callee7, null, [[1, 6, 9, 12]]);\n      }))();\n    },\n\n    /**\n     * Dispatch new welcome mail request\n     */\n    sendWelcomeMail: function sendWelcomeMail() {\n      var _this14 = this;\n\n      this.loading.all = true;\n      this.$store.dispatch('sendWelcomeMail', this.user.id).then(function (success) {\n        if (success) {\n          // Show feedback to indicate the success\n          _this14.feedbackMessage = t('setting', 'Welcome mail sent!');\n          setTimeout(function () {\n            _this14.feedbackMessage = '';\n          }, 2000);\n        }\n\n        _this14.loading.all = false;\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//\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//\nimport PopoverMenu from '@nextcloud/vue/dist/Components/PopoverMenu';\nimport Actions from '@nextcloud/vue/dist/Components/Actions';\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton';\nimport ClickOutside from 'vue-click-outside';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport UserRowMixin from '../../mixins/UserRowMixin';\nexport default {\n  name: 'UserRowSimple',\n  components: {\n    PopoverMenu: PopoverMenu,\n    ActionButton: ActionButton,\n    Actions: Actions\n  },\n  directives: {\n    ClickOutside: ClickOutside\n  },\n  mixins: [UserRowMixin],\n  props: {\n    user: {\n      type: Object,\n      required: true\n    },\n    loading: {\n      type: Object,\n      required: true\n    },\n    showConfig: {\n      type: Object,\n      required: true\n    },\n    userActions: {\n      type: Array,\n      required: true\n    },\n    openedMenu: {\n      type: Boolean,\n      required: true\n    },\n    feedbackMessage: {\n      type: String,\n      required: true\n    },\n    subAdminsGroups: {\n      type: Array,\n      required: true\n    },\n    settings: {\n      type: Object,\n      required: true\n    }\n  },\n  computed: {\n    userGroupsLabels: function userGroupsLabels() {\n      return this.userGroups.map(function (group) {\n        return group.name;\n      }).join(', ');\n    },\n    userSubAdminsGroupsLabels: function userSubAdminsGroupsLabels() {\n      return this.userSubAdminsGroups.map(function (group) {\n        return group.name;\n      }).join(', ');\n    },\n    usedSpace: function usedSpace() {\n      if (this.user.quota.used) {\n        return t('settings', '{size} used', {\n          size: OC.Util.humanFileSize(this.user.quota.used)\n        });\n      }\n\n      return t('settings', '{size} used', {\n        size: OC.Util.humanFileSize(0)\n      });\n    },\n    canEdit: function canEdit() {\n      return getCurrentUser().uid !== this.user.id || this.settings.isAdmin;\n    },\n    userQuota: function userQuota() {\n      var quota = this.user.quota.quota;\n\n      if (quota === 'default') {\n        quota = this.settings.defaultQuota;\n\n        if (quota !== 'none') {\n          // convert to numeric value to match what the server would usually return\n          quota = OC.Util.computerFileSize(quota);\n        }\n      } // when the default quota is unlimited, the server returns -3 here, map it to \"none\"\n\n\n      if (quota === 'none' || quota === -3) {\n        return t('settings', 'Unlimited');\n      } else if (quota >= 0) {\n        return OC.Util.humanFileSize(quota);\n      }\n\n      return OC.Util.humanFileSize(0);\n    }\n  },\n  methods: {\n    toggleMenu: function toggleMenu() {\n      this.$emit('update:openedMenu', !this.openedMenu);\n    },\n    hideMenu: function hideMenu() {\n      this.$emit('update:openedMenu', false);\n    },\n    toggleEdit: function toggleEdit() {\n      this.$emit('update:editing', true);\n    }\n  }\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\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//\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//\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//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton';\nimport AppContent from '@nextcloud/vue/dist/Components/AppContent';\nimport AppNavigation from '@nextcloud/vue/dist/Components/AppNavigation';\nimport AppNavigationCaption from '@nextcloud/vue/dist/Components/AppNavigationCaption';\nimport AppNavigationCounter from '@nextcloud/vue/dist/Components/AppNavigationCounter';\nimport AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem';\nimport AppNavigationNew from '@nextcloud/vue/dist/Components/AppNavigationNew';\nimport AppNavigationSettings from '@nextcloud/vue/dist/Components/AppNavigationSettings';\nimport axios from '@nextcloud/axios';\nimport Content from '@nextcloud/vue/dist/Components/Content';\nimport { generateUrl } from '@nextcloud/router';\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect';\nimport Vue from 'vue';\nimport VueLocalStorage from 'vue-localstorage';\nimport UserList from '../components/UserList';\nVue.use(VueLocalStorage);\nexport default {\n  name: 'Users',\n  components: {\n    ActionButton: ActionButton,\n    AppContent: AppContent,\n    AppNavigation: AppNavigation,\n    AppNavigationCaption: AppNavigationCaption,\n    AppNavigationCounter: AppNavigationCounter,\n    AppNavigationItem: AppNavigationItem,\n    AppNavigationNew: AppNavigationNew,\n    AppNavigationSettings: AppNavigationSettings,\n    Content: Content,\n    Multiselect: Multiselect,\n    UserList: UserList\n  },\n  props: {\n    selectedGroup: {\n      type: String,\n      default: null\n    }\n  },\n  data: function data() {\n    return {\n      // default quota is set to unlimited\n      unlimitedQuota: {\n        id: 'none',\n        label: t('settings', 'Unlimited')\n      },\n      // temporary value used for multiselect change\n      selectedQuota: false,\n      externalActions: [],\n      loadingAddGroup: false,\n      loadingSendMail: false,\n      showConfig: {\n        showStoragePath: false,\n        showUserBackend: false,\n        showLastLogin: false,\n        showNewUserForm: false,\n        showLanguages: false\n      }\n    };\n  },\n  computed: {\n    selectedGroupDecoded: function selectedGroupDecoded() {\n      return this.selectedGroup ? decodeURIComponent(this.selectedGroup) : null;\n    },\n    users: function users() {\n      return this.$store.getters.getUsers;\n    },\n    groups: function groups() {\n      return this.$store.getters.getGroups;\n    },\n    usersOffset: function usersOffset() {\n      return this.$store.getters.getUsersOffset;\n    },\n    usersLimit: function usersLimit() {\n      return this.$store.getters.getUsersLimit;\n    },\n    // Local settings\n    showLanguages: {\n      get: function get() {\n        return this.getLocalstorage('showLanguages');\n      },\n      set: function set(status) {\n        this.setLocalStorage('showLanguages', status);\n      }\n    },\n    showLastLogin: {\n      get: function get() {\n        return this.getLocalstorage('showLastLogin');\n      },\n      set: function set(status) {\n        this.setLocalStorage('showLastLogin', status);\n      }\n    },\n    showUserBackend: {\n      get: function get() {\n        return this.getLocalstorage('showUserBackend');\n      },\n      set: function set(status) {\n        this.setLocalStorage('showUserBackend', status);\n      }\n    },\n    showStoragePath: {\n      get: function get() {\n        return this.getLocalstorage('showStoragePath');\n      },\n      set: function set(status) {\n        this.setLocalStorage('showStoragePath', status);\n      }\n    },\n    userCount: function userCount() {\n      return this.$store.getters.getUserCount;\n    },\n    settings: function settings() {\n      return this.$store.getters.getServerData;\n    },\n    // default quota\n    quotaOptions: function quotaOptions() {\n      // convert the preset array into objects\n      var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {\n        return acc.concat({\n          id: cur,\n          label: cur\n        });\n      }, []); // add default presets\n\n      if (this.settings.allowUnlimitedQuota) {\n        quotaPreset.unshift(this.unlimitedQuota);\n      }\n\n      return quotaPreset;\n    },\n    // mapping saved values to objects\n    defaultQuota: {\n      get: function get() {\n        if (this.selectedQuota !== false) {\n          return this.selectedQuota;\n        }\n\n        if (this.settings.defaultQuota !== this.unlimitedQuota.id && OC.Util.computerFileSize(this.settings.defaultQuota) >= 0) {\n          // if value is valid, let's map the quotaOptions or return custom quota\n          return {\n            id: this.settings.defaultQuota,\n            label: this.settings.defaultQuota\n          };\n        }\n\n        return this.unlimitedQuota; // unlimited\n      },\n      set: function set(quota) {\n        this.selectedQuota = quota;\n      }\n    },\n    sendWelcomeMail: {\n      get: function get() {\n        return this.settings.newUserSendEmail;\n      },\n      set: function set(value) {\n        var _this = this;\n\n        return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n          return regeneratorRuntime.wrap(function _callee$(_context) {\n            while (1) {\n              switch (_context.prev = _context.next) {\n                case 0:\n                  _context.prev = 0;\n                  _this.loadingSendMail = true;\n\n                  _this.$store.commit('setServerData', _objectSpread(_objectSpread({}, _this.settings), {}, {\n                    newUserSendEmail: value\n                  }));\n\n                  _context.next = 5;\n                  return axios.post(generateUrl('/settings/users/preferences/newUser.sendEmail'), {\n                    value: value ? 'yes' : 'no'\n                  });\n\n                case 5:\n                  _context.next = 10;\n                  break;\n\n                case 7:\n                  _context.prev = 7;\n                  _context.t0 = _context[\"catch\"](0);\n                  console.error('could not update newUser.sendEmail preference: ' + _context.t0.message, _context.t0);\n\n                case 10:\n                  _context.prev = 10;\n                  _this.loadingSendMail = false;\n                  return _context.finish(10);\n\n                case 13:\n                case \"end\":\n                  return _context.stop();\n              }\n            }\n          }, _callee, null, [[0, 7, 10, 13]]);\n        }))();\n      }\n    },\n    groupList: function groupList() {\n      var _this2 = this;\n\n      var groups = Array.isArray(this.groups) ? this.groups : [];\n      return groups // filter out disabled and admin\n      .filter(function (group) {\n        return group.id !== 'disabled' && group.id !== 'admin';\n      }).map(function (group) {\n        return _this2.formatGroupMenu(group);\n      });\n    },\n    adminGroupMenu: function adminGroupMenu() {\n      return this.formatGroupMenu(this.groups.find(function (group) {\n        return group.id === 'admin';\n      }));\n    },\n    disabledGroupMenu: function disabledGroupMenu() {\n      return this.formatGroupMenu(this.groups.find(function (group) {\n        return group.id === 'disabled';\n      }));\n    }\n  },\n  beforeMount: function beforeMount() {\n    this.$store.commit('initGroups', {\n      groups: this.$store.getters.getServerData.groups,\n      orderBy: this.$store.getters.getServerData.sortGroups,\n      userCount: this.$store.getters.getServerData.userCount\n    });\n    this.$store.dispatch('getPasswordPolicyMinLength');\n  },\n  created: function created() {\n    // init the OCA.Settings.UserList object\n    // and add the registerAction method\n    Object.assign(OCA, {\n      Settings: {\n        UserList: {\n          registerAction: this.registerAction\n        }\n      }\n    });\n  },\n  methods: {\n    showNewUserMenu: function showNewUserMenu() {\n      this.showConfig.showNewUserForm = true;\n\n      if (this.showConfig.showNewUserForm) {\n        Vue.nextTick(function () {\n          window.newusername.focus();\n        });\n      }\n    },\n    getLocalstorage: function getLocalstorage(key) {\n      // force initialization\n      var localConfig = this.$localStorage.get(key); // if localstorage is null, fallback to original values\n\n      this.showConfig[key] = localConfig !== null ? localConfig === 'true' : this.showConfig[key];\n      return this.showConfig[key];\n    },\n    setLocalStorage: function setLocalStorage(key, status) {\n      this.showConfig[key] = status;\n      this.$localStorage.set(key, status);\n      return status;\n    },\n    removeGroup: function removeGroup(groupid) {\n      var self = this; // TODO migrate to a vue js confirm dialog component\n\n      OC.dialogs.confirm(t('settings', 'You are about to remove the group {group}. The users will NOT be deleted.', {\n        group: groupid\n      }), t('settings', 'Please confirm the group removal '), function (success) {\n        if (success) {\n          self.$store.dispatch('removeGroup', groupid);\n        }\n      });\n    },\n\n    /**\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     */\n    setDefaultQuota: function setDefaultQuota() {\n      var _this3 = this;\n\n      var quota = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'none';\n      this.$store.dispatch('setAppConfig', {\n        app: 'files',\n        key: 'default_quota',\n        // ensure we only send the preset id\n        value: quota.id ? quota.id : quota\n      }).then(function () {\n        if (_typeof(quota) !== 'object') {\n          quota = {\n            id: quota,\n            label: quota\n          };\n        }\n\n        _this3.defaultQuota = quota;\n      });\n    },\n\n    /**\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     * @return {Promise|boolean}\n     */\n    validateQuota: function validateQuota(quota) {\n      // only used for new presets sent through @Tag\n      var validQuota = OC.Util.computerFileSize(quota);\n\n      if (validQuota === null) {\n        return this.setDefaultQuota('none');\n      } else {\n        // unify format output\n        return this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n      }\n    },\n\n    /**\n     * Register a new action for the user menu\n     *\n     * @param {string} icon the icon class\n     * @param {string} text the text to display\n     * @param {Function} action the function to run\n     * @return {Array}\n     */\n    registerAction: function registerAction(icon, text, action) {\n      this.externalActions.push({\n        icon: icon,\n        text: text,\n        action: action\n      });\n      return this.externalActions;\n    },\n\n    /**\n     * Create a new group\n     *\n     * @param {string} gid The group id\n     */\n    createGroup: function createGroup(gid) {\n      var _this4 = this;\n\n      return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {\n        return regeneratorRuntime.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                if (!(gid.trim() === '')) {\n                  _context2.next = 2;\n                  break;\n                }\n\n                return _context2.abrupt(\"return\");\n\n              case 2:\n                _context2.prev = 2;\n                _this4.loadingAddGroup = true;\n                _context2.next = 6;\n                return _this4.$store.dispatch('addGroup', gid.trim());\n\n              case 6:\n                _this4.hideAddGroupForm();\n\n                _context2.next = 9;\n                return _this4.$router.push({\n                  name: 'group',\n                  params: {\n                    selectedGroup: encodeURIComponent(gid.trim())\n                  }\n                });\n\n              case 9:\n                _context2.next = 14;\n                break;\n\n              case 11:\n                _context2.prev = 11;\n                _context2.t0 = _context2[\"catch\"](2);\n\n                _this4.showAddGroupForm();\n\n              case 14:\n                _context2.prev = 14;\n                _this4.loadingAddGroup = false;\n                return _context2.finish(14);\n\n              case 17:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2, null, [[2, 11, 14, 17]]);\n      }))();\n    },\n    showAddGroupForm: function showAddGroupForm() {\n      var _this5 = this;\n\n      this.$refs.addGroup.editingActive = true;\n      this.$refs.addGroup.onMenuToggle(false);\n      this.$nextTick(function () {\n        _this5.$refs.addGroup.$refs.editingInput.focusInput();\n      });\n    },\n    hideAddGroupForm: function hideAddGroupForm() {\n      this.$refs.addGroup.editingActive = false;\n      this.$refs.addGroup.editingValue = '';\n    },\n\n    /**\n     * Format a group to a menu entry\n     *\n     * @param {object} group the group\n     * @return {object}\n     */\n    formatGroupMenu: function formatGroupMenu(group) {\n      var item = {};\n\n      if (typeof group === 'undefined') {\n        return {};\n      }\n\n      item.id = group.id;\n      item.title = group.name;\n      item.usercount = group.usercount; // users count for all groups\n\n      if (group.usercount - group.disabled > 0) {\n        item.count = group.usercount - group.disabled;\n      }\n\n      return item;\n    }\n  }\n};","// Imports\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(function(i){return i[1]});\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".row--menu-opened[data-v-77960baa] {\\n  z-index: 1 !important;\\n}\\n.row[data-v-77960baa] .multiselect__single {\\n  z-index: auto !important;\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(function(i){return i[1]});\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".cellText {\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n}\\n.icon-more {\\n  background-color: var(--color-main-background);\\n  border: 0;\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(function(i){return i[1]});\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation__list #addgroup[data-v-889b7562] .app-navigation-entry__utils {\\n  display: none;\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(function(i){return i[1]});\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.modal-wrapper[data-v-6cba3aca] {\\n\\tmargin: 2vh 0;\\n\\talign-items: flex-start;\\n}\\n.modal__content[data-v-6cba3aca] {\\n\\tdisplay: flex;\\n\\tpadding: 20px;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n\\ttext-align: center;\\n\\toverflow: auto;\\n}\\n.modal__item[data-v-6cba3aca] {\\n\\tmargin-bottom: 16px;\\n\\twidth: 100%;\\n}\\n.modal__item[data-v-6cba3aca]:not(:focus):not(:active) {\\n\\tborder-color: var(--color-border-dark);\\n}\\n.modal__item[data-v-6cba3aca] .multiselect {\\n\\twidth: 100%;\\n}\\n.user-actions[data-v-6cba3aca] {\\n\\tmargin-top: 20px;\\n}\\n.modal__content[data-v-6cba3aca] .multiselect__single {\\n\\ttext-align: left;\\n\\tbox-sizing: border-box;\\n}\\n.modal__content[data-v-6cba3aca] .multiselect__content-wrapper {\\n\\tbox-sizing: border-box;\\n}\\n.row[data-v-6cba3aca] .multiselect__single {\\n\\tz-index: auto !important;\\n}\\n\\n/* fake input for groups validation */\\ninput#newgroups[data-v-6cba3aca] {\\n\\tposition: absolute;\\n\\topacity: 0;\\n\\t/* The \\\"hidden\\\" input is behind the Multiselect, so in general it does\\n\\t * not receives clicks. However, with Firefox, after the validation\\n\\t * fails, it will receive the first click done on it, so its width needs\\n\\t * to be set to 0 to prevent that (\\\"pointer-events: none\\\" does not\\n\\t * prevent it). */\\n\\twidth: 0;\\n}\\n\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&lang=scss&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render, staticRenderFns } from \"./UserList.vue?vue&type=template&id=6cba3aca&scoped=true&\"\nimport script from \"./UserList.vue?vue&type=script&lang=js&\"\nexport * from \"./UserList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"6cba3aca\",\n  null\n  \n)\n\n/* hot reload */\nif (module.hot) {\n  var api = require(\"/srv/www/htdocs/server/node_modules/vue-hot-reload-api/dist/index.js\")\n  api.install(require('vue'))\n  if (api.compatible) {\n    module.hot.accept()\n    if (!api.isRecorded('6cba3aca')) {\n      api.createRecord('6cba3aca', component.options)\n    } else {\n      api.reload('6cba3aca', component.options)\n    }\n    module.hot.accept(\"./UserList.vue?vue&type=template&id=6cba3aca&scoped=true&\", function () {\n      api.rerender('6cba3aca', {\n        render: render,\n        staticRenderFns: staticRenderFns\n      })\n    })\n  }\n}\ncomponent.options.__file = \"apps/settings/src/components/UserList.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UserRow.vue?vue&type=template&id=77960baa&scoped=true&\"\nimport script from \"./UserRow.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"77960baa\",\n  null\n  \n)\n\n/* hot reload */\nif (module.hot) {\n  var api = require(\"/srv/www/htdocs/server/node_modules/vue-hot-reload-api/dist/index.js\")\n  api.install(require('vue'))\n  if (api.compatible) {\n    module.hot.accept()\n    if (!api.isRecorded('77960baa')) {\n      api.createRecord('77960baa', component.options)\n    } else {\n      api.reload('77960baa', component.options)\n    }\n    module.hot.accept(\"./UserRow.vue?vue&type=template&id=77960baa&scoped=true&\", function () {\n      api.rerender('77960baa', {\n        render: render,\n        staticRenderFns: staticRenderFns\n      })\n    })\n  }\n}\ncomponent.options.__file = \"apps/settings/src/components/UserList/UserRow.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UserRowSimple.vue?vue&type=template&id=ff154a08&\"\nimport script from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserRowSimple.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (module.hot) {\n  var api = require(\"/srv/www/htdocs/server/node_modules/vue-hot-reload-api/dist/index.js\")\n  api.install(require('vue'))\n  if (api.compatible) {\n    module.hot.accept()\n    if (!api.isRecorded('ff154a08')) {\n      api.createRecord('ff154a08', component.options)\n    } else {\n      api.reload('ff154a08', component.options)\n    }\n    module.hot.accept(\"./UserRowSimple.vue?vue&type=template&id=ff154a08&\", function () {\n      api.rerender('ff154a08', {\n        render: render,\n        staticRenderFns: staticRenderFns\n      })\n    })\n  }\n}\ncomponent.options.__file = \"apps/settings/src/components/UserList/UserRowSimple.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Users.vue?vue&type=template&id=889b7562&scoped=true&\"\nimport script from \"./Users.vue?vue&type=script&lang=js&\"\nexport * from \"./Users.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"889b7562\",\n  null\n  \n)\n\n/* hot reload */\nif (module.hot) {\n  var api = require(\"/srv/www/htdocs/server/node_modules/vue-hot-reload-api/dist/index.js\")\n  api.install(require('vue'))\n  if (api.compatible) {\n    module.hot.accept()\n    if (!api.isRecorded('889b7562')) {\n      api.createRecord('889b7562', component.options)\n    } else {\n      api.reload('889b7562', component.options)\n    }\n    module.hot.accept(\"./Users.vue?vue&type=template&id=889b7562&scoped=true&\", function () {\n      api.rerender('889b7562', {\n        render: render,\n        staticRenderFns: staticRenderFns\n      })\n    })\n  }\n}\ncomponent.options.__file = \"apps/settings/src/views/Users.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=script&lang=js&\"","var render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"user-list-grid\",\n      attrs: { id: \"app-content\" },\n      on: {\n        \"&scroll\": function ($event) {\n          return _vm.onScroll.apply(null, arguments)\n        },\n      },\n    },\n    [\n      _vm.showConfig.showNewUserForm\n        ? _c(\"Modal\", { on: { close: _vm.closeModal } }, [\n            _c(\n              \"form\",\n              {\n                staticClass: \"modal__content\",\n                attrs: { id: \"new-user\", disabled: _vm.loading.all },\n                on: {\n                  submit: function ($event) {\n                    $event.preventDefault()\n                    return _vm.createUser.apply(null, arguments)\n                  },\n                },\n              },\n              [\n                _c(\"h2\", [_vm._v(_vm._s(_vm.t(\"settings\", \"New user\")))]),\n                _vm._v(\" \"),\n                _c(\"input\", {\n                  directives: [\n                    {\n                      name: \"model\",\n                      rawName: \"v-model\",\n                      value: _vm.newUser.id,\n                      expression: \"newUser.id\",\n                    },\n                  ],\n                  ref: \"newusername\",\n                  staticClass: \"modal__item\",\n                  attrs: {\n                    id: \"newusername\",\n                    disabled: _vm.settings.newUserGenerateUserID,\n                    placeholder: _vm.settings.newUserGenerateUserID\n                      ? _vm.t(\"settings\", \"Will be autogenerated\")\n                      : _vm.t(\"settings\", \"Username\"),\n                    autocapitalize: \"none\",\n                    autocomplete: \"off\",\n                    autocorrect: \"off\",\n                    name: \"username\",\n                    pattern: \"[a-zA-Z0-9 _\\\\.@\\\\-']+\",\n                    required: \"\",\n                    type: \"text\",\n                  },\n                  domProps: { value: _vm.newUser.id },\n                  on: {\n                    input: function ($event) {\n                      if ($event.target.composing) {\n                        return\n                      }\n                      _vm.$set(_vm.newUser, \"id\", $event.target.value)\n                    },\n                  },\n                }),\n                _vm._v(\" \"),\n                _c(\"input\", {\n                  directives: [\n                    {\n                      name: \"model\",\n                      rawName: \"v-model\",\n                      value: _vm.newUser.displayName,\n                      expression: \"newUser.displayName\",\n                    },\n                  ],\n                  staticClass: \"modal__item\",\n                  attrs: {\n                    id: \"newdisplayname\",\n                    placeholder: _vm.t(\"settings\", \"Display name\"),\n                    autocapitalize: \"none\",\n                    autocomplete: \"off\",\n                    autocorrect: \"off\",\n                    name: \"displayname\",\n                    type: \"text\",\n                  },\n                  domProps: { value: _vm.newUser.displayName },\n                  on: {\n                    input: function ($event) {\n                      if ($event.target.composing) {\n                        return\n                      }\n                      _vm.$set(_vm.newUser, \"displayName\", $event.target.value)\n                    },\n                  },\n                }),\n                _vm._v(\" \"),\n                _c(\"input\", {\n                  directives: [\n                    {\n                      name: \"model\",\n                      rawName: \"v-model\",\n                      value: _vm.newUser.password,\n                      expression: \"newUser.password\",\n                    },\n                  ],\n                  ref: \"newuserpassword\",\n                  staticClass: \"modal__item\",\n                  attrs: {\n                    id: \"newuserpassword\",\n                    minlength: _vm.minPasswordLength,\n                    placeholder: _vm.t(\"settings\", \"Password\"),\n                    required: _vm.newUser.mailAddress === \"\",\n                    autocapitalize: \"none\",\n                    autocomplete: \"new-password\",\n                    autocorrect: \"off\",\n                    name: \"password\",\n                    type: \"password\",\n                  },\n                  domProps: { value: _vm.newUser.password },\n                  on: {\n                    input: function ($event) {\n                      if ($event.target.composing) {\n                        return\n                      }\n                      _vm.$set(_vm.newUser, \"password\", $event.target.value)\n                    },\n                  },\n                }),\n                _vm._v(\" \"),\n                _c(\"input\", {\n                  directives: [\n                    {\n                      name: \"model\",\n                      rawName: \"v-model\",\n                      value: _vm.newUser.mailAddress,\n                      expression: \"newUser.mailAddress\",\n                    },\n                  ],\n                  staticClass: \"modal__item\",\n                  attrs: {\n                    id: \"newemail\",\n                    placeholder: _vm.t(\"settings\", \"Email\"),\n                    required:\n                      _vm.newUser.password === \"\" ||\n                      _vm.settings.newUserRequireEmail,\n                    autocapitalize: \"none\",\n                    autocomplete: \"off\",\n                    autocorrect: \"off\",\n                    name: \"email\",\n                    type: \"email\",\n                  },\n                  domProps: { value: _vm.newUser.mailAddress },\n                  on: {\n                    input: function ($event) {\n                      if ($event.target.composing) {\n                        return\n                      }\n                      _vm.$set(_vm.newUser, \"mailAddress\", $event.target.value)\n                    },\n                  },\n                }),\n                _vm._v(\" \"),\n                _c(\n                  \"div\",\n                  { staticClass: \"groups modal__item\" },\n                  [\n                    !_vm.settings.isAdmin\n                      ? _c(\"input\", {\n                          class: { \"icon-loading-small\": _vm.loading.groups },\n                          attrs: {\n                            id: \"newgroups\",\n                            required: !_vm.settings.isAdmin,\n                            tabindex: \"-1\",\n                            type: \"text\",\n                          },\n                          domProps: { value: _vm.newUser.groups },\n                        })\n                      : _vm._e(),\n                    _vm._v(\" \"),\n                    _c(\n                      \"Multiselect\",\n                      {\n                        staticClass: \"multiselect-vue\",\n                        attrs: {\n                          \"close-on-select\": false,\n                          disabled: _vm.loading.groups || _vm.loading.all,\n                          multiple: true,\n                          options: _vm.canAddGroups,\n                          placeholder: _vm.t(\"settings\", \"Add user to group\"),\n                          \"tag-width\": 60,\n                          taggable: true,\n                          label: \"name\",\n                          \"tag-placeholder\": \"create\",\n                          \"track-by\": \"id\",\n                        },\n                        on: { tag: _vm.createGroup },\n                        model: {\n                          value: _vm.newUser.groups,\n                          callback: function ($$v) {\n                            _vm.$set(_vm.newUser, \"groups\", $$v)\n                          },\n                          expression: \"newUser.groups\",\n                        },\n                      },\n                      [\n                        _c(\n                          \"span\",\n                          { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n                          [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n                        ),\n                      ]\n                    ),\n                  ],\n                  1\n                ),\n                _vm._v(\" \"),\n                _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n                  ? _c(\n                      \"div\",\n                      { staticClass: \"subadmins modal__item\" },\n                      [\n                        _c(\n                          \"Multiselect\",\n                          {\n                            staticClass: \"multiselect-vue\",\n                            attrs: {\n                              \"close-on-select\": false,\n                              multiple: true,\n                              options: _vm.subAdminsGroups,\n                              placeholder: _vm.t(\n                                \"settings\",\n                                \"Set user as admin for\"\n                              ),\n                              \"tag-width\": 60,\n                              label: \"name\",\n                              \"track-by\": \"id\",\n                            },\n                            model: {\n                              value: _vm.newUser.subAdminsGroups,\n                              callback: function ($$v) {\n                                _vm.$set(_vm.newUser, \"subAdminsGroups\", $$v)\n                              },\n                              expression: \"newUser.subAdminsGroups\",\n                            },\n                          },\n                          [\n                            _c(\n                              \"span\",\n                              { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n                              [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n                            ),\n                          ]\n                        ),\n                      ],\n                      1\n                    )\n                  : _vm._e(),\n                _vm._v(\" \"),\n                _c(\n                  \"div\",\n                  { staticClass: \"quota modal__item\" },\n                  [\n                    _c(\"Multiselect\", {\n                      staticClass: \"multiselect-vue\",\n                      attrs: {\n                        \"allow-empty\": false,\n                        options: _vm.quotaOptions,\n                        placeholder: _vm.t(\"settings\", \"Select user quota\"),\n                        taggable: true,\n                        label: \"label\",\n                        \"track-by\": \"id\",\n                      },\n                      on: { tag: _vm.validateQuota },\n                      model: {\n                        value: _vm.newUser.quota,\n                        callback: function ($$v) {\n                          _vm.$set(_vm.newUser, \"quota\", $$v)\n                        },\n                        expression: \"newUser.quota\",\n                      },\n                    }),\n                  ],\n                  1\n                ),\n                _vm._v(\" \"),\n                _vm.showConfig.showLanguages\n                  ? _c(\n                      \"div\",\n                      { staticClass: \"languages modal__item\" },\n                      [\n                        _c(\"Multiselect\", {\n                          staticClass: \"multiselect-vue\",\n                          attrs: {\n                            \"allow-empty\": false,\n                            options: _vm.languages,\n                            placeholder: _vm.t(\"settings\", \"Default language\"),\n                            \"group-label\": \"label\",\n                            \"group-values\": \"languages\",\n                            label: \"name\",\n                            \"track-by\": \"code\",\n                          },\n                          model: {\n                            value: _vm.newUser.language,\n                            callback: function ($$v) {\n                              _vm.$set(_vm.newUser, \"language\", $$v)\n                            },\n                            expression: \"newUser.language\",\n                          },\n                        }),\n                      ],\n                      1\n                    )\n                  : _vm._e(),\n                _vm._v(\" \"),\n                _vm.showConfig.showStoragePath\n                  ? _c(\"div\", { staticClass: \"storageLocation\" })\n                  : _vm._e(),\n                _vm._v(\" \"),\n                _vm.showConfig.showUserBackend\n                  ? _c(\"div\", { staticClass: \"userBackend\" })\n                  : _vm._e(),\n                _vm._v(\" \"),\n                _vm.showConfig.showLastLogin\n                  ? _c(\"div\", { staticClass: \"lastLogin\" })\n                  : _vm._e(),\n                _vm._v(\" \"),\n                _c(\"div\", { staticClass: \"user-actions\" }, [\n                  _c(\n                    \"button\",\n                    {\n                      staticClass: \"button primary\",\n                      attrs: { id: \"newsubmit\", type: \"submit\", value: \"\" },\n                    },\n                    [\n                      _vm._v(\n                        \"\\n\\t\\t\\t\\t\\t\" +\n                          _vm._s(_vm.t(\"settings\", \"Add a new user\")) +\n                          \"\\n\\t\\t\\t\\t\"\n                      ),\n                    ]\n                  ),\n                ]),\n              ]\n            ),\n          ])\n        : _vm._e(),\n      _vm._v(\" \"),\n      _c(\n        \"div\",\n        {\n          staticClass: \"row\",\n          class: { sticky: _vm.scrolled && !_vm.showConfig.showNewUserForm },\n          attrs: { id: \"grid-header\" },\n        },\n        [\n          _c(\"div\", { staticClass: \"avatar\", attrs: { id: \"headerAvatar\" } }),\n          _vm._v(\" \"),\n          _c(\"div\", { staticClass: \"name\", attrs: { id: \"headerName\" } }, [\n            _vm._v(\n              \"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Username\")) + \"\\n\\n\\t\\t\\t\"\n            ),\n            _c(\"div\", { staticClass: \"subtitle\" }, [\n              _vm._v(\n                \"\\n\\t\\t\\t\\t\" +\n                  _vm._s(_vm.t(\"settings\", \"Display name\")) +\n                  \"\\n\\t\\t\\t\"\n              ),\n            ]),\n          ]),\n          _vm._v(\" \"),\n          _c(\n            \"div\",\n            { staticClass: \"password\", attrs: { id: \"headerPassword\" } },\n            [\n              _vm._v(\n                \"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Password\")) + \"\\n\\t\\t\"\n              ),\n            ]\n          ),\n          _vm._v(\" \"),\n          _c(\n            \"div\",\n            { staticClass: \"mailAddress\", attrs: { id: \"headerAddress\" } },\n            [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Email\")) + \"\\n\\t\\t\")]\n          ),\n          _vm._v(\" \"),\n          _c(\"div\", { staticClass: \"groups\", attrs: { id: \"headerGroups\" } }, [\n            _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Groups\")) + \"\\n\\t\\t\"),\n          ]),\n          _vm._v(\" \"),\n          _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n            ? _c(\n                \"div\",\n                { staticClass: \"subadmins\", attrs: { id: \"headerSubAdmins\" } },\n                [\n                  _vm._v(\n                    \"\\n\\t\\t\\t\" +\n                      _vm._s(_vm.t(\"settings\", \"Group admin for\")) +\n                      \"\\n\\t\\t\"\n                  ),\n                ]\n              )\n            : _vm._e(),\n          _vm._v(\" \"),\n          _c(\"div\", { staticClass: \"quota\", attrs: { id: \"headerQuota\" } }, [\n            _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Quota\")) + \"\\n\\t\\t\"),\n          ]),\n          _vm._v(\" \"),\n          _vm.showConfig.showLanguages\n            ? _c(\n                \"div\",\n                { staticClass: \"languages\", attrs: { id: \"headerLanguages\" } },\n                [\n                  _vm._v(\n                    \"\\n\\t\\t\\t\" +\n                      _vm._s(_vm.t(\"settings\", \"Language\")) +\n                      \"\\n\\t\\t\"\n                  ),\n                ]\n              )\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath\n            ? _c(\"div\", { staticClass: \"headerUserBackend userBackend\" }, [\n                _vm.showConfig.showUserBackend\n                  ? _c(\"div\", { staticClass: \"userBackend\" }, [\n                      _vm._v(\n                        \"\\n\\t\\t\\t\\t\" +\n                          _vm._s(_vm.t(\"settings\", \"User backend\")) +\n                          \"\\n\\t\\t\\t\"\n                      ),\n                    ])\n                  : _vm._e(),\n                _vm._v(\" \"),\n                _vm.showConfig.showStoragePath\n                  ? _c(\"div\", { staticClass: \"subtitle storageLocation\" }, [\n                      _vm._v(\n                        \"\\n\\t\\t\\t\\t\" +\n                          _vm._s(_vm.t(\"settings\", \"Storage location\")) +\n                          \"\\n\\t\\t\\t\"\n                      ),\n                    ])\n                  : _vm._e(),\n              ])\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.showConfig.showLastLogin\n            ? _c(\"div\", { staticClass: \"headerLastLogin lastLogin\" }, [\n                _vm._v(\n                  \"\\n\\t\\t\\t\" +\n                    _vm._s(_vm.t(\"settings\", \"Last login\")) +\n                    \"\\n\\t\\t\"\n                ),\n              ])\n            : _vm._e(),\n          _vm._v(\" \"),\n          _c(\"div\", { staticClass: \"userActions\" }),\n        ]\n      ),\n      _vm._v(\" \"),\n      _vm._l(_vm.filteredUsers, function (user) {\n        return _c(\"user-row\", {\n          key: user.id,\n          attrs: {\n            \"external-actions\": _vm.externalActions,\n            groups: _vm.groups,\n            languages: _vm.languages,\n            \"quota-options\": _vm.quotaOptions,\n            settings: _vm.settings,\n            \"show-config\": _vm.showConfig,\n            \"sub-admins-groups\": _vm.subAdminsGroups,\n            user: user,\n          },\n        })\n      }),\n      _vm._v(\" \"),\n      _c(\n        \"InfiniteLoading\",\n        { ref: \"infiniteLoading\", on: { infinite: _vm.infiniteHandler } },\n        [\n          _c(\"div\", { attrs: { slot: \"spinner\" }, slot: \"spinner\" }, [\n            _c(\"div\", { staticClass: \"users-icon-loading icon-loading\" }),\n          ]),\n          _vm._v(\" \"),\n          _c(\"div\", { attrs: { slot: \"no-more\" }, slot: \"no-more\" }, [\n            _c(\"div\", { staticClass: \"users-list-end\" }),\n          ]),\n          _vm._v(\" \"),\n          _c(\"div\", { attrs: { slot: \"no-results\" }, slot: \"no-results\" }, [\n            _c(\"div\", { attrs: { id: \"emptycontent\" } }, [\n              _c(\"div\", { staticClass: \"icon-contacts-dark\" }),\n              _vm._v(\" \"),\n              _c(\"h2\", [_vm._v(_vm._s(_vm.t(\"settings\", \"No users in here\")))]),\n            ]),\n          ]),\n        ]\n      ),\n    ],\n    2\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return Object.keys(_vm.user).length === 1\n    ? _c(\"div\", { staticClass: \"row\", attrs: { \"data-id\": _vm.user.id } }, [\n        _c(\n          \"div\",\n          {\n            staticClass: \"avatar\",\n            class: {\n              \"icon-loading-small\":\n                _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe,\n            },\n          },\n          [\n            !_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe\n              ? _c(\"img\", {\n                  attrs: {\n                    src: _vm.generateAvatar(_vm.user.id, 32),\n                    srcset:\n                      _vm.generateAvatar(_vm.user.id, 64) +\n                      \" 2x, \" +\n                      _vm.generateAvatar(_vm.user.id, 128) +\n                      \" 4x\",\n                    alt: \"\",\n                    height: \"32\",\n                    width: \"32\",\n                  },\n                })\n              : _vm._e(),\n          ]\n        ),\n        _vm._v(\" \"),\n        _c(\"div\", { staticClass: \"name\" }, [\n          _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.user.id) + \"\\n\\t\"),\n        ]),\n        _vm._v(\" \"),\n        _c(\"div\", { staticClass: \"obfuscated\" }, [\n          _vm._v(\n            \"\\n\\t\\t\" +\n              _vm._s(\n                _vm.t(\n                  \"settings\",\n                  \"You do not have permissions to see the details of this user\"\n                )\n              ) +\n              \"\\n\\t\"\n          ),\n        ]),\n      ])\n    : !_vm.editing\n    ? _c(\"UserRowSimple\", {\n        class: { \"row--menu-opened\": _vm.openedMenu },\n        attrs: {\n          editing: _vm.editing,\n          \"feedback-message\": _vm.feedbackMessage,\n          groups: _vm.groups,\n          languages: _vm.languages,\n          loading: _vm.loading,\n          \"opened-menu\": _vm.openedMenu,\n          settings: _vm.settings,\n          \"show-config\": _vm.showConfig,\n          \"sub-admins-groups\": _vm.subAdminsGroups,\n          \"user-actions\": _vm.userActions,\n          user: _vm.user,\n        },\n        on: {\n          \"update:editing\": function ($event) {\n            _vm.editing = $event\n          },\n          \"update:openedMenu\": function ($event) {\n            _vm.openedMenu = $event\n          },\n          \"update:opened-menu\": function ($event) {\n            _vm.openedMenu = $event\n          },\n        },\n      })\n    : _c(\n        \"div\",\n        {\n          staticClass: \"row row--editable\",\n          class: {\n            disabled: _vm.loading.delete || _vm.loading.disable,\n            \"row--menu-opened\": _vm.openedMenu,\n          },\n          attrs: { \"data-id\": _vm.user.id },\n        },\n        [\n          _c(\n            \"div\",\n            {\n              staticClass: \"avatar\",\n              class: {\n                \"icon-loading-small\":\n                  _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe,\n              },\n            },\n            [\n              !_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe\n                ? _c(\"img\", {\n                    attrs: {\n                      src: _vm.generateAvatar(_vm.user.id, 32),\n                      srcset:\n                        _vm.generateAvatar(_vm.user.id, 64) +\n                        \" 2x, \" +\n                        _vm.generateAvatar(_vm.user.id, 128) +\n                        \" 4x\",\n                      alt: \"\",\n                      height: \"32\",\n                      width: \"32\",\n                    },\n                  })\n                : _vm._e(),\n            ]\n          ),\n          _vm._v(\" \"),\n          _vm.user.backendCapabilities.setDisplayName\n            ? _c(\"div\", { staticClass: \"displayName\" }, [\n                _c(\n                  \"form\",\n                  {\n                    staticClass: \"displayName\",\n                    class: { \"icon-loading-small\": _vm.loading.displayName },\n                    on: {\n                      submit: function ($event) {\n                        $event.preventDefault()\n                        return _vm.updateDisplayName.apply(null, arguments)\n                      },\n                    },\n                  },\n                  [\n                    _c(\"input\", {\n                      ref: \"displayName\",\n                      attrs: {\n                        id: \"displayName\" + _vm.user.id + _vm.rand,\n                        disabled: _vm.loading.displayName || _vm.loading.all,\n                        autocapitalize: \"off\",\n                        autocomplete: \"off\",\n                        autocorrect: \"off\",\n                        spellcheck: \"false\",\n                        type: \"text\",\n                      },\n                      domProps: { value: _vm.user.displayname },\n                    }),\n                    _vm._v(\" \"),\n                    _c(\"input\", {\n                      staticClass: \"icon-confirm\",\n                      attrs: { type: \"submit\", value: \"\" },\n                    }),\n                  ]\n                ),\n              ])\n            : _c(\"div\", { staticClass: \"name\" }, [\n                _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.user.id) + \"\\n\\t\\t\"),\n                _c(\"div\", { staticClass: \"displayName subtitle\" }, [\n                  _c(\n                    \"div\",\n                    {\n                      directives: [\n                        {\n                          name: \"tooltip\",\n                          rawName: \"v-tooltip\",\n                          value:\n                            _vm.user.displayname.length > 20\n                              ? _vm.user.displayname\n                              : \"\",\n                          expression:\n                            \"user.displayname.length > 20 ? user.displayname : ''\",\n                        },\n                      ],\n                      staticClass: \"cellText\",\n                    },\n                    [\n                      _vm._v(\n                        \"\\n\\t\\t\\t\\t\" + _vm._s(_vm.user.displayname) + \"\\n\\t\\t\\t\"\n                      ),\n                    ]\n                  ),\n                ]),\n              ]),\n          _vm._v(\" \"),\n          _vm.settings.canChangePassword &&\n          _vm.user.backendCapabilities.setPassword\n            ? _c(\n                \"form\",\n                {\n                  staticClass: \"password\",\n                  class: { \"icon-loading-small\": _vm.loading.password },\n                  on: {\n                    submit: function ($event) {\n                      $event.preventDefault()\n                      return _vm.updatePassword.apply(null, arguments)\n                    },\n                  },\n                },\n                [\n                  _c(\"input\", {\n                    ref: \"password\",\n                    attrs: {\n                      id: \"password\" + _vm.user.id + _vm.rand,\n                      disabled: _vm.loading.password || _vm.loading.all,\n                      minlength: _vm.minPasswordLength,\n                      placeholder: _vm.t(\"settings\", \"Add new password\"),\n                      autocapitalize: \"off\",\n                      autocomplete: \"new-password\",\n                      autocorrect: \"off\",\n                      required: \"\",\n                      spellcheck: \"false\",\n                      type: \"password\",\n                      value: \"\",\n                    },\n                  }),\n                  _vm._v(\" \"),\n                  _c(\"input\", {\n                    staticClass: \"icon-confirm\",\n                    attrs: { type: \"submit\", value: \"\" },\n                  }),\n                ]\n              )\n            : _c(\"div\"),\n          _vm._v(\" \"),\n          _c(\n            \"form\",\n            {\n              staticClass: \"mailAddress\",\n              class: { \"icon-loading-small\": _vm.loading.mailAddress },\n              on: {\n                submit: function ($event) {\n                  $event.preventDefault()\n                  return _vm.updateEmail.apply(null, arguments)\n                },\n              },\n            },\n            [\n              _c(\"input\", {\n                ref: \"mailAddress\",\n                attrs: {\n                  id: \"mailAddress\" + _vm.user.id + _vm.rand,\n                  disabled: _vm.loading.mailAddress || _vm.loading.all,\n                  placeholder: _vm.t(\"settings\", \"Add new email address\"),\n                  autocapitalize: \"off\",\n                  autocomplete: \"new-password\",\n                  autocorrect: \"off\",\n                  spellcheck: \"false\",\n                  type: \"email\",\n                },\n                domProps: { value: _vm.user.email },\n              }),\n              _vm._v(\" \"),\n              _c(\"input\", {\n                staticClass: \"icon-confirm\",\n                attrs: { type: \"submit\", value: \"\" },\n              }),\n            ]\n          ),\n          _vm._v(\" \"),\n          _c(\n            \"div\",\n            {\n              staticClass: \"groups\",\n              class: { \"icon-loading-small\": _vm.loading.groups },\n            },\n            [\n              _c(\n                \"Multiselect\",\n                {\n                  staticClass: \"multiselect-vue\",\n                  attrs: {\n                    \"close-on-select\": false,\n                    disabled: _vm.loading.groups || _vm.loading.all,\n                    limit: 2,\n                    multiple: true,\n                    options: _vm.availableGroups,\n                    placeholder: _vm.t(\"settings\", \"Add user to group\"),\n                    \"tag-width\": 60,\n                    taggable: _vm.settings.isAdmin,\n                    value: _vm.userGroups,\n                    label: \"name\",\n                    \"tag-placeholder\": \"create\",\n                    \"track-by\": \"id\",\n                  },\n                  on: {\n                    remove: _vm.removeUserGroup,\n                    select: _vm.addUserGroup,\n                    tag: _vm.createGroup,\n                  },\n                },\n                [\n                  _c(\n                    \"span\",\n                    { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n                    [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n                  ),\n                ]\n              ),\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n            ? _c(\n                \"div\",\n                {\n                  staticClass: \"subadmins\",\n                  class: { \"icon-loading-small\": _vm.loading.subadmins },\n                },\n                [\n                  _c(\n                    \"Multiselect\",\n                    {\n                      staticClass: \"multiselect-vue\",\n                      attrs: {\n                        \"close-on-select\": false,\n                        disabled: _vm.loading.subadmins || _vm.loading.all,\n                        limit: 2,\n                        multiple: true,\n                        options: _vm.subAdminsGroups,\n                        placeholder: _vm.t(\"settings\", \"Set user as admin for\"),\n                        \"tag-width\": 60,\n                        value: _vm.userSubAdminsGroups,\n                        label: \"name\",\n                        \"track-by\": \"id\",\n                      },\n                      on: {\n                        remove: _vm.removeUserSubAdmin,\n                        select: _vm.addUserSubAdmin,\n                      },\n                    },\n                    [\n                      _c(\n                        \"span\",\n                        { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n                        [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n                      ),\n                    ]\n                  ),\n                ],\n                1\n              )\n            : _vm._e(),\n          _vm._v(\" \"),\n          _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"tooltip\",\n                  rawName: \"v-tooltip.auto\",\n                  value: _vm.usedSpace,\n                  expression: \"usedSpace\",\n                  modifiers: { auto: true },\n                },\n              ],\n              staticClass: \"quota\",\n              class: { \"icon-loading-small\": _vm.loading.quota },\n            },\n            [\n              _c(\"Multiselect\", {\n                staticClass: \"multiselect-vue\",\n                attrs: {\n                  \"allow-empty\": false,\n                  disabled: _vm.loading.quota || _vm.loading.all,\n                  options: _vm.quotaOptions,\n                  placeholder: _vm.t(\"settings\", \"Select user quota\"),\n                  taggable: true,\n                  value: _vm.userQuota,\n                  label: \"label\",\n                  \"tag-placeholder\": \"create\",\n                  \"track-by\": \"id\",\n                },\n                on: { input: _vm.setUserQuota, tag: _vm.validateQuota },\n              }),\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          _vm.showConfig.showLanguages\n            ? _c(\n                \"div\",\n                {\n                  staticClass: \"languages\",\n                  class: { \"icon-loading-small\": _vm.loading.languages },\n                },\n                [\n                  _c(\"Multiselect\", {\n                    staticClass: \"multiselect-vue\",\n                    attrs: {\n                      \"allow-empty\": false,\n                      disabled: _vm.loading.languages || _vm.loading.all,\n                      options: _vm.languages,\n                      placeholder: _vm.t(\"settings\", \"No language set\"),\n                      value: _vm.userLanguage,\n                      \"group-label\": \"label\",\n                      \"group-values\": \"languages\",\n                      label: \"name\",\n                      \"track-by\": \"code\",\n                    },\n                    on: { input: _vm.setUserLanguage },\n                  }),\n                ],\n                1\n              )\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.showConfig.showStoragePath || _vm.showConfig.showUserBackend\n            ? _c(\"div\", { staticClass: \"storageLocation\" })\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.showConfig.showLastLogin ? _c(\"div\") : _vm._e(),\n          _vm._v(\" \"),\n          _c(\"div\", { staticClass: \"userActions\" }, [\n            !_vm.loading.all\n              ? _c(\n                  \"div\",\n                  { staticClass: \"toggleUserActions\" },\n                  [\n                    _c(\n                      \"Actions\",\n                      [\n                        _c(\n                          \"ActionButton\",\n                          {\n                            attrs: { icon: \"icon-checkmark\" },\n                            on: {\n                              click: function ($event) {\n                                _vm.editing = false\n                              },\n                            },\n                          },\n                          [\n                            _vm._v(\n                              \"\\n\\t\\t\\t\\t\\t\" +\n                                _vm._s(_vm.t(\"settings\", \"Done\")) +\n                                \"\\n\\t\\t\\t\\t\"\n                            ),\n                          ]\n                        ),\n                      ],\n                      1\n                    ),\n                    _vm._v(\" \"),\n                    _c(\n                      \"div\",\n                      {\n                        directives: [\n                          {\n                            name: \"click-outside\",\n                            rawName: \"v-click-outside\",\n                            value: _vm.hideMenu,\n                            expression: \"hideMenu\",\n                          },\n                        ],\n                        staticClass: \"userPopoverMenuWrapper\",\n                      },\n                      [\n                        _c(\"div\", {\n                          staticClass: \"icon-more\",\n                          on: { click: _vm.toggleMenu },\n                        }),\n                        _vm._v(\" \"),\n                        _c(\n                          \"div\",\n                          {\n                            staticClass: \"popovermenu\",\n                            class: { open: _vm.openedMenu },\n                          },\n                          [\n                            _c(\"PopoverMenu\", {\n                              attrs: { menu: _vm.userActions },\n                            }),\n                          ],\n                          1\n                        ),\n                      ]\n                    ),\n                  ],\n                  1\n                )\n              : _vm._e(),\n            _vm._v(\" \"),\n            _c(\n              \"div\",\n              {\n                staticClass: \"feedback\",\n                style: { opacity: _vm.feedbackMessage !== \"\" ? 1 : 0 },\n              },\n              [\n                _c(\"div\", { staticClass: \"icon-checkmark\" }),\n                _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.feedbackMessage) + \"\\n\\t\\t\"),\n              ]\n            ),\n          ]),\n        ]\n      )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"row\",\n      class: { disabled: _vm.loading.delete || _vm.loading.disable },\n      attrs: { \"data-id\": _vm.user.id },\n    },\n    [\n      _c(\n        \"div\",\n        {\n          staticClass: \"avatar\",\n          class: {\n            \"icon-loading-small\":\n              _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe,\n          },\n        },\n        [\n          !_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe\n            ? _c(\"img\", {\n                attrs: {\n                  alt: \"\",\n                  width: \"32\",\n                  height: \"32\",\n                  src: _vm.generateAvatar(_vm.user.id, 32),\n                  srcset:\n                    _vm.generateAvatar(_vm.user.id, 64) +\n                    \" 2x, \" +\n                    _vm.generateAvatar(_vm.user.id, 128) +\n                    \" 4x\",\n                },\n              })\n            : _vm._e(),\n        ]\n      ),\n      _vm._v(\" \"),\n      _c(\"div\", { staticClass: \"name\" }, [\n        _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.user.id) + \"\\n\\t\\t\"),\n        _c(\"div\", { staticClass: \"displayName subtitle\" }, [\n          _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"tooltip\",\n                  rawName: \"v-tooltip\",\n                  value:\n                    _vm.user.displayname.length > 20\n                      ? _vm.user.displayname\n                      : \"\",\n                  expression:\n                    \"user.displayname.length > 20 ? user.displayname : ''\",\n                },\n              ],\n              staticClass: \"cellText\",\n            },\n            [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.user.displayname) + \"\\n\\t\\t\\t\")]\n          ),\n        ]),\n      ]),\n      _vm._v(\" \"),\n      _c(\"div\"),\n      _vm._v(\" \"),\n      _c(\"div\", { staticClass: \"mailAddress\" }, [\n        _c(\n          \"div\",\n          {\n            directives: [\n              {\n                name: \"tooltip\",\n                rawName: \"v-tooltip\",\n                value:\n                  _vm.user.email !== null && _vm.user.email.length > 20\n                    ? _vm.user.email\n                    : \"\",\n                expression:\n                  \"user.email !== null && user.email.length > 20 ? user.email : ''\",\n              },\n            ],\n            staticClass: \"cellText\",\n          },\n          [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.user.email) + \"\\n\\t\\t\")]\n        ),\n      ]),\n      _vm._v(\" \"),\n      _c(\"div\", { staticClass: \"groups\" }, [\n        _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userGroupsLabels) + \"\\n\\t\"),\n      ]),\n      _vm._v(\" \"),\n      _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n        ? _c(\"div\", { staticClass: \"subAdminsGroups\" }, [\n            _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userSubAdminsGroupsLabels) + \"\\n\\t\"),\n          ])\n        : _vm._e(),\n      _vm._v(\" \"),\n      _c(\"div\", { staticClass: \"userQuota\" }, [\n        _c(\"div\", { staticClass: \"quota\" }, [\n          _vm._v(\n            \"\\n\\t\\t\\t\" +\n              _vm._s(_vm.userQuota) +\n              \" (\" +\n              _vm._s(_vm.usedSpace) +\n              \")\\n\\t\\t\\t\"\n          ),\n          _c(\"progress\", {\n            staticClass: \"quota-user-progress\",\n            class: { warn: _vm.usedQuota > 80 },\n            attrs: { max: \"100\" },\n            domProps: { value: _vm.usedQuota },\n          }),\n        ]),\n      ]),\n      _vm._v(\" \"),\n      _vm.showConfig.showLanguages\n        ? _c(\"div\", { staticClass: \"languages\" }, [\n            _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userLanguage.name) + \"\\n\\t\"),\n          ])\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath\n        ? _c(\"div\", { staticClass: \"userBackend\" }, [\n            _vm.showConfig.showUserBackend\n              ? _c(\"div\", { staticClass: \"userBackend\" }, [\n                  _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.user.backend) + \"\\n\\t\\t\"),\n                ])\n              : _vm._e(),\n            _vm._v(\" \"),\n            _vm.showConfig.showStoragePath\n              ? _c(\n                  \"div\",\n                  {\n                    directives: [\n                      {\n                        name: \"tooltip\",\n                        rawName: \"v-tooltip\",\n                        value: _vm.user.storageLocation,\n                        expression: \"user.storageLocation\",\n                      },\n                    ],\n                    staticClass: \"storageLocation subtitle\",\n                  },\n                  [\n                    _vm._v(\n                      \"\\n\\t\\t\\t\" + _vm._s(_vm.user.storageLocation) + \"\\n\\t\\t\"\n                    ),\n                  ]\n                )\n              : _vm._e(),\n          ])\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.showConfig.showLastLogin\n        ? _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"tooltip\",\n                  rawName: \"v-tooltip.auto\",\n                  value: _vm.userLastLoginTooltip,\n                  expression: \"userLastLoginTooltip\",\n                  modifiers: { auto: true },\n                },\n              ],\n              staticClass: \"lastLogin\",\n            },\n            [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userLastLogin) + \"\\n\\t\")]\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      _c(\"div\", { staticClass: \"userActions\" }, [\n        _vm.canEdit && !_vm.loading.all\n          ? _c(\n              \"div\",\n              { staticClass: \"toggleUserActions\" },\n              [\n                _c(\n                  \"Actions\",\n                  [\n                    _c(\n                      \"ActionButton\",\n                      {\n                        attrs: { icon: \"icon-rename\" },\n                        on: { click: _vm.toggleEdit },\n                      },\n                      [\n                        _vm._v(\n                          \"\\n\\t\\t\\t\\t\\t\" +\n                            _vm._s(_vm.t(\"settings\", \"Edit User\")) +\n                            \"\\n\\t\\t\\t\\t\"\n                        ),\n                      ]\n                    ),\n                  ],\n                  1\n                ),\n                _vm._v(\" \"),\n                _c(\"div\", { staticClass: \"userPopoverMenuWrapper\" }, [\n                  _c(\"button\", {\n                    directives: [\n                      {\n                        name: \"click-outside\",\n                        rawName: \"v-click-outside\",\n                        value: _vm.hideMenu,\n                        expression: \"hideMenu\",\n                      },\n                    ],\n                    staticClass: \"icon-more\",\n                    attrs: {\n                      \"aria-label\": _vm.t(\n                        \"settings\",\n                        \"Toggle user actions menu\"\n                      ),\n                    },\n                    on: {\n                      click: function ($event) {\n                        $event.preventDefault()\n                        return _vm.toggleMenu.apply(null, arguments)\n                      },\n                    },\n                  }),\n                  _vm._v(\" \"),\n                  _c(\n                    \"div\",\n                    {\n                      staticClass: \"popovermenu\",\n                      class: { open: _vm.openedMenu },\n                      attrs: { \"aria-expanded\": _vm.openedMenu },\n                    },\n                    [_c(\"PopoverMenu\", { attrs: { menu: _vm.userActions } })],\n                    1\n                  ),\n                ]),\n              ],\n              1\n            )\n          : _vm._e(),\n        _vm._v(\" \"),\n        _c(\n          \"div\",\n          {\n            staticClass: \"feedback\",\n            style: { opacity: _vm.feedbackMessage !== \"\" ? 1 : 0 },\n          },\n          [\n            _c(\"div\", { staticClass: \"icon-checkmark\" }),\n            _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.feedbackMessage) + \"\\n\\t\\t\"),\n          ]\n        ),\n      ]),\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"Content\",\n    {\n      attrs: {\n        \"app-name\": \"settings\",\n        \"navigation-class\": { \"icon-loading\": _vm.loadingAddGroup },\n      },\n    },\n    [\n      _c(\n        \"AppNavigation\",\n        {\n          scopedSlots: _vm._u([\n            {\n              key: \"list\",\n              fn: function () {\n                return [\n                  _c(\"AppNavigationItem\", {\n                    ref: \"addGroup\",\n                    attrs: {\n                      id: \"addgroup\",\n                      \"edit-placeholder\": _vm.t(\"settings\", \"Enter group name\"),\n                      editable: true,\n                      loading: _vm.loadingAddGroup,\n                      title: _vm.t(\"settings\", \"Add group\"),\n                      icon: \"icon-add\",\n                    },\n                    on: {\n                      click: _vm.showAddGroupForm,\n                      \"update:title\": _vm.createGroup,\n                    },\n                  }),\n                  _vm._v(\" \"),\n                  _c(\n                    \"AppNavigationItem\",\n                    {\n                      attrs: {\n                        id: \"everyone\",\n                        exact: true,\n                        title: _vm.t(\"settings\", \"Active users\"),\n                        to: { name: \"users\" },\n                        icon: \"icon-contacts-dark\",\n                      },\n                    },\n                    [\n                      _vm.userCount > 0\n                        ? _c(\n                            \"AppNavigationCounter\",\n                            { attrs: { slot: \"counter\" }, slot: \"counter\" },\n                            [\n                              _vm._v(\n                                \"\\n\\t\\t\\t\\t\\t\" +\n                                  _vm._s(_vm.userCount) +\n                                  \"\\n\\t\\t\\t\\t\"\n                              ),\n                            ]\n                          )\n                        : _vm._e(),\n                    ],\n                    1\n                  ),\n                  _vm._v(\" \"),\n                  _vm.settings.isAdmin\n                    ? _c(\n                        \"AppNavigationItem\",\n                        {\n                          attrs: {\n                            id: \"admin\",\n                            exact: true,\n                            title: _vm.t(\"settings\", \"Admins\"),\n                            to: {\n                              name: \"group\",\n                              params: { selectedGroup: \"admin\" },\n                            },\n                            icon: \"icon-user-admin\",\n                          },\n                        },\n                        [\n                          _vm.adminGroupMenu.count\n                            ? _c(\n                                \"AppNavigationCounter\",\n                                { attrs: { slot: \"counter\" }, slot: \"counter\" },\n                                [\n                                  _vm._v(\n                                    \"\\n\\t\\t\\t\\t\\t\" +\n                                      _vm._s(_vm.adminGroupMenu.count) +\n                                      \"\\n\\t\\t\\t\\t\"\n                                  ),\n                                ]\n                              )\n                            : _vm._e(),\n                        ],\n                        1\n                      )\n                    : _vm._e(),\n                  _vm._v(\" \"),\n                  _vm.disabledGroupMenu.usercount > 0 ||\n                  _vm.disabledGroupMenu.usercount === -1\n                    ? _c(\n                        \"AppNavigationItem\",\n                        {\n                          attrs: {\n                            id: \"disabled\",\n                            exact: true,\n                            title: _vm.t(\"settings\", \"Disabled users\"),\n                            to: {\n                              name: \"group\",\n                              params: { selectedGroup: \"disabled\" },\n                            },\n                            icon: \"icon-disabled-users\",\n                          },\n                        },\n                        [\n                          _vm.disabledGroupMenu.usercount > 0\n                            ? _c(\n                                \"AppNavigationCounter\",\n                                { attrs: { slot: \"counter\" }, slot: \"counter\" },\n                                [\n                                  _vm._v(\n                                    \"\\n\\t\\t\\t\\t\\t\" +\n                                      _vm._s(_vm.disabledGroupMenu.usercount) +\n                                      \"\\n\\t\\t\\t\\t\"\n                                  ),\n                                ]\n                              )\n                            : _vm._e(),\n                        ],\n                        1\n                      )\n                    : _vm._e(),\n                  _vm._v(\" \"),\n                  _vm.groupList.length > 0\n                    ? _c(\"AppNavigationCaption\", {\n                        attrs: { title: _vm.t(\"settings\", \"Groups\") },\n                      })\n                    : _vm._e(),\n                  _vm._v(\" \"),\n                  _vm._l(_vm.groupList, function (group) {\n                    return _c(\n                      \"AppNavigationItem\",\n                      {\n                        key: group.id,\n                        attrs: {\n                          exact: true,\n                          title: group.title,\n                          to: {\n                            name: \"group\",\n                            params: {\n                              selectedGroup: encodeURIComponent(group.id),\n                            },\n                          },\n                          icon: \"icon-group\",\n                        },\n                      },\n                      [\n                        group.count\n                          ? _c(\n                              \"AppNavigationCounter\",\n                              { attrs: { slot: \"counter\" }, slot: \"counter\" },\n                              [\n                                _vm._v(\n                                  \"\\n\\t\\t\\t\\t\\t\" +\n                                    _vm._s(group.count) +\n                                    \"\\n\\t\\t\\t\\t\"\n                                ),\n                              ]\n                            )\n                          : _vm._e(),\n                        _vm._v(\" \"),\n                        _c(\n                          \"template\",\n                          { slot: \"actions\" },\n                          [\n                            group.id !== \"admin\" &&\n                            group.id !== \"disabled\" &&\n                            _vm.settings.isAdmin\n                              ? _c(\n                                  \"ActionButton\",\n                                  {\n                                    attrs: { icon: \"icon-delete\" },\n                                    on: {\n                                      click: function ($event) {\n                                        return _vm.removeGroup(group.id)\n                                      },\n                                    },\n                                  },\n                                  [\n                                    _vm._v(\n                                      \"\\n\\t\\t\\t\\t\\t\\t\" +\n                                        _vm._s(\n                                          _vm.t(\"settings\", \"Remove group\")\n                                        ) +\n                                        \"\\n\\t\\t\\t\\t\\t\"\n                                    ),\n                                  ]\n                                )\n                              : _vm._e(),\n                          ],\n                          1\n                        ),\n                      ],\n                      2\n                    )\n                  }),\n                ]\n              },\n              proxy: true,\n            },\n            {\n              key: \"footer\",\n              fn: function () {\n                return [\n                  _c(\"AppNavigationSettings\", [\n                    _c(\n                      \"div\",\n                      [\n                        _c(\"p\", [\n                          _vm._v(_vm._s(_vm.t(\"settings\", \"Default quota:\"))),\n                        ]),\n                        _vm._v(\" \"),\n                        _c(\"Multiselect\", {\n                          attrs: {\n                            value: _vm.defaultQuota,\n                            options: _vm.quotaOptions,\n                            \"tag-placeholder\": \"create\",\n                            placeholder: _vm.t(\n                              \"settings\",\n                              \"Select default quota\"\n                            ),\n                            label: \"label\",\n                            \"track-by\": \"id\",\n                            \"allow-empty\": false,\n                            taggable: true,\n                          },\n                          on: {\n                            tag: _vm.validateQuota,\n                            input: _vm.setDefaultQuota,\n                          },\n                        }),\n                      ],\n                      1\n                    ),\n                    _vm._v(\" \"),\n                    _c(\"div\", [\n                      _c(\"input\", {\n                        directives: [\n                          {\n                            name: \"model\",\n                            rawName: \"v-model\",\n                            value: _vm.showLanguages,\n                            expression: \"showLanguages\",\n                          },\n                        ],\n                        staticClass: \"checkbox\",\n                        attrs: { id: \"showLanguages\", type: \"checkbox\" },\n                        domProps: {\n                          checked: Array.isArray(_vm.showLanguages)\n                            ? _vm._i(_vm.showLanguages, null) > -1\n                            : _vm.showLanguages,\n                        },\n                        on: {\n                          change: function ($event) {\n                            var $$a = _vm.showLanguages,\n                              $$el = $event.target,\n                              $$c = $$el.checked ? true : false\n                            if (Array.isArray($$a)) {\n                              var $$v = null,\n                                $$i = _vm._i($$a, $$v)\n                              if ($$el.checked) {\n                                $$i < 0 &&\n                                  (_vm.showLanguages = $$a.concat([$$v]))\n                              } else {\n                                $$i > -1 &&\n                                  (_vm.showLanguages = $$a\n                                    .slice(0, $$i)\n                                    .concat($$a.slice($$i + 1)))\n                              }\n                            } else {\n                              _vm.showLanguages = $$c\n                            }\n                          },\n                        },\n                      }),\n                      _vm._v(\" \"),\n                      _c(\"label\", { attrs: { for: \"showLanguages\" } }, [\n                        _vm._v(_vm._s(_vm.t(\"settings\", \"Show Languages\"))),\n                      ]),\n                    ]),\n                    _vm._v(\" \"),\n                    _c(\"div\", [\n                      _c(\"input\", {\n                        directives: [\n                          {\n                            name: \"model\",\n                            rawName: \"v-model\",\n                            value: _vm.showLastLogin,\n                            expression: \"showLastLogin\",\n                          },\n                        ],\n                        staticClass: \"checkbox\",\n                        attrs: { id: \"showLastLogin\", type: \"checkbox\" },\n                        domProps: {\n                          checked: Array.isArray(_vm.showLastLogin)\n                            ? _vm._i(_vm.showLastLogin, null) > -1\n                            : _vm.showLastLogin,\n                        },\n                        on: {\n                          change: function ($event) {\n                            var $$a = _vm.showLastLogin,\n                              $$el = $event.target,\n                              $$c = $$el.checked ? true : false\n                            if (Array.isArray($$a)) {\n                              var $$v = null,\n                                $$i = _vm._i($$a, $$v)\n                              if ($$el.checked) {\n                                $$i < 0 &&\n                                  (_vm.showLastLogin = $$a.concat([$$v]))\n                              } else {\n                                $$i > -1 &&\n                                  (_vm.showLastLogin = $$a\n                                    .slice(0, $$i)\n                                    .concat($$a.slice($$i + 1)))\n                              }\n                            } else {\n                              _vm.showLastLogin = $$c\n                            }\n                          },\n                        },\n                      }),\n                      _vm._v(\" \"),\n                      _c(\"label\", { attrs: { for: \"showLastLogin\" } }, [\n                        _vm._v(_vm._s(_vm.t(\"settings\", \"Show last login\"))),\n                      ]),\n                    ]),\n                    _vm._v(\" \"),\n                    _c(\"div\", [\n                      _c(\"input\", {\n                        directives: [\n                          {\n                            name: \"model\",\n                            rawName: \"v-model\",\n                            value: _vm.showUserBackend,\n                            expression: \"showUserBackend\",\n                          },\n                        ],\n                        staticClass: \"checkbox\",\n                        attrs: { id: \"showUserBackend\", type: \"checkbox\" },\n                        domProps: {\n                          checked: Array.isArray(_vm.showUserBackend)\n                            ? _vm._i(_vm.showUserBackend, null) > -1\n                            : _vm.showUserBackend,\n                        },\n                        on: {\n                          change: function ($event) {\n                            var $$a = _vm.showUserBackend,\n                              $$el = $event.target,\n                              $$c = $$el.checked ? true : false\n                            if (Array.isArray($$a)) {\n                              var $$v = null,\n                                $$i = _vm._i($$a, $$v)\n                              if ($$el.checked) {\n                                $$i < 0 &&\n                                  (_vm.showUserBackend = $$a.concat([$$v]))\n                              } else {\n                                $$i > -1 &&\n                                  (_vm.showUserBackend = $$a\n                                    .slice(0, $$i)\n                                    .concat($$a.slice($$i + 1)))\n                              }\n                            } else {\n                              _vm.showUserBackend = $$c\n                            }\n                          },\n                        },\n                      }),\n                      _vm._v(\" \"),\n                      _c(\"label\", { attrs: { for: \"showUserBackend\" } }, [\n                        _vm._v(_vm._s(_vm.t(\"settings\", \"Show user backend\"))),\n                      ]),\n                    ]),\n                    _vm._v(\" \"),\n                    _c(\"div\", [\n                      _c(\"input\", {\n                        directives: [\n                          {\n                            name: \"model\",\n                            rawName: \"v-model\",\n                            value: _vm.showStoragePath,\n                            expression: \"showStoragePath\",\n                          },\n                        ],\n                        staticClass: \"checkbox\",\n                        attrs: { id: \"showStoragePath\", type: \"checkbox\" },\n                        domProps: {\n                          checked: Array.isArray(_vm.showStoragePath)\n                            ? _vm._i(_vm.showStoragePath, null) > -1\n                            : _vm.showStoragePath,\n                        },\n                        on: {\n                          change: function ($event) {\n                            var $$a = _vm.showStoragePath,\n                              $$el = $event.target,\n                              $$c = $$el.checked ? true : false\n                            if (Array.isArray($$a)) {\n                              var $$v = null,\n                                $$i = _vm._i($$a, $$v)\n                              if ($$el.checked) {\n                                $$i < 0 &&\n                                  (_vm.showStoragePath = $$a.concat([$$v]))\n                              } else {\n                                $$i > -1 &&\n                                  (_vm.showStoragePath = $$a\n                                    .slice(0, $$i)\n                                    .concat($$a.slice($$i + 1)))\n                              }\n                            } else {\n                              _vm.showStoragePath = $$c\n                            }\n                          },\n                        },\n                      }),\n                      _vm._v(\" \"),\n                      _c(\"label\", { attrs: { for: \"showStoragePath\" } }, [\n                        _vm._v(_vm._s(_vm.t(\"settings\", \"Show storage path\"))),\n                      ]),\n                    ]),\n                    _vm._v(\" \"),\n                    _c(\"div\", [\n                      _c(\"input\", {\n                        directives: [\n                          {\n                            name: \"model\",\n                            rawName: \"v-model\",\n                            value: _vm.sendWelcomeMail,\n                            expression: \"sendWelcomeMail\",\n                          },\n                        ],\n                        staticClass: \"checkbox\",\n                        attrs: {\n                          id: \"sendWelcomeMail\",\n                          disabled: _vm.loadingSendMail,\n                          type: \"checkbox\",\n                        },\n                        domProps: {\n                          checked: Array.isArray(_vm.sendWelcomeMail)\n                            ? _vm._i(_vm.sendWelcomeMail, null) > -1\n                            : _vm.sendWelcomeMail,\n                        },\n                        on: {\n                          change: function ($event) {\n                            var $$a = _vm.sendWelcomeMail,\n                              $$el = $event.target,\n                              $$c = $$el.checked ? true : false\n                            if (Array.isArray($$a)) {\n                              var $$v = null,\n                                $$i = _vm._i($$a, $$v)\n                              if ($$el.checked) {\n                                $$i < 0 &&\n                                  (_vm.sendWelcomeMail = $$a.concat([$$v]))\n                              } else {\n                                $$i > -1 &&\n                                  (_vm.sendWelcomeMail = $$a\n                                    .slice(0, $$i)\n                                    .concat($$a.slice($$i + 1)))\n                              }\n                            } else {\n                              _vm.sendWelcomeMail = $$c\n                            }\n                          },\n                        },\n                      }),\n                      _vm._v(\" \"),\n                      _c(\"label\", { attrs: { for: \"sendWelcomeMail\" } }, [\n                        _vm._v(\n                          _vm._s(_vm.t(\"settings\", \"Send email to new user\"))\n                        ),\n                      ]),\n                    ]),\n                  ]),\n                ]\n              },\n              proxy: true,\n            },\n          ]),\n        },\n        [\n          _c(\"AppNavigationNew\", {\n            attrs: {\n              \"button-id\": \"new-user-button\",\n              text: _vm.t(\"settings\", \"New user\"),\n              \"button-class\": \"icon-add\",\n            },\n            on: {\n              click: _vm.showNewUserMenu,\n              keyup: [\n                function ($event) {\n                  if (\n                    !$event.type.indexOf(\"key\") &&\n                    _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n                  ) {\n                    return null\n                  }\n                  return _vm.showNewUserMenu.apply(null, arguments)\n                },\n                function ($event) {\n                  if (\n                    !$event.type.indexOf(\"key\") &&\n                    _vm._k($event.keyCode, \"space\", 32, $event.key, [\n                      \" \",\n                      \"Spacebar\",\n                    ])\n                  ) {\n                    return null\n                  }\n                  return _vm.showNewUserMenu.apply(null, arguments)\n                },\n              ],\n            },\n          }),\n        ],\n        1\n      ),\n      _vm._v(\" \"),\n      _c(\n        \"AppContent\",\n        [\n          _c(\"UserList\", {\n            attrs: {\n              users: _vm.users,\n              \"show-config\": _vm.showConfig,\n              \"selected-group\": _vm.selectedGroupDecoded,\n              \"external-actions\": _vm.externalActions,\n            },\n          }),\n        ],\n        1\n      ),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;A;;;;;;;;;;;;;;;;;;;AClNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;A;;;;;;;;;;;;;;;;;;AC5mBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;A;;;;;;;;;;;;;;;;;;;;ACh4BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;A;;;;;;;;;;;;AC7lBA;AACA;AACA;AACA;AACA;AACA;AACA;;;A;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;A;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;A;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;A;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;A;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;A;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;A;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;A;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;A;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;A;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;A;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;A;;;;;;;;;;;ACvCA;;A;;;;;;;;;;;ACAA;;A;;;;;;;;;;;ACAA;;A;;;;;;;;;;;ACAA;;A;;;;;;;;;;;;;A;;;;;;;;;;;;;A;;;;;;;;;;;;;A;;;;;;;;;;;;;A;;;;;;;;;;;;;;;;;A;;;;;;;;;;;;;;;;;A;;;;;;;;;;;;;;;;;A;;;;;;;;;;;;;;;;;A;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;A;;;;;;;;;;;;;;AC1fA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;A;;;;;;;;;;;;;;ACnfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;A;;;;;;;;;;;;;;ACnQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;A;;A","sourceRoot":""}