diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..e9cfca2
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,97 @@
+# Created by .ignore support plugin (hsz.mobi)
+### Node template
+# Logs
+/logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# next.js build output
+.next
+
+# nuxt.js build output
+.nuxt
+
+# Nuxt generate
+dist
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless
+
+# IDE / Editor
+.idea
+.vscode
+
+# Service worker
+sw.*
+
+# one signal
+OneSignalSDK*
+
+# macOS
+.DS_Store
+
+# Vim swap files
+*.swp
+
+# static folder
+static/
\ No newline at end of file
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000..2cc896f
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,22 @@
+module.exports = {
+ root: true,
+ env: {
+ browser: true,
+ node: true,
+ jquery: true
+ },
+ parserOptions: {
+ parser: '@babel/eslint-parser',
+ requireConfigFile: false
+ },
+ extends: ['@nuxtjs', 'plugin:nuxt/recommended', 'prettier'],
+ plugins: [],
+ // add your custom rules here
+ rules: {
+ 'no-console': 'off',
+ camelcase: 'off',
+ 'no-async-promise-executor': 'off',
+ 'vue/no-v-html': 'off',
+ 'vue/prop-name-casing': 'off'
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f9d3f53
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,95 @@
+
+/static/uploads/
+# Created by .ignore support plugin (hsz.mobi)
+### Node template
+# Logs
+/logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# next.js build output
+.next
+
+# nuxt.js build output
+.nuxt
+
+# Nuxt generate
+dist
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless
+
+# IDE / Editor
+.idea
+
+# Service worker
+sw.*
+
+# one signal
+OneSignalSDK*
+
+# macOS
+.DS_Store
+
+# Vim swap files
+*.swp
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..11f8939
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,99 @@
+###
+# Place your Prettier ignore content here
+
+###
+# .gitignore content is duplicated here due to https://github.com/prettier/prettier/issues/8506
+
+# Created by .ignore support plugin (hsz.mobi)
+### Node template
+# Logs
+/logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# next.js build output
+.next
+
+# nuxt.js build output
+.nuxt
+
+# Nuxt generate
+dist
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless
+
+# IDE / Editor
+.idea
+
+# Service worker
+sw.*
+
+# macOS
+.DS_Store
+
+# Vim swap files
+*.swp
+
+# static assets
+static/
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..709914c
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,8 @@
+{
+ "trailingComma": "none",
+ "tabWidth": 2,
+ "semi": false,
+ "singleQuote": true,
+ "printWidth": 120,
+ "arrowParens": "avoid"
+}
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..177bc7d
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,15 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "type": "pwa-chrome",
+ "request": "launch",
+ "name": "Launch Chrome against localhost",
+ "url": "http://localhost:8080",
+ "webRoot": "${workspaceFolder}"
+ }
+ ]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..c47b556
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,16 @@
+{
+ "files.exclude": {
+ "**/.git": true,
+ "**/.svn": true,
+ "**/.hg": true,
+ "**/CVS": true,
+ "**/.DS_Store": true,
+ "**/Thumbs.db": true,
+ "node_modules": true,
+ "**/.vscode": true,
+ "**/.nuxt": false,
+ ".vscode": true
+ },
+ "explorerExclude.backup": null,
+ "prettier.arrowParens": "avoid"
+}
diff --git a/.vscode/sftp.json b/.vscode/sftp.json
new file mode 100644
index 0000000..3df72a1
--- /dev/null
+++ b/.vscode/sftp.json
@@ -0,0 +1,10 @@
+{
+ "name": "AsanService",
+ "host": "asan-service.com",
+ "protocol": "ftp",
+ "port": 21,
+ "username": "asanserv",
+ "password": "6}Y5[G}Zc#we",
+ "remotePath": "/nuxt",
+ "uploadOnSave": false
+}
diff --git a/README.md b/README.md
index 1602a9b..0d4d367 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,23 @@
-# asan-service
\ No newline at end of file
+# Asan-Service
+
+## Project bulit with Nodejs version:
+
+v14.18.3
+
+## Build Setup
+
+```bash
+# install dependencies
+$ npm i
+
+# to run project in development mode
+$ npm run dev
+$ npm run server
+
+# build for production and launch server
+$ npm run build
+$ npm run start
+
+# generate static project
+$ npm run generate
+```
diff --git a/components/GlobalComponents/AppInstallDialog.vue b/components/GlobalComponents/AppInstallDialog.vue
new file mode 100644
index 0000000..ae2e67c
--- /dev/null
+++ b/components/GlobalComponents/AppInstallDialog.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
با نصب برنامه تحت وب آسان سرویس سریع تر به پنل کاربری خود دسترسی داشته باشید!
+
+
+ نصب کن
+ فعلا نه!
+
+
+
+
+
+
diff --git a/components/GlobalComponents/Hero.vue b/components/GlobalComponents/Hero.vue
new file mode 100644
index 0000000..141c06c
--- /dev/null
+++ b/components/GlobalComponents/Hero.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
diff --git a/components/GlobalComponents/LotteryPopUp.vue b/components/GlobalComponents/LotteryPopUp.vue
new file mode 100644
index 0000000..4bcf8ff
--- /dev/null
+++ b/components/GlobalComponents/LotteryPopUp.vue
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
diff --git a/components/GlobalComponents/TableNotice.vue b/components/GlobalComponents/TableNotice.vue
new file mode 100644
index 0000000..f0e0ce9
--- /dev/null
+++ b/components/GlobalComponents/TableNotice.vue
@@ -0,0 +1,3 @@
+
+ *برای مشاهده ادامه جدول افقی اسکرول کنید.
+
diff --git a/components/admin/CustomSubHeader.vue b/components/admin/CustomSubHeader.vue
new file mode 100644
index 0000000..00b64c8
--- /dev/null
+++ b/components/admin/CustomSubHeader.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
diff --git a/components/admin/RenderString.js b/components/admin/RenderString.js
new file mode 100644
index 0000000..c0488fa
--- /dev/null
+++ b/components/admin/RenderString.js
@@ -0,0 +1,21 @@
+import Vue from 'vue'
+
+Vue.component('RenderString', {
+ props: {
+ // eslint-disable-next-line vue/require-prop-types
+ string: {
+ required: true
+ }
+ },
+ render(h) {
+ const render = {
+ template: '
' + this.string + '
',
+ methods: {
+ markComplete() {
+ console.log('the method called')
+ }
+ }
+ }
+ return h(render)
+ }
+})
diff --git a/components/admin/TheFooter.vue b/components/admin/TheFooter.vue
new file mode 100644
index 0000000..43167a2
--- /dev/null
+++ b/components/admin/TheFooter.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/components/admin/TheHeader.vue b/components/admin/TheHeader.vue
new file mode 100644
index 0000000..68c386f
--- /dev/null
+++ b/components/admin/TheHeader.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/admin/TheHeaderDropdownAccnt.vue b/components/admin/TheHeaderDropdownAccnt.vue
new file mode 100644
index 0000000..e66be6b
--- /dev/null
+++ b/components/admin/TheHeaderDropdownAccnt.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
diff --git a/components/admin/TheSidebar.vue b/components/admin/TheSidebar.vue
new file mode 100644
index 0000000..2f8a280
--- /dev/null
+++ b/components/admin/TheSidebar.vue
@@ -0,0 +1,331 @@
+
+ $store.commit('admin/set', ['sidebarShow', value])"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+ setDropdownState('adminS_WebsiteM_Dropdown', val)"
+ >
+
+
+
+
+
+
+
+
+ setDropdownState('adminS_CustomerM_Dropdown', val)"
+ >
+
+
+
+
+
+
+ setDropdownState('adminS_AgentM_Dropdown', val)"
+ >
+
+
+
+
+
+
+
+
+
+
+
+ setDropdownState('adminS_AdminsM_Dropdown', val)"
+ >
+
+
+
+
+ setDropdownState('adminS_AppM_Dropdown', val)"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/admin/_nav.js b/components/admin/_nav.js
new file mode 100644
index 0000000..f156174
--- /dev/null
+++ b/components/admin/_nav.js
@@ -0,0 +1,66 @@
+export default [
+ {
+ _name: 'CSidebarNav',
+ _children: [
+ {
+ _name: 'CSidebarNavItem',
+ name: 'صفحه اصلی',
+ to: { name: 'admin' },
+ icon: 'cil-speedometer'
+ },
+ // {
+ // _name: 'CSidebarNavTitle',
+ // _children: ['مدیریت صفحات داینامیک']
+ // },
+ {
+ _name: 'CSidebarNavDropdown',
+ name: 'دانلود ها',
+ // route: {name: 'admin-download'},
+ fontIcon: 'fal fa-arrow-alt-to-bottom',
+ items: [
+ {
+ name: 'لیست',
+ to: { name: 'admin-downloads-page', params: { page: 1 } },
+ exact: false
+ },
+ {
+ name: 'دسته بندی ها',
+ to: { name: 'admin-download-categories' }
+ }
+ ]
+ },
+ {
+ _name: 'CSidebarNavItem',
+ name: 'آموزش ها',
+ to: { name: 'admin-learning-page', params: { page: 1 } },
+ exact: false,
+ icon: 'cil-chart-pie'
+ },
+ {
+ _name: 'CSidebarNavItem',
+ name: 'شرایط گارانتی',
+ to: { name: 'admin-warranty-terms-page', params: { page: 1 } },
+ exact: false,
+ fontIcon: 'fal fa-file-alt'
+ },
+ {
+ _name: 'CSidebarNavItem',
+ name: 'سوالات متداول',
+ to: { name: 'admin-FAQ' },
+ exact: false,
+ fontIcon: 'fal fa-graduation-cap'
+ },
+ {
+ _name: 'CSidebarNavItem',
+ name: 'پیام های صفحه تماس با ما',
+ to: { name: 'admin-contact-us' },
+ exact: false,
+ badge: {
+ color: 'primary'
+ // text: this.computed.unreadMessages
+ },
+ fontIcon: 'fal fa-id-card-alt'
+ }
+ ]
+ }
+]
diff --git a/components/admin/charts/CChartBarExample.vue b/components/admin/charts/CChartBarExample.vue
new file mode 100644
index 0000000..8cd99ec
--- /dev/null
+++ b/components/admin/charts/CChartBarExample.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
diff --git a/components/admin/charts/CChartBarSimple.vue b/components/admin/charts/CChartBarSimple.vue
new file mode 100644
index 0000000..65bf102
--- /dev/null
+++ b/components/admin/charts/CChartBarSimple.vue
@@ -0,0 +1,78 @@
+/* eslint-disable vue/require-default-prop */
+
+
+
+
+
diff --git a/components/admin/charts/CChartDoughnutExample.vue b/components/admin/charts/CChartDoughnutExample.vue
new file mode 100644
index 0000000..83e37df
--- /dev/null
+++ b/components/admin/charts/CChartDoughnutExample.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/components/admin/charts/CChartLineExample.vue b/components/admin/charts/CChartLineExample.vue
new file mode 100644
index 0000000..649a78e
--- /dev/null
+++ b/components/admin/charts/CChartLineExample.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
diff --git a/components/admin/charts/CChartLineSimple.vue b/components/admin/charts/CChartLineSimple.vue
new file mode 100644
index 0000000..510960a
--- /dev/null
+++ b/components/admin/charts/CChartLineSimple.vue
@@ -0,0 +1,145 @@
+/* eslint-disable vue/require-default-prop */
+
+
+
+
+
+
diff --git a/components/admin/charts/CChartPieExample.vue b/components/admin/charts/CChartPieExample.vue
new file mode 100644
index 0000000..93bbeec
--- /dev/null
+++ b/components/admin/charts/CChartPieExample.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/components/admin/charts/CChartPolarAreaExample.vue b/components/admin/charts/CChartPolarAreaExample.vue
new file mode 100644
index 0000000..9a36fcb
--- /dev/null
+++ b/components/admin/charts/CChartPolarAreaExample.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
diff --git a/components/admin/charts/CChartRadarExample.vue b/components/admin/charts/CChartRadarExample.vue
new file mode 100644
index 0000000..e9c6e5a
--- /dev/null
+++ b/components/admin/charts/CChartRadarExample.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
diff --git a/components/admin/charts/MainChartExample.vue b/components/admin/charts/MainChartExample.vue
new file mode 100644
index 0000000..ae4b502
--- /dev/null
+++ b/components/admin/charts/MainChartExample.vue
@@ -0,0 +1,135 @@
+
+
+
+
+
diff --git a/components/admin/widgets/WidgetsBrand.vue b/components/admin/widgets/WidgetsBrand.vue
new file mode 100644
index 0000000..056135e
--- /dev/null
+++ b/components/admin/widgets/WidgetsBrand.vue
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/admin/widgets/WidgetsDropdown.vue b/components/admin/widgets/WidgetsDropdown.vue
new file mode 100644
index 0000000..4fd4b6c
--- /dev/null
+++ b/components/admin/widgets/WidgetsDropdown.vue
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+ Action
+ Another action
+ Something else here...
+ Disabled action
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Action
+ Another action
+ Something else here...
+ Disabled action
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Action
+ Another action
+ Something else here...
+ Disabled action
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Action
+ Another action
+ Something else here...
+ Disabled action
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/agents/AgentDetailsModal.vue b/components/agents/AgentDetailsModal.vue
new file mode 100644
index 0000000..8cbc41d
--- /dev/null
+++ b/components/agents/AgentDetailsModal.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/agents/CheckRepAndUploadDocs.vue b/components/agents/CheckRepAndUploadDocs.vue
new file mode 100644
index 0000000..839893d
--- /dev/null
+++ b/components/agents/CheckRepAndUploadDocs.vue
@@ -0,0 +1,136 @@
+
+
+
+
+ برای بررسی درخواست نمایندگی باید
+
+ وارد حساب کاربری
+
+ خود شوید.
+
+
+
+
+
+
+
+
+
+ تاریخ ثبت درخواست:
+
+ {{ $jDate(repInfo.created_at) }}
+
+
+
+ وضعیت درخواست:
+
+ ثبت شده در سیستم
+
+ در دست اقدام
+
+ احراز هویت و بررسی مدارک
+
+ تایید شده
+
+ رد شده
+
+
+
+ دسترسی برای آپلود مدارک:
+
+ دارید
+
+ ندارید
+
+
+
+
+
+
+
+
diff --git a/components/agents/EnrollRepresentationAssets.vue b/components/agents/EnrollRepresentationAssets.vue
new file mode 100644
index 0000000..b598df1
--- /dev/null
+++ b/components/agents/EnrollRepresentationAssets.vue
@@ -0,0 +1,97 @@
+
+
+
+
+ درخواست نمایندگی شما با کد
+ {{ user.representation_code }}
+ ثبت شده است.
+
+
+
+
+
+
+
+
+
مرحله دوم ثبت درخواست:
+
اطلاعات شما تا این مرجله در سیستم ثبت شده است، لطفا از طریق این صفحه اقدام به بارگذاری مدارک خود کنید.
+
+ تا زمانی که درخواست شما تعیین وضعیت نشده است در هر زمانی میتوانید با مراجعه به همین صفحه مدارک بیشتری
+ بارگذاری کنید یا مدارک قبلی را ویرایش کنید.
+
+
+
+
نکاتی درباره بارگذاری مدارک:
+
+
+ در هر بخش تصاویر مدارک مربوطه را بارگذاری نمایید.
+
+
+ فیلدهای بارگذاری عکس در این صفحه هیچ کدام اجباری نیست.
+
+
+ فرمت مجاز تصاور jpeg میباشد.
+
+
+ نهایت حجم مجاز برای هر تصویر 2 مگابایت میباشد.
+
+
+
+
+
+
+ {{ item.title }}
+ {{ item.description }}
+
+
+
+
+
+
+
شما دسترسی آپلود مدارک ندارید
+
+
+
+
+
+
diff --git a/components/agents/EnrollRepresentationForm.vue b/components/agents/EnrollRepresentationForm.vue
new file mode 100644
index 0000000..ce3332b
--- /dev/null
+++ b/components/agents/EnrollRepresentationForm.vue
@@ -0,0 +1,1102 @@
+
+
+
+
+
diff --git a/components/agents/RepresentationImageUploader.vue b/components/agents/RepresentationImageUploader.vue
new file mode 100644
index 0000000..7800897
--- /dev/null
+++ b/components/agents/RepresentationImageUploader.vue
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/footer/SiteFooter.vue b/components/footer/SiteFooter.vue
new file mode 100644
index 0000000..b4cbe1b
--- /dev/null
+++ b/components/footer/SiteFooter.vue
@@ -0,0 +1,244 @@
+
+
+
+
+
diff --git a/components/header/MobileMenu.vue b/components/header/MobileMenu.vue
new file mode 100644
index 0000000..37688cd
--- /dev/null
+++ b/components/header/MobileMenu.vue
@@ -0,0 +1,143 @@
+
+
+
+
+
diff --git a/components/header/SiteHeader.vue b/components/header/SiteHeader.vue
new file mode 100644
index 0000000..c62af9c
--- /dev/null
+++ b/components/header/SiteHeader.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
diff --git a/components/icons/UserIcon.vue b/components/icons/UserIcon.vue
new file mode 100644
index 0000000..698567b
--- /dev/null
+++ b/components/icons/UserIcon.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/icons/logo.vue b/components/icons/logo.vue
new file mode 100644
index 0000000..4cd6e71
--- /dev/null
+++ b/components/icons/logo.vue
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/profile/AddBuffersToBufferRequest.vue b/components/profile/AddBuffersToBufferRequest.vue
new file mode 100644
index 0000000..02aa476
--- /dev/null
+++ b/components/profile/AddBuffersToBufferRequest.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ validation.ItemName.msg }}
+
+
+
+
+ {{ validation.bufferQuantity.msg }}
+
+
+
+ افزودن
+
+
+
+
+
+
diff --git a/components/profile/AddOldPiecesToOldPieceRequest.vue b/components/profile/AddOldPiecesToOldPieceRequest.vue
new file mode 100644
index 0000000..4d810e1
--- /dev/null
+++ b/components/profile/AddOldPiecesToOldPieceRequest.vue
@@ -0,0 +1,207 @@
+
+
+
+
+ مشخصات کالا:
+
+
+
+ {{ validation.ItemReceptionTransDate.msg }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ validation.ItemName.msg }}
+
+
+
+
+
+
+ مشخصات قطعه درخواستی:
+
+
+
+
+ {{ validation.pieceName.msg }}
+
+
+
+
+ افزودن
+
+
+
+
+
+
diff --git a/components/profile/AddPiecesToPieceRequest.vue b/components/profile/AddPiecesToPieceRequest.vue
new file mode 100644
index 0000000..5f6b77b
--- /dev/null
+++ b/components/profile/AddPiecesToPieceRequest.vue
@@ -0,0 +1,239 @@
+
+
+
+
+ مشخصات کالا:
+
+
+
+ {{ validation.ItemReceptionTransDate.msg }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ validation.ItemName.msg }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ validation.gStatus.msg }}
+
+
+ مشخصات قطعه درخواستی:
+
+
+
+
+ {{ validation.pieceName.msg }}
+
+
+
+
+ {{ validation.pieceQuantity.msg }}
+
+
+
+
+ افزودن
+
+
+
+
+
+
diff --git a/components/profile/AddReportToGuaranteeReportForm.vue b/components/profile/AddReportToGuaranteeReportForm.vue
new file mode 100644
index 0000000..21a63a6
--- /dev/null
+++ b/components/profile/AddReportToGuaranteeReportForm.vue
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+ {{ validation.customerName.msg }}
+
+
+
+
+ {{ validation.customerTel.msg }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ validation.ItemName.msg }}
+
+
+
+
+
+
+
+
+ {{ validation.productIssue.msg }}
+
+
+
+
+ {{ validation.usedPieces.msg }}
+
+
+
+
+ {{ validation.recieveDate.msg }}
+
+
+
+
+ {{ validation.deliverDate.msg }}
+
+
+
+
+ افزودن
+
+
+
+
+
+
diff --git a/components/profile/AddStuffModal.vue b/components/profile/AddStuffModal.vue
new file mode 100644
index 0000000..acd3948
--- /dev/null
+++ b/components/profile/AddStuffModal.vue
@@ -0,0 +1,300 @@
+
+
+
+
+
+
+
+
+
+
+
+ افزودن
+
+
+
+
+
+
+
diff --git a/components/profile/AddUserItemsToAgentDraft.vue b/components/profile/AddUserItemsToAgentDraft.vue
new file mode 100644
index 0000000..faa3547
--- /dev/null
+++ b/components/profile/AddUserItemsToAgentDraft.vue
@@ -0,0 +1,233 @@
+
+
+
+
+ پیشنویس مورد نظر جهت افزودن اقلام انتخاب شده را انتخاب کنید:
+
+
+
+
+
+ ردیف
+ توضیحات
+ نوع
+ تعداد کالاها
+ افزودن
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+ {{ item.description }}
+ بدون توضیحات
+
+
+
+
+
+
+
+
+
+ {{ totalItemsCount(item) }}
+
+
+
+
+
+
+
+
+
+
+
+ هیچ اطلاعاتی وجود ندارد
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ردیف
+ نام
+ تعداد کالاها
+ شماره سریال
+ وضعیت
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+ {{ getItemName(item.ItemID) }}
+
+
+
+ {{ item.MjQty }}
+
+
+
+ {{ item.SerialNo1 || '-' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/profile/ChangeEmailModal.vue b/components/profile/ChangeEmailModal.vue
new file mode 100644
index 0000000..06ea211
--- /dev/null
+++ b/components/profile/ChangeEmailModal.vue
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
diff --git a/components/profile/SelectAgentModal.vue b/components/profile/SelectAgentModal.vue
new file mode 100644
index 0000000..11b7eb4
--- /dev/null
+++ b/components/profile/SelectAgentModal.vue
@@ -0,0 +1,230 @@
+
+
+
+
تعهدنامه:
+
+ کاربر محترم درخواست کننده خدمت با تایید این متن هرگونه ادعایی خارج از پروتکل های اعلامی این شرکت را از خود سلب
+ مینماید و تشخیص و سنجش کارشناسان واحد خدمات پس از فروش آسان سرویس ملاک عمل خواهد بود .دریافت کننده خدمات با
+ تایید این متن تصدیق مینماید موارد خارج از شمول گارانتی اعلامی توسط آسان سرویس را میپذیرد .در صورتیکه کالایی فاقد
+ شرایط گارانتی باشد نخست جهت تعمیر به درخواست کننده خدمت در این سامانه اطلاع رسانی میگردد و در صورت عدم اعلام نظر
+ توسط کاربر جهت ثبت درخواست تعمیر ،کالای مذکور به نشانی کاربر عودت خواهد گردید.
+
+
موارد خارج از شمول گارانتی :
+
+
+ دستکاری توسط افراد غیر مجاز
+
+
+ مغایرت محصول با پک و یا نداشتن پک
+
+
+ شکستگی، ضربه خوردگی، آبخوردگی
+
+
+ مخدوش بودن سریال کالا با کارت گارانتی و پکیج محصول
+
+
+ کسورات لوازم جانبی و قطعات محصول در پک
+
+
+
+
+
+
+
+
diff --git a/components/profile/UserAsideMenu.vue b/components/profile/UserAsideMenu.vue
new file mode 100644
index 0000000..f22768e
--- /dev/null
+++ b/components/profile/UserAsideMenu.vue
@@ -0,0 +1,237 @@
+
+
+
+
+
diff --git a/components/profile/UserDashboardContainer.vue b/components/profile/UserDashboardContainer.vue
new file mode 100644
index 0000000..7152330
--- /dev/null
+++ b/components/profile/UserDashboardContainer.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
diff --git a/jsconfig.json b/jsconfig.json
new file mode 100644
index 0000000..29037a6
--- /dev/null
+++ b/jsconfig.json
@@ -0,0 +1,12 @@
+{
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "~/*": ["./*"],
+ "@/*": ["./*"],
+ "~~/*": ["./*"],
+ "@@/*": ["./*"]
+ }
+ },
+ "exclude": ["node_modules", ".nuxt", "dist"]
+}
diff --git a/layouts/admin-auth.vue b/layouts/admin-auth.vue
new file mode 100644
index 0000000..cd101d1
--- /dev/null
+++ b/layouts/admin-auth.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layouts/admin.vue b/layouts/admin.vue
new file mode 100644
index 0000000..1520026
--- /dev/null
+++ b/layouts/admin.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layouts/blank.vue b/layouts/blank.vue
new file mode 100644
index 0000000..630cfee
--- /dev/null
+++ b/layouts/blank.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/layouts/default.vue b/layouts/default.vue
new file mode 100644
index 0000000..f330d2d
--- /dev/null
+++ b/layouts/default.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
diff --git a/layouts/error.vue b/layouts/error.vue
new file mode 100644
index 0000000..5a09ee9
--- /dev/null
+++ b/layouts/error.vue
@@ -0,0 +1,26 @@
+
+
+
{{ error.statusCode }}
+
{{ error.message }}
+
Home
+
+
+
{{ error.statusCode }}
+
{{ error.message }}
+
Home
+
+
+
+
diff --git a/layouts/user-auth.vue b/layouts/user-auth.vue
new file mode 100644
index 0000000..e213d9b
--- /dev/null
+++ b/layouts/user-auth.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
diff --git a/layouts/user.vue b/layouts/user.vue
new file mode 100644
index 0000000..9346d11
--- /dev/null
+++ b/layouts/user.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+ {{ fullName }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/middleware/auth-admin.js b/middleware/auth-admin.js
new file mode 100644
index 0000000..f6499a8
--- /dev/null
+++ b/middleware/auth-admin.js
@@ -0,0 +1,4 @@
+export default function ({ $auth, redirect }) {
+ if ($auth.loggedIn && $auth.hasScope('admin')) return true
+ else return redirect('/auth/login-register')
+}
diff --git a/middleware/auth-user.js b/middleware/auth-user.js
new file mode 100644
index 0000000..32ed907
--- /dev/null
+++ b/middleware/auth-user.js
@@ -0,0 +1,5 @@
+export default function ({ $auth, redirect, route }) {
+ if (!$auth.loggedIn || !$auth.hasScope('user')) return redirect('/auth/login-register')
+ if (!$auth.user.email_confirmed && route.name !== 'account-verify') return redirect('/account/verify')
+ return true
+}
diff --git a/middleware/permissions.js b/middleware/permissions.js
new file mode 100644
index 0000000..8dc7a87
--- /dev/null
+++ b/middleware/permissions.js
@@ -0,0 +1,16 @@
+export default async function ({ $auth, redirect, route }) {
+ try {
+ if (route.name === 'admin') {
+ return true
+ } else {
+ let hasPermission = false
+ for await (const permission of $auth.user.permissions) {
+ if ((await route.name.includes(permission)) && permission !== '') hasPermission = true
+ }
+ if (hasPermission) return true
+ else redirect('/admin')
+ }
+ } catch (e) {
+ redirect('/admin')
+ }
+}
diff --git a/mixins/CoreUtils.js b/mixins/CoreUtils.js
new file mode 100644
index 0000000..013f7cc
--- /dev/null
+++ b/mixins/CoreUtils.js
@@ -0,0 +1,172 @@
+export default {
+ methods: {
+ getCssCustomProperties() {
+ if (process.client) {
+ const cssCustomProperties = {}
+ const sheets = document.styleSheets
+ let cssText = ''
+ for (let i = sheets.length - 1; i > -1; i--) {
+ const rules = sheets[i].cssRules
+ for (let j = rules.length - 1; j > -1; j--) {
+ if (rules[j].selectorText === '.ie-custom-properties') {
+ // eslint-disable-next-line prefer-destructuring
+ cssText = rules[j].cssText
+ break
+ }
+ }
+
+ if (cssText) {
+ break
+ }
+ }
+
+ // eslint-disable-next-line unicorn/prefer-string-slice
+ cssText = cssText.substring(cssText.lastIndexOf('{') + 1, cssText.lastIndexOf('}'))
+
+ cssText.split(';').forEach(property => {
+ if (property) {
+ const name = property.split(': ')[0]
+ const value = property.split(': ')[1]
+ if (name && value) {
+ cssCustomProperties[`--${name.trim()}`] = value.trim()
+ }
+ }
+ })
+ return cssCustomProperties
+ } else {
+ return null
+ }
+ },
+ deepObjectsMerge(target, source) {
+ // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties
+ for (const key of Object.keys(source)) {
+ if (source[key] instanceof Object) {
+ Object.assign(source[key], this.deepObjectsMerge(target[key], source[key]))
+ }
+ }
+
+ // Join `target` and modified `source`
+ Object.assign(target || {}, source)
+ return target
+ },
+ getColor(rawProperty, element = process.client ? document.body : null) {
+ const property = `--${rawProperty}`
+ const style = this.getStyle(property, element)
+ return style || rawProperty
+ },
+ getStyle(property, element = process.client ? document.body : null) {
+ if (process.client) {
+ const minIEVersion = 10
+ const isIE1x = () => Boolean(document.documentMode) && document.documentMode >= minIEVersion
+ const isCustomProperty = property => property.match(/^--.*/i)
+ ///
+ let style
+
+ if (isCustomProperty(property) && isIE1x()) {
+ const cssCustomProperties = this.getCssCustomProperties()
+ style = cssCustomProperties[property]
+ } else {
+ style = window.getComputedStyle(element, null).getPropertyValue(property).replace(/^\s/, '')
+ }
+
+ return style
+ } else {
+ return null
+ }
+ },
+ hexToRgb(color) {
+ if (typeof color === 'undefined') {
+ throw new TypeError('Hex color is not defined')
+ }
+
+ const hex = color.match(/^#(?:[0-9a-f]{3}){1,2}$/i)
+
+ if (!hex) {
+ throw new Error(`${color} is not a valid hex color`)
+ }
+
+ let r
+ let g
+ let b
+
+ if (color.length === 7) {
+ r = parseInt(color.slice(1, 3), 16)
+ g = parseInt(color.slice(3, 5), 16)
+ b = parseInt(color.slice(5, 7), 16)
+ } else {
+ r = parseInt(color.slice(1, 2), 16)
+ g = parseInt(color.slice(2, 3), 16)
+ b = parseInt(color.slice(3, 5), 16)
+ }
+
+ return `rgba(${r}, ${g}, ${b})`
+ },
+ hexToRgba(color, opacity = 100) {
+ if (typeof color === 'undefined') {
+ throw new TypeError('Hex color is not defined')
+ }
+
+ const hex = color.match(/^#(?:[0-9a-f]{3}){1,2}$/i)
+
+ if (!hex) {
+ throw new Error(`${color} is not a valid hex color`)
+ }
+
+ let r
+ let g
+ let b
+
+ if (color.length === 7) {
+ r = parseInt(color.slice(1, 3), 16)
+ g = parseInt(color.slice(3, 5), 16)
+ b = parseInt(color.slice(5, 7), 16)
+ } else {
+ r = parseInt(color.slice(1, 2), 16)
+ g = parseInt(color.slice(2, 3), 16)
+ b = parseInt(color.slice(3, 5), 16)
+ }
+
+ return `rgba(${r}, ${g}, ${b}, ${opacity / 100})`
+ },
+ makeUid() {
+ const key = Math.random().toString(36).substr(2)
+ return 'uid-' + key
+ },
+ omitByKeys(originalObject, keys) {
+ const newObj = {}
+ const objKeys = Object.keys(originalObject)
+ for (let i = 0; i < objKeys.length; i++) {
+ !keys.includes(objKeys[i]) && (newObj[objKeys[i]] = originalObject[objKeys[i]])
+ }
+ return newObj
+ },
+ pickByKeys(originalObject, keys) {
+ const newObj = {}
+ for (let i = 0; i < keys.length; i++) {
+ newObj[keys[i]] = originalObject[keys[i]]
+ }
+ return newObj
+ },
+ rgbToHex(color) {
+ if (typeof color === 'undefined') {
+ throw new TypeError('Hex color is not defined')
+ }
+
+ if (color === 'transparent') {
+ return '#00000000'
+ }
+
+ const rgb = color.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i)
+
+ if (!rgb) {
+ throw new Error(`${color} is not a valid rgb color`)
+ }
+
+ const r = `0${parseInt(rgb[1], 10).toString(16)}`
+ const g = `0${parseInt(rgb[2], 10).toString(16)}`
+ const b = `0${parseInt(rgb[3], 10).toString(16)}`
+
+ return `#${r.slice(-2)}${g.slice(-2)}${b.slice(-2)}`
+ }
+ }
+}
diff --git a/mixins/FadeInAnimation.js b/mixins/FadeInAnimation.js
new file mode 100644
index 0000000..a8a1475
--- /dev/null
+++ b/mixins/FadeInAnimation.js
@@ -0,0 +1,25 @@
+export default {
+ mounted() {
+ $(document).ready(() => {
+ const elements = $('.fadeInAnim')
+
+ Object.keys(elements).forEach((item, index) => {
+ if (index < elements.length) {
+ this.$gsap.fromTo(
+ elements[item],
+ { y: 20, opacity: 0 },
+ {
+ y: 0,
+ opacity: 1,
+ duration: 0.5,
+ scrollTrigger: {
+ trigger: elements[item],
+ start: 'top 90%'
+ }
+ }
+ )
+ }
+ })
+ })
+ }
+}
diff --git a/mixins/WS_Admin.js b/mixins/WS_Admin.js
new file mode 100644
index 0000000..7978551
--- /dev/null
+++ b/mixins/WS_Admin.js
@@ -0,0 +1,154 @@
+import { io } from 'socket.io/client-dist/socket.io'
+export default {
+ data() {
+ return {
+ adminNotificationOffset: 60
+ }
+ },
+ computed: {
+ userIsLoggedIn() {
+ return this.$auth.loggedIn
+ },
+ adminWS: {
+ get() {
+ return this.$store.state.admin.adminWS
+ },
+ set(val) {
+ this.$store.commit('front/set', ['adminWS', val])
+ }
+ }
+ },
+ methods: {
+ initAdminWS() {
+ this.adminWS = true
+
+ /// /////////////////////////////////////////// connetct to ws server
+ const socket = io(`${this.$config.WebSocketURL}/admin`, {
+ reconnectionDelay: 20000,
+ reconnectionDelayMax: 20000,
+ auth: {
+ token: this.$auth.strategy.token.get()
+ }
+ })
+
+ /// /////////////////////////////////////////// connection error
+
+ socket.on('connect_error', () => {
+ this.$notify({
+ type: 'error',
+ title: 'خطا',
+ message: 'دریافت اعلانات ادمین با مشکل مواجه شد',
+ position: 'top-left',
+ offset: this.adminNotificationOffset
+ // duration: 0
+ })
+ })
+
+ /// /////////////////////////////////////////// events
+ socket.on('connect', () => {
+ // console.log('**************** You have access to admin notifications')
+ })
+
+ socket.on(`admin:allNotifs`, data => {
+ this.$store.commit('admin/set', ['unreadCuMsgs', data.unreadCuMsgs])
+ this.$store.commit('admin/set', ['unreadTickets', data.unreadTickets])
+ this.$store.commit('admin/set', ['newCustomers', data.newCustomers])
+ this.$store.commit('admin/set', ['newRepresentations', data.newRepresentations])
+ this.$store.commit('admin/set', ['newPieceRequests', data.newPieceRequests])
+ this.$store.commit('admin/set', ['newOldPieceRequests', data.newOldPieceRequests])
+ this.$store.commit('admin/set', ['newBufferRequests', data.newBufferRequests])
+ this.$store.commit('admin/set', ['newGuaranteeReports', data.newGuaranteeReports])
+ })
+
+ socket.on(`admin:notify`, data => {
+ if (data.type === 'updateUnreadCuMsgs') {
+ // update store
+ this.$store.commit('admin/set', ['unreadCuMsgs', data.unreadCuMsgs])
+
+ // update DOM
+ if (this.$route.name === 'admin-contact-us') {
+ this.$nuxt.refresh()
+ }
+ }
+
+ if (data.type === 'updateUnreadTickets') {
+ // update store
+ this.$store.commit('admin/set', ['unreadTickets', data.unreadTickets])
+
+ // update DOM
+ if (this.$route.name === 'admin-tickets') {
+ this.$nuxt.refresh()
+ }
+ }
+
+ if (data.type === 'newTicketMsg') {
+ if (this.$route.name === 'admin-tickets-ticket') {
+ this.$nuxt.refresh()
+ setTimeout(() => {
+ window.scrollTo(0, document.body.scrollHeight)
+ }, 500)
+ }
+ }
+
+ if (data.type === 'updateNewCustomers') {
+ this.$store.commit('admin/set', ['newCustomers', data.newCustomers])
+ }
+
+ if (data.type === 'updateNewRepresentations') {
+ // update store
+ this.$store.commit('admin/set', ['newRepresentations', data.newRepresentations])
+
+ // update DOM
+ if (this.$route.name === 'admin-representations') {
+ this.$nuxt.refresh()
+ }
+ }
+
+ if (data.type === 'updateNewPieceRequests') {
+ // update store
+ this.$store.commit('admin/set', ['newPieceRequests', data.newPieceRequests])
+
+ // update DOM
+ if (this.$route.name === 'admin-piece-requests') {
+ this.$nuxt.refresh()
+ }
+ }
+
+ if (data.type === 'updateNewOldPieceRequests') {
+ // update store
+ this.$store.commit('admin/set', ['newOldPieceRequests', data.newOldPieceRequests])
+
+ // update DOM
+ if (this.$route.name === 'admin-op-requests') {
+ this.$nuxt.refresh()
+ }
+ }
+
+ if (data.type === 'updateNewBufferRequests') {
+ // update store
+ this.$store.commit('admin/set', ['newBufferRequests', data.newBufferRequests])
+
+ // update DOM
+ if (this.$route.name === 'admin-buffer-requests') {
+ this.$nuxt.refresh()
+ }
+ }
+
+ if (data.type === 'updateNewGuaranteeReports') {
+ // update store
+ this.$store.commit('admin/set', ['newGuaranteeReports', data.newGuaranteeReports])
+
+ // update DOM
+ if (this.$route.name === 'admin-quarantee-reports') {
+ this.$nuxt.refresh()
+ }
+ }
+ })
+ }
+ },
+ mounted() {
+ if (this.userIsLoggedIn && !this.adminWS) {
+ this.initAdminWS()
+ }
+ }
+}
diff --git a/mixins/WS_Agent.js b/mixins/WS_Agent.js
new file mode 100644
index 0000000..c07f23d
--- /dev/null
+++ b/mixins/WS_Agent.js
@@ -0,0 +1,106 @@
+import { io } from 'socket.io/client-dist/socket.io'
+import Vue from 'vue'
+export default {
+ data() {
+ return {
+ agentNotificationOffset: 60
+ }
+ },
+ computed: {
+ user() {
+ return this.$auth.user
+ },
+ userIsLoggedIn() {
+ return this.$auth.loggedIn
+ },
+ agentWS: {
+ get() {
+ return this.$store.state.front.agentWS
+ },
+ set(val) {
+ this.$store.commit('front/set', ['agentWS', val])
+ }
+ }
+ },
+ methods: {
+ initAgentWS() {
+ this.agentWS = true
+
+ /// /////////////////////////////////////////// connetct to ws server
+ const socket = io(`${this.$config.WebSocketURL}/agent`, {
+ reconnectionDelay: 20000,
+ reconnectionDelayMax: 20000,
+ auth: {
+ token: this.$auth.strategy.token.get()
+ }
+ })
+
+ Vue.prototype.$agentSocket = socket
+
+ /// /////////////////////////////////////////// connection error
+ // eslint-disable-next-line node/handle-callback-err
+ socket.on('connect_error', err => {})
+
+ /// /////////////////////////////////////////// events
+ socket.on('connect', () => {
+ // console.log('**************** You have access to agent notifications')
+ socket.emit('agent:fetchAnnouncements')
+ })
+
+ socket.on(`agent:allNotifs`, data => {
+ this.$store.commit('front/set', ['agentInbox', data.agentInbox])
+ })
+
+ socket.on(`agent:announcements`, data => {
+ this.$store.commit('front/set', ['newAgentAnnosCount', data.newAgentAnnosCount])
+ this.$store.commit('front/set', ['agentAnnouncements', data.agentAnnouncements])
+ })
+
+ socket.on(`agent:fetchNewAnnouncements`, data => {
+ socket.emit('agent:fetchAnnouncements')
+ })
+
+ socket.on(`agent:notify`, data => {
+ if (data.type === 'updateAgentInbox') {
+ // update store
+ this.$store.commit('front/set', ['agentInbox', data.agentInbox])
+
+ // update DOM
+ if (this.$route.name === 'account-agents-inbox') {
+ this.$nuxt.refresh()
+ }
+ }
+
+ if (data.type === 'newAgentInbox') {
+ // sent ui notif
+ this.$notify({
+ type: 'success',
+ title: 'توجه',
+ message: ' فرم گارانتی جدید در صندوق ورودی شما قرار گرفت',
+ position: 'top-left',
+ offset: this.agentNotificationOffset,
+ duration: 10 * 1000
+ })
+ }
+ })
+
+ socket.on(`agent:notifyAll`, data => {
+ if (data.type === 'fetchNewAnnouncements') {
+ socket.emit('agent:fetchAnnouncements')
+ this.$notify({
+ type: 'success',
+ title: 'توجه',
+ message: 'پیام جدید در اطلاعیه های نمایندگان دارید',
+ position: 'top-left',
+ offset: this.userNotificationOffset
+ })
+ }
+ })
+ }
+ },
+ mounted() {
+ if (this.userIsLoggedIn && this.user.isAgent && !this.agentWS) {
+ this.initAgentWS()
+ }
+ }
+}
diff --git a/mixins/WS_User.js b/mixins/WS_User.js
new file mode 100644
index 0000000..bf4dbda
--- /dev/null
+++ b/mixins/WS_User.js
@@ -0,0 +1,128 @@
+import { io } from 'socket.io/client-dist/socket.io'
+import Vue from 'vue'
+export default {
+ data() {
+ return {
+ userNotificationOffset: 60
+ }
+ },
+ computed: {
+ userIsLoggedIn() {
+ return this.$auth.loggedIn
+ },
+ userWS: {
+ get() {
+ return this.$store.state.front.userWS
+ },
+ set(val) {
+ this.$store.commit('front/set', ['userWS', val])
+ }
+ }
+ },
+ methods: {
+ initUserWS() {
+ this.userWS = true
+
+ /// /////////////////////////////////////////// connetct to ws server
+ const socket = io(`${this.$config.WebSocketURL}/user`, {
+ reconnectionDelay: 20000,
+ reconnectionDelayMax: 20000,
+ auth: {
+ token: this.$auth.strategy.token.get()
+ }
+ })
+
+ Vue.prototype.$userSocket = socket
+
+ /// /////////////////////////////////////////// connection error
+ // eslint-disable-next-line node/handle-callback-err
+ socket.on('connect_error', err => {
+ this.$notify({
+ type: 'error',
+ title: 'خطا',
+ message: 'دریافت اعلانات با مشکل مواجه شد',
+ position: 'top-left',
+ offset: this.userNotificationOffset
+ // duration: 0
+ })
+ })
+
+ /// /////////////////////////////////////////// events
+ socket.on('connect', () => {
+ // console.log('**************** You have access to notifications')
+ socket.emit('user:fetchAnnouncements')
+ })
+
+ socket.on(`user:allNotifs`, data => {
+ this.$store.commit('front/set', ['unreadTickets', data.unreadTickets])
+ this.$store.commit('front/set', ['draftsCount', data.draftsCount])
+ })
+
+ socket.on(`user:announcements`, data => {
+ this.$store.commit('front/set', ['newUserAnnosCount', data.newUserAnnosCount])
+ this.$store.commit('front/set', ['userAnnouncements', data.userAnnouncements])
+ })
+
+ socket.on(`user:fetchNewAnnouncements`, data => {
+ socket.emit('user:fetchAnnouncements')
+ })
+
+ socket.on(`user:notify`, data => {
+ if (data.type === 'updateUnreadTickets') {
+ // update store
+ this.$store.commit('front/set', ['unreadTickets', data.unreadTickets])
+
+ // update DOM
+ if (this.$route.name === 'account-tickets') {
+ this.$nuxt.refresh()
+ }
+ }
+
+ if (data.type === 'newTicketMsg') {
+ this.$notify({
+ type: 'success',
+ title: 'توجه',
+ message: 'پیام دارید',
+ position: 'top-left',
+ offset: this.userNotificationOffset
+ })
+
+ if (this.$route.name === 'account-tickets-ticket') {
+ this.$nuxt.refresh()
+ setTimeout(() => {
+ window.scrollTo(0, document.body.scrollHeight)
+ }, 500)
+ }
+ }
+
+ if (data.type === 'updateDraftsCount') {
+ // update store
+ this.$store.commit('front/set', ['draftsCount', data.draftsCount])
+
+ // update DOM
+ if (this.$route.name === 'account-drafts') {
+ this.$nuxt.refresh()
+ }
+ }
+ })
+
+ socket.on(`user:notifyAll`, data => {
+ if (data.type === 'fetchNewAnnouncements') {
+ socket.emit('user:fetchAnnouncements')
+ this.$notify({
+ type: 'success',
+ title: 'توجه',
+ message: 'پیام جدید در اعلانات دارید',
+ position: 'top-left',
+ offset: this.userNotificationOffset
+ })
+ }
+ })
+ }
+ },
+ mounted() {
+ if (this.userIsLoggedIn && this.$auth.hasScope('user') && !this.userWS) {
+ this.initUserWS()
+ }
+ }
+}
diff --git a/mixins/axiosUploadProcess.js b/mixins/axiosUploadProcess.js
new file mode 100644
index 0000000..be682c2
--- /dev/null
+++ b/mixins/axiosUploadProcess.js
@@ -0,0 +1,24 @@
+export default {
+ data() {
+ return {
+ axiosConfig: {
+ onUploadProgress: progressEvent => {
+ if (progressEvent.total / 1024 > 100) {
+ const text = 'درحال آپلود '
+ const uploadLayout = this.$loading({
+ lock: true,
+ text,
+ spinner: 'el-icon-loading',
+ background: 'rgba(0, 0, 0, 0.7)'
+ })
+ document.querySelector('.el-loading-text').innerText =
+ text + Math.floor((progressEvent.loaded / progressEvent.total) * 100) + '%'
+ if ((progressEvent.loaded / progressEvent.total) * 100 === 100) {
+ uploadLayout.close()
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/mixins/demoAlert.js b/mixins/demoAlert.js
new file mode 100644
index 0000000..a0d2f09
--- /dev/null
+++ b/mixins/demoAlert.js
@@ -0,0 +1,13 @@
+export default {
+ mounted() {
+ setTimeout(() => {
+ this.$alert(
+ 'کاربر گرامی سایت در حال حاضر نسخه آزمایشی میباشد و ممکن است در بعضی بخش ها ایراداتی داشته باشد که به زودی برطرف خواهند شد، با تشکر از صبوری شما.',
+ 'توجه',
+ {
+ type: 'warning'
+ }
+ )
+ }, 2000)
+ }
+}
diff --git a/modules/WebSocketServer.js b/modules/WebSocketServer.js
new file mode 100644
index 0000000..d041b6b
--- /dev/null
+++ b/modules/WebSocketServer.js
@@ -0,0 +1,9 @@
+const wss = require('../server/WebSocket/wss')
+const { isProduction } = require('../server/_env')
+
+export default function () {
+ this.nuxt.hook('listen', (server, { host, port }) => {
+ // attach WebSocket Server to Nuxt Server in production mode
+ if (isProduction) wss(server)
+ })
+}
diff --git a/nuxt.config.js b/nuxt.config.js
new file mode 100644
index 0000000..54dcb40
--- /dev/null
+++ b/nuxt.config.js
@@ -0,0 +1,188 @@
+import webpack from 'webpack'
+import {
+ DevServerPort,
+ WebSocketURL,
+ NuxtPort,
+ NuxtHost,
+ isProduction,
+ // arpa
+ VerityUserGroupId,
+ VerityBusinessCategoryId,
+ VerityStockAreaId,
+ PanatechUserGroupId,
+ PanatechBusinessCategoryId,
+ PanatechStockAreaId
+} from './server/_env'
+import { serverMiddleware } from './server/index'
+
+const serverMiddlewareArray = []
+if (isProduction) serverMiddlewareArray.push(serverMiddleware)
+
+export default {
+ // Global page headers (https://go.nuxtjs.dev/config-head)
+ head: {
+ title: 'آسان سرویس',
+ htmlAttrs: {
+ lang: 'fa'
+ },
+ meta: [
+ { charset: 'utf-8' },
+ { name: 'viewport', content: 'width=device-width, initial-scale=1' },
+ { name: 'theme-color', content: '#065495' },
+ { name: 'apple-mobile-web-app-status-bar-style', content: 'black-translucent' },
+ {
+ hid: 'description',
+ name: 'description',
+ content:
+ 'آسان سرویس یکی از بزرگترین و فعالترین ارائه دهنده خدمات پس از فروش محصولات الکترونیکی به مدد شبکه گسترده و منسجم خدمات پس از فروش خود توانسته پاسخگوی مشتریان فهیم و گرانقدر باشد.'
+ }
+ ],
+ link: [
+ { rel: 'icon', type: 'image/x-icon', href: '/assets/img/favicon.png' },
+ { rel: 'stylesheet', type: 'text/css', href: '/assets/css/bootstrap-grid.css' },
+ { rel: 'stylesheet', type: 'text/css', href: '/assets/css/reset-css.css' },
+ { rel: 'stylesheet', type: 'text/css', href: '/assets/css/fontawesome/css/all.min.css' }
+ ],
+ script: [{ src: '/CustomSW.js', deafer: true, body: true }]
+ },
+ loading: false,
+ pageTransition: 'page',
+ // Global CSS (https://go.nuxtjs.dev/config-css)
+ css: ['element-ui/lib/theme-chalk/index.css', '~/sass/main.scss'],
+ // Plugins to run before rendering page (https://go.nuxtjs.dev/config-plugins)
+ plugins: [
+ '@/plugins/element-ui',
+ '@/plugins/ckEditor.client',
+ '@/plugins/gsap.client',
+ '@/plugins/core-ui.client',
+ '@/plugins/datePicker.client',
+ '@/plugins/ATextSplitterVuePlugin.client',
+ '@/plugins/ArpaError.client',
+ '@/plugins/jDate'
+ ],
+
+ // Auto import components (https://go.nuxtjs.dev/config-components)
+ components: true,
+
+ // Modules for dev and build (recommended) (https://go.nuxtjs.dev/config-modules)
+ buildModules: ['@nuxtjs/pwa'],
+
+ // Modules (https://go.nuxtjs.dev/config-modules)
+ modules: [
+ // https://go.nuxtjs.dev/axios
+ '@nuxtjs/axios',
+ '@nuxtjs/auth-next',
+ '~/modules/WebSocketServer.js'
+ ],
+ pwa: {
+ icon: {
+ fileName: 'bigIcon.png'
+ },
+ manifest: {
+ name: 'خدمات گارانتی آسان سرویس',
+ short_name: 'AsanService App',
+ description: false,
+ lang: 'fa',
+ useWebmanifestExtension: false,
+ start_url: '/account'
+ },
+ meta: {
+ nativeUI: true,
+ mobileAppIOS: true,
+ name: 'اسان سرویس',
+ theme_color: '#065495'
+ },
+ workbox: {
+ cleanupOutdatedCaches: true
+ }
+ },
+ // Axios module configuration (https://go.nuxtjs.dev/config-axios)
+ axios: {
+ baseURL: `http://127.0.0.1:${NuxtPort}`,
+ proxy: true
+ },
+ proxy: {
+ '/api': { target: `http://127.0.0.1:${isProduction ? NuxtPort : DevServerPort}` }
+ },
+ // Build Configuration (https://go.nuxtjs.dev/config-build)
+ build: {
+ transpile: [/^element-ui/],
+ plugins: [
+ new webpack.ProvidePlugin({
+ $: 'jquery',
+ jQuery: 'jquery',
+ 'window.jQuery': 'jquery'
+ })
+ ],
+ splitChunks: {
+ layouts: true
+ }
+ },
+ watchers: {
+ chokidar: {
+ ignored: /(server)/
+ },
+ webpack: {
+ ignored: /(server)/
+ }
+ },
+ router: {
+ linkActiveClass: 'active'
+ },
+ server: {
+ host: NuxtHost,
+ port: NuxtPort
+ },
+ serverMiddleware: serverMiddlewareArray,
+ auth: {
+ strategies: {
+ local: {
+ token: {
+ property: 'token',
+ required: true,
+ type: ''
+ },
+ user: {
+ property: 'user',
+ autoFetch: true
+ },
+ endpoints: {
+ login: { url: '/api/auth/login', method: 'post' },
+ logout: { url: '/api/auth/logout', method: 'post' },
+ user: { url: '/api/auth/user', method: 'get' }
+ }
+ }
+ },
+ redirect: false
+ },
+ publicRuntimeConfig: {
+ WebSocketURL: WebSocketURL(),
+ // verity
+ VerityUserGroupId,
+ VerityBusinessCategoryId,
+ VerityStockAreaId,
+ // panatech
+ PanatechUserGroupId,
+ PanatechBusinessCategoryId,
+ PanatechStockAreaId,
+ // footer variables
+ copyrightName: 'Danak Corporation',
+ copyrightURL: 'https://danakcorp.com/fa',
+ whatsApp: '',
+ instagram: '',
+ aparat: '',
+ supportTel: '021-67341',
+ supportEmail: 'info@asan-service.com',
+ andoridAppURL: '',
+ // contact page variables
+ address: 'تهران، میدان ولیعصر، خیابان نجات اللهی، خیابان جعفر شهری (سپند)، پلاک ۳۶، طبقه ۵',
+ contactTel: '021-67341',
+ contactEmail: 'info@asan-service.com',
+ // post receipt info (for asan service only)
+ recieverName: 'شرکت آسان سرویس (تهران)',
+ recieverAddress: 'تهران، میدان ولیعصر، خیابان نجات اللهی، خیابان جعفر شهری (سپند)، پلاک ۳۶، طبقه ۵',
+ recieverPostalCode: '1598993733',
+ recieverPhone: '02167341'
+ },
+ privateRuntimeConfig: {}
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..4257ad5
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,15684 @@
+{
+ "name": "asan-service",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@ampproject/remapping": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
+ "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/trace-mapping": "^0.3.0"
+ }
+ },
+ "@babel/code-frame": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
+ "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+ "requires": {
+ "@babel/highlight": "^7.10.4"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz",
+ "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw=="
+ },
+ "@babel/core": {
+ "version": "7.12.10",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz",
+ "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==",
+ "requires": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.12.10",
+ "@babel/helper-module-transforms": "^7.12.1",
+ "@babel/helpers": "^7.12.5",
+ "@babel/parser": "^7.12.10",
+ "@babel/template": "^7.12.7",
+ "@babel/traverse": "^7.12.10",
+ "@babel/types": "^7.12.10",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.1",
+ "json5": "^2.1.2",
+ "lodash": "^4.17.19",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+ "@babel/eslint-parser": {
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz",
+ "integrity": "sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==",
+ "dev": true,
+ "requires": {
+ "eslint-scope": "^5.1.1",
+ "eslint-visitor-keys": "^2.1.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz",
+ "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==",
+ "requires": {
+ "@babel/types": "^7.12.11",
+ "jsesc": "^2.5.1",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.12.10",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz",
+ "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==",
+ "requires": {
+ "@babel/types": "^7.12.10"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz",
+ "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==",
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.12.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz",
+ "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==",
+ "requires": {
+ "@babel/compat-data": "^7.12.5",
+ "@babel/helper-validator-option": "^7.12.1",
+ "browserslist": "^4.14.5",
+ "semver": "^5.5.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz",
+ "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==",
+ "requires": {
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-member-expression-to-functions": "^7.12.1",
+ "@babel/helper-optimise-call-expression": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.12.1",
+ "@babel/helper-split-export-declaration": "^7.10.4"
+ }
+ },
+ "@babel/helper-create-regexp-features-plugin": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz",
+ "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.10.4",
+ "regexpu-core": "^4.7.1"
+ }
+ },
+ "@babel/helper-define-map": {
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz",
+ "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==",
+ "requires": {
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/types": "^7.10.5",
+ "lodash": "^4.17.19"
+ }
+ },
+ "@babel/helper-environment-visitor": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz",
+ "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.7"
+ },
+ "dependencies": {
+ "@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "dev": true
+ },
+ "@babel/types": {
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
+ "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz",
+ "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==",
+ "requires": {
+ "@babel/types": "^7.12.1"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz",
+ "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==",
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.12.10",
+ "@babel/template": "^7.12.7",
+ "@babel/types": "^7.12.11"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.12.10",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz",
+ "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==",
+ "requires": {
+ "@babel/types": "^7.12.10"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz",
+ "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==",
+ "requires": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz",
+ "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==",
+ "requires": {
+ "@babel/types": "^7.12.7"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.12.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz",
+ "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==",
+ "requires": {
+ "@babel/types": "^7.12.5"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz",
+ "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.12.1",
+ "@babel/helper-replace-supers": "^7.12.1",
+ "@babel/helper-simple-access": "^7.12.1",
+ "@babel/helper-split-export-declaration": "^7.11.0",
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.12.1",
+ "@babel/types": "^7.12.1",
+ "lodash": "^4.17.19"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.12.10",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz",
+ "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==",
+ "requires": {
+ "@babel/types": "^7.12.10"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz",
+ "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.10.4",
+ "@babel/helper-wrap-function": "^7.10.4",
+ "@babel/types": "^7.12.1"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz",
+ "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==",
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.12.7",
+ "@babel/helper-optimise-call-expression": "^7.12.10",
+ "@babel/traverse": "^7.12.10",
+ "@babel/types": "^7.12.11"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz",
+ "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==",
+ "requires": {
+ "@babel/types": "^7.12.1"
+ }
+ },
+ "@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz",
+ "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==",
+ "requires": {
+ "@babel/types": "^7.12.1"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz",
+ "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==",
+ "requires": {
+ "@babel/types": "^7.12.11"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+ "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz",
+ "integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw=="
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.12.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz",
+ "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==",
+ "requires": {
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.12.5",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz",
+ "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==",
+ "requires": {
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.12.5",
+ "@babel/types": "^7.12.5"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
+ "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
+ }
+ },
+ "@babel/parser": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz",
+ "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg=="
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz",
+ "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-remap-async-to-generator": "^7.12.1",
+ "@babel/plugin-syntax-async-generators": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-class-properties": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz",
+ "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==",
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.12.1",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-proposal-decorators": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz",
+ "integrity": "sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ==",
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.12.1",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-decorators": "^7.12.1"
+ }
+ },
+ "@babel/plugin-proposal-dynamic-import": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz",
+ "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-export-namespace-from": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz",
+ "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz",
+ "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-json-strings": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-logical-assignment-operators": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz",
+ "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+ }
+ },
+ "@babel/plugin-proposal-nullish-coalescing-operator": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz",
+ "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-numeric-separator": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz",
+ "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz",
+ "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
+ "@babel/plugin-transform-parameters": "^7.12.1"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz",
+ "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-optional-chaining": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz",
+ "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-private-methods": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz",
+ "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==",
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.12.1",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz",
+ "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==",
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.12.1",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-class-properties": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz",
+ "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-decorators": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.1.tgz",
+ "integrity": "sha512-ir9YW5daRrTYiy9UJ2TzdNIJEZu8KclVzDcfSt4iEmOtwQ4llPtWInNKJyKnVXp1vE4bbVd5S31M/im3mYMO1w==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-export-namespace-from": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz",
+ "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-top-level-await": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz",
+ "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz",
+ "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz",
+ "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.12.1",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-remap-async-to-generator": "^7.12.1"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz",
+ "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.11.tgz",
+ "integrity": "sha512-atR1Rxc3hM+VPg/NvNvfYw0npQEAcHuJ+MGZnFn6h3bo+1U3BWXMdFMlvVRApBTWKQMX7SOwRJZA5FBF/JQbvA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz",
+ "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.10.4",
+ "@babel/helper-define-map": "^7.10.4",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-optimise-call-expression": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.12.1",
+ "@babel/helper-split-export-declaration": "^7.10.4",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz",
+ "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz",
+ "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz",
+ "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==",
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.12.1",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz",
+ "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz",
+ "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==",
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz",
+ "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz",
+ "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==",
+ "requires": {
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz",
+ "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-member-expression-literals": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz",
+ "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz",
+ "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==",
+ "requires": {
+ "@babel/helper-module-transforms": "^7.12.1",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz",
+ "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==",
+ "requires": {
+ "@babel/helper-module-transforms": "^7.12.1",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-simple-access": "^7.12.1",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz",
+ "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==",
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.10.4",
+ "@babel/helper-module-transforms": "^7.12.1",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz",
+ "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==",
+ "requires": {
+ "@babel/helper-module-transforms": "^7.12.1",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz",
+ "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==",
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.12.1"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz",
+ "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz",
+ "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.12.1"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz",
+ "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-property-literals": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz",
+ "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz",
+ "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==",
+ "requires": {
+ "regenerator-transform": "^0.14.2"
+ }
+ },
+ "@babel/plugin-transform-reserved-words": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz",
+ "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-runtime": {
+ "version": "7.12.10",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz",
+ "integrity": "sha512-xOrUfzPxw7+WDm9igMgQCbO3cJKymX7dFdsgRr1eu9n3KjjyU4pptIXbXPseQDquw+W+RuJEJMHKHNsPNNm3CA==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.12.5",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "semver": "^5.5.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz",
+ "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz",
+ "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz",
+ "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz",
+ "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.12.10",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz",
+ "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-unicode-escapes": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz",
+ "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz",
+ "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==",
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.12.1",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz",
+ "integrity": "sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==",
+ "requires": {
+ "@babel/compat-data": "^7.12.7",
+ "@babel/helper-compilation-targets": "^7.12.5",
+ "@babel/helper-module-imports": "^7.12.5",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-validator-option": "^7.12.11",
+ "@babel/plugin-proposal-async-generator-functions": "^7.12.1",
+ "@babel/plugin-proposal-class-properties": "^7.12.1",
+ "@babel/plugin-proposal-dynamic-import": "^7.12.1",
+ "@babel/plugin-proposal-export-namespace-from": "^7.12.1",
+ "@babel/plugin-proposal-json-strings": "^7.12.1",
+ "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
+ "@babel/plugin-proposal-numeric-separator": "^7.12.7",
+ "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.12.1",
+ "@babel/plugin-proposal-optional-chaining": "^7.12.7",
+ "@babel/plugin-proposal-private-methods": "^7.12.1",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.12.1",
+ "@babel/plugin-syntax-async-generators": "^7.8.0",
+ "@babel/plugin-syntax-class-properties": "^7.12.1",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.0",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.0",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.0",
+ "@babel/plugin-syntax-top-level-await": "^7.12.1",
+ "@babel/plugin-transform-arrow-functions": "^7.12.1",
+ "@babel/plugin-transform-async-to-generator": "^7.12.1",
+ "@babel/plugin-transform-block-scoped-functions": "^7.12.1",
+ "@babel/plugin-transform-block-scoping": "^7.12.11",
+ "@babel/plugin-transform-classes": "^7.12.1",
+ "@babel/plugin-transform-computed-properties": "^7.12.1",
+ "@babel/plugin-transform-destructuring": "^7.12.1",
+ "@babel/plugin-transform-dotall-regex": "^7.12.1",
+ "@babel/plugin-transform-duplicate-keys": "^7.12.1",
+ "@babel/plugin-transform-exponentiation-operator": "^7.12.1",
+ "@babel/plugin-transform-for-of": "^7.12.1",
+ "@babel/plugin-transform-function-name": "^7.12.1",
+ "@babel/plugin-transform-literals": "^7.12.1",
+ "@babel/plugin-transform-member-expression-literals": "^7.12.1",
+ "@babel/plugin-transform-modules-amd": "^7.12.1",
+ "@babel/plugin-transform-modules-commonjs": "^7.12.1",
+ "@babel/plugin-transform-modules-systemjs": "^7.12.1",
+ "@babel/plugin-transform-modules-umd": "^7.12.1",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1",
+ "@babel/plugin-transform-new-target": "^7.12.1",
+ "@babel/plugin-transform-object-super": "^7.12.1",
+ "@babel/plugin-transform-parameters": "^7.12.1",
+ "@babel/plugin-transform-property-literals": "^7.12.1",
+ "@babel/plugin-transform-regenerator": "^7.12.1",
+ "@babel/plugin-transform-reserved-words": "^7.12.1",
+ "@babel/plugin-transform-shorthand-properties": "^7.12.1",
+ "@babel/plugin-transform-spread": "^7.12.1",
+ "@babel/plugin-transform-sticky-regex": "^7.12.7",
+ "@babel/plugin-transform-template-literals": "^7.12.1",
+ "@babel/plugin-transform-typeof-symbol": "^7.12.10",
+ "@babel/plugin-transform-unicode-escapes": "^7.12.1",
+ "@babel/plugin-transform-unicode-regex": "^7.12.1",
+ "@babel/preset-modules": "^0.1.3",
+ "@babel/types": "^7.12.11",
+ "core-js-compat": "^3.8.0",
+ "semver": "^5.5.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+ "@babel/preset-modules": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz",
+ "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.12.5",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
+ "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.13.7",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
+ "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
+ }
+ }
+ },
+ "@babel/template": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz",
+ "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==",
+ "requires": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/parser": "^7.12.7",
+ "@babel/types": "^7.12.7"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.12.10",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.10.tgz",
+ "integrity": "sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg==",
+ "requires": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.12.10",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.11.0",
+ "@babel/parser": "^7.12.10",
+ "@babel/types": "^7.12.10",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.19"
+ }
+ },
+ "@babel/types": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.11.tgz",
+ "integrity": "sha512-ukA9SQtKThINm++CX1CwmliMrE54J6nIYB5XTwL5f/CLFW9owfls+YSU8tVW15RQ2w+a3fSbPjC6HdQNtWZkiA==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.12.11",
+ "lodash": "^4.17.19",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@coreui/coreui": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@coreui/coreui/-/coreui-3.4.0.tgz",
+ "integrity": "sha512-WqzockdWVkXUNmNwlqdu+AxM+9JoiWGe4rKaySu/dZme1NvVOn2ukjJlpTkssal8UKcSHyitzNixtkMCmUxE1A=="
+ },
+ "@coreui/coreui-chartjs": {
+ "version": "2.0.0-beta.0",
+ "resolved": "https://registry.npmjs.org/@coreui/coreui-chartjs/-/coreui-chartjs-2.0.0-beta.0.tgz",
+ "integrity": "sha512-Svua1A5YQNPbxcTMN/1TLiie/HJvT+iJ8VB3zPcy/c+ihJvFlIf7D0I5JcRL6LvQkZydq2xQiZ9/73Q+Z5BV6Q==",
+ "requires": {
+ "@coreui/coreui": "^3.0.0-beta.1",
+ "chart.js": "^2.8.0"
+ },
+ "dependencies": {
+ "chart.js": {
+ "version": "2.9.4",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz",
+ "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==",
+ "requires": {
+ "chartjs-color": "^2.1.0",
+ "moment": "^2.10.2"
+ }
+ }
+ }
+ },
+ "@coreui/icons": {
+ "version": "2.0.0-rc.0",
+ "resolved": "https://registry.npmjs.org/@coreui/icons/-/icons-2.0.0-rc.0.tgz",
+ "integrity": "sha512-Bg+uQKzEhERRZk1qo8tcR3bjJQDzv6+uDjt5IpjFwqnnnHE4gZE6adZ7jyMYQjgIlelEaS8ZOlE1M7aKHDWZSA=="
+ },
+ "@coreui/icons-vue": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/@coreui/icons-vue/-/icons-vue-1.3.5.tgz",
+ "integrity": "sha512-GgvtUzyla/kfshaGVhqOxwWOHOCOmtACGD6SXilzw2Puz9LAX6Q9YCn20C1NIkCt8qtJ09jHyyucIZ9Eu+jv0A==",
+ "requires": {
+ "vue": "~2.6.11"
+ }
+ },
+ "@coreui/utils": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@coreui/utils/-/utils-1.3.1.tgz",
+ "integrity": "sha512-WuWHX7bg89cJH34TWVsLe9RsxzBhTApj+X2Ja19xhjcpxt5Gv11Ozm+fwYt6DD7DgncTvpwYrMcnNlpp701UOg=="
+ },
+ "@coreui/vue": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@coreui/vue/-/vue-3.2.7.tgz",
+ "integrity": "sha512-FGyjaa1Ic+slyXHNhWQFMaHfE9lvRc4I2vsh5/SBuKVJiEdonik4AGleejWAFuLAYV5Q1BDUPBD8G2PjhcLt7g==",
+ "requires": {
+ "@coreui/icons": "^2.0.0-rc.0",
+ "@coreui/icons-vue": "^1.3.5",
+ "@coreui/utils": "^1.3.1",
+ "@popperjs/core": "^2.6.0",
+ "lodash.clonedeep": "~4.5.0",
+ "perfect-scrollbar": "~1.5.0",
+ "tooltip.js": "~1.3.3",
+ "vue": "^2.6.12",
+ "vue-functional-data-merge": "~3.1.0"
+ }
+ },
+ "@coreui/vue-chartjs": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@coreui/vue-chartjs/-/vue-chartjs-1.0.6.tgz",
+ "integrity": "sha512-x116yRGqBfxBxFFMhJXsY2MDbIBJWajSA24j2w4zyrShjshES2G6iBxi9zSbug0H+3ariYY+fyhv/0uFJ4G/Yg==",
+ "requires": {
+ "@coreui/coreui-chartjs": "2.0.0-beta.0",
+ "chart.js": "^2.9.3",
+ "vue": "^2.6.12"
+ },
+ "dependencies": {
+ "chart.js": {
+ "version": "2.9.4",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz",
+ "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==",
+ "requires": {
+ "chartjs-color": "^2.1.0",
+ "moment": "^2.10.2"
+ }
+ }
+ }
+ },
+ "@csstools/convert-colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz",
+ "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw=="
+ },
+ "@eslint/eslintrc": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz",
+ "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.3.1",
+ "globals": "^13.9.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "globals": {
+ "version": "13.13.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz",
+ "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ }
+ }
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
+ "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "@jimp/bmp": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.1.tgz",
+ "integrity": "sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1",
+ "bmp-js": "^0.1.0"
+ }
+ },
+ "@jimp/core": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.1.tgz",
+ "integrity": "sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1",
+ "any-base": "^1.1.0",
+ "buffer": "^5.2.0",
+ "exif-parser": "^0.1.12",
+ "file-type": "^9.0.0",
+ "load-bmfont": "^1.3.1",
+ "mkdirp": "^0.5.1",
+ "phin": "^2.9.1",
+ "pixelmatch": "^4.0.2",
+ "tinycolor2": "^1.4.1"
+ },
+ "dependencies": {
+ "buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ }
+ }
+ },
+ "@jimp/custom": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.1.tgz",
+ "integrity": "sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/core": "^0.16.1"
+ }
+ },
+ "@jimp/gif": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.1.tgz",
+ "integrity": "sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1",
+ "gifwrap": "^0.9.2",
+ "omggif": "^1.0.9"
+ }
+ },
+ "@jimp/jpeg": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.1.tgz",
+ "integrity": "sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1",
+ "jpeg-js": "0.4.2"
+ }
+ },
+ "@jimp/plugin-blit": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz",
+ "integrity": "sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-blur": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz",
+ "integrity": "sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-circle": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz",
+ "integrity": "sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-color": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.1.tgz",
+ "integrity": "sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1",
+ "tinycolor2": "^1.4.1"
+ }
+ },
+ "@jimp/plugin-contain": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz",
+ "integrity": "sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-cover": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz",
+ "integrity": "sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-crop": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz",
+ "integrity": "sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-displace": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz",
+ "integrity": "sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-dither": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz",
+ "integrity": "sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-fisheye": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz",
+ "integrity": "sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-flip": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz",
+ "integrity": "sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-gaussian": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz",
+ "integrity": "sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-invert": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz",
+ "integrity": "sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-mask": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz",
+ "integrity": "sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-normalize": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz",
+ "integrity": "sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-print": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.1.tgz",
+ "integrity": "sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1",
+ "load-bmfont": "^1.4.0"
+ }
+ },
+ "@jimp/plugin-resize": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz",
+ "integrity": "sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-rotate": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz",
+ "integrity": "sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-scale": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz",
+ "integrity": "sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-shadow": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz",
+ "integrity": "sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-threshold": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz",
+ "integrity": "sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugins": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.1.tgz",
+ "integrity": "sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/plugin-blit": "^0.16.1",
+ "@jimp/plugin-blur": "^0.16.1",
+ "@jimp/plugin-circle": "^0.16.1",
+ "@jimp/plugin-color": "^0.16.1",
+ "@jimp/plugin-contain": "^0.16.1",
+ "@jimp/plugin-cover": "^0.16.1",
+ "@jimp/plugin-crop": "^0.16.1",
+ "@jimp/plugin-displace": "^0.16.1",
+ "@jimp/plugin-dither": "^0.16.1",
+ "@jimp/plugin-fisheye": "^0.16.1",
+ "@jimp/plugin-flip": "^0.16.1",
+ "@jimp/plugin-gaussian": "^0.16.1",
+ "@jimp/plugin-invert": "^0.16.1",
+ "@jimp/plugin-mask": "^0.16.1",
+ "@jimp/plugin-normalize": "^0.16.1",
+ "@jimp/plugin-print": "^0.16.1",
+ "@jimp/plugin-resize": "^0.16.1",
+ "@jimp/plugin-rotate": "^0.16.1",
+ "@jimp/plugin-scale": "^0.16.1",
+ "@jimp/plugin-shadow": "^0.16.1",
+ "@jimp/plugin-threshold": "^0.16.1",
+ "timm": "^1.6.1"
+ }
+ },
+ "@jimp/png": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.1.tgz",
+ "integrity": "sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1",
+ "pngjs": "^3.3.3"
+ }
+ },
+ "@jimp/tiff": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.1.tgz",
+ "integrity": "sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "utif": "^2.0.1"
+ }
+ },
+ "@jimp/types": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.1.tgz",
+ "integrity": "sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/bmp": "^0.16.1",
+ "@jimp/gif": "^0.16.1",
+ "@jimp/jpeg": "^0.16.1",
+ "@jimp/png": "^0.16.1",
+ "@jimp/tiff": "^0.16.1",
+ "timm": "^1.6.1"
+ }
+ },
+ "@jimp/utils": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.1.tgz",
+ "integrity": "sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "regenerator-runtime": "^0.13.3"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.13.7",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
+ "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
+ }
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz",
+ "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==",
+ "dev": true
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.11",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
+ "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==",
+ "dev": true
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz",
+ "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
+ "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
+ "requires": {
+ "@nodelib/fs.stat": "2.0.3",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
+ "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA=="
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
+ "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.3",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@nuxt/babel-preset-app": {
+ "version": "2.14.12",
+ "resolved": "https://registry.npmjs.org/@nuxt/babel-preset-app/-/babel-preset-app-2.14.12.tgz",
+ "integrity": "sha512-6qAW5i4F+nCRWyGBytJAEJ/P0yH9RpYmIqWwkzQd1GQ1EuO1Fuc9QoOmmzbs+3MrwW7HzpQ5jJtLDuzhQ+e5/w==",
+ "requires": {
+ "@babel/core": "^7.12.9",
+ "@babel/helper-compilation-targets": "^7.12.5",
+ "@babel/plugin-proposal-class-properties": "^7.12.1",
+ "@babel/plugin-proposal-decorators": "^7.12.1",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
+ "@babel/plugin-proposal-optional-chaining": "^7.12.7",
+ "@babel/plugin-transform-runtime": "^7.12.1",
+ "@babel/preset-env": "^7.12.7",
+ "@babel/runtime": "^7.12.5",
+ "@vue/babel-preset-jsx": "^1.2.4",
+ "core-js": "^2.6.5"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
+ "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
+ }
+ }
+ },
+ "@nuxt/builder": {
+ "version": "2.14.12",
+ "resolved": "https://registry.npmjs.org/@nuxt/builder/-/builder-2.14.12.tgz",
+ "integrity": "sha512-I25K6BEZVJv7p2bAJfNFAXXEaSF41DGV/QZBAXVb/gFjmhZABNYfvIkwHGnAv5n1JPHHi2Y1R3gsFM4fFXkxxw==",
+ "requires": {
+ "@nuxt/devalue": "^1.2.4",
+ "@nuxt/utils": "2.14.12",
+ "@nuxt/vue-app": "2.14.12",
+ "@nuxt/webpack": "2.14.12",
+ "chalk": "^3.0.0",
+ "chokidar": "^3.4.3",
+ "consola": "^2.15.0",
+ "fs-extra": "^8.1.0",
+ "glob": "^7.1.6",
+ "hash-sum": "^2.0.0",
+ "ignore": "^5.1.8",
+ "lodash": "^4.17.20",
+ "pify": "^4.0.1",
+ "semver": "^7.3.2",
+ "serialize-javascript": "^5.0.1",
+ "upath": "^2.0.1"
+ }
+ },
+ "@nuxt/cli": {
+ "version": "2.14.12",
+ "resolved": "https://registry.npmjs.org/@nuxt/cli/-/cli-2.14.12.tgz",
+ "integrity": "sha512-YRWY1Gg0c3kcO9vg9/Ig9ZMzih5mhxsBTm5b7DCLAEIALBVcJJLamLDnY2C52YLUeMIcY5XCi0HkizvPIv9r2w==",
+ "requires": {
+ "@nuxt/config": "2.14.12",
+ "@nuxt/utils": "2.14.12",
+ "boxen": "^4.2.0",
+ "chalk": "^3.0.0",
+ "compression": "^1.7.4",
+ "connect": "^3.7.0",
+ "consola": "^2.15.0",
+ "crc": "^3.8.0",
+ "destr": "^1.0.1",
+ "esm": "^3.2.25",
+ "execa": "^3.4.0",
+ "exit": "^0.1.2",
+ "fs-extra": "^8.1.0",
+ "globby": "^11.0.1",
+ "hable": "^3.0.0",
+ "minimist": "^1.2.5",
+ "opener": "1.5.2",
+ "pretty-bytes": "^5.4.1",
+ "serve-static": "^1.14.1",
+ "std-env": "^2.2.1",
+ "upath": "^2.0.1",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "@nuxt/components": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@nuxt/components/-/components-1.2.2.tgz",
+ "integrity": "sha512-AByrBPnV4mWwwf1tPaKLmtg6JBsNJACLuSnpJOpWGV6KjS5S8i6BTf8dqiPN0uGg6YeSQaeDWtnfILcoLp2GSw==",
+ "requires": {
+ "chalk": "^4.1.0",
+ "chokidar": "^3.4.3",
+ "glob": "^7.1.6",
+ "globby": "^11.0.1",
+ "lodash": "^4.17.20",
+ "semver": "^7.3.4",
+ "vue-template-compiler": "^2.6.12"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "@nuxt/config": {
+ "version": "2.14.12",
+ "resolved": "https://registry.npmjs.org/@nuxt/config/-/config-2.14.12.tgz",
+ "integrity": "sha512-Ob861w1BjgI1IcpXRC14TKMpUSogGYX/BFn7q/0HkntYxSOQAkMaaUZ0/YEx6IR1fuZV2v+NB8M4IkyUrgW1YA==",
+ "requires": {
+ "@nuxt/ufo": "^0.5.0",
+ "@nuxt/utils": "2.14.12",
+ "consola": "^2.15.0",
+ "create-require": "^1.1.1",
+ "defu": "^2.0.4",
+ "destr": "^1.0.1",
+ "dotenv": "^8.2.0",
+ "esm": "^3.2.25",
+ "jiti": "^0.1.17",
+ "rc9": "^1.2.0",
+ "std-env": "^2.2.1"
+ },
+ "dependencies": {
+ "defu": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/defu/-/defu-2.0.4.tgz",
+ "integrity": "sha512-G9pEH1UUMxShy6syWk01VQSRVs3CDWtlxtZu7A+NyqjxaCA4gSlWAKDBx6QiUEKezqS8+DUlXLI14Fp05Hmpwg=="
+ },
+ "dotenv": {
+ "version": "8.6.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
+ "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g=="
+ }
+ }
+ },
+ "@nuxt/core": {
+ "version": "2.14.12",
+ "resolved": "https://registry.npmjs.org/@nuxt/core/-/core-2.14.12.tgz",
+ "integrity": "sha512-J+ej2KYzB05jpGkEH5y+dHdOLEa/GKSJvJBWf5Zq0wgneOHUaxB+dnBNxIRO75eXHslHxE++y/PRIQ9ZlEdtOw==",
+ "requires": {
+ "@nuxt/config": "2.14.12",
+ "@nuxt/devalue": "^1.2.4",
+ "@nuxt/server": "2.14.12",
+ "@nuxt/utils": "2.14.12",
+ "@nuxt/vue-renderer": "2.14.12",
+ "consola": "^2.15.0",
+ "debug": "^4.2.0",
+ "esm": "^3.2.25",
+ "fs-extra": "^8.1.0",
+ "hable": "^3.0.0",
+ "hash-sum": "^2.0.0",
+ "std-env": "^2.2.1"
+ }
+ },
+ "@nuxt/devalue": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@nuxt/devalue/-/devalue-1.2.4.tgz",
+ "integrity": "sha512-hS87c2HdSfTk1d+2KQx7mQpebyd2HjguvZu/UBy9LB+kUgT1qz2+Sj38FH32yJALK6Fv49ZfOZEwgcZ4rcNLjg==",
+ "requires": {
+ "consola": "^2.9.0"
+ }
+ },
+ "@nuxt/friendly-errors-webpack-plugin": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@nuxt/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-2.5.0.tgz",
+ "integrity": "sha512-pUgPFmRL56/xuTCGN5rqgTfxvs1N/AYJw7q7tUHiZaBm3UyPgbIVPkadS9njwbFbPD2XcebVy7npQMMVwQJWfA==",
+ "requires": {
+ "chalk": "^2.3.2",
+ "consola": "^2.6.0",
+ "error-stack-parser": "^2.0.0",
+ "string-width": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
+ }
+ },
+ "@nuxt/generator": {
+ "version": "2.14.12",
+ "resolved": "https://registry.npmjs.org/@nuxt/generator/-/generator-2.14.12.tgz",
+ "integrity": "sha512-r7+QW3gk0nUGaaHW8zCQ9DaBAmr+LvEI7YOLFeTQdJUjwHBdw65ga36KpL3aC1HIRkb7LgWD6lbyGKJiASkpWQ==",
+ "requires": {
+ "@nuxt/utils": "2.14.12",
+ "chalk": "^3.0.0",
+ "consola": "^2.15.0",
+ "devalue": "^2.0.1",
+ "fs-extra": "^8.1.0",
+ "html-minifier": "^4.0.0",
+ "node-html-parser": "^2.0.0"
+ }
+ },
+ "@nuxt/loading-screen": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@nuxt/loading-screen/-/loading-screen-2.0.3.tgz",
+ "integrity": "sha512-ThvxxUpfTZezzz0gAgyG4vHCM7KDeA692EL7lKrZ/fU8JvXlG6LYngVLWAobexBsydtGkuZyKCwCVDnEGNL4jw==",
+ "requires": {
+ "connect": "^3.7.0",
+ "defu": "^2.0.4",
+ "get-port-please": "^1.0.0",
+ "node-res": "^5.0.1",
+ "serve-static": "^1.14.1"
+ },
+ "dependencies": {
+ "defu": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/defu/-/defu-2.0.4.tgz",
+ "integrity": "sha512-G9pEH1UUMxShy6syWk01VQSRVs3CDWtlxtZu7A+NyqjxaCA4gSlWAKDBx6QiUEKezqS8+DUlXLI14Fp05Hmpwg=="
+ }
+ }
+ },
+ "@nuxt/opencollective": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.3.2.tgz",
+ "integrity": "sha512-XG7rUdXG9fcafu9KTDIYjJSkRO38EwjlKYIb5TQ/0WDbiTUTtUtgncMscKOYzfsY86kGs05pAuMOR+3Fi0aN3A==",
+ "requires": {
+ "chalk": "^4.1.0",
+ "consola": "^2.15.0",
+ "node-fetch": "^2.6.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "@nuxt/server": {
+ "version": "2.14.12",
+ "resolved": "https://registry.npmjs.org/@nuxt/server/-/server-2.14.12.tgz",
+ "integrity": "sha512-HDOYgjv01zRSmLxPutrXb/F7kwisR+Vur0b2MEyxqBTTy7OcxiyQn1CcXozl/Q21iqZdcGpu/tRpCHO7B8bKOQ==",
+ "requires": {
+ "@nuxt/config": "2.14.12",
+ "@nuxt/utils": "2.14.12",
+ "@nuxt/vue-renderer": "2.14.12",
+ "@nuxtjs/youch": "^4.2.3",
+ "chalk": "^3.0.0",
+ "compression": "^1.7.4",
+ "connect": "^3.7.0",
+ "consola": "^2.15.0",
+ "etag": "^1.8.1",
+ "fresh": "^0.5.2",
+ "fs-extra": "^8.1.0",
+ "ip": "^1.1.5",
+ "launch-editor-middleware": "^2.2.1",
+ "on-headers": "^1.0.2",
+ "pify": "^4.0.1",
+ "serve-placeholder": "^1.2.2",
+ "serve-static": "^1.14.1",
+ "server-destroy": "^1.0.1"
+ }
+ },
+ "@nuxt/telemetry": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-1.3.0.tgz",
+ "integrity": "sha512-anAhyccoVyy/RetkqVsIxpJKdAu/GHyLl79ZtH0oOCbYcC85k8d+LC1S10WcqXyeqyUKifLxGR6yPqSPmQCCtg==",
+ "requires": {
+ "arg": "^5.0.0",
+ "chalk": "^4.1.0",
+ "ci-info": "^2.0.0",
+ "consola": "^2.15.0",
+ "create-require": "^1.1.0",
+ "defu": "^3.2.2",
+ "destr": "^1.0.1",
+ "dotenv": "^8.2.0",
+ "fs-extra": "^8.1.0",
+ "git-url-parse": "^11.4.0",
+ "inquirer": "^7.3.3",
+ "is-docker": "^2.1.1",
+ "jiti": "^0.1.16",
+ "nanoid": "^3.1.18",
+ "node-fetch": "^2.6.1",
+ "parse-git-config": "^3.0.0",
+ "rc9": "^1.2.0",
+ "std-env": "^2.2.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "dotenv": {
+ "version": "8.6.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
+ "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "@nuxt/ufo": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/@nuxt/ufo/-/ufo-0.5.2.tgz",
+ "integrity": "sha512-nnKFQ4NA5id5ekyQWHTdOfirIZRQzfEHMB9T0T6NZdWy4+3Nrw0GTBQ3J9Am0gg8kvqR0mMQTn1wK6ya3i/XmA=="
+ },
+ "@nuxt/utils": {
+ "version": "2.14.12",
+ "resolved": "https://registry.npmjs.org/@nuxt/utils/-/utils-2.14.12.tgz",
+ "integrity": "sha512-XAy18aT2JOuyGnCuGImelOMwheLRo/qBkjqufa/TLIqnBtywdv2y7WP7c9uGTZrwh+O6KHYFeeZjnLqFI0r/xQ==",
+ "requires": {
+ "@nuxt/ufo": "^0.5.0",
+ "consola": "^2.15.0",
+ "fs-extra": "^8.1.0",
+ "hash-sum": "^2.0.0",
+ "proper-lockfile": "^4.1.1",
+ "semver": "^7.3.2",
+ "serialize-javascript": "^5.0.1",
+ "signal-exit": "^3.0.3",
+ "ua-parser-js": "^0.7.22"
+ }
+ },
+ "@nuxt/vue-app": {
+ "version": "2.14.12",
+ "resolved": "https://registry.npmjs.org/@nuxt/vue-app/-/vue-app-2.14.12.tgz",
+ "integrity": "sha512-DwkXh8Djn2wi2qLetupDKpRIFmBDNZKrdT94xFieI5qY32EhLj9d/T80wZoZNZkPVqAKcwq24WktCSVRQ/uiOw==",
+ "requires": {
+ "@nuxt/ufo": "^0.5.0",
+ "node-fetch": "^2.6.1",
+ "unfetch": "^4.2.0",
+ "vue": "^2.6.12",
+ "vue-client-only": "^2.0.0",
+ "vue-meta": "^2.4.0",
+ "vue-no-ssr": "^1.1.1",
+ "vue-router": "^3.4.9",
+ "vue-template-compiler": "^2.6.12",
+ "vuex": "^3.6.0"
+ }
+ },
+ "@nuxt/vue-renderer": {
+ "version": "2.14.12",
+ "resolved": "https://registry.npmjs.org/@nuxt/vue-renderer/-/vue-renderer-2.14.12.tgz",
+ "integrity": "sha512-bYqN1SIumi4EKWDaay6+V2NxcWS/IygOQekfuvNKYhQk97pzkBuXrBGgI6WRdSGLcEBFV0DpHxx66XWVXghL/g==",
+ "requires": {
+ "@nuxt/devalue": "^1.2.4",
+ "@nuxt/ufo": "^0.5.0",
+ "@nuxt/utils": "2.14.12",
+ "consola": "^2.15.0",
+ "fs-extra": "^8.1.0",
+ "lru-cache": "^5.1.1",
+ "vue": "^2.6.12",
+ "vue-meta": "^2.4.0",
+ "vue-server-renderer": "^2.6.12"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ }
+ }
+ },
+ "@nuxt/webpack": {
+ "version": "2.14.12",
+ "resolved": "https://registry.npmjs.org/@nuxt/webpack/-/webpack-2.14.12.tgz",
+ "integrity": "sha512-fZjs000HVkZ4zvVY5KVnRVBpOxAB4o+cx90rte9GZlU/GaJPZ5Go7KQmxnws0SaAqeN3MorURuu0JU05n3ko9g==",
+ "requires": {
+ "@babel/core": "^7.12.9",
+ "@nuxt/babel-preset-app": "2.14.12",
+ "@nuxt/friendly-errors-webpack-plugin": "^2.5.0",
+ "@nuxt/utils": "2.14.12",
+ "babel-loader": "^8.2.2",
+ "cache-loader": "^4.1.0",
+ "caniuse-lite": "^1.0.30001164",
+ "chalk": "^3.0.0",
+ "consola": "^2.15.0",
+ "create-require": "^1.1.1",
+ "css-loader": "^3.6.0",
+ "cssnano": "^4.1.10",
+ "eventsource-polyfill": "^0.9.6",
+ "extract-css-chunks-webpack-plugin": "^4.8.0",
+ "file-loader": "^4.3.0",
+ "glob": "^7.1.6",
+ "hard-source-webpack-plugin": "^0.13.1",
+ "hash-sum": "^2.0.0",
+ "html-webpack-plugin": "^4.5.0",
+ "memory-fs": "^0.4.1",
+ "optimize-css-assets-webpack-plugin": "^5.0.4",
+ "pify": "^4.0.1",
+ "postcss": "^7.0.32",
+ "postcss-import": "^12.0.1",
+ "postcss-import-resolver": "^2.0.0",
+ "postcss-loader": "^3.0.0",
+ "postcss-preset-env": "^6.7.0",
+ "postcss-url": "^8.0.0",
+ "semver": "^7.3.2",
+ "std-env": "^2.2.1",
+ "style-resources-loader": "^1.4.1",
+ "terser-webpack-plugin": "^2.3.5",
+ "thread-loader": "^2.1.3",
+ "time-fix-plugin": "^2.0.7",
+ "url-loader": "^2.3.0",
+ "vue-loader": "^15.9.5",
+ "webpack": "^4.44.2",
+ "webpack-bundle-analyzer": "^3.9.0",
+ "webpack-dev-middleware": "^3.7.2",
+ "webpack-hot-middleware": "^2.25.0",
+ "webpack-node-externals": "^2.5.2",
+ "webpackbar": "^4.0.0"
+ }
+ },
+ "@nuxtjs/auth": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@nuxtjs/auth/-/auth-4.9.1.tgz",
+ "integrity": "sha512-h5VZanq2+P47jq3t0EnsZv800cg/ufOPC6JqvcyeDFJM99p58jHSODAjDuePo3PrZxd8hovMk7zusU5lOHgjvQ==",
+ "requires": {
+ "@nuxtjs/axios": "^5.9.5",
+ "body-parser": "^1.19.0",
+ "consola": "^2.11.3",
+ "cookie": "^0.4.0",
+ "is-https": "^1.0.0",
+ "js-cookie": "^2.2.1",
+ "lodash": "^4.17.15",
+ "nanoid": "^2.1.11"
+ },
+ "dependencies": {
+ "nanoid": {
+ "version": "2.1.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz",
+ "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA=="
+ }
+ }
+ },
+ "@nuxtjs/auth-next": {
+ "version": "5.0.0-1610375166.4d8db9d",
+ "resolved": "https://registry.npmjs.org/@nuxtjs/auth-next/-/auth-next-5.0.0-1610375166.4d8db9d.tgz",
+ "integrity": "sha512-EbdkVDdhBLk/iCB86cRvcZO2Zc43HO/ceBCGZF9dNdcfa7mcHnf65/oKAbWhEJz4ksuAG0wmZbVNfMpPsTbXrA==",
+ "requires": {
+ "@nuxtjs/axios": "^5.12.4",
+ "axios": "^0.21.0",
+ "body-parser": "^1.19.0",
+ "consola": "^2.15.0",
+ "cookie": "^0.4.1",
+ "defu": "^3.2.2",
+ "hasha": "^5.2.2",
+ "jwt-decode": "^3.1.2",
+ "requrl": "^3.0.2"
+ },
+ "dependencies": {
+ "cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
+ }
+ }
+ },
+ "@nuxtjs/axios": {
+ "version": "5.12.4",
+ "resolved": "https://registry.npmjs.org/@nuxtjs/axios/-/axios-5.12.4.tgz",
+ "integrity": "sha512-NKDIkrhtteOwC163Qlglw7YyjWHfLecpC/wXax4Z2tVVDlYnvSBa1KGoH9AnDY30lfvi0gjBKWCcTnUY8PaWDA==",
+ "requires": {
+ "@nuxtjs/proxy": "^2.1.0",
+ "axios": "^0.21.0",
+ "axios-retry": "^3.1.9",
+ "consola": "^2.15.0",
+ "defu": "^3.2.2"
+ }
+ },
+ "@nuxtjs/eslint-config": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@nuxtjs/eslint-config/-/eslint-config-8.0.0.tgz",
+ "integrity": "sha512-NuZSiMdSCuBukwWgmNQuMYoA/jgL9SLfecOurUUQw/1QTcD0YKh0RxY4h9rNJB2jkfayzmZ+Y11hlOml40FVvw==",
+ "dev": true,
+ "requires": {
+ "eslint-config-standard": "^16.0.3",
+ "eslint-plugin-import": "^2.25.3",
+ "eslint-plugin-jest": "^25.3.0",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-promise": "^5.1.1",
+ "eslint-plugin-unicorn": "^39.0.0",
+ "eslint-plugin-vue": "^8.1.1"
+ }
+ },
+ "@nuxtjs/eslint-module": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@nuxtjs/eslint-module/-/eslint-module-3.1.0.tgz",
+ "integrity": "sha512-9bK8AOJBflWmbQeL77SHIsgyGzhiW2b1BdwOtZ53Yyfa7Km3XMMVd8CtLA7z4+03eS+4TVQMxw62yRpJH5icZA==",
+ "dev": true,
+ "requires": {
+ "consola": "^2.15.3",
+ "defu": "^6.0.0",
+ "eslint-webpack-plugin": "^2.6.0"
+ },
+ "dependencies": {
+ "consola": {
+ "version": "2.15.3",
+ "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz",
+ "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==",
+ "dev": true
+ },
+ "defu": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/defu/-/defu-6.0.0.tgz",
+ "integrity": "sha512-t2MZGLf1V2rV4VBZbWIaXKdX/mUcYW0n2znQZoADBkGGxYL8EWqCuCZBmJPJ/Yy9fofJkyuuSuo5GSwo0XdEgw==",
+ "dev": true
+ }
+ }
+ },
+ "@nuxtjs/proxy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@nuxtjs/proxy/-/proxy-2.1.0.tgz",
+ "integrity": "sha512-/qtoeqXgZ4Mg6LRg/gDUZQrFpOlOdHrol/vQYMnKu3aN3bP90UfOUB3QSDghUUK7OISAJ0xp8Ld78aHyCTcKCQ==",
+ "requires": {
+ "http-proxy-middleware": "^1.0.6"
+ }
+ },
+ "@nuxtjs/pwa": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/@nuxtjs/pwa/-/pwa-3.3.5.tgz",
+ "integrity": "sha512-8tTmW8DBspWxlJwTimOHTkwfkwPpL9wIcGmy75Gcmin+c9YtX2Ehxmhgt/TLFOC9XsLAqojqynw3/Agr/9OE1w==",
+ "dev": true,
+ "requires": {
+ "clone-deep": "^4.0.1",
+ "defu": "^3.2.2",
+ "execa": "^5.0.0",
+ "fs-extra": "^9.1.0",
+ "hasha": "^5.2.2",
+ "jimp-compact": "^0.16.1",
+ "lodash.template": "^4.5.0",
+ "serve-static": "^1.14.1",
+ "workbox-cdn": "^5.1.4"
+ },
+ "dependencies": {
+ "execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "requires": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true
+ },
+ "human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
+ },
+ "universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true
+ }
+ }
+ },
+ "@nuxtjs/youch": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/@nuxtjs/youch/-/youch-4.2.3.tgz",
+ "integrity": "sha512-XiTWdadTwtmL/IGkNqbVe+dOlT+IMvcBu7TvKI7plWhVQeBCQ9iKhk3jgvVWFyiwL2yHJDlEwOM5v9oVES5Xmw==",
+ "requires": {
+ "cookie": "^0.3.1",
+ "mustache": "^2.3.0",
+ "stack-trace": "0.0.10"
+ },
+ "dependencies": {
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ }
+ }
+ },
+ "@popperjs/core": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.6.0.tgz",
+ "integrity": "sha512-cPqjjzuFWNK3BSKLm0abspP0sp/IGOli4p5I5fKFAzdS8fvjdOwDCfZqAaIiXd9lPkOWi3SUUfZof3hEb7J/uw=="
+ },
+ "@socket.io/base64-arraybuffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+ "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ=="
+ },
+ "@types/anymatch": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz",
+ "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA=="
+ },
+ "@types/bson": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz",
+ "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/component-emitter": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
+ "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ=="
+ },
+ "@types/cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
+ },
+ "@types/cors": {
+ "version": "2.8.12",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
+ "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
+ },
+ "@types/eslint": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz",
+ "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "@types/estree": {
+ "version": "0.0.51",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
+ "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
+ "dev": true
+ },
+ "@types/html-minifier-terser": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
+ "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA=="
+ },
+ "@types/http-proxy": {
+ "version": "1.17.4",
+ "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.4.tgz",
+ "integrity": "sha512-IrSHl2u6AWXduUaDLqYpt45tLVCtYv7o4Z0s1KghBCDgIIS9oW5K1H8mZG/A2CfeLdEa7rTd1ACOiHBc1EMT2Q==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/json-schema": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz",
+ "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw=="
+ },
+ "@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
+ "dev": true
+ },
+ "@types/mongodb": {
+ "version": "3.6.3",
+ "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.3.tgz",
+ "integrity": "sha512-6YNqGP1hk5bjUFaim+QoFFuI61WjHiHE1BNeB41TA00Xd2K7zG4lcWyLLq/XtIp36uMavvS5hoAUJ+1u/GcX2Q==",
+ "requires": {
+ "@types/bson": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/node": {
+ "version": "14.14.14",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.14.tgz",
+ "integrity": "sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ=="
+ },
+ "@types/normalize-package-data": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
+ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+ "dev": true
+ },
+ "@types/q": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
+ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug=="
+ },
+ "@types/source-list-map": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
+ "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA=="
+ },
+ "@types/tapable": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz",
+ "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA=="
+ },
+ "@types/uglify-js": {
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.11.1.tgz",
+ "integrity": "sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q==",
+ "requires": {
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "@types/webpack": {
+ "version": "4.41.25",
+ "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.25.tgz",
+ "integrity": "sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ==",
+ "requires": {
+ "@types/anymatch": "*",
+ "@types/node": "*",
+ "@types/tapable": "*",
+ "@types/uglify-js": "*",
+ "@types/webpack-sources": "*",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "@types/webpack-sources": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.0.tgz",
+ "integrity": "sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg==",
+ "requires": {
+ "@types/node": "*",
+ "@types/source-list-map": "*",
+ "source-map": "^0.7.3"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
+ }
+ }
+ },
+ "@typescript-eslint/experimental-utils": {
+ "version": "5.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.19.0.tgz",
+ "integrity": "sha512-F+X/TTzmb2UXbghY1LrNLNDjMcGZMhKzXuzvu0xD+YEB77EamLM7zMOLuz2kP5807IJRDLBoAFFPYa7HT62sYg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/utils": "5.19.0"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "5.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.19.0.tgz",
+ "integrity": "sha512-Fz+VrjLmwq5fbQn5W7cIJZ066HxLMKvDEmf4eu1tZ8O956aoX45jAuBB76miAECMTODyUxH61AQM7q4/GOMQ5g==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.19.0",
+ "@typescript-eslint/visitor-keys": "5.19.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.19.0.tgz",
+ "integrity": "sha512-zR1ithF4Iyq1wLwkDcT+qFnhs8L5VUtjgac212ftiOP/ZZUOCuuF2DeGiZZGQXGoHA50OreZqLH5NjDcDqn34w==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.19.0.tgz",
+ "integrity": "sha512-dRPuD4ocXdaE1BM/dNR21elSEUPKaWgowCA0bqJ6YbYkvtrPVEvZ+zqcX5a8ECYn3q5iBSSUcBBD42ubaOp0Hw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.19.0",
+ "@typescript-eslint/visitor-keys": "5.19.0",
+ "debug": "^4.3.2",
+ "globby": "^11.0.4",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "fast-glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ }
+ },
+ "ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/utils": {
+ "version": "5.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.19.0.tgz",
+ "integrity": "sha512-ZuEckdupXpXamKvFz/Ql8YnePh2ZWcwz7APICzJL985Rp5C2AYcHO62oJzIqNhAMtMK6XvrlBTZeNG8n7gS3lQ==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.9",
+ "@typescript-eslint/scope-manager": "5.19.0",
+ "@typescript-eslint/types": "5.19.0",
+ "@typescript-eslint/typescript-estree": "5.19.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
+ },
+ "dependencies": {
+ "@types/json-schema": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "dev": true
+ },
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.19.0.tgz",
+ "integrity": "sha512-Ym7zZoMDZcAKWsULi2s7UMLREdVQdScPQ/fKWMYefarCztWlHPFVJo8racf8R0Gc8FAEJ2eD4of8As1oFtnQlQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.19.0",
+ "eslint-visitor-keys": "^3.0.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true
+ }
+ }
+ },
+ "@vue/babel-helper-vue-jsx-merge-props": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz",
+ "integrity": "sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA=="
+ },
+ "@vue/babel-plugin-transform-vue-jsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz",
+ "integrity": "sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.2.0",
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+ "html-tags": "^2.0.0",
+ "lodash.kebabcase": "^4.1.1",
+ "svg-tags": "^1.0.0"
+ }
+ },
+ "@vue/babel-preset-jsx": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz",
+ "integrity": "sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==",
+ "requires": {
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+ "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+ "@vue/babel-sugar-composition-api-inject-h": "^1.2.1",
+ "@vue/babel-sugar-composition-api-render-instance": "^1.2.4",
+ "@vue/babel-sugar-functional-vue": "^1.2.2",
+ "@vue/babel-sugar-inject-h": "^1.2.2",
+ "@vue/babel-sugar-v-model": "^1.2.3",
+ "@vue/babel-sugar-v-on": "^1.2.3"
+ }
+ },
+ "@vue/babel-sugar-composition-api-inject-h": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz",
+ "integrity": "sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==",
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@vue/babel-sugar-composition-api-render-instance": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz",
+ "integrity": "sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==",
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@vue/babel-sugar-functional-vue": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz",
+ "integrity": "sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==",
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@vue/babel-sugar-inject-h": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz",
+ "integrity": "sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==",
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@vue/babel-sugar-v-model": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz",
+ "integrity": "sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==",
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0",
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+ "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+ "camelcase": "^5.0.0",
+ "html-tags": "^2.0.0",
+ "svg-tags": "^1.0.0"
+ }
+ },
+ "@vue/babel-sugar-v-on": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz",
+ "integrity": "sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==",
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0",
+ "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+ "camelcase": "^5.0.0"
+ }
+ },
+ "@vue/component-compiler-utils": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz",
+ "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==",
+ "requires": {
+ "consolidate": "^0.15.1",
+ "hash-sum": "^1.0.2",
+ "lru-cache": "^4.1.2",
+ "merge-source-map": "^1.1.0",
+ "postcss": "^7.0.14",
+ "postcss-selector-parser": "^6.0.2",
+ "prettier": "^1.18.2",
+ "source-map": "~0.6.1",
+ "vue-template-es2015-compiler": "^1.9.0"
+ },
+ "dependencies": {
+ "hash-sum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+ "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ="
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "prettier": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
+ "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
+ "optional": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ }
+ }
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+ "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
+ "requires": {
+ "@webassemblyjs/helper-module-context": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/wast-parser": "1.9.0"
+ }
+ },
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
+ "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA=="
+ },
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
+ "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw=="
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
+ "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA=="
+ },
+ "@webassemblyjs/helper-code-frame": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
+ "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
+ "requires": {
+ "@webassemblyjs/wast-printer": "1.9.0"
+ }
+ },
+ "@webassemblyjs/helper-fsm": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
+ "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw=="
+ },
+ "@webassemblyjs/helper-module-context": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
+ "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0"
+ }
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
+ "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw=="
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
+ "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
+ "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
+ "requires": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
+ "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
+ "requires": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
+ "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w=="
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
+ "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/helper-wasm-section": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0",
+ "@webassemblyjs/wasm-opt": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0",
+ "@webassemblyjs/wast-printer": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
+ "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/ieee754": "1.9.0",
+ "@webassemblyjs/leb128": "1.9.0",
+ "@webassemblyjs/utf8": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
+ "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
+ "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-api-error": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/ieee754": "1.9.0",
+ "@webassemblyjs/leb128": "1.9.0",
+ "@webassemblyjs/utf8": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wast-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
+ "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/floating-point-hex-parser": "1.9.0",
+ "@webassemblyjs/helper-api-error": "1.9.0",
+ "@webassemblyjs/helper-code-frame": "1.9.0",
+ "@webassemblyjs/helper-fsm": "1.9.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
+ "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/wast-parser": "1.9.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
+ },
+ "@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "acorn": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
+ "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ=="
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true
+ },
+ "acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-errors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
+ },
+ "ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-align": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
+ "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
+ "requires": {
+ "string-width": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "ansi-colors": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA=="
+ },
+ "ansi-escapes": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
+ "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
+ "requires": {
+ "type-fest": "^0.11.0"
+ }
+ },
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4="
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "any-base": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz",
+ "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="
+ },
+ "anymatch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+ "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+ "dev": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "arg": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz",
+ "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ=="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+ },
+ "array-includes": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
+ "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1",
+ "get-intrinsic": "^1.1.1",
+ "is-string": "^1.0.7"
+ },
+ "dependencies": {
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "es-abstract": {
+ "version": "1.19.4",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.4.tgz",
+ "integrity": "sha512-flV8e5g9/xulChMG48Fygk1ptpo4lQRJ0eJYtxJFgi7pklLx7EFcOJ34jnvr8pbWlaFN/AT1cZpe0hiFel9Hqg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.2",
+ "string.prototype.trimend": "^1.0.4",
+ "string.prototype.trimstart": "^1.0.4",
+ "unbox-primitive": "^1.0.1"
+ },
+ "dependencies": {
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true
+ }
+ }
+ },
+ "get-intrinsic": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
+ "dev": true
+ },
+ "is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "object-inspect": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
+ "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
+ "dev": true
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
+ "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
+ "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ }
+ }
+ },
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "array.prototype.flat": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
+ "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.2",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "dependencies": {
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "es-abstract": {
+ "version": "1.19.4",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.4.tgz",
+ "integrity": "sha512-flV8e5g9/xulChMG48Fygk1ptpo4lQRJ0eJYtxJFgi7pklLx7EFcOJ34jnvr8pbWlaFN/AT1cZpe0hiFel9Hqg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.2",
+ "string.prototype.trimend": "^1.0.4",
+ "string.prototype.trimstart": "^1.0.4",
+ "unbox-primitive": "^1.0.1"
+ },
+ "dependencies": {
+ "get-intrinsic": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ }
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
+ "dev": true
+ },
+ "is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "object-inspect": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
+ "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
+ "dev": true
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
+ "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
+ "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ }
+ }
+ },
+ "arrify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
+ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "asn1.js": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
+ "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "safer-buffer": "^2.1.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+ }
+ }
+ },
+ "assert": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+ "requires": {
+ "object-assign": "^4.1.1",
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+ },
+ "async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
+ "optional": true
+ },
+ "async-foreach": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
+ },
+ "async-validator": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",
+ "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
+ "requires": {
+ "babel-runtime": "6.x"
+ }
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+ },
+ "autoprefixer": {
+ "version": "9.8.6",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz",
+ "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==",
+ "requires": {
+ "browserslist": "^4.12.0",
+ "caniuse-lite": "^1.0.30001109",
+ "colorette": "^1.2.1",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^7.0.32",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
+ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
+ "dev": true
+ },
+ "axios": {
+ "version": "0.21.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.0.tgz",
+ "integrity": "sha512-fmkJBknJKoZwem3/IKSSLpkdNXZeBu5Q7GA/aRsr2btgrptmSCxi2oFjZHqGdK9DoTil9PIHlPIZw2EcRJXRvw==",
+ "requires": {
+ "follow-redirects": "^1.10.0"
+ }
+ },
+ "axios-retry": {
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.1.9.tgz",
+ "integrity": "sha512-NFCoNIHq8lYkJa6ku4m+V1837TP6lCa7n79Iuf8/AqATAHYB0ISaAS1eyIenDOfHOLtym34W65Sjke2xjg2fsA==",
+ "requires": {
+ "is-retry-allowed": "^1.1.0"
+ }
+ },
+ "babel-helper-vue-jsx-merge-props": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
+ "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg=="
+ },
+ "babel-loader": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz",
+ "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==",
+ "requires": {
+ "find-cache-dir": "^3.3.1",
+ "loader-utils": "^1.4.0",
+ "make-dir": "^3.1.0",
+ "schema-utils": "^2.6.5"
+ }
+ },
+ "babel-plugin-dynamic-import-node": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
+ "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
+ "requires": {
+ "object.assign": "^4.1.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
+ "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+ },
+ "base64id": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "bcryptjs": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
+ "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms="
+ },
+ "bfj": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz",
+ "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==",
+ "requires": {
+ "bluebird": "^3.5.5",
+ "check-types": "^8.0.3",
+ "hoopy": "^0.1.4",
+ "tryer": "^1.0.1"
+ }
+ },
+ "big-integer": {
+ "version": "1.6.48",
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz",
+ "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w=="
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
+ },
+ "binary": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
+ "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
+ "requires": {
+ "buffers": "~0.1.1",
+ "chainsaw": "~0.1.0"
+ }
+ },
+ "binary-extensions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
+ "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ=="
+ },
+ "bl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
+ "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
+ "requires": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ }
+ }
+ }
+ }
+ },
+ "bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
+ },
+ "bmp-js": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz",
+ "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM="
+ },
+ "bn.js": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
+ "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ=="
+ },
+ "body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "requires": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
+ },
+ "boxen": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
+ "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
+ "requires": {
+ "ansi-align": "^3.0.0",
+ "camelcase": "^5.3.1",
+ "chalk": "^3.0.0",
+ "cli-boxes": "^2.2.0",
+ "string-width": "^4.1.0",
+ "term-size": "^2.1.0",
+ "type-fest": "^0.8.1",
+ "widest-line": "^3.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
+ }
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
+ "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
+ "requires": {
+ "bn.js": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
+ "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
+ "requires": {
+ "bn.js": "^5.1.1",
+ "browserify-rsa": "^4.0.1",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.3",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.5",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "browserslist": {
+ "version": "4.16.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz",
+ "integrity": "sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==",
+ "requires": {
+ "caniuse-lite": "^1.0.30001165",
+ "colorette": "^1.2.1",
+ "electron-to-chromium": "^1.3.621",
+ "escalade": "^3.1.1",
+ "node-releases": "^1.1.67"
+ }
+ },
+ "bson": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz",
+ "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg=="
+ },
+ "buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-equal": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
+ "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs="
+ },
+ "buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ },
+ "buffer-indexof-polyfill": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
+ "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A=="
+ },
+ "buffer-json": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz",
+ "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw=="
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+ },
+ "buffers": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
+ "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s="
+ },
+ "builtin-modules": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz",
+ "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
+ },
+ "busboy": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz",
+ "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==",
+ "requires": {
+ "dicer": "0.3.0"
+ }
+ },
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+ },
+ "cacache": {
+ "version": "13.0.1",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz",
+ "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==",
+ "requires": {
+ "chownr": "^1.1.2",
+ "figgy-pudding": "^3.5.1",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.2",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^5.1.1",
+ "minipass": "^3.0.0",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "p-map": "^3.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.7.1",
+ "ssri": "^7.0.0",
+ "unique-filename": "^1.1.1"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "cache-loader": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz",
+ "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==",
+ "requires": {
+ "buffer-json": "^2.0.0",
+ "find-cache-dir": "^3.0.0",
+ "loader-utils": "^1.2.3",
+ "mkdirp": "^0.5.1",
+ "neo-async": "^2.6.1",
+ "schema-utils": "^2.0.0"
+ }
+ },
+ "call-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz",
+ "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.0"
+ }
+ },
+ "caller-callsite": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+ "requires": {
+ "callsites": "^2.0.0"
+ }
+ },
+ "caller-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+ "requires": {
+ "caller-callsite": "^2.0.0"
+ }
+ },
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
+ },
+ "camel-case": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
+ "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
+ "requires": {
+ "pascal-case": "^3.1.2",
+ "tslib": "^2.0.3"
+ }
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ }
+ }
+ },
+ "caniuse-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001300",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz",
+ "integrity": "sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA=="
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "chainsaw": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
+ "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
+ "requires": {
+ "traverse": ">=0.3.0 <0.4"
+ }
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
+ },
+ "chartjs-color": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz",
+ "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==",
+ "requires": {
+ "chartjs-color-string": "^0.6.0",
+ "color-convert": "^1.9.3"
+ }
+ },
+ "chartjs-color-string": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz",
+ "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==",
+ "requires": {
+ "color-name": "^1.0.0"
+ }
+ },
+ "check-types": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz",
+ "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ=="
+ },
+ "chokidar": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz",
+ "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==",
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.5.0"
+ }
+ },
+ "chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
+ },
+ "chrome-trace-event": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+ "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
+ "requires": {
+ "tslib": "^1.9.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ }
+ }
+ },
+ "ci-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A=="
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "ckeditor4-integrations-common": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ckeditor4-integrations-common/-/ckeditor4-integrations-common-0.1.0.tgz",
+ "integrity": "sha512-Z0fOFOyIavYti3jh8u7SQCFTHTJfCF6cceIkxwnrtpTczt5nI0PI16EnknKvUOPOsHVAnmvRi10IUM+2Rooslw==",
+ "requires": {
+ "load-script": "^1.0.0"
+ }
+ },
+ "ckeditor4-vue": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/ckeditor4-vue/-/ckeditor4-vue-1.2.0.tgz",
+ "integrity": "sha512-JvlBnfDHrhCOoUrQ/Lfug8o+ChOVaNdVE+AuQ9b69h5K8DRZQUAvJgF9/s2L6qngx0FDAKOCpCJhbcBTWlSdAQ==",
+ "requires": {
+ "ckeditor4-integrations-common": "^0.1.0",
+ "load-script": "^1.0.0"
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "clean-css": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
+ "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
+ "requires": {
+ "source-map": "~0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "clean-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz",
+ "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="
+ },
+ "cli-boxes": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
+ "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw=="
+ },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "requires": {
+ "restore-cursor": "^3.1.0"
+ }
+ },
+ "cli-width": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
+ "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ }
+ }
+ }
+ },
+ "clone-deep": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4",
+ "kind-of": "^6.0.2",
+ "shallow-clone": "^3.0.0"
+ }
+ },
+ "coa": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
+ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
+ "requires": {
+ "@types/q": "^1.5.1",
+ "chalk": "^2.4.1",
+ "q": "^1.1.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz",
+ "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==",
+ "requires": {
+ "color-convert": "^1.9.1",
+ "color-string": "^1.5.4"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "color-string": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz",
+ "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==",
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "colorette": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
+ "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw=="
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
+ },
+ "compressible": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+ "requires": {
+ "mime-db": ">= 1.43.0 < 2"
+ }
+ },
+ "compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "requires": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "connect": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
+ "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
+ "requires": {
+ "debug": "2.6.9",
+ "finalhandler": "1.1.2",
+ "parseurl": "~1.3.3",
+ "utils-merge": "1.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "consola": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.0.tgz",
+ "integrity": "sha512-vlcSGgdYS26mPf7qNi+dCisbhiyDnrN1zaRbw3CSuc2wGOMEGGPsp46PdRG5gqXwgtJfjxDkxRNAgRPr1B77vQ=="
+ },
+ "console-browserify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "consolidate": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz",
+ "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==",
+ "requires": {
+ "bluebird": "^3.1.1"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
+ },
+ "content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "requires": {
+ "safe-buffer": "5.1.2"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ }
+ }
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ },
+ "convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ }
+ }
+ },
+ "cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
+ "core-js": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.1.tgz",
+ "integrity": "sha512-9Id2xHY1W7m8hCl8NkhQn5CufmF/WuR30BTRewvCXc1aZd3kMECwNZ69ndLbekKfakw9Rf2Xyc+QR6E7Gg+obg=="
+ },
+ "core-js-compat": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.1.tgz",
+ "integrity": "sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ==",
+ "requires": {
+ "browserslist": "^4.15.0",
+ "semver": "7.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+ "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A=="
+ }
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "requires": {
+ "object-assign": "^4",
+ "vary": "^1"
+ }
+ },
+ "cosmiconfig": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+ "requires": {
+ "import-fresh": "^2.0.0",
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.13.1",
+ "parse-json": "^4.0.0"
+ }
+ },
+ "crc": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz",
+ "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
+ "requires": {
+ "buffer": "^5.1.0"
+ },
+ "dependencies": {
+ "buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ }
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
+ "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.5.3"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+ }
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "css-blank-pseudo": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz",
+ "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==",
+ "requires": {
+ "postcss": "^7.0.5"
+ }
+ },
+ "css-color-names": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
+ },
+ "css-declaration-sorter": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
+ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
+ "requires": {
+ "postcss": "^7.0.1",
+ "timsort": "^0.3.0"
+ }
+ },
+ "css-has-pseudo": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz",
+ "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==",
+ "requires": {
+ "postcss": "^7.0.6",
+ "postcss-selector-parser": "^5.0.0-rc.4"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "css-loader": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz",
+ "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==",
+ "requires": {
+ "camelcase": "^5.3.1",
+ "cssesc": "^3.0.0",
+ "icss-utils": "^4.1.1",
+ "loader-utils": "^1.2.3",
+ "normalize-path": "^3.0.0",
+ "postcss": "^7.0.32",
+ "postcss-modules-extract-imports": "^2.0.0",
+ "postcss-modules-local-by-default": "^3.0.2",
+ "postcss-modules-scope": "^2.2.0",
+ "postcss-modules-values": "^3.0.0",
+ "postcss-value-parser": "^4.1.0",
+ "schema-utils": "^2.7.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "css-prefers-color-scheme": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz",
+ "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==",
+ "requires": {
+ "postcss": "^7.0.5"
+ }
+ },
+ "css-select": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
+ "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==",
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^3.2.1",
+ "domutils": "^1.7.0",
+ "nth-check": "^1.0.2"
+ }
+ },
+ "css-select-base-adapter": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
+ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w=="
+ },
+ "css-tree": {
+ "version": "1.0.0-alpha.37",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
+ "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
+ "requires": {
+ "mdn-data": "2.0.4",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "css-what": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz",
+ "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ=="
+ },
+ "cssdb": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz",
+ "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ=="
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
+ },
+ "cssnano": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz",
+ "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
+ "requires": {
+ "cosmiconfig": "^5.0.0",
+ "cssnano-preset-default": "^4.0.7",
+ "is-resolvable": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-preset-default": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz",
+ "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
+ "requires": {
+ "css-declaration-sorter": "^4.0.1",
+ "cssnano-util-raw-cache": "^4.0.1",
+ "postcss": "^7.0.0",
+ "postcss-calc": "^7.0.1",
+ "postcss-colormin": "^4.0.3",
+ "postcss-convert-values": "^4.0.1",
+ "postcss-discard-comments": "^4.0.2",
+ "postcss-discard-duplicates": "^4.0.2",
+ "postcss-discard-empty": "^4.0.1",
+ "postcss-discard-overridden": "^4.0.1",
+ "postcss-merge-longhand": "^4.0.11",
+ "postcss-merge-rules": "^4.0.3",
+ "postcss-minify-font-values": "^4.0.2",
+ "postcss-minify-gradients": "^4.0.2",
+ "postcss-minify-params": "^4.0.2",
+ "postcss-minify-selectors": "^4.0.2",
+ "postcss-normalize-charset": "^4.0.1",
+ "postcss-normalize-display-values": "^4.0.2",
+ "postcss-normalize-positions": "^4.0.2",
+ "postcss-normalize-repeat-style": "^4.0.2",
+ "postcss-normalize-string": "^4.0.2",
+ "postcss-normalize-timing-functions": "^4.0.2",
+ "postcss-normalize-unicode": "^4.0.1",
+ "postcss-normalize-url": "^4.0.1",
+ "postcss-normalize-whitespace": "^4.0.2",
+ "postcss-ordered-values": "^4.1.2",
+ "postcss-reduce-initial": "^4.0.3",
+ "postcss-reduce-transforms": "^4.0.2",
+ "postcss-svgo": "^4.0.2",
+ "postcss-unique-selectors": "^4.0.1"
+ }
+ },
+ "cssnano-util-get-arguments": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
+ "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8="
+ },
+ "cssnano-util-get-match": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
+ "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0="
+ },
+ "cssnano-util-raw-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
+ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-util-same-parent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
+ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q=="
+ },
+ "csso": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
+ "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
+ "requires": {
+ "css-tree": "^1.1.2"
+ },
+ "dependencies": {
+ "css-tree": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz",
+ "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==",
+ "requires": {
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow=="
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "cuint": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz",
+ "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs="
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "cyclist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
+ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk="
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "dateformat": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.4.1.tgz",
+ "integrity": "sha512-3V9b/50QBYmFtd2c3cPOmdr2xNfnDphoBLxh/UVBoPIsylWkbUYGq3f4EQYuEaK7Mq4vcIpQCmOyJ37pqW/Uug=="
+ },
+ "de-indent": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
+ "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0="
+ },
+ "debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "deepmerge": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",
+ "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ=="
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "defu": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/defu/-/defu-3.2.2.tgz",
+ "integrity": "sha512-8UWj5lNv7HD+kB0e9w77Z7TdQlbUYDVWqITLHNqFIn6khrNHv5WQo38Dcm1f6HeNyZf0U7UbPf6WeZDSdCzGDQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true
+ },
+ "denque": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
+ "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "des.js": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
+ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "destr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/destr/-/destr-1.0.1.tgz",
+ "integrity": "sha512-LnEdINrd1ydSqRiAGjMBVrG/G8hNruwE+fEKlkJA14MGPEoI9T7zJDwGpkMTyXT2ASE0ycnN2SYn4k6Q7j7lHg=="
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+ "detect-indent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz",
+ "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50="
+ },
+ "devalue": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/devalue/-/devalue-2.0.1.tgz",
+ "integrity": "sha512-I2TiqT5iWBEyB8GRfTDP0hiLZ0YeDJZ+upDxjBfOC2lebO5LezQMv7QvIUTzdb64jQyAKLf1AHADtGN+jw6v8Q=="
+ },
+ "dicer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz",
+ "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==",
+ "requires": {
+ "streamsearch": "0.1.2"
+ }
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+ }
+ }
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-converter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
+ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
+ "requires": {
+ "utila": "~0.4"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz",
+ "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w=="
+ }
+ }
+ },
+ "dom-walk": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
+ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
+ },
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
+ },
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "dot-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
+ "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
+ "requires": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "dot-prop": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
+ "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
+ "requires": {
+ "is-obj": "^2.0.0"
+ }
+ },
+ "duplexer": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
+ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "requires": {
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "ejs": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz",
+ "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA=="
+ },
+ "electron-to-chromium": {
+ "version": "1.3.629",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.629.tgz",
+ "integrity": "sha512-iSPPJtPvHrMAvYOt+9cdbDmTasPqwnwz4lkP8Dn200gDNUBQOLQ96xUsWXBwXslAo5XxdoXAoQQ3RAy4uao9IQ=="
+ },
+ "element-ui": {
+ "version": "2.15.13",
+ "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.15.13.tgz",
+ "integrity": "sha512-LJoatEYX6WV74FqXBss8Xfho9fh9rjDSzrDrTyREdGb1h1R3uRvmLh5jqp2JU137aj4/BgqA3K06RQpQBX33Bg==",
+ "requires": {
+ "async-validator": "~1.8.1",
+ "babel-helper-vue-jsx-merge-props": "^2.0.0",
+ "deepmerge": "^1.2.0",
+ "normalize-wheel": "^1.0.1",
+ "resize-observer-polyfill": "^1.5.0",
+ "throttle-debounce": "^1.0.1"
+ }
+ },
+ "elliptic": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
+ "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+ }
+ }
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "engine.io": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz",
+ "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==",
+ "requires": {
+ "@types/cookie": "^0.4.1",
+ "@types/cors": "^2.8.12",
+ "@types/node": ">=10.0.0",
+ "accepts": "~1.3.4",
+ "base64id": "2.0.0",
+ "cookie": "~0.4.1",
+ "cors": "~2.8.5",
+ "debug": "~4.3.1",
+ "engine.io-parser": "~5.0.0",
+ "ws": "~8.2.3"
+ },
+ "dependencies": {
+ "cookie": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
+ },
+ "ws": {
+ "version": "8.2.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
+ "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA=="
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz",
+ "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==",
+ "requires": {
+ "@socket.io/base64-arraybuffer": "~1.0.2"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz",
+ "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.5.0",
+ "tapable": "^1.0.0"
+ },
+ "dependencies": {
+ "memory-fs": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
+ "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "entities": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
+ "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w=="
+ },
+ "env-paths": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
+ "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
+ "dev": true
+ },
+ "errno": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+ "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "error-stack-parser": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz",
+ "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==",
+ "requires": {
+ "stackframe": "^1.1.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.18.0-next.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+ "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.2.2",
+ "is-negative-zero": "^2.0.0",
+ "is-regex": "^1.1.1",
+ "object-inspect": "^1.8.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.1",
+ "string.prototype.trimend": "^1.0.1",
+ "string.prototype.trimstart": "^1.0.1"
+ }
+ },
+ "es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "eslint": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz",
+ "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==",
+ "dev": true,
+ "requires": {
+ "@eslint/eslintrc": "^1.2.1",
+ "@humanwhocodes/config-array": "^0.9.2",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.1",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.6.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ }
+ }
+ },
+ "globals": {
+ "version": "13.13.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz",
+ "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-config-prettier": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
+ "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
+ "dev": true
+ },
+ "eslint-config-standard": {
+ "version": "16.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz",
+ "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==",
+ "dev": true
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
+ "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "resolve": "^1.20.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "is-core-module": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
+ "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
+ "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "find-up": "^2.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-es": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
+ "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
+ },
+ "dependencies": {
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.26.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
+ "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.4",
+ "array.prototype.flat": "^1.2.5",
+ "debug": "^2.6.9",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-module-utils": "^2.7.3",
+ "has": "^1.0.3",
+ "is-core-module": "^2.8.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.values": "^1.1.5",
+ "resolve": "^1.22.0",
+ "tsconfig-paths": "^3.14.1"
+ },
+ "dependencies": {
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "es-abstract": {
+ "version": "1.19.4",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.4.tgz",
+ "integrity": "sha512-flV8e5g9/xulChMG48Fygk1ptpo4lQRJ0eJYtxJFgi7pklLx7EFcOJ34jnvr8pbWlaFN/AT1cZpe0hiFel9Hqg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.2",
+ "string.prototype.trimend": "^1.0.4",
+ "string.prototype.trimstart": "^1.0.4",
+ "unbox-primitive": "^1.0.1"
+ },
+ "dependencies": {
+ "get-intrinsic": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ }
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
+ "dev": true
+ },
+ "is-core-module": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
+ "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "object-inspect": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
+ "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
+ "dev": true
+ },
+ "object.values": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
+ "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
+ "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
+ "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ }
+ }
+ },
+ "eslint-plugin-jest": {
+ "version": "25.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz",
+ "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/experimental-utils": "^5.0.0"
+ }
+ },
+ "eslint-plugin-node": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
+ "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
+ "dev": true,
+ "requires": {
+ "eslint-plugin-es": "^3.0.0",
+ "eslint-utils": "^2.0.0",
+ "ignore": "^5.1.1",
+ "minimatch": "^3.0.4",
+ "resolve": "^1.10.1",
+ "semver": "^6.1.0"
+ },
+ "dependencies": {
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-nuxt": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-nuxt/-/eslint-plugin-nuxt-3.2.0.tgz",
+ "integrity": "sha512-SWpmJALwagdrlMooajFX9IFxFEKdBxD+e4NFOVw9FGc22HQpNKdiljRHchS/3O5e2R7sPZYv8xdCtoordqIXFQ==",
+ "dev": true,
+ "requires": {
+ "eslint-plugin-vue": "^8.5.0",
+ "semver": "^7.3.5",
+ "vue-eslint-parser": "^8.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-promise": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz",
+ "integrity": "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==",
+ "dev": true
+ },
+ "eslint-plugin-unicorn": {
+ "version": "39.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-39.0.0.tgz",
+ "integrity": "sha512-fd5RK2FtYjGcIx3wra7csIE/wkkmBo22T1gZtRTsLr1Mb+KsFKJ+JOdSqhHXQUrI/JTs/Mon64cEYzTgSCbltw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.14.9",
+ "ci-info": "^3.2.0",
+ "clean-regexp": "^1.0.0",
+ "eslint-template-visitor": "^2.3.2",
+ "eslint-utils": "^3.0.0",
+ "esquery": "^1.4.0",
+ "indent-string": "4",
+ "is-builtin-module": "^3.1.0",
+ "lodash": "^4.17.21",
+ "pluralize": "^8.0.0",
+ "read-pkg-up": "^7.0.1",
+ "regexp-tree": "^0.1.23",
+ "safe-regex": "^2.1.1",
+ "semver": "^7.3.5",
+ "strip-indent": "^3.0.0"
+ },
+ "dependencies": {
+ "@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "dev": true
+ },
+ "ci-info": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz",
+ "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==",
+ "dev": true
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ }
+ },
+ "safe-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz",
+ "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==",
+ "dev": true,
+ "requires": {
+ "regexp-tree": "~0.1.1"
+ }
+ },
+ "semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "requires": {
+ "min-indent": "^1.0.0"
+ }
+ },
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-vue": {
+ "version": "8.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.6.0.tgz",
+ "integrity": "sha512-abXiF2J18n/7ZPy9foSlJyouKf54IqpKlNvNmzhM93N0zs3QUxZG/oBd3tVPOJTKg7SlhBUtPxugpqzNbgGpQQ==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^3.0.0",
+ "natural-compare": "^1.4.0",
+ "semver": "^7.3.5",
+ "vue-eslint-parser": "^8.0.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-template-visitor": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/eslint-template-visitor/-/eslint-template-visitor-2.3.2.tgz",
+ "integrity": "sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.12.16",
+ "@babel/eslint-parser": "^7.12.16",
+ "eslint-visitor-keys": "^2.0.0",
+ "esquery": "^1.3.1",
+ "multimap": "^1.1.0"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
+ "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.16.7"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.17.7",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz",
+ "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==",
+ "dev": true
+ },
+ "@babel/core": {
+ "version": "7.17.9",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz",
+ "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==",
+ "dev": true,
+ "requires": {
+ "@ampproject/remapping": "^2.1.0",
+ "@babel/code-frame": "^7.16.7",
+ "@babel/generator": "^7.17.9",
+ "@babel/helper-compilation-targets": "^7.17.7",
+ "@babel/helper-module-transforms": "^7.17.7",
+ "@babel/helpers": "^7.17.9",
+ "@babel/parser": "^7.17.9",
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.17.9",
+ "@babel/types": "^7.17.0",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.1",
+ "semver": "^6.3.0"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.17.9",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz",
+ "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.17.0",
+ "jsesc": "^2.5.1",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.17.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz",
+ "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.17.7",
+ "@babel/helper-validator-option": "^7.16.7",
+ "browserslist": "^4.17.5",
+ "semver": "^6.3.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.17.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz",
+ "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.16.7",
+ "@babel/types": "^7.17.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz",
+ "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz",
+ "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.17.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz",
+ "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.16.7",
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/helper-simple-access": "^7.17.7",
+ "@babel/helper-split-export-declaration": "^7.16.7",
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.17.3",
+ "@babel/types": "^7.17.0"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.17.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz",
+ "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.17.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz",
+ "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "dev": true
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz",
+ "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==",
+ "dev": true
+ },
+ "@babel/helpers": {
+ "version": "7.17.9",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz",
+ "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.17.9",
+ "@babel/types": "^7.17.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.17.9",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
+ "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.17.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz",
+ "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz",
+ "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.7",
+ "@babel/parser": "^7.16.7",
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.17.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz",
+ "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.7",
+ "@babel/generator": "^7.17.9",
+ "@babel/helper-environment-visitor": "^7.16.7",
+ "@babel/helper-function-name": "^7.17.9",
+ "@babel/helper-hoist-variables": "^7.16.7",
+ "@babel/helper-split-export-declaration": "^7.16.7",
+ "@babel/parser": "^7.17.9",
+ "@babel/types": "^7.17.0",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/types": {
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
+ "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "browserslist": {
+ "version": "4.20.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz",
+ "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001317",
+ "electron-to-chromium": "^1.4.84",
+ "escalade": "^3.1.1",
+ "node-releases": "^2.0.2",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001331",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001331.tgz",
+ "integrity": "sha512-Y1xk6paHpUXKP/P6YjQv1xqyTbgAP05ycHBcRdQjTcyXlWol868sJJPlmk5ylOekw2BrucWes5jk+LvVd7WZ5Q==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.4.107",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.107.tgz",
+ "integrity": "sha512-Huen6taaVrUrSy8o7mGStByba8PfOWWluHNxSHGBrCgEdFVLtvdQDBr9LBCF9Uci8SYxh28QNNMO0oC17wbGAg==",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
+ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
+ "dev": true
+ },
+ "node-releases": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz",
+ "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^2.0.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true
+ },
+ "eslint-webpack-plugin": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-2.6.0.tgz",
+ "integrity": "sha512-V+LPY/T3kur5QO3u+1s34VDTcRxjXWPUGM4hlmTb5DwVD0OQz631yGTxJZf4SpAqAjdbBVe978S8BJeHpAdOhQ==",
+ "dev": true,
+ "requires": {
+ "@types/eslint": "^7.28.2",
+ "arrify": "^2.0.1",
+ "jest-worker": "^27.3.1",
+ "micromatch": "^4.0.4",
+ "normalize-path": "^3.0.0",
+ "schema-utils": "^3.1.1"
+ },
+ "dependencies": {
+ "@types/json-schema": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "jest-worker": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ }
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "schema-utils": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
+ "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ }
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "esm": {
+ "version": "3.2.25",
+ "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
+ "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA=="
+ },
+ "espree": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
+ "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.7.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
+ "dev": true
+ },
+ "eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true
+ }
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "requires": {
+ "estraverse": "^5.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+ "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ },
+ "eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
+ },
+ "events": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
+ "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg=="
+ },
+ "eventsource-polyfill": {
+ "version": "0.9.6",
+ "resolved": "https://registry.npmjs.org/eventsource-polyfill/-/eventsource-polyfill-0.9.6.tgz",
+ "integrity": "sha1-EODRh/ERsWfyj9q5GIQ859gY8Tw="
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "execa": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz",
+ "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==",
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "p-finally": "^2.0.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "exif-parser": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz",
+ "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI="
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw="
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "express": {
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "requires": {
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "~1.1.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ }
+ }
+ },
+ "express-fileupload": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.2.0.tgz",
+ "integrity": "sha512-oe4WpKcSppXnl5peornawWUa6tKmIc1/kJxMNRGJR1A0v4zyLL6VsFR6wZ8P2a4Iq3aGx8xae3Vlr+MOMQhFPw==",
+ "requires": {
+ "busboy": "^0.3.1"
+ }
+ },
+ "express-validator": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-6.8.0.tgz",
+ "integrity": "sha512-zEHxjly2Rx0vzJOgWJBCTk1vNNwxqp0a8S8WtKaW912oTmnQGSdh/XuuNzkt+tRBgw66z9u+ah+Sv8SH5SJyUQ==",
+ "requires": {
+ "lodash": "^4.17.20",
+ "validator": "^13.5.1"
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "extract-css-chunks-webpack-plugin": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/extract-css-chunks-webpack-plugin/-/extract-css-chunks-webpack-plugin-4.9.0.tgz",
+ "integrity": "sha512-HNuNPCXRMqJDQ1OHAUehoY+0JVCnw9Y/H22FQzYVwo8Ulgew98AGDu0grnY5c7xwiXHjQa6yJ/1dxLCI/xqTyQ==",
+ "requires": {
+ "loader-utils": "^2.0.0",
+ "normalize-url": "1.9.1",
+ "schema-utils": "^1.0.0",
+ "webpack-sources": "^1.1.0"
+ },
+ "dependencies": {
+ "loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
+ "normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "requires": {
+ "object-assign": "^4.0.1",
+ "prepend-http": "^1.0.0",
+ "query-string": "^4.1.0",
+ "sort-keys": "^1.0.0"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-glob": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz",
+ "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==",
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.0",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.2",
+ "picomatch": "^2.2.1"
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz",
+ "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==",
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "figgy-pudding": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
+ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw=="
+ },
+ "figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "file-loader": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz",
+ "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==",
+ "requires": {
+ "loader-utils": "^1.2.3",
+ "schema-utils": "^2.5.0"
+ }
+ },
+ "file-type": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz",
+ "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw=="
+ },
+ "filesize": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg=="
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "find-cache-dir": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
+ "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "flatted": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
+ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
+ "dev": true
+ },
+ "flatten": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz",
+ "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg=="
+ },
+ "flush-write-stream": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "follow-redirects": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz",
+ "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg=="
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "fs-memo": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fs-memo/-/fs-memo-1.2.0.tgz",
+ "integrity": "sha512-YEexkCpL4j03jn5SxaMHqcO6IuWuqm8JFUYhyCep7Ao89JIYmB8xoKhK7zXXJ9cCaNXpyNH5L3QtAmoxjoHW2w=="
+ },
+ "fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
+ "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+ "optional": true
+ },
+ "fstream": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
+ "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "inherits": "~2.0.0",
+ "mkdirp": ">=0.5 0",
+ "rimraf": "2"
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "gaze": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
+ "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
+ "dev": true,
+ "requires": {
+ "globule": "^1.0.0"
+ }
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-intrinsic": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz",
+ "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "get-port-please": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-1.1.0.tgz",
+ "integrity": "sha512-C9adQpQ9uyboxURlYAVcqvKdnrZ0uIad6lAZzIr51G5shhUFcZUwl8rxY0B0hB6OJytBNzPB1Uj/S1CpP9aFzQ==",
+ "requires": {
+ "fs-memo": "^1.2.0"
+ }
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "dependencies": {
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "get-intrinsic": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ }
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "gifwrap": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.2.tgz",
+ "integrity": "sha512-fcIswrPaiCDAyO8xnWvHSZdWChjKXUanKKpAiWWJ/UTkEi/aYKn5+90e7DE820zbEaVR9CE2y4z9bzhQijZ0BA==",
+ "requires": {
+ "image-q": "^1.1.1",
+ "omggif": "^1.0.10"
+ }
+ },
+ "git-config-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/git-config-path/-/git-config-path-2.0.0.tgz",
+ "integrity": "sha512-qc8h1KIQbJpp+241id3GuAtkdyJ+IK+LIVtkiFTRKRrmddDzs3SI9CvP1QYmWBFvm1I/PWRwj//of8bgAc0ltA=="
+ },
+ "git-up": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.2.tgz",
+ "integrity": "sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ==",
+ "requires": {
+ "is-ssh": "^1.3.0",
+ "parse-url": "^5.0.0"
+ }
+ },
+ "git-url-parse": {
+ "version": "11.4.3",
+ "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.4.3.tgz",
+ "integrity": "sha512-LZTTk0nqJnKN48YRtOpR8H5SEfp1oM2tls90NuZmBxN95PnCvmuXGzqQ4QmVirBgKx2KPYfPGteX3/raWjKenQ==",
+ "requires": {
+ "git-up": "^4.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "global": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
+ "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
+ "requires": {
+ "min-document": "^2.19.0",
+ "process": "^0.11.10"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
+ },
+ "globby": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz",
+ "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==",
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.1.1",
+ "ignore": "^5.1.4",
+ "merge2": "^1.3.0",
+ "slash": "^3.0.0"
+ }
+ },
+ "globule": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz",
+ "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==",
+ "dev": true,
+ "requires": {
+ "glob": "~7.1.1",
+ "lodash": "~4.17.10",
+ "minimatch": "~3.0.2"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
+ },
+ "gsap": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.5.1.tgz",
+ "integrity": "sha512-EMV0RSUKZNeTUzLKAizGlwxVOUyif3/g8I3S1aA/hf3gbqwBvmQ02x1RdTBQNQMOpHCVBv9y/vaHwfctoAg8zw=="
+ },
+ "gzip-size": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz",
+ "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==",
+ "requires": {
+ "duplexer": "^0.1.1",
+ "pify": "^4.0.1"
+ }
+ },
+ "hable": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hable/-/hable-3.0.0.tgz",
+ "integrity": "sha512-7+G0/2/COR8pwteYFqHIVYfQpuEiO2HXwJrhCBJVgrNrl9O5eaUoJVDGXUJX+0RpGncNVTuestexjk1afj01wQ=="
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "hard-source-webpack-plugin": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/hard-source-webpack-plugin/-/hard-source-webpack-plugin-0.13.1.tgz",
+ "integrity": "sha512-r9zf5Wq7IqJHdVAQsZ4OP+dcUSvoHqDMxJlIzaE2J0TZWn3UjMMrHqwDHR8Jr/pzPfG7XxSe36E7Y8QGNdtuAw==",
+ "requires": {
+ "chalk": "^2.4.1",
+ "find-cache-dir": "^2.0.0",
+ "graceful-fs": "^4.1.11",
+ "lodash": "^4.15.0",
+ "mkdirp": "^0.5.1",
+ "node-object-hash": "^1.2.0",
+ "parse-json": "^4.0.0",
+ "pkg-dir": "^3.0.0",
+ "rimraf": "^2.6.2",
+ "semver": "^5.6.0",
+ "tapable": "^1.0.0-beta.5",
+ "webpack-sources": "^1.0.1",
+ "write-json-file": "^2.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ }
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
+ "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
+ },
+ "has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ },
+ "dependencies": {
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true
+ }
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "requires": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ }
+ },
+ "hash-sum": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
+ "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg=="
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "hasha": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz",
+ "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==",
+ "requires": {
+ "is-stream": "^2.0.0",
+ "type-fest": "^0.8.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
+ }
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
+ },
+ "hex-color-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
+ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ=="
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "hoopy": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
+ "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ=="
+ },
+ "hosted-git-info": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
+ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
+ "dev": true
+ },
+ "hsl-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
+ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4="
+ },
+ "hsla-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
+ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg="
+ },
+ "html-comment-regex": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
+ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ=="
+ },
+ "html-entities": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz",
+ "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA=="
+ },
+ "html-minifier": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz",
+ "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==",
+ "requires": {
+ "camel-case": "^3.0.0",
+ "clean-css": "^4.2.1",
+ "commander": "^2.19.0",
+ "he": "^1.2.0",
+ "param-case": "^2.1.1",
+ "relateurl": "^0.2.7",
+ "uglify-js": "^3.5.1"
+ },
+ "dependencies": {
+ "camel-case": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "requires": {
+ "no-case": "^2.2.0",
+ "upper-case": "^1.1.1"
+ }
+ },
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ },
+ "lower-case": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
+ },
+ "no-case": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "requires": {
+ "lower-case": "^1.1.1"
+ }
+ },
+ "param-case": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+ "requires": {
+ "no-case": "^2.2.0"
+ }
+ }
+ }
+ },
+ "html-minifier-terser": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
+ "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==",
+ "requires": {
+ "camel-case": "^4.1.1",
+ "clean-css": "^4.2.3",
+ "commander": "^4.1.1",
+ "he": "^1.2.0",
+ "param-case": "^3.0.3",
+ "relateurl": "^0.2.7",
+ "terser": "^4.6.3"
+ }
+ },
+ "html-tags": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz",
+ "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos="
+ },
+ "html-webpack-plugin": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz",
+ "integrity": "sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw==",
+ "requires": {
+ "@types/html-minifier-terser": "^5.0.0",
+ "@types/tapable": "^1.0.5",
+ "@types/webpack": "^4.41.8",
+ "html-minifier-terser": "^5.0.1",
+ "loader-utils": "^1.2.3",
+ "lodash": "^4.17.15",
+ "pretty-error": "^2.1.1",
+ "tapable": "^1.1.3",
+ "util.promisify": "1.0.0"
+ },
+ "dependencies": {
+ "util.promisify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+ "requires": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ }
+ }
+ },
+ "htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "requires": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ },
+ "dependencies": {
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
+ }
+ }
+ },
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ }
+ }
+ },
+ "http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+ "requires": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.0.6.tgz",
+ "integrity": "sha512-NyL6ZB6cVni7pl+/IT2W0ni5ME00xR0sN27AQZZrpKn1b+qRh+mLbBxIq9Cq1oGfmTc7BUq4HB77mxwCaxAYNg==",
+ "requires": {
+ "@types/http-proxy": "^1.17.4",
+ "http-proxy": "^1.18.1",
+ "is-glob": "^4.0.1",
+ "lodash": "^4.17.20",
+ "micromatch": "^4.0.2"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
+ },
+ "human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw=="
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "icss-utils": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
+ "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
+ "requires": {
+ "postcss": "^7.0.14"
+ }
+ },
+ "ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
+ },
+ "ignore": {
+ "version": "5.1.8",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
+ "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw=="
+ },
+ "image-q": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/image-q/-/image-q-1.1.1.tgz",
+ "integrity": "sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY="
+ },
+ "immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
+ },
+ "import-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
+ "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+ "requires": {
+ "import-from": "^2.1.0"
+ }
+ },
+ "import-fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+ "requires": {
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "import-from": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
+ "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
+ },
+ "infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+ },
+ "inquirer": {
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
+ "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^3.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.19",
+ "mute-stream": "0.0.8",
+ "run-async": "^2.4.0",
+ "rxjs": "^6.6.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
+ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ },
+ "dependencies": {
+ "get-intrinsic": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ }
+ }
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
+ },
+ "ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
+ },
+ "is-absolute-url": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY="
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "requires": {
+ "has-bigints": "^1.0.1"
+ }
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "dependencies": {
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-builtin-module": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz",
+ "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^3.0.0"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
+ "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA=="
+ },
+ "is-color-stop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
+ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+ "requires": {
+ "css-color-names": "^0.0.4",
+ "hex-color-regex": "^1.1.0",
+ "hsl-regex": "^1.0.0",
+ "hsla-regex": "^1.0.0",
+ "rgb-regex": "^1.0.1",
+ "rgba-regex": "^1.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
+ "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE="
+ },
+ "is-docker": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
+ "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw=="
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-finite": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+ "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ },
+ "is-function": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
+ "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-https": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-https/-/is-https-1.0.0.tgz",
+ "integrity": "sha512-1adLLwZT9XEXjzhQhZxd75uxf0l+xI9uTSFaZeSESjL3E1eXSPpO+u5RcgqtzeZ1KCaNvtEwZSTO2P4U5erVqQ=="
+ },
+ "is-negative-zero": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
+ "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w=="
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+ "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg=="
+ },
+ "is-retry-allowed": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
+ "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg=="
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ },
+ "dependencies": {
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ }
+ }
+ },
+ "is-ssh": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.2.tgz",
+ "integrity": "sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ==",
+ "requires": {
+ "protocols": "^1.1.0"
+ }
+ },
+ "is-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-svg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
+ "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
+ "requires": {
+ "html-comment-regex": "^1.1.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ },
+ "dependencies": {
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ }
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "jalaali-js": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/jalaali-js/-/jalaali-js-1.1.5.tgz",
+ "integrity": "sha512-eS+zDRtz2JcGnVPWeng53rzlKU8tX2RWbJ1cqu1+eZHPEh1QL5ydB+pXD4RCf/zE3eKDN2bLQEjY0u/WIewMVQ=="
+ },
+ "jest-worker": {
+ "version": "25.5.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz",
+ "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==",
+ "requires": {
+ "merge-stream": "^2.0.0",
+ "supports-color": "^7.0.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "jimp": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.1.tgz",
+ "integrity": "sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/custom": "^0.16.1",
+ "@jimp/plugins": "^0.16.1",
+ "@jimp/types": "^0.16.1",
+ "regenerator-runtime": "^0.13.3"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.13.7",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
+ "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
+ }
+ }
+ },
+ "jimp-compact": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz",
+ "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==",
+ "dev": true
+ },
+ "jiti": {
+ "version": "0.1.17",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-0.1.17.tgz",
+ "integrity": "sha512-IlUGuEHKA44dqJoSqpv1poIRyyi31ciEmpLlRZCmo9TasVSZhwfmaVUuQVs26EHuwYdx+NirOm41+wbykH/+9Q=="
+ },
+ "jpeg-js": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.2.tgz",
+ "integrity": "sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw=="
+ },
+ "jquery": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz",
+ "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg=="
+ },
+ "js-base64": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
+ "dev": true
+ },
+ "js-cookie": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz",
+ "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ=="
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsonwebtoken": {
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
+ "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
+ "requires": {
+ "jws": "^3.2.2",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "semver": "^5.6.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "jszip": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.6.0.tgz",
+ "integrity": "sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ==",
+ "requires": {
+ "lie": "~3.3.0",
+ "pako": "~1.0.2",
+ "readable-stream": "~2.3.6",
+ "set-immediate-shim": "~1.0.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "jwa": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+ "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+ "requires": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+ "requires": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "jwt-decode": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz",
+ "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A=="
+ },
+ "kareem": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz",
+ "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ=="
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ },
+ "klona": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz",
+ "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==",
+ "dev": true
+ },
+ "last-call-webpack-plugin": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz",
+ "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==",
+ "requires": {
+ "lodash": "^4.17.5",
+ "webpack-sources": "^1.1.0"
+ }
+ },
+ "launch-editor": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz",
+ "integrity": "sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==",
+ "requires": {
+ "chalk": "^2.3.0",
+ "shell-quote": "^1.6.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
+ }
+ },
+ "launch-editor-middleware": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz",
+ "integrity": "sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==",
+ "requires": {
+ "launch-editor": "^2.2.1"
+ }
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "lie": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+ "requires": {
+ "immediate": "~3.0.5"
+ }
+ },
+ "lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "listenercount": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
+ "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc="
+ },
+ "load-bmfont": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz",
+ "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==",
+ "requires": {
+ "buffer-equal": "0.0.1",
+ "mime": "^1.3.4",
+ "parse-bmfont-ascii": "^1.0.3",
+ "parse-bmfont-binary": "^1.0.5",
+ "parse-bmfont-xml": "^1.1.4",
+ "phin": "^2.9.1",
+ "xhr": "^2.0.1",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ }
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "dependencies": {
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "load-script": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz",
+ "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ="
+ },
+ "loader-runner": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+ "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw=="
+ },
+ "loader-utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+ "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^1.0.1"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ }
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.20",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
+ "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0="
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
+ },
+ "lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+ "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
+ },
+ "lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+ "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
+ },
+ "lodash.isinteger": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+ "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
+ },
+ "lodash.isnumber": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
+ },
+ "lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
+ },
+ "lodash.kebabcase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
+ "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY="
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4="
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
+ },
+ "lodash.template": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
+ "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.templatesettings": "^4.0.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
+ "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0"
+ }
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "lower-case": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
+ "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
+ "requires": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "requires": {
+ "semver": "^6.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
+ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA=="
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "memory-pager": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
+ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
+ "optional": true
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ },
+ "merge-source-map": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
+ "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
+ "requires": {
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "micromatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+ "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.0.5"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+ }
+ }
+ },
+ "mime": {
+ "version": "2.4.7",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz",
+ "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA=="
+ },
+ "mime-db": {
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
+ },
+ "mime-types": {
+ "version": "2.1.27",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+ "requires": {
+ "mime-db": "1.44.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+ },
+ "min-document": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
+ "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
+ "requires": {
+ "dom-walk": "^0.1.0"
+ }
+ },
+ "min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ },
+ "minipass": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
+ "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "minipass-collect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-pipeline": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ }
+ },
+ "mississippi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+ "requires": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^3.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "moment": {
+ "version": "2.29.1",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
+ "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
+ },
+ "moment-jalaali": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/moment-jalaali/-/moment-jalaali-0.9.2.tgz",
+ "integrity": "sha512-Z7dgu6NFnq9MhbAtwj0x7tHFXm+rzSu5Ju7Fc3RloqFQ/3zSJh8kuzxNdAp7cgMF/s/ydob+fAEJvQds/hz25g==",
+ "requires": {
+ "jalaali-js": "^1.1.0",
+ "moment": "^2.22.2",
+ "moment-timezone": "^0.5.21",
+ "rimraf": "^2.6.2"
+ }
+ },
+ "moment-timezone": {
+ "version": "0.5.33",
+ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz",
+ "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==",
+ "requires": {
+ "moment": ">= 2.9.0"
+ }
+ },
+ "mongodb": {
+ "version": "3.6.3",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.3.tgz",
+ "integrity": "sha512-rOZuR0QkodZiM+UbQE5kDsJykBqWi0CL4Ec2i1nrGrUI3KO11r6Fbxskqmq3JK2NH7aW4dcccBuUujAP0ERl5w==",
+ "requires": {
+ "bl": "^2.2.1",
+ "bson": "^1.1.4",
+ "denque": "^1.4.1",
+ "require_optional": "^1.0.1",
+ "safe-buffer": "^5.1.2",
+ "saslprep": "^1.0.0"
+ }
+ },
+ "mongoose": {
+ "version": "5.11.8",
+ "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.11.8.tgz",
+ "integrity": "sha512-RRfrYLg7pyuyx7xu5hwadjIZZJB9W2jqIMkL1CkTmk/uOCX3MX2tl4BVIi2rJUtgMNwn6dy3wBD3soB8I9Nlog==",
+ "requires": {
+ "@types/mongodb": "^3.5.27",
+ "bson": "^1.1.4",
+ "kareem": "2.3.2",
+ "mongodb": "3.6.3",
+ "mongoose-legacy-pluralize": "1.0.2",
+ "mpath": "0.8.1",
+ "mquery": "3.2.3",
+ "ms": "2.1.2",
+ "regexp-clone": "1.0.0",
+ "safe-buffer": "5.2.1",
+ "sift": "7.0.1",
+ "sliced": "1.0.1"
+ }
+ },
+ "mongoose-legacy-pluralize": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
+ "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
+ },
+ "mongoose-paginate-v2": {
+ "version": "1.3.13",
+ "resolved": "https://registry.npmjs.org/mongoose-paginate-v2/-/mongoose-paginate-v2-1.3.13.tgz",
+ "integrity": "sha512-ajMi2eLZ5auV/XVetELjTeSmBJfBsd5QZKW8WFgZP9mvJevLlMU7qLcushvS+545bo0nfKtjh/7zy3NhvPfI9Q=="
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "requires": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ }
+ },
+ "mpath": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.1.tgz",
+ "integrity": "sha512-norEinle9aFc05McBawVPwqgFZ7npkts9yu17ztIVLwPwO9rq0OTp89kGVTqvv5rNLMz96E5iWHpVORjI411vA=="
+ },
+ "mquery": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.3.tgz",
+ "integrity": "sha512-cIfbP4TyMYX+SkaQ2MntD+F2XbqaBHUYWk3j+kqdDztPWok3tgyssOZxMHMtzbV1w9DaSlvEea0Iocuro41A4g==",
+ "requires": {
+ "bluebird": "3.5.1",
+ "debug": "3.1.0",
+ "regexp-clone": "^1.0.0",
+ "safe-buffer": "5.1.2",
+ "sliced": "1.0.1"
+ },
+ "dependencies": {
+ "bluebird": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "multimap": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multimap/-/multimap-1.1.0.tgz",
+ "integrity": "sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==",
+ "dev": true
+ },
+ "mustache": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz",
+ "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ=="
+ },
+ "mute-stream": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
+ },
+ "nan": {
+ "version": "2.14.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
+ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ=="
+ },
+ "nanoid": {
+ "version": "3.1.20",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
+ "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw=="
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
+ },
+ "neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
+ },
+ "no-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
+ "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
+ "requires": {
+ "lower-case": "^2.0.2",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node-fetch": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
+ "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
+ },
+ "node-gyp": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz",
+ "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==",
+ "dev": true,
+ "requires": {
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.3",
+ "nopt": "^5.0.0",
+ "npmlog": "^4.1.2",
+ "request": "^2.88.2",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.2",
+ "tar": "^6.0.2",
+ "which": "^2.0.2"
+ },
+ "dependencies": {
+ "nopt": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "node-html-parser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-2.0.0.tgz",
+ "integrity": "sha512-3wJdYSxiVIBxuiFm9UtfNWAlBw2P+Vb/RN1nqf40q2JeZDpcJ1HsrWuWV3j15SSJ25TvfnOoac2Q+uDU9iY0sw==",
+ "requires": {
+ "he": "1.2.0"
+ }
+ },
+ "node-libs-browser": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
+ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^4.3.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.1",
+ "events": "^3.0.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "0.0.1",
+ "process": "^0.11.10",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.3.3",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.7.2",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.11.0",
+ "vm-browserify": "^1.0.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ }
+ }
+ },
+ "node-object-hash": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/node-object-hash/-/node-object-hash-1.4.2.tgz",
+ "integrity": "sha512-UdS4swXs85fCGWWf6t6DMGgpN/vnlKeSGEQ7hJcrs7PBFoxoKLmibc3QRb7fwiYsjdL7PX8iI/TMSlZ90dgHhQ=="
+ },
+ "node-releases": {
+ "version": "1.1.67",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz",
+ "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg=="
+ },
+ "node-res": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/node-res/-/node-res-5.0.1.tgz",
+ "integrity": "sha512-YOleO9c7MAqoHC+Ccu2vzvV1fL6Ku49gShq3PIMKWHRgrMSih3XcwL05NbLBi6oU2J471gTBfdpVVxwT6Pfhxg==",
+ "requires": {
+ "destroy": "^1.0.4",
+ "etag": "^1.8.1",
+ "mime-types": "^2.1.19",
+ "on-finished": "^2.3.0",
+ "vary": "^1.1.2"
+ }
+ },
+ "node-sass": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-5.0.0.tgz",
+ "integrity": "sha512-opNgmlu83ZCF792U281Ry7tak9IbVC+AKnXGovcQ8LG8wFaJv6cLnRlc6DIHlmNxWEexB5bZxi9SZ9JyUuOYjw==",
+ "dev": true,
+ "requires": {
+ "async-foreach": "^0.1.3",
+ "chalk": "^1.1.1",
+ "cross-spawn": "^7.0.3",
+ "gaze": "^1.0.0",
+ "get-stdin": "^4.0.1",
+ "glob": "^7.0.3",
+ "lodash": "^4.17.15",
+ "meow": "^3.7.0",
+ "mkdirp": "^0.5.1",
+ "nan": "^2.13.2",
+ "node-gyp": "^7.1.0",
+ "npmlog": "^4.0.0",
+ "request": "^2.88.0",
+ "sass-graph": "2.2.5",
+ "stdout-stream": "^1.4.0",
+ "true-case-path": "^1.0.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "nodemailer": {
+ "version": "6.4.17",
+ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.17.tgz",
+ "integrity": "sha512-89ps+SBGpo0D4Bi5ZrxcrCiRFaMmkCt+gItMXQGzEtZVR3uAD3QAQIDoxTWnx3ky0Dwwy/dhFrQ+6NNGXpw/qQ=="
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI="
+ },
+ "normalize-url": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
+ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg=="
+ },
+ "normalize-wheel": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
+ "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA=="
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "nth-check": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+ "requires": {
+ "boolbase": "~1.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "nuxt": {
+ "version": "2.14.12",
+ "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-2.14.12.tgz",
+ "integrity": "sha512-tfGz7s0ahL6mCGzzVEWpHgv+/hekNXgY1fX0SBB0dvJKjVHKAdoMxaoHBYhoCYdNL2GNiNQncHRipxiEtuCtOQ==",
+ "requires": {
+ "@nuxt/builder": "2.14.12",
+ "@nuxt/cli": "2.14.12",
+ "@nuxt/components": "^1.2.2",
+ "@nuxt/core": "2.14.12",
+ "@nuxt/generator": "2.14.12",
+ "@nuxt/loading-screen": "^2.0.3",
+ "@nuxt/opencollective": "^0.3.2",
+ "@nuxt/telemetry": "^1.3.0",
+ "@nuxt/webpack": "2.14.12"
+ }
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-inspect": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz",
+ "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw=="
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz",
+ "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "object.values": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz",
+ "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.1",
+ "has": "^1.0.3"
+ }
+ },
+ "omggif": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz",
+ "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw=="
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "opener": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
+ "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A=="
+ },
+ "optimize-css-assets-webpack-plugin": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz",
+ "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==",
+ "requires": {
+ "cssnano": "^4.1.10",
+ "last-call-webpack-plugin": "^3.0.0"
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "requires": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "p-finally": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
+ "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw=="
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-map": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ },
+ "pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+ },
+ "parallel-transform": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
+ "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
+ "requires": {
+ "cyclist": "^1.0.1",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "param-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
+ "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
+ "requires": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ }
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
+ "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
+ "requires": {
+ "asn1.js": "^5.2.0",
+ "browserify-aes": "^1.0.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "parse-bmfont-ascii": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz",
+ "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU="
+ },
+ "parse-bmfont-binary": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz",
+ "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY="
+ },
+ "parse-bmfont-xml": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz",
+ "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==",
+ "requires": {
+ "xml-parse-from-string": "^1.0.0",
+ "xml2js": "^0.4.5"
+ }
+ },
+ "parse-git-config": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-3.0.0.tgz",
+ "integrity": "sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA==",
+ "requires": {
+ "git-config-path": "^2.0.0",
+ "ini": "^1.3.5"
+ }
+ },
+ "parse-headers": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz",
+ "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA=="
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "parse-path": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.2.tgz",
+ "integrity": "sha512-HSqVz6iuXSiL8C1ku5Gl1Z5cwDd9Wo0q8CoffdAghP6bz8pJa1tcMC+m4N+z6VAS8QdksnIGq1TB6EgR4vPR6w==",
+ "requires": {
+ "is-ssh": "^1.3.0",
+ "protocols": "^1.4.0"
+ }
+ },
+ "parse-url": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-5.0.2.tgz",
+ "integrity": "sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA==",
+ "requires": {
+ "is-ssh": "^1.3.0",
+ "normalize-url": "^3.3.0",
+ "parse-path": "^4.0.0",
+ "protocols": "^1.4.0"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+ },
+ "pascal-case": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
+ "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
+ "requires": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+ },
+ "path-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "optional": true
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
+ },
+ "pbkdf2": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
+ "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "perfect-scrollbar": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.0.tgz",
+ "integrity": "sha512-NrNHJn5mUGupSiheBTy6x+6SXCFbLlm8fVZh9moIzw/LgqElN5q4ncR4pbCBCYuCJ8Kcl9mYM0NgDxvW+b4LxA=="
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "phin": {
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz",
+ "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA=="
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg=="
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pixelmatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz",
+ "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=",
+ "requires": {
+ "pngjs": "^3.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "dev": true
+ },
+ "pngjs": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
+ "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="
+ },
+ "popper.js": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
+ "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ=="
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+ },
+ "postcss": {
+ "version": "7.0.35",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+ "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-attribute-case-insensitive": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz",
+ "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^6.0.2"
+ }
+ },
+ "postcss-calc": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz",
+ "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==",
+ "requires": {
+ "postcss": "^7.0.27",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
+ "postcss-color-functional-notation": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz",
+ "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-color-gray": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz",
+ "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==",
+ "requires": {
+ "@csstools/convert-colors": "^1.4.0",
+ "postcss": "^7.0.5",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-color-hex-alpha": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz",
+ "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==",
+ "requires": {
+ "postcss": "^7.0.14",
+ "postcss-values-parser": "^2.0.1"
+ }
+ },
+ "postcss-color-mod-function": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz",
+ "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==",
+ "requires": {
+ "@csstools/convert-colors": "^1.4.0",
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-color-rebeccapurple": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz",
+ "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-colormin": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
+ "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "color": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-convert-values": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
+ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-custom-media": {
+ "version": "7.0.8",
+ "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz",
+ "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==",
+ "requires": {
+ "postcss": "^7.0.14"
+ }
+ },
+ "postcss-custom-properties": {
+ "version": "8.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz",
+ "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==",
+ "requires": {
+ "postcss": "^7.0.17",
+ "postcss-values-parser": "^2.0.1"
+ }
+ },
+ "postcss-custom-selectors": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz",
+ "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^5.0.0-rc.3"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-dir-pseudo-class": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz",
+ "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^5.0.0-rc.3"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
+ "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
+ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
+ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
+ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-double-position-gradients": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz",
+ "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==",
+ "requires": {
+ "postcss": "^7.0.5",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-env-function": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz",
+ "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-focus-visible": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz",
+ "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-focus-within": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz",
+ "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-font-variant": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz",
+ "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-gap-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz",
+ "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-image-set-function": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz",
+ "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-import": {
+ "version": "12.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz",
+ "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==",
+ "requires": {
+ "postcss": "^7.0.1",
+ "postcss-value-parser": "^3.2.3",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-import-resolver": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-import-resolver/-/postcss-import-resolver-2.0.0.tgz",
+ "integrity": "sha512-y001XYgGvVwgxyxw9J1a5kqM/vtmIQGzx34g0A0Oy44MFcy/ZboZw1hu/iN3VYFjSTRzbvd7zZJJz0Kh0AGkTw==",
+ "requires": {
+ "enhanced-resolve": "^4.1.1"
+ }
+ },
+ "postcss-initial": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz",
+ "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==",
+ "requires": {
+ "lodash.template": "^4.5.0",
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-lab-function": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz",
+ "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==",
+ "requires": {
+ "@csstools/convert-colors": "^1.4.0",
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-load-config": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz",
+ "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==",
+ "requires": {
+ "cosmiconfig": "^5.0.0",
+ "import-cwd": "^2.0.0"
+ }
+ },
+ "postcss-loader": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz",
+ "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==",
+ "requires": {
+ "loader-utils": "^1.1.0",
+ "postcss": "^7.0.0",
+ "postcss-load-config": "^2.0.0",
+ "schema-utils": "^1.0.0"
+ },
+ "dependencies": {
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
+ "postcss-logical": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz",
+ "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-media-minmax": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz",
+ "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
+ "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
+ "requires": {
+ "css-color-names": "0.0.4",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "stylehacks": "^4.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
+ "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "cssnano-util-same-parent": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0",
+ "vendors": "^1.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-minify-font-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
+ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
+ "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "is-color-stop": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-minify-params": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
+ "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "browserslist": "^4.0.0",
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
+ "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-modules-extract-imports": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
+ "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
+ "requires": {
+ "postcss": "^7.0.5"
+ }
+ },
+ "postcss-modules-local-by-default": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz",
+ "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==",
+ "requires": {
+ "icss-utils": "^4.1.1",
+ "postcss": "^7.0.32",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-modules-scope": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
+ "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
+ "requires": {
+ "postcss": "^7.0.6",
+ "postcss-selector-parser": "^6.0.0"
+ }
+ },
+ "postcss-modules-values": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
+ "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
+ "requires": {
+ "icss-utils": "^4.0.0",
+ "postcss": "^7.0.6"
+ }
+ },
+ "postcss-nesting": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz",
+ "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
+ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-normalize-display-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
+ "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-normalize-positions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
+ "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-normalize-repeat-style": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
+ "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-normalize-string": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
+ "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
+ "requires": {
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-normalize-timing-functions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
+ "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-normalize-unicode": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
+ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
+ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
+ "requires": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-normalize-whitespace": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
+ "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
+ "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-overflow-shorthand": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz",
+ "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-page-break": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz",
+ "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-place": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz",
+ "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-preset-env": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz",
+ "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==",
+ "requires": {
+ "autoprefixer": "^9.6.1",
+ "browserslist": "^4.6.4",
+ "caniuse-lite": "^1.0.30000981",
+ "css-blank-pseudo": "^0.1.4",
+ "css-has-pseudo": "^0.10.0",
+ "css-prefers-color-scheme": "^3.1.1",
+ "cssdb": "^4.4.0",
+ "postcss": "^7.0.17",
+ "postcss-attribute-case-insensitive": "^4.0.1",
+ "postcss-color-functional-notation": "^2.0.1",
+ "postcss-color-gray": "^5.0.0",
+ "postcss-color-hex-alpha": "^5.0.3",
+ "postcss-color-mod-function": "^3.0.3",
+ "postcss-color-rebeccapurple": "^4.0.1",
+ "postcss-custom-media": "^7.0.8",
+ "postcss-custom-properties": "^8.0.11",
+ "postcss-custom-selectors": "^5.1.2",
+ "postcss-dir-pseudo-class": "^5.0.0",
+ "postcss-double-position-gradients": "^1.0.0",
+ "postcss-env-function": "^2.0.2",
+ "postcss-focus-visible": "^4.0.0",
+ "postcss-focus-within": "^3.0.0",
+ "postcss-font-variant": "^4.0.0",
+ "postcss-gap-properties": "^2.0.0",
+ "postcss-image-set-function": "^3.0.1",
+ "postcss-initial": "^3.0.0",
+ "postcss-lab-function": "^2.0.1",
+ "postcss-logical": "^3.0.0",
+ "postcss-media-minmax": "^4.0.0",
+ "postcss-nesting": "^7.0.0",
+ "postcss-overflow-shorthand": "^2.0.0",
+ "postcss-page-break": "^2.0.0",
+ "postcss-place": "^4.0.1",
+ "postcss-pseudo-class-any-link": "^6.0.0",
+ "postcss-replace-overflow-wrap": "^3.0.0",
+ "postcss-selector-matches": "^4.0.0",
+ "postcss-selector-not": "^4.0.0"
+ }
+ },
+ "postcss-pseudo-class-any-link": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz",
+ "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^5.0.0-rc.3"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
+ "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
+ "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-replace-overflow-wrap": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz",
+ "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-selector-matches": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz",
+ "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-selector-not": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz",
+ "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz",
+ "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==",
+ "requires": {
+ "cssesc": "^3.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "postcss-svgo": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
+ "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
+ "requires": {
+ "is-svg": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "svgo": "^1.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
+ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "postcss": "^7.0.0",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-url": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-8.0.0.tgz",
+ "integrity": "sha512-E2cbOQ5aii2zNHh8F6fk1cxls7QVFZjLPSrqvmiza8OuXLzIpErij8BDS5Y3STPfJgpIMNCPEr8JlKQWEoozUw==",
+ "requires": {
+ "mime": "^2.3.1",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.0",
+ "postcss": "^7.0.2",
+ "xxhashjs": "^0.2.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
+ },
+ "postcss-values-parser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz",
+ "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==",
+ "requires": {
+ "flatten": "^1.0.2",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
+ },
+ "prettier": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
+ "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
+ "dev": true
+ },
+ "pretty-bytes": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.4.1.tgz",
+ "integrity": "sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA=="
+ },
+ "pretty-error": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz",
+ "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==",
+ "requires": {
+ "lodash": "^4.17.20",
+ "renderkid": "^2.0.4"
+ }
+ },
+ "pretty-time": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz",
+ "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA=="
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
+ },
+ "proper-lockfile": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.1.tgz",
+ "integrity": "sha512-1w6rxXodisVpn7QYvLk706mzprPTAPCYAqxMvctmPN3ekuRk/kuGkGc82pangZiAt4R3lwSuUzheTTn0/Yb7Zg==",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "retry": "^0.12.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "protocols": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz",
+ "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg=="
+ },
+ "proxy-addr": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
+ "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
+ "requires": {
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.9.1"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+ }
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+ },
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "requires": {
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ }
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+ },
+ "raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "requires": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ }
+ },
+ "rc9": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/rc9/-/rc9-1.2.0.tgz",
+ "integrity": "sha512-/jknmhG0USFAx5uoKkAKhtG40sONds9RWhFHrP1UzJ3OvVfqFWOypSUpmsQD0fFwAV7YtzHhsn3QNasfAoxgcQ==",
+ "requires": {
+ "defu": "^2.0.4",
+ "destr": "^1.0.0",
+ "flat": "^5.0.0"
+ },
+ "dependencies": {
+ "defu": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/defu/-/defu-2.0.4.tgz",
+ "integrity": "sha512-G9pEH1UUMxShy6syWk01VQSRVs3CDWtlxtZu7A+NyqjxaCA4gSlWAKDBx6QiUEKezqS8+DUlXLI14Fp05Hmpwg=="
+ }
+ }
+ },
+ "read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
+ "requires": {
+ "pify": "^2.3.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ }
+ }
+ },
+ "read-excel-file": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/read-excel-file/-/read-excel-file-5.2.2.tgz",
+ "integrity": "sha512-GRwsCcVRjdhxH4uQjS7j+BT+KnIvZsCP8iHE+UD5OZk0ISPEFddziEnqm8A0dalSKYQTNHdb7H2Wy3GUj3Ts5Q==",
+ "requires": {
+ "jszip": "^3.6.0",
+ "unzipper": "^0.10.11",
+ "xmldom": "^0.6.0"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ },
+ "dependencies": {
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
+ "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ },
+ "dependencies": {
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ }
+ }
+ },
+ "regenerate": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="
+ },
+ "regenerate-unicode-properties": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
+ "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
+ "requires": {
+ "regenerate": "^1.4.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+ },
+ "regenerator-transform": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
+ "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
+ "requires": {
+ "@babel/runtime": "^7.8.4"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexp-clone": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
+ "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
+ },
+ "regexp-tree": {
+ "version": "0.1.24",
+ "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz",
+ "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==",
+ "dev": true
+ },
+ "regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz",
+ "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==",
+ "requires": {
+ "regenerate": "^1.4.0",
+ "regenerate-unicode-properties": "^8.2.0",
+ "regjsgen": "^0.5.1",
+ "regjsparser": "^0.6.4",
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.2.0"
+ }
+ },
+ "regjsgen": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
+ "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A=="
+ },
+ "regjsparser": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz",
+ "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==",
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+ }
+ }
+ },
+ "relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk="
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "optional": true
+ },
+ "renderkid": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.4.tgz",
+ "integrity": "sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==",
+ "requires": {
+ "css-select": "^1.1.0",
+ "dom-converter": "^0.2",
+ "htmlparser2": "^3.3.0",
+ "lodash": "^4.17.20",
+ "strip-ansi": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "requires": {
+ "boolbase": "~1.0.0",
+ "css-what": "2.1",
+ "domutils": "1.5.1",
+ "nth-check": "~1.0.1"
+ }
+ },
+ "css-what": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
+ "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg=="
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
+ }
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "require_optional": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
+ "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
+ "requires": {
+ "resolve-from": "^2.0.0",
+ "semver": "^5.1.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
+ "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
+ },
+ "requrl": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/requrl/-/requrl-3.0.2.tgz",
+ "integrity": "sha512-f3gjR6d8MhOpn46PP+DSJywbmxi95fxQm3coXBFwognjFLla9X6tr8BdNyaIKNOEkaRbRcm0/zYAqN19N1oyhg=="
+ },
+ "resize-observer-polyfill": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
+ },
+ "resolve": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz",
+ "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==",
+ "requires": {
+ "is-core-module": "^2.1.0",
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+ },
+ "retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs="
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
+ },
+ "rgb-regex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
+ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE="
+ },
+ "rgba-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
+ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM="
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "run-async": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="
+ },
+ "run-parallel": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz",
+ "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw=="
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "requires": {
+ "aproba": "^1.1.1"
+ }
+ },
+ "rxjs": {
+ "version": "6.6.3",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz",
+ "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==",
+ "requires": {
+ "tslib": "^1.9.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "saslprep": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
+ "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
+ "optional": true,
+ "requires": {
+ "sparse-bitfield": "^3.0.3"
+ }
+ },
+ "sass-graph": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz",
+ "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.0",
+ "lodash": "^4.0.0",
+ "scss-tokenizer": "^0.2.3",
+ "yargs": "^13.3.2"
+ }
+ },
+ "sass-loader": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.1.0.tgz",
+ "integrity": "sha512-ZCKAlczLBbFd3aGAhowpYEy69Te3Z68cg8bnHHl6WnSCvnKpbM6pQrz957HWMa8LKVuhnD9uMplmMAHwGQtHeg==",
+ "dev": true,
+ "requires": {
+ "klona": "^2.0.4",
+ "loader-utils": "^2.0.0",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.0.0",
+ "semver": "^7.3.2"
+ },
+ "dependencies": {
+ "loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
+ "schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ }
+ }
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "schema-utils": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
+ "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
+ "requires": {
+ "@types/json-schema": "^7.0.5",
+ "ajv": "^6.12.4",
+ "ajv-keywords": "^3.5.2"
+ }
+ },
+ "scss-tokenizer": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
+ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+ "dev": true,
+ "requires": {
+ "js-base64": "^2.1.8",
+ "source-map": "^0.4.2"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "semver": {
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
+ "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+ }
+ }
+ },
+ "serialize-javascript": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
+ "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "serve-placeholder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/serve-placeholder/-/serve-placeholder-1.2.3.tgz",
+ "integrity": "sha512-DC7t66WeIrlVzVMzickfHIn1zHu7eMsVNiH0nkD/wCrijFQdvgyfH2zc5lkFf79EApUgRhZntkpKjfgLkn2i/Q==",
+ "requires": {
+ "defu": "^3.2.2"
+ }
+ },
+ "serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ }
+ },
+ "server-destroy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
+ "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0="
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "set-immediate-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shallow-clone": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "shell-quote": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
+ "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg=="
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "sift": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz",
+ "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g=="
+ },
+ "signal-exit": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
+ },
+ "simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "requires": {
+ "is-arrayish": "^0.3.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ }
+ }
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
+ },
+ "sliced": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
+ "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "socket.io": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz",
+ "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==",
+ "requires": {
+ "accepts": "~1.3.4",
+ "base64id": "~2.0.0",
+ "debug": "~4.3.2",
+ "engine.io": "~6.1.0",
+ "socket.io-adapter": "~2.3.3",
+ "socket.io-parser": "~4.0.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ }
+ }
+ },
+ "socket.io-adapter": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz",
+ "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ=="
+ },
+ "socket.io-parser": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz",
+ "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==",
+ "requires": {
+ "@types/component-emitter": "^1.2.10",
+ "component-emitter": "~1.3.0",
+ "debug": "~4.3.1"
+ }
+ },
+ "sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "requires": {
+ "is-plain-obj": "^1.0.0"
+ }
+ },
+ "source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw=="
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "requires": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.5.19",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+ },
+ "sparse-bitfield": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
+ "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
+ "optional": true,
+ "requires": {
+ "memory-pager": "^1.0.2"
+ }
+ },
+ "spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
+ "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "sshpk": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "ssri": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz",
+ "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==",
+ "requires": {
+ "figgy-pudding": "^3.5.1",
+ "minipass": "^3.1.1"
+ }
+ },
+ "stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w=="
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
+ },
+ "stackframe": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz",
+ "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA=="
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ },
+ "std-env": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.2.1.tgz",
+ "integrity": "sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ==",
+ "requires": {
+ "ci-info": "^1.6.0"
+ }
+ },
+ "stdout-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
+ "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "stream-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "stream-each": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
+ },
+ "streamsearch": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
+ "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
+ },
+ "strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz",
+ "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz",
+ "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "style-resources-loader": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/style-resources-loader/-/style-resources-loader-1.4.1.tgz",
+ "integrity": "sha512-UaAoQXq20relw6B633z4QZDxDyW7gevTt1e0y3MZtzdZfnvB90UL658czAgNc609Y7Kn5ErdthK9bSVhnykBUA==",
+ "requires": {
+ "glob": "^7.1.6",
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^3.0.0"
+ },
+ "dependencies": {
+ "loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
+ "schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "requires": {
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ }
+ }
+ }
+ },
+ "stylehacks": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz",
+ "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true
+ },
+ "svg-tags": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+ "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q="
+ },
+ "svgo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
+ "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
+ "requires": {
+ "chalk": "^2.4.1",
+ "coa": "^2.0.2",
+ "css-select": "^2.0.0",
+ "css-select-base-adapter": "^0.1.1",
+ "css-tree": "1.0.0-alpha.37",
+ "csso": "^4.0.2",
+ "js-yaml": "^3.13.1",
+ "mkdirp": "~0.5.1",
+ "object.values": "^1.1.0",
+ "sax": "~1.2.4",
+ "stable": "^0.1.8",
+ "unquote": "~1.1.1",
+ "util.promisify": "~1.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
+ }
+ },
+ "tapable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
+ },
+ "tar": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz",
+ "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==",
+ "dev": true,
+ "requires": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^3.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true
+ }
+ }
+ },
+ "term-size": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
+ "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg=="
+ },
+ "terser": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
+ "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
+ "requires": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "terser-webpack-plugin": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz",
+ "integrity": "sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w==",
+ "requires": {
+ "cacache": "^13.0.1",
+ "find-cache-dir": "^3.3.1",
+ "jest-worker": "^25.4.0",
+ "p-limit": "^2.3.0",
+ "schema-utils": "^2.6.6",
+ "serialize-javascript": "^4.0.0",
+ "source-map": "^0.6.1",
+ "terser": "^4.6.12",
+ "webpack-sources": "^1.4.3"
+ },
+ "dependencies": {
+ "serialize-javascript": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
+ "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
+ },
+ "thread-loader": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz",
+ "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==",
+ "requires": {
+ "loader-runner": "^2.3.1",
+ "loader-utils": "^1.1.0",
+ "neo-async": "^2.6.0"
+ }
+ },
+ "throttle-debounce": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
+ "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg=="
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "time-fix-plugin": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/time-fix-plugin/-/time-fix-plugin-2.0.7.tgz",
+ "integrity": "sha512-uVFet1LQToeUX0rTcSiYVYVoGuBpc8gP/2jnlUzuHMHe+gux6XLsNzxLUweabMwiUj5ejhoIMsUI55nVSEa/Vw=="
+ },
+ "timers-browserify": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
+ "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "timm": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz",
+ "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw=="
+ },
+ "timsort": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q="
+ },
+ "tinycolor2": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz",
+ "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA=="
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+ },
+ "tooltip.js": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tooltip.js/-/tooltip.js-1.3.3.tgz",
+ "integrity": "sha512-XWWuy/dBdF/F/YpRE955yqBZ4VdLfiTAUdOqoU+wJm6phJlMpEzl/iYHZ+qJswbeT9VG822bNfsETF9wzmoy5A==",
+ "requires": {
+ "popper.js": "^1.0.2"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "traverse": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
+ "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk="
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "true-case-path": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
+ "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.2"
+ }
+ },
+ "tryer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
+ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA=="
+ },
+ "tsconfig-paths": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
+ "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
+ "dev": true,
+ "requires": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.1",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "tslib": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz",
+ "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ=="
+ },
+ "tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.8.1"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ }
+ }
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
+ "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ=="
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "ua-parser-js": {
+ "version": "0.7.23",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.23.tgz",
+ "integrity": "sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA=="
+ },
+ "uglify-js": {
+ "version": "3.12.2",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.2.tgz",
+ "integrity": "sha512-rWYleAvfJPjduYCt+ELvzybNah/zIkRteGXIBO8X0lteRZPGladF61hFi8tU7qKTsF7u6DUQCtT9k00VlFOgkg=="
+ },
+ "unbox-primitive": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
+ "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has-bigints": "^1.0.1",
+ "has-symbols": "^1.0.2",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "dependencies": {
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true
+ }
+ }
+ },
+ "unfetch": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz",
+ "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA=="
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ=="
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
+ "unicode-property-aliases-ecmascript": "^1.0.4"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
+ "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ=="
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
+ "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg=="
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
+ },
+ "uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI="
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "unquote": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
+ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ="
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+ }
+ }
+ },
+ "unzipper": {
+ "version": "0.10.11",
+ "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz",
+ "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==",
+ "requires": {
+ "big-integer": "^1.6.17",
+ "binary": "~0.3.0",
+ "bluebird": "~3.4.1",
+ "buffer-indexof-polyfill": "~1.0.0",
+ "duplexer2": "~0.1.4",
+ "fstream": "^1.0.12",
+ "graceful-fs": "^4.2.2",
+ "listenercount": "~1.0.1",
+ "readable-stream": "~2.3.6",
+ "setimmediate": "~1.0.4"
+ },
+ "dependencies": {
+ "bluebird": {
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
+ "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "upath": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz",
+ "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w=="
+ },
+ "upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
+ },
+ "uri-js": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
+ "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+ }
+ }
+ },
+ "url-loader": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz",
+ "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==",
+ "requires": {
+ "loader-utils": "^1.2.3",
+ "mime": "^2.4.4",
+ "schema-utils": "^2.5.0"
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+ },
+ "utif": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz",
+ "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==",
+ "requires": {
+ "pako": "^1.0.5"
+ }
+ },
+ "util": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "requires": {
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "util.promisify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
+ "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.2",
+ "has-symbols": "^1.0.1",
+ "object.getownpropertydescriptors": "^2.1.0"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
+ "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.2.2",
+ "is-regex": "^1.1.1",
+ "object-inspect": "^1.8.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.1",
+ "string.prototype.trimend": "^1.0.1",
+ "string.prototype.trimstart": "^1.0.1"
+ }
+ }
+ }
+ },
+ "utila": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
+ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw="
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "validator": {
+ "version": "13.5.2",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-13.5.2.tgz",
+ "integrity": "sha512-mD45p0rvHVBlY2Zuy3F3ESIe1h5X58GPfAtslBjY7EtTqGquZTj+VX/J4RnHWN8FKq0C9WRVt1oWAcytWRuYLQ=="
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
+ "vendors": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
+ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w=="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "vm-browserify": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
+ },
+ "vue": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz",
+ "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg=="
+ },
+ "vue-client-only": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/vue-client-only/-/vue-client-only-2.0.0.tgz",
+ "integrity": "sha512-arhk1wtWAfLsJyxGMoEYhoBowM87/i6HLSG2LH/03Yog6i2d9JEN1peMP0Ceis+/n9DxdenGYZZTxbPPJyHciA=="
+ },
+ "vue-eslint-parser": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz",
+ "integrity": "sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.3.2",
+ "eslint-scope": "^7.0.0",
+ "eslint-visitor-keys": "^3.1.0",
+ "espree": "^9.0.0",
+ "esquery": "^1.4.0",
+ "lodash": "^4.17.21",
+ "semver": "^7.3.5"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "vue-functional-data-merge": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz",
+ "integrity": "sha512-leT4kdJVQyeZNY1kmnS1xiUlQ9z1B/kdBFCILIjYYQDqZgLqCLa0UhjSSeRX6c3mUe6U5qYeM8LrEqkHJ1B4LA=="
+ },
+ "vue-hot-reload-api": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
+ "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog=="
+ },
+ "vue-loader": {
+ "version": "15.9.6",
+ "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.6.tgz",
+ "integrity": "sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg==",
+ "requires": {
+ "@vue/component-compiler-utils": "^3.1.0",
+ "hash-sum": "^1.0.2",
+ "loader-utils": "^1.1.0",
+ "vue-hot-reload-api": "^2.3.0",
+ "vue-style-loader": "^4.1.0"
+ },
+ "dependencies": {
+ "hash-sum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+ "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ="
+ }
+ }
+ },
+ "vue-meta": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/vue-meta/-/vue-meta-2.4.0.tgz",
+ "integrity": "sha512-XEeZUmlVeODclAjCNpWDnjgw+t3WA6gdzs6ENoIAgwO1J1d5p1tezDhtteLUFwcaQaTtayRrsx7GL6oXp/m2Jw==",
+ "requires": {
+ "deepmerge": "^4.2.2"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
+ }
+ }
+ },
+ "vue-no-ssr": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/vue-no-ssr/-/vue-no-ssr-1.1.1.tgz",
+ "integrity": "sha512-ZMjqRpWabMPqPc7gIrG0Nw6vRf1+itwf0Itft7LbMXs2g3Zs/NFmevjZGN1x7K3Q95GmIjWbQZTVerxiBxI+0g=="
+ },
+ "vue-persian-datetime-picker": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/vue-persian-datetime-picker/-/vue-persian-datetime-picker-2.10.3.tgz",
+ "integrity": "sha512-rXd0MQmNUhxA0h81txYzT7NNVbEb2XAEzWJDvcH8CZzUrc0w4IF0qx+qgoJ/KpwPa+HykAjbIYV1rlg+5mueqQ==",
+ "requires": {
+ "moment-jalaali": "^0.9.2"
+ }
+ },
+ "vue-router": {
+ "version": "3.4.9",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.9.tgz",
+ "integrity": "sha512-CGAKWN44RqXW06oC+u4mPgHLQQi2t6vLD/JbGRDAXm0YpMv0bgpKuU5bBd7AvMgfTz9kXVRIWKHqRwGEb8xFkA=="
+ },
+ "vue-server-renderer": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/vue-server-renderer/-/vue-server-renderer-2.6.12.tgz",
+ "integrity": "sha512-3LODaOsnQx7iMFTBLjki8xSyOxhCtbZ+nQie0wWY4iOVeEtTg1a3YQAjd82WvKxrWHHTshjvLb7OXMc2/dYuxw==",
+ "requires": {
+ "chalk": "^1.1.3",
+ "hash-sum": "^1.0.2",
+ "he": "^1.1.0",
+ "lodash.template": "^4.5.0",
+ "lodash.uniq": "^4.5.0",
+ "resolve": "^1.2.0",
+ "serialize-javascript": "^3.1.0",
+ "source-map": "0.5.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "hash-sum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+ "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ="
+ },
+ "serialize-javascript": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz",
+ "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==",
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
+ "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "vue-style-loader": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz",
+ "integrity": "sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==",
+ "requires": {
+ "hash-sum": "^1.0.2",
+ "loader-utils": "^1.0.2"
+ },
+ "dependencies": {
+ "hash-sum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+ "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ="
+ }
+ }
+ },
+ "vue-template-compiler": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz",
+ "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==",
+ "requires": {
+ "de-indent": "^1.0.2",
+ "he": "^1.1.0"
+ }
+ },
+ "vue-template-es2015-compiler": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz",
+ "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw=="
+ },
+ "vuex": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.0.tgz",
+ "integrity": "sha512-W74OO2vCJPs9/YjNjW8lLbj+jzT24waTo2KShI8jLvJW8OaIkgb3wuAMA7D+ZiUxDOx3ubwSZTaJBip9G8a3aQ=="
+ },
+ "watchpack": {
+ "version": "1.7.5",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
+ "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
+ "requires": {
+ "chokidar": "^3.4.1",
+ "graceful-fs": "^4.1.2",
+ "neo-async": "^2.5.0",
+ "watchpack-chokidar2": "^2.0.1"
+ }
+ },
+ "watchpack-chokidar2": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
+ "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
+ "optional": true,
+ "requires": {
+ "chokidar": "^2.1.8"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "optional": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "optional": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+ "optional": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "optional": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "optional": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "optional": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "optional": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "optional": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fsevents": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+ "optional": true,
+ "requires": {
+ "nan": "^2.12.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "optional": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "optional": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "optional": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "optional": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "optional": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "optional": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "optional": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "optional": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "optional": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+ "optional": true
+ }
+ }
+ },
+ "webpack": {
+ "version": "4.44.2",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz",
+ "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-module-context": "1.9.0",
+ "@webassemblyjs/wasm-edit": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0",
+ "acorn": "^6.4.1",
+ "ajv": "^6.10.2",
+ "ajv-keywords": "^3.4.1",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^4.3.0",
+ "eslint-scope": "^4.0.3",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^2.4.0",
+ "loader-utils": "^1.2.3",
+ "memory-fs": "^0.4.1",
+ "micromatch": "^3.1.10",
+ "mkdirp": "^0.5.3",
+ "neo-async": "^2.6.1",
+ "node-libs-browser": "^2.2.1",
+ "schema-utils": "^1.0.0",
+ "tapable": "^1.1.3",
+ "terser-webpack-plugin": "^1.4.3",
+ "watchpack": "^1.7.4",
+ "webpack-sources": "^1.4.1"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "cacache": {
+ "version": "12.0.4",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
+ "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
+ "requires": {
+ "bluebird": "^3.5.5",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.1.15",
+ "infer-owner": "^1.0.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.3",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
+ "y18n": "^4.0.0"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "serialize-javascript": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
+ "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "ssri": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+ "requires": {
+ "figgy-pudding": "^3.5.1"
+ }
+ },
+ "terser-webpack-plugin": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
+ "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
+ "requires": {
+ "cacache": "^12.0.2",
+ "find-cache-dir": "^2.1.0",
+ "is-wsl": "^1.1.0",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^4.0.0",
+ "source-map": "^0.6.1",
+ "terser": "^4.1.2",
+ "webpack-sources": "^1.4.0",
+ "worker-farm": "^1.7.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ }
+ }
+ },
+ "webpack-bundle-analyzer": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz",
+ "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==",
+ "requires": {
+ "acorn": "^7.1.1",
+ "acorn-walk": "^7.1.1",
+ "bfj": "^6.1.1",
+ "chalk": "^2.4.1",
+ "commander": "^2.18.0",
+ "ejs": "^2.6.1",
+ "express": "^4.16.3",
+ "filesize": "^3.6.1",
+ "gzip-size": "^5.0.0",
+ "lodash": "^4.17.19",
+ "mkdirp": "^0.5.1",
+ "opener": "^1.5.1",
+ "ws": "^6.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz",
+ "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==",
+ "requires": {
+ "memory-fs": "^0.4.1",
+ "mime": "^2.4.4",
+ "mkdirp": "^0.5.1",
+ "range-parser": "^1.2.1",
+ "webpack-log": "^2.0.0"
+ }
+ },
+ "webpack-hot-middleware": {
+ "version": "2.25.0",
+ "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz",
+ "integrity": "sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA==",
+ "requires": {
+ "ansi-html": "0.0.7",
+ "html-entities": "^1.2.0",
+ "querystring": "^0.2.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "webpack-log": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
+ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
+ "requires": {
+ "ansi-colors": "^3.0.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "webpack-node-externals": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-2.5.2.tgz",
+ "integrity": "sha512-aHdl/y2N7PW2Sx7K+r3AxpJO+aDMcYzMQd60Qxefq3+EwhewSbTBqNumOsCE1JsCUNoyfGj5465N0sSf6hc/5w=="
+ },
+ "webpack-sources": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+ "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+ "requires": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "webpackbar": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-4.0.0.tgz",
+ "integrity": "sha512-k1qRoSL/3BVuINzngj09nIwreD8wxV4grcuhHTD8VJgUbGcy8lQSPqv+bM00B7F+PffwIsQ8ISd4mIwRbr23eQ==",
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^2.4.2",
+ "consola": "^2.10.0",
+ "figures": "^3.0.0",
+ "pretty-time": "^1.1.0",
+ "std-env": "^2.2.1",
+ "text-table": "^0.2.0",
+ "wrap-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "requires": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "widest-line": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
+ "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
+ "requires": {
+ "string-width": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ }
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
+ },
+ "workbox-cdn": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/workbox-cdn/-/workbox-cdn-5.1.4.tgz",
+ "integrity": "sha512-04gM3mi8QGutokkSaA9xunVfjURnLbo9TTWyi8+pSDCEW5cD8u5GbJiliLK1vB9CShk/9OY1UDfW+XcmD+d6KQ==",
+ "dev": true
+ },
+ "worker-farm": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+ "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
+ "requires": {
+ "errno": "~0.1.7"
+ }
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write-file-atomic": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
+ "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "write-json-file": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz",
+ "integrity": "sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=",
+ "requires": {
+ "detect-indent": "^5.0.0",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^1.0.0",
+ "pify": "^3.0.0",
+ "sort-keys": "^2.0.0",
+ "write-file-atomic": "^2.0.0"
+ },
+ "dependencies": {
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ },
+ "sort-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
+ "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
+ "requires": {
+ "is-plain-obj": "^1.0.0"
+ }
+ }
+ }
+ },
+ "ws": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "xhr": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz",
+ "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
+ "requires": {
+ "global": "~4.4.0",
+ "is-function": "^1.0.1",
+ "parse-headers": "^2.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "xml-parse-from-string": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz",
+ "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig="
+ },
+ "xml2js": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
+ "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
+ "requires": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ }
+ },
+ "xmlbuilder": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
+ },
+ "xmldom": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.6.0.tgz",
+ "integrity": "sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg=="
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ },
+ "xxhashjs": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz",
+ "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==",
+ "requires": {
+ "cuint": "^0.2.2"
+ }
+ },
+ "y18n": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
+ "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ=="
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..adca044
--- /dev/null
+++ b/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "asan-service",
+ "version": "1.0.0",
+ "private": true,
+ "scripts": {
+ "nodemon": "nodemon --watch server --exec \"nuxt start\"",
+ "server": "nodemon --watch server --exec \"SET NODE_ENV=devServer&&node ./server/index.js\"",
+ "dev": "nuxt",
+ "start": "nuxt start",
+ "generate": "nuxt generate",
+ "build": "nuxt build",
+ "lint:js": "eslint --ext \".js,.vue\" .",
+ "lint:prettier": "prettier --check .",
+ "lint": "npm run lint:js && npm run lint:prettier",
+ "lintfix": "prettier --write --list-different . && npm run lint:js -- --fix"
+ },
+ "dependencies": {
+ "@coreui/coreui": "^3.2.2",
+ "@coreui/icons": "^2.0.0-beta.5",
+ "@coreui/utils": "^1.3.1",
+ "@coreui/vue": "^3.1.2",
+ "@coreui/vue-chartjs": "^1.0.5",
+ "@nuxtjs/auth": "^4.9.1",
+ "@nuxtjs/auth-next": "5.0.0-1610375166.4d8db9d",
+ "@nuxtjs/axios": "^5.12.2",
+ "bcryptjs": "^2.4.3",
+ "ckeditor4-vue": "^1.2.0",
+ "core-js": "^3.6.5",
+ "dateformat": "^4.4.1",
+ "element-ui": "^2.15.13",
+ "express": "^4.17.1",
+ "express-fileupload": "^1.2.0",
+ "express-validator": "^6.8.0",
+ "gsap": "^3.5.1",
+ "jimp": "^0.16.1",
+ "jquery": "^3.5.1",
+ "jsonwebtoken": "^8.5.1",
+ "moment-jalaali": "^0.9.2",
+ "mongoose": "^5.11.8",
+ "mongoose-paginate-v2": "^1.3.13",
+ "nodemailer": "^6.4.17",
+ "nuxt": "^2.14.6",
+ "read-excel-file": "^5.2.2",
+ "socket.io": "^4.4.1",
+ "vue-persian-datetime-picker": "^2.10.3"
+ },
+ "devDependencies": {
+ "@babel/eslint-parser": "^7.16.3",
+ "@nuxtjs/eslint-config": "^8.0.0",
+ "@nuxtjs/eslint-module": "^3.0.2",
+ "eslint": "^8.4.1",
+ "eslint-config-prettier": "^8.3.0",
+ "eslint-plugin-nuxt": "^3.1.0",
+ "eslint-plugin-vue": "^8.2.0",
+ "prettier": "^2.5.1",
+ "@nuxtjs/pwa": "^3.3.5",
+ "node-sass": "^5.0.0",
+ "sass-loader": "^10.1.0"
+ }
+}
diff --git a/pages/FAQ/index.vue b/pages/FAQ/index.vue
new file mode 100644
index 0000000..66766bb
--- /dev/null
+++ b/pages/FAQ/index.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
{{ item.question }}
+
+
پاسخ
+
{{ item.answer }}
+
+
+
+
+
+
هیچ پستی در این صفحه وجود نداد.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/about/index.vue b/pages/about/index.vue
new file mode 100644
index 0000000..087a8d0
--- /dev/null
+++ b/pages/about/index.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
درباره آسان سرویس
+
+
+
+ امروزه یکی از ارکان اصلی شرکت های تولیدی صنعتی و برندهای تجاری ارائه خدمات پس از فروش است و رضایتمندی
+ مشتریان از نحوه رسیدگی به هنگام و آگاهی از روند انجام خدمات پس از فروش نقش بسزایی در روند توسعه برندهای
+ تجاری دارد . آسان سرویس به عنوان بازوی اجرایی خدمات پس از فروش شرکت تولیدی صنعتی پخش صبا درصدد است با به
+ کارگیری صحیح از منابع انسانی متخصص و نیز مدیریت واحدهای مختلف دپارتمان خدمات پس از فروش ، رضایت مشتریان
+ گرامی را از لحظه ورود محصول تا انجام خدمت به صورت مطلوب تامین نماید .
+
+
+
+
+
+
+
+
+
+
متخصصین آسان سرویس
+
+
+
+ آموزش نیروهای فنی زیر نظر کارشناسان تایوانی شرکت آسان سرویس پرسنل فنی خود را بطور سالانه در خصوص آموزش فنی
+ برای دستگاههای جدید به خارج از کشور اعزام نموده که اکثرا در آزمونهای انجام شده درجات بالایی را به ارمغان
+ آورده اند.
+
+
+
+
+
+
+
+
+
+
سفارش و تهیه قطعات یدکی اصلی
+
+
+
+ انبار قطعات یدکی این شرکت حجم بسیار بالایی از قطعات را در خود جا داده است که شامل 22000عنوان و بالغ بر صد
+ هزار تعداد قطعه موجود می باشد. با توجه به اینکه کارخانه سازنده حداکثر تا 5 سال بعد از تولید، قطعات یدکی را
+ تامین می کند،شرکت در پایان این دوره حجم بالایی از قطعات را سفارش می دهد تا مدت طولانی تری قادر به تامین
+ قطعات به مشتریان گرامی باشد.
+
+
+
+
+
+
+
+
+
+
گستردگی مراکز خدمات در سراسر کشور
+
+
+
+ آسان سرویس با دارا بودن بیش از 300 نماینده فروش در سراسر ایران و همچنین شبکه منسجم ارایه خدمات پس از فروش
+ با، امروز به یکی از موفقترین شرکتهای ایران در زمینه شبکه، IT و برق / الکترونیک بدل شده است که توانسته
+ رابطه تجاری بسیار خوبی با شرکتهای معتبر تایوانی و اروپایی مثل وریتی و پاناتک برقرار کند. شرکت آسان سرویس
+ در تمامی مراکز استان کشور نمایندگی آموزش دیده معتبر دارد که تعداد آنها به 95 مرکز خدمات پس از فروش می رسد
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/addTicket/index.vue b/pages/account/addTicket/index.vue
new file mode 100644
index 0000000..fd32a19
--- /dev/null
+++ b/pages/account/addTicket/index.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+ کد پذیرش:
+
+
+
+
+
+
+
+
+
+
+
+ افزودن
+
+
+
+
+
+
+
+
diff --git a/pages/account/agents/announcements/index.vue b/pages/account/agents/announcements/index.vue
new file mode 100644
index 0000000..cbb2e01
--- /dev/null
+++ b/pages/account/agents/announcements/index.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+ هیچ اطلاعیه ای موجود نیست
+
+
+
+
diff --git a/pages/account/agents/buffer/_br.vue b/pages/account/agents/buffer/_br.vue
new file mode 100644
index 0000000..5395341
--- /dev/null
+++ b/pages/account/agents/buffer/_br.vue
@@ -0,0 +1,297 @@
+
+
+
+
+
+
+
+ آدرس:
+
+
+
+
+
+
+ توضیحات فرم (اختیاری):
+ توضیحات فرم:
+
+
+
+
+
+
+
+
لیست کالاهای بافر درخواستی:
+
+
+
+
+ ردیف
+ نام کالا
+ تعداد
+ حذف
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+ {{ item.ItemName }}
+
+
+
+ {{ item.bufferQuantity }}
+
+
+
+
+
+
+
+
+
+
+
+ هنوز هیچ آیتمی اضافه نکردید.
+
+
+
+
+
+
+ افزودن قطعه
+
+
+
+
+
+
+
+
+
+
+
+
+ ارسال به آسان سرویس
+ حذف این فرم
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/agents/buffer/index.vue b/pages/account/agents/buffer/index.vue
new file mode 100644
index 0000000..88290f7
--- /dev/null
+++ b/pages/account/agents/buffer/index.vue
@@ -0,0 +1,232 @@
+
+
+
+
مشاهده لیست:
+
+ پیشنویس ها
+
+
+ ارسال شده ها
+
+
+ انجام شده ها
+
+
+
+
+
+
+
+
+
+ ردیف
+ توضیحات
+ تاریخ ایجاد
+
+ تاریخ ارسال
+ کد پیگیری
+ وضعیت
+
+ کد ارسال مرسوله
+ تعداد کالا
+ جزئیات
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+ {{ item.description }}
+ بدون توضیحات
+
+
+
+ {{ $jDate(item.createDate) }}
+
+
+
+
+ {{ $jDate(item.sendDate) }}
+
+
+ {{ item.trackingCode }}
+
+
+ ارسال شده
+ در دست اقدام
+ در انتظار قطعه
+ تحویل شده
+
+
+
+
+ {{ item.deliveryCode || '-' }}
+
+
+
+ {{ totalItemsCount(item.items) }}
+
+
+
+
+
+
+
+
+ تکمیل فرم
+
+
+
+ مشاهده
+
+
+
+
+
+
+ هیچ اطلاعاتی وجود ندارد
+
+
+
+
+
+ افزودن درخواست
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/agents/edit-info/index.vue b/pages/account/agents/edit-info/index.vue
new file mode 100644
index 0000000..9bb5fc1
--- /dev/null
+++ b/pages/account/agents/edit-info/index.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
شما دسترسی ویرایش اطلاعات ندارید
+
+
+
+
+
+
+
diff --git a/pages/account/agents/file-upload/index.vue b/pages/account/agents/file-upload/index.vue
new file mode 100644
index 0000000..16b0e34
--- /dev/null
+++ b/pages/account/agents/file-upload/index.vue
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
نکاتی درباره بارگذاری مدارک:
+
+
+ در هر بخش تصاویر مدارک مربوطه را بارگذاری نمایید.
+
+
+ فیلدهای بارگذاری عکس در این صفحه هیچ کدام اجباری نیست.
+
+
+ فرمت مجاز تصاور jpeg میباشد.
+
+
+ نهایت حجم مجاز برای هر تصویر 2 مگابایت میباشد.
+
+
+
+
+
+
+ {{ item.title }}
+ {{ item.description }}
+
+
+
+
+
+
+
شما دسترسی ویرایش مدارک ندارید
+
+
+
+
+
+
+
diff --git a/pages/account/agents/guaranteeReports/_gr.vue b/pages/account/agents/guaranteeReports/_gr.vue
new file mode 100644
index 0000000..0d2cc94
--- /dev/null
+++ b/pages/account/agents/guaranteeReports/_gr.vue
@@ -0,0 +1,341 @@
+
+
+
+
+
+
+
+ آدرس:
+
+
+
+
+
+
+ توضیحات فرم (اختیاری):
+ توضیحات فرم:
+
+
+
+
+
+
+
+
+
+
لیست قطعات درخواستی:
+
+
+
+
+ ردیف
+
+ نام مشتری
+ تلفن مشتری
+ نام کالا
+ سریال گارانتی
+
+ ایراد کالا
+ قطعات مصرفی
+
+ تاریخ دریافت
+ تاریخ تحویل
+ حذف
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+ {{ item.customerName }}
+
+
+
+ {{ item.customerTel }}
+
+
+
+ {{ item.ItemName }}
+
+
+
+ {{ item.SerialNo1 || '-' }}
+
+
+
+ {{ item.productIssue }}
+
+
+
+ {{ item.usedPieces }}
+
+
+
+ {{ $jDate(item.recieveDate) }}
+
+
+ {{ $jDate(item.deliverDate) }}
+
+
+
+
+
+
+
+
+
+
+
+ هنوز هیچ آیتمی اضافه نکردید.
+
+
+
+
+
+
+ افزودن گزارش
+
+
+
+
+
+
+
+
+
+
+
+
+ ارسال به آسان سرویس
+ حذف این فرم
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/agents/guaranteeReports/index.vue b/pages/account/agents/guaranteeReports/index.vue
new file mode 100644
index 0000000..3af3065
--- /dev/null
+++ b/pages/account/agents/guaranteeReports/index.vue
@@ -0,0 +1,220 @@
+
+
+
+
مشاهده لیست:
+
+ پیشنویس ها
+
+
+ ارسال شده ها
+
+
+
+
+
+
+
+
+
+ ردیف
+ توضیحات
+ تاریخ ایجاد
+
+ تاریخ ارسال
+ کد پیگیری
+ وضعیت
+
+ تعداد گزارش
+ جزئیات
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+ {{ item.description }}
+ بدون توضیحات
+
+
+
+ {{ $jDate(item.createDate) }}
+
+
+
+
+ {{ $jDate(item.sendDate) }}
+
+
+ {{ item.trackingCode }}
+
+
+ ارسال شده
+
+
+
+
+
+ {{ totalItemsCount(item.items) }}
+
+
+
+
+
+
+
+
+ تکمیل فرم
+
+
+
+ مشاهده
+
+
+
+
+
+
+ هیچ اطلاعاتی وجود ندارد
+
+
+
+
+
+ افزودن فرم گزارش
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/agents/inbox/index.vue b/pages/account/agents/inbox/index.vue
new file mode 100644
index 0000000..59a6a61
--- /dev/null
+++ b/pages/account/agents/inbox/index.vue
@@ -0,0 +1,159 @@
+
+
+
+
مشاهده لیست:
+
دریافتی ها
+
+ پذیرش شده ها
+
+
+
+
+
+
+
+
+
+ ردیف
+ شماره پذیرش موقت
+ تاریخ ارسال فرم
+
+ شماره پذیرش دائم
+ تاریخ پذیرش
+ وضعیت
+
+ برند
+ جزئیات
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+ {{ item.TempReceiptTransNumber }}
+
+
+ {{ $jDate(item.TempReceiptTransDate) }}
+
+
+
+ {{ item.ItemReceptionTransNumber }}
+
+
+ {{ $jDate(item.ItemReceptionTransDate) }}
+
+
+ پذیرش شده
+ در دست اقدام
+ در انتظار قطعه
+ تحویل شده
+
+
+
+
+
+
+
+
+
+ مشاهده
+
+
+
+
+
+
+ هیچ اطلاعاتی وجود ندارد
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/agents/inbox/view/index.vue b/pages/account/agents/inbox/view/index.vue
new file mode 100644
index 0000000..72aa4fb
--- /dev/null
+++ b/pages/account/agents/inbox/view/index.vue
@@ -0,0 +1,340 @@
+
+
+
+
+
+
+
تغییر وضعیت فرم:
+
+
+
+ {{ getStatusName('recieved') }}
+
+
+
+
+ {{ getStatusName('ongoing') }}
+
+
+
+
+ {{ getStatusName('waiting') }}
+
+
+
+
+
+
+ ارسال
+
+
+ {{ getStatusName('delivered') }}
+
+
+
+
+
+
+
+
تاریخچه وضعیت های فرم:
+
+
+ {{ getStatusName(item.status) }}
+ {{ $jDateTime(item.date) }}
+
+
+
+
+
+
+
+
+
+
+
+ آدرس:
+
+
+
+ توضیحات فرم:
+
+
+
+
+
+
+
+
+
+ لوازم جانبی کامپیوتر و موبایل
+
+
+
+ لوازم صوتی و تصویری خودرو
+
+
+
+
+
+
+
+
+ افزودن موارد انتخاب شده به پیشنویس ها
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/agents/ops/_op.vue b/pages/account/agents/ops/_op.vue
new file mode 100644
index 0000000..8b02211
--- /dev/null
+++ b/pages/account/agents/ops/_op.vue
@@ -0,0 +1,312 @@
+
+
+
+
+
+
+
+ آدرس:
+
+
+
+
+
+
+ توضیحات فرم (اختیاری):
+ توضیحات فرم:
+
+
+
+
+
+
+
+
لیست قطعات درخواستی:
+
+
+
+
+ ردیف
+ تاریخ پذیرش
+ نام کالا
+ سریال گارانتی
+ نام قطعه
+ کد قطعه
+ حذف
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+ {{ $jDate(item.ItemReceptionTransDate) }}
+
+
+
+ {{ item.ItemName }}
+
+
+
+ {{ item.SerialNo1 || '-' }}
+
+
+
+ {{ item.pieceName }}
+
+
+
+ {{ item.pieceCode }}
+
+
+
+
+
+
+
+
+
+
+
+ هنوز هیچ آیتمی اضافه نکردید.
+
+
+
+
+
+
+ افزودن قطعه
+
+
+
+
+
+
+
+
+
+
+
+
+ ارسال به آسان سرویس
+ حذف این فرم
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/agents/ops/index.vue b/pages/account/agents/ops/index.vue
new file mode 100644
index 0000000..01d52e0
--- /dev/null
+++ b/pages/account/agents/ops/index.vue
@@ -0,0 +1,230 @@
+
+
+
+
مشاهده لیست:
+
+ پیشنویس ها
+
+
+ ارسال شده ها
+
+
+ انجام شده ها
+
+
+
+
+
+
+
+
+
+ ردیف
+ توضیحات
+ تاریخ ایجاد
+
+ تاریخ ارسال
+ کد پیگیری
+ وضعیت
+
+ کد ارسال مرسوله
+ تعداد قطعه
+ جزئیات
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+ {{ item.description }}
+ بدون توضیحات
+
+
+
+ {{ $jDate(item.createDate) }}
+
+
+
+
+ {{ $jDate(item.sendDate) }}
+
+
+ {{ item.trackingCode }}
+
+
+ ارسال شده
+ در دست اقدام
+ در انتظار قطعه
+ تحویل شده
+
+
+
+
+ {{ item.deliveryCode || '-' }}
+
+
+
+ {{ totalItemsCount(item.items) }}
+
+
+
+
+
+
+
+
+ تکمیل فرم
+
+
+
+ مشاهده
+
+
+
+
+
+
+ هیچ اطلاعاتی وجود ندارد
+
+
+
+
+
+ افزودن درخواست
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/agents/pieces/_pr.vue b/pages/account/agents/pieces/_pr.vue
new file mode 100644
index 0000000..2852471
--- /dev/null
+++ b/pages/account/agents/pieces/_pr.vue
@@ -0,0 +1,340 @@
+
+
+
+
+
+
+
+ آدرس:
+
+
+
+
+
+
+ توضیحات فرم (اختیاری):
+ توضیحات فرم:
+
+
+
+
+
+
+
+
توجه:
+
+
+
+ قطعات غیرگارانتی درخواستی، در صورت موجود بودن، پس از اعلام و دریافت هزینه مربوطه برای نمایندگان محترم ارسال
+ خواهد شد.
+
+
+
+
+ تمامی قطعات موردنیاز گارانتی برای نمایندگان محترم فاکتور خواهد شد و پس از ارسال داغی قطعات بهمراه کپی کارت
+ گارانتی مربوطه، از حساب ایشان کسر می گردد.
+
+
+
+
+
+
+
لیست قطعات درخواستی:
+
+
+
+
+ ردیف
+ تاریخ پذیرش
+ نام کالا
+ سریال گارانتی
+ وضعیت گارانتی
+ نام قطعه
+ کد قطعه
+ تعداد
+ حذف
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+ {{ $jDate(item.ItemReceptionTransDate) }}
+
+
+
+ {{ item.ItemName }}
+
+
+
+ {{ item.SerialNo1 || '-' }}
+
+
+
+ دارد
+ ندارد
+
+
+
+ {{ item.pieceName }}
+
+
+
+ {{ item.pieceCode }}
+
+
+ {{ item.pieceQuantity }}
+
+
+
+
+
+
+
+
+
+
+
+ هنوز هیچ آیتمی اضافه نکردید.
+
+
+
+
+
+
+ افزودن قطعه
+
+
+
+
+
+
+
+
+
+
+
+
+ ارسال به آسان سرویس
+ حذف این فرم
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/agents/pieces/index.vue b/pages/account/agents/pieces/index.vue
new file mode 100644
index 0000000..6728d34
--- /dev/null
+++ b/pages/account/agents/pieces/index.vue
@@ -0,0 +1,232 @@
+
+
+
+
مشاهده لیست:
+
+ پیشنویس ها
+
+
+ ارسال شده ها
+
+
+ انجام شده ها
+
+
+
+
+
+
+
+
+
+ ردیف
+ توضیحات
+ تاریخ ایجاد
+
+ تاریخ ارسال
+ کد پیگیری
+ وضعیت
+
+ کد ارسال مرسوله
+ تعداد قطعه
+ جزئیات
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+ {{ item.description }}
+ بدون توضیحات
+
+
+
+ {{ $jDate(item.createDate) }}
+
+
+
+
+ {{ $jDate(item.sendDate) }}
+
+
+ {{ item.trackingCode }}
+
+
+ ارسال شده
+ در دست اقدام
+ در انتظار قطعه
+ تحویل شده
+
+
+
+
+ {{ item.deliveryCode || '-' }}
+
+
+
+ {{ totalItemsCount(item.items) }}
+
+
+
+
+
+
+
+
+ تکمیل فرم
+
+
+
+ مشاهده
+
+
+
+
+
+
+ هیچ اطلاعاتی وجود ندارد
+
+
+
+
+
+ افزودن درخواست
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/agents/reports/index.vue b/pages/account/agents/reports/index.vue
new file mode 100644
index 0000000..9faba73
--- /dev/null
+++ b/pages/account/agents/reports/index.vue
@@ -0,0 +1,1102 @@
+
+
+
+
+
تهیه گزارش از:
+
+
+
+ صندوق ورودی گارانتی
+
+
+ درخواست های قطعه
+
+
+ درخواست های قطعه داغی
+
+
+ درخواست های کالای بافر
+
+
+ گزارش های عملکرد گارانتی
+
+
+
+
+
+
+
+
فیلتر مربوط به فرم ها
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
فیلتر مربوط به آیتم ها
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ تهیه گزارش
+
+
+
+
+
+
+
+
+
+
+
+
+
+ تعداد کل فرم ها:
+ {{ result.totalFormsCount }}
+
+
+ تعداد فرم های فیلتر شده:
+ {{ result.filteredFormsCount }}
+
+
+
+
+
+
+
+
+ تعداد کل آیتم های داخل فرم ها:
+ {{ result.totalItemsCount }}
+
+
+ تعداد آیتم های فیلتر شده داخل فرم ها:
+ {{ result.filteredItemsCount }}
+
+
+
+
+
+
+
+
+
+
+
مشاهده لیست:
+
+ آیتم ها
+
+
+ فرم ها
+
+
+
+
+
+
+
+
+
+ {{ scope.row.Description || '-' }}
+
+
+
+
+
+
+
+ {{ scope.row.ItemReceptionTransNumber || '-' }}
+
+
+
+
+
+ {{ $jDate(scope.row.TempReceiptTransDate) }}
+
+
+
+
+
+ {{ $jDate(scope.row.ItemReceptionTransDate) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ دریافتی
+ پذیرش شده
+ در دست اقدام
+ در انتظار قطعه
+ تحویل شده
+
+
+
+
+
+
+
+ {{ scope.row.description || '-' }}
+
+
+
+
+
+
+ {{ scope.row.trackingCode }}
+
+
+
+
+
+ {{ $jDate(scope.row.sendDate) }}
+
+
+
+
+
+ ارسال شده
+ در دست اقدام
+ در انتظار قطعه
+ تحویل شده
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getItemName(scope.row.ItemID, scope.row.db_name) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ دارد
+ ندارد
+
+
+
+
+
+
+
+ {{ $jDate(scope.row.ItemReceptionTransDate) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $jDate(scope.row.recieveDate) }}
+
+
+
+
+
+ {{ $jDate(scope.row.deliverDate) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/announcements/index.vue b/pages/account/announcements/index.vue
new file mode 100644
index 0000000..873ff83
--- /dev/null
+++ b/pages/account/announcements/index.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+ هیچ اعلانی موجود نیست
+
+
+
+
diff --git a/pages/account/drafts/_draftID.vue b/pages/account/drafts/_draftID.vue
new file mode 100644
index 0000000..9b7c275
--- /dev/null
+++ b/pages/account/drafts/_draftID.vue
@@ -0,0 +1,286 @@
+
+
+
+
+
+
+
+
+ لوازم جانبی کامپیوتر و موبایل
+
+
+
+
+ لوازم صوتی و تصویری خودرو
+
+
+
+
+
+
+
+ آدرس:
+
+
+
+
+
+
+ توضیحات فرم (اختیاری):
+
+
+
+
+
+
+
+
لیست کالاهای افزوده شده:
+
+
+
+
+
+
+ ارسال به آسان سرویس
+ حذف این فرم
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/drafts/index.vue b/pages/account/drafts/index.vue
new file mode 100644
index 0000000..8ef49fa
--- /dev/null
+++ b/pages/account/drafts/index.vue
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+ ردیف
+ توضیحات
+ نوع
+ تعداد کالاها
+ جزئیات
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+ {{ item.description }}
+ بدون توضیحات
+
+
+
+
+
+
+
+
+
+ {{ totalItemsCount(item) }}
+
+
+
+
+
+
+
+
+ تکمیل فرم
+
+
+
+
+
+
+ هیچ اطلاعاتی وجود ندارد
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/guarantee/factor/index.vue b/pages/account/guarantee/factor/index.vue
new file mode 100644
index 0000000..a83450f
--- /dev/null
+++ b/pages/account/guarantee/factor/index.vue
@@ -0,0 +1,203 @@
+
+
+
+
+
+
+
+
+
+ کد شخص:
+ {{ userBusinessCode }}
+
+
+ طرف حساب:
+ {{ user.first_name + ' ' + user.last_name }}
+
+
+ شماره پذیرش:
+ {{ $route.query.atn }}
+
+
+
+
+ آدرس:
+ {{ factorInfo.cAddress1 }}
+
+
+
+
+ شماره تماس:
+ {{ factorInfo.cTel1 }}
+
+
+
+
+ شرح حواله:
+ {{ factorInfo.Description || '---' }}
+
+
+
+
+
+
+
+ ردیف
+ نام کالا
+ تعداد کل
+ مرجوع از فروش
+ مرجوعی/آسیب فیزیکی
+ مرجوعی/سالم
+ تعویض
+ تعمير با هزينه شخصی
+ تعمير با هزينه شرکت
+ مانده
+ توضیحات
+
+
+
+
+ {{ index + 1 }}
+ {{ item.ItemName }}
+ {{ item.ItemReceptionNQty }}
+ {{ item.SaleReturn || '-' }}
+ {{ item.Return_Damaged || '-' }}
+ {{ item.Return_Healthy || '-' }}
+ {{ item.Replacement || '-' }}
+ {{ item.Repair_Self || '-' }}
+ {{ item.Repair_Company || '-' }}
+ {{ residual(item) }}
+ {{ item.ItemReplacementNames || '-' }}
+
+
+
+
+ جمع
+ {{ sum('ItemReceptionNQty') }}
+ {{ sum('SaleReturn') }}
+ {{ sum('Return_Damaged') }}
+ {{ sum('Return_Healthy') }}
+ {{ sum('Replacement') }}
+ {{ sum('Repair_Self') }}
+ {{ sum('Repair_Company') }}
+ {{ residualSum() }}
+
+
+
+
+
+
+
+
+ چاپ فاکتور
+
+
+
+
diff --git a/pages/account/guarantee/index.vue b/pages/account/guarantee/index.vue
new file mode 100644
index 0000000..dc6a3b7
--- /dev/null
+++ b/pages/account/guarantee/index.vue
@@ -0,0 +1,191 @@
+
+
+
+
مشاهده لیست:
+
+ ارسال شده ها
+
+
+ پذیرش شده ها
+
+
+
+
+
+
+ ردیف
+ شماره پذیرش موقت
+ تاریخ ارسال فرم
+
+ شماره پذیرش دائم
+ تاریخ پذیرش
+ شماره بیجک
+ نظر سنجی
+
+ نوع
+ جزئیات
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+ {{ item.TempReceiptTransNumber }}
+
+
+ {{ $jDate(item.TempReceiptTransDate) }}
+
+
+
+ {{ item.ItemReceptionTransNumber }}
+
+
+ {{ $jDate(item.ItemReceptionTransDate) }}
+
+
+ {{ item.deliveryCode || '-' }}
+
+
+ نظر ثبت شده
+
+
+ ثبت نظر
+
+
+
+
+
+
+
+
+
+
+ مشاهده
+
+
+
+
+
+
+ هیچ اطلاعاتی وجود ندارد
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/guarantee/paymentFactor/index.vue b/pages/account/guarantee/paymentFactor/index.vue
new file mode 100644
index 0000000..bf00014
--- /dev/null
+++ b/pages/account/guarantee/paymentFactor/index.vue
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+ کد شخص:
+ {{ userBusinessCode }}
+
+
+ طرف حساب:
+ {{ user.first_name + ' ' + user.last_name }}
+
+
+ شماره پذیرش:
+ {{ $route.query.atn }}
+
+
+
+
+ آدرس:
+ {{ factorInfo.cAddress1 }}
+
+
+
+
+ شماره تماس:
+ {{ factorInfo.cTel1 }}
+
+
+
+
+ شرح حواله:
+ {{ factorInfo.Description || '---' }}
+
+
+
+
+
+
+
+ ردیف
+ کد کالا
+ نام کالا
+ تعداد کالا
+ مبلغ اجرت (ريال)
+ مبلغ کل (ريال)
+ معایب
+
+
+
+
+ {{ index + 1 }}
+ {{ item.ItemCode }}
+ {{ item.ItemName }}
+ {{ item.Repair_Self }}
+ {{ item.TASPrice.toLocaleString() || '-' }}
+ {{ totalPrice(item).toLocaleString() }}
+ {{ item.Note || '-' }}
+
+
+
+
+ جمع
+ {{ sum('Repair_Self') }}
+
+ -
+ {{ totalPriceSum().toLocaleString() }}
+
+
+
+
+
+
+
+
+ چاپ فاکتور
+
+
+
+
diff --git a/pages/account/guarantee/receipt/index.vue b/pages/account/guarantee/receipt/index.vue
new file mode 100644
index 0000000..f448e25
--- /dev/null
+++ b/pages/account/guarantee/receipt/index.vue
@@ -0,0 +1,252 @@
+
+
+
+
توجه:
+
+ *این رسید به منزله ی دریافت کالا توسط واحد خدمات پس از فروش نمیباشد و در صورت دریافت کالاهای مندرج در این رسید
+ توسط واحد پذیرش، رسید پذیرش قطعی صادر میگردد.
+
+
+
+
+
+
+
+
برای ارسال این بیجک چاپی را روی بسته ارسال بچسبانید.
+
+
+
+
+
+
+
+
فرستنده:
+
+
+ نام و نام خانوادگی:
+ {{ user.first_name + ' ' + user.last_name }}
+
+
+
+
آدرس: {{ transactionInfo.cAddress1 }}
+
+
+
شماره تماس: {{ transactionInfo.cTel1 }}
+
+
+
+
+ تاریخ صدور: {{ $jDate(transactionInfo.TransDate) }}
+ تاریخ صدور: {{ $jDate(transactionInfo.TempReceiptTransDate) }}
+
+
+ شماره پذیرش موقت: {{ $route.query.ttn }}
+
+
+
+
+
+
+
+
+
+
+
گیرنده:
+
+
نام: {{ receiverInfo.name }}
+
+
+
آدرس: {{ receiverInfo.address }}
+
+
+
کدپستی: {{ receiverInfo.postalCode }}
+
+
+
شماره تماس: {{ receiverInfo.phone }}
+
+
+
+
+
+
+
+
+
+
+ 1111642
+
+
+
+
+
+
+
+
+
+
+ چاپ
+
+
+
+
+
+
+
+
فهرست اقلام پذیرش موقت شده
+
+
+
این فرم را داخل بسته ارسالی برای گارانتی قرار دهید.
+
+
+
+
+
+
+
+
+
+
+ تاریخ صدور: {{ $jDate(transactionInfo.TransDate) }}
+ تاریخ صدور: {{ $jDate(transactionInfo.TempReceiptTransDate) }}
+
+
+ شماره پذیرش موقت: {{ $route.query.ttn }}
+
+
+
+
+
+
+
+
+
+ ردیف
+ نام کالا
+ تعداد
+ سریال گارانتی
+
+
+
+
+
+ {{ index + 1 }}
+ {{ item.ItemName }}
+ {{ getItemName(item.ItemID) || 'درحال بارگیری ...' }}
+ {{ item.NQty }}
+ {{ item.MjQty }}
+ {{ item.SerialNo1 || '-' }}
+
+
+
+
+
+
+
+
+
+
+ چاپ
+
+
+
+
+
+
diff --git a/pages/account/guarantee/view/index.vue b/pages/account/guarantee/view/index.vue
new file mode 100644
index 0000000..f5b9640
--- /dev/null
+++ b/pages/account/guarantee/view/index.vue
@@ -0,0 +1,240 @@
+
+
+
+
+
+
+ آدرس:
+
+
+
+ توضیحات فرم:
+
+
+
+
+
+
+
+
+
+
+
+
+ مشاهده رسید ها
+
+ مشاهده فاکتور
+
+
+
+
+
+
+ *در موارد ارسالی شما کالا بدون گارانتی وجود دارد و تعمیرات شامل هزینه میشود.برای مشاهده فاکتور هزینه ها روی
+ دکمه زیر کلیک کنید و پس از پرداخت هزینه عکس فیش پرداختی را در تیکت برای ادمین بفرستید.(شماره پذیرش مربوطه را
+ در تیکت مشخص کنید)
+ مشاهده فاکتور تعمیرات
+
+
+
+
+
+
+
diff --git a/pages/account/history/index.vue b/pages/account/history/index.vue
new file mode 100644
index 0000000..5f0a8f5
--- /dev/null
+++ b/pages/account/history/index.vue
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+ ردیف
+ تاریخ برگه پذیرش
+ شناسه برگه پذیرش
+ شناسه کالا
+ کد کالا
+ نام کالا
+ تعداد پذیرش
+ تعداد تعمیرات
+ مانده
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+ {{ $jDate(item.TransDate_63) }}
+
+
+
+ {{ item.TransactionID_63 }}
+
+
+
+ {{ item.ItemID }}
+
+
+
+ {{ item.ItemCode }}
+
+
+
+ {{ item.ItemName }}
+
+
+
+ {{ item.NQty_63 }}
+
+
+
+ {{ item.NQty_115 }}
+
+
+
+ {{ item.RemainQty }}
+
+
+
+
+
+ هیچ اطلاعاتی وجود ندارد
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/index.vue b/pages/account/index.vue
new file mode 100644
index 0000000..0714263
--- /dev/null
+++ b/pages/account/index.vue
@@ -0,0 +1,15 @@
+
+
+
+ {{ $auth.user.first_name + ' ' + $auth.user.last_name }}
+ به پنل کاربری خوش آمدید.
+
+
+
+
+
diff --git a/pages/account/post/index.vue b/pages/account/post/index.vue
new file mode 100644
index 0000000..d1b3732
--- /dev/null
+++ b/pages/account/post/index.vue
@@ -0,0 +1,121 @@
+
+
+
+
+ کاربر گرامی توجه داشته باشید نمیتوانید لوازم جانبی کامپیوتر و لوازم صوتی تصویری رو همزمان باهم در یک فرم ارسال
+ کنید. لذا اگر از هر دو نوع محصول دارید دو فرم جداگانه برای هرکدام پر کنید.
+
+
نوع محصول را انتخاب کنید:
+
+
+
+
+ لوازم جانبی کامپیوتر و موبایل
+
+
+
+
+
+ لوازم صوتی و تصویری خودرو
+
+
+
+
+
+
+
+
+ آدرس
+
+
+
+
+
+
+ توضیحات فرم (اختیاری)
+
+
+
+
+
+ مرحله بعد افزودن کالا
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/profile/index.vue b/pages/account/profile/index.vue
new file mode 100644
index 0000000..63d2f27
--- /dev/null
+++ b/pages/account/profile/index.vue
@@ -0,0 +1,327 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ بروزرسانی
+
+
+
+
+
+
+
+
+
+
+
+
+ تغییر کلمه عبور
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/survey/index.vue b/pages/account/survey/index.vue
new file mode 100644
index 0000000..2525bd1
--- /dev/null
+++ b/pages/account/survey/index.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+ شما درحال ثبت نظر برای فرم
+ {{ code }}
+ هستید:
+
+
+
+
+ {{ item.title }}
+
+
+
+
+ {{ surveyOptionsValues.get(option) }}
+
+
+
+
+
+
+
+ نظرات ، پیشنهادات و انتقادات (اختیاری):
+
+
+
+
+ ثبت نظر
+
+
+
+
+
+
diff --git a/pages/account/tickets/_ticket.vue b/pages/account/tickets/_ticket.vue
new file mode 100644
index 0000000..0d91711
--- /dev/null
+++ b/pages/account/tickets/_ticket.vue
@@ -0,0 +1,110 @@
+
+
+
+
پیام ها:
+
+
+
+
هیچ پیامی وجود ندارد.
+
+
+
+
+
{{ item.message }}
+
{{ $jDateTime(item.created_at) }}
+
+
+
+
+
+
+
+
+
+
+
+
ارسال
+
+
{{ validation.message.msg }}
+
{{ validation.image.msg }}
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/tickets/index.vue b/pages/account/tickets/index.vue
new file mode 100644
index 0000000..919fe9e
--- /dev/null
+++ b/pages/account/tickets/index.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+ ردیف
+ عنوان
+ شماره پذیرش
+ تاریخ ایجاد مکالمه
+ جزئیات
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+ {{ item.title }}
+
+
+ {{ item.transaction_id ? item.transaction_id : '-' }}
+
+
+ {{ $jDate(item.created_at) }}
+
+
+
+ مشاهده
+ {{ hasUnread(item._id) }}
+
+
+
+
+
+
+ هیچ اطلاعاتی وجود ندارد
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/verify/index.vue b/pages/account/verify/index.vue
new file mode 100644
index 0000000..4309871
--- /dev/null
+++ b/pages/account/verify/index.vue
@@ -0,0 +1,204 @@
+
+
+
+
+
+
+
+
+
+
+
+ شماره:
+ {{ user.mobile_number }}
+ (تغییر شماره)
+ (ارسال مجدد کد)
+ ( ارسال مجدد کد {{ mobileResendCountDown }} ثانیه دیگر)
+
+
+
+
+
+
+ تایید شماره
+
+
+
+
+
+
+
+
+
+ ایمیل:
+ {{ user.email }}
+ (تغییر ایمیل)
+ (ارسال مجدد کد)
+ ( ارسال مجدد کد {{ emailResendCountDown }} ثانیه دیگر)
+
+
+
+
+
+
+ تایید ایمیل
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/add-tickets/index.vue b/pages/admin/add-tickets/index.vue
new file mode 100644
index 0000000..72f2f8e
--- /dev/null
+++ b/pages/admin/add-tickets/index.vue
@@ -0,0 +1,132 @@
+
+
+
+ {{ title }}
+ افزودن
+
+
+
+
+
+
+
+
+
+
+ کد مشتری
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ validation.user_id.msg
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/admins/_admin.vue b/pages/admin/admins/_admin.vue
new file mode 100644
index 0000000..0e0cd02
--- /dev/null
+++ b/pages/admin/admins/_admin.vue
@@ -0,0 +1,274 @@
+
+
+
+ {{ title }}
+
+ ایجاد یا اصلاح کننده:
+ {{ admin._creator.first_name + ' ' + admin._creator.last_name }}
+
+ برگشت به صفحه قبل
+ افزودن
+ بروزرسانی
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ دسترسی های کاربر
+
+ {{ getPermissionName(item) }}
+
+
+
+
+
+
+
+
+ لیست کل دسترسی ها
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+ بروزرسانی کلمه عبور
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/admins/index.vue b/pages/admin/admins/index.vue
new file mode 100644
index 0000000..3445bbd
--- /dev/null
+++ b/pages/admin/admins/index.vue
@@ -0,0 +1,108 @@
+
+
+
+ {{ title }}
+ افزودن
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/agentReports/index.vue b/pages/admin/agentReports/index.vue
new file mode 100644
index 0000000..9f69168
--- /dev/null
+++ b/pages/admin/agentReports/index.vue
@@ -0,0 +1,1511 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+
+ تهیه گزارش از:
+
+
+
+
+
+
+
+
+
+
+ صندوق ورودی گارانتی
+
+
+
+ درخواست های قطعه
+
+
+
+ درخواست های قطعه داغی
+
+
+
+ درخواست های کالای بافر
+
+
+
+ گزارش های عملکرد گارانتی
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
فیلتر مربوط به فرم ها
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
فیلتر مربوط به آیتم ها
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ تهیه گزارش
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ تعداد کل فرم ها:
+ {{ result.totalFormsCount }}
+
+
+ تعداد فرم های فیلتر شده:
+ {{ result.filteredFormsCount }}
+
+
+
+
+
+
+
+
+ تعداد کل آیتم های داخل فرم ها:
+ {{ result.totalItemsCount }}
+
+
+ تعداد آیتم های فیلتر شده داخل فرم ها:
+ {{ result.filteredItemsCount }}
+
+
+
+
+
+
+
+
+
+
+
مشاهده لیست:
+
+ آیتم ها
+
+
+ فرم ها
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.Description || '-' }}
+
+
+
+
+
+
+
+
+ {{ scope.row.ItemReceptionTransNumber || '-' }}
+
+
+
+
+
+ {{ $jDate(scope.row.TempReceiptTransDate) }}
+
+
+
+
+
+ {{ $jDate(scope.row.ItemReceptionTransDate) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ ثبت شده
+ پذیرش شده
+ در دست اقدام
+ در انتظار قطعه
+ تحویل شده
+
+
+
+
+
+
+
+ {{ scope.row.description || '-' }}
+
+
+
+
+
+
+ {{ scope.row.trackingCode }}
+
+
+
+
+
+ {{ $jDate(scope.row.sendDate) }}
+
+
+
+
+
+ ارسال شده
+ در دست اقدام
+ در انتظار قطعه
+ تحویل شده
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getItemName(scope.row.ItemID, scope.row.db_name) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ دارد
+ ندارد
+
+
+
+
+
+
+
+ {{ $jDate(scope.row.ItemReceptionTransDate) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $jDate(scope.row.recieveDate) }}
+
+
+
+
+
+ {{ $jDate(scope.row.deliverDate) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/agentUpdate/index.vue b/pages/admin/agentUpdate/index.vue
new file mode 100644
index 0000000..41b1e31
--- /dev/null
+++ b/pages/admin/agentUpdate/index.vue
@@ -0,0 +1,66 @@
+
+
+
+ {{ title }}
+ برگشت به صفحه قبل
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/agents/_agent.vue b/pages/admin/agents/_agent.vue
new file mode 100644
index 0000000..cd8048b
--- /dev/null
+++ b/pages/admin/agents/_agent.vue
@@ -0,0 +1,621 @@
+
+
+
+ {{ title }}
+
+ ایجاد یا اصلاح کننده:
+ {{ agent._updatedBy.first_name + ' ' + agent._updatedBy.last_name }}
+
+
+ صلب امتیاز شده توسط:
+ {{ agent._revokedBy.first_name + ' ' + agent._revokedBy.last_name }}
+
+
+ تغییر اطلاعات نماینده
+
+
+ ابطال امتیاز نماینده
+
+ برگشت به صفحه قبل
+
+
+
+
+
+
+ گزارش کلی عملکرد نماینده:
+
+
+
+
+
+
+
+
+
{{ getAgentInboxCount('unread') }}
+
صندوق ورودی (دیده نشده)
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ getAgentInboxCount('ttl') }}
+
صندوق ورودی (در انتظار پذیرش)
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ getAgentInboxCount('atl') }}
+
صندوق ورودی (پذیرش شده)
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ agentPr.length }}
+
درخواست قطعه
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ agentOpr.length }}
+
درخواست قطعه داغی
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ agentBr.length }}
+
درخواست کالای بافر
+
+
+
+
+
+
+
+
+
+
+
+
+ تغییر وضعیت آپلود مدارک
+
+
+
+ دسترسی آپلود
+
+
+
+ عدم دسترسی آپلود
+
+
+
+
+
+
+
+
+
+ دسترسی ویرایش اطلاعات نمایندگی
+
+
+
+ دسترسی ویرایش
+
+
+
+ عدم دسترسی ویرایش
+
+
+
+
+
+
+
+
+
+ مشخصات فردی نماینده:
+
+ مشاهده اکانت کاربری
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ اطلاعات تماس:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ مشخصات مکان نماینده:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ آشنایی با آسان سرویس:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ سایر توضیحات:
+
+
+
+
+
+
+
+
+
+
+
+ سابقه فعالیت:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ نمایندگی نشان تجاری دیگر:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+ (عکس های آپلود شده)
+
+
+ ویرایش مدارک
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/agents/index.vue b/pages/admin/agents/index.vue
new file mode 100644
index 0000000..2d6c554
--- /dev/null
+++ b/pages/admin/agents/index.vue
@@ -0,0 +1,194 @@
+
+
+
+ {{ title }}
+
+ افزودن نماینده
+
+
+
+
+
+
+
+ فیلتر ها
+
+
+
+
+
+
+ جستجو در لیست:
+
+
+
+
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ نماینده هر دو نوع لوازم
+ نماینده لوازم جانبی کامپیوتر و موبایل
+ نماینده لوازم صوتی تصویری خودرو
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ افزودن
+
+
+
+
+
+
diff --git a/pages/admin/agentsInbox/_tr.vue b/pages/admin/agentsInbox/_tr.vue
new file mode 100644
index 0000000..2c126a3
--- /dev/null
+++ b/pages/admin/agentsInbox/_tr.vue
@@ -0,0 +1,199 @@
+
+
+
+ {{ title }}
+ برگشت به صفحه قبل
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ مشاهده اکانت مشتری
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ مشاهده اکانت نماینده
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getStatusName(scope.row.status) }}
+
+
+
+
+ {{ $jDateTime(scope.row.date) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ لیست کالاهای فرم:
+
+
+
+
+
+ {{ getItemName(scope.row.ItemID) || 'درحال بارگیری ...' }}
+
+
+
+
+ {{ scope.row.SerialNo1 || '-' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/agentsInbox/index.vue b/pages/admin/agentsInbox/index.vue
new file mode 100644
index 0000000..255cede
--- /dev/null
+++ b/pages/admin/agentsInbox/index.vue
@@ -0,0 +1,339 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+
+ فیلتر ها
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ همه
+ ({{ filteredItems.length }})
+
+
+
+ جدید
+ ({{ getListCountByStatus('saved') }})
+
+
+
+ پذیرش شده
+ ({{ getListCountByStatus('recieved') }})
+
+
+
+ در دست اقدام
+ ({{ getListCountByStatus('ongoing') }})
+
+
+
+ در انتظار قطعه
+ ({{ getListCountByStatus('waiting') }} )
+
+
+
+ تحویل شده
+ ({{ getListCountByStatus('delivered') }})
+
+
+
+
+
+
+
+
+ جستجو در لیست:
+
+
+
+
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+ {{ $jDate(scope.row.sendDate) }}
+
+
+
+
+
+
+
+ {{ scope.row.ItemReceptionTransNumber || '-' }}
+
+
+
+
+
+
+
+
+
+
+
+ جدید
+ پذیرش شده
+ در دست اقدام
+ در انتظار قطعه
+ تحویل شده
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/announcements/_item.vue b/pages/admin/announcements/_item.vue
new file mode 100644
index 0000000..6ee20e5
--- /dev/null
+++ b/pages/admin/announcements/_item.vue
@@ -0,0 +1,226 @@
+
+
+
+ {{ title }}
+ برگشت به صفحه قبل
+ افزودن
+
+
+
+
+
+
+
+ متن اعلان:
+
+
+
+
+
+
+ تاریخ منقضی شدن اعلان:
+
+ *زمانی که اعلان منقضی شود از لیست حذف نخواهد شد و فقط در پنل کاربران قابل مشاهده نخواهد بود.
+
+
+ *زمانی که اعلان منقضی شود از لیست حذف نخواهد شد و فقط در پنل نمایندگان قابل مشاهده نخواهد بود.
+
+
+
+ {{ validation.expireDate.msg }}
+
+
+
+
+
+
+
+ وضعیت بازدید اعلان:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/announcements/index.vue b/pages/admin/announcements/index.vue
new file mode 100644
index 0000000..0b82034
--- /dev/null
+++ b/pages/admin/announcements/index.vue
@@ -0,0 +1,151 @@
+
+
+
+ {{ title }}
+ افزودن
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.caption }}
+
+
+
+
+
+ {{ $jDate(scope.row.created_at) }}
+
+
+
+
+
+ {{ $jDate(scope.row.expireDate) }}
+
+
+
+
+
+ منقضی شده
+ معتبر
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/buffer-requests/_brId.vue b/pages/admin/buffer-requests/_brId.vue
new file mode 100644
index 0000000..1879b94
--- /dev/null
+++ b/pages/admin/buffer-requests/_brId.vue
@@ -0,0 +1,225 @@
+
+
+
+ {{ title }}
+
+ اولین مشاهده توسط:
+ {{ bufferRequest._openedBy.first_name + ' ' + bufferRequest._openedBy.last_name }}
+
+
+ تغییر وضعیت توسط:
+ {{ bufferRequest._updatedBy.first_name + ' ' + bufferRequest._updatedBy.last_name }}
+
+ برگشت به صفحه قبل
+
+
+
+
+
+
+
+
+ تغییر وضعیت فرم
+
+
+
+
+
+ در انتظار قطعه
+
+
+
+
+
+ ارسال
+
+
+
+ تحویل شده
+
+
+
+
+
+ کد ارسال مرسوله:
+ {{ bufferRequest.deliveryCode || '-' }}
+
+
+
+
+ تاریخچه وضعیت های فرم
+
+
+
+
+ پیشنویس
+ ارسال
+ در دست اقدام
+ در انتظار قطعه
+ تحویل شده
+
+
+
+
+ {{ $jDateTime(scope.row.date) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ مشاهده اکانت نماینده
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ لیست کالاهای بافر درخواستی:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/buffer-requests/index.vue b/pages/admin/buffer-requests/index.vue
new file mode 100644
index 0000000..22220de
--- /dev/null
+++ b/pages/admin/buffer-requests/index.vue
@@ -0,0 +1,219 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+
+ فیلتر ها
+
+
+
+
+
+
+
+
+ همه
+ ({{ brList.length }})
+
+
+
+ جدید
+ ({{ getListCountByStatus('sent') }})
+
+
+
+ در دست اقدام
+ ({{ getListCountByStatus('ongoing') }})
+
+
+
+ در انتظار قطعه
+ ({{ getListCountByStatus('waiting') }} )
+
+
+
+ تحویل شده
+ ({{ getListCountByStatus('delivered') }})
+
+
+
+
+
+
+
+ جستجو در لیست:
+
+
+
+
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+ {{ $jDate(scope.row.sendDate) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ جدید
+ در دست اقدام
+ در انتظار قطعه
+ تحویل شده
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/contact-us/_message.vue b/pages/admin/contact-us/_message.vue
new file mode 100644
index 0000000..cfaab19
--- /dev/null
+++ b/pages/admin/contact-us/_message.vue
@@ -0,0 +1,54 @@
+
+
+
+ {{ title }}
+
+ خوانده شده توسط:
+ {{ message.read_by.first_name + ' ' + message.read_by.last_name }}
+
+ برگشت به صفحه قبل
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/contact-us/index.vue b/pages/admin/contact-us/index.vue
new file mode 100644
index 0000000..ce734b9
--- /dev/null
+++ b/pages/admin/contact-us/index.vue
@@ -0,0 +1,116 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+ فیلتر
+
+
+
+
+ همه
+ خوانده نشده
+ خوانده شده
+
+
+
+
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/customers/_customer.vue b/pages/admin/customers/_customer.vue
new file mode 100644
index 0000000..a9c55bd
--- /dev/null
+++ b/pages/admin/customers/_customer.vue
@@ -0,0 +1,269 @@
+
+
+
+ {{ title }}
+ برگشت به صفحه قبل
+
+
+
+
+
+
+
+
+
+ اطلاعات مشتری در سیستم وریتی
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ تغییر اطلاعات مشتری در سیستم وریتی
+
+
+
+
+
+ بروزرسانی
+
+
+
+
+
+
+
+
+
+
+
+
+
+ اطلاعات مشتری در سیستم پاناتک
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ تغییر اطلاعات مشتری در سیستم پاناتک
+
+
+
+
+
+ بروزرسانی
+
+
+
+
+
+
+
+
+
+
+ اطلاعات مشتری:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ آدرس مشتری
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/customers/index.vue b/pages/admin/customers/index.vue
new file mode 100644
index 0000000..6f38430
--- /dev/null
+++ b/pages/admin/customers/index.vue
@@ -0,0 +1,194 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+
+ فیلتر ها
+
+
+
+
+
+
+
+ همه
+ جدیدها
+ مشتریان
+ نمایندگان
+
+
+
+
+
+
+ جستجو در لیست:
+
+
+
+
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+ {{ scope.row.first_name + ' ' + scope.row.last_name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $jDate(scope.row.created_at) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/download-categories/_item.vue b/pages/admin/download-categories/_item.vue
new file mode 100644
index 0000000..83697e8
--- /dev/null
+++ b/pages/admin/download-categories/_item.vue
@@ -0,0 +1,90 @@
+
+
+
+ {{ title }}
+
+ ایجاد یا اصلاح کننده:
+ {{ dCategory._creator.first_name + ' ' + dCategory._creator.last_name }}
+
+ برگشت به صفحه قبل
+ بروزرسانی
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/download-categories/index.vue b/pages/admin/download-categories/index.vue
new file mode 100644
index 0000000..eb42b1d
--- /dev/null
+++ b/pages/admin/download-categories/index.vue
@@ -0,0 +1,104 @@
+
+
+
+ {{ title }}
+ افزودن
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/download-categories/new.vue b/pages/admin/download-categories/new.vue
new file mode 100644
index 0000000..d9261f8
--- /dev/null
+++ b/pages/admin/download-categories/new.vue
@@ -0,0 +1,79 @@
+
+
+
+ {{ title }}
+ برگشت به صفحه قبل
+ ایجاد
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/downloads/_page/_item.vue b/pages/admin/downloads/_page/_item.vue
new file mode 100644
index 0000000..b640760
--- /dev/null
+++ b/pages/admin/downloads/_page/_item.vue
@@ -0,0 +1,370 @@
+
+
+
+
+
+
+
diff --git a/pages/admin/downloads/_page/index.vue b/pages/admin/downloads/_page/index.vue
new file mode 100644
index 0000000..57a6aa4
--- /dev/null
+++ b/pages/admin/downloads/_page/index.vue
@@ -0,0 +1,139 @@
+
+
+
+ {{ title }}
+ افزودن
+
+
+
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ categoryName(scope.row.category) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/downloads/new.vue b/pages/admin/downloads/new.vue
new file mode 100644
index 0000000..e9a7243
--- /dev/null
+++ b/pages/admin/downloads/new.vue
@@ -0,0 +1,186 @@
+
+
+
+ {{ title }}
+ برگشت به صفحه قبل
+ ایجاد
+
+
+
+
+
+ ابتدا نام، توضیحات، دسته بندی و تصویر را افزوده سپس در مرحله بعد فایل ها رو اضافه کنید.
+
+
+
+
+
+
+
+
+
+
+
+ توضیحات
+
+
+
+
+
+ {{ validation.description.msg }}
+
+
+
+
+
+
+
+
+
+
+ تصویر:
+
+
+
+
+
+
+ کاور
+
+
+
+
+
+
+ {{ validation.image.msg }}
+
+
+ بهتر است تصویر با فرمت png و پسزمینه شفاف باشد.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/faq/_item.vue b/pages/admin/faq/_item.vue
new file mode 100644
index 0000000..3fa8b25
--- /dev/null
+++ b/pages/admin/faq/_item.vue
@@ -0,0 +1,93 @@
+
+
+
+ {{ title }}
+ برگشت به صفحه قبل
+ بروزرسانی
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/faq/index.vue b/pages/admin/faq/index.vue
new file mode 100644
index 0000000..e0b6fa2
--- /dev/null
+++ b/pages/admin/faq/index.vue
@@ -0,0 +1,97 @@
+
+
+
+ {{ title }}
+ افزودن
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/faq/new.vue b/pages/admin/faq/new.vue
new file mode 100644
index 0000000..aff0b4d
--- /dev/null
+++ b/pages/admin/faq/new.vue
@@ -0,0 +1,87 @@
+
+
+
+ {{ title }}
+ برگشت به صفحه قبل
+ ایجاد
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/guarantee-reports/_grId.vue b/pages/admin/guarantee-reports/_grId.vue
new file mode 100644
index 0000000..a3728db
--- /dev/null
+++ b/pages/admin/guarantee-reports/_grId.vue
@@ -0,0 +1,117 @@
+
+
+
+ {{ title }}
+
+ اولین مشاهده توسط:
+ {{ guaranteeReport._openedBy.first_name + ' ' + guaranteeReport._openedBy.last_name }}
+
+
+ تغییر وضعیت توسط:
+ {{ guaranteeReport._updatedBy.first_name + ' ' + guaranteeReport._updatedBy.last_name }}
+
+ برگشت به صفحه قبل
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ مشاهده اکانت نماینده
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ لیست گزارش ها:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $jDate(scope.row.recieveDate) }}
+
+
+
+
+ {{ $jDate(scope.row.deliverDate) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/guarantee-reports/index.vue b/pages/admin/guarantee-reports/index.vue
new file mode 100644
index 0000000..d0f7403
--- /dev/null
+++ b/pages/admin/guarantee-reports/index.vue
@@ -0,0 +1,128 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+
+ فیلتر ها
+
+
+
+
+
+
+ جستجو در لیست:
+
+
+
+
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/help/index.vue b/pages/admin/help/index.vue
new file mode 100644
index 0000000..8015215
--- /dev/null
+++ b/pages/admin/help/index.vue
@@ -0,0 +1,102 @@
+
+
+
+ {{ title }}
+
+ ایجاد یا اصلاح کننده:
+ {{ help._creator.first_name + ' ' + help._creator.last_name }}
+
+ برگشت به صفحه داشبورد
+ بروزرسانی
+
+
+
+
+
+
+
+ صفحه آموزش ثبت گارانتی را انتخاب کنید
+
+
+
+
+
+ {{ validation.helpId.msg }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/index.vue b/pages/admin/index.vue
new file mode 100644
index 0000000..9613fb1
--- /dev/null
+++ b/pages/admin/index.vue
@@ -0,0 +1,34 @@
+
+
+
+ {{ title }}
+
+
+
+
+ صفحه اصلی
+
+
+ به پنل مدیریت خوش آمدید.
+
+
+
+
+
+
+
diff --git a/pages/admin/learning/_page/_item.vue b/pages/admin/learning/_page/_item.vue
new file mode 100644
index 0000000..8adf6d7
--- /dev/null
+++ b/pages/admin/learning/_page/_item.vue
@@ -0,0 +1,191 @@
+
+
+
+
+
diff --git a/pages/admin/learning/_page/index.vue b/pages/admin/learning/_page/index.vue
new file mode 100644
index 0000000..c12b3a8
--- /dev/null
+++ b/pages/admin/learning/_page/index.vue
@@ -0,0 +1,127 @@
+
+
+
+ {{ title }}
+ افزودن
+
+
+
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/learning/new.vue b/pages/admin/learning/new.vue
new file mode 100644
index 0000000..be51f3e
--- /dev/null
+++ b/pages/admin/learning/new.vue
@@ -0,0 +1,175 @@
+
+
+
+
+
diff --git a/pages/admin/lottery/_lottery.vue b/pages/admin/lottery/_lottery.vue
new file mode 100644
index 0000000..e657a4c
--- /dev/null
+++ b/pages/admin/lottery/_lottery.vue
@@ -0,0 +1,324 @@
+
+
+
+
+
diff --git a/pages/admin/lottery/index.vue b/pages/admin/lottery/index.vue
new file mode 100644
index 0000000..2b6c861
--- /dev/null
+++ b/pages/admin/lottery/index.vue
@@ -0,0 +1,148 @@
+
+
+
+ {{ title }}
+ افزودن
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $jDate(scope.row.created_at) }}
+
+
+
+
+
+ {{ $jDate(scope.row.expireDate) }}
+
+
+
+
+
+ {{ scope.row.participants.length }}
+
+
+
+
+
+ بسته شده
+ باز
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/lotteryPopUp/index.vue b/pages/admin/lotteryPopUp/index.vue
new file mode 100644
index 0000000..bc6bf6a
--- /dev/null
+++ b/pages/admin/lotteryPopUp/index.vue
@@ -0,0 +1,147 @@
+
+
+
+ {{ title }}
+ برگشت به صفحه قبل
+ بروزرسانی
+
+
+
+
+
+
+
+
+ موقعیت و ابعاد دکمه در صفحه
+
+
+
+
+
+
+
+
+
+
+ تغییر عکس بکگراند دکمه
+
+
+
+
+ توجه داشته باشید طول و عرض دکمه به اندازه ی طول و عرض عکسی که آپلود میکنید نمایش داده میشود. ابعاد
+ توصیه شده 100*100 پیکسل میباشد.
+
+
+
+
+
+
+ بکگراند
+
+
+
+
+
+
+ {{ validation.bgImg.msg }}
+
+
+ بهتر است تصویر با فرمت png و پسزمینه شفاف باشد.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/op-requests/_oprId.vue b/pages/admin/op-requests/_oprId.vue
new file mode 100644
index 0000000..be3113b
--- /dev/null
+++ b/pages/admin/op-requests/_oprId.vue
@@ -0,0 +1,239 @@
+
+
+
+ {{ title }}
+
+ اولین مشاهده توسط:
+ {{ oldPieceRequest._openedBy.first_name + ' ' + oldPieceRequest._openedBy.last_name }}
+
+
+ تغییر وضعیت توسط:
+ {{ oldPieceRequest._updatedBy.first_name + ' ' + oldPieceRequest._updatedBy.last_name }}
+
+ برگشت به صفحه قبل
+
+
+
+
+
+
+
+
+ تغییر وضعیت فرم
+
+
+
+
+
+ در انتظار قطعه
+
+
+
+
+
+ ارسال
+
+
+
+ تحویل شده
+
+
+
+
+
+ کد ارسال مرسوله:
+ {{ oldPieceRequest.deliveryCode || '-' }}
+
+
+
+
+ تاریخچه وضعیت های فرم
+
+
+
+
+ پیشنویس
+ ارسال
+ در دست اقدام
+ در انتظار قطعه
+ تحویل شده
+
+
+
+
+ {{ $jDateTime(scope.row.date) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ مشاهده اکانت نماینده
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ لیست قطعات داغی درخواستی:
+
+
+
+
+
+
+ {{ scope.row.name }}
+
+
+
+
+
+
+
+ {{ scope.row.SerialNo1 || '-' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/op-requests/index.vue b/pages/admin/op-requests/index.vue
new file mode 100644
index 0000000..9e7f50d
--- /dev/null
+++ b/pages/admin/op-requests/index.vue
@@ -0,0 +1,219 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+
+ فیلتر ها
+
+
+
+
+
+
+
+
+ همه
+ ({{ oprList.length }})
+
+
+
+ جدید
+ ({{ getListCountByStatus('sent') }})
+
+
+
+ در دست اقدام
+ ({{ getListCountByStatus('ongoing') }})
+
+
+
+ در انتظار قطعه
+ ({{ getListCountByStatus('waiting') }} )
+
+
+
+ تحویل شده
+ ({{ getListCountByStatus('delivered') }})
+
+
+
+
+
+
+
+ جستجو در لیست:
+
+
+
+
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+ {{ $jDate(scope.row.sendDate) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ جدید
+ در دست اقدام
+ در انتظار قطعه
+ تحویل شده
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/piece-requests/_prId.vue b/pages/admin/piece-requests/_prId.vue
new file mode 100644
index 0000000..647b83a
--- /dev/null
+++ b/pages/admin/piece-requests/_prId.vue
@@ -0,0 +1,248 @@
+
+
+
+ {{ title }}
+
+ اولین مشاهده توسط:
+ {{ pieceRequest._openedBy.first_name + ' ' + pieceRequest._openedBy.last_name }}
+
+
+ تغییر وضعیت توسط:
+ {{ pieceRequest._updatedBy.first_name + ' ' + pieceRequest._updatedBy.last_name }}
+
+ برگشت به صفحه قبل
+
+
+
+
+
+
+
+
+ تغییر وضعیت فرم
+
+
+
+
+
+ در انتظار قطعه
+
+
+
+
+
+ ارسال
+
+
+
+ تحویل شده
+
+
+
+
+
+ کد ارسال مرسوله:
+ {{ pieceRequest.deliveryCode || '-' }}
+
+
+
+
+ تاریخچه وضعیت های فرم
+
+
+
+
+ پیشنویس
+ ارسال
+ در دست اقدام
+ در انتظار قطعه
+ تحویل شده
+
+
+
+
+ {{ $jDateTime(scope.row.date) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ مشاهده اکانت نماینده
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ لیست قطعات درخواستی:
+
+
+
+
+
+
+ {{ scope.row.name }}
+
+
+
+
+
+
+
+ {{ scope.row.SerialNo1 || '-' }}
+
+
+
+
+
+ دارد
+ ندارد
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/piece-requests/index.vue b/pages/admin/piece-requests/index.vue
new file mode 100644
index 0000000..a609a03
--- /dev/null
+++ b/pages/admin/piece-requests/index.vue
@@ -0,0 +1,219 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+
+ فیلتر ها
+
+
+
+
+
+
+
+
+ همه
+ ({{ prList.length }})
+
+
+
+ جدید
+ ({{ getListCountByStatus('sent') }})
+
+
+
+ در دست اقدام
+ ({{ getListCountByStatus('ongoing') }})
+
+
+
+ در انتظار قطعه
+ ({{ getListCountByStatus('waiting') }} )
+
+
+
+ تحویل شده
+ ({{ getListCountByStatus('delivered') }})
+
+
+
+
+
+
+
+ جستجو در لیست:
+
+
+
+
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+ {{ $jDate(scope.row.sendDate) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ جدید
+ در دست اقدام
+ در انتظار قطعه
+ تحویل شده
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/pieces/_piece.vue b/pages/admin/pieces/_piece.vue
new file mode 100644
index 0000000..3587bbe
--- /dev/null
+++ b/pages/admin/pieces/_piece.vue
@@ -0,0 +1,131 @@
+
+
+
+ {{ title }}
+ برگشت به صفحه قبل
+ افزودن
+ بروزرسانی
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/pieces/index.vue b/pages/admin/pieces/index.vue
new file mode 100644
index 0000000..6ac9baf
--- /dev/null
+++ b/pages/admin/pieces/index.vue
@@ -0,0 +1,106 @@
+
+
+
+ {{ title }}
+ افزودن
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/representations/_representation.vue b/pages/admin/representations/_representation.vue
new file mode 100644
index 0000000..cee0c99
--- /dev/null
+++ b/pages/admin/representations/_representation.vue
@@ -0,0 +1,400 @@
+
+
+
+ {{ title }}
+ برگشت به صفحه قبل
+
+
+
+
+
+
+
+
+ تغییر وضعیت فرم
+
+
+
+
+
+ بررسی مدارک
+
+
+
+ تایید شده
+
+
+
+ رد شده
+
+
+
+
+
+ تغییر وضعیت آپلود مدارک
+
+
+
+ دسترسی آپلود
+
+
+
+ عدم دسترسی آپلود
+
+
+
+
+
+
+
+
+
+
+
+ مشخصات فردی متقاضی:
+
+ مشاهده اکانت متقاضی
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ اطلاعات تماس:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ مشخصات مکان نماینده:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ آشنایی با آسان سرویس:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ سابقه فعالیت:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ سایر توضیحات:
+
+
+
+
+
+
+
+
+
+
+
+ نمایندگی نشان تجاری دیگر:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+ (عکس های آپلود شده)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/representations/index.vue b/pages/admin/representations/index.vue
new file mode 100644
index 0000000..fbe7c65
--- /dev/null
+++ b/pages/admin/representations/index.vue
@@ -0,0 +1,232 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+
+ فیلتر ها
+
+
+
+
+
+
+
+
+ همه
+ ({{ representations.length }})
+
+
+
+ جدید
+ ({{ getListCountByStatus('registered') }})
+
+
+
+ در دست اقدام
+ ({{ getListCountByStatus('ongoing') }})
+
+
+
+ بررسی مدارک
+ ({{ getListCountByStatus('verification') }} )
+
+
+
+ تایید شده
+ ({{ getListCountByStatus('accepted') }})
+
+
+
+ رد شده
+ ({{ getListCountByStatus('rejected') }})
+
+
+
+
+
+
+
+ جستجو در لیست:
+
+
+
+
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $jDate(scope.row.created_at) }}
+
+
+
+
+
+ ثبت شده
+ در دست اقدام
+ بررسی مدارک
+ تایید شده
+ رد شده
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/serials-exel/index.vue b/pages/admin/serials-exel/index.vue
new file mode 100644
index 0000000..6e16237
--- /dev/null
+++ b/pages/admin/serials-exel/index.vue
@@ -0,0 +1,163 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+ افزودن فایل اکسل
+
+
+ {{ validation.file.msg }}
+ افزودن
+
+
+
+
+
+
+
+ لیست فایل های افزوده شده
+
+
+
+
+
+
+
+ {{ scope.row.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/sms/_item.vue b/pages/admin/sms/_item.vue
new file mode 100644
index 0000000..0dc1d20
--- /dev/null
+++ b/pages/admin/sms/_item.vue
@@ -0,0 +1,333 @@
+
+
+
+ {{ title }}
+
+ ایجاد کننده:
+ {{ sms._creator.first_name + ' ' + sms._creator.last_name }}
+
+ برگشت به صفحه قبل
+
+
+
+
+
+
+ متن پیامک:
+
+
+
+
+
+
+
+
+ تعداد مخاطبین انتخاب شده:
+ {{ contacts.length }}
+
+
+ *برای مشاهده نتایج دقیق فیلد "جستجو" را خالی کنید. چنانچه فیلد جستجو پر باشد فقط برای کسانی که در لیست
+ فیلتر شده اند و نامشان انتخاب شده پیامک خواهد رفت.
+
+
+ {{ validation.recievers.msg }}
+
+
+
+ ارسال
+
+
+
+
+
+
+
+
+
+ انتخاب مخاطبین:
+
+
+
+
+ همه
+
+
+
+ مشتریان
+
+
+
+ نمایندگان
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.first_name + ' ' + scope.row.last_name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ نماینده
+ مشتری
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ لیست مخاطبین:
+
+
+
+
+
+
+
+
+ {{ scope.row.user_id.first_name + ' ' + scope.row.user_id.last_name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/sms/index.vue b/pages/admin/sms/index.vue
new file mode 100644
index 0000000..6fbf06c
--- /dev/null
+++ b/pages/admin/sms/index.vue
@@ -0,0 +1,92 @@
+
+
+
+ {{ title }}
+ افزودن
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+ {{ scope.row.message }}
+
+
+
+
+
+ {{ scope.row.recievers.length }}
+
+
+
+
+
+ {{ $jDate(scope.row.created_at) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/surveys/_survey.vue b/pages/admin/surveys/_survey.vue
new file mode 100644
index 0000000..0797493
--- /dev/null
+++ b/pages/admin/surveys/_survey.vue
@@ -0,0 +1,62 @@
+
+
+
+ {{ title }}
+ برگشت به صفحه قبل
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/surveys/index.vue b/pages/admin/surveys/index.vue
new file mode 100644
index 0000000..d63c205
--- /dev/null
+++ b/pages/admin/surveys/index.vue
@@ -0,0 +1,113 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+
میزان رضایت کلی مشتریان در تمام نظرات ثبت شده:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.user.first_name + ' ' + scope.row.user.last_name }}
+
+
+
+
+
+
+ {{ scope.row.code || '-' }}
+
+
+
+
+
+ {{ $jDate(scope.row.created_at) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/tickets/_ticket.vue b/pages/admin/tickets/_ticket.vue
new file mode 100644
index 0000000..8706f22
--- /dev/null
+++ b/pages/admin/tickets/_ticket.vue
@@ -0,0 +1,162 @@
+
+
+
+ {{ title }}
+ برگشت به صفحه قبل
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
پیام ها:
+
+
+
+
هیچ پیامی وجود ندارد.
+
+
+
+
+
{{ item.message }}
+
+ {{ $jDateTime(item.created_at) }}
+
+ ({{ item.user_id.first_name + ' ' + item.user_id.last_name }})
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ارسال
+
+
+
{{ validation.message.msg }}
+
{{ validation.image.msg }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/tickets/index.vue b/pages/admin/tickets/index.vue
new file mode 100644
index 0000000..7d71c8e
--- /dev/null
+++ b/pages/admin/tickets/index.vue
@@ -0,0 +1,146 @@
+
+
+
+ {{ title }}
+ افزودن
+
+
+
+
+
+
+ فیلتر ها
+
+
+
+
+
+
+ جستجو در لیست:
+
+
+
+
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+ {{ scope.row.title }}
+
+
+
+
+
+
+
+
+
+ {{ scope.row.transaction_id || '-' }}
+
+
+
+
+
+ {{ $jDate(scope.row.created_at) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/transactions/_item.vue b/pages/admin/transactions/_item.vue
new file mode 100644
index 0000000..d81c36b
--- /dev/null
+++ b/pages/admin/transactions/_item.vue
@@ -0,0 +1,100 @@
+
+
+
+ {{ title }}
+ برگشت به صفحه قبل
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/transactions/index.vue b/pages/admin/transactions/index.vue
new file mode 100644
index 0000000..b70836b
--- /dev/null
+++ b/pages/admin/transactions/index.vue
@@ -0,0 +1,92 @@
+
+
+
+ {{ title }}
+ افزودن
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/warranty-terms/_page/_item.vue b/pages/admin/warranty-terms/_page/_item.vue
new file mode 100644
index 0000000..c67d90a
--- /dev/null
+++ b/pages/admin/warranty-terms/_page/_item.vue
@@ -0,0 +1,175 @@
+
+
+
+ {{ title }}
+
+ ایجاد یا اصلاح کننده:
+ {{ warranty._creator.first_name + ' ' + warranty._creator.last_name }}
+
+ برگشت به صفحه قبل
+ بروزرسانی
+
+
+
+
+
+
+
+
+
+
+
+ توضیحات
+
+
+
+
+
+ {{ validation.description.msg }}
+
+
+
+
+
+
+
+
+
+
+ تصویر:
+
+
+
+
+
+
+ کاور
+
+
+
+
+
+
+ {{ validation.image.msg }}
+
+ عکس باید با نسبت 1:1 باشد.
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/warranty-terms/_page/index.vue b/pages/admin/warranty-terms/_page/index.vue
new file mode 100644
index 0000000..ef1eeb7
--- /dev/null
+++ b/pages/admin/warranty-terms/_page/index.vue
@@ -0,0 +1,127 @@
+
+
+
+ {{ title }}
+ افزودن
+
+
+
+
+
+
+
+
+
+ {{ list_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/warranty-terms/new.vue b/pages/admin/warranty-terms/new.vue
new file mode 100644
index 0000000..88e9ea4
--- /dev/null
+++ b/pages/admin/warranty-terms/new.vue
@@ -0,0 +1,164 @@
+
+
+
+ {{ title }}
+ برگشت به صفحه قبل
+ ایجاد
+
+
+
+
+
+
+
+
+
+
+
+ توضیحات
+
+
+
+
+
+ {{ validation.description.msg }}
+
+
+
+
+
+
+
+
+
+
+ تصویر:
+
+
+
+
+
+
+ کاور
+
+
+
+
+
+
+ {{ validation.image.msg }}
+
+ عکس باید با نسبت 1:1 باشد.
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/agent-benefits/index.vue b/pages/agent-benefits/index.vue
new file mode 100644
index 0000000..67730f3
--- /dev/null
+++ b/pages/agent-benefits/index.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
تسهیالت و مزایای نمایندگی مجاز خدمات پس از فروش شرکت آسان سرویس:
+
+
+
+ پایه ریزی همکاری بلندمدت جهت سرمایه گذاری نماینده در امر خدمات
+
+ (درآمدزایی و برخورداری از یک کسب و کار مناسب مرتبط با محصوالت جانبی،رم و فلش،صوتی وتصویری و ...
+ در زمان گارانتی محصوالت و پس از آن)
+
+
+
+
+ بهره مندی از امتیاز معرفی شدن نمایندگان توسط شرکت آسان سرویس در سیستم تبلیغات به مشتریان
+
+
+ درج مشخصات و اطالعات نماینده بر روی سایت آسان سرویس
+
+
+ استفاده از شرایط اعتباری جهت تامین قطعات مورد نیاز با توجه به رتبه نمایندگی
+
+
+ پشتیبانی فنی و آموزش تکنسین و کارشناس نمایندگان خدمات پس از فروش در صورت لزوم
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/agents/index.vue b/pages/agents/index.vue
new file mode 100644
index 0000000..cd8678e
--- /dev/null
+++ b/pages/agents/index.vue
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+
+
+
فیلتر ها:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ نماینده هر دو نوع لوازم
+ نماینده لوازم جانبی کامپیوتر و موبایل
+ نماینده لوازم صوتی تصویری خودرو
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/auth/login-register/index.vue b/pages/auth/login-register/index.vue
new file mode 100644
index 0000000..4bd5efe
--- /dev/null
+++ b/pages/auth/login-register/index.vue
@@ -0,0 +1,449 @@
+
+
+
+
+
diff --git a/pages/auth/resetpass-newpass/_token.vue b/pages/auth/resetpass-newpass/_token.vue
new file mode 100644
index 0000000..48b791f
--- /dev/null
+++ b/pages/auth/resetpass-newpass/_token.vue
@@ -0,0 +1,99 @@
+
+
+
+
+
diff --git a/pages/auth/resetpass/index.vue b/pages/auth/resetpass/index.vue
new file mode 100644
index 0000000..98b2c96
--- /dev/null
+++ b/pages/auth/resetpass/index.vue
@@ -0,0 +1,179 @@
+
+
+
+
+
diff --git a/pages/contact/index.vue b/pages/contact/index.vue
new file mode 100644
index 0000000..bfb2155
--- /dev/null
+++ b/pages/contact/index.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
برای ما پیام بگذارید:
+
+
+
+
+
+ ارسال پیام
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/download/_item+.vue b/pages/download/_item+.vue
new file mode 100644
index 0000000..7f6cdd6
--- /dev/null
+++ b/pages/download/_item+.vue
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+
{{ download.title }}
+
+
+
+
+
+
+
+
+
+
+
دانلود با لینک مستقیم:
+
+
+
+
+
نسخه ویندوز
+
+
+
+
+
+
+
نسخه مک
+
+
+
+
+
+
+
نسخه لینوکس
+
+
+
+
+
+
+
+
نسخه اندروید
+
+
+
+
+
+
+
+
نسخه iOS
+
+
+
+
+
+
+
پسورد فایل فشرده: www.asan-service.com
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/download/index.vue b/pages/download/index.vue
new file mode 100644
index 0000000..567e865
--- /dev/null
+++ b/pages/download/index.vue
@@ -0,0 +1,185 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+ {{ categoryName(item.category) }}
+
+
{{ item.short_description }}
+
ادامه مطلب
+
+
+
+
+
+
+
+
جدیدترین ها:
+
+
+
+
+
+
{{ item.title }}
+
+
+
{{ item.title }}
+
{{ item.short_description }}
+
ادامه مطلب
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+ {{ categoryName(item.category) }}
+
+
{{ item.short_description }}
+
ادامه مطلب
+
+
+
+
+
+
چیزی برای دانلود در این صفحه وجود نداد.
+
+
+
+
+
+
+
+
+
diff --git a/pages/enroll-representation/index.vue b/pages/enroll-representation/index.vue
new file mode 100644
index 0000000..11241d1
--- /dev/null
+++ b/pages/enroll-representation/index.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+ برای ثبت درخواست نمایندگی باید
+ وارد حساب کاربری
+ خود شوید. چنانپه حساب کاربری ندارید
+ ثبت نام کنید.
+
+
+
+
+
+
+
+ حساب کاربری شما به حساب نماینده تبدیل شده است،
+ وارد پنل نمایندگی
+ شوید.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index.vue b/pages/index.vue
new file mode 100644
index 0000000..d877a5a
--- /dev/null
+++ b/pages/index.vue
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
استعلام گارانتی و اصالت کالا
+
+ ضمن خوش آمدگویی شما به مجموعه آسان سرویس چنانچه محصول خریداری شده شما دارای سریال گارانتی میباشد
+ میتوانید با وارد کردن سریال گارانتی در کادر زیر از وضعیت گارانتی محصول و یا با انتخاب گزینه اصالت کالا و
+ وارد کردن شماره سریال خود دستگاه از اصالت دستگاه مطلع شوید.
+
+
+
+
+ سریال گارانتی
+
+
+ اصالت کالا
+
+
+
+
+
+
+ {{ inquiryBtnTxt }}
+
+
+
+
+
+
+
خدمات گارانتی آسان سرویس
+
+ آسان سرویس یکی از بزرگترین و فعالترین ارائه دهنده خدمات پس از فروش محصولات الکترونیکی به مدد شبکه گسترده
+ و منسجم خدمات پس از فروش خود توانسته پاسخگوی مشتریان فهیم و گرانقدر باشد.
+
+
+
کاربر گرامی جهت استفاده از خدمات گارانتی محصول مورد نظر بر روی دکمه ثبت گارانتی کلیک کنید.
+
+ همچنین میتوانید جهت راهنمایی مراحل ثبت گارانتی بر روی دکمه راهنمای ثبت گارانتی کلیک کرده و محتوای
+ ویدیویی آن را مشاهده فرمایید.
+
+
+
+ راهنمای ثبت گارانتی
+ ثبت گارانتی
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/learning/_post+.vue b/pages/learning/_post+.vue
new file mode 100644
index 0000000..4393304
--- /dev/null
+++ b/pages/learning/_post+.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/learning/index.vue b/pages/learning/index.vue
new file mode 100644
index 0000000..f448126
--- /dev/null
+++ b/pages/learning/index.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
{{ item.title }}
+
{{ item.short_description }}
+
مشاهده
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
هیچ پستی در این صفحه وجود نداد.
+
+
+
+
+
+
+
+
+
diff --git a/pages/lottery/index.vue b/pages/lottery/index.vue
new file mode 100644
index 0000000..ac5c311
--- /dev/null
+++ b/pages/lottery/index.vue
@@ -0,0 +1,212 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ فقط تا پایان امروز فرصت باقیست
+
+
+
+ فقط
+ {{ remainDays }}
+ روز زمان باقیست
+
+
+
+
{{ lastLottery.title }}
+
+ تاریخ پایان قرعه کشی:
+ {{
+ $jDate(lastLottery.expireDate)
+ }}
+
+
+
+
+
+
+
+ ثبت
+
+
+
+
+
+
مهلت شرکت در قرعه کشی به پایان رسیده
+
+
+
+
+
+
+
لیست برندگان قرعه کشی:
+
+
+
+
+
+ ردیف
+ نام و نام خانوادگی
+ شماره تلفن همراه
+
+
+
+
+
+ {{ index + 1 }}
+
+
+ {{ item.fullName }}
+
+
+ {{ coverPhoneNumber(item.mobile) }}
+
+
+
+
+
+
+
+
+
+
اطلاعاتی برای نمایش در این صفحه موجود نمیباشد
+
+
+
+
+
+
+
+
diff --git a/pages/representation/index.vue b/pages/representation/index.vue
new file mode 100644
index 0000000..da3d9fa
--- /dev/null
+++ b/pages/representation/index.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
نکات مهم قبل از ثبت درخواست:
+
+
+
+ برای ثبت درخواست، آپلود مدارک و پیگیری درخواست ابتدا باید
+ وارد حساب کاربری
+ خود شوید.
+
+
+
+
+ فرم درخواست را با دقت پر کرده و قبل از ارسال اطلاعات خود را بررسی کنید. امکان ویرایش فرم بعد از
+ ارسال وجود ندارد.
+
+
+
+ شماره تلفن ثابت و فکس شرکت را با پیش شماره شهر و به صورت کامل وارد کنید.
+
+
+
+ درصورتی که قبلا فرم درخواست ارسال کرده اید تا مشخص شدن وضعیت درخواست قبلی قادر به ثبت درخواست جدید
+ نمیباشید.
+
+
+
+
+ بعد از ارسال فرم و مشاهده درخواست توسط کارشناسان درصورتی که نیاز به آپلود مدارک باشد، دسترسی آپلود
+ مدارک به شما داده خواهد شد و لیست مدارک مورد نیاز به اطلاع شما خواهد رسید.
+
+
+
+ مدارک را فقط به صورت فایل فشرده و با فرمت zip میتوانید آپلود کنید.
+
+
+
+ محدودیت حجم آپلود هر فایل 20 مگابایت میباشد، لذا اگر حجم مدارک زیاد است آن را طی چند مرحله آپلود
+ کنید.
+
+
+
+
+
+
+ ثبت درخواست و آپلود مدارک
+
+
+
+ پیگیری وضعیت درخواست
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/warranty-terms/index.vue b/pages/warranty-terms/index.vue
new file mode 100644
index 0000000..42db8b2
--- /dev/null
+++ b/pages/warranty-terms/index.vue
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ item.title }}
+
{{ item.short_description }}
+
مشاهده
+
+
+
+
+
+
هیچ پستی در این صفحه وجود نداد.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/plugins/ATextSplitterVuePlugin.client.js b/plugins/ATextSplitterVuePlugin.client.js
new file mode 100644
index 0000000..0de878a
--- /dev/null
+++ b/plugins/ATextSplitterVuePlugin.client.js
@@ -0,0 +1,78 @@
+/* eslint-disable no-undef */
+/// ///////////////////////////////////////////////////////////
+/// /////////////////// custom text splitor created by ammiiir1
+/// ////// (amir.i.iii.vii.iii@gmail.com | ammiiir1@gmail.com )
+// (https://gitlab.com/ammiiir1 | https://github.com/ammiiir1)
+
+import Vue from 'vue'
+
+class ATextSplitterVuePlugin {
+ /// ///////////////////////////////////////////////////////////////////////////////////
+ /// text animation#1
+ // .staggerFrom($("#txtID .tsWords"), 0.5, {cycle: {y: [20, -20]}, opacity: 0}, 0.1, 0)
+ // ************************************************************************************
+ /// text animation#2
+ // .staggerFrom($("#txtID .tsLetters"), 0.2, {scale: 5, opacity: 0}, 0.07)
+ // ************************************************************************************
+ // text animation#3
+ // .staggerFrom($("#txtID .tsWords"), 0.4, {scale:2,opacity: 0}, 0.015,1.4)
+ // ************************************************************************************
+ /// text animation#4
+ // .staggerFrom($("#txtID .tsWords"), 0.3, {opacity: 0}, 0.07)
+ // ************************************************************************************
+ constructor({ rtl = false, letterSpace = 0, wordSpace = '3px' } = {}) {
+ // options
+ this.rtl = rtl
+ this.letterSpace = letterSpace + 'px'
+ this.wordSpace = wordSpace + 'px'
+ // pipeline vars
+ this.word = ''
+ this.letterSpans = ''
+ this.wordSpans = ''
+ }
+
+ /// /////////////////////////////////////////////// private classes
+ _split(strOrId, isElement = true) {
+ // pipeline
+ const line = isElement ? $(`#${strOrId}`).text() : strOrId // get the sentence
+ const parts = line.split(' ')
+ for (let i = 0; i < parts.length; i++) {
+ // how many words
+ this.letterSpans = ''
+ this.word = parts[i]
+
+ for (let j = 0; j < this.word.length; j++) {
+ // how many letters in each words
+ this.letterSpans += '' + this.word[j] + ' ' // creat a span for each letter
+ }
+ this.wordSpans += '' + this.letterSpans + ' '
+ }
+ }
+
+ _setStyles(txtID) {
+ $(`#${txtID} .tsLetters`).css({
+ display: this.rtl ? 'inline' : 'inline-block',
+ marginRight: this.rtl ? 0 : this.letterSpace,
+ marginLeft: this.rtl ? this.letterSpace : 0
+ })
+ $(`#${txtID} .tsWords`).css({
+ display: 'inline-block',
+ marginRight: this.rtl ? 0 : this.wordSpace,
+ marginLeft: this.rtl ? this.wordSpace : 0
+ })
+ }
+
+ /// /////////////////////////////////////////////// output methods
+ injectToElement(txtID) {
+ this._split(txtID, true)
+ $(`#${txtID}`).html(this.wordSpans) // render the sentence
+ this._setStyles(txtID)
+ }
+
+ returnString(str) {
+ this._split(str, false)
+ return this.wordSpans // return splitted string
+ }
+}
+
+Vue.prototype.$ATextSplitter = ATextSplitterVuePlugin
diff --git a/plugins/ArpaError.client.js b/plugins/ArpaError.client.js
new file mode 100644
index 0000000..86d9222
--- /dev/null
+++ b/plugins/ArpaError.client.js
@@ -0,0 +1,44 @@
+import Vue from 'vue'
+
+function arpaError() {
+ const arpaErrorMsg = 'تبادل اطلاعات با پایگاه داده آسان سرویس با مشکل مواجه شده، لطفا صفحه را بروزرسانی کنید.'
+ const arpaErrorTitle = 'مشکل در ارتباط'
+ Vue.prototype
+ .$confirm(arpaErrorMsg, arpaErrorTitle, {
+ confirmButtonText: 'بروزرسانی صفحه',
+ cancelButtonText: 'بستن',
+ type: 'warning'
+ })
+ .then(() => {
+ window.location.reload()
+ })
+ .catch(() => {
+ Vue.prototype.$message({
+ type: 'info',
+ message: 'برای ادامه صفحه را به صورت دستی بروزرسانی کنید'
+ })
+ })
+}
+
+function fetchError() {
+ const arpaErrorMsg = 'دریافت اطلاعات با مشکل مواجه شده، لطفا صفحه را بروزرسانی کنید.'
+ const arpaErrorTitle = 'دریافت ناموفق'
+ Vue.prototype
+ .$confirm(arpaErrorMsg, arpaErrorTitle, {
+ confirmButtonText: 'تلاش مجدد',
+ cancelButtonText: 'بستن',
+ type: 'warning'
+ })
+ .then(() => {
+ window.location.reload()
+ })
+ .catch(() => {
+ Vue.prototype.$message({
+ type: 'info',
+ message: 'برای ادامه صفحه را به صورت دستی بروزرسانی کنید'
+ })
+ })
+}
+
+Vue.prototype.$arpaError = arpaError
+Vue.prototype.$fetchError = fetchError
diff --git a/plugins/ckEditor.client.js b/plugins/ckEditor.client.js
new file mode 100644
index 0000000..4c10cbb
--- /dev/null
+++ b/plugins/ckEditor.client.js
@@ -0,0 +1,4 @@
+import Vue from 'vue'
+import CKEditor from 'ckeditor4-vue'
+
+Vue.use(CKEditor)
diff --git a/plugins/core-ui.client.js b/plugins/core-ui.client.js
new file mode 100644
index 0000000..8a5278c
--- /dev/null
+++ b/plugins/core-ui.client.js
@@ -0,0 +1,11 @@
+import Vue from 'vue'
+import CoreUi from '@coreui/vue'
+import CoreUiVueCharts from '@coreui/vue-chartjs'
+import { iconsSet as icons } from '~/utils/adminPanelIcons'
+
+Vue.use(CoreUiVueCharts)
+Vue.use(CoreUi)
+
+export default ({ app }) => {
+ app.icons = icons
+}
diff --git a/plugins/datePicker.client.js b/plugins/datePicker.client.js
new file mode 100644
index 0000000..8bccd45
--- /dev/null
+++ b/plugins/datePicker.client.js
@@ -0,0 +1,4 @@
+import Vue from 'vue'
+import VuePersianDatetimePicker from 'vue-persian-datetime-picker'
+
+Vue.component('PersianDatePicker', VuePersianDatetimePicker)
diff --git a/plugins/element-ui.js b/plugins/element-ui.js
new file mode 100644
index 0000000..4bbf940
--- /dev/null
+++ b/plugins/element-ui.js
@@ -0,0 +1,5 @@
+import Vue from 'vue'
+import Element from 'element-ui'
+import locale from 'element-ui/lib/locale/lang/fa'
+
+Vue.use(Element, { locale })
diff --git a/plugins/gsap.client.js b/plugins/gsap.client.js
new file mode 100644
index 0000000..63cf2f4
--- /dev/null
+++ b/plugins/gsap.client.js
@@ -0,0 +1,8 @@
+/* eslint-disable import/no-named-as-default */
+import Vue from 'vue'
+import gsap from 'gsap'
+import scrollToPlugin from 'gsap/ScrollToPlugin'
+import scrollTrigger from 'gsap/ScrollTrigger'
+
+gsap.registerPlugin(scrollToPlugin, scrollTrigger)
+Vue.prototype.$gsap = gsap
diff --git a/plugins/jDate.js b/plugins/jDate.js
new file mode 100644
index 0000000..1392945
--- /dev/null
+++ b/plugins/jDate.js
@@ -0,0 +1,13 @@
+import Vue from 'vue'
+import moment from 'moment-jalaali'
+
+function jDate(date) {
+ return moment(date).format('jYYYY/jMM/jDD')
+}
+
+function jDateTime(date) {
+ return moment(date).format('jYYYY/jMM/jDD - HH:mm:ss')
+}
+
+Vue.prototype.$jDate = jDate
+Vue.prototype.$jDateTime = jDateTime
diff --git a/sass/admin/_custom.scss b/sass/admin/_custom.scss
new file mode 100644
index 0000000..1d87935
--- /dev/null
+++ b/sass/admin/_custom.scss
@@ -0,0 +1,92 @@
+// Here you can add other styles
+.copy-right {
+ color: #872071;
+ font-weight: bold;
+
+ &:hover {
+ text-decoration: none;
+ color: #872071;
+ }
+}
+
+pre {
+ background: #000 !important;
+ color: green !important;
+ direction: ltr !important;
+ text-align: left !important;
+ padding: 20px !important;
+ font-size: 20px !important;
+}
+
+.c-app {
+ .custom-subheader {
+ align-items: center;
+ width: 100%;
+ position: fixed;
+ top: $header-height;
+ left: 0;
+ z-index: 10;
+ transition: width $layout-transition-speed;
+ -webkit-transition: width $layout-transition-speed;
+ -moz-transition: width $layout-transition-speed;
+ -ms-transition: width $layout-transition-speed;
+ -o-transition: width $layout-transition-speed;
+
+ &.sideBarFull {
+ width: calc(100% - #{$sidebar-width});
+ }
+
+ &.sideBarMinimized {
+ width: calc(100% - #{$sidebar-minimized-width});
+ }
+
+ &.sideBarClose {
+ width: 100%;
+ }
+
+ @media (max-width: 992px) {
+ width: 100% !important;
+ }
+ }
+
+ .form-group {
+ &.err {
+ .col-form-label {
+ color: red !important;
+ }
+
+ .form-control {
+ border-color: red !important;
+ }
+
+ .form-text {
+ color: red !important;
+ }
+ }
+ }
+
+ .c-sidebar-nav-dropdown {
+ .c-sidebar-nav-dropdown-toggle {
+ background: rgba(gray, 0.2) !important;
+ }
+ }
+
+ .vpd-main {
+ .vpd-selected {
+ .vpd-day-text {
+ color: #fff;
+ }
+ }
+
+ .vpd-date {
+ span {
+ color: #fff;
+ }
+ }
+
+ // vue persian dateTime picker styles
+ .vpd-icon-btn {
+ padding: 9px 10px;
+ }
+ }
+}
diff --git a/sass/admin/_el_ui_rtl.scss b/sass/admin/_el_ui_rtl.scss
new file mode 100644
index 0000000..fa390fd
--- /dev/null
+++ b/sass/admin/_el_ui_rtl.scss
@@ -0,0 +1,136 @@
+//////////////////////////////////////////////////////////////////////////////////////////////////////// element ui rtl fix
+html:lang(fa) {
+ .el-tag {
+ /*margin-bottom: 10px!important;*/
+ }
+
+ .text-area {
+ textarea {
+ height: 100px;
+ }
+ }
+
+ .el-popup-parent--hidden {
+ padding-right: 0 !important;
+ }
+
+ .el-tag .el-icon-close {
+ right: auto !important;
+ left: -5px !important;
+ }
+
+ .el-table .el-table__body-wrapper .el-table__row .is-left {
+ text-align: left !important;
+ }
+
+ .wrapper {
+ min-height: 100vh;
+ }
+
+ .el-form-item__label {
+ float: right !important;
+ text-align: right !important;
+ }
+
+ .el-form-item__content {
+ margin-left: 0 !important;
+ margin-right: 120px !important;
+ }
+
+ @media (max-width: 768px) {
+ .el-form-item__content {
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+ }
+ }
+
+ .secondTitle {
+ margin-top: 50px;
+ }
+
+ .el-upload__input {
+ display: none !important;
+ }
+
+ .el-message-box__title,
+ .el-message-box__message {
+ direction: rtl !important;
+ text-align: right !important;
+ }
+
+ .el-message-box__message {
+ padding-left: 12px !important;
+ padding-right: 36px !important;
+ }
+
+ .el-message-box__btns {
+ text-align: left !important;
+ }
+
+ .el-message-box__headerbtn {
+ right: auto !important;
+ left: 15px !important;
+ }
+
+ .el-message-box__btns button:nth-child(2) {
+ margin-left: 0 !important;
+ margin-right: 10px !important;
+ }
+
+ .el-message-box__status {
+ right: 0 !important;
+ }
+
+ .el-table td,
+ .el-table th {
+ text-align: right !important;
+ }
+
+ .el-upload__input {
+ display: none !important;
+ }
+
+ .el-checkbox__label {
+ padding-left: 0 !important;
+ padding-right: 10px !important;
+ }
+
+ .el-message__icon {
+ margin-right: 0 !important;
+ margin-left: 10px !important;
+ }
+
+ .sidebar-subnav {
+ background: rgba(0, 0, 0, 0.05) !important;
+ }
+
+ .sidebar > .nav > li {
+ border-bottom: 1px solid #eee !important;
+ }
+
+ .brand-logo p {
+ margin-top: 6px !important;
+ }
+
+ .brand-logo-collapsed svg {
+ fill: #fff !important;
+ }
+
+ .nav-floating {
+ background: #fff !important;
+ }
+
+ .el-dialog__headerbtn {
+ right: auto !important;
+ left: 20px !important;
+ }
+
+ .el-radio__label {
+ padding-right: 10px !important;
+ }
+
+ .el-scrollbar__wrap {
+ margin-right: 0 !important;
+ margin-left: -17px !important;
+ }
+}
diff --git a/sass/admin/_variables.scss b/sass/admin/_variables.scss
new file mode 100644
index 0000000..286831d
--- /dev/null
+++ b/sass/admin/_variables.scss
@@ -0,0 +1,2 @@
+// Variable overrides
+$gray-base: #1a1e24;
diff --git a/sass/admin/style.scss b/sass/admin/style.scss
new file mode 100644
index 0000000..2bd34cb
--- /dev/null
+++ b/sass/admin/style.scss
@@ -0,0 +1,18 @@
+// If you want to override variables do it here
+@import 'variables';
+
+// Import styles
+@import '~@coreui/coreui/scss/coreui';
+
+// If you want to add something do it here
+@import 'custom';
+@import 'el_ui_rtl';
+
+.card-header:not(.content-center) > .c-icon:first-child {
+ margin-right: 0.1rem;
+ margin-top: 0.1rem;
+ vertical-align: top;
+ width: 1.2rem;
+ height: 1.2rem;
+ font-size: 1.2rem;
+}
diff --git a/sass/app/CKEditorStyle.scss b/sass/app/CKEditorStyle.scss
new file mode 100644
index 0000000..326e4ca
--- /dev/null
+++ b/sass/app/CKEditorStyle.scss
@@ -0,0 +1,118 @@
+.ck-content {
+ width: 100%;
+ direction: rtl;
+ text-align: right;
+
+ &:lang(en) {
+ direction: ltr;
+ text-align: left;
+ }
+
+ a {
+ display: inline-block;
+ color: blue;
+ }
+
+ p,
+ a,
+ span,
+ b,
+ ul,
+ li,
+ em,
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6,
+ strong {
+ font-family: inherit, sans-serif;
+ direction: unset;
+ text-align: unset;
+
+ &:lang(en) {
+ font-family: inherit;
+ direction: unset;
+ text-align: unset;
+ }
+
+ &[dir='ltr'] {
+ direction: ltr;
+ text-align: left;
+
+ p,
+ a,
+ span,
+ b,
+ ul,
+ li,
+ em,
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6,
+ strong {
+ direction: ltr;
+ text-align: left;
+ }
+ }
+
+ &[dir='rtl'] {
+ direction: rtl;
+ text-align: right;
+
+ p,
+ a,
+ span,
+ b,
+ ul,
+ li,
+ em,
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6,
+ strong {
+ direction: rtl;
+ text-align: right;
+ }
+ }
+ }
+
+ p {
+ line-height: 1.6em;
+ }
+
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6 {
+ line-height: 1.3em;
+ }
+
+ li {
+ margin-bottom: 15px;
+ line-height: 1.6em;
+ }
+
+ ol {
+ list-style: decimal;
+ list-style-position: inside;
+ }
+
+ ul {
+ list-style: disc;
+ list-style-position: inside;
+ }
+
+ img {
+ max-width: 100% !important;
+ }
+}
diff --git a/sass/app/el-ui-custom.scss b/sass/app/el-ui-custom.scss
new file mode 100644
index 0000000..37c3432
--- /dev/null
+++ b/sass/app/el-ui-custom.scss
@@ -0,0 +1,190 @@
+.el-button--primary {
+ span {
+ color: #fff;
+ }
+}
+
+.el-pagination {
+ --height: 50px;
+
+ .btn-prev {
+ border-top-left-radius: 5px;
+ border-bottom-left-radius: 5px;
+ }
+
+ .btn-next {
+ border-top-right-radius: 5px;
+ border-bottom-right-radius: 5px;
+ }
+
+ button {
+ height: var(--height);
+ line-height: var(--height);
+ }
+
+ .el-pager {
+ li {
+ height: var(--height);
+ line-height: var(--height);
+ }
+ }
+}
+
+.el-message {
+ @media (max-width: 575px) {
+ min-width: calc(100% - 30px);
+ }
+}
+
+.el-message-box {
+ max-width: 420px;
+ width: calc(100% - 15px);
+
+ .el-button span {
+ color: #000;
+ }
+
+ .el-button.el-button--primary span {
+ color: #fff;
+ }
+}
+
+.el-select-dropdown {
+ .el-select-dropdown__item {
+ @media (max-width: 575px) {
+ max-width: 250px;
+ white-space: pre-wrap;
+ word-break: break-word;
+ margin-bottom: 15px;
+ height: auto;
+ line-height: 1em;
+
+ span {
+ display: block;
+ width: 100%;
+ font-size: 13px;
+ }
+ }
+ }
+}
+
+.el-popover {
+ font-family: 'iranYekanL', sans-serif;
+ direction: ltr;
+ text-align: right;
+
+ .el-popover__title {
+ font-family: 'iranYekanB', sans-serif;
+ }
+}
+
+.el-loading-text {
+ text-align: center;
+}
+
+.el-dialog {
+ @extend %defaultBorderRadius;
+
+ @media (max-width: 1400px) {
+ width: 80%;
+ }
+ @media (max-width: 992px) {
+ width: 90%;
+ }
+
+ @media (max-width: 768px) {
+ width: calc(100% - 15px);
+ }
+
+ @media (max-width: 575px) {
+ .el-dialog__body {
+ padding: 10px;
+ }
+ }
+
+ .dialog-footer {
+ .el-button--primary {
+ span {
+ color: #fff;
+ }
+ }
+ }
+}
+
+.el-select-group__title {
+ padding-left: 0;
+ padding-right: 20px;
+ color: rgba(#000, 0.3);
+}
+
+.custom-el-button {
+ direction: ltr;
+ display: inline-flex;
+ justify-content: center;
+ align-items: center;
+
+ span {
+ color: #fff;
+ }
+}
+
+.no-address-added {
+ a {
+ color: $theme;
+ font-weight: bold;
+ }
+}
+
+.select-form-address {
+ .form_3 {
+ display: flex;
+ flex-wrap: wrap;
+
+ .formRow {
+ flex-basis: 33.33%;
+ }
+
+ .title {
+ flex-basis: 100%;
+ margin-bottom: 30px;
+
+ p {
+ color: #000;
+ font-weight: bold;
+ font-family: 'iranYekanB';
+ font-size: 20px;
+ }
+ }
+
+ hr {
+ flex-basis: 100%;
+ margin-bottom: 30px;
+ }
+
+ .btnRow {
+ button {
+ span {
+ color: #fff;
+ }
+ }
+ }
+ }
+
+ .buttons {
+ text-align: center;
+ margin-top: 50px;
+
+ button {
+ span {
+ color: #fff;
+ }
+ }
+ }
+}
+
+.agentsStatus-popover-insideBtn {
+ span {
+ color: $theme;
+ font-family: 'iranYekanB';
+ }
+}
diff --git a/sass/app/el_ui_rtl.scss b/sass/app/el_ui_rtl.scss
new file mode 100644
index 0000000..6e51a92
--- /dev/null
+++ b/sass/app/el_ui_rtl.scss
@@ -0,0 +1,211 @@
+//////////////////////////////////////////////////////////////////////////////////////////////////////// element ui rtl fix
+html:lang(fa) {
+ .el-tag {
+ /*margin-bottom: 10px!important;*/
+ }
+
+ .text-area {
+ textarea {
+ height: 100px;
+ }
+ }
+
+ .el-popup-parent--hidden {
+ padding-right: 0 !important;
+ }
+
+ .el-tag .el-icon-close {
+ right: auto !important;
+ left: -5px !important;
+ }
+
+ .el-table .el-table__body-wrapper .el-table__row .is-left {
+ text-align: left !important;
+ }
+
+ .wrapper {
+ min-height: 100vh;
+ }
+
+ .el-form-item__label {
+ float: right !important;
+ text-align: right !important;
+ }
+
+ .el-form-item__content {
+ margin-left: 0 !important;
+ margin-right: 120px !important;
+ }
+
+ @media (max-width: 768px) {
+ .el-form-item__content {
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+ }
+ }
+
+ .secondTitle {
+ margin-top: 50px;
+ }
+
+ .el-upload__input {
+ display: none !important;
+ }
+
+ .el-message-box__title,
+ .el-message-box__message {
+ direction: rtl !important;
+ text-align: right !important;
+ }
+
+ .el-message-box__message {
+ padding-left: 12px !important;
+ padding-right: 36px !important;
+ }
+
+ .el-message-box__btns {
+ text-align: left !important;
+ }
+
+ .el-message-box__headerbtn {
+ right: auto !important;
+ left: 15px !important;
+ }
+
+ .el-message-box__btns button:nth-child(2) {
+ margin-left: 0 !important;
+ margin-right: 10px !important;
+ }
+
+ .el-message-box__status {
+ right: 0 !important;
+ }
+
+ .el-table {
+ td,
+ th {
+ text-align: right !important;
+ }
+ .is-center {
+ text-align: center !important;
+ }
+ }
+
+ .el-upload__input {
+ display: none !important;
+ }
+
+ .el-checkbox__label {
+ padding-left: 0 !important;
+ padding-right: 10px !important;
+ }
+
+ .el-message__icon {
+ margin-right: 0 !important;
+ margin-left: 10px !important;
+ }
+
+ .sidebar-subnav {
+ background: rgba(0, 0, 0, 0.05) !important;
+ }
+
+ .sidebar > .nav > li {
+ border-bottom: 1px solid #eee !important;
+ }
+
+ .brand-logo p {
+ margin-top: 6px !important;
+ }
+
+ .brand-logo-collapsed svg {
+ fill: #fff !important;
+ }
+
+ .nav-floating {
+ background: #fff !important;
+ }
+
+ .el-dialog__headerbtn {
+ right: auto !important;
+ left: 20px !important;
+ }
+
+ .el-radio__label {
+ padding-right: 10px !important;
+ }
+
+ .el-scrollbar__wrap {
+ margin-right: 0 !important;
+ margin-left: -17px !important;
+ }
+
+ .el-alert.is-light .el-alert__closebtn {
+ right: auto !important;
+ left: 15px !important;
+ }
+
+ .el-tooltip__popper[x-placement^='top'] .popper__arrow::after {
+ margin-left: 0 !important;
+ margin-right: -5px !important;
+ }
+
+ .el-notification {
+ padding-right: 13px;
+ padding-left: 26px;
+
+ .el-notification__group {
+ margin-right: 13px;
+ margin-left: 8px;
+
+ .el-notification__closeBtn {
+ right: auto;
+ left: 15px;
+ }
+ }
+ }
+
+ .el-collapse {
+ direction: rtl;
+
+ .el-collapse-item {
+ .el-collapse-item__header {
+ direction: rtl;
+
+ .header-icon {
+ margin-right: 5px;
+ }
+
+ .el-collapse-item__arrow {
+ margin-right: auto;
+ margin-left: 0;
+ @include transform(rotate(180deg));
+
+ &.is-active {
+ @include transform(rotate(90deg));
+ }
+ }
+ }
+ }
+ }
+
+ .el-upload-list {
+ .el-upload-list__item {
+ margin-right: 0;
+ margin-left: 8px;
+
+ .el-upload-list__item-actions {
+ i {
+ color: #fff;
+ }
+ .el-upload-list__item-delete {
+ margin-left: 0;
+ margin-right: 15px;
+ }
+ }
+ }
+ }
+
+ .el-radio-group{
+ direction: ltr;
+ }
+}
diff --git a/sass/app/extentions.scss b/sass/app/extentions.scss
new file mode 100644
index 0000000..76735df
--- /dev/null
+++ b/sass/app/extentions.scss
@@ -0,0 +1,24 @@
+%defaultTransition {
+ @include transition(0.3s);
+}
+
+%userSelect {
+ user-select: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+}
+
+%appearance {
+ appearance: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+}
+
+%defaultBoxShadow {
+ @include boxShadow(0 5px 8px rgba(0, 0, 0, 0.2));
+}
+
+%defaultBorderRadius {
+ @include borderRadius(15px);
+}
diff --git a/sass/app/fonts.scss b/sass/app/fonts.scss
new file mode 100644
index 0000000..9f87cb4
--- /dev/null
+++ b/sass/app/fonts.scss
@@ -0,0 +1,24 @@
+////// sahel
+@font-face {
+ font-family: 'iranYekanB';
+ src: url('/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.eot') format('embedded-opentype'),
+ url('/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.ttf') format('truetype'),
+ url('/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff') format('woff'),
+ url('/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff2') format('woff2');
+}
+
+@font-face {
+ font-family: 'iranYekanL';
+ src: url('/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.eot') format('embedded-opentype'),
+ url('/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.ttf') format('truetype'),
+ url('/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff') format('woff'),
+ url('/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff2') format('woff2');
+}
+
+@font-face {
+ font-family: 'iranYekanR';
+ src: url('/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.eot') format('embedded-opentype'),
+ url('/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.ttf') format('truetype'),
+ url('/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff') format('woff'),
+ url('/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff2') format('woff2');
+}
diff --git a/sass/app/global.scss b/sass/app/global.scss
new file mode 100644
index 0000000..8807396
--- /dev/null
+++ b/sass/app/global.scss
@@ -0,0 +1,156 @@
+html {
+ scroll-behavior: smooth;
+}
+
+body {
+ direction: rtl;
+ background: $bg;
+
+ &:lang(en) {
+ direction: ltr;
+ }
+}
+
+p,
+span,
+b {
+ font-family: 'iranYekanL', sans-serif;
+ color: $txtColor;
+ line-height: 1.6em;
+}
+
+form,
+input,
+textarea,
+select,
+option,
+button,
+table,
+tr,
+td,
+th,
+ul,
+ol,
+li {
+ outline: none;
+ font-family: 'iranYekanR', sans-serif;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-family: 'iranYekanB', sans-serif;
+ line-height: 1.3em;
+}
+
+a {
+ font-family: 'iranYekanR', sans-serif;
+ text-decoration: none;
+ color: $txtColor;
+ line-height: 1.6em;
+
+ &:hover {
+ text-decoration: none;
+ color: rgba(0, 0, 0, 0.7);
+ }
+}
+
+.default {
+ p {
+ text-align: justify;
+ }
+}
+
+pre {
+ direction: ltr !important;
+ text-align: left;
+ padding: 25px;
+ background: #000;
+ color: greenyellow;
+ font-size: 18px;
+}
+
+section {
+ padding: 0 0 100px;
+}
+
+@keyframes loading {
+ 0% {
+ @include transform(rotateZ(0));
+ }
+
+ 100% {
+ @include transform(rotateZ(360deg));
+ }
+}
+
+/////// global classes
+.page {
+ min-height: 100vh;
+ padding-top: 50px;
+ overflow: hidden;
+
+ .no-post {
+ text-align: center;
+
+ h2 {
+ padding: 15px;
+ background: orangered;
+ color: #fff;
+ @include borderRadius(15px);
+ margin-top: 50px;
+ }
+ }
+}
+
+.overflow-hidden {
+ overflow-x: hidden;
+}
+
+.singleLineTxt {
+ overflow: hidden !important;
+ display: -webkit-box !important;
+ -webkit-line-clamp: 1 !important;
+ -webkit-box-orient: vertical !important;
+}
+
+.notificationAnim {
+ @keyframes ring {
+ from {
+ @include transform(rotateZ(20deg));
+ }
+ to {
+ @include transform(rotateZ(-20deg));
+ }
+ }
+
+ display: inline-block;
+ animation: ring 0.5s alternate-reverse infinite;
+}
+
+.vpd-wrapper {
+ .vpd-selected {
+ .vpd-day-text {
+ color: #fff !important;
+ }
+ }
+
+ .vpd-date {
+ span {
+ color: #fff !important;
+ }
+ }
+}
+///////// animations
+.page-enter-active,
+.page-leave-active {
+ transition: opacity 0.5s;
+}
+
+.page-enter,
+.page-leave-to {
+ opacity: 0;
+}
diff --git a/sass/app/mixins.scss b/sass/app/mixins.scss
new file mode 100644
index 0000000..6740cd0
--- /dev/null
+++ b/sass/app/mixins.scss
@@ -0,0 +1,44 @@
+@mixin transform($p...) {
+ transform: $p;
+ -webkit-transform: $p;
+ -moz-transform: $p;
+ -ms-transform: $p;
+ -o-transform: $p;
+}
+
+@mixin transition($p...) {
+ transition: $p;
+ -webkit-transition: $p;
+ -moz-transition: $p;
+ -ms-transition: $p;
+ -o-transition: $p;
+}
+
+@mixin boxSizing($p) {
+ box-sizing: $p;
+ -webkit-box-sizing: $p;
+ -moz-box-sizing: $p;
+}
+
+@mixin filter($p...) {
+ filter: $p;
+ -ms-filter: $p;
+}
+
+@mixin boxShadow($p) {
+ box-shadow: $p;
+ -webkit-box-shadow: $p;
+ -moz-box-shadow: $p;
+}
+
+@mixin borderRadius($p) {
+ border-radius: $p;
+ -webkit-border-radius: $p;
+ -moz-border-radius: $p;
+}
+
+@mixin animation($p) {
+ animation: $p;
+ -webkit-animation: $p;
+ -o-animation: $p;
+}
diff --git a/sass/app/printStyles.scss b/sass/app/printStyles.scss
new file mode 100644
index 0000000..16d782b
--- /dev/null
+++ b/sass/app/printStyles.scss
@@ -0,0 +1,271 @@
+body {
+ -webkit-print-color-adjust: exact !important;
+}
+
+@page {
+ size: landscape !important;
+}
+
+#box-face-receipt {
+ padding: 20px;
+
+ .receipt-body {
+ border: 1px solid rgba(#000, 1);
+ padding: 15px;
+
+ .infoRow {
+ margin-bottom: 15px;
+ }
+
+ .topLeft {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ background: rgba(0, 0, 0, 0.05);
+ padding: 10px;
+ flex-basis: 300px;
+
+ @media (max-width: 992px) {
+ flex-basis: 100%;
+ }
+
+ &:first-child {
+ margin-bottom: 5px;
+ }
+ }
+
+ h2 {
+ margin-bottom: 20px;
+ }
+
+ b,
+ span {
+ display: inline-block;
+ }
+
+ b {
+ margin-left: 5px;
+ }
+
+ .senderInfo {
+ .topLeft {
+ &:last-child {
+ @media (max-width: 992px) {
+ margin-bottom: 20px;
+ }
+ }
+ }
+ }
+
+ .receiverInfo {
+ .topLeft {
+ flex-direction: column;
+ background: transparent;
+ justify-content: center;
+ align-items: center;
+
+ @media (max-width: 992px) {
+ justify-content: center;
+ margin-bottom: 20px;
+ }
+
+ svg {
+ width: 200px;
+ margin: 0;
+
+ path,
+ rect {
+ fill: #000;
+ }
+ }
+
+ img {
+ width: 200px;
+ }
+
+ &.ar {
+ justify-content: flex-end;
+
+ @media print {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+
+ img {
+ width: 100px;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+#box-inner-receipt {
+ padding: 20px;
+
+ .receipt-body {
+ border: 1px solid rgba(#000, 1);
+ padding: 15px;
+
+ .topBar {
+ margin-bottom: 30px;
+
+ svg {
+ width: 200px;
+
+ path,
+ rect {
+ fill: #000;
+ }
+ }
+ }
+
+ .topLeft {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ background: rgba(0, 0, 0, 0.05);
+ padding: 10px;
+ flex-basis: 300px;
+
+ &:first-child {
+ margin-left: 5px;
+ }
+ }
+
+ .stuff-list {
+ margin-bottom: 30px !important;
+
+ @media print {
+ .notice {
+ display: none;
+ }
+ }
+
+ table {
+ width: 100% !important;
+
+ thead {
+ tr {
+ background: rgba(0, 0, 0, 0.7) !important;
+ color: #fff !important;
+ }
+ }
+
+ tr {
+ background-color: #e0e6ed !important;
+
+ &.odd {
+ background-color: #8a92a9 !important;
+ }
+
+ td,
+ th {
+ padding: 10px !important;
+ text-align: center !important;
+ }
+ }
+ }
+ }
+ }
+}
+
+#factor-layout {
+ border: 1px dashed #000;
+ padding: 10px;
+
+ span,
+ p {
+ font-family: 'iranYekanR', sans-serif;
+ color: #000;
+ }
+
+ .pageHeader {
+ margin-bottom: 10px;
+
+ .row1 {
+ h2 {
+ text-align: center;
+ font-family: 'iranYekanB';
+ font-weight: bold;
+ }
+ }
+
+ .row2 {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-end;
+
+ @media (max-width: 992px) {
+ align-items: flex-start;
+ margin-top: 20px;
+ }
+
+ p {
+ width: 200px;
+ text-align: right;
+ }
+ }
+ }
+
+ .factor {
+ width: 100%;
+ border: 1px solid #000;
+
+ .factorInfo {
+ display: flex;
+ flex-direction: column;
+ padding: 10px;
+
+ p {
+ text-align: right;
+ padding: 10px 0;
+ color: #000;
+ }
+
+ .row1 {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ justify-content: center;
+
+ p {
+ flex-basis: 33.33%;
+
+ @media (max-width: 992px) {
+ flex-basis: 100%;
+ }
+ }
+ }
+ }
+
+ table {
+ width: 100%;
+
+ thead {
+ tr {
+ th {
+ background: rgba(#000, 0.1);
+ text-align: center;
+ border: 1px solid #000;
+ padding: 5px;
+ }
+ }
+ }
+
+ tbody {
+ tr {
+ td,
+ th {
+ text-align: center;
+ border: 1px solid #000;
+ padding: 5px;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/sass/app/variables.scss b/sass/app/variables.scss
new file mode 100644
index 0000000..9aeb0c7
--- /dev/null
+++ b/sass/app/variables.scss
@@ -0,0 +1,16 @@
+// colors
+$theme: #065495;
+$theme_darker: #004279;
+$bg: #e0e6ed;
+$darkGray: #414344;
+$green: green;
+$red: red;
+$txtColor: #707070;
+
+$tableHead: rgba(#000, 0.7);
+$tableBody: rgba(#e0e6ed, 0.8);
+$tableBodyHover: rgba($theme, 0.3);
+$tableStrip: rgba(#8a92a9, 0.3);
+
+// units
+$mt: 30px;
diff --git a/sass/components/btn.scss b/sass/components/btn.scss
new file mode 100644
index 0000000..760997b
--- /dev/null
+++ b/sass/components/btn.scss
@@ -0,0 +1,67 @@
+.btn {
+ @extend %appearance;
+ display: inline-block;
+ border: 1px solid transparent;
+ padding: 10px 30px;
+ @include borderRadius(5px);
+ @extend %defaultTransition;
+ cursor: pointer;
+
+ span {
+ font-family: 'iranYekanR';
+ }
+
+ &.btn-primary {
+ border-color: $theme;
+ background-color: $theme;
+ color: #fff;
+
+ &:hover {
+ background-color: $theme_darker;
+ border-color: $theme_darker;
+ }
+
+ &:disabled {
+ border-color: gray;
+ background-color: gray;
+ cursor: not-allowed;
+ }
+
+ span {
+ color: #fff;
+ }
+ }
+
+ &.btn-secondary {
+ padding: 10px 50px;
+ @include borderRadius(25px);
+ background: #fff;
+
+ &.secondary-reverse {
+ background: $theme;
+ color: #fff;
+ }
+
+ &:disabled {
+ border-color: gray;
+ background-color: gray;
+ cursor: not-allowed;
+ }
+ }
+
+ &.btn-danger {
+ border-color: $red;
+ background-color: $red;
+ color: #fff;
+
+ &:hover {
+ background-color: $red;
+ border-color: $red;
+ }
+
+ &:disabled {
+ border-color: gray;
+ background-color: gray;
+ }
+ }
+}
diff --git a/sass/components/footer.scss b/sass/components/footer.scss
new file mode 100644
index 0000000..82050bb
--- /dev/null
+++ b/sass/components/footer.scss
@@ -0,0 +1,324 @@
+.site--footer {
+ padding-top: 20px;
+ background: #fff;
+
+ section {
+ padding-top: 20px;
+ padding-bottom: 20px;
+ }
+
+ .apps {
+ .btns {
+ text-align: center;
+ button {
+ margin: 0 10px;
+ border: none;
+ background: transparent;
+ cursor: pointer;
+ height: 80px;
+
+ img {
+ height: 100%;
+ }
+ }
+ }
+ }
+
+ .r1 {
+ a {
+ b {
+ display: inline-block !important;
+ direction: ltr !important;
+ color: rgba(#000, 0.5);
+ @extend %defaultTransition;
+ }
+
+ &:hover {
+ b {
+ color: $theme;
+ }
+ }
+ }
+ i {
+ margin-left: 10px;
+ margin-right: 10px;
+ }
+ }
+
+ .r2 {
+ ul {
+ display: flex;
+ justify-content: space-between;
+
+ @media (max-width: 575px) {
+ flex-wrap: wrap;
+
+ li {
+ flex-basis: 50%;
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+ margin-bottom: 30px !important;
+
+ img {
+ width: 90% !important;
+ max-width: 90px;
+ }
+ }
+ }
+
+ li {
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ flex-direction: column;
+ text-align: center;
+ margin: 0 15px;
+
+ img {
+ display: block;
+ width: 60px;
+
+ @media (max-width: 768px) {
+ width: 40px;
+ }
+ }
+ p {
+ margin-top: 10px;
+ font-family: 'iranYekanB';
+ font-size: 14px;
+ color: rgba(#000, 0.6);
+
+ @media (max-width: 768px) {
+ font-size: 12px;
+ }
+ }
+ }
+ }
+ }
+
+ .r3 {
+ h3 {
+ margin-bottom: 20px;
+
+ @media (min-width: 575px) and (max-width: 768px) {
+ font-size: 16px;
+ }
+ }
+
+ ul {
+ li {
+ margin-bottom: 10px;
+
+ a {
+ padding: 10px 0;
+ @extend %defaultTransition;
+ @media (min-width: 575px) and (max-width: 768px) {
+ font-size: 14px;
+ }
+
+ &:hover {
+ color: $theme;
+ }
+ }
+ }
+ }
+
+ .r3-3 {
+ ul {
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+
+ li {
+ display: block;
+ margin-left: 30px;
+
+ img {
+ width: 25px;
+ }
+ }
+ }
+
+ .newsletter {
+ margin-top: 30px;
+
+ .inputBox {
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+
+ input {
+ border: none;
+ background: #f5f5f5;
+ @include borderRadius(5px);
+ padding: 10px;
+ flex-grow: 1;
+ margin-bottom: 5px;
+
+ @media (min-width: 575px) and (max-width: 768px) {
+ width: 50%;
+ font-size: 10px;
+ padding: 11px 10px;
+
+ &::placeholder {
+ font-size: 10px;
+ }
+ }
+ }
+
+ button {
+ cursor: pointer;
+ border: none;
+ margin-right: 4px;
+ background: $theme;
+ @include borderRadius(5px);
+ padding: 9px;
+ color: #fff;
+ margin-bottom: 5px;
+
+ @media (min-width: 575px) and (max-width: 768px) {
+ font-size: 12px;
+ }
+
+ &:disabled {
+ background: #8a92a9;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .r4 {
+ .bg {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ @include borderRadius(10px);
+ background: $theme;
+ }
+
+ .logo {
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+
+ @media (max-width: 768px) {
+ margin-bottom: 20px;
+ justify-content: center;
+ }
+
+ a {
+ display: inline-block;
+ overflow: hidden;
+ height: 52px;
+
+ svg {
+ width: 200px;
+
+ @media (max-width: 270px) {
+ max-width: 200px;
+ width: 100%;
+ }
+
+ * {
+ fill: #fff;
+ }
+ }
+ }
+ }
+
+ .companies {
+ ul {
+ height: 100%;
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+
+ @media (max-width: 768px) {
+ justify-content: space-around;
+ }
+
+ li {
+ display: block;
+ margin-right: 10px;
+
+ img {
+ width: 52px;
+
+ @media (max-width: 768px) {
+ width: 50px;
+ }
+
+ @media (max-width: 400px) {
+ width: 40px;
+ }
+
+ @media (max-width: 270px) {
+ width: 30px;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .r5 {
+ h3 {
+ margin-bottom: 20px;
+ }
+
+ p {
+ @media (max-width: 1200px) {
+ text-align: justify;
+ }
+ }
+
+ .btns {
+ margin-top: 10px;
+
+ a {
+ display: inline-flex;
+ justify-content: flex-start;
+ align-items: center;
+
+ &:hover {
+ span {
+ color: $theme;
+ }
+ i {
+ color: $theme;
+ margin-right: 8px;
+ }
+ }
+
+ span {
+ color: rgba(#000, 0.6);
+ font-family: 'iranYekanB';
+ @extend %defaultTransition;
+ }
+
+ i {
+ color: rgba(#000, 0.6);
+ margin-right: 4px;
+ @extend %defaultTransition;
+ }
+ }
+ }
+ }
+
+ .r6 {
+ background: #f5f5f5;
+ text-align: center;
+ padding: 8px 0;
+
+ a {
+ display: inline-block;
+ font-size: 14px;
+ direction: ltr !important;
+
+ @media (max-width: 500px) {
+ font-size: 12px;
+ }
+ }
+ }
+}
diff --git a/sass/components/form.scss b/sass/components/form.scss
new file mode 100644
index 0000000..8bf4ecb
--- /dev/null
+++ b/sass/components/form.scss
@@ -0,0 +1,447 @@
+.form {
+ .formRow {
+ width: 100%;
+ display: block;
+ margin-bottom: 20px;
+
+ &.center-align {
+ flex-basis: 100%;
+ text-align: center;
+ }
+
+ &.err {
+ input,
+ textarea,
+ select {
+ @include boxShadow(0 0 5px rgba(red, 0.3));
+ border: 2px solid rgba(red, 0.2);
+
+ &::placeholder {
+ color: red;
+ }
+ }
+
+ p {
+ color: red;
+ padding-right: 1%;
+ }
+ }
+ }
+
+ .btnRow {
+ text-align: center;
+
+ button {
+ @extend %appearance;
+ @extend %defaultTransition;
+ margin-top: 20px;
+ }
+ }
+
+ .msgBox {
+ margin: 20px 0;
+
+ .inner {
+ background: gray;
+ @include borderRadius(15px);
+ width: 95%;
+ padding: 20px;
+ margin: 0 auto;
+
+ &.success {
+ background: $green;
+ }
+
+ &.success-link {
+ background: $theme;
+ @extend %defaultTransition;
+ cursor: pointer;
+
+ &:hover {
+ opacity: 0.8;
+ }
+ }
+
+ &.error {
+ background: $red;
+ }
+ }
+
+ p,
+ a {
+ display: block;
+ color: #fff;
+ text-align: center;
+ font-size: 14px;
+ }
+ }
+
+ &.form_1 {
+ width: 100%;
+ background: #fff;
+ @include borderRadius(15px);
+ padding: 40px 20px;
+
+ .formRow {
+ select {
+ @extend %appearance;
+ @extend %defaultTransition;
+ border: 2px solid transparent;
+ border-bottom: 2px solid rgba(0, 0, 0, 0.1);
+ outline: none;
+ padding: 10px 10px 10px 30px;
+ position: relative;
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512' fill='rgba(0,0,0,0.4)'%3E%3Cpath d='M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z'/%3E%3C/svg%3E");
+ background-size: 10px;
+ -webkit-background-size: 10px;
+ background-repeat: no-repeat;
+ background-position: 0 50%;
+ cursor: pointer;
+ color: rgba(#000, 0.5);
+
+ option {
+ padding: 10px;
+
+ &:disabled {
+ color: rgba(#000, 0.4);
+ }
+ }
+ }
+
+ input,
+ textarea {
+ @extend %appearance;
+ @extend %defaultTransition;
+ width: 95%;
+ display: block;
+ margin: 0 auto;
+ border: 2px solid transparent;
+ border-bottom: 2px solid rgba(0, 0, 0, 0.1);
+ outline: none;
+ padding: 10px;
+ background: transparent;
+
+ &:focus {
+ @include boxShadow(0 0 3px rgba($theme, 0.2));
+ border: 2px solid rgba($theme, 0.1);
+ }
+
+ &::placeholder {
+ color: rgba(#000, 1);
+ }
+ }
+
+ textarea {
+ max-width: 95%;
+ min-width: 95%;
+ }
+ }
+ }
+
+ &.form_2 {
+ width: 100%;
+ background: #fff;
+ padding: 40px 20px;
+
+ @media (max-width: 575px) {
+ padding: 40px 0;
+ }
+
+ .title {
+ padding-right: 15px;
+ }
+
+ .formRow {
+ width: 100%;
+ display: block;
+ margin-bottom: 20px;
+
+ select {
+ @extend %appearance;
+ @extend %defaultTransition;
+ border: 2px solid transparent;
+ border-bottom: 2px solid rgba(0, 0, 0, 0.1);
+ outline: none;
+ padding: 10px 10px 10px 30px;
+ position: relative;
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512' fill='rgba(0,0,0,0.4)'%3E%3Cpath d='M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z'/%3E%3C/svg%3E");
+ background-size: 10px;
+ -webkit-background-size: 10px;
+ background-repeat: no-repeat;
+ background-position: 0 50%;
+ cursor: pointer;
+ color: rgba(#000, 0.5);
+
+ option {
+ padding: 10px;
+
+ &:disabled {
+ color: rgba(#000, 0.4);
+ }
+ }
+ }
+
+ input,
+ textarea {
+ @extend %appearance;
+ @extend %defaultTransition;
+ width: 95%;
+ display: block;
+ margin: 0 auto;
+ border: 1px solid transparent;
+ outline: none;
+ padding: 10px;
+ background: rgba(0, 0, 0, 0.05);
+ @include borderRadius(25px);
+ @include boxSizing(border-box);
+
+ &:focus {
+ @include boxShadow(0 0 3px rgba($theme, 0.2));
+ border: 1px solid rgba($theme, 0.1);
+ }
+
+ &::placeholder {
+ color: rgba(#000, 0.5);
+ }
+
+ &[type='checkbox'] {
+ display: inline-block;
+ width: 15px;
+ height: 15px;
+ padding: 0 !important;
+ margin: 0 !important;
+ @include borderRadius(0);
+ @include transform(translateY(3px));
+ border: 1px solid transparent;
+
+ &:checked {
+ background: $theme;
+ border: 1px solid #000;
+ }
+ }
+ }
+
+ label {
+ display: block;
+ margin-bottom: 8px;
+ }
+
+ label {
+ cursor: pointer;
+ padding-right: 2.5%;
+ }
+ }
+ }
+
+ &.form_3 {
+ width: 100%;
+ background: #fff;
+ padding: 40px 20px;
+ border: 1px solid rgba(#000, 0.2);
+
+ .formRow {
+ &:last-child {
+ margin-bottom: 0;
+ }
+ select {
+ width: 100%;
+ display: block;
+ margin: 0 auto;
+ @extend %appearance;
+ @extend %defaultTransition;
+ border: 1px solid transparent;
+ outline: none;
+ padding: 10px 10px 10px 30px;
+ position: relative;
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512' fill='rgba(0,0,0,0.4)'%3E%3Cpath d='M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z'/%3E%3C/svg%3E");
+ background-size: 10px;
+ -webkit-background-size: 10px;
+ background-repeat: no-repeat;
+ background-position: 5px 50%;
+ background-color: #e0e6ed;
+ cursor: pointer;
+ color: rgba(#000, 0.5);
+
+ option {
+ padding: 10px;
+
+ &:disabled {
+ color: rgba(#000, 0.4);
+ }
+ }
+ }
+
+ input,
+ textarea {
+ @extend %appearance;
+ @extend %defaultTransition;
+ width: 100%;
+ display: block;
+ margin: 0 auto;
+ border: 1px solid transparent;
+ outline: none;
+ padding: 10px;
+ background-color: #e0e6ed;
+ @include boxSizing(border-box);
+
+ &:focus {
+ @include boxShadow(0 0 3px rgba($theme, 0.2));
+ border: 1px solid rgba($theme, 0.1);
+ }
+
+ &::placeholder {
+ color: rgba(#000, 0.5);
+ }
+
+ &[type='checkbox'] {
+ display: inline-block;
+ width: 15px;
+ height: 15px;
+ padding: 0 !important;
+ margin: 0 !important;
+ @include transform(translateY(3px));
+ border: 1px solid transparent;
+
+ &:checked {
+ background: $theme;
+ border: 1px solid #000;
+ }
+ }
+ }
+
+ textarea {
+ max-width: 100%;
+ min-width: 100%;
+ }
+
+ label {
+ display: block;
+ margin-bottom: 8px;
+ }
+
+ label {
+ cursor: pointer;
+ }
+ }
+ }
+
+ &.form_4 {
+ display: flex;
+ flex-wrap: wrap;
+ .formRow {
+ border-top: 1px solid #000;
+ border-bottom: 1px solid #000;
+ padding: 5px 10px;
+ margin-bottom: 0;
+ flex-basis: 50%;
+ flex-wrap: wrap;
+
+ @media (max-width: 768px) {
+ flex-basis: 100%;
+ }
+
+ &:nth-child(odd) {
+ border-left: 1px solid #000;
+
+ @media (max-width: 768px) {
+ border-left: none;
+ }
+ }
+
+ &.full {
+ flex-basis: 100%;
+ border-left: none;
+ }
+
+ &.textarea {
+ label {
+ flex-wrap: wrap;
+ span {
+ flex-basis: 100%;
+ }
+
+ textarea {
+ display: block;
+ flex-basis: 100%;
+ border: none;
+ background: transparent;
+ }
+ }
+ }
+
+ &.selectable {
+ display: flex;
+
+ span {
+ display: block;
+ font-weight: bold;
+ color: #000;
+ flex-grow: 0;
+ }
+
+ .options {
+ flex-grow: 1;
+ display: flex;
+ flex-wrap: wrap;
+ padding-right: 10px;
+
+ label {
+ flex-direction: row-reverse;
+ align-items: center;
+ margin-left: 20px;
+ direction: rtl;
+ cursor: pointer;
+
+ input {
+ margin-left: 5px;
+ }
+ }
+ }
+ }
+
+ label {
+ display: flex;
+
+ span {
+ display: block;
+ font-weight: bold;
+ color: #000;
+ flex-grow: 0;
+ }
+
+ input {
+ display: block;
+ flex-grow: 1;
+ padding-right: 10px;
+ border: none;
+ background-color: transparent;
+
+ &:disabled {
+ color: green;
+ font-weight: bold;
+ cursor: not-allowed;
+ }
+ }
+ }
+
+ &.err {
+ input {
+ @include boxShadow(none);
+ border-bottom: 1px solid rgba(red, 0.2);
+ }
+
+ label {
+ span {
+ color: red;
+ }
+ }
+
+ p {
+ font-size: 12px;
+ flex-basis: 100%;
+ text-align: center;
+ }
+ }
+ }
+ }
+}
diff --git a/sass/components/header.scss b/sass/components/header.scss
new file mode 100644
index 0000000..31499e1
--- /dev/null
+++ b/sass/components/header.scss
@@ -0,0 +1,146 @@
+.site--header {
+ background: $theme;
+ width: 100%;
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 10;
+
+ a {
+ color: #fff;
+ display: inline-block;
+ @extend %defaultTransition;
+
+ span {
+ color: #fff;
+ }
+ }
+
+ .logo {
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+
+ a {
+ display: block;
+ width: 100%;
+ max-width: 150px;
+
+ svg {
+ display: block;
+ width: 100%;
+ }
+ }
+ }
+
+ .links {
+ display: flex;
+ justify-content: center;
+
+ li {
+ margin: 0 10px;
+ border-bottom: 2px solid transparent;
+ @extend %defaultTransition;
+
+ a {
+ padding: 20px;
+
+ @media (max-width: 1420px) {
+ font-size: 14px;
+ padding: 21px 8px;
+ }
+
+ @media (max-width: 1120px) {
+ font-size: 14px;
+ padding: 21px 4px;
+ }
+ }
+
+ &.active {
+ border-bottom: 2px solid #fff;
+ }
+ }
+ }
+
+ .account {
+ // display: flex;
+ justify-content: flex-end;
+ align-items: center;
+
+ a {
+ padding: 20px 0;
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+
+ span {
+ margin-left: 5px;
+ }
+ }
+ }
+
+ .menu {
+ i {
+ display: inline-block;
+ padding: 20px 0;
+ font-size: 20px;
+ color: #fff;
+ cursor: pointer;
+ @extend %userSelect;
+ }
+ }
+
+ .dropDown-container {
+ position: relative;
+ cursor: pointer;
+
+ i {
+ display: inline-block;
+ @extend %defaultTransition;
+ }
+
+ &.d-active {
+ i {
+ @include transform(rotate(180deg));
+ }
+
+ .drop-down {
+ height: 113px;
+ border-top: 1px solid rgba(#fff, 0.1);
+ }
+
+ &.agents {
+ .drop-down {
+ height: 169px;
+ }
+ }
+ }
+
+ .drop-down {
+ position: absolute;
+ top: 65px;
+ right: -5px;
+ background: $theme;
+ min-width: 160px;
+ border-bottom-left-radius: 15px;
+ border-bottom-right-radius: 15px;
+ border-top: 1px solid transparent;
+ overflow: hidden;
+ height: 0;
+ @extend %defaultTransition;
+
+ a {
+ display: block;
+ padding: 15px 20px;
+
+ &:hover {
+ background: rgba(#fff, 0.05);
+ }
+
+ &.active {
+ background: rgba(#fff, 0.1);
+ }
+ }
+ }
+ }
+}
diff --git a/sass/components/hero.scss b/sass/components/hero.scss
new file mode 100644
index 0000000..631eb78
--- /dev/null
+++ b/sass/components/hero.scss
@@ -0,0 +1,29 @@
+.hero {
+ margin-bottom: 100px;
+
+ .bg {
+ width: 100%;
+ height: 60vh;
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ background-size: cover;
+ -webkit-background-size: cover;
+ background-repeat: no-repeat;
+
+ h2 {
+ color: #fff;
+ font-size: 48px;
+
+ @media (max-width: 992px) {
+ font-size: 38px;
+ }
+ @media (max-width: 768px) {
+ font-size: 28px;
+ }
+ @media (max-width: 575px) {
+ font-size: 24px;
+ }
+ }
+ }
+}
diff --git a/sass/components/lottery.scss b/sass/components/lottery.scss
new file mode 100644
index 0000000..6ad0ec6
--- /dev/null
+++ b/sass/components/lottery.scss
@@ -0,0 +1,77 @@
+.lottery {
+ .lottery-popup-button {
+ position: fixed;
+ z-index: 12;
+ cursor: pointer;
+ background-position: center;
+ background-size: 100% 100%;
+ @extend %defaultTransition;
+
+ &:hover {
+ @include transform(scale(1.1));
+ }
+ }
+
+ .lottery-popup {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 13;
+ width: 100vw;
+ height: 100vh;
+ overflow: hidden;
+ visibility: hidden;
+ opacity: 1;
+
+ .relativePos {
+ width: 100%;
+ height: 100%;
+ }
+
+ .bg {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 13;
+ background: rgba(#000, 0.5);
+ }
+
+ .content {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ z-index: 14;
+ max-width: calc(100% - 30px);
+ @include transform(translate(-50%, -50%) scale(0));
+ background-position: center;
+ background-size: cover;
+ background-repeat: no-repeat;
+ @include borderRadius(10px);
+ @include boxShadow(0 4px 8px rgba(#000, 0.5));
+
+ .closeBtn {
+ position: absolute;
+ top: 0;
+ right: 0;
+ font-size: 22px;
+ padding: 10px;
+ cursor: pointer;
+ color: rgba(#000, 0.4);
+ @extend %defaultTransition;
+
+ &:hover {
+ color: rgba(red, 0.4);
+ }
+ }
+
+ .btnBox {
+ position: absolute;
+ bottom: 20px;
+ left: 50%;
+ @include transform(translateX(-50%));
+ }
+ }
+ }
+}
diff --git a/sass/components/messenger.scss b/sass/components/messenger.scss
new file mode 100644
index 0000000..f283ec0
--- /dev/null
+++ b/sass/components/messenger.scss
@@ -0,0 +1,194 @@
+.messenger {
+ margin-top: 50px;
+
+ .messenger-title {
+ margin-bottom: 20px;
+ }
+
+ .messenger-body {
+ height: 100%;
+ $newMsg-height: 70px;
+ $min-height: 400px;
+ background-color: rgba(#e0e6ed, 0.75);
+ min-height: $min-height;
+ border-top-left-radius: 15px;
+ border-top-right-radius: 15px;
+ position: relative;
+ overflow: hidden;
+
+ .messages {
+ min-height: calc(#{$min-height} - #{$newMsg-height});
+ margin-bottom: $newMsg-height;
+ padding: 20px 10px;
+
+ &.no-msg {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ p {
+ color: #000;
+ }
+ }
+
+ .message {
+ width: 100%;
+ margin-bottom: 30px;
+ --avatar-width: 50px;
+
+ .txt {
+ width: 60%;
+ background: #fff;
+ @include borderRadius(15px);
+ padding: 15px;
+ padding-bottom: 35px;
+ margin-bottom: 10px;
+ position: relative;
+
+ @media (max-width: 768px) {
+ width: calc(100% - 60px);
+ }
+
+ img {
+ width: 100%;
+ margin-bottom: 15px;
+ }
+
+ p:not(.date) {
+ color: #000;
+ }
+
+ .date {
+ position: absolute;
+ bottom: 0;
+ font-size: 12px;
+ }
+ }
+
+ svg {
+ width: var(--avatar-width);
+ display: block;
+ }
+
+ &.user {
+ .txt {
+ margin-right: calc(var(--avatar-width) - 5px);
+
+ .date {
+ left: 5px;
+ }
+ }
+ }
+
+ &.asan-admin {
+ .txt {
+ margin-right: auto;
+ margin-left: calc(var(--avatar-width) - 5px);
+
+ .date {
+ right: 5px;
+ }
+ }
+
+ svg {
+ margin-right: auto;
+ }
+ }
+
+ &.unread {
+ .txt {
+ background: rgba(orange, 0.2);
+ }
+ }
+ }
+ }
+
+ .newMsg {
+ background-color: rgba(#8a92a9, 0.16);
+ width: 100%;
+ height: $newMsg-height;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+
+ .relativePos {
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ }
+
+ input[type='text'] {
+ border: none;
+ background-color: #fff;
+ padding: 20px;
+ padding-left: 150px;
+ width: calc(100% - 70px);
+ margin-right: 5px;
+ @include borderRadius(50px);
+ @include boxSizing(border-box);
+ }
+
+ input[type='file'] {
+ width: 0;
+ height: 0;
+ visibility: hidden;
+ }
+
+ label {
+ background-image: url("data:image/svg+xml,%3Csvg fill='rgba(6,84,149,0.5)' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 605.942 605.942' style='enable-background:new 0 0 605.942 605.942;' xml:space='preserve'%3E%3Cg%3E%3Cpath d='M435.099,0c-45.632,0-88.544,17.777-120.822,50.055L50.036,314.276c-66.603,66.622-66.603,175.018,0,241.64 c32.269,32.259,75.171,50.026,120.808,50.026s88.544-17.768,120.812-50.026l19.757-19.751l-12.321,0.588 c-0.062,0.005-0.728,0.033-1.889,0.033c-5.709,0-25.776-0.746-44.309-10.312l-2.815-1.454l-2.43,2.027 c-21.425,17.915-48.706,27.779-76.806,27.779c-32.034,0-62.118-12.432-84.714-35.009c-22.592-22.591-35.037-52.68-35.037-84.724 s12.445-62.127,35.037-84.724L350.37,86.149c22.592-22.591,52.685-35.037,84.729-35.037c32.04,0,62.128,12.446,84.724,35.037 c46.666,46.703,46.666,122.696,0.005,169.399L354.798,420.19c-8.291,8.306-19.771,12.881-32.331,12.881 c-13.641,0-26.847-5.394-36.242-14.808c-9.018-9.008-14.181-21.563-14.176-34.463c0-12.604,4.776-24.304,13.431-32.938 L432.541,204.36l-36.099-36.094L249.366,314.75c-18.479,18.479-28.539,43.284-28.334,69.84 c0.206,26.444,10.538,51.222,29.09,69.772c18.871,18.867,45.226,29.687,72.321,29.687c26.244,0,50.566-9.863,68.486-27.765 l164.986-164.628c66.589-66.631,66.589-175.018,0-241.601C523.643,17.777,480.731,0,435.099,0z'/%3E%3C/g%3E%3C/svg%3E%0A");
+ background-size: 100%;
+ -webkit-background-size: 100%;
+ background-repeat: no-repeat;
+ display: block;
+ width: 35px;
+ height: 35px;
+ cursor: pointer;
+ position: absolute;
+ top: 50%;
+ left: 10px;
+ @include transform(translateY(-50%));
+ }
+
+ img {
+ width: 50px;
+ height: 50px;
+ object-fit: cover;
+ @include borderRadius(50%);
+ @extend %defaultBoxShadow;
+ border: 2px solid $theme;
+ position: absolute;
+ top: 50%;
+ left: 5px;
+ @include transform(translateY(-50%));
+ }
+
+ #clearFile {
+ display: inline-block;
+ color: red;
+ font-size: 25px;
+ position: absolute;
+ top: 0;
+ left: 40px;
+ cursor: pointer;
+ }
+
+ button {
+ position: absolute;
+ top: 50%;
+ left: 80px;
+ @include transform(translateY(-50%));
+ @include borderRadius(25px);
+ }
+
+ .validationMsg {
+ position: absolute;
+ right: 15px;
+ bottom: 65px;
+
+ p {
+ color: red;
+ }
+ }
+ }
+ }
+}
diff --git a/sass/components/mobile-menu.scss b/sass/components/mobile-menu.scss
new file mode 100644
index 0000000..05e7bd7
--- /dev/null
+++ b/sass/components/mobile-menu.scss
@@ -0,0 +1,47 @@
+.mobile-menu {
+ display: none;
+
+ .body {
+ background: $theme;
+ padding: 20px 25px;
+ overflow: auto;
+ position: fixed;
+ top: 55px;
+ left: 0;
+ z-index: 15;
+ height: 100vh;
+ @include boxShadow(10px 10px 10px rgba(#000, 0.4));
+
+ ul {
+ margin-top: 20px;
+
+ li {
+ margin-bottom: 20px;
+
+ a {
+ color: #fff;
+ padding: 15px 0;
+
+ span,
+ i {
+ color: #fff;
+ }
+ }
+ }
+ }
+
+ .title {
+ border-bottom: 1px solid rgba(#fff, 0.2);
+ }
+ }
+
+ .bg {
+ background: rgba(#000, 0.4);
+ width: 100vw;
+ height: 100vh;
+ position: fixed;
+ top: 60px;
+ left: 0;
+ z-index: 14;
+ }
+}
diff --git a/sass/components/pwa-dialog.scss b/sass/components/pwa-dialog.scss
new file mode 100644
index 0000000..1565067
--- /dev/null
+++ b/sass/components/pwa-dialog.scss
@@ -0,0 +1,44 @@
+.pwa_dialog {
+ display: none;
+ position: fixed;
+ z-index: 50;
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 100vh;
+ background: rgba(#000, 0.5);
+
+ .dialog-wrapper {
+ position: fixed;
+ z-index: 51;
+ bottom: 50px;
+ left: 50%;
+ @include transform(translateX(-50%));
+ background: #fff;
+ padding: 20px;
+ @extend %defaultBorderRadius;
+ @extend %defaultBoxShadow;
+ text-align: center;
+
+ @media (max-width: 768px) {
+ width: 95%;
+ }
+
+ .btns {
+ margin-top: 30px;
+
+ button {
+ margin: 5px 10px;
+ }
+
+ .cancel {
+ border-color: $theme;
+ color: $theme;
+ }
+ }
+ }
+
+ &.active {
+ display: block !important;
+ }
+}
diff --git a/sass/components/representation-form.scss b/sass/components/representation-form.scss
new file mode 100644
index 0000000..0b74517
--- /dev/null
+++ b/sass/components/representation-form.scss
@@ -0,0 +1,121 @@
+.representation-form {
+ h1 {
+ text-align: center;
+ margin-bottom: 50px;
+ font-weight: bold;
+ }
+
+ .notic {
+ border: 2px dashed $theme;
+ padding: 20px;
+ background: rgba($theme, 0.1);
+ @include boxSizing(border-box);
+
+ p {
+ font-weight: bold;
+ color: $theme;
+ line-height: 1.8em;
+ }
+ }
+
+ .notic2 {
+ margin-top: 80px;
+ margin-bottom: -30px;
+
+ &::before {
+ content: '';
+ $radius: 10px;
+ display: inline-block;
+ width: $radius;
+ height: $radius;
+ @include borderRadius(100%);
+ background: #000;
+ margin-left: 10px;
+ }
+
+ span {
+ font-weight: bold;
+ color: #000;
+ }
+ }
+
+ .box {
+ border: 2px solid #000;
+ margin-top: 50px;
+
+ .box-title {
+ background: $theme;
+ padding: 10px;
+
+ p {
+ color: #fff;
+ font-size: 20px;
+ font-weight: bold;
+ text-align: center;
+ }
+ }
+
+ table {
+ width: 100%;
+
+ th {
+ font-weight: bold;
+ background: $theme;
+ color: #fff;
+ }
+
+ td,
+ th {
+ border: 1px solid #000;
+ padding: 10px;
+ }
+
+ tbody {
+ tr {
+ position: relative;
+
+ i {
+ display: block;
+ position: absolute;
+ top: 50%;
+ left: 10px;
+ @include transform(translateY(-50%));
+ color: rgba(#000, 0.3);
+ cursor: pointer;
+ padding: 5px;
+ font-size: 15px;
+ @extend %defaultTransition;
+
+ &:hover {
+ color: red;
+ }
+ }
+ }
+ }
+ .add-btn {
+ padding: 0;
+
+ button {
+ width: 100%;
+ height: 100%;
+ padding: 10px;
+ border: none;
+ background: rgba(#000, 0.1);
+ color: #000;
+ cursor: pointer;
+ @extend %defaultTransition;
+
+ &:hover {
+ background: rgba(#000, 0.5);
+ color: #fff;
+ }
+ }
+ }
+ }
+ }
+
+ .post-form {
+ margin: 50px 0;
+ text-align: center;
+ }
+}
diff --git a/sass/components/table-box.scss b/sass/components/table-box.scss
new file mode 100644
index 0000000..b579d21
--- /dev/null
+++ b/sass/components/table-box.scss
@@ -0,0 +1,525 @@
+.tableBox {
+ width: 100%;
+ overflow: auto;
+
+ table {
+ display: block;
+ width: 100%;
+ min-width: 1000px;
+
+ thead,
+ tbody {
+ display: block;
+
+ tr {
+ display: flex;
+ justify-content: space-between;
+ width: 100%;
+ @include borderRadius(5px);
+
+ th,
+ td {
+ display: block;
+ width: 100%;
+ text-align: right;
+
+ &.index {
+ width: 80px;
+ }
+ }
+ }
+ }
+
+ thead {
+ tr {
+ background: $tableHead;
+ color: #fff;
+ padding: 15px 10px;
+
+ th {
+ &:last-child {
+ padding-left: 10px;
+ text-align: left;
+ }
+ }
+ }
+ }
+
+ tbody {
+ margin-top: 20px;
+ tr {
+ margin-bottom: 5px;
+ background: $tableBody;
+ padding: 5px 10px;
+ @extend %defaultTransition;
+
+ &:hover {
+ background: $tableBodyHover !important;
+ }
+
+ &:nth-child(even) {
+ background-color: $tableStrip;
+ }
+
+ .trashIcon-btn {
+ // border: 1px solid gray;
+ border: none;
+ background: transparent;
+ padding: 4px 8px;
+ cursor: pointer;
+ @include borderRadius(4px);
+
+ &:hover {
+ i {
+ color: red;
+ }
+ }
+
+ i {
+ color: gray;
+ @extend %defaultTransition;
+ }
+ }
+
+ td {
+ &:last-child {
+ text-align: left;
+ }
+
+ &.noItem {
+ text-align: center !important;
+ }
+
+ span {
+ display: inline-block;
+ padding: 4px 0;
+ color: #000;
+ }
+
+ .btn {
+ padding: 4px 8px;
+ }
+ }
+ }
+ }
+
+ &.qaurantee {
+ &.atl{
+ min-width: 1300px;
+ .index-atl{
+ min-width: 75px;
+ max-width: 75px;
+ }
+ }
+ .brand {
+ width: 120px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ img {
+ display: block;
+ width: 100%;
+ }
+ }
+
+ tbody {
+ tr {
+ &.unread {
+ background: rgba(orange, 0.2);
+ }
+ }
+ }
+ }
+
+ &.history {
+ min-width: 1200px;
+ tr {
+ th {
+ font-size: 12px;
+ }
+
+ td,
+ th {
+ &:last-child {
+ text-align: right;
+ }
+
+ &.index {
+ width: 50px;
+ }
+
+ &.date {
+ width: 100px;
+ }
+
+ &.transID {
+ width: 110px;
+ }
+
+ &.itemID {
+ width: 80px;
+ }
+
+ &.itemCode {
+ width: 80px;
+ }
+
+ &.itemName {
+ width: 400px;
+ }
+
+ &.quantity {
+ width: 90px;
+ }
+
+ &.repairCount {
+ width: 90px;
+ }
+
+ &.remainCount {
+ width: 60px;
+ }
+ }
+ }
+ }
+
+ &.tickets {
+ tr {
+ .title {
+ width: 50%;
+ }
+
+ .transactionId {
+ width: 130px;
+ }
+
+ .date {
+ width: 150px;
+ }
+
+ .details {
+ width: 100px;
+ }
+ }
+ }
+
+ &.drafts {
+ tr {
+ .description {
+ width: 100%;
+ }
+
+ .brand {
+ width: 120px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ img {
+ display: block;
+ width: 100%;
+ }
+ }
+
+ .quantity {
+ width: 120px;
+ text-align: center;
+ }
+
+ .details {
+ width: 200px;
+ }
+ }
+ }
+
+ &.agent-requests {
+ tr {
+ th,
+ td {
+ font-size: 14px;
+ }
+
+ .description {
+ width: 50%;
+ margin-left: 20px;
+ }
+
+ .createDate {
+ width: 250px;
+ }
+
+ .quantity {
+ width: 120px;
+ }
+
+ .details {
+ width: 200px;
+ }
+ }
+
+ &.extended {
+ .description {
+ width: 400px;
+ }
+ .createDate {
+ width: 100px;
+ margin-left: 20px;
+ }
+ .sendDate {
+ width: 100px;
+ margin-left: 20px;
+ }
+ .trackingCode {
+ width: 100px;
+ margin-left: 20px;
+ }
+ .status {
+ width: 120px;
+ margin-left: 20px;
+ }
+ .deliveryCode {
+ width: 140px;
+ margin-left: 20px;
+ }
+ .quantity {
+ width: 100px;
+ }
+ .details {
+ width: 80px;
+ }
+ }
+ }
+
+ &.pieces-items {
+ td {
+ span {
+ font-size: 14px;
+ }
+ }
+ .index {
+ width: 50px;
+ }
+
+ .recieptDate {
+ width: 110px;
+ }
+
+ .itemName {
+ width: 300px;
+ }
+
+ .itemSerial {
+ width: 120px;
+ }
+
+ .guaranteeStatus {
+ width: 120px;
+ }
+
+ .pieceName {
+ width: 200px;
+ }
+
+ .pieceCode {
+ width: 100px;
+ }
+
+ .quantity {
+ width: 60px;
+ }
+ .removeBtn {
+ width: 60px;
+ }
+ }
+
+ &.report-items {
+ th {
+ text-align: center;
+ font-size: 14px;
+ line-height: 1.6em;
+ }
+ td {
+ text-align: center;
+ padding: 0 10px;
+ span {
+ font-size: 14px;
+ line-height: 1.6em;
+ }
+ }
+ .index {
+ width: 60px;
+ }
+
+ .customerName {
+ width: 100px;
+ }
+
+ .customerTel {
+ width: 100px;
+ }
+
+ .itemName {
+ width: 130px;
+ }
+ .itemSerial {
+ width: 100px;
+ }
+ .productIssue {
+ width: 300px;
+ }
+ .usedPieces {
+ width: 300px;
+ }
+ .recieveDate {
+ width: 100px;
+ }
+ .deliverDate {
+ width: 100px;
+ }
+ .removeBtn {
+ width: 50px;
+ }
+ }
+
+ &.drafts-modal {
+ min-width: 100%;
+
+ tr {
+ .description {
+ width: 100%;
+ }
+
+ .brand {
+ width: 120px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ img {
+ display: block;
+ width: 100%;
+ }
+ }
+
+ .quantity {
+ width: 120px;
+ text-align: center;
+ }
+
+ .details {
+ padding: 0;
+ width: 100px;
+ }
+
+ .name {
+ width: 70%;
+ }
+
+ .addStatus {
+ padding: 0;
+ width: 80px;
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+
+ i {
+ font-size: 20px;
+ cursor: pointer;
+ }
+ }
+ }
+ }
+
+ &.formItems {
+ thead {
+ tr {
+ background: $tableHead;
+
+ th {
+ font-size: 13px;
+ font-family: 'iranYekanB';
+ color: #fff;
+ }
+ }
+ }
+
+ tbody {
+ margin-top: 5px;
+ }
+
+ tr {
+ td,
+ th {
+ text-align: center;
+
+ &.index {
+ text-align: right;
+ }
+
+ &.itemName {
+ text-align: right;
+ width: 600px;
+ }
+
+ &.quantity {
+ width: 70px;
+ }
+
+ &.itemSerial {
+ width: 130px;
+ }
+
+ &.date {
+ width: 140px;
+ }
+
+ &.selector {
+ width: 50px;
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+
+ .el-checkbox {
+ margin-top: 2px;
+ }
+ }
+
+ &.removeBtn {
+ width: 60px;
+ }
+
+ .itemsDeleteBtn {
+ padding: 4px;
+ @extend %defaultTransition;
+ cursor: pointer;
+
+ &:hover {
+ color: $red;
+ }
+ }
+ }
+
+ th {
+ &:last-child {
+ padding-left: 0;
+ }
+ }
+ }
+ }
+
+ &.lotteryWinners {
+ min-width: 300px;
+
+ .name {
+ width: 50%;
+ }
+
+ .mobile {
+ span {
+ direction: ltr;
+ }
+ }
+ }
+ }
+}
diff --git a/sass/components/upload-assets.scss b/sass/components/upload-assets.scss
new file mode 100644
index 0000000..9cf0805
--- /dev/null
+++ b/sass/components/upload-assets.scss
@@ -0,0 +1,50 @@
+.upload-assets {
+ .title {
+ text-align: center;
+ background: rgba($theme, 0.03);
+ padding: 15px;
+ @extend %defaultBorderRadius;
+ border: 1px dashed $theme;
+
+ h3 {
+ b {
+ color: $theme;
+ }
+ }
+ }
+
+ .level-description {
+ margin-top: 50px;
+
+ h3 {
+ margin-bottom: 20px;
+ }
+ }
+
+ .upload-description {
+ margin-top: 50px;
+
+ ul {
+ margin-top: 20px;
+
+ li {
+ list-style: disc;
+ list-style-position: inside;
+ margin-bottom: 10px;
+
+ span {
+ color: #000;
+ }
+ }
+ }
+ }
+
+ .upload {
+ margin-top: 50px;
+
+ p {
+ margin-top: 20px;
+ margin-bottom: 40px;
+ }
+ }
+}
diff --git a/sass/main.scss b/sass/main.scss
new file mode 100644
index 0000000..129b970
--- /dev/null
+++ b/sass/main.scss
@@ -0,0 +1,61 @@
+// app modules
+@import './app/variables.scss';
+@import './app/mixins.scss';
+@import './app/extentions.scss';
+@import './app/fonts.scss';
+@import './app/global.scss';
+@import './app/CKEditorStyle.scss';
+@import './app/el_ui_rtl.scss';
+@import './app/el-ui-custom.scss';
+@import './app/printStyles.scss';
+
+// components
+@import './components/lottery.scss';
+@import './components/footer.scss';
+@import './components/header.scss';
+@import './components/hero.scss';
+@import './components/messenger.scss';
+@import './components/pwa-dialog.scss';
+@import './components/mobile-menu.scss';
+@import './components/table-box.scss';
+@import './components/form.scss';
+@import './components/btn.scss';
+@import './components/representation-form.scss';
+@import './components/upload-assets.scss';
+
+// pages
+@import './pages/error.scss';
+@import './pages/home.scss';
+@import './pages/faq.scss';
+@import './pages/learning.scss';
+@import './pages/learning-post.scss';
+@import './pages/warranty-terms.scss';
+@import './pages/downloads.scss';
+@import './pages/downloads-details.scss';
+@import './pages/about.scss';
+@import './pages/contact.scss';
+@import './pages/user-auth.scss';
+@import './pages/activation.scss';
+@import './pages/agents.scss';
+@import './pages/representation.scss';
+@import './pages/lottery.scss';
+@import './pages/agent-benefits.scss';
+
+// user dashboard pages
+@import './pages/user-dashboard/index.scss';
+@import './pages/user-dashboard/layout.scss';
+@import './pages/user-dashboard/agent-guarantee-details.scss';
+@import './pages/user-dashboard/agent-reports.scss';
+@import './pages/user-dashboard/agent-request-details.scss';
+@import './pages/user-dashboard/agent-requests.scss';
+@import './pages/user-dashboard/announcements.scss';
+@import './pages/user-dashboard/factor.scss';
+@import './pages/user-dashboard/guarantee-details.scss';
+@import './pages/user-dashboard/guarantee.scss';
+@import './pages/user-dashboard/post-address.scss';
+@import './pages/user-dashboard/post-receipt.scss';
+@import './pages/user-dashboard/post.scss';
+@import './pages/user-dashboard/profile.scss';
+@import './pages/user-dashboard/ticket-messenger.scss';
+@import './pages/user-dashboard/tickets.scss';
+@import './pages/user-dashboard/verify.scss';
diff --git a/sass/pages/about.scss b/sass/pages/about.scss
new file mode 100644
index 0000000..e9deb2e
--- /dev/null
+++ b/sass/pages/about.scss
@@ -0,0 +1,56 @@
+.about--page {
+ .txt {
+ display: flex;
+ align-items: center;
+
+ h2 {
+ color: #fff;
+
+ @media (max-width: 575px) {
+ width: 100%;
+ text-align: center !important;
+ }
+ }
+
+ p {
+ color: rgba(#fff, 0.7);
+ }
+ }
+
+ .s1 {
+ text-align: center;
+ padding: 80px 0;
+ background: #fff;
+ }
+
+ .s2 {
+ padding: 100px 0;
+ background: #142b3e;
+ }
+
+ .s3 {
+ padding: 100px 0;
+ background: url('/assets/img/about/s3.jpg');
+ background-size: cover;
+ -webkit-background-size: cover;
+ background-repeat: no-repeat;
+ }
+
+ .s4 {
+ padding: 100px 0;
+ background: #fff;
+
+ h2,
+ p {
+ color: #000;
+ }
+ }
+
+ .s5 {
+ padding: 100px 0;
+ background: url('/assets/img/about/s5.jpg');
+ background-size: cover;
+ -webkit-background-size: cover;
+ background-repeat: no-repeat;
+ }
+}
diff --git a/sass/pages/activation.scss b/sass/pages/activation.scss
new file mode 100644
index 0000000..beb96f1
--- /dev/null
+++ b/sass/pages/activation.scss
@@ -0,0 +1,48 @@
+.activation-page {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ .s1 {
+ flex-basis: 100%;
+ padding: 150px 0;
+
+ .msgBox,
+ .content {
+ width: 100%;
+ max-width: 600px;
+ @extend %defaultBorderRadius;
+ @include boxShadow(0 5px 10px rgba(#000, 0.5));
+ margin: 0 auto;
+ text-align: center;
+ }
+
+ .msgBox {
+ padding: 10px 25px;
+
+ &.success {
+ background: #37d200;
+ }
+
+ &.err {
+ background: tomato;
+ }
+
+ h2 {
+ color: #fff;
+ font-size: 20px;
+ }
+ }
+
+ .content {
+ background: #fff;
+ margin-top: 30px;
+ padding: 25px;
+
+ .btn {
+ display: inline-block;
+ margin-top: 10px;
+ }
+ }
+ }
+}
diff --git a/sass/pages/agent-benefits.scss b/sass/pages/agent-benefits.scss
new file mode 100644
index 0000000..bd4c0f1
--- /dev/null
+++ b/sass/pages/agent-benefits.scss
@@ -0,0 +1,96 @@
+.agent-benefits--page {
+ .hero {
+ .bg {
+ background-image: url('/assets/img/agents/agents-hero.jpg');
+ }
+ }
+
+ .panel {
+ width: 100%;
+ background: #fff;
+ @extend %defaultBorderRadius;
+ padding: 20px;
+ @include boxSizing(border-box);
+
+ &.not-logged-in {
+ text-align: center;
+
+ a {
+ color: $theme;
+ }
+ }
+
+ &.is-agent {
+ text-align: center;
+
+ a {
+ color: $theme;
+ }
+ }
+ }
+
+ .s1 {
+ .txtBox {
+ overflow: hidden;
+
+ h3 {
+ margin-bottom: 20px;
+ }
+
+ ul {
+ li {
+ list-style: disc;
+ margin-right: 20px;
+ margin-bottom: 10px;
+
+ p {
+ a {
+ color: $theme;
+ }
+ }
+ }
+ }
+ }
+
+ .links {
+ margin-top: 50px;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-around;
+
+ .item {
+ flex-basis: 32%;
+ overflow: hidden;
+ @include boxSizing(border-box);
+ @extend %defaultBorderRadius;
+ @extend %defaultBoxShadow;
+
+ @media (max-width: 768px) {
+ flex-basis: 100%;
+ margin-bottom: 15px;
+ }
+
+ button,
+ a {
+ display: block;
+ width: 100%;
+ height: 100%;
+ padding: 50px 15px;
+ border: none;
+ background: rgba(#000, 0.05);
+ text-align: center;
+ color: #000;
+ font-size: 16px;
+ font-family: 'iranYekanR';
+ cursor: pointer;
+ @extend %defaultTransition;
+
+ &:hover {
+ background: $theme;
+ color: #fff;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/sass/pages/agents.scss b/sass/pages/agents.scss
new file mode 100644
index 0000000..a600a78
--- /dev/null
+++ b/sass/pages/agents.scss
@@ -0,0 +1,63 @@
+.agents--page {
+ .hero {
+ .bg {
+ background-image: url('/assets/img/agents/agents-hero.jpg');
+ }
+ }
+
+ .panel {
+ width: 100%;
+ background: #fff;
+ @extend %defaultBorderRadius;
+ padding: 20px;
+ @include boxSizing(border-box);
+
+ &.not-logged-in {
+ text-align: center;
+
+ a {
+ color: $theme;
+ }
+ }
+
+ &.is-agent {
+ text-align: center;
+
+ a {
+ color: $theme;
+ }
+ }
+ }
+
+ .showDetailsBtn {
+ background: transparent;
+ border: 1px solid rgba(#000, 0.2);
+ @include borderRadius(4px);
+ padding: 4px 16px;
+ cursor: pointer;
+ @extend %defaultTransition;
+
+ i {
+ @extend %defaultTransition;
+ color: rgba(#000, 0.5);
+ }
+
+ &:hover {
+ background: $theme;
+ border-color: $theme;
+
+ i {
+ color: #fff;
+ }
+ }
+ }
+
+ .agentDetailsModal {
+ input {
+ &:disabled {
+ color: rgba(#000, 0.8);
+ cursor: auto;
+ }
+ }
+ }
+}
diff --git a/sass/pages/contact.scss b/sass/pages/contact.scss
new file mode 100644
index 0000000..318da41
--- /dev/null
+++ b/sass/pages/contact.scss
@@ -0,0 +1,89 @@
+.contact--page {
+ background: url('/assets/img/contact/bg.jpg');
+ background-size: cover;
+ -webkit-background-size: cover;
+ background-repeat: no-repeat;
+
+ .s1 {
+ min-height: calc(100vh - 85px);
+ display: flex;
+ align-items: center;
+ padding: 150px 0;
+
+ .message {
+ display: flex;
+ justify-content: center;
+
+ .form_1 {
+ max-width: 450px;
+ @extend %defaultBoxShadow;
+
+ @media (max-width: 992px) {
+ max-width: 100%;
+ }
+
+ .title {
+ text-align: center;
+ margin-bottom: 30px;
+
+ p {
+ font-size: 24px;
+ color: #000;
+ }
+ }
+
+ .email {
+ direction: ltr;
+ text-align: right;
+ }
+ }
+ }
+
+ .contact {
+ display: flex;
+ align-items: center;
+
+ a,
+ p,
+ span,
+ i {
+ color: #fff;
+ @extend %defaultTransition;
+ }
+
+ ul {
+ li {
+ margin-bottom: 30px;
+
+ a {
+ font-size: 20px;
+
+ span {
+ direction: ltr !important;
+ display: inline-block;
+ }
+
+ @media (max-width: 575px) {
+ font-size: 16px;
+ }
+
+ &:hover {
+ span,
+ i {
+ color: #00bfff;
+ }
+ }
+ }
+
+ p {
+ font-size: 20px;
+
+ @media (max-width: 575px) {
+ font-size: 16px;
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/sass/pages/downloads-details.scss b/sass/pages/downloads-details.scss
new file mode 100644
index 0000000..84e54d5
--- /dev/null
+++ b/sass/pages/downloads-details.scss
@@ -0,0 +1,104 @@
+.download-details--page {
+ .s1 {
+ margin-top: 80px;
+
+ .item {
+ background: #fff;
+ padding: 25px;
+ @extend %defaultBorderRadius;
+
+ .title {
+ text-align: center;
+
+ h1 {
+ display: inline-block;
+ font-size: 20px;
+
+ &::after {
+ content: '';
+ display: block;
+ width: 105%;
+ height: 2px;
+ background: $theme;
+ @include transform(translateX(2.5%) translateY(20px));
+ }
+
+ @media (max-width: 768px) {
+ font-size: 18px;
+ }
+ }
+ img {
+ width: 25px;
+ }
+ }
+
+ .description {
+ display: flex;
+ flex-wrap: wrap;
+ margin: 50px 0;
+
+ .imgBox {
+ flex-basis: 30%;
+
+ @media (max-width: 768px) {
+ flex-basis: 100%;
+ order: 0;
+ }
+
+ img {
+ width: 100%;
+ }
+ }
+
+ .ck-content {
+ flex-basis: 70%;
+
+ @media (max-width: 768px) {
+ flex-basis: 100%;
+ order: 1;
+ }
+ }
+ }
+
+ .download {
+ .title {
+ text-align: right;
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ margin-bottom: 20px;
+
+ h3 {
+ margin-right: 10px;
+ color: $theme;
+ }
+ }
+
+ ul {
+ li {
+ margin-bottom: 5px;
+
+ a {
+ span,
+ i {
+ @extend %defaultTransition;
+ font-weight: bold;
+
+ &:hover {
+ color: $theme;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .zip-pass {
+ p {
+ color: $theme;
+ font-weight: bold;
+ }
+ }
+ }
+ }
+}
diff --git a/sass/pages/downloads.scss b/sass/pages/downloads.scss
new file mode 100644
index 0000000..910c275
--- /dev/null
+++ b/sass/pages/downloads.scss
@@ -0,0 +1,244 @@
+.download--page {
+ .hero {
+ margin-bottom: 50px;
+
+ .bg {
+ background-image: url('/assets/img/download/hero.jpg');
+ }
+ }
+
+ .s1 {
+ padding-bottom: 50px;
+
+ .filters {
+ background-color: rgba(#000, 0.15);
+ @extend %defaultBorderRadius;
+ //@extend %defaultBoxShadow;
+ overflow: hidden;
+
+ ul {
+ display: flex;
+ flex-wrap: wrap;
+ padding: 5px;
+
+ li {
+ margin: 5px;
+
+ @media (max-width: 575px) {
+ margin: 3px;
+ }
+
+ a {
+ display: block;
+ background: rgba(#000, 0.3);
+ color: #fff;
+ padding: 3px 15px;
+ cursor: pointer;
+ @include borderRadius(10px);
+ @extend %defaultTransition;
+
+ &:hover {
+ background: rgba(#000, 0.7);
+ }
+
+ &.active {
+ background: rgba(#000, 0.7);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .s2 {
+ $imgSize: 180px;
+ $titleMinHeight: 85px;
+ $captionMinHeight: 100px;
+
+ .item {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ align-items: center;
+ background: #fff;
+ @extend %defaultBorderRadius;
+ @extend %defaultBoxShadow;
+ overflow: hidden;
+ padding: 25px 15px;
+ height: 100%;
+
+ @media (max-width: 992px) {
+ padding: 25px 15px;
+ }
+
+ .imgBox {
+ flex-basis: $imgSize;
+ height: $imgSize;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background: rgba(0, 0, 0, 0.05);
+ @include borderRadius(50%);
+
+ @media (max-width: 768px) {
+ flex-basis: 100%;
+ background-color: transparent;
+ @include borderRadius(0);
+ height: auto;
+
+ img {
+ @include borderRadius(0);
+ }
+ }
+
+ img {
+ width: 60%;
+ @include borderRadius(50%);
+
+ @media (max-width: 575px) {
+ width: 100%;
+ }
+ }
+ }
+
+ .txtBox {
+ flex-basis: calc(100% - #{$imgSize});
+ padding-right: 15px;
+ height: 100%;
+
+ @media (max-width: 768px) {
+ flex-basis: 100%;
+ margin-top: 20px;
+ height: auto;
+ }
+
+ h2 {
+ margin-bottom: 20px;
+ font-size: 18px;
+
+ @media (min-height: 1400px) {
+ min-height: $titleMinHeight;
+ }
+
+ b {
+ color: $theme;
+ }
+
+ span {
+ display: inline-block;
+ background: rgba(0, 0, 0, 0.3);
+ padding: 0 5px;
+ font-size: 13px;
+ @include borderRadius(10px);
+ color: #fff;
+ }
+ }
+
+ p {
+ margin-bottom: 15px;
+
+ @media (min-width: 1400px) {
+ min-height: $captionMinHeight;
+ }
+ }
+
+ a {
+ display: inline-block;
+ }
+ }
+ }
+
+ .untrack {
+ margin-top: 40px;
+ margin-bottom: 100px;
+
+ h3 {
+ font-size: 25px;
+ margin-bottom: 30px;
+ }
+
+ .latest {
+ position: relative;
+ padding: 35px 20px;
+ background-image: linear-gradient(#8ca5db, #ba93d6);
+ @extend %defaultBorderRadius;
+ @extend %defaultBoxShadow;
+ overflow: hidden;
+ height: 100%;
+
+ @media (max-width: 992px) {
+ padding: 50px 15px;
+ }
+
+ &:hover {
+ .normal {
+ top: -100%;
+ }
+
+ .hover {
+ @include transform(translateY(0));
+ opacity: 1;
+ }
+ }
+
+ .normal {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ @extend %defaultTransition;
+ position: absolute;
+ top: 0;
+ left: 0;
+
+ img {
+ width: 35%;
+ margin-bottom: 20px;
+ }
+
+ h2 {
+ color: #5c5f61;
+ padding: 0 15px;
+ text-align: center;
+ font-size: 20px;
+
+ @media (max-width: 1200px) {
+ font-size: 18px;
+ }
+ }
+ }
+
+ .hover {
+ width: 100%;
+ height: 100%;
+ @extend %defaultTransition;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: flex-start;
+ @include transform(translateY(100%));
+ opacity: 0;
+
+ h2 {
+ color: #fff;
+ margin-bottom: 10px;
+ min-height: $titleMinHeight;
+ font-size: 22px;
+ }
+
+ p {
+ color: #fff;
+ margin-bottom: 30px;
+ }
+ }
+ }
+ }
+ }
+
+ .s3 {
+ direction: ltr;
+ text-align: center;
+ }
+}
diff --git a/sass/pages/error.scss b/sass/pages/error.scss
new file mode 100644
index 0000000..ca0ff44
--- /dev/null
+++ b/sass/pages/error.scss
@@ -0,0 +1,24 @@
+.error--page {
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+
+ h1 {
+ font-family: sans-serif;
+ font-size: 60px;
+ }
+
+ p {
+ text-transform: uppercase;
+ font-family: sans-serif;
+ font-size: 14px;
+ margin-top: -20px;
+ }
+
+ a {
+ margin-top: 20px;
+ font-family: 'sahel', sans-serif;
+ }
+}
diff --git a/sass/pages/faq.scss b/sass/pages/faq.scss
new file mode 100644
index 0000000..c8ba1f6
--- /dev/null
+++ b/sass/pages/faq.scss
@@ -0,0 +1,73 @@
+.FAQ--page {
+ .hero {
+ .bg {
+ background-image: url('/assets/img/FAQ/hero.jpg');
+ }
+
+ .btn {
+ margin-top: 20px;
+ }
+ }
+
+ .s1 {
+ .q-a {
+ background: #fff;
+ padding: 25px 80px 25px 25px;
+ @include borderRadius(5px);
+ @extend %defaultBoxShadow;
+ overflow: hidden;
+ position: relative;
+ cursor: pointer;
+
+ @media (max-width: 575px) {
+ padding-right: 45px;
+ }
+
+ &.collapsed {
+ h3 {
+ height: 27px;
+ margin-bottom: 0;
+ }
+
+ i {
+ @include transform(rotate(90deg));
+ }
+ }
+
+ i {
+ display: inline-block;
+ font-size: 30px;
+ color: $theme;
+ position: absolute;
+ top: 25px;
+ right: 25px;
+ @extend %defaultTransition;
+
+ @media (max-width: 575px) {
+ right: 10px;
+ }
+ }
+
+ h3 {
+ margin-bottom: 40px;
+ line-height: 1.6em;
+ overflow: hidden;
+ @extend %defaultTransition;
+ }
+
+ .answer {
+ b {
+ display: inline-block;
+ color: $theme;
+ margin-bottom: 10px;
+ }
+ }
+ }
+ }
+
+ .submit {
+ span {
+ color: #fff;
+ }
+ }
+}
diff --git a/sass/pages/home.scss b/sass/pages/home.scss
new file mode 100644
index 0000000..ead62e5
--- /dev/null
+++ b/sass/pages/home.scss
@@ -0,0 +1,201 @@
+.home--page {
+ position: relative;
+ overflow-y: auto;
+
+ .bg {
+ width: 100%;
+ height: calc(100vh - 50px);
+ background-image: url('/assets/img/home/bg.jpg');
+ background-size: cover;
+ -webkit-background-size: cover;
+ background-repeat: no-repeat;
+
+ @media (max-width: 992px) {
+ position: fixed;
+ $topOffset: 50px;
+ height: calc(100vh - #{$topOffset});
+ top: $topOffset;
+ left: 0;
+ z-index: 0;
+ }
+ }
+
+ .txtBox {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 100%;
+ z-index: 1;
+ max-width: 1000px;
+ @include transform(translate(-50%, -50%));
+ padding: 28px 15px;
+ background: rgba(#fff, 0.5);
+ backdrop-filter: blur(5px);
+ overflow: hidden;
+
+ @media (max-width: 992px) {
+ position: relative;
+ $topOffset: 50px;
+ height: calc(100vh - #{$topOffset});
+ top: 0;
+ left: 0;
+ padding-top: $topOffset;
+ @include transform(translate(0, 0));
+ overflow-y: auto;
+ display: flex;
+ justify-content: center;
+ //align-items: center;
+
+ .container-fluid {
+ margin-top: auto;
+ margin-bottom: auto;
+ }
+ }
+
+ @media (max-width: 575px) {
+ padding-top: 20px;
+ padding-bottom: 10px;
+
+ .container-fluid {
+ padding: 0;
+
+ .row {
+ & > div {
+ padding: 0 5px;
+ }
+ }
+ }
+ }
+
+ .boxBg {
+ height: 100%;
+ padding: 15px;
+ background: #dbd9da;
+
+ h1,
+ p,
+ h2 {
+ color: #000;
+ }
+
+ p {
+ @media (max-width: 575px) {
+ text-align: justify;
+ }
+ }
+
+ h1,
+ h2 {
+ font-size: 25px;
+ margin-top: 10px;
+ margin-bottom: 20px;
+ }
+
+ &.inquiry {
+ $c1: #e0e6ed;
+ $c2: #707070;
+
+ .switchBox {
+ margin-top: 40px;
+ text-align: center;
+
+ .switch {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+ button {
+ width: 50%;
+ font-size: 12px;
+ padding: 2px 8px;
+ background: transparent;
+ color: rgba($c2, 0.5);
+ @extend %defaultTransition;
+ cursor: pointer;
+ border: 1px solid rgba($c2, 0.2);
+
+ &:hover {
+ color: rgba($c2, 0.8);
+ background: rgba($c1, 0.1);
+ }
+
+ &.active {
+ background: rgba($c1, 1) !important;
+ color: $c2;
+ border-color: rgba($c2, 0.5);
+ }
+ }
+ }
+ }
+
+ .checkSerial {
+ input {
+ background: $c1;
+ @extend %appearance;
+ padding: 10px;
+ border: none;
+ margin-top: 5px;
+ margin-bottom: 5px;
+ width: 100%;
+ @include boxSizing(border-box);
+
+ &::placeholder {
+ color: $c2;
+ }
+ }
+
+ button {
+ display: inline-block;
+ background: $theme;
+ color: #fff;
+ border: 1px solid $theme;
+ padding: 13px;
+ cursor: pointer;
+ @include transition(0.3s);
+ width: 100%;
+ @include borderRadius(0);
+
+ span {
+ line-height: 1.3em;
+ }
+
+ &:disabled {
+ background: gray;
+ border-color: gray;
+ }
+
+ &:hover {
+ opacity: 0.8;
+ }
+ }
+ }
+ }
+
+ &.description {
+ display: flex;
+ flex-direction: column;
+
+ p {
+ margin-bottom: 10px;
+ }
+
+ .btns {
+ margin-top: auto;
+
+ a {
+ @include borderRadius(0);
+ display: inline-block;
+
+ @media (max-width: 575px) {
+ width: 100%;
+ text-align: center;
+ &:first-child {
+ margin-bottom: 10px;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/sass/pages/learning-post.scss b/sass/pages/learning-post.scss
new file mode 100644
index 0000000..14103c2
--- /dev/null
+++ b/sass/pages/learning-post.scss
@@ -0,0 +1,29 @@
+.learning--post--page {
+ .s1 {
+ margin-top: 100px;
+
+ .post {
+ background: #fff;
+ @extend %defaultBorderRadius;
+ @extend %defaultBoxShadow;
+
+ .ck-content {
+ padding: 25px 15px 35px;
+ }
+
+ video.media {
+ width: 100%;
+ //height: 600px;
+ background: #000;
+ border-top-left-radius: 15px;
+ border-top-right-radius: 15px;
+ }
+
+ img.media {
+ width: 100%;
+ border-top-left-radius: 15px;
+ border-top-right-radius: 15px;
+ }
+ }
+ }
+}
diff --git a/sass/pages/learning.scss b/sass/pages/learning.scss
new file mode 100644
index 0000000..6c77d43
--- /dev/null
+++ b/sass/pages/learning.scss
@@ -0,0 +1,111 @@
+.learning--page {
+ .hero {
+ .bg {
+ background-image: url('/assets/img/learning/hero.jpg');
+ }
+ }
+
+ .s1 {
+ .post {
+ margin-bottom: 80px;
+
+ .txtBox {
+ position: relative;
+ z-index: 1;
+ background: #fff;
+ padding: 35px 25px;
+ @include boxSizing(border-box);
+ @extend %defaultBorderRadius;
+ @extend %defaultBoxShadow;
+ width: 120%;
+
+ @media (max-width: 992px) {
+ width: 100%;
+ }
+
+ h2 {
+ margin-bottom: 30px;
+ }
+
+ p {
+ margin-bottom: 25px;
+ }
+
+ @media (max-width: 992px) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ }
+
+ @media (max-width: 575px) {
+ padding: 35px 15px;
+ }
+ }
+
+ .imgBox {
+ display: block;
+ position: relative;
+ z-index: 0;
+ @extend %defaultBorderRadius;
+ @extend %defaultBoxShadow;
+ overflow: hidden;
+
+ &:hover {
+ .imgMask {
+ background-color: rgba(#000, 0.4);
+ }
+ }
+
+ img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ display: block;
+ min-height: 400px;
+
+ @media (max-width: 1400px) {
+ //min-height: 400px;
+ }
+ }
+
+ i {
+ display: block;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ @include transform(translate(-50%, -50%));
+ z-index: 1;
+ font-size: 55px;
+ color: #fff;
+ }
+
+ .imgMask {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 0;
+ @extend %defaultTransition;
+ }
+
+ @media (max-width: 992px) {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+ }
+
+ &.reverse {
+ direction: ltr;
+
+ .txtBox {
+ direction: rtl;
+ }
+ }
+ }
+ }
+
+ .s2 {
+ direction: ltr;
+ text-align: center;
+ }
+}
diff --git a/sass/pages/lottery.scss b/sass/pages/lottery.scss
new file mode 100644
index 0000000..25bec05
--- /dev/null
+++ b/sass/pages/lottery.scss
@@ -0,0 +1,53 @@
+.lottery--page {
+ background-image: url('/assets/img/lottery/lottery2.png');
+ // padding-top: 200px;
+
+ .contentBox {
+ position: absolute;
+ top: 50%;
+ left: 0;
+ width: 100%;
+ @include transform(translateY(-50%));
+ overflow: hidden;
+
+ @media (max-width: 768px) {
+ position: static;
+ @include transform(translateY(0));
+ padding-top: 200px;
+ }
+
+ .content {
+ direction: rtl;
+ margin-bottom: 50px;
+
+ .remain-days {
+ text-align: center;
+ background: $theme;
+ margin: -40px -20px 20px;
+ padding: 20px 15px;
+ h1 {
+ margin: 0;
+ font-family: iranYekanB;
+ font-weight: bold;
+
+ span {
+ color: #fff;
+ }
+ }
+ }
+
+ h3 {
+ margin-bottom: 20px;
+ }
+ }
+
+ .winners-list {
+ .title {
+ margin-bottom: 30px;
+ h2 {
+ text-align: center;
+ }
+ }
+ }
+ }
+}
diff --git a/sass/pages/representation.scss b/sass/pages/representation.scss
new file mode 100644
index 0000000..13108e3
--- /dev/null
+++ b/sass/pages/representation.scss
@@ -0,0 +1,212 @@
+.representation--page {
+ .hero {
+ .bg {
+ background-image: url('/assets/img/agents/representations-hero.jpg');
+ }
+ }
+
+ .panel {
+ width: 100%;
+ background: #fff;
+ @extend %defaultBorderRadius;
+ padding: 20px;
+ @include boxSizing(border-box);
+
+ &.not-logged-in {
+ text-align: center;
+
+ a {
+ color: $theme;
+ }
+ }
+
+ &.is-agent {
+ text-align: center;
+
+ a {
+ color: $theme;
+ }
+ }
+ }
+
+ .s1 {
+ .txtBox {
+ overflow: hidden;
+
+ h3 {
+ margin-bottom: 20px;
+ }
+
+ ul {
+ li {
+ list-style: disc;
+ margin-right: 20px;
+ margin-bottom: 10px;
+
+ p {
+ a {
+ color: $theme;
+ }
+ }
+ }
+ }
+ }
+
+ .links {
+ margin-top: 50px;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-around;
+
+ .item {
+ flex-basis: 32%;
+ overflow: hidden;
+ @include boxSizing(border-box);
+ @extend %defaultBorderRadius;
+ @extend %defaultBoxShadow;
+
+ @media (max-width: 768px) {
+ flex-basis: 100%;
+ margin-bottom: 15px;
+ }
+
+ button,
+ a {
+ display: block;
+ width: 100%;
+ height: 100%;
+ padding: 50px 15px;
+ border: none;
+ background: rgba(#000, 0.05);
+ text-align: center;
+ color: #000;
+ font-size: 16px;
+ font-family: 'iranYekanR';
+ cursor: pointer;
+ @extend %defaultTransition;
+
+ &:hover {
+ background: $theme;
+ color: #fff;
+ }
+ }
+ }
+ }
+ }
+
+ .enroll {
+ margin-top: 100px;
+ }
+
+ .checkUploadModalContent {
+ overflow: hidden;
+ position: relative;
+
+ .repCheckBox {
+ width: 100%;
+ }
+
+ .resultBox {
+ width: 100%;
+ position: absolute;
+ top: 100%;
+ left: 0;
+ border: 1px solid rgba(#000, 0.2);
+ padding: 15px;
+ @include boxSizing(border-box);
+ opacity: 0;
+
+ .repInfo {
+ padding: 15px;
+ margin: -10px -10px;
+ overflow: hidden;
+ $bgColorOpacity: 0.1;
+ &.accepted {
+ background: rgba(green, $bgColorOpacity);
+ }
+ &.rejected {
+ background: rgba(red, $bgColorOpacity);
+ }
+ &.registered,
+ &.ongoing,
+ &.verification {
+ background: rgba(orange, $bgColorOpacity);
+ }
+
+ p {
+ font-size: 18px;
+ text-align: right;
+
+ span {
+ font-family: 'iranYekanR';
+ color: #000;
+ }
+ b {
+ font-family: 'iranYekanB', sans-serif;
+ }
+ }
+ }
+
+ .uploadBtn {
+ margin-bottom: 30px;
+
+ label {
+ display: inline-block;
+ font-size: 18px;
+ font-weight: bold;
+ cursor: pointer;
+ padding: 5px;
+ text-align: center;
+ border: 1px solid $theme;
+ @extend %defaultBorderRadius;
+ @extend %defaultTransition;
+ margin-bottom: 20px;
+
+ &:hover {
+ background: $theme;
+ i,
+ span {
+ color: #fff;
+ }
+ }
+
+ i,
+ span {
+ @extend %defaultTransition;
+ color: $theme;
+ }
+
+ i {
+ font-size: 50px;
+ }
+ span {
+ font-size: 14px;
+ display: block;
+ }
+ }
+ input {
+ visibility: hidden;
+ opacity: 0;
+ }
+
+ p {
+ text-align: right;
+
+ b {
+ display: inline-block;
+ direction: ltr !important;
+ }
+
+ &.notice {
+ color: red;
+ font-size: 14px;
+ }
+ }
+ }
+ }
+
+ .el-loading-text {
+ text-align: center !important;
+ }
+ }
+}
diff --git a/sass/pages/user-auth.scss b/sass/pages/user-auth.scss
new file mode 100644
index 0000000..140324c
--- /dev/null
+++ b/sass/pages/user-auth.scss
@@ -0,0 +1,257 @@
+.user-auth {
+ background: url('/assets/img/auth/bg.jpg');
+ background-size: cover;
+ -webkit-background-size: cover;
+ background-repeat: no-repeat;
+ min-height: 100vh;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 150px 15px;
+ $sideWidth: 250px;
+ $formBoxWidth: 800px;
+
+ .formBox {
+ width: 100%;
+ max-width: $formBoxWidth;
+ position: relative;
+ @extend %defaultBorderRadius;
+ overflow: hidden;
+ background: #fff;
+
+ .side {
+ width: $sideWidth;
+ height: 100%;
+ background: url('/assets/img/auth/formbg.jpg');
+ background-size: cover;
+ -webkit-background-size: cover;
+ background-repeat: no-repeat;
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 2;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+
+ p {
+ text-align: center;
+ margin-bottom: 20px;
+
+ span {
+ color: #fff;
+ font-size: 14px;
+ }
+ }
+ }
+
+ .main {
+ background: #fff;
+ margin-right: $sideWidth;
+ width: calc(#{$formBoxWidth} - #{$sideWidth});
+ padding: 50px 0;
+
+ .form_2 {
+ width: 70%;
+ margin-left: auto;
+ margin-right: auto;
+
+ .title {
+ text-align: center;
+ margin-bottom: 50px;
+
+ p {
+ font-size: 20px;
+ }
+ }
+
+ .btnRow {
+ a {
+ font-size: 14px;
+ color: $theme;
+ display: block;
+ margin-top: 15px;
+ }
+ }
+
+ .err {
+ p {
+ padding-right: 30px;
+ }
+ }
+ }
+ }
+
+ @media (max-width: 992px) {
+ $sideHeight: 150px;
+
+ .side {
+ width: 100%;
+ height: $sideHeight;
+ position: absolute;
+ top: 0;
+ right: 0;
+ }
+
+ .main {
+ margin: $sideHeight auto 0;
+ width: 100%;
+ //height: call(100% - #{$sideHeight});
+
+ .form_2 {
+ width: 100%;
+ max-width: 500px;
+ margin: 0 auto;
+ }
+ }
+ }
+ }
+
+ &.login {
+ .formBox {
+ .main {
+ .form_2 {
+ .formRow {
+ input {
+ -webkit-background-size: 16px;
+ background-size: 16px;
+ background-position: 95% 10px;
+ background-repeat: no-repeat;
+ padding-right: 38px;
+
+ &[name='email'] {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='rgba(0,0,0,0.5)' viewBox='0 0 512 512'%3E%3Cpath d='M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM48 96h416c8.8 0 16 7.2 16 16v41.4c-21.9 18.5-53.2 44-150.6 121.3-16.9 13.4-50.2 45.7-73.4 45.3-23.2.4-56.6-31.9-73.4-45.3C85.2 197.4 53.9 171.9 32 153.4V112c0-8.8 7.2-16 16-16zm416 320H48c-8.8 0-16-7.2-16-16V195c22.8 18.7 58.8 47.6 130.7 104.7 20.5 16.4 56.7 52.5 93.3 52.3 36.4.3 72.3-35.5 93.3-52.3 71.9-57.1 107.9-86 130.7-104.7v205c0 8.8-7.2 16-16 16z'/%3E%3C/svg%3E");
+ background-position: 95% 11px;
+ direction: ltr;
+ text-align: right;
+ }
+
+ &[name='password'] {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='rgba(0,0,0,0.5)' viewBox='0 0 448 512'%3E%3Cpath d='M224 420c-11 0-20-9-20-20v-64c0-11 9-20 20-20s20 9 20 20v64c0 11-9 20-20 20zm224-148v192c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V272c0-26.5 21.5-48 48-48h16v-64C64 71.6 136-.3 224.5 0 312.9.3 384 73.1 384 161.5V224h16c26.5 0 48 21.5 48 48zM96 224h256v-64c0-70.6-57.4-128-128-128S96 89.4 96 160v64zm320 240V272c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h352c8.8 0 16-7.2 16-16z'/%3E%3C/svg%3E");
+ -webkit-background-size: 15px;
+ background-size: 15px;
+ direction: ltr;
+ text-align: right;
+ }
+ }
+
+ &.err {
+ input {
+ &[name='email'] {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='rgba(255,0,0,0.5)' viewBox='0 0 512 512'%3E%3Cpath d='M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM48 96h416c8.8 0 16 7.2 16 16v41.4c-21.9 18.5-53.2 44-150.6 121.3-16.9 13.4-50.2 45.7-73.4 45.3-23.2.4-56.6-31.9-73.4-45.3C85.2 197.4 53.9 171.9 32 153.4V112c0-8.8 7.2-16 16-16zm416 320H48c-8.8 0-16-7.2-16-16V195c22.8 18.7 58.8 47.6 130.7 104.7 20.5 16.4 56.7 52.5 93.3 52.3 36.4.3 72.3-35.5 93.3-52.3 71.9-57.1 107.9-86 130.7-104.7v205c0 8.8-7.2 16-16 16z'/%3E%3C/svg%3E");
+ }
+
+ &[name='password'] {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='rgba(255,0,0,0.5)' viewBox='0 0 448 512'%3E%3Cpath d='M224 420c-11 0-20-9-20-20v-64c0-11 9-20 20-20s20 9 20 20v64c0 11-9 20-20 20zm224-148v192c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V272c0-26.5 21.5-48 48-48h16v-64C64 71.6 136-.3 224.5 0 312.9.3 384 73.1 384 161.5V224h16c26.5 0 48 21.5 48 48zM96 224h256v-64c0-70.6-57.4-128-128-128S96 89.4 96 160v64zm320 240V272c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h352c8.8 0 16-7.2 16-16z'/%3E%3C/svg%3E");
+ }
+ }
+ }
+ }
+
+ .btnRow {
+ a {
+ font-size: 14px;
+ color: $theme;
+ display: block;
+ margin-top: 15px;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ &.register {
+ .formBox {
+ .main {
+ .form_2 {
+ .formRow {
+ input {
+ padding-right: 20px;
+
+ &[name='email'] {
+ background-image: none;
+ }
+
+ &[name='password'] {
+ background-image: none;
+ }
+
+ &[name='mobile'],
+ &[name='password_confirmation'],
+ &[name='national_code'] {
+ direction: ltr;
+ text-align: right;
+ }
+ }
+
+ &.err {
+ input {
+ &[name='email'] {
+ background-image: none;
+ }
+
+ &[name='password'] {
+ background-image: none;
+ }
+ }
+ }
+
+ &.addressTextArea {
+ textarea {
+ display: block;
+ width: 95%;
+ max-width: 95%;
+ height: 70px;
+ padding-right: 20px;
+ margin-right: 2.5% !important;
+ resize: none !important;
+ }
+ }
+
+ .el-select {
+ .el-input__suffix {
+ right: 0;
+ left: 20px;
+ text-align: left;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .hasValidationError {
+ height: 1570px !important;
+
+ //@media (max-width: 992px) {
+ // height: 1100px !important;
+ //}
+ }
+ }
+
+ &.reset-pass {
+ .formBox {
+ .main {
+ padding: 100px 0;
+
+ &.hasMessage {
+ padding: 50px 0;
+ }
+
+ .form_2 {
+ .title {
+ margin-bottom: 30px;
+ }
+
+ .btnRow {
+ button {
+ margin-top: 0;
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/agent-guarantee-details.scss b/sass/pages/user-dashboard/agent-guarantee-details.scss
new file mode 100644
index 0000000..e420390
--- /dev/null
+++ b/sass/pages/user-dashboard/agent-guarantee-details.scss
@@ -0,0 +1,104 @@
+.user-dashboard {
+ &.agent-guarantee-details {
+ .agentActions {
+ margin-bottom: 50px;
+
+ .statuses {
+ h3 {
+ margin-bottom: 20px;
+ }
+
+ .btns {
+ @media (max-width: 992px) {
+ text-align: center;
+ }
+
+ button {
+ margin-bottom: 5px;
+ }
+ }
+ }
+
+ .timeLine {
+ h3 {
+ margin-bottom: 20px;
+ }
+
+ ul {
+ li {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 5px;
+ padding: 0 4px;
+ @include borderRadius(3px);
+
+ span {
+ display: block;
+
+ &:last-child {
+ font-family: sans-serif;
+ direction: ltr !important;
+ }
+ }
+
+ // define colors opacity
+ $colorsOpacity: 0.1;
+
+ &.saved {
+ background: rgba(gray, $colorsOpacity);
+ }
+ &.recieved {
+ background: rgba($theme, $colorsOpacity);
+ }
+ &.ongoing {
+ background: rgba(orange, $colorsOpacity);
+ }
+ &.waiting {
+ background: rgba(orangered, $colorsOpacity);
+ }
+ &.delivered {
+ background: rgba(green, $colorsOpacity);
+ }
+ }
+ }
+ }
+ }
+
+ .formDB {
+ flex-basis: 100%;
+ text-align: center;
+ margin-top: -20px;
+ margin-bottom: 20px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ img {
+ width: 100%;
+ max-width: 200px;
+ @extend %userSelect;
+ }
+
+ i,
+ span {
+ display: block;
+ font-size: 20px;
+ color: $theme;
+ }
+ span {
+ margin-right: 8px;
+ font-family: 'iranYekanB';
+ }
+ }
+
+ .addToDraftsBtn {
+ text-align: center;
+ margin-top: 20px;
+
+ span {
+ color: #fff;
+ }
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/agent-reports.scss b/sass/pages/user-dashboard/agent-reports.scss
new file mode 100644
index 0000000..237b383
--- /dev/null
+++ b/sass/pages/user-dashboard/agent-reports.scss
@@ -0,0 +1,183 @@
+.user-dashboard {
+ &.agent-reports {
+ .reportTypes {
+ text-align: center;
+
+ button {
+ margin-bottom: 5px;
+ }
+ }
+
+ .reportOptions {
+ .el-form {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+
+ .datePickerWrapper {
+ display: inline-block;
+ width: 100%;
+
+ .vpd-input-group {
+ @include borderRadius(3px);
+ overflow: hidden;
+
+ input {
+ &::placeholder {
+ color: rgba(#000, 0.4);
+ }
+ }
+ }
+ .vpd-icon-btn {
+ padding: 12px 10px !important;
+ }
+ }
+
+ .seprator {
+ flex-basis: 100%;
+ background: rgba($theme, 0.1);
+ padding: 2px 8px;
+ @include borderRadius(10px);
+ text-align: center;
+
+ p {
+ color: rgba(#000, 0.3);
+ @extend %userSelect;
+ }
+ }
+
+ .el-form-item {
+ display: block;
+ flex-basis: 33%;
+
+ @media (max-width: 768px) {
+ flex-basis: 100% !important;
+ }
+
+ .el-form-item__content {
+ display: block;
+ width: 100%;
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+ }
+
+ .el-form-item__label {
+ float: none !important;
+ padding-right: 0;
+ }
+ }
+
+ &.inbox {
+ .selectedItem {
+ flex-basis: 100%;
+ }
+ }
+
+ &.pr {
+ .fromItemReceptionTransDate {
+ flex-basis: 49.75%;
+ }
+ .toItemReceptionTransDate {
+ flex-basis: 49.75%;
+ }
+ }
+
+ &.opr {
+ .selectedItem {
+ flex-basis: 49.75%;
+ }
+ .pieceId {
+ flex-basis: 49.75%;
+ }
+ .fromItemReceptionTransDate {
+ flex-basis: 49.75%;
+ }
+ .toItemReceptionTransDate {
+ flex-basis: 49.75%;
+ }
+ }
+
+ &.br {
+ .selectedItem {
+ flex-basis: 100%;
+ }
+ }
+
+ &.gr {
+ .fromDate {
+ flex-basis: 49.75%;
+ }
+ .toDate {
+ flex-basis: 49.75%;
+ }
+
+ .selectedItem {
+ flex-basis: 100%;
+ }
+
+ .fromRecieveDate {
+ flex-basis: 49.75%;
+ }
+ .toRecieveDate {
+ flex-basis: 49.75%;
+ }
+ .fromDeliverDate {
+ flex-basis: 49.75%;
+ }
+ .toDeliverDate {
+ flex-basis: 49.75%;
+ }
+ }
+ }
+
+ .btnRow {
+ margin-top: 30px;
+ text-align: center;
+ }
+ }
+
+ .reportResult {
+ margin-top: 50px;
+
+ .infoCharts {
+ text-align: center;
+
+ .c-tooltip-header {
+ margin-bottom: 2px;
+ }
+ .c-tooltip-body-item {
+ span {
+ color: #fff;
+ margin-right: 5px;
+ margin-left: 5px;
+ }
+ }
+ }
+
+ .resultList {
+ .showDetailsBtn {
+ background: transparent;
+ border: 1px solid rgba(#000, 0.2);
+ @include borderRadius(4px);
+ padding: 4px 16px;
+ cursor: pointer;
+ @extend %defaultTransition;
+
+ i {
+ @extend %defaultTransition;
+ color: rgba(#000, 0.5);
+ }
+
+ &:hover {
+ background: $theme;
+ border-color: $theme;
+
+ i {
+ color: #fff;
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/agent-request-details.scss b/sass/pages/user-dashboard/agent-request-details.scss
new file mode 100644
index 0000000..d36984e
--- /dev/null
+++ b/sass/pages/user-dashboard/agent-request-details.scss
@@ -0,0 +1,72 @@
+.user-dashboard {
+ &.agent-requests-details {
+ .notes {
+ margin-top: 30px;
+
+ h3 {
+ font-family: 'iranyekanB';
+ margin-bottom: 10px;
+ }
+
+ ul {
+ li {
+ list-style: disc;
+ margin-right: 18px;
+ margin-bottom: 5px;
+
+ p {
+ font-family: 'iranYekanB';
+ }
+ }
+ }
+ }
+
+ .addPtoPrModal {
+ .datePickerWrapper {
+ display: inline-block;
+ width: 100%;
+
+ .vpd-main {
+ .vpd-input-group {
+ @include borderRadius(3px);
+ overflow: hidden;
+
+ input {
+ &::placeholder {
+ color: rgba(#000, 0.4);
+ }
+ }
+ }
+
+ // vue persian dateTime picker styles
+ .vpd-icon-btn {
+ padding: 12px 10px !important;
+ }
+ }
+ }
+
+ .btnRow {
+ text-align: center;
+ }
+
+ .el-form {
+ .el-form-item {
+ &.err {
+ .el-form-item__label {
+ color: red;
+ }
+ .errMsg {
+ color: red;
+ }
+ }
+ }
+ }
+
+ &.reportModal {
+ .el-form-item__content {
+ margin-right: 0 !important;
+ }
+ }
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/agent-requests.scss b/sass/pages/user-dashboard/agent-requests.scss
new file mode 100644
index 0000000..6ae501d
--- /dev/null
+++ b/sass/pages/user-dashboard/agent-requests.scss
@@ -0,0 +1,48 @@
+.user-dashboard {
+ &.agent-requests {
+ .addStuffBtn {
+ cursor: pointer;
+ background-color: $theme !important;
+
+ td {
+ text-align: center !important;
+ cursor: pointer;
+
+ button {
+ cursor: pointer;
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border: transparent;
+ background: transparent;
+
+ span {
+ margin-left: 5px;
+ }
+
+ span,
+ i {
+ color: #fff;
+ padding: 0;
+ }
+ }
+ }
+ }
+
+ .search {
+ &.success {
+ input {
+ border-color: green;
+ @include boxShadow(0px 4px 6px rgba(green, 0.3));
+ }
+ }
+ &.error {
+ input {
+ border-color: red;
+ @include boxShadow(0px 4px 6px rgba(red, 0.2));
+ }
+ }
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/announcements.scss b/sass/pages/user-dashboard/announcements.scss
new file mode 100644
index 0000000..3713beb
--- /dev/null
+++ b/sass/pages/user-dashboard/announcements.scss
@@ -0,0 +1,31 @@
+.user-dashboard {
+ &.announcements {
+ .item {
+ @include boxShadow(0 4px 8px rgba(#000, 0.1));
+ @extend %defaultBorderRadius;
+ @extend %defaultTransition;
+ padding: 10px;
+ margin-bottom: 10px;
+
+ &.active {
+ background: rgba(green, 0.1);
+ }
+
+ &.unread {
+ background: rgba(orange, 0.1);
+ }
+
+ div {
+ border-top: none !important;
+ background: transparent !important;
+ border-bottom: none !important;
+ }
+
+ .el-collapse-item__content {
+ background: rgba($theme, 0.05) !important;
+ @extend %defaultBorderRadius;
+ padding: 10px;
+ }
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/factor.scss b/sass/pages/user-dashboard/factor.scss
new file mode 100644
index 0000000..cb0abf0
--- /dev/null
+++ b/sass/pages/user-dashboard/factor.scss
@@ -0,0 +1,13 @@
+.user-dashboard {
+ &.factor {
+ .factor {
+ .table {
+ table {
+ min-width: 1000px;
+ }
+
+ overflow: auto;
+ }
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/guarantee-details.scss b/sass/pages/user-dashboard/guarantee-details.scss
new file mode 100644
index 0000000..6709938
--- /dev/null
+++ b/sass/pages/user-dashboard/guarantee-details.scss
@@ -0,0 +1,8 @@
+.user-dashboard {
+ &.guarantee-details {
+ hr {
+ width: 70%;
+ margin: 50px auto;
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/guarantee.scss b/sass/pages/user-dashboard/guarantee.scss
new file mode 100644
index 0000000..6859c0c
--- /dev/null
+++ b/sass/pages/user-dashboard/guarantee.scss
@@ -0,0 +1,25 @@
+.user-dashboard {
+ &.guarantee {
+ .search {
+ &.success {
+ input {
+ border-color: green;
+ @include boxShadow(0px 4px 6px rgba(green, 0.3));
+ }
+ }
+ &.error {
+ input {
+ border-color: red;
+ @include boxShadow(0px 4px 6px rgba(red, 0.2));
+ }
+ }
+ }
+
+ @media (max-width: 768px) {
+ .switchBtns {
+ width: 100%;
+ margin-top: 5px;
+ }
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/index.scss b/sass/pages/user-dashboard/index.scss
new file mode 100644
index 0000000..a745c99
--- /dev/null
+++ b/sass/pages/user-dashboard/index.scss
@@ -0,0 +1,89 @@
+.user-dashboard {
+ overflow: visible;
+
+ .panel {
+ background: #fff;
+ min-height: calc(100vh - 300px);
+ border-top-left-radius: 15px;
+ border-top-right-radius: 15px;
+ @include transform(translateY(-110px));
+ z-index: 2;
+ padding: 15px;
+ margin-bottom: 100px;
+
+ @media (max-width: 992px) {
+ @include transform(translateY(0));
+ margin-top: 50px;
+ }
+
+ @media (max-width: 575px) {
+ margin-left: -30px;
+ margin-right: -30px;
+ }
+
+ .panel-title {
+ @include transform(translate(15px, -55px));
+
+ p {
+ color: #fff;
+ font-family: 'iranYekanB';
+ font-size: 20px;
+ font-weight: bold;
+
+ @media (max-width: 992px) {
+ color: #000;
+ }
+ }
+ }
+ }
+
+ .notice {
+ display: none;
+ color: red;
+ font-size: 12px;
+ font-weight: bold;
+
+ @media (max-width: 1400px) {
+ display: block;
+ }
+ }
+
+ .form {
+ .formRow {
+ @media (max-width: 768px) {
+ flex-basis: 100% !important;
+ }
+ }
+ }
+
+ .form_3 {
+ display: flex;
+ flex-wrap: wrap;
+
+ .userInfo {
+ display: flex;
+ flex-basis: 100%;
+ flex-wrap: wrap;
+ justify-content: space-between;
+
+ .formRow {
+ flex-basis: 33%;
+ }
+ }
+ }
+
+ .buttons {
+ label {
+ cursor: pointer;
+ }
+ }
+
+ .paymentFactorBtn {
+ strong {
+ font-family: 'iranYekanB';
+ display: block;
+ margin-bottom: 30px;
+ line-height: 1.6em;
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/layout.scss b/sass/pages/user-dashboard/layout.scss
new file mode 100644
index 0000000..ad06fca
--- /dev/null
+++ b/sass/pages/user-dashboard/layout.scss
@@ -0,0 +1,218 @@
+.user-dashboard-layout {
+ .topBG {
+ height: 200px;
+ background: $theme;
+ position: relative;
+
+ .user-name {
+ position: absolute;
+ bottom: 5px;
+ right: 18px;
+
+ a {
+ display: inline-block;
+ max-width: 250px;
+ position: relative;
+ padding-right: 35px;
+
+ &:hover {
+ background: rgba(0, 0, 0, 0);
+ }
+
+ &.active {
+ background: rgba(0, 0, 0, 0);
+ }
+
+ a,
+ span,
+ i {
+ font-size: 18px;
+ color: #fff;
+ }
+
+ i {
+ position: absolute;
+ top: 50%;
+ right: 10px;
+ @include transform(translateY(-50%));
+ }
+
+ span {
+ font-family: 'iranYekanB', sans-serif;
+ font-weight: bold;
+ }
+ }
+ }
+
+ @media (max-width: 992px) {
+ height: 60px;
+
+ .user-name {
+ display: none;
+ }
+ }
+ }
+
+ .page {
+ min-height: calc(100vh - 235px);
+
+ @media (max-width: 992px) {
+ min-height: calc(100vh - 150px);
+ }
+ }
+
+ .user-aside {
+ @media (max-width: 992px) {
+ background: #fff;
+ }
+
+ ul {
+ display: inline-block;
+ min-height: 600px;
+ padding-right: 5px;
+ padding-top: 5px;
+
+ li {
+ @extend %defaultTransition;
+ border-top-left-radius: 25px;
+ border-bottom-left-radius: 25px;
+ cursor: pointer;
+ margin-bottom: 2px;
+
+ &:hover {
+ background: rgba(0, 0, 0, 0.1);
+ }
+
+ &.username {
+ display: none;
+
+ a {
+ display: block;
+ position: relative;
+ padding-right: 30px;
+
+ i {
+ position: absolute;
+ top: 50%;
+ right: 10px;
+ @include transform(translateY(-50%));
+ }
+ }
+
+ span {
+ font-family: 'iranYekanB', sans-serif;
+ font-weight: bold;
+ }
+ }
+
+ &.active {
+ background: rgba(0, 0, 0, 0.1);
+ }
+
+ a {
+ padding: 10px;
+ width: 100%;
+ }
+
+ a,
+ span,
+ i {
+ display: inline-block;
+ color: #000;
+ font-weight: bold;
+ font-size: 14px;
+ }
+
+ span {
+ margin-right: 3px;
+ }
+
+ .badge {
+ display: inline-block;
+ $size: 20px;
+ width: $size;
+ height: $size;
+ text-align: center;
+ font-family: 'sans-serif';
+ line-height: $size;
+ font-size: 12px;
+ color: #fff;
+ background: red;
+ @include borderRadius(50%);
+ }
+ }
+
+ @media (max-width: 992px) {
+ min-height: auto;
+ max-width: 100%;
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ flex-wrap: wrap;
+ padding: 3px !important;
+
+ li {
+ margin: 0 10px !important;
+ padding: 0 !important;
+
+ a {
+ span,
+ i {
+ color: #000 !important;
+ font-size: 16px !important;
+ }
+ }
+
+ @include borderRadius(5px);
+
+ &.username {
+ display: block;
+ }
+
+ &:hover {
+ background: rgba(0, 0, 0, 0.1) !important;
+ }
+
+ &.active {
+ background: rgba(0, 0, 0, 0.1) !important;
+ }
+ }
+ }
+ }
+
+ .seprator {
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ @extend %userSelect;
+
+ .line {
+ flex-grow: 1;
+ height: 1px;
+ background: $darkGray;
+ opacity: 0.3;
+ margin-right: 5px;
+ @include borderRadius(4px);
+ }
+
+ .txt {
+ span {
+ font-size: 12px;
+ }
+ }
+
+ @media (max-width: 992px) {
+ display: block;
+ width: 100%;
+ margin-top: 5px;
+ margin-bottom: 10px;
+
+ .line {
+ margin-right: 0;
+ margin-top: 2px;
+ opacity: 0.15;
+ }
+ }
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/post-address.scss b/sass/pages/user-dashboard/post-address.scss
new file mode 100644
index 0000000..79b68e3
--- /dev/null
+++ b/sass/pages/user-dashboard/post-address.scss
@@ -0,0 +1,56 @@
+.user-dashboard {
+ &.post-address {
+ h2 {
+ text-align: center;
+ margin-top: 50px;
+ color: $theme;
+ }
+
+ .el-dialog {
+ .form_3 {
+ display: flex;
+ flex-wrap: wrap;
+
+ .formRow {
+ flex-basis: 33.33%;
+ }
+
+ .title {
+ flex-basis: 100%;
+ margin-bottom: 30px;
+
+ p {
+ color: #000;
+ font-weight: bold;
+ font-family: 'iranYekanB';
+ font-size: 20px;
+ }
+ }
+
+ hr {
+ flex-basis: 100%;
+ margin-bottom: 30px;
+ }
+
+ .btnRow {
+ button {
+ span {
+ color: #fff;
+ }
+ }
+ }
+ }
+ }
+
+ .buttons {
+ text-align: center;
+ margin-top: 50px;
+
+ button {
+ span {
+ color: #fff;
+ }
+ }
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/post-receipt.scss b/sass/pages/user-dashboard/post-receipt.scss
new file mode 100644
index 0000000..fcefaaa
--- /dev/null
+++ b/sass/pages/user-dashboard/post-receipt.scss
@@ -0,0 +1,119 @@
+.user-dashboard {
+ &.post-receipt {
+ .receipt {
+ border: 1px solid rgba(#000, 0.5);
+
+ .receipt-head {
+ background-color: rgba(#c0c4d1, 1);
+ text-align: center;
+ position: relative;
+
+ svg {
+ width: 100px;
+ display: block;
+ position: absolute;
+ top: 50%;
+ right: 15px;
+ @include transform(translateY(-50%));
+
+ @media (max-width: 992px) {
+ display: none;
+ }
+
+ path,
+ rect {
+ fill: #707070;
+ }
+ }
+
+ p {
+ font-size: 16px;
+ font-family: 'iranYekanB';
+ padding: 15px;
+ color: #000;
+ }
+ }
+
+ .receipt-body {
+ .form_3 {
+ display: flex;
+ flex-wrap: wrap;
+ border: none;
+
+ .formRow {
+ flex-basis: 50%;
+ }
+
+ .title {
+ background: transparent;
+ padding: 0;
+ flex-basis: 97.5%;
+
+ p {
+ font-size: 20px;
+ }
+ }
+ }
+ }
+
+ .receipt-code {
+ margin-bottom: 50px;
+
+ hr {
+ width: 50%;
+ margin-bottom: 50px;
+ }
+
+ p {
+ padding: 20px;
+ background-color: rgba(#e0e6ed, 1);
+ width: 100%;
+ max-width: 500px;
+ margin: 0 auto;
+ text-align: center;
+
+ span {
+ font-size: 20px;
+ font-family: 'iranYekanB', sans-serif;
+ font-weight: bold;
+ color: #000;
+ }
+ }
+ }
+ }
+
+ .print-btn {
+ text-align: left;
+ margin-top: 20px;
+ }
+
+ .box-face-receipt,
+ .box-inner-receipt {
+ margin-top: 100px;
+
+ .title {
+ width: 95%;
+ margin-top: 30px;
+ margin-bottom: 30px;
+ padding: 10px;
+ background: #e0e6ed;
+ margin-left: auto;
+ margin-right: auto;
+
+ p {
+ font-family: 'iranYekanB';
+ font-weight: bold;
+ color: #000;
+ }
+ }
+ }
+
+ .box-inner-receipt {
+ .logo-side {
+ @media (max-width: 992px) {
+ text-align: center;
+ }
+ }
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/post.scss b/sass/pages/user-dashboard/post.scss
new file mode 100644
index 0000000..a272d1c
--- /dev/null
+++ b/sass/pages/user-dashboard/post.scss
@@ -0,0 +1,313 @@
+.user-dashboard {
+ &.post {
+ .form_3 {
+ .formDB {
+ flex-basis: 100%;
+ text-align: center;
+ margin-top: -20px;
+ margin-bottom: 20px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ img {
+ width: 100%;
+ max-width: 200px;
+ @extend %userSelect;
+ }
+
+ i,
+ span {
+ display: block;
+ font-size: 20px;
+ color: $theme;
+ }
+ span {
+ margin-right: 8px;
+ font-family: 'iranYekanB';
+ }
+ }
+
+ .formRow {
+ .el-select {
+ width: 100%;
+
+ .el-input__inner {
+ @include borderRadius(0);
+ }
+
+ .el-input__suffix {
+ right: 0;
+ left: 20px;
+ text-align: left;
+ }
+ }
+ }
+
+ hr {
+ flex-basis: 100%;
+ margin-bottom: 30px;
+ }
+
+ #quantity:disabled {
+ cursor: not-allowed;
+ color: rgba(#000, 0.1) !important;
+ }
+
+ #addBtn {
+ &:focus {
+ outline: 1px solid #000;
+ }
+ }
+ }
+
+ .add-list {
+ margin-top: 50px;
+
+ h2 {
+ margin-bottom: 20px;
+ }
+ }
+
+ .terms {
+ margin-top: 50px;
+
+ h2 {
+ margin-bottom: 20px;
+ }
+
+ .form {
+ padding: 0;
+ margin-top: 30px;
+ margin-bottom: 30px;
+
+ .formRow {
+ padding-right: 0;
+
+ label {
+ padding-right: 0;
+ }
+ }
+ }
+
+ ol {
+ margin-top: 20px;
+ list-style: decimal;
+ list-style-position: inside;
+ margin-bottom: 15px;
+
+ li {
+ margin-bottom: 5px;
+
+ p {
+ display: inline-block;
+ color: rgba(#000, 1) !important;
+ }
+ }
+ }
+
+ .agents {
+ .el-select {
+ width: 100%;
+ max-width: 300px;
+
+ .el-input__inner {
+ width: 100%;
+ @include borderRadius(4px);
+ border: 1px solid rgba(#000, 0.2);
+ }
+
+ .el-input__suffix {
+ right: 0;
+ left: 20px;
+ text-align: left;
+ }
+ }
+
+ .btn {
+ padding: 8px 30px;
+ }
+
+ @media (max-width: 575px) {
+ button {
+ width: 100%;
+ margin-top: 10px;
+ text-align: center;
+ }
+
+ .el-select {
+ max-width: 575px;
+ }
+ }
+ }
+ }
+
+ .form-address {
+ margin-top: 50px;
+
+ h2 {
+ margin-bottom: 20px;
+ }
+
+ .no-address {
+ color: $red;
+ padding: 5px;
+ }
+
+ button {
+ margin-top: 20px;
+ }
+ }
+
+ .formError {
+ color: red;
+ }
+
+ .addStuffBtn {
+ cursor: pointer;
+ background-color: $theme !important;
+
+ td {
+ text-align: center !important;
+ cursor: pointer;
+
+ button {
+ cursor: pointer;
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border: transparent;
+ background: transparent;
+
+ span {
+ margin-left: 5px;
+ }
+
+ span,
+ i {
+ color: #fff;
+ padding: 0;
+ }
+ }
+ }
+ }
+
+ .chooseDataBase {
+ margin-bottom: 50px;
+
+ h2 {
+ margin-bottom: 30px;
+ text-align: center;
+ }
+
+ .brandsList {
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: stretch;
+
+ .brand {
+ flex-basis: 50%;
+ max-width: 250px;
+ padding: 15px;
+ text-align: center;
+
+ &.selected {
+ button {
+ background: $theme;
+
+ img {
+ opacity: 0;
+
+ &.alt {
+ opacity: 1;
+ }
+ }
+
+ i,
+ span {
+ color: #fff;
+ }
+ }
+ }
+
+ button {
+ width: 100%;
+ height: 100%;
+ display: inline-block;
+ overflow: hidden;
+ border: 1px solid $theme;
+ cursor: pointer;
+ @extend %defaultTransition;
+ @extend %defaultBorderRadius;
+ background: transparent;
+ position: relative;
+ padding: 5px;
+
+ &:hover {
+ background: $theme;
+
+ img {
+ opacity: 0;
+
+ &.alt {
+ opacity: 1;
+ }
+ }
+ i,
+ span {
+ color: #fff;
+ }
+ }
+
+ img {
+ display: block;
+ width: 100%;
+ @extend %defaultTransition;
+
+ &.alt {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1;
+ opacity: 0;
+ }
+ }
+
+ i {
+ display: block;
+ font-size: 50px;
+ margin: 10px 0;
+ color: $theme;
+ @extend %defaultTransition;
+ }
+ span {
+ color: $theme;
+ font-family: 'iranYekanB';
+ @extend %defaultTransition;
+ }
+ }
+ }
+ }
+ }
+
+ .btnRow {
+ width: 100%;
+ text-align: right;
+
+ button {
+ margin-top: 20px;
+ display: inline-flex;
+ justify-content: center;
+ align-items: center;
+
+ span {
+ color: #fff;
+ font-family: 'iranYekanR';
+ margin-left: 5px;
+ }
+ }
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/profile.scss b/sass/pages/user-dashboard/profile.scss
new file mode 100644
index 0000000..73aaee1
--- /dev/null
+++ b/sass/pages/user-dashboard/profile.scss
@@ -0,0 +1,40 @@
+.user-dashboard {
+ &.profile {
+ .form_3 {
+ width: 100%;
+
+ #arpa_businessCode {
+ background: $theme;
+ color: #fff;
+ }
+
+ .cs {
+ color: rgba(red, 0.7);
+ font-size: 12px;
+ margin-right: 3px;
+
+ &.confirmed {
+ color: rgba(green, 0.7);
+ }
+ }
+
+ .el-select {
+ width: 100%;
+
+ .el-input__inner {
+ @include borderRadius(0);
+ }
+
+ .el-input__suffix {
+ right: 0;
+ left: 20px;
+ text-align: left;
+ }
+ }
+
+ @media (max-width: 992px) {
+ max-width: 100%;
+ }
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/ticket-messenger.scss b/sass/pages/user-dashboard/ticket-messenger.scss
new file mode 100644
index 0000000..440b569
--- /dev/null
+++ b/sass/pages/user-dashboard/ticket-messenger.scss
@@ -0,0 +1,13 @@
+.user-dashboard {
+ &.ticket-messenger {
+ .messenger {
+ //height: calc(100vh - 460px) !important;
+
+ .messages {
+ height: 100%;
+ overflow: auto;
+ padding-bottom: 100px;
+ }
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/tickets.scss b/sass/pages/user-dashboard/tickets.scss
new file mode 100644
index 0000000..2b7da80
--- /dev/null
+++ b/sass/pages/user-dashboard/tickets.scss
@@ -0,0 +1,32 @@
+.user-dashboard {
+ &.tickets {
+ .rowButtons {
+ a {
+ position: relative;
+
+ span {
+ background: transparent !important;
+ color: #fff !important;
+ display: inline-block !important;
+ padding: 0 !important;
+ }
+
+ i {
+ $size: 25px;
+ width: $size;
+ height: $size;
+ line-height: $size;
+ text-align: center;
+ font-family: sans-serif;
+ position: absolute;
+ top: -8px;
+ right: -10px;
+ font-size: 12px;
+ background: red;
+ color: #fff;
+ @include borderRadius(50%);
+ }
+ }
+ }
+ }
+}
diff --git a/sass/pages/user-dashboard/verify.scss b/sass/pages/user-dashboard/verify.scss
new file mode 100644
index 0000000..83b2a90
--- /dev/null
+++ b/sass/pages/user-dashboard/verify.scss
@@ -0,0 +1,27 @@
+.user-dashboard {
+ &.verify {
+ .verify-labels {
+ cursor: auto !important;
+
+ span {
+ margin-right: 5px;
+ cursor: pointer;
+ @extend %defaultTransition;
+ color: $theme;
+
+ &:hover {
+ color: $theme_darker;
+ }
+
+ &.countdown {
+ color: gray;
+ cursor: not-allowed;
+
+ &:hover {
+ color: gray;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/sass/pages/warranty-terms.scss b/sass/pages/warranty-terms.scss
new file mode 100644
index 0000000..6591336
--- /dev/null
+++ b/sass/pages/warranty-terms.scss
@@ -0,0 +1,86 @@
+.warranty-terms--page {
+ .hero {
+ .bg {
+ background-image: url('/assets/img/warranty-terms/hero.jpg');
+ }
+ }
+
+ .s1 {
+ .term {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ background: #fff;
+ height: 100%;
+ @extend %defaultBorderRadius;
+ @extend %defaultBoxShadow;
+ overflow: hidden;
+
+ .imgBox {
+ flex-basis: 30%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100%;
+
+ img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
+
+ @media (min-width: 1200px) and (max-width: 1400px) {
+ flex-basis: 40%;
+ }
+
+ @media (min-width: 992px) and (max-width: 1200px) {
+ flex-basis: 20%;
+ }
+
+ @media (max-width: 768px) {
+ flex-basis: 100%;
+ height: auto;
+ }
+ }
+
+ .txtBox {
+ flex-basis: 70%;
+ padding: 15px;
+
+ @media (min-width: 1200px) and (max-width: 1400px) {
+ flex-basis: 60%;
+ }
+
+ @media (max-width: 768px) {
+ flex-basis: 100%;
+ }
+
+ h2 {
+ margin-bottom: 20px;
+ color: $theme;
+ }
+
+ p {
+ margin-bottom: 15px;
+ }
+ }
+ }
+ }
+
+ .s2 {
+ text-align: center;
+ direction: ltr;
+ }
+
+ .ck-content {
+ border: 1px solid rgba(#000, 0.1);
+ padding: 15px;
+ @extend %defaultBorderRadius;
+ }
+
+ .submit {
+ span {
+ color: #fff;
+ }
+ }
+}
diff --git a/server/ArpaWebservice.js b/server/ArpaWebservice.js
new file mode 100644
index 0000000..a4912ee
--- /dev/null
+++ b/server/ArpaWebservice.js
@@ -0,0 +1,173 @@
+const axios = require('axios')
+
+/// /////////////////////////////////////////////////////////////////////////////////////////////////// verity WebService
+const {
+ // verity
+ verityBaseUrl,
+ verityTokenUrl,
+ // VerityUserGroupId,
+ VerityBusinessCategoryId,
+ // VerityStockAreaId,
+ verityAccount,
+
+ // panatech
+ panatechBaseUrl,
+ panatechTokenUrl,
+ // PanatechUserGroupId,
+ PanatechBusinessCategoryId,
+ // PanatechStockAreaId,
+ panatechAccount
+} = require('./_env')
+
+// get verity token
+let verityToken = ''
+module.exports.getVerityToken = async () => {
+ try {
+ const getToken = await axios.get(verityTokenUrl, { params: verityAccount })
+ verityToken = getToken.data
+ console.log(verityToken)
+ } catch (err) {
+ console.log(err)
+ }
+}
+
+const verityAxiosConfig = () => {
+ return {
+ baseURL: verityBaseUrl,
+ headers: {
+ Authorization: verityToken
+ }
+ }
+}
+
+// export verity values
+module.exports.verityAxiosConfig = verityAxiosConfig
+
+/// /////////////////////////////////////////////////////////////////////////////////////////////////// panatech WebService
+
+// get panatech token
+let panatechToken = ''
+module.exports.getPanatechToken = async () => {
+ try {
+ const getToken = await axios.get(panatechTokenUrl, { params: panatechAccount })
+ panatechToken = getToken.data
+ console.log(panatechToken)
+ } catch (err) {
+ console.log(err)
+ }
+}
+
+const panatechAxiosConfig = () => {
+ return {
+ baseURL: panatechBaseUrl,
+ headers: {
+ Authorization: panatechToken
+ }
+ }
+}
+
+// export panatech values
+module.exports.panatechAxiosConfig = panatechAxiosConfig
+
+/// /////////////////////////////////////////////////////////////////////////////////////////////////// methods
+function axiosConfig(db) {
+ if (db === 'verity') return verityAxiosConfig()
+ else if (db === 'panatech') return panatechAxiosConfig()
+ else return {}
+}
+
+function BusinessCategoryId(db) {
+ if (db === 'panatech') return PanatechBusinessCategoryId
+ else if (db === 'verity') return VerityBusinessCategoryId
+ else return null
+}
+
+module.exports.saveTransactionToArpa = (data, items, db) => {
+ // add static values to data
+ data.TransactionID = 'null'
+ data.BusinessCode = 'null'
+ data.DocAliasID = 144
+ data.TrMessage = ''
+
+ const ArpaData = {
+ Data: data,
+ Items: items
+ }
+
+ // @example
+ // const arpaExample = {
+ // "Data": {"TransactionID": null, "BusinessID": 3, "DocAliasId": 144, "Description": "تست", "cAddress1": "تهران", "cTel1": "0218884455", "TransCCustom1": "آقای موسوی"},
+ // "Items": [{"TransLineID": null, "itemId": 5302, "MjQty": 20, "StockAreaId": 1}, {"TransLineID": null, "itemId": 5302, "MjQty": 20, "StockAreaId": 1}]
+ // }
+
+ return new Promise(async (resolve, reject) => {
+ try {
+ const transaction = await axios.post('/api/NewTransaction', ArpaData, axiosConfig(db))
+ const ArpaResponse = transaction.data
+
+ if (ArpaResponse.data) resolve(ArpaResponse.data[0].TransNumber)
+ else reject(ArpaResponse.error || 'ARPA WebService Error')
+ } catch (e) {
+ reject(e)
+ }
+ })
+}
+
+module.exports.saveUserToArpa = (userData, db) => {
+ const data = {
+ BusName: userData.first_name + ' ' + userData.last_name + ' (گارانتی سایت) ',
+ Email: userData.email,
+ PhoneNo: userData.tel_number,
+ Mobile: userData.mobile_number,
+ Name: userData.first_name,
+ Family: userData.last_name,
+ NationalCode: userData.national_code,
+ ProvinceId: userData.province_id,
+ CityId: userData.city_id,
+ Address: userData.address,
+ PostalCode: userData.postal_code,
+ BusinessCategoryId: BusinessCategoryId(db)
+ }
+
+ return new Promise(async (resolve, reject) => {
+ try {
+ const ArpaID = await axios.get('/api/postBusiness', { ...axiosConfig(db), params: { ...data } })
+ if (!ArpaID.data.data) return reject(new Error('Cant save new user -- There is a problem in ArpaWebService'))
+
+ resolve({
+ businessID: ArpaID.data.data.BusinessId,
+ businessCode: ArpaID.data.data.BusinessCode
+ })
+ } catch (e) {
+ reject(e)
+ }
+ })
+}
+
+module.exports.updateUserOnArpa = (userData, arpa_businessID, db) => {
+ const data = {
+ BusName: userData.first_name + ' ' + userData.last_name + ' (گارانتی سایت) ',
+ Email: userData.email,
+ PhoneNo: userData.tel_number,
+ Mobile: userData.mobile_number,
+ Name: userData.first_name,
+ Family: userData.last_name,
+ NationalCode: userData.national_code,
+ ProvinceId: userData.province_id,
+ CityId: userData.city_id,
+ Address: userData.address,
+ PostalCode: userData.postal_code,
+ BusinessCategoryId: BusinessCategoryId(db),
+ BusinessID: arpa_businessID
+ }
+
+ return new Promise(async (resolve, reject) => {
+ try {
+ const ArpaUpdate = await axios.post('/api/putBusiness', data, axiosConfig(db))
+ if (!ArpaUpdate.data.status) reject(new Error('Cant update user -- There is a problem in ArpaWebService'))
+ resolve('updated successfully')
+ } catch (e) {
+ reject(e)
+ }
+ })
+}
diff --git a/server/WebSocket/controllers/admin_EventsController.js b/server/WebSocket/controllers/admin_EventsController.js
new file mode 100644
index 0000000..f6edf8d
--- /dev/null
+++ b/server/WebSocket/controllers/admin_EventsController.js
@@ -0,0 +1,112 @@
+const User = require('../../models/User')
+const ContactPageMessage = require('../../models/ContactPageMessage')
+const TicketConversation = require('../../models/TicketConversation')
+const Representation = require('../../models/Representation')
+const PieceRequest = require('../../models/PieceRequest')
+const OldPieceRequest = require('../../models/OldPieceRequest')
+const BufferRequest = require('../../models/BufferRequest')
+const GuaranteeReport = require('../../models/GuaranteeReport')
+
+module.exports.getAllNotifs = async socket => {
+ try {
+ const allData = await Promise.all([
+ // unreadCuMsgs
+ ContactPageMessage.find({ read: false }),
+
+ // unreadTickets
+ TicketConversation.find({ messages: { $elemMatch: { isUser: true, read: false } } }),
+
+ // newCustomers
+ User.find({ scope: ['user'], seenByAdmin: false, confirmed: true }),
+
+ // newRepresentations
+ Representation.find({ status: 'registered' }),
+
+ // newPieceRequests
+ PieceRequest.find({ status: 'sent' }),
+
+ // newOldPieceRequests
+ OldPieceRequest.find({ status: 'sent' }),
+
+ // newBufferRequests
+ BufferRequest.find({ status: 'sent' }),
+
+ // newGuaranteeReports
+ GuaranteeReport.find({ status: 'sent', seen: false })
+ ])
+
+ const unreadCuMsgs = allData[0]
+ const unreadTickets = allData[1]
+ const newCustomers = allData[2]
+ const newRepresentations = allData[3]
+ const newPieceRequests = allData[4]
+ const newOldPieceRequests = allData[5]
+ const newBufferRequests = allData[6]
+ const newGuaranteeReports = allData[7]
+
+ socket.emit(`admin:allNotifs`, {
+ unreadCuMsgs: unreadCuMsgs.length,
+ unreadTickets: unreadTickets.length,
+ newCustomers: newCustomers.length,
+ newRepresentations: newRepresentations.length,
+ newPieceRequests: newPieceRequests.length,
+ newOldPieceRequests: newOldPieceRequests.length,
+ newBufferRequests: newBufferRequests.length,
+ newGuaranteeReports: newGuaranteeReports.length
+ })
+ } catch (e) {
+ console.log(e)
+ }
+}
+
+module.exports.notifyAdmin = async type => {
+ try {
+ const io = global._io
+ const admin = io.of('/admin')
+ const data = { type }
+
+ if (type === 'updateNewCustomers') {
+ const newCustomers = await User.find({ scope: ['user'], seenByAdmin: false })
+ data.newCustomers = newCustomers.length
+ }
+
+ if (type === 'updateUnreadCuMsgs') {
+ const unreadCuMsgs = await ContactPageMessage.find({ read: false })
+ data.unreadCuMsgs = unreadCuMsgs.length
+ }
+
+ if (type === 'updateUnreadTickets') {
+ const unreadTickets = await TicketConversation.find({ messages: { $elemMatch: { isUser: true, read: false } } })
+ data.unreadTickets = unreadTickets.length
+ }
+
+ if (type === 'updateNewRepresentations') {
+ const newRepresentations = await Representation.find({ status: 'registered' })
+ data.newRepresentations = newRepresentations.length
+ }
+
+ if (type === 'updateNewPieceRequests') {
+ const newPieceRequests = await PieceRequest.find({ status: 'sent' })
+ data.newPieceRequests = newPieceRequests.length
+ }
+
+ if (type === 'updateNewOldPieceRequests') {
+ const newOldPieceRequests = await OldPieceRequest.find({ status: 'sent' })
+ data.newOldPieceRequests = newOldPieceRequests.length
+ }
+
+ if (type === 'updateNewBufferRequests') {
+ const newBufferRequests = await BufferRequest.find({ status: 'sent' })
+ data.newBufferRequests = newBufferRequests.length
+ }
+
+ if (type === 'updateNewGuaranteeReports') {
+ const newGuaranteeReports = await GuaranteeReport.find({ status: 'sent', seen: false })
+ data.newGuaranteeReports = newGuaranteeReports.length
+ }
+
+ admin.emit(`admin:notify`, data)
+ } catch (e) {
+ console.log(e)
+ }
+}
diff --git a/server/WebSocket/controllers/agent_EventsController.js b/server/WebSocket/controllers/agent_EventsController.js
new file mode 100644
index 0000000..58f1f07
--- /dev/null
+++ b/server/WebSocket/controllers/agent_EventsController.js
@@ -0,0 +1,84 @@
+const Transaction = require('../../models/Transaction')
+const Announcement = require('../../models/Announcement')
+
+module.exports.getAllNotifs = async socket => {
+ try {
+ const agentInbox = await Transaction.find({ agent_id: socket.agentId, seen: false })
+
+ socket.emit(`agent:allNotifs`, {
+ agentInbox: agentInbox.length
+ })
+ } catch (e) {
+ console.log(e)
+ }
+}
+
+module.exports.notifyAgent = async (type, agent_id) => {
+ try {
+ const io = global._io
+ const agent = io.of('/agent')
+ const data = { type }
+
+ if (type === 'updateAgentInbox') {
+ const agentInbox = await Transaction.find({ agent_id, seen: false })
+ data.agentInbox = agentInbox.length
+ }
+
+ agent.to(agent_id.toString()).emit(`agent:notify`, data)
+ } catch (e) {
+ console.log(e)
+ }
+}
+
+module.exports.notifyAllAgents = type => {
+ try {
+ const io = global._io
+ const agent = io.of('/agent')
+ const data = { type }
+
+ agent.emit('agent:notifyAll', data)
+ } catch (e) {
+ console.log(e)
+ }
+}
+
+module.exports.fetchAnnouncements = async socket => {
+ try {
+ const announcements = await Announcement.find({ expired: false, isForAgents: true })
+ const modifiedAnnouncements = []
+ let newAnnouncementsCount = 0
+ for await (const announcement of announcements) {
+ const notif = { ...announcement._doc, seen: true }
+ if (!notif.seenBy.includes(socket.userId)) {
+ notif.seen = false
+ newAnnouncementsCount++
+ }
+ delete notif.seenBy
+ delete notif.expired
+ delete notif.isForAgents
+ delete notif._creator
+ modifiedAnnouncements.push(notif)
+ }
+
+ socket.emit('agent:announcements', {
+ newAgentAnnosCount: newAnnouncementsCount,
+ agentAnnouncements: modifiedAnnouncements.reverse()
+ })
+ } catch (e) {
+ console.log(e)
+ }
+}
+
+module.exports.updateAnnouncement = async (socket, id) => {
+ try {
+ if (id) {
+ const announcment = await Announcement.findById(id)
+ if (!announcment) throw new Error('invalid announcemnet id')
+ if (!announcment.seenBy.includes(socket.userId)) announcment.seenBy.push(socket.userId)
+ await announcment.save()
+ socket.emit('agent:fetchNewAnnouncements')
+ }
+ } catch (e) {
+ console.log(e)
+ }
+}
diff --git a/server/WebSocket/controllers/user_EventsController.js b/server/WebSocket/controllers/user_EventsController.js
new file mode 100644
index 0000000..2ebd87f
--- /dev/null
+++ b/server/WebSocket/controllers/user_EventsController.js
@@ -0,0 +1,98 @@
+const TransactionDrafts = require('../../models/TransactionDraft')
+const TicketConversation = require('../../models/TicketConversation')
+const Announcement = require('../../models/Announcement')
+
+module.exports.getAllNotifs = async socket => {
+ try {
+ const drafts = await TransactionDrafts.find({ user_id: socket.userId })
+ const unreadTickets = await TicketConversation.find({
+ user_id: socket.userId,
+ messages: { $elemMatch: { isUser: false, read: false } }
+ })
+
+ socket.emit(`user:allNotifs`, {
+ unreadTickets: unreadTickets.length,
+ draftsCount: drafts.length
+ })
+ } catch (e) {
+ console.log(e)
+ }
+}
+
+module.exports.notifyUser = async (type, user_id) => {
+ try {
+ const io = global._io
+ const user = io.of('/user')
+ const data = { type }
+
+ if (type === 'updateUnreadTickets') {
+ const unreadTickets = await TicketConversation.find({
+ user_id,
+ messages: { $elemMatch: { isUser: false, read: false } }
+ })
+
+ data.unreadTickets = unreadTickets.length
+ }
+ if (type === 'updateDraftsCount') {
+ const drafts = await TransactionDrafts.find({ user_id })
+ data.draftsCount = drafts.length
+ }
+
+ user.to(user_id.toString()).emit(`user:notify`, data)
+ } catch (e) {
+ console.log(e)
+ }
+}
+
+module.exports.notifyAllUsers = type => {
+ try {
+ const io = global._io
+ const user = io.of('/user')
+ const data = { type }
+
+ user.emit(`user:notifyAll`, data)
+ } catch (e) {
+ console.log(e)
+ }
+}
+
+module.exports.fetchAnnouncements = async socket => {
+ try {
+ const announcements = await Announcement.find({ expired: false, isForAgents: false })
+ const modifiedAnnouncements = []
+ let newAnnouncementsCount = 0
+ for await (const announcement of announcements) {
+ const notif = { ...announcement._doc, seen: true }
+ if (!notif.seenBy.includes(socket.userId)) {
+ notif.seen = false
+ newAnnouncementsCount++
+ }
+ delete notif.seenBy
+ delete notif.expired
+ delete notif.isForAgents
+ delete notif._creator
+ modifiedAnnouncements.push(notif)
+ }
+
+ socket.emit('user:announcements', {
+ newUserAnnosCount: newAnnouncementsCount,
+ userAnnouncements: modifiedAnnouncements.reverse()
+ })
+ } catch (e) {
+ console.log(e)
+ }
+}
+
+module.exports.updateAnnouncement = async (socket, id) => {
+ try {
+ if (id) {
+ const announcment = await Announcement.findById(id)
+ if (!announcment) throw new Error('invalid announcemnet id')
+ if (!announcment.seenBy.includes(socket.userId)) announcment.seenBy.push(socket.userId)
+ await announcment.save()
+ socket.emit('user:fetchNewAnnouncements')
+ }
+ } catch (e) {
+ console.log(e)
+ }
+}
diff --git a/server/WebSocket/middlewares/ws_authentication.js b/server/WebSocket/middlewares/ws_authentication.js
new file mode 100644
index 0000000..dad95ea
--- /dev/null
+++ b/server/WebSocket/middlewares/ws_authentication.js
@@ -0,0 +1,67 @@
+const jwt = require('jsonwebtoken')
+const User = require('../../models/User')
+const authentication = require('../../authentication')
+
+module.exports.isAdmin = async (socket, next) => {
+ try {
+ const token = socket.handshake?.auth?.token
+ if (!token) throw new Error('unauthenticated')
+
+ // verifies secret and checks if the token is expired
+ const decodedToken = await jwt.verify(token.replace(/^Bearer\s/, ''), authentication.secretKey)
+ if (!decodedToken) throw new Error('unauthorized')
+
+ // find user
+ const user = await User.findById(decodedToken._id)
+ if (!user || !user.scope.includes('admin')) throw new Error('unauthorized')
+
+ socket.userId = decodedToken._id.toString()
+ return next()
+ } catch (e) {
+ // console.log('ws user middleware error --- ', e)
+ next(new Error(e))
+ }
+}
+
+module.exports.isUser = async (socket, next) => {
+ try {
+ const token = socket.handshake?.auth?.token
+ if (!token) throw new Error('unauthenticated')
+
+ // verifies secret and checks if the token is expired
+ const decodedToken = await jwt.verify(token.replace(/^Bearer\s/, ''), authentication.secretKey)
+ if (!decodedToken) throw new Error('unauthorized')
+
+ // find user
+ const user = await User.findById(decodedToken._id)
+ if (!user || !user.scope.includes('user')) throw new Error('unauthorized')
+
+ socket.userId = decodedToken._id.toString()
+ return next()
+ } catch (e) {
+ // console.log('ws user middleware error --- ', e)
+ next(new Error(e))
+ }
+}
+
+module.exports.isAgent = async (socket, next) => {
+ try {
+ const token = socket.handshake?.auth?.token
+ if (!token) throw new Error('unauthenticated')
+
+ // verifies secret and checks if the token is expired
+ const decodedToken = await jwt.verify(token.replace(/^Bearer\s/, ''), authentication.secretKey)
+ if (!decodedToken) throw new Error('unauthorized')
+
+ // find user
+ const user = await User.findById(decodedToken._id)
+ if (!user || !user.scope.includes('user')) throw new Error('unauthorized')
+ if (!user.isAgent) throw new Error('شما نماینده نیستید')
+
+ socket.userId = decodedToken._id.toString()
+ socket.agentId = user.representation_id.toString()
+ return next()
+ } catch (e) {
+ next(new Error(e))
+ }
+}
diff --git a/server/WebSocket/namespaces/admin_NameSpace.js b/server/WebSocket/namespaces/admin_NameSpace.js
new file mode 100644
index 0000000..e4e717b
--- /dev/null
+++ b/server/WebSocket/namespaces/admin_NameSpace.js
@@ -0,0 +1,23 @@
+const { isAdmin } = require('../middlewares/ws_authentication')
+const adminEventsController = require('../controllers/admin_EventsController')
+
+module.exports.adminNamespace = () => {
+ const io = global._io
+ const admin = io.of('/admin')
+
+ // admins middlewares
+ admin.use(isAdmin)
+
+ // attach events
+ admin.on('connection', socket => {
+ adminEventsController.getAllNotifs(socket)
+
+ /// /////////////////////////////////////////////////////// handle connection error
+ socket.on('connect_error', err => {
+ console.log(err.message)
+ })
+
+ /// ////////////////////////////////////////////////////// events
+ // socket.on('admin:getNotifs', () => adminEventsController.getAllNotifs(socket))
+ })
+}
diff --git a/server/WebSocket/namespaces/agent_NameSpace.js b/server/WebSocket/namespaces/agent_NameSpace.js
new file mode 100644
index 0000000..86186a2
--- /dev/null
+++ b/server/WebSocket/namespaces/agent_NameSpace.js
@@ -0,0 +1,25 @@
+const { isAgent } = require('../middlewares/ws_authentication')
+const agentEventsController = require('../controllers/agent_EventsController')
+
+module.exports.agentNamespace = () => {
+ const io = global._io
+ const agent = io.of('/agent')
+
+ // agents middlewares
+ agent.use(isAgent)
+
+ // attach events
+ agent.on('connection', socket => {
+ socket.join(socket.agentId)
+ agentEventsController.getAllNotifs(socket)
+
+ /// /////////////////////////////////////////////////////// handle connection error
+ socket.on('connect_error', err => {
+ console.log(err.message)
+ })
+
+ /// ////////////////////////////////////////////////////// events
+ socket.on('agent:fetchAnnouncements', data => agentEventsController.fetchAnnouncements(socket))
+ socket.on('agent:updateAnnouncement', data => agentEventsController.updateAnnouncement(socket, data))
+ })
+}
diff --git a/server/WebSocket/namespaces/user_NameSpace.js b/server/WebSocket/namespaces/user_NameSpace.js
new file mode 100644
index 0000000..c83ca38
--- /dev/null
+++ b/server/WebSocket/namespaces/user_NameSpace.js
@@ -0,0 +1,25 @@
+const { isUser } = require('../middlewares/ws_authentication')
+const userEventsController = require('../controllers/user_EventsController')
+
+module.exports.userNamespace = () => {
+ const io = global._io
+ const user = io.of('/user')
+
+ // users middlewares
+ user.use(isUser)
+
+ // attach events
+ user.on('connection', socket => {
+ socket.join(socket.userId)
+ userEventsController.getAllNotifs(socket)
+
+ /// /////////////////////////////////////////////////////// handle connection error
+ socket.on('connect_error', err => {
+ console.log(err.message)
+ })
+
+ /// ////////////////////////////////////////////////////// events
+ socket.on('user:fetchAnnouncements', data => userEventsController.fetchAnnouncements(socket))
+ socket.on('user:updateAnnouncement', data => userEventsController.updateAnnouncement(socket, data))
+ })
+}
diff --git a/server/WebSocket/wss.js b/server/WebSocket/wss.js
new file mode 100644
index 0000000..35aed73
--- /dev/null
+++ b/server/WebSocket/wss.js
@@ -0,0 +1,23 @@
+function init(server) {
+ // init params
+ const { WebSocketPort, NuxtPort, isProduction } = require('../_env')
+ const { userNamespace } = require('./namespaces/user_NameSpace')
+ const { agentNamespace } = require('./namespaces/agent_NameSpace')
+ const { adminNamespace } = require('./namespaces/admin_NameSpace')
+ const { Server } = require('socket.io')
+ const socketIO = require('socket.io')
+
+ // init ws
+ let io
+ if (isProduction) io = socketIO(server)
+ else io = new Server(WebSocketPort, { cors: { origin: '*' } })
+ console.log(`🟢 ~ WebSocket Server is listening on port ${isProduction ? NuxtPort : WebSocketPort}`)
+ global._io = io
+
+ // namespaces
+ userNamespace()
+ agentNamespace()
+ adminNamespace()
+}
+
+module.exports = init
diff --git a/server/_env.js b/server/_env.js
new file mode 100644
index 0000000..32d508a
--- /dev/null
+++ b/server/_env.js
@@ -0,0 +1,39 @@
+const EnvirementVariables = {
+ // node envirements
+ isDev: process.env.NODE_ENV === 'devServer',
+ isProduction: process.env.NODE_ENV === 'production',
+
+ // server ports
+ DevServerPort: 4000,
+ WebSocketPort: 5000,
+ NuxtPort: 7420,
+ NuxtHost: '0.0.0.0',
+ WebSocketURL() {
+ return EnvirementVariables.isProduction ? '' : `ws://localhost:${EnvirementVariables.WebSocketPort}`
+ },
+
+ /// ////////////// arpa configurations
+ // veriry
+ verityBaseUrl: 'http://80.210.26.100:8080/serv',
+ verityTokenUrl: 'http://80.210.26.100:8080/serv/token/GetServiceToken',
+ VerityUserGroupId: 28,
+ VerityBusinessCategoryId: 28,
+ VerityStockAreaId: 328,
+ verityAccount: {
+ username: 'arpa',
+ password: 'Arpa159@951'
+ },
+
+ // panatech
+ panatechBaseUrl: 'http://80.210.26.100:8083/serv',
+ panatechTokenUrl: 'http://80.210.26.100:8083/serv/token/GetServiceToken',
+ PanatechUserGroupId: 25,
+ PanatechBusinessCategoryId: 19,
+ PanatechStockAreaId: 13,
+ panatechAccount: {
+ username: 'arpa',
+ password: 'Arpa159@951'
+ }
+}
+
+module.exports = EnvirementVariables
diff --git a/server/authentication.js b/server/authentication.js
new file mode 100644
index 0000000..7bbf587
--- /dev/null
+++ b/server/authentication.js
@@ -0,0 +1,104 @@
+const jwt = require('jsonwebtoken')
+const User = require('./models/User')
+
+function res401(res, message) {
+ return res.status(401).json({ message })
+}
+
+const authentication = {
+ // secret for generating jwt token
+ secretKey:
+ '6fdd08afdb7ec5b7b83ba5d7635a4ad78a5c9545a9ccd90b0b74299b5ab3a69f640cdd1e0c47655daebe099c96e3172da9be76892f14ef2aec34937757c75f27',
+ // check if just logged in (admin-or-user) (middleware)
+ isLoggedIn(req, res, next) {
+ try {
+ const token = req.headers?.authorization
+ if (!token) throw new Error('err')
+ const decoded = jwt.verify(token.replace(/^Bearer\s/, ''), authentication.secretKey)
+ if (!decoded) throw new Error('err')
+ else return next()
+ } catch (err) {
+ return res401(res, 'unauthenticated')
+ }
+ },
+ // check if admin logged in (middleware)
+ async isAdmin(req, res, next) {
+ try {
+ const token = req.headers?.authorization
+ if (!token) throw new Error('err')
+
+ const decoded = jwt.verify(token.replace(/^Bearer\s/, ''), authentication.secretKey)
+ if (!decoded) throw new Error('err')
+
+ const user = await User.findById(decoded._id)
+ if (!user || !user.scope.includes('admin')) throw new Error('err')
+
+ req.user_id = decoded._id
+ return next()
+ } catch (err) {
+ return res401(res, 'unauthorized')
+ }
+ },
+ // check if user logged in (middleware)
+ async isUser(req, res, next) {
+ try {
+ const token = req.headers?.authorization
+ if (!token) throw new Error('err')
+
+ const decoded = jwt.verify(token.replace(/^Bearer\s/, ''), authentication.secretKey)
+ if (!decoded) throw new Error('err')
+
+ const user = await User.findById(decoded._id)
+ if (!user || !user.scope.includes('user')) throw new Error('err')
+
+ req.user_id = decoded._id
+ return next()
+ } catch (err) {
+ return res401(res, 'unauthorized')
+ }
+ },
+ // check if user is agent and add agent id to body(middleware)
+ async isAgent(req, res, next) {
+ try {
+ const token = req.headers?.authorization
+ if (!token) throw new Error('err')
+
+ const decoded = jwt.verify(token.replace(/^Bearer\s/, ''), authentication.secretKey)
+ if (!decoded) throw new Error('err')
+
+ const user = await User.findById(decoded._id)
+ if (!user || !user.isAgent || !user.scope.includes('user')) throw new Error('err')
+
+ req.user_id = decoded._id
+ req.agent_id = user.representation_id
+ return next()
+ } catch (err) {
+ return res401(res, 'unauthorized')
+ }
+ },
+ // get user id from token
+ getID: req => {
+ const token = req.headers?.authorization
+ return jwt.verify(token?.replace(/^Bearer\s/, ''), authentication.secretKey, (err, decoded) => {
+ if (err) return null
+ else return decoded._id
+ })
+ },
+ // check if admin has permission (middleware - web only)
+ hasPermission: permission => {
+ return async (req, res, next) => {
+ try {
+ const token = req.headers?.authorization
+ if (!token) throw new Error('err')
+
+ const user = await User.findOne({ token })
+ if (!user || !user.permissions.includes(permission)) throw new Error('err')
+ else return next()
+ } catch (err) {
+ return res401(res, 'unauthorized')
+ }
+ }
+ }
+}
+
+module.exports = authentication
diff --git a/server/controllers/announcementController.js b/server/controllers/announcementController.js
new file mode 100644
index 0000000..f5d3d56
--- /dev/null
+++ b/server/controllers/announcementController.js
@@ -0,0 +1,114 @@
+const { body, validationResult } = require('express-validator')
+const Announcement = require('../models/Announcement')
+const { _sr } = require('../plugins/serverResponses')
+const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions')
+const { notifyAllUsers } = require('../WebSocket/controllers/user_EventsController')
+const { notifyAllAgents } = require('../WebSocket/controllers/agent_EventsController')
+const _faSr = _sr.fa
+
+module.exports.create = [
+ [
+ body('title').notEmpty().withMessage(_faSr.required.title),
+
+ body('caption').notEmpty().withMessage(_faSr.required.caption),
+
+ body('expireDate')
+ .notEmpty()
+ .withMessage('تاریخ انقضا را مشخص کنید')
+ .bail()
+ .isNumeric()
+ .withMessage('فرمت تاریخ باید timestamp باشد')
+ .bail()
+ .custom((value, { req }) => {
+ if (Number(value) < Date.now()) return Promise.reject(new Error('نمیتوان تاریخ روز جاری یا قبل تر انتخاب کرد.'))
+ else return Promise.resolve()
+ }),
+ body('isForAgents')
+ .notEmpty()
+ .withMessage('this param is required')
+ .bail()
+ .isBoolean()
+ .withMessage(_faSr.format.boolean)
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ const { title, caption, expireDate, isForAgents } = req.body
+ const { user_id } = req
+ const data = { title, caption, expireDate, isForAgents, _creator: user_id }
+ const announcement = new Announcement(data)
+ announcement.save(err => {
+ if (err) return res500(res, err)
+ if (isForAgents) notifyAllAgents('fetchNewAnnouncements')
+ if (!isForAgents) notifyAllUsers('fetchNewAnnouncements')
+ return res.json({ message: _faSr.response.success_save })
+ })
+ }
+]
+
+module.exports.getAllForAdmin = [
+ (req, res) => {
+ Announcement.find({}, (err, notifs) => {
+ if (err) return res500(res, err)
+ return res.json(notifs)
+ })
+ }
+]
+
+module.exports.getOneForAdmin = [
+ async (req, res) => {
+ try {
+ const announcement = await Announcement.findById(req.params.id)
+ return res.json(announcement)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.getNotifsForUsers = [
+ async (req, res) => {
+ try {
+ const userID = req.user_id
+ const announcements = await Announcement.find({ users: { $ne: userID } })
+ for await (const item of announcements) {
+ item.users.push(userID)
+ await item.save()
+ }
+ return res.json(announcements)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.deleteAnnouncement = [
+ (req, res) => {
+ Announcement.findByIdAndRemove(req.params.id, (err, oldData) => {
+ if (err || !oldData) return res404(res, err)
+ return res.json({ message: _faSr.response.success_remove })
+ })
+ }
+]
+
+// module.exports.updateByAdmin = [
+// [
+// body('title')
+// .notEmpty().withMessage(_faSr.required.title),
+//
+// body('caption')
+// .notEmpty().withMessage(_faSr.required.caption),
+// ],
+// checkValidations(validationResult),
+// async (req, res) => {
+// try {
+// const {title, caption} = req.body
+// const data = {title, caption, _creator: req.user_id}
+// Announcement.findByIdAndUpdate(req.params.id, data, (err, oldData) => {
+// if (err || !oldData) return res404(res, err)
+// return res.json({message: _faSr.response.success_save})
+// })
+// } catch (e) {
+// return res500(res, e)
+// }
+// }
+// ]
diff --git a/server/controllers/arpaConnectionController.js b/server/controllers/arpaConnectionController.js
new file mode 100644
index 0000000..c639856
--- /dev/null
+++ b/server/controllers/arpaConnectionController.js
@@ -0,0 +1,70 @@
+/* eslint-disable node/handle-callback-err */
+const axios = require('axios')
+const { verityAxiosConfig, panatechAxiosConfig } = require('../ArpaWebservice')
+function axiosConfig(db) {
+ if (db === 'verity') return verityAxiosConfig()
+ else if (db === 'panatech') return panatechAxiosConfig()
+ else return {}
+}
+
+/// //// cross server requests
+module.exports.getRouteManager = [
+ (req, res) => {
+ const { url, db } = req.body
+ axios
+ .get(url, axiosConfig(db))
+ .then(arpaRes => {
+ if (arpaRes.data.error) return res.status(404).json(arpaRes.data.error)
+ else return res.json(arpaRes.data)
+ })
+ .catch(err => {
+ // console.log('🚀 ~ file: arpaConnectionController.js ~ getRouteManager ~ err', err)
+ return res.status(500).json({ message: 'WebService Error' })
+ })
+ }
+]
+module.exports.postRouteManager = [
+ (req, res) => {
+ const { url, db, data } = req.body
+ axios
+ .post(url, data, axiosConfig(db))
+ .then(arpaRes => {
+ if (arpaRes.data.error) return res.status(404).json(arpaRes.data.error)
+ else return res.json(arpaRes.data)
+ })
+ .catch(err => {
+ // console.log('🚀 ~ file: arpaConnectionController.js ~ postRouteManager ~ err', err)
+ return res.status(500).json({ message: 'WebService Error' })
+ })
+ }
+]
+module.exports.putRouteManager = [
+ (req, res) => {
+ const { url, db, data } = req.body
+ axios
+ .put(url, data, axiosConfig(db))
+ .then(arpaRes => {
+ if (arpaRes.data.error) return res.status(404).json(arpaRes.data.error)
+ else return res.json(arpaRes.data)
+ })
+ .catch(err => {
+ // console.log('🚀 ~ file: arpaConnectionController.js ~ putRouteManager ~ err', err)
+ return res.status(500).json({ message: 'WebService Error' })
+ })
+ }
+]
+module.exports.deleteRouteManager = [
+ (req, res) => {
+ const { url, db, data } = req.body
+ axios
+ .delete(url, data, axiosConfig(db))
+ .then(arpaRes => {
+ if (arpaRes.data.error) return res.status(404).json(arpaRes.data.error)
+ else return res.json(arpaRes.data)
+ })
+ .catch(err => {
+ // console.log('🚀 ~ file: arpaConnectionController.js ~ deleteRouteManager ~ err', err)
+ return res.status(500).json({ message: 'WebService Error' })
+ })
+ }
+]
diff --git a/server/controllers/bufferRequestController.js b/server/controllers/bufferRequestController.js
new file mode 100644
index 0000000..82d4ff2
--- /dev/null
+++ b/server/controllers/bufferRequestController.js
@@ -0,0 +1,335 @@
+const moment = require('moment-jalaali')
+const { body, validationResult } = require('express-validator')
+const BufferRequest = require('../models/BufferRequest')
+const { _sr } = require('../plugins/serverResponses')
+const {
+ res404,
+ res406,
+ res500,
+ checkValidations,
+ generateRandomDigits
+} = require('../plugins/controllersHelperFunctions')
+const { SMS } = require('../plugins/SMS_Module')
+// const { phrases } = require('../plugins/SMS_Phrases')
+// const { notifyAgent } = require('../WebSocket/controllers/agent_EventsController')
+const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController')
+const _faSr = _sr.fa
+
+// date formaters
+function ArpaDateFormat(date) {
+ return moment(date).format('YYYY-MM-DD HH:mm:ss')
+}
+
+function SmsDateFormat(date) {
+ return moment(date).format('jYYYY/jMM/jDD')
+}
+
+/// ///////////////// agent
+module.exports.add_buffer_request = [
+ async (req, res) => {
+ try {
+ const { user_id, agent_id } = req
+ const thisTime = Date.now()
+
+ const data = {
+ user_id,
+ agent_id,
+ createDate: ArpaDateFormat(thisTime),
+ statusHistory: [{ status: 'temp', date: thisTime }]
+ }
+
+ const br = BufferRequest(data)
+ await br.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.add_buffer_to_br = [
+ [
+ body('ItemName').notEmpty().withMessage('نام کالا را مشخص کنید'),
+
+ body('ItemID').notEmpty().withMessage('Include ItemID'),
+
+ body('ItemCode').notEmpty().withMessage('Include ItemCode'),
+
+ body('bufferQuantity')
+ .notEmpty()
+ .withMessage('تعداد قطعه را مشخص کنید')
+ .isNumeric()
+ .withMessage(_faSr.format.number)
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const brId = req.params?.brId
+ const { ItemName, ItemID, ItemCode, bufferQuantity } = req.body
+
+ const data = {
+ ItemName,
+ ItemID,
+ ItemCode,
+ bufferQuantity
+ }
+
+ const br = await BufferRequest.findById(brId)
+ br.items.push(data)
+ await br.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (e) {
+ return res404(res, e)
+ }
+ }
+]
+
+module.exports.remove_buffer_from_br = [
+ async (req, res) => {
+ try {
+ const bufferItemId = req.params?.bufferItemId
+ if (!bufferItemId) throw new Error('invalid id')
+ const br = await BufferRequest.findOne({ 'items._id': bufferItemId })
+ br.items.id(bufferItemId).remove()
+ await br.save()
+ return res.json({ message: _faSr.response.success_remove })
+ } catch (e) {
+ console.log(e)
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.update_br_description = [
+ (req, res) => {
+ const { description } = req.body
+ const data = {
+ description
+ }
+ BufferRequest.findByIdAndUpdate(req.params?.id, data, (err, oldData) => {
+ if (err) return res404(res, 'invalid id')
+ return res.json({ message: _faSr.response.success_save })
+ })
+ }
+]
+
+module.exports.get_all_br_for_agent = [
+ (req, res) => {
+ const agent_id = req.agent_id
+ BufferRequest.find({ agent_id }, (err, data) => {
+ if (err) return res500(res, err)
+ else return res.json(data)
+ })
+ }
+]
+
+module.exports.get_one_br_for_agent = [
+ (req, res) => {
+ BufferRequest.findById(req.params.id)
+ .populate(
+ 'agent_id',
+ 'full_name province_name city_name address agent_code postal_code tel_number fax_number mobile_number'
+ )
+ .exec((err, data) => {
+ if (err || !data) return res404(res, err)
+ else return res.json(data)
+ })
+ }
+]
+
+module.exports.delete_br = [
+ async (req, res) => {
+ try {
+ const br = await BufferRequest.findById(req.params?.id)
+ if (br.status !== 'temp') return res406(res, 'نمیتوانید درخواست ارسال شده را حذف کنید')
+ await br.remove()
+ return res.json({ message: _faSr.response.success_remove })
+ } catch (e) {
+ return res404(res, 'invalid id')
+ }
+ }
+]
+
+module.exports.change_br_status_to_sent_by_agent = [
+ async (req, res) => {
+ try {
+ const thisTime = Date.now()
+
+ const br = await BufferRequest.findById(req.params?.id).populate('agent_id')
+ if (!br) throw new Error('invalid br id')
+ const totalBr = await BufferRequest.find({ status: { $ne: 'temp' } })
+
+ if (br.status !== 'temp') return res406(res, 'این فرم قبلا برای آسان سرویس ارسال شده')
+ if (!br.items.length) return res406(res, 'هیچ قطعه ای به فرم اضافه نکرده اید')
+
+ // generate tracking code
+ const trackingCode = 'BP' + totalBr.length.toString().padStart(4, '0') + generateRandomDigits(2)
+
+ // modify br
+ br.status = 'sent'
+ br.statusHistory.push({ status: 'sent', date: thisTime })
+ br.trackingCode = trackingCode
+ br.sendDate = ArpaDateFormat(thisTime)
+
+ // send sms for agent
+ const smsMsg = [
+ ' نماینده گرامی درخواست کالای بافر شما در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' با کد پیگیری ',
+ trackingCode,
+ ' برای شرکت ارسال شد. '
+ ]
+
+ SMS([br.agent_id.mobile_number], smsMsg.join(''))
+
+ await br.save()
+ notifyAdmin('updateNewBufferRequests')
+ return res.json({ message: 'درخواست کالای بافر ارسال شد' })
+ } catch (e) {
+ console.log(e)
+
+ return res404(res, e)
+ }
+ }
+]
+
+/// ///////////////// admin
+module.exports.get_all_br_for_admin = [
+ async (req, res) => {
+ try {
+ const brList = await BufferRequest.find({
+ status: { $ne: 'temp' }
+ }).populate(
+ 'agent_id',
+ 'full_name agent_code mobile_number national_code province_name city_name province_id city_id'
+ )
+ return res.json(brList)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.get_oneAgent_br_for_admin = [
+ async (req, res) => {
+ const agent_id = req.params?.agent_id
+ try {
+ const brList = await BufferRequest.find({
+ status: { $ne: 'temp' },
+ agent_id
+ }).populate('agent_id', 'full_name agent_code mobile_number national_code province_name city_name')
+ return res.json(brList)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.get_one_br_for_admin = [
+ async (req, res) => {
+ try {
+ const { user_id } = req
+ const thisTime = Date.now()
+ const br = await BufferRequest.findById(req.params?.id)
+ .populate(
+ 'agent_id',
+ 'agent_code full_name mobile_number fax_number tel_number province_name city_name national_code address postal_code store_name'
+ )
+ .populate('_openedBy', 'username first_name last_name')
+ .populate('_updatedBy', 'username first_name last_name')
+ if (!br.seen) {
+ br.seen = true
+ br._openedBy = user_id
+ br.status = 'ongoing'
+ br.statusHistory.push({ status: 'ongoing', date: thisTime })
+ await br.save()
+
+ const smsMsg = [
+ ' نماینده گرامی درخواست کالای بافر شما با کد پیگیری ',
+ br.trackingCode,
+ ' در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' در دست اقدام قرار گرفت. '
+ ]
+
+ SMS([br.agent_id.mobile_number], smsMsg.join(''))
+ notifyAdmin('updateNewBufferRequests')
+ }
+ return res.json(br)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.change_br_status_by_admin = [
+ [
+ body('status')
+ .notEmpty()
+ .withMessage('status is required')
+ .bail()
+ .custom((value, { req }) => {
+ const acceptablvalues = ['waiting', 'delivered']
+ if (!acceptablvalues.includes(value)) return Promise.reject(new Error('invalid status'))
+ else return true
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const { user_id } = req
+ const { status, deliveryCode } = req.body
+ const thisTime = Date.now()
+
+ try {
+ const br = await BufferRequest.findById(req.params?.id).populate('agent_id')
+ if (!br) throw new Error('invalid br id')
+
+ // check statuses
+ const statusErrMsg = 'invalid status for this time'
+ if (br.status === 'delivered') return res406(res, statusErrMsg)
+ if (br.status === 'waiting' && status === 'waiting') return res406(res, statusErrMsg)
+
+ // save status
+ br._updatedBy = user_id
+ br.status = status
+ br.statusHistory.push({ status, date: thisTime })
+
+ let smsMessage
+ // differenet status methods
+ if (status === 'waiting') {
+ smsMessage = [
+ ' نماینده گرامی درخواست کالای بافر شما با کد پیگیری ',
+ br.trackingCode,
+ ' در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' در انتظار قطعه میباشد. '
+ ]
+ }
+
+ if (status === 'delivered') {
+ if (deliveryCode) br.deliveryCode = deliveryCode
+
+ function deliveryCodePhrase() {
+ if (deliveryCode.length) return `کد پیگیری مرسوله: ${deliveryCode}` + '\n'
+ else return ''
+ }
+
+ smsMessage = [
+ ' نماینده گرامی درخواست کالای بافر شما با کد پیگیری ',
+ br.trackingCode,
+ ' در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' تحویل شد. ',
+ '\n',
+ deliveryCodePhrase()
+ ]
+ }
+
+ await SMS([br.agent_id.mobile_number], smsMessage.join(''))
+ await br.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
diff --git a/server/controllers/contactPageController.js b/server/controllers/contactPageController.js
new file mode 100644
index 0000000..480c53d
--- /dev/null
+++ b/server/controllers/contactPageController.js
@@ -0,0 +1,68 @@
+const { body, validationResult } = require('express-validator')
+const ContactPageMessage = require('../models/ContactPageMessage')
+const { _sr } = require('../plugins/serverResponses')
+const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController')
+const { res404 } = require('../plugins/controllersHelperFunctions')
+
+const _faSr = _sr.fa
+
+module.exports.create = [
+ [
+ body('full_name')
+ .notEmpty()
+ .withMessage(_faSr.required.name)
+ .bail()
+ .isLength({ min: 2 })
+ .withMessage(_faSr.min_char.min2),
+
+ body('email').notEmpty().withMessage(_faSr.required.email).bail().isEmail().withMessage(_faSr.format.email),
+
+ body('message').isLength({ min: 20 }).withMessage(_faSr.min_char.min20)
+ ],
+ (req, res) => {
+ const errors = validationResult(req)
+ if (!errors.isEmpty()) return res.status(422).json({ validation: errors.mapped() })
+
+ const data = {
+ full_name: req.body.full_name,
+ email: req.body.email,
+ message: req.body.message
+ }
+ const message = new ContactPageMessage(data)
+ message.save((err, message) => {
+ if (err) console.log(err)
+ notifyAdmin('updateUnreadCuMsgs')
+ return res.json({ message: _faSr.response.success_save })
+ })
+ }
+]
+
+module.exports.getAll = [
+ (req, res) => {
+ ContactPageMessage.find({})
+ .select('-message')
+ .then(messages => {
+ return res.json(messages)
+ })
+ .catch(err => {
+ return res.status(500).json({ message: err })
+ })
+ }
+]
+
+module.exports.getOne = [
+ async (req, res) => {
+ try {
+ const message = await ContactPageMessage.findById(req.params.id).populate('read_by', 'first_name last_name')
+ if (!message.read) {
+ message.read_by = req.user_id
+ message.read = true
+ await message.save()
+ notifyAdmin('updateUnreadCuMsgs')
+ }
+ return res.json(message)
+ } catch (e) {
+ return res404(res, _faSr.not_found.item_id)
+ }
+ }
+]
diff --git a/server/controllers/downloadCategoryController.js b/server/controllers/downloadCategoryController.js
new file mode 100644
index 0000000..d01d8f8
--- /dev/null
+++ b/server/controllers/downloadCategoryController.js
@@ -0,0 +1,96 @@
+const { body, validationResult } = require('express-validator')
+const DownloadCategory = require('../models/download/DownloadCategory')
+const Download = require('../models/download/Download')
+const { _sr } = require('../plugins/serverResponses')
+const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions')
+
+const _faSr = _sr.fa
+
+module.exports.create = [
+ [
+ body('name')
+ .notEmpty()
+ .withMessage(_faSr.required.name)
+ .bail()
+ .custom((value, { req }) => {
+ return DownloadCategory.findOne({ name: value }).then(category => {
+ if (category) return Promise.reject(_faSr.duplicated.name)
+ else return true
+ })
+ })
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ const data = {
+ _creator: req.user_id,
+ name: req.body.name
+ }
+
+ const dCategory = new DownloadCategory(data)
+ dCategory.save(err => {
+ if (err) console.log(err)
+ return res.json({ message: _faSr.response.success_save })
+ })
+ }
+]
+
+module.exports.getAll = [
+ (req, res) => {
+ DownloadCategory.find({}, (err, categories) => {
+ if (err) return res500(res, err)
+ return res.json(categories)
+ })
+ }
+]
+
+module.exports.getOne = [
+ (req, res) => {
+ DownloadCategory.findById(req.params?.id)
+ .populate('_creator', 'first_name last_name')
+ .exec((err, category) => {
+ if (err) return res404(res, err)
+ return res.json(category)
+ })
+ }
+]
+
+module.exports.update = [
+ [
+ body('name')
+ .notEmpty()
+ .withMessage(_faSr.required.name)
+ .bail()
+ .custom((value, { req }) => {
+ return DownloadCategory.findOne({ name: value }).then(category => {
+ if (category && category._id.toString() !== req.params.id) return Promise.reject(_faSr.duplicated.name)
+ else return true
+ })
+ })
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ const data = {
+ _creator: req.user_id,
+ name: req.body.name
+ }
+ DownloadCategory.findByIdAndUpdate(req.params.id, data, (err, oldData) => {
+ if (err) return res404(res, err)
+ return res.json({ message: _faSr.response.success_save })
+ })
+ }
+]
+
+module.exports.delete = [
+ (req, res) => {
+ Download.findOne({ category: req.params.id }, (err, item) => {
+ if (err) return res404(res, err)
+ if (item) return res.status(403).json({ message: 'این دسته بندی دارای آیتم میباشد.' })
+ else {
+ DownloadCategory.findByIdAndDelete(req.params.id, (err, category) => {
+ if (err) return res404(res, err)
+ return res.json({ message: _faSr.response.success_remove })
+ })
+ }
+ })
+ }
+]
diff --git a/server/controllers/downloadController.js b/server/controllers/downloadController.js
new file mode 100644
index 0000000..ac2a175
--- /dev/null
+++ b/server/controllers/downloadController.js
@@ -0,0 +1,267 @@
+const fs = require('fs')
+const mongoose = require('mongoose')
+const { body, validationResult } = require('express-validator')
+const jimp = require('jimp')
+const Download = require('../models/download/Download')
+const DownloadCategory = require('../models/download/DownloadCategory')
+const { _sr } = require('../plugins/serverResponses')
+const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions')
+const _faSr = _sr.fa
+
+const imageWidth = 400
+const imageHeight = 400
+const imageQuality = 100
+const shortDescriptionLength = 200
+
+const paginateLimit = 8
+
+module.exports.create = [
+ [
+ body('title')
+ .notEmpty()
+ .withMessage(_faSr.required.title)
+ .bail()
+ .custom((value, { req }) => {
+ return Download.findOne({ title: value }).then(item => {
+ if (item) return Promise.reject(_faSr.duplicated.title)
+ else return true
+ })
+ }),
+
+ body('short_description').notEmpty().withMessage(_faSr.required.description),
+
+ body('description').notEmpty().withMessage(_faSr.required.description),
+
+ body('category').notEmpty().withMessage(_faSr.required.category)
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ if (!req.files || !req.files.image)
+ return res.status(422).json({ validation: { image: { msg: _faSr.required.image } } })
+
+ const data = {
+ _creator: req.user_id,
+ title: req.body.title,
+ short_description: req.body.short_description.slice(0, shortDescriptionLength),
+ description: req.body.description,
+ category: req.body.category
+ }
+
+ const image = req.files.image
+ // validate image format
+ const supportedFormats = ['jpg', 'jpeg', 'png', 'webp']
+ if (!supportedFormats.includes(image.mimetype.split('/')[1])) {
+ return res.status(422).json({ validation: { image: { msg: _faSr.format.image } } })
+ }
+
+ const imageName = 'download_' + Date.now() + '.' + image.mimetype.split('/')[1]
+ data.image = imageName
+
+ jimp
+ .read(image.data)
+ .then(img => {
+ img.cover(imageWidth, imageHeight)
+ img.quality(imageQuality)
+ img.write(`./static/uploads/images/downloads/${imageName}`, err => {
+ if (err) console.log(err)
+ })
+ })
+ .catch(err => {
+ console.log(err)
+ })
+
+ const download = new Download(data)
+ download.save((err, data) => {
+ if (err) console.log(err)
+ return res.json(data)
+ })
+ }
+]
+
+module.exports.getAll = [
+ async (req, res) => {
+ try {
+ if (req.params.category === 'all') {
+ const downloads = await Download.paginate({}, { page: req.params.page, limit: paginateLimit })
+ if (!downloads.docs.length && Number(req.params.page) !== 1)
+ return res.status(404).json({ message: _faSr.not_found.item_id })
+ return res.json(downloads)
+ } else {
+ let catID
+ if (mongoose.isValidObjectId(req.params.category)) catID = req.params.category
+ else {
+ const category = await DownloadCategory.findOne({ name: req.params.category })
+ if (!category) return res.status(404).json({ message: _faSr.not_found.item_id })
+ catID = category._id
+ }
+ const downloads = await Download.paginate({ category: catID }, { page: req.params.page, limit: paginateLimit })
+ if (!downloads.docs.length && Number(req.params.page) !== 1)
+ return res.status(404).json({ message: _faSr.not_found.item_id })
+ return res.json(downloads)
+ }
+ } catch (e) {
+ return res.status(404).json({ message: _faSr.not_found.item_id })
+ }
+ }
+]
+
+module.exports.getNewest = [
+ (req, res) => {
+ Download.find({})
+ .sort({ _id: -1 })
+ .limit(3)
+ .exec((err, data) => {
+ if (err) return res500(res, err)
+ return res.json(data)
+ })
+ }
+]
+
+module.exports.getOne = [
+ (req, res) => {
+ const query = {}
+ if (mongoose.isValidObjectId(req.params.id)) query._id = req.params.id
+ else query.title = req.params.id
+ Download.findOne(query)
+ .populate('_creator', 'first_name last_name')
+ .exec((err, item) => {
+ if (err) return res.status(404).json({ message: err })
+ return res.json(item)
+ })
+ }
+]
+
+module.exports.update = [
+ [
+ body('title')
+ .notEmpty()
+ .withMessage(_faSr.required.title)
+ .bail()
+ .custom((value, { req }) => {
+ return Download.findOne({ title: value }).then(item => {
+ if (item && item._id.toString() !== req.params.id) return Promise.reject(_faSr.duplicated.title)
+ else return true
+ })
+ }),
+
+ body('short_description').notEmpty().withMessage(_faSr.required.description),
+
+ body('description').notEmpty().withMessage(_faSr.required.description),
+
+ body('category').notEmpty().withMessage(_faSr.required.category)
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ const data = {
+ _creator: req.user_id,
+ title: req.body.title,
+ short_description: req.body.short_description.slice(0, shortDescriptionLength),
+ description: req.body.description,
+ category: req.body.category
+ }
+
+ if (req.files && req.files.image) {
+ const image = req.files.image
+ // validate image format
+ const supportedFormats = ['jpg', 'jpeg', 'png', 'webp']
+ if (!supportedFormats.includes(image.mimetype.split('/')[1])) {
+ return res.status(422).json({ validation: { image: { msg: _faSr.format.image } } })
+ }
+
+ const imageName = 'download_' + Date.now() + '.' + image.mimetype.split('/')[1]
+ data.image = imageName
+
+ jimp
+ .read(image.data)
+ .then(img => {
+ img.cover(imageWidth, imageHeight)
+ img.quality(imageQuality)
+ img.write(`./static/uploads/images/downloads/${imageName}`, err => {
+ if (err) console.log(err)
+ })
+ })
+ .catch(err => {
+ console.log(err)
+ })
+ }
+
+ Download.findByIdAndUpdate(req.params.id, data, (err, oldData) => {
+ if (err) return res.status(404).json({ message: _faSr.not_found.item_id })
+ if (req.files && req.files.image) {
+ fs.unlink(`./static/${oldData.image}`, err => {
+ if (err) console.log(err)
+ })
+ }
+ Download.findById(oldData._id, (err, result) => {
+ if (err) return res.status(404).json({ message: _faSr.not_found.item_id })
+ return res.json(result)
+ })
+ })
+ }
+]
+
+module.exports.delete = [
+ (req, res) => {
+ Download.findByIdAndDelete(req.params.id, (err, data) => {
+ if (err) return res.status(404).json({ message: _faSr.not_found.item_id })
+ data.files.forEach(item => {
+ fs.unlink(`./static/${item.file}`, err => {
+ if (err) console.log(err)
+ })
+ })
+ return res.json({ message: _faSr.response.success_remove })
+ })
+ }
+]
+/// /////////////////////////////////////////////////////////// add files
+module.exports.addFile = [
+ [
+ body('name').notEmpty().withMessage(_faSr.required.name),
+
+ body('os').notEmpty().withMessage(_faSr.required.category)
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ if (!req.files || !req.files.file)
+ return res.status(422).json({ validation: { file: { msg: _faSr.required.file } } })
+
+ const file = req.files.file
+ const fileName = 'AsanService-' + Math.ceil(Math.random() * 1000) + '_' + file.name
+ file.mv(`./static/uploads/apps/${fileName}`)
+
+ const data = {
+ _creator: req.user_id,
+ name: req.body.name,
+ os: req.body.os,
+ file: fileName
+ }
+
+ Download.findById(req.body.page_id, (err, page) => {
+ if (err || !page) return res404(res, err)
+ page.files.push(data)
+ page.save(err => {
+ if (err) console.log(err)
+ return res.json(page.files)
+ })
+ })
+ }
+]
+
+module.exports.deletFile = [
+ (req, res) => {
+ Download.findOne({ 'files._id': req.params.id }, (err, page) => {
+ if (err || !page) return res404(res, err)
+ const app = page.files.id(req.params.id)
+ app.remove(err => {
+ if (err) console.log(err)
+ fs.unlink(`./static/${app.file}`, err => {
+ if (err) console.log(err)
+ })
+ })
+ page.save(err => {
+ if (err) console.log(err)
+ return res.json({ message: _faSr.response.success_remove })
+ })
+ })
+ }
+]
diff --git a/server/controllers/faqController.js b/server/controllers/faqController.js
new file mode 100644
index 0000000..c872046
--- /dev/null
+++ b/server/controllers/faqController.js
@@ -0,0 +1,76 @@
+const { body, validationResult } = require('express-validator')
+const FAQ = require('../models/FAQ')
+const { _sr } = require('../plugins/serverResponses')
+const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions')
+const _faSr = _sr.fa
+
+module.exports.create = [
+ [
+ body('question').notEmpty().withMessage(_faSr.required.question),
+
+ body('answer').notEmpty().withMessage(_faSr.required.answer)
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ const data = {
+ _creator: req.user_id,
+ question: req.body.question,
+ answer: req.body.answer
+ }
+
+ const faq = new FAQ(data)
+ faq.save(cb => {
+ return res.json({ message: _faSr.response.success_save })
+ })
+ }
+]
+
+module.exports.getAll = [
+ (req, res) => {
+ FAQ.find({}, (err, data) => {
+ if (err) return res500(res, err)
+ return res.json(data)
+ })
+ }
+]
+
+module.exports.getOne = [
+ (req, res) => {
+ FAQ.findById(req.params.id)
+ .populate('_creator', 'first_name last_name')
+ .exec((err, data) => {
+ if (err) return res.status(404).json({ message: err })
+ return res.json(data)
+ })
+ }
+]
+
+module.exports.update = [
+ [
+ body('question').notEmpty().withMessage(_faSr.required.question),
+
+ body('answer').notEmpty().withMessage(_faSr.required.answer)
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ const data = {
+ _creator: req.user_id,
+ question: req.body.question,
+ answer: req.body.answer
+ }
+
+ FAQ.findByIdAndUpdate(req.params.id, data, (err, oldData) => {
+ if (err) return res404(res, err)
+ return res.json({ message: _faSr.response.success_save })
+ })
+ }
+]
+
+module.exports.delete = [
+ (req, res) => {
+ FAQ.findByIdAndDelete(req.params.id, (err, oldData) => {
+ if (err) return res.status(404).json({ message: err })
+ return res.json({ message: _faSr.response.success_remove })
+ })
+ }
+]
diff --git a/server/controllers/guaranteeReportController.js b/server/controllers/guaranteeReportController.js
new file mode 100644
index 0000000..d2319dd
--- /dev/null
+++ b/server/controllers/guaranteeReportController.js
@@ -0,0 +1,334 @@
+const moment = require('moment-jalaali')
+const { body, validationResult } = require('express-validator')
+const GuaranteeReport = require('../models/GuaranteeReport')
+const { _sr } = require('../plugins/serverResponses')
+const {
+ res404,
+ res406,
+ res500,
+ checkValidations,
+ generateRandomDigits
+} = require('../plugins/controllersHelperFunctions')
+const { SMS } = require('../plugins/SMS_Module')
+const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController')
+const _faSr = _sr.fa
+
+// date formaters
+function ArpaDateFormat(date) {
+ return moment(date).format('YYYY-MM-DD HH:mm:ss')
+}
+
+function SmsDateFormat(date) {
+ return moment(date).format('jYYYY/jMM/jDD')
+}
+
+/// ///////////////// agent
+module.exports.add_guaranteeReport = [
+ async (req, res) => {
+ try {
+ const { user_id, agent_id } = req
+ const thisTime = Date.now()
+
+ const data = {
+ user_id,
+ agent_id,
+ createDate: ArpaDateFormat(thisTime)
+ }
+
+ const gr = GuaranteeReport(data)
+ await gr.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.add_report_to_gr = [
+ [
+ body('customerTel').notEmpty().withMessage('شماره تماس مشتری را وارد کنید'),
+
+ body('ItemName').notEmpty().withMessage('نام کالا را مشخص کنید'),
+
+ body('ItemID').notEmpty().withMessage('Include ItemID'),
+
+ body('ItemCode').notEmpty().withMessage('Include ItemCode'),
+
+ body('productIssue').notEmpty().withMessage('ایراد کالا را وارد کنید'),
+
+ body('usedPieces').notEmpty().withMessage('قطعات مصرفی را وارد کنید'),
+
+ body('recieveDate').notEmpty().withMessage('تاریخ دریافت از مشتری را مشخص کنید'),
+
+ body('deliverDate')
+ .notEmpty()
+ .withMessage('تاریخ تحویل به مشتری را مشخص کنید')
+ .bail()
+ .custom((value, { req }) => {
+ function timeStamp(date) {
+ return Number(moment(date).format('x'))
+ }
+ const start = timeStamp(req.body.recieveDate)
+ const end = timeStamp(value)
+ if (end < start)
+ return Promise.reject(new Error('تاریخ تحویل به مشتری نباید از تاریخ دریافت از مشتری کوچکتر باشد'))
+ else return true
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const grId = req.params?.grId
+ const {
+ customerName,
+ customerTel,
+ ItemName,
+ SerialNo1,
+ ItemID,
+ ItemCode,
+ productIssue,
+ usedPieces,
+ recieveDate,
+ deliverDate
+ } = req.body
+
+ const data = {
+ customerName,
+ customerTel,
+ ItemName,
+ SerialNo1,
+ ItemID,
+ ItemCode,
+ productIssue,
+ usedPieces,
+ recieveDate,
+ deliverDate
+ }
+
+ const gr = await GuaranteeReport.findById(grId)
+ gr.items.push(data)
+ await gr.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (e) {
+ return res404(res, e)
+ }
+ }
+]
+
+module.exports.remove_report_from_gr = [
+ async (req, res) => {
+ try {
+ const reportItemId = req.params?.reportItemId
+ if (!reportItemId) throw new Error('invalid id')
+ const gr = await GuaranteeReport.findOne({ 'items._id': reportItemId })
+ gr.items.id(reportItemId).remove()
+ await gr.save()
+ return res.json({ message: _faSr.response.success_remove })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.update_gr_description = [
+ (req, res) => {
+ const { description } = req.body
+ const data = {
+ description
+ }
+ GuaranteeReport.findByIdAndUpdate(req.params?.id, data, (err, oldData) => {
+ if (err) return res404(res, 'invalid id')
+ return res.json({ message: _faSr.response.success_save })
+ })
+ }
+]
+
+module.exports.get_all_gr_for_agent = [
+ (req, res) => {
+ const { agent_id } = req
+ GuaranteeReport.find({ agent_id }, (err, data) => {
+ if (err) return res500(res, err)
+ else return res.json(data)
+ })
+ }
+]
+
+module.exports.get_one_gr_for_agent = [
+ (req, res) => {
+ GuaranteeReport.findById(req.params?.id)
+ .populate(
+ 'agent_id',
+ 'full_name province_name city_name address agent_code postal_code tel_number fax_number mobile_number'
+ )
+ .exec((err, data) => {
+ if (err || !data) return res404(res, err)
+ else return res.json(data)
+ })
+ }
+]
+
+module.exports.delete_gr = [
+ async (req, res) => {
+ try {
+ const gr = await GuaranteeReport.findById(req.params?.id)
+ if (gr.status !== 'temp') return res406(res, 'نمیتوانید درخواست ارسال شده را حذف کنید')
+ await gr.remove()
+ return res.json({ message: _faSr.response.success_remove })
+ } catch (e) {
+ return res404(res, 'invalid id')
+ }
+ }
+]
+
+module.exports.change_gr_status_to_sent_by_agent = [
+ async (req, res) => {
+ try {
+ const thisTime = Date.now()
+
+ const gr = await GuaranteeReport.findById(req.params?.id).populate('agent_id')
+ if (!gr) throw new Error('invalid gr id')
+ const totalGr = await GuaranteeReport.find({ status: { $ne: 'temp' } })
+
+ if (gr.status !== 'temp') return res406(res, 'این فرم قبلا برای آسان سرویس ارسال شده')
+ if (!gr.items.length) return res406(res, 'هیچ آیتمی ای به فرم اضافه نکرده اید')
+
+ // generate tracking code
+ const trackingCode = 'GR' + totalGr.length.toString().padStart(4, '0') + generateRandomDigits(2)
+
+ // modify gr
+ gr.status = 'sent'
+ gr.trackingCode = trackingCode
+ gr.sendDate = ArpaDateFormat(thisTime)
+
+ // send sms for agent
+ const smsMsg = [
+ ' نماینده گرامی فرم گزارش عملکرد گارانتی شما در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' با کد پیگیری ',
+ trackingCode,
+ ' برای شرکت ارسال شد. '
+ ]
+
+ SMS([gr.agent_id.mobile_number], smsMsg.join(''))
+
+ await gr.save()
+ notifyAdmin('updateNewGuaranteeReports')
+ return res.json({ message: 'فرم گزارش عملکرد گارانتی ارسال شد' })
+ } catch (e) {
+ console.log(e)
+
+ return res404(res, e)
+ }
+ }
+]
+
+/// ///////////////// admin
+module.exports.get_all_gr_for_admin = [
+ async (req, res) => {
+ try {
+ const grList = await GuaranteeReport.find({ status: { $ne: 'temp' } }).populate(
+ 'agent_id',
+ 'full_name agent_code mobile_number national_code province_name city_name province_id city_id'
+ )
+ return res.json(grList)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.get_one_gr_for_admin = [
+ async (req, res) => {
+ try {
+ const { user_id } = req
+ const gr = await GuaranteeReport.findById(req.params?.id)
+ .populate(
+ 'agent_id',
+ 'agent_code full_name mobile_number fax_number tel_number province_name city_name national_code address postal_code store_name'
+ )
+ .populate('_openedBy', 'username first_name last_name')
+ .populate('_updatedBy', 'username first_name last_name')
+ if (!gr.seen) {
+ gr._openedBy = user_id
+ gr.seen = true
+ await gr.save()
+ notifyAdmin('updateNewGuaranteeReports')
+ }
+ return res.json(gr)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+// module.exports.change_gr_status_by_admin = [
+// [
+// body('status')
+// .notEmpty()
+// .withMessage('status is required')
+// .bail()
+// .custom((value, { req }) => {
+// acceptablvalues = ['waiting', 'delivered']
+// if (!acceptablvalues.includes(value)) return Promise.reject('invalid status')
+// else return true
+// })
+// ],
+// checkValidations(validationResult),
+// async (req, res) => {
+// const { user_id } = req
+// const { status, deliveryCode } = req.body
+// const thisTime = Date.now()
+
+// try {
+// const gr = await GuaranteeReport.findById(req.params?.id).populate('agent_id')
+// if (!gr) throw 'invalid gr id'
+
+// // check statuses
+// const statusErrMsg = 'invalid status for this time'
+// if (gr.status === 'delivered') return res406(res, statusErrMsg)
+// if (gr.status === 'waiting' && status === 'waiting') return res406(res, statusErrMsg)
+
+// // save status
+// gr._updatedBy = user_id
+// gr.status = status
+// gr.statusHistory.push({ status: status, date: thisTime })
+
+// let smsMessage
+// // differenet status methods
+// if (status === 'waiting') {
+// smsMessage = [
+// ' نماینده گرامی درخواست قطعه شما با کد پیگیری ',
+// gr.trackingCode,
+// ' در تاریخ ',
+// SmsDateFormat(thisTime),
+// ' در انتظار قطعه میباشد. '
+// ]
+// }
+
+// if (status === 'delivered') {
+// if (deliveryCode) gr.deliveryCode = deliveryCode
+
+// function deliveryCodePhrase() {
+// if (deliveryCode.length) return `کد پیگیری مرسوله: ${deliveryCode}` + '\n'
+// else return ''
+// }
+
+// smsMessage = [
+// ' نماینده گرامی درخواست قطعه شما با کد پیگیری ',
+// gr.trackingCode,
+// ' در تاریخ ',
+// SmsDateFormat(thisTime),
+// ' تحویل شد. ',
+// '\n',
+// deliveryCodePhrase()
+// ]
+// }
+
+// await SMS([gr.agent_id.mobile_number], smsMessage.join(''))
+// await gr.save()
+// return res.json({ message: _faSr.response.success_save })
+// } catch (e) {
+// return res500(res, e)
+// }
+// }
+// ]
diff --git a/server/controllers/helpController.js b/server/controllers/helpController.js
new file mode 100644
index 0000000..f2fe2a1
--- /dev/null
+++ b/server/controllers/helpController.js
@@ -0,0 +1,49 @@
+const Help = require('../models/Help')
+const { _sr } = require('../plugins/serverResponses')
+const { res500 } = require('../plugins/controllersHelperFunctions')
+const _faSr = _sr.fa
+
+module.exports.set = [
+ async (req, res) => {
+ const { helpId } = req.body
+ try {
+ const help = await Help.findOne()
+ if (help) {
+ help.helpId = helpId
+ help._creator = req.user_id
+ await help.save()
+ return res.json({ message: _faSr.response.success_save })
+ } else {
+ const help = new Help({
+ helpId,
+ _creator: req.user_id
+ })
+ help.save()
+ return res.json({ message: _faSr.response.success_save })
+ }
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.get = [
+ (req, res) => {
+ const front = req.query?.front
+ if (front) {
+ Help.findOne({})
+ .populate('helpId', '_id title')
+ .exec((err, data) => {
+ if (err) return res500(res, err)
+ else return res.json(data)
+ })
+ } else {
+ Help.findOne({})
+ .populate('_creator', 'first_name last_name')
+ .exec((err, data) => {
+ if (err) return res500(res, err)
+ else return res.json(data)
+ })
+ }
+ }
+]
diff --git a/server/controllers/iranCitiesController.js b/server/controllers/iranCitiesController.js
new file mode 100644
index 0000000..e69eb9c
--- /dev/null
+++ b/server/controllers/iranCitiesController.js
@@ -0,0 +1,7 @@
+const { iranCities } = require('../plugins/iranCities')
+
+module.exports.getIranCities = [
+ (req, res) => {
+ return res.json(iranCities)
+ }
+]
diff --git a/server/controllers/learningController.js b/server/controllers/learningController.js
new file mode 100644
index 0000000..1cf6d24
--- /dev/null
+++ b/server/controllers/learningController.js
@@ -0,0 +1,247 @@
+const fs = require('fs')
+const mongoose = require('mongoose')
+const { body, validationResult } = require('express-validator')
+const jimp = require('jimp')
+const Learning = require('../models/Learning')
+const { _sr } = require('../plugins/serverResponses')
+const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions')
+const _faSr = _sr.fa
+//
+const coverWidth = 1300
+const coverHeight = 620
+const thumbWidth = 636
+const thumbHeight = 400
+const coverQuality = 80
+// const coverThumbQuality = 100
+const shortDescriptionLength = 260
+
+const paginateLimit = 5
+
+module.exports.create = [
+ [
+ // title
+ body('title')
+ .notEmpty()
+ .withMessage(_faSr.required.title)
+ .custom((value, { req }) => {
+ return Learning.findOne({ title: value }).then(post => {
+ if (post) return Promise.reject(_faSr.duplicated.title)
+ return true
+ })
+ }),
+
+ // description
+ body('description').notEmpty().withMessage(_faSr.required.description),
+
+ // short description
+ body('short_description').notEmpty().withMessage(_faSr.required.description)
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ if (!req.files || !req.files.cover)
+ return res.status(422).json({ validation: { cover: { msg: _faSr.required.cover } } })
+
+ const data = {
+ _creator: req.user_id,
+ title: req.body.title,
+ description: req.body.description,
+ short_description: req.body.short_description.slice(0, shortDescriptionLength) + ' ... '
+ }
+
+ if (req.files && req.files.cover) {
+ const cover = req.files.cover
+
+ // validate image format
+ const supportedFormats = ['jpg', 'jpeg', 'png', 'webp']
+ if (!supportedFormats.includes(cover.mimetype.split('/')[1])) {
+ return res.status(422).json({ validation: { cover: { msg: _faSr.format.image } } })
+ }
+
+ const coverName = 'blog_' + Date.now() + '.' + cover.mimetype.split('/')[1]
+ data.cover = data.thumb = coverName
+
+ jimp
+ .read(cover.data)
+ .then(img => {
+ img
+ .cover(coverWidth, coverHeight)
+ .quality(coverQuality)
+ .write(`./static/uploads/images/blog/${coverName}`)
+ .resize(thumbWidth, jimp.AUTO)
+ .cover(thumbWidth, thumbHeight)
+ .write(`./static/uploads/images/blog/thumb/${coverName}`)
+ })
+ .catch(err => {
+ console.log(err)
+ })
+ }
+
+ if (req.files && req.files.video) {
+ const video = req.files.video
+
+ // validate video format
+ const supportedFormats = ['mp4', 'avi', 'wmv']
+ if (!supportedFormats.includes(video.mimetype.split('/')[1])) {
+ return res.status(422).json({ validation: { video: { msg: _faSr.format.video } } })
+ }
+
+ const videoName = 'blog_' + Date.now() + '.' + video.mimetype.split('/')[1]
+ data.video = videoName
+ video.mv(`./static/uploads/videos/${videoName}`, err => {
+ if (err) console.log(err)
+ })
+ }
+
+ const post = new Learning(data)
+ post.save(err => {
+ if (err) console.log(err)
+ return res.json({ message: _faSr.response.success_save })
+ })
+ }
+]
+
+module.exports.getAll = [
+ (req, res) => {
+ const page = req.params?.page
+ if (page === 'all') {
+ Learning.find({}, (err, data) => {
+ if (err) return res500(res, err)
+ else return res.json(data)
+ })
+ } else {
+ Learning.paginate({}, { page: page || 1, limit: paginateLimit, sort: { _id: -1 } }, (err, data) => {
+ if (err) return res500(res, err)
+ if (!data.docs.length && Number(req.params.page) !== 1)
+ return res.status(404).json({ message: _faSr.not_found.item_id })
+ else return res.json(data)
+ })
+ }
+ }
+]
+
+module.exports.getOne = [
+ (req, res) => {
+ const query = {}
+ if (mongoose.isValidObjectId(req.params.id)) query._id = req.params.id
+ else query.title = req.params.id
+ Learning.findOne(query)
+ .populate('_creator', 'first_name last_name')
+ .exec((err, post) => {
+ if (err || !post) return res404(res, err)
+ return res.json(post)
+ })
+ }
+]
+
+module.exports.update = [
+ [
+ // title
+ body('title')
+ .notEmpty()
+ .withMessage(_faSr.required.title)
+ .custom((value, { req }) => {
+ return Learning.findOne({ title: value }).then(post => {
+ if (post && post._id.toString() !== req.params.id) return Promise.reject(_faSr.duplicated.title)
+ return true
+ })
+ }),
+
+ // description
+ body('description').notEmpty().withMessage(_faSr.required.description),
+
+ // short description
+ body('short_description').notEmpty().withMessage(_faSr.required.description)
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ const data = {
+ _creator: req.user_id,
+ title: req.body.title,
+ description: req.body.description,
+ short_description: req.body.short_description.slice(0, shortDescriptionLength) + ' ... '
+ }
+
+ if (req.files && req.files.cover) {
+ const cover = req.files.cover
+
+ // validate image format
+ const supportedFormats = ['jpg', 'jpeg', 'png', 'webp']
+ if (!supportedFormats.includes(cover.mimetype.split('/')[1])) {
+ return res.status(422).json({ validation: { cover: { msg: _faSr.format.image } } })
+ }
+
+ const coverName = 'blog_' + Date.now() + '.' + cover.mimetype.split('/')[1]
+ data.cover = data.thumb = coverName
+
+ jimp
+ .read(cover.data)
+ .then(img => {
+ img
+ .cover(coverWidth, coverHeight)
+ .quality(coverQuality)
+ .write(`./static/uploads/images/blog/${coverName}`)
+ .resize(thumbWidth, jimp.AUTO)
+ .cover(thumbWidth, thumbHeight)
+ .write(`./static/uploads/images/blog/thumb/${coverName}`)
+ })
+ .catch(err => {
+ console.log(err)
+ })
+ }
+
+ if (req.files && req.files.video) {
+ const video = req.files.video
+
+ // validate video format
+ const supportedFormats = ['mp4', 'avi', 'wmv']
+ if (!supportedFormats.includes(video.mimetype.split('/')[1])) {
+ return res.status(422).json({ validation: { video: { msg: _faSr.format.video } } })
+ }
+
+ const videoName = 'blog_' + Date.now() + '.' + video.mimetype.split('/')[1]
+ data.video = videoName
+ video.mv(`./static/uploads/videos/${videoName}`, err => {
+ if (err) console.log(err)
+ })
+ }
+
+ Learning.findByIdAndUpdate(req.params.id, data, (err, oldData) => {
+ if (err) return res404(res, err)
+ if (req.files && req.files.cover) {
+ fs.unlink(`./static/${oldData.cover}`, err => {
+ if (err) console.log(err)
+ })
+ fs.unlink(`./static/${oldData.thumb}`, err => {
+ if (err) console.log(err)
+ })
+ }
+ if (req.files && req.files.video && oldData.video)
+ fs.unlink(`./static/${oldData.video}`, err => {
+ if (err) console.log(err)
+ })
+ Learning.findById(oldData._id, (err, newData) => {
+ if (err) return res404(res, err)
+ return res.json(newData)
+ })
+ })
+ }
+]
+
+module.exports.delete = [
+ (req, res) => {
+ Learning.findByIdAndDelete(req.params.id, (err, post) => {
+ if (err) return res.status(404).json({ message: err })
+ fs.unlink(`./static/${post.cover}`, err => {
+ if (err) console.log(err)
+ })
+ fs.unlink(`./static/${post.thumb}`, err => {
+ if (err) console.log(err)
+ })
+ if (post.video)
+ fs.unlink(`./static/${post.video}`, err => {
+ if (err) console.log(err)
+ })
+ return res.json({ message: _faSr.response.success_remove })
+ })
+ }
+]
diff --git a/server/controllers/lotteryController.js b/server/controllers/lotteryController.js
new file mode 100644
index 0000000..b29d1ed
--- /dev/null
+++ b/server/controllers/lotteryController.js
@@ -0,0 +1,373 @@
+const fs = require('fs')
+const jimp = require('jimp')
+const { body, validationResult } = require('express-validator')
+const moment = require('moment-jalaali')
+const Lottery = require('../models/Lottery')
+const { serialChecker } = require('../plugins/asanServiceSerialChecker')
+const { _sr } = require('../plugins/serverResponses')
+const {
+ res404,
+ res406,
+ res500,
+ checkValidations,
+ removeWhiteSpaces,
+ checkMobileNumber,
+ normalizeMobileNumber
+} = require('../plugins/controllersHelperFunctions')
+const { SMS } = require('../plugins/SMS_Module')
+const { phrases } = require('../plugins/SMS_Phrases')
+
+///
+const _faSr = _sr.fa
+
+// date formaters
+function SmsDateFormat(date) {
+ return moment(date).format('jYYYY/jMM/jDD')
+}
+
+module.exports.addLottery = [
+ [
+ body('title').notEmpty().withMessage(_faSr.required.title),
+
+ body('winnersCount')
+ .notEmpty()
+ .withMessage('تعداد برندگان قرعه کشی را مشخص کنید')
+ .bail()
+ .isNumeric()
+ .withMessage(_faSr.format.number)
+ .bail()
+ .custom((value, { req }) => {
+ if (Number(value) < 1) return Promise.reject(new Error('تعداد برندگان نمیتواند کمتر از 1 باشد'))
+ else return Promise.resolve()
+ }),
+
+ body('expireDate')
+ .notEmpty()
+ .withMessage('تاریخ پایان قرعه کشی را مشخص کنید')
+ .bail()
+ .isNumeric()
+ .withMessage('فرمت صحیح نیست')
+ .bail()
+ .custom((value, { req }) => {
+ if (Number(value) < Date.now()) return Promise.reject(new Error('نمیتوان تاریخ روز جاری یا قبل تر انتخاب کرد.'))
+ else return Promise.resolve()
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const { title, winnersCount, expireDate } = req.body
+ const supportedImageFormats = ['png', 'jpg', 'jpeg', 'webp']
+ let entryBgImgName, resultBgImgName, entryWidth, entryHeight, resultWidth, resultHeight
+
+ try {
+ // check for other open lotteries
+ const openLotteries = await Lottery.find({ expired: false })
+ if (openLotteries.length) return res406(res, 'تا بسته شدن قرعه کشی قبلی نمیتوان قرعه کشی جدید ثبت کرد')
+
+ // required image validations
+ if (!req.files || !req.files.entryBgImg)
+ return res.status(422).json({ validation: { entryBgImg: { msg: 'عکس صفحه شرکت در قرعه کشی اجباری است' } } })
+
+ if (!req.files || !req.files.resultBgImg)
+ return res.status(422).json({
+ validation: {
+ resultBgImg: {
+ msg: 'عکس صفحه نتایج قرعه کشی اجباری است'
+ }
+ }
+ })
+
+ // save images
+ if (req.files) {
+ // save entry bg image
+ if (req.files.entryBgImg) {
+ const image = req.files.entryBgImg
+
+ // validate image format
+ if (!supportedImageFormats.includes(image.mimetype.split('/')[1])) {
+ return res.status(422).json({ validation: { entryBgImg: { msg: _faSr.format.image } } })
+ }
+
+ entryBgImgName = 'lotteryEntryBg_' + Date.now() + '.' + image.mimetype.split('/')[1]
+ const jimpImg = await jimp.read(image.data)
+ jimpImg.quality(100).write(`./static/uploads/images/lottery/${entryBgImgName}`)
+ entryWidth = jimpImg.bitmap.width
+ entryHeight = jimpImg.bitmap.height
+ }
+
+ // save result bg image
+ if (req.files.resultBgImg) {
+ const image = req.files.resultBgImg
+
+ // validate image format
+ if (!supportedImageFormats.includes(image.mimetype.split('/')[1])) {
+ return res.status(422).json({ validation: { resultBgImg: { msg: _faSr.format.image } } })
+ }
+
+ resultBgImgName = 'lotteryResultBg_' + Date.now() + '.' + image.mimetype.split('/')[1]
+ const jimpImg = await jimp.read(image.data)
+ jimpImg.quality(100).write(`./static/uploads/images/lottery/${resultBgImgName}`)
+ resultWidth = jimpImg.bitmap.width
+ resultHeight = jimpImg.bitmap.height
+ }
+ }
+
+ const data = {
+ title,
+ winnersCount,
+ expireDate
+ }
+ if (entryBgImgName) {
+ data.entryWidth = entryWidth
+ data.entryHeight = entryHeight
+ data.entryBgImg = entryBgImgName
+ }
+ if (resultBgImgName) {
+ data.resultWidth = resultWidth
+ data.resultHeight = resultHeight
+ data.resultBgImg = resultBgImgName
+ }
+ data.lotteryCode = 'L'.concat(moment(Date.now()).format('jMMMjDDjYYYY').toUpperCase())
+
+ const lottery = new Lottery(data)
+ await lottery.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (e) {
+ return res500(res, `there is an error here --- ${e}`)
+ }
+ }
+]
+
+module.exports.updateLottery = [
+ [
+ body('title').notEmpty().withMessage(_faSr.required.title),
+
+ body('winnersCount')
+ .notEmpty()
+ .withMessage('تعداد برندگان قرعه کشی را مشخص کنید')
+ .bail()
+ .isNumeric()
+ .withMessage(_faSr.format.number)
+ .bail()
+ .custom((value, { req }) => {
+ if (Number(value) < 1) return Promise.reject(new Error('تعداد برندگان نمیتواند کمتر از 1 باشد'))
+ else return Promise.resolve()
+ }),
+
+ body('expireDate')
+ .notEmpty()
+ .withMessage('تاریخ پایان قرعه کشی را مشخص کنید')
+ .bail()
+ .isNumeric()
+ .withMessage('فرمت صحیح نیست')
+ .bail()
+ .custom((value, { req }) => {
+ if (Number(value) < Date.now()) return Promise.reject(new Error('نمیتوان تاریخ روز جاری یا قبل تر انتخاب کرد.'))
+ else return Promise.resolve()
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const { title, winnersCount, expireDate } = req.body
+ const supportedImageFormats = ['png', 'jpg', 'jpeg', 'webp']
+ let entryBgImgName, resultBgImgName, entryWidth, entryHeight, resultWidth, resultHeight
+
+ try {
+ // check lottery expiration
+ const lottery = await Lottery.findById(req.params?.lotteryId)
+ if (lottery.expired) return res406(res, 'نمیتوان قرعه کشی بسته شده را ویرایش کرد')
+
+ // save images
+ if (req.files) {
+ // save entry bg image
+ if (req.files.entryBgImg) {
+ const image = req.files.entryBgImg
+
+ // validate image format
+ if (!supportedImageFormats.includes(image.mimetype.split('/')[1])) {
+ return res.status(422).json({ validation: { entryBgImg: { msg: _faSr.format.image } } })
+ }
+
+ entryBgImgName = 'lotteryEntryBg_' + Date.now() + '.' + image.mimetype.split('/')[1]
+ const jimpImg = await jimp.read(image.data)
+ jimpImg.quality(100).write(`./static/uploads/images/lottery/${entryBgImgName}`)
+ entryWidth = jimpImg.bitmap.width
+ entryHeight = jimpImg.bitmap.height
+ lottery.entryBgImg &&
+ fs.unlink(`./static/${lottery.entryBgImg}`, err => {
+ if (err) console.log(err)
+ })
+ }
+
+ // save result bg image
+ if (req.files.resultBgImg) {
+ const image = req.files.resultBgImg
+
+ // validate image format
+ if (!supportedImageFormats.includes(image.mimetype.split('/')[1])) {
+ return res.status(422).json({ validation: { resultBgImg: { msg: _faSr.format.image } } })
+ }
+
+ resultBgImgName = 'lotteryResultBg_' + Date.now() + '.' + image.mimetype.split('/')[1]
+ const jimpImg = await jimp.read(image.data)
+ jimpImg.quality(100).write(`./static/uploads/images/lottery/${resultBgImgName}`)
+ resultWidth = jimpImg.bitmap.width
+ resultHeight = jimpImg.bitmap.height
+ lottery.resultBgImg &&
+ fs.unlink(`./static/${lottery.resultBgImg}`, err => {
+ if (err) console.log(err)
+ })
+ }
+ }
+
+ lottery.title = title
+ lottery.winnersCount = winnersCount
+ lottery.expireDate = expireDate
+
+ if (entryBgImgName) {
+ lottery.entryWidth = entryWidth
+ lottery.entryHeight = entryHeight
+ lottery.entryBgImg = entryBgImgName
+ }
+ if (resultBgImgName) {
+ lottery.resultWidth = resultWidth
+ lottery.resultHeight = resultHeight
+ lottery.resultBgImg = resultBgImgName
+ }
+ await lottery.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (e) {
+ return res500(res, `there is an error here --- ${e}`)
+ }
+ }
+]
+
+module.exports.getAllLotteries = [
+ (req, res) => {
+ Lottery.find({})
+ .sort({ _id: -1 })
+ .exec((err, data) => {
+ if (err || !data) return res500(res, err)
+ else return res.json(data)
+ })
+ }
+]
+
+module.exports.getOneLottery = [
+ (req, res) => {
+ Lottery.findById(req.params?.lotteryId, (err, data) => {
+ if (err || !data) return res404(err)
+ else return res.json(data)
+ })
+ }
+]
+
+module.exports.getLastLottery = [
+ (req, res) => {
+ Lottery.find({})
+ .sort({ _id: -1 })
+ .select('-participants -winnersCount')
+ .exec((err, data) => {
+ if (err || !data?.length) return res404(res, 'هیچ قرعه کشی ای در دسترس نیست')
+ else return res.json(data[0])
+ })
+ }
+]
+
+module.exports.enrollParticipant = [
+ [
+ body('fullName')
+ .notEmpty()
+ .withMessage(_faSr.required.name)
+ .bail()
+ .isLength({ min: 4 })
+ .withMessage(_faSr.min_char.min4)
+ .bail()
+ .custom((value, { req }) => {
+ if (removeWhiteSpaces(value).length < 4) return Promise.reject(_faSr.min_char.min4)
+ if (removeWhiteSpaces(value).match(/^[A-Za-z]+$/g))
+ return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید.'))
+ else return true
+ }),
+
+ body('mobile')
+ .notEmpty()
+ .withMessage(_faSr.required.phone_number)
+ .bail()
+ .custom((value, { req }) => {
+ const mobileNStatus = checkMobileNumber(value)
+ if (!mobileNStatus) return Promise.reject(_faSr.format.phone_number)
+ else return Promise.resolve()
+ }),
+
+ body('serial')
+ .notEmpty()
+ .withMessage('شماره سریال گارانتی را وارد کنید')
+ .bail()
+ .custom(async (value, { req }) => {
+ try {
+ const serialStatus = await serialChecker(value)
+ if (!serialStatus) return Promise.reject(new Error('شماره سریال معتبر نمیباشد'))
+ else return Promise.resolve()
+ } catch (e) {
+ console.log('error in check serials for enrollLotteryController ---- error message: ', e)
+ return Promise.reject(new Error('مشکلی در بررسی شماره سریال پیش آمده'))
+ }
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const { fullName, mobile, serial, lotteryId } = req.body
+ try {
+ const lottery = await Lottery.findById(lotteryId)
+ if (!lottery) throw new Error('incorrect lottery id')
+ if (lottery.expired) return res404(res, 'مهلت شرکت در قرعه کشی به پایان رسیده')
+
+ for await (const item of lottery.participants) {
+ if (item.serial === serial) return res404(res, 'این شماره سریال از قبل توسط شخص دیگری ثبت شده است')
+ }
+
+ const enrollCode = lottery.lotteryCode
+ .concat(lottery.participants.length)
+ .concat((Math.random() * 100).toFixed(0))
+
+ const normalizedMN = normalizeMobileNumber(mobile)
+
+ const data = { fullName, mobile: normalizedMN, serial, enrollCode }
+ lottery.participants.push(data)
+ lottery.markModified('participants')
+ await lottery.save()
+
+ const msg = [
+ fullName,
+ ' عزیز، اطلاعات شما در تاریخ ',
+ SmsDateFormat(Date.now()),
+ ' برای شرکت در قرعه کشی آسان سرویس ثبت گردید. ',
+ '\n',
+ 'کد پیگیری: ',
+ enrollCode,
+ '\n',
+ phrases.signature
+ ]
+ SMS([normalizedMN], msg.join(''))
+ return res.json({ message: 'اطلاعات شما با موفیقت در سیستم ثبت شد. کد پیگیری به تلفن همراه شما ارسال گردید' })
+ } catch (e) {
+ return res500(res, `there is an error here --- ${e}`)
+ }
+ }
+]
+
+module.exports.deleteLottery = [
+ (req, res) => {
+ Lottery.findByIdAndDelete(req.params?.lotteryId, (err, oldData) => {
+ if (err || !oldData) return res404(res, err)
+ fs.unlink(`./static/${oldData.entryBgImg}`, err => {
+ if (err) console.log(err)
+ })
+ fs.unlink(`./static/${oldData.resultBgImg}`, err => {
+ if (err) console.log(err)
+ })
+ return res.json({ message: _faSr.response.success_remove })
+ })
+ }
+]
diff --git a/server/controllers/lotteryPopUpController.js b/server/controllers/lotteryPopUpController.js
new file mode 100644
index 0000000..eef8643
--- /dev/null
+++ b/server/controllers/lotteryPopUpController.js
@@ -0,0 +1,108 @@
+const fs = require('fs')
+const jimp = require('jimp')
+const { body, validationResult } = require('express-validator')
+const LotteryPopUp = require('../models/LotteryPopUp')
+const { _sr } = require('../plugins/serverResponses')
+const { res500, checkValidations } = require('../plugins/controllersHelperFunctions')
+
+///
+const _faSr = _sr.fa
+
+module.exports.modify = [
+ [
+ body('visible').exists().withMessage(_faSr.required.field).bail().isBoolean().withMessage(_faSr.format.boolean),
+
+ body('x').exists().withMessage(_faSr.required.field).bail().isNumeric().withMessage(_faSr.format.number),
+
+ body('y').exists().withMessage(_faSr.required.field).bail().isNumeric().withMessage(_faSr.format.number)
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const { visible, x, y } = req.body
+ let imageName = null
+
+ // check for background image
+ if (req.files?.bgImg) {
+ const image = req.files.bgImg
+
+ // validate image format
+ if (image.mimetype.split('/')[1] !== 'png') {
+ return res.status(422).json({ validation: { bgImg: { msg: 'فقط فرمت png قابل قبول است' } } })
+ }
+
+ imageName = 'popupBtn_' + Date.now() + '.png'
+
+ jimp
+ .read(image.data)
+ .then(img => {
+ img.quality(100).write(`./static/uploads/images/lottery/${imageName}`)
+ })
+ .catch(err => {
+ console.log(err)
+ })
+ }
+
+ try {
+ const lotteryPopUp = await LotteryPopUp.findOne()
+
+ if (!lotteryPopUp) {
+ const data = {
+ visible,
+ x,
+ y
+ }
+ if (imageName) {
+ data.bgImg = imageName
+ // get width & height from image
+ const imageDimensions = await jimp.read(`./static/uploads/images/lottery/${imageName}`)
+ data.w = imageDimensions.bitmap.width
+ data.h = imageDimensions.bitmap.height
+ }
+
+ await LotteryPopUp.create(data)
+ return res.json({ message: _faSr.response.success_save })
+ } else {
+ if (imageName) {
+ lotteryPopUp.bgImg &&
+ fs.unlink(`./static/${lotteryPopUp.bgImg}`, err => {
+ if (err) console.log(err)
+ })
+
+ lotteryPopUp.bgImg = imageName
+ }
+ lotteryPopUp.visible = visible
+ lotteryPopUp.x = x
+ lotteryPopUp.y = y
+
+ // get width & height from image
+ const imageDimensions = await jimp.read(`./static/${lotteryPopUp.bgImg}`)
+ lotteryPopUp.w = imageDimensions.bitmap.width
+ lotteryPopUp.h = imageDimensions.bitmap.height
+
+ await lotteryPopUp.save()
+ return res.json({ message: _faSr.response.success_save })
+ }
+ } catch (e) {
+ return res500(res, `there is an error here --- ${e}`)
+ }
+ }
+]
+
+module.exports.getPopUpInfo = [
+ async (req, res) => {
+ try {
+ const lotterPopUp = await LotteryPopUp.findOne()
+ return res.json(
+ lotterPopUp || {
+ visible: false,
+ x: 15,
+ y: 15,
+ w: 40,
+ h: 40
+ }
+ )
+ } catch (e) {
+ return res500(res, `there is an error here --- ${e}`)
+ }
+ }
+]
diff --git a/server/controllers/oldPieceRequestController.js b/server/controllers/oldPieceRequestController.js
new file mode 100644
index 0000000..36bcbe0
--- /dev/null
+++ b/server/controllers/oldPieceRequestController.js
@@ -0,0 +1,338 @@
+const moment = require('moment-jalaali')
+const { body, validationResult } = require('express-validator')
+const OldPieceRequest = require('../models/OldPieceRequest')
+const { _sr } = require('../plugins/serverResponses')
+const {
+ res404,
+ res406,
+ res500,
+ checkValidations,
+ generateRandomDigits
+} = require('../plugins/controllersHelperFunctions')
+const { SMS } = require('../plugins/SMS_Module')
+const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController')
+const _faSr = _sr.fa
+
+// date formaters
+function ArpaDateFormat(date) {
+ return moment(date).format('YYYY-MM-DD HH:mm:ss')
+}
+
+function SmsDateFormat(date) {
+ return moment(date).format('jYYYY/jMM/jDD')
+}
+
+/// ///////////////// agent
+module.exports.add_oldPiece_request = [
+ async (req, res) => {
+ try {
+ const { user_id, agent_id } = req
+ const thisTime = Date.now()
+
+ const data = {
+ user_id,
+ agent_id,
+ createDate: ArpaDateFormat(thisTime),
+ statusHistory: [{ status: 'temp', date: thisTime }]
+ }
+
+ const opr = OldPieceRequest(data)
+ await opr.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.add_oldPieces_to_opr = [
+ [
+ body('ItemReceptionTransDate').notEmpty().withMessage('تاریخ پذیرش را مشخص کنید'),
+
+ body('ItemName').notEmpty().withMessage('نام کالا را مشخص کنید'),
+
+ body('ItemID').notEmpty().withMessage('Include ItemID'),
+
+ body('ItemCode').notEmpty().withMessage('Include ItemCode'),
+
+ body('pieceName').notEmpty().withMessage('نام قطعه را مشخص کنید'),
+
+ body('pieceCode').notEmpty().withMessage('Include pieceCode'),
+
+ body('pieceId').notEmpty().withMessage('Include pieceId')
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const oprId = req.params?.oprId
+ const { ItemReceptionTransDate, ItemName, SerialNo1, ItemID, ItemCode, pieceName, pieceCode, pieceId } = req.body
+
+ const data = {
+ ItemReceptionTransDate,
+ ItemName,
+ SerialNo1,
+ ItemID,
+ ItemCode,
+ pieceName,
+ pieceCode,
+ pieceId
+ }
+
+ const opr = await OldPieceRequest.findById(oprId)
+ opr.items.push(data)
+ await opr.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (e) {
+ return res404(res, e)
+ }
+ }
+]
+
+module.exports.remove_oldPiece_from_opr = [
+ async (req, res) => {
+ try {
+ const oldPieceItemId = req.params?.oldPieceItemId
+ if (!oldPieceItemId) throw new Error('invalid id')
+ const opr = await OldPieceRequest.findOne({ 'items._id': oldPieceItemId })
+ opr.items.id(oldPieceItemId).remove()
+ await opr.save()
+ return res.json({ message: _faSr.response.success_remove })
+ } catch (e) {
+ console.log(e)
+
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.update_opr_description = [
+ (req, res) => {
+ const { description } = req.body
+ const data = {
+ description
+ }
+ OldPieceRequest.findByIdAndUpdate(req.params?.id, data, (err, oldData) => {
+ if (err) return res404(res, 'invalid id')
+ return res.json({ message: _faSr.response.success_save })
+ })
+ }
+]
+
+module.exports.get_all_opr_for_agent = [
+ (req, res) => {
+ const agent_id = req.agent_id
+ OldPieceRequest.find({ agent_id }, (err, data) => {
+ if (err) return res500(res, err)
+ else return res.json(data)
+ })
+ }
+]
+
+module.exports.get_one_opr_for_agent = [
+ (req, res) => {
+ OldPieceRequest.findById(req.params.id)
+ .populate(
+ 'agent_id',
+ 'full_name province_name city_name address agent_code postal_code tel_number fax_number mobile_number'
+ )
+ .exec((err, data) => {
+ if (err || !data) return res404(res, err)
+ else return res.json(data)
+ })
+ }
+]
+
+module.exports.delete_opr = [
+ async (req, res) => {
+ try {
+ const opr = await OldPieceRequest.findById(req.params?.id)
+ if (opr.status !== 'temp') return res406(res, 'نمیتوانید درخواست ارسال شده را حذف کنید')
+ await opr.remove()
+ return res.json({ message: _faSr.response.success_remove })
+ } catch (e) {
+ return res404(res, 'invalid id')
+ }
+ }
+]
+
+module.exports.change_opr_status_to_sent_by_agent = [
+ async (req, res) => {
+ try {
+ const thisTime = Date.now()
+
+ const opr = await OldPieceRequest.findById(req.params?.id).populate('agent_id')
+ if (!opr) throw new Error('invalid opr id')
+ const totalOpr = await OldPieceRequest.find({ status: { $ne: 'temp' } })
+
+ if (opr.status !== 'temp') return res406(res, 'این فرم قبلا برای آسان سرویس ارسال شده')
+ if (!opr.items.length) return res406(res, 'هیچ قطعه ای به فرم اضافه نکرده اید')
+
+ // generate tracking code
+ const trackingCode = 'OR' + totalOpr.length.toString().padStart(4, '0') + generateRandomDigits(2)
+
+ // modify opr
+ opr.status = 'sent'
+ opr.statusHistory.push({ status: 'sent', date: thisTime })
+ opr.trackingCode = trackingCode
+ opr.sendDate = ArpaDateFormat(thisTime)
+
+ // send sms for agent
+ const smsMsg = [
+ ' نماینده گرامی درخواست قطعه داغی شما در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' با کد پیگیری ',
+ trackingCode,
+ ' برای شرکت ارسال شد. '
+ ]
+
+ SMS([opr.agent_id.mobile_number], smsMsg.join(''))
+
+ await opr.save()
+ notifyAdmin('updateNewOldPieceRequests')
+ return res.json({ message: 'درخواست قطعه داغی ارسال شد' })
+ } catch (e) {
+ console.log(e)
+
+ return res404(res, e)
+ }
+ }
+]
+
+/// ///////////////// admin
+module.exports.get_all_opr_for_admin = [
+ async (req, res) => {
+ try {
+ const oprList = await OldPieceRequest.find({ status: { $ne: 'temp' } }).populate(
+ 'agent_id',
+ 'full_name agent_code mobile_number national_code province_name city_name province_id city_id'
+ )
+ return res.json(oprList)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.get_oneAgent_opr_for_admin = [
+ async (req, res) => {
+ const agent_id = req.params?.agent_id
+ try {
+ const oprList = await OldPieceRequest.find({ status: { $ne: 'temp' }, agent_id }).populate(
+ 'agent_id',
+ 'full_name agent_code mobile_number national_code province_name city_name'
+ )
+ return res.json(oprList)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.get_one_opr_for_admin = [
+ async (req, res) => {
+ try {
+ const { user_id } = req
+ const thisTime = Date.now()
+ const opr = await OldPieceRequest.findById(req.params?.id)
+ .populate(
+ 'agent_id',
+ 'agent_code full_name mobile_number fax_number tel_number province_name city_name national_code address postal_code store_name'
+ )
+ .populate('_openedBy', 'username first_name last_name')
+ .populate('_updatedBy', 'username first_name last_name')
+ if (!opr.seen) {
+ opr.seen = true
+ opr._openedBy = user_id
+ opr.status = 'ongoing'
+ opr.statusHistory.push({ status: 'ongoing', date: thisTime })
+ await opr.save()
+
+ const smsMsg = [
+ ' نماینده گرامی درخواست قطعه داغی شما با کد پیگیری ',
+ opr.trackingCode,
+ ' در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' در دست اقدام قرار گرفت. '
+ ]
+
+ SMS([opr.agent_id.mobile_number], smsMsg.join(''))
+ notifyAdmin('updateNewOldPieceRequests')
+ }
+ return res.json(opr)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.change_opr_status_by_admin = [
+ [
+ body('status')
+ .notEmpty()
+ .withMessage('status is required')
+ .bail()
+ .custom((value, { req }) => {
+ const acceptablvalues = ['waiting', 'delivered']
+ if (!acceptablvalues.includes(value)) return Promise.reject(new Error('invalid status'))
+ else return true
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const { user_id } = req
+ const { status, deliveryCode } = req.body
+ const thisTime = Date.now()
+
+ try {
+ const opr = await OldPieceRequest.findById(req.params?.id).populate('agent_id')
+ if (!opr) throw new Error('invalid opr id')
+
+ // check statuses
+ const statusErrMsg = 'invalid status for this time'
+ if (opr.status === 'delivered') return res406(res, statusErrMsg)
+ if (opr.status === 'waiting' && status === 'waiting') return res406(res, statusErrMsg)
+
+ // save status
+ opr._updatedBy = user_id
+ opr.status = status
+ opr.statusHistory.push({ status, date: thisTime })
+
+ let smsMessage
+ // differenet status methods
+ if (status === 'waiting') {
+ smsMessage = [
+ ' نماینده گرامی درخواست قطعه داغی شما با کد پیگیری ',
+ opr.trackingCode,
+ ' در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' در انتظار قطعه میباشد. '
+ ]
+ }
+
+ if (status === 'delivered') {
+ if (deliveryCode) opr.deliveryCode = deliveryCode
+
+ function deliveryCodePhrase() {
+ if (deliveryCode.length) return `کد پیگیری مرسوله: ${deliveryCode}` + '\n'
+ else return ''
+ }
+
+ smsMessage = [
+ ' نماینده گرامی درخواست قطعه داغی شما با کد پیگیری ',
+ opr.trackingCode,
+ ' در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' تحویل شد. ',
+ '\n',
+ deliveryCodePhrase()
+ ]
+ }
+
+ await SMS([opr.agent_id.mobile_number], smsMessage.join(''))
+ await opr.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
diff --git a/server/controllers/pieceController.js b/server/controllers/pieceController.js
new file mode 100644
index 0000000..e8fd29a
--- /dev/null
+++ b/server/controllers/pieceController.js
@@ -0,0 +1,63 @@
+const { body, validationResult } = require('express-validator')
+const Piece = require('../models/Piece')
+const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions')
+const { _sr } = require('../plugins/serverResponses')
+const _faSr = _sr.fa
+
+module.exports.add_piece = [
+ [body('name').notEmpty().withMessage(_faSr.required.title)],
+ checkValidations(validationResult),
+ (req, res) => {
+ const { name, code } = req.body
+
+ const data = { name, code }
+
+ const piece = new Piece(data)
+ piece.save(err => {
+ if (err) console.log(err)
+ return res.json({ message: _faSr.response.success_save })
+ })
+ }
+]
+
+module.exports.update_piece = [
+ [body('name').notEmpty().withMessage(_faSr.required.title)],
+ checkValidations(validationResult),
+ (req, res) => {
+ const { name, code } = req.body
+
+ const data = { name, code }
+
+ Piece.findByIdAndUpdate(req.params?.id, data, (err, oldData) => {
+ if (err) return res404(res, 'invalid id')
+ return res.json({ message: _faSr.response.success_save })
+ })
+ }
+]
+
+module.exports.get_one_pieces = [
+ (req, res) => {
+ Piece.findById(req.params?.id, (err, data) => {
+ if (err) return res404(res, 'invalid id')
+ return res.json(data)
+ })
+ }
+]
+
+module.exports.get_all_pieces = [
+ (req, res) => {
+ Piece.find({}, (err, data) => {
+ if (err) return res500(res, err)
+ return res.json(data)
+ })
+ }
+]
+
+module.exports.remove_piece = [
+ (req, res) => {
+ Piece.findByIdAndRemove(req.params?.id, (err, data) => {
+ if (err) return res404(res, 'invalid id')
+ return res.json({ message: _faSr.response.success_remove })
+ })
+ }
+]
diff --git a/server/controllers/pieceRequestController.js b/server/controllers/pieceRequestController.js
new file mode 100644
index 0000000..9892923
--- /dev/null
+++ b/server/controllers/pieceRequestController.js
@@ -0,0 +1,359 @@
+const moment = require('moment-jalaali')
+const { body, validationResult } = require('express-validator')
+const PieceRequest = require('../models/PieceRequest')
+const { _sr } = require('../plugins/serverResponses')
+const {
+ res404,
+ res406,
+ res500,
+ checkValidations,
+ generateRandomDigits
+} = require('../plugins/controllersHelperFunctions')
+const { SMS } = require('../plugins/SMS_Module')
+const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController')
+const _faSr = _sr.fa
+
+// date formaters
+function ArpaDateFormat(date) {
+ return moment(date).format('YYYY-MM-DD HH:mm:ss')
+}
+
+function SmsDateFormat(date) {
+ return moment(date).format('jYYYY/jMM/jDD')
+}
+
+/// ///////////////// agent
+module.exports.add_piece_request = [
+ async (req, res) => {
+ try {
+ const { user_id, agent_id } = req
+ const thisTime = Date.now()
+
+ const data = {
+ user_id,
+ agent_id,
+ createDate: ArpaDateFormat(thisTime),
+ statusHistory: [{ status: 'temp', date: thisTime }]
+ }
+
+ const pr = PieceRequest(data)
+ await pr.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.add_pieces_to_pr = [
+ [
+ body('ItemReceptionTransDate').notEmpty().withMessage('تاریخ پذیرش را مشخص کنید'),
+
+ body('ItemName').notEmpty().withMessage('نام کالا را مشخص کنید'),
+
+ body('ItemID').notEmpty().withMessage('Include ItemID'),
+
+ body('ItemCode').notEmpty().withMessage('Include ItemCode'),
+
+ body('gStatus').notEmpty().withMessage('وضعیت گارانتی را مشخص کنید'),
+
+ body('pieceName').notEmpty().withMessage('نام قطعه را مشخص کنید'),
+
+ body('pieceQuantity')
+ .notEmpty()
+ .withMessage('تعداد قطعه را مشخص کنید')
+ .isNumeric()
+ .withMessage(_faSr.format.number),
+
+ body('pieceCode').notEmpty().withMessage('Include pieceCode'),
+
+ body('pieceId').notEmpty().withMessage('Include pieceId')
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const prId = req.params?.prId
+ const {
+ ItemReceptionTransDate,
+ ItemName,
+ SerialNo1,
+ ItemID,
+ ItemCode,
+ gStatus,
+ pieceName,
+ pieceCode,
+ pieceQuantity,
+ pieceId
+ } = req.body
+
+ const data = {
+ ItemReceptionTransDate,
+ ItemName,
+ SerialNo1,
+ ItemID,
+ ItemCode,
+ gStatus,
+ pieceName,
+ pieceCode,
+ pieceQuantity,
+ pieceId
+ }
+
+ const pr = await PieceRequest.findById(prId)
+ pr.items.push(data)
+ await pr.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (e) {
+ return res404(res, e)
+ }
+ }
+]
+
+module.exports.remove_piece_from_pr = [
+ async (req, res) => {
+ try {
+ const pieceItemId = req.params?.pieceItemId
+ if (!pieceItemId) throw new Error('invalid id')
+ const pr = await PieceRequest.findOne({ 'items._id': pieceItemId })
+ pr.items.id(pieceItemId).remove()
+ await pr.save()
+ return res.json({ message: _faSr.response.success_remove })
+ } catch (e) {
+ console.log(e)
+
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.update_pr_description = [
+ (req, res) => {
+ const { description } = req.body
+ const data = {
+ description
+ }
+ PieceRequest.findByIdAndUpdate(req.params?.id, data, (err, oldData) => {
+ if (err) return res404(res, 'invalid id')
+ return res.json({ message: _faSr.response.success_save })
+ })
+ }
+]
+
+module.exports.get_all_pr_for_agent = [
+ (req, res) => {
+ const agent_id = req.agent_id
+ PieceRequest.find({ agent_id }, (err, data) => {
+ if (err) return res500(res, err)
+ else return res.json(data)
+ })
+ }
+]
+
+module.exports.get_one_pr_for_agent = [
+ (req, res) => {
+ PieceRequest.findById(req.params.id)
+ .populate(
+ 'agent_id',
+ 'full_name province_name city_name address agent_code postal_code tel_number fax_number mobile_number'
+ )
+ .exec((err, data) => {
+ if (err || !data) return res404(res, err)
+ else return res.json(data)
+ })
+ }
+]
+
+module.exports.delete_pr = [
+ async (req, res) => {
+ try {
+ const pr = await PieceRequest.findById(req.params?.id)
+ if (pr.status !== 'temp') return res406(res, 'نمیتوانید درخواست ارسال شده را حذف کنید')
+ await pr.remove()
+ return res.json({ message: _faSr.response.success_remove })
+ } catch (e) {
+ return res404(res, 'invalid id')
+ }
+ }
+]
+
+module.exports.change_pr_status_to_sent_by_agent = [
+ async (req, res) => {
+ try {
+ const thisTime = Date.now()
+
+ const pr = await PieceRequest.findById(req.params?.id).populate('agent_id')
+ if (!pr) throw new Error('invalid pr id')
+ const totalPr = await PieceRequest.find({ status: { $ne: 'temp' } })
+
+ if (pr.status !== 'temp') return res406(res, 'این فرم قبلا برای آسان سرویس ارسال شده')
+ if (!pr.items.length) return res406(res, 'هیچ قطعه ای به فرم اضافه نکرده اید')
+
+ // generate tracking code
+ const trackingCode = 'PR' + totalPr.length.toString().padStart(4, '0') + generateRandomDigits(2)
+
+ // modify pr
+ pr.status = 'sent'
+ pr.statusHistory.push({ status: 'sent', date: thisTime })
+ pr.trackingCode = trackingCode
+ pr.sendDate = ArpaDateFormat(thisTime)
+
+ // send sms for agent
+ const smsMsg = [
+ ' نماینده گرامی درخواست قطعه شما در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' با کد پیگیری ',
+ trackingCode,
+ ' برای شرکت ارسال شد. '
+ ]
+
+ SMS([pr.agent_id.mobile_number], smsMsg.join(''))
+
+ await pr.save()
+ notifyAdmin('updateNewPieceRequests')
+ return res.json({ message: 'درخواست قطعه ارسال شد' })
+ } catch (e) {
+ console.log(e)
+
+ return res404(res, e)
+ }
+ }
+]
+
+/// ///////////////// admin
+module.exports.get_all_pr_for_admin = [
+ async (req, res) => {
+ try {
+ const prList = await PieceRequest.find({ status: { $ne: 'temp' } }).populate(
+ 'agent_id',
+ 'full_name agent_code mobile_number national_code province_name city_name province_id city_id'
+ )
+ return res.json(prList)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.get_oneAgent_pr_for_admin = [
+ async (req, res) => {
+ const agent_id = req.params?.agent_id
+ try {
+ const prList = await PieceRequest.find({ status: { $ne: 'temp' }, agent_id }).populate(
+ 'agent_id',
+ 'full_name agent_code mobile_number national_code province_name city_name'
+ )
+ return res.json(prList)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.get_one_pr_for_admin = [
+ async (req, res) => {
+ try {
+ const { user_id } = req
+ const thisTime = Date.now()
+ const pr = await PieceRequest.findById(req.params?.id)
+ .populate(
+ 'agent_id',
+ 'agent_code full_name mobile_number fax_number tel_number province_name city_name national_code address postal_code store_name'
+ )
+ .populate('_openedBy', 'username first_name last_name')
+ .populate('_updatedBy', 'username first_name last_name')
+ if (!pr.seen) {
+ pr.seen = true
+ pr._openedBy = user_id
+ pr.status = 'ongoing'
+ pr.statusHistory.push({ status: 'ongoing', date: thisTime })
+ await pr.save()
+
+ const smsMsg = [
+ ' نماینده گرامی درخواست قطعه شما با کد پیگیری ',
+ pr.trackingCode,
+ ' در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' در دست اقدام قرار گرفت. '
+ ]
+
+ SMS([pr.agent_id.mobile_number], smsMsg.join(''))
+ notifyAdmin('updateNewPieceRequests')
+ }
+ return res.json(pr)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.change_pr_status_by_admin = [
+ [
+ body('status')
+ .notEmpty()
+ .withMessage('status is required')
+ .bail()
+ .custom((value, { req }) => {
+ const acceptablvalues = ['waiting', 'delivered']
+ if (!acceptablvalues.includes(value)) return Promise.reject(new Error('invalid status'))
+ else return true
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const { user_id } = req
+ const { status, deliveryCode } = req.body
+ const thisTime = Date.now()
+
+ try {
+ const pr = await PieceRequest.findById(req.params?.id).populate('agent_id')
+ if (!pr) throw new Error('invalid pr id')
+
+ // check statuses
+ const statusErrMsg = 'invalid status for this time'
+ if (pr.status === 'delivered') return res406(res, statusErrMsg)
+ if (pr.status === 'waiting' && status === 'waiting') return res406(res, statusErrMsg)
+
+ // save status
+ pr._updatedBy = user_id
+ pr.status = status
+ pr.statusHistory.push({ status, date: thisTime })
+
+ let smsMessage
+ // differenet status methods
+ if (status === 'waiting') {
+ smsMessage = [
+ ' نماینده گرامی درخواست قطعه شما با کد پیگیری ',
+ pr.trackingCode,
+ ' در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' در انتظار قطعه میباشد. '
+ ]
+ }
+
+ if (status === 'delivered') {
+ if (deliveryCode) pr.deliveryCode = deliveryCode
+
+ function deliveryCodePhrase() {
+ if (deliveryCode.length) return `کد پیگیری مرسوله: ${deliveryCode}` + '\n'
+ else return ''
+ }
+
+ smsMessage = [
+ ' نماینده گرامی درخواست قطعه شما با کد پیگیری ',
+ pr.trackingCode,
+ ' در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' تحویل شد. ',
+ '\n',
+ deliveryCodePhrase()
+ ]
+ }
+
+ await SMS([pr.agent_id.mobile_number], smsMessage.join(''))
+ await pr.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
diff --git a/server/controllers/representationController.js b/server/controllers/representationController.js
new file mode 100644
index 0000000..2e95948
--- /dev/null
+++ b/server/controllers/representationController.js
@@ -0,0 +1,1232 @@
+const fs = require('fs')
+const { body, validationResult } = require('express-validator')
+const moment = require('moment-jalaali')
+const Mongoose = require('mongoose')
+const Representation = require('../models/Representation')
+const User = require('../models/User')
+const { SMS } = require('../plugins/SMS_Module')
+const { phrases } = require('../plugins/SMS_Phrases')
+const { _sr } = require('../plugins/serverResponses')
+const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController')
+const {
+ res404,
+ res406,
+ res500,
+ checkValidations,
+ checkMobileNumber,
+ checkNationalCode,
+ isPersian,
+ isPersianWithDigits
+} = require('../plugins/controllersHelperFunctions')
+
+const _faSr = _sr.fa
+
+// date formatters
+// function ArpaDateFormat(date) {
+// return moment(date).format('YYYY-MM-DD HH:mm:ss')
+// }
+
+function SmsDateFormat(date) {
+ return moment(date).format('jYYYY/jMM/jDD')
+}
+
+module.exports.add_representation = [
+ [
+ body('representation_type')
+ .notEmpty()
+ .withMessage('نوع نمایندگی را مشخص کنید')
+ .bail()
+ .custom((value, { req }) => {
+ const acceptedValues = ['verity', 'panatech', 'both']
+ if (!acceptedValues.includes(value)) return Promise.reject(new Error('invalid value'))
+ else return true
+ }),
+
+ body('full_name')
+ .notEmpty()
+ .withMessage(_faSr.required.name)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersian(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید'))
+ else return Promise.resolve()
+ }),
+
+ body('birth_date').notEmpty().withMessage(_faSr.required.birthdate),
+
+ body('id_number').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number),
+
+ body('place_of_issue')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید'))
+ else return Promise.resolve()
+ }),
+
+ body('national_code')
+ .notEmpty()
+ .withMessage(_faSr.required.national_code)
+ .custom((value, { req }) => {
+ if (!checkNationalCode(value)) return Promise.reject(_faSr.format.national_code)
+ else return Promise.resolve()
+ }),
+
+ body('fathers_name')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersian(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید'))
+ else return Promise.resolve()
+ }),
+
+ body('education_level').notEmpty().withMessage(_faSr.required.field),
+
+ body('military_status')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید'))
+ else return Promise.resolve()
+ }),
+
+ body('store_name').notEmpty().withMessage(_faSr.required.field),
+
+ body('province_name').notEmpty().withMessage(_faSr.required.field),
+
+ body('province_id').notEmpty().withMessage(_faSr.required.field),
+
+ body('city_name').notEmpty().withMessage(_faSr.required.field),
+
+ body('city_id').notEmpty().withMessage(_faSr.required.field),
+
+ body('postal_code').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number),
+
+ body('mobile_number')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .isNumeric()
+ .withMessage(_faSr.format.number)
+ .custom((value, { req }) => {
+ if (!checkMobileNumber(value)) return Promise.reject(new Error('فرمت شماره موبایل درست نمیباشد'))
+ else return Promise.resolve()
+ }),
+
+ body('tel_number').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number),
+
+ body('email').notEmpty().withMessage(_faSr.required.field).bail().isEmail().withMessage(_faSr.format.email),
+
+ body('address')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید'))
+ else return Promise.resolve()
+ }),
+
+ body('business_license')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .bail()
+ .isBoolean()
+ .withMessage(_faSr.format.boolean),
+
+ body('ownership_type').notEmpty().withMessage(_faSr.required.field),
+
+ body('total_area').notEmpty().withMessage(_faSr.required.field),
+
+ body('repair_area').notEmpty().withMessage(_faSr.required.field),
+
+ body('stock_area').notEmpty().withMessage(_faSr.required.field),
+
+ body('customer_reference_floor').notEmpty().withMessage(_faSr.required.field),
+
+ body('place_location').notEmpty().withMessage(_faSr.required.field),
+
+ body('geo_location').notEmpty().withMessage(_faSr.required.field),
+
+ body('banner_info').notEmpty().withMessage(_faSr.required.field),
+
+ body('repair_technicians').notEmpty().withMessage(_faSr.required.field),
+
+ body('repair_masters').notEmpty().withMessage(_faSr.required.field),
+
+ body('office_workers').notEmpty().withMessage(_faSr.required.field),
+
+ body('bike_deliveries').notEmpty().withMessage(_faSr.required.field),
+
+ body('computer_repair_exp').notEmpty().withMessage(_faSr.required.field),
+
+ body('multimedia_repair_exp').notEmpty().withMessage(_faSr.required.field),
+
+ body('business_exp').notEmpty().withMessage(_faSr.required.field),
+
+ body('know_asanServ_from').notEmpty().withMessage(_faSr.required.field),
+
+ body('asanServ_products_knowledge').notEmpty().withMessage(_faSr.required.field),
+
+ body('computer_saling_exp').notEmpty().withMessage(_faSr.required.field)
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const { user_id } = req
+ if (!user_id) throw new Error('invalid user id')
+ const {
+ representation_type,
+ full_name,
+ birth_date,
+ id_number,
+ place_of_issue,
+ national_code,
+ fathers_name,
+ education_level,
+ military_status,
+ certificates,
+ store_name,
+ province_name,
+ province_id,
+ city_name,
+ city_id,
+ postal_code,
+ mobile_number,
+ tel_number,
+ fax_number,
+ economic_code,
+ email,
+ address,
+ business_license,
+ ownership_type,
+ total_area,
+ repair_area,
+ stock_area,
+ customer_reference_floor,
+ place_location,
+ geo_location,
+ banner_info,
+ repair_technicians,
+ repair_masters,
+ office_workers,
+ bike_deliveries,
+ computer_repair_exp,
+ multimedia_repair_exp,
+ business_exp,
+ know_asanServ_from,
+ introducer_info,
+ asanServ_products_knowledge,
+ computer_saling_exp,
+ computer_saling_description,
+ other_representations,
+ more_descriptions
+ } = req.body
+ const data = {
+ user_id,
+ representation_type,
+ full_name,
+ birth_date,
+ id_number,
+ place_of_issue,
+ national_code,
+ fathers_name,
+ education_level,
+ military_status,
+ certificates,
+ store_name,
+ province_name,
+ province_id,
+ city_name,
+ city_id,
+ postal_code,
+ mobile_number,
+ tel_number,
+ fax_number,
+ economic_code,
+ email,
+ address,
+ business_license,
+ ownership_type,
+ total_area,
+ repair_area,
+ stock_area,
+ customer_reference_floor,
+ place_location,
+ geo_location,
+ banner_info,
+ repair_technicians,
+ repair_masters,
+ office_workers,
+ bike_deliveries,
+ computer_repair_exp,
+ multimedia_repair_exp,
+ business_exp,
+ know_asanServ_from,
+ introducer_info,
+ asanServ_products_knowledge,
+ computer_saling_exp,
+ computer_saling_description,
+ other_representations,
+ more_descriptions
+ }
+
+ try {
+ const checkUserRepresentations = await Representation.find({ user_id, archived: false })
+ if (checkUserRepresentations.length)
+ return res406(res, 'تا زمانی که درخواست قبلی توسط کارشناسان تعیین وضعیت نشود نمیتوانید درخواست جدیدی ثبت کنید.')
+ const allRepresentations = await Representation.find()
+ const representation_code =
+ 'ASAREP' +
+ moment(Date.now()).format('jMMM').toUpperCase() +
+ allRepresentations.length.toString().padStart(4, '0')
+
+ data.representation_code = representation_code
+
+ const representation = new Representation(data)
+ await representation.save()
+ const user = await User.findById(user_id)
+ user.askedForRepresentation = true
+ user.representation_code = representation_code
+ await user.save()
+
+ const smsMessage = [
+ ' متقاضی گرامی درخواست شما با کد پیگیری ',
+ representation_code,
+ ' در تاریخ ',
+ SmsDateFormat(Date.now()),
+ ' در سامانه ثبت شد. ',
+ '\n',
+ ' بعد از بررسی مدارک توسط کارشناسان نتیجه از طریق پیامک برای شما ارسال خواهد شد، همچنین میتوانید با کد پیگیری از طریق نشانی زیر وضعیت درخواست خود را بررسی کند. ',
+ '\n',
+ 'https://asan-service.com/representation',
+ '\n',
+ phrases.signature
+ ]
+
+ const responseMsg = ['درخواست شما باموفقیت ثبت شد.', '\n', ' کد پیگیری: ', representation_code]
+
+ SMS([mobile_number], smsMessage.join(''))
+ notifyAdmin('updateNewRepresentations')
+ return res.json({ message: responseMsg.join('') })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.edit_representation_by_user = [
+ [
+ body('representation_type')
+ .notEmpty()
+ .withMessage('نوع نمایندگی را مشخص کنید')
+ .bail()
+ .custom((value, { req }) => {
+ const acceptedValues = ['verity', 'panatech', 'both']
+ if (!acceptedValues.includes(value)) return Promise.reject(new Error('invalid value'))
+ else return true
+ }),
+
+ body('full_name')
+ .notEmpty()
+ .withMessage(_faSr.required.name)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersian(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید'))
+ else return Promise.resolve()
+ }),
+
+ body('birth_date').notEmpty().withMessage(_faSr.required.birthdate),
+
+ body('id_number').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number),
+
+ body('place_of_issue')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید'))
+ else return Promise.resolve()
+ }),
+
+ body('national_code')
+ .notEmpty()
+ .withMessage(_faSr.required.national_code)
+ .custom((value, { req }) => {
+ if (!checkNationalCode(value)) return Promise.reject(_faSr.format.national_code)
+ else return Promise.resolve()
+ }),
+
+ body('fathers_name')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersian(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید'))
+ else return Promise.resolve()
+ }),
+
+ body('education_level').notEmpty().withMessage(_faSr.required.field),
+
+ body('military_status')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید'))
+ else return Promise.resolve()
+ }),
+
+ body('store_name').notEmpty().withMessage(_faSr.required.field),
+
+ body('province_name').notEmpty().withMessage(_faSr.required.field),
+
+ body('province_id').notEmpty().withMessage(_faSr.required.field),
+
+ body('city_name').notEmpty().withMessage(_faSr.required.field),
+
+ body('city_id').notEmpty().withMessage(_faSr.required.field),
+
+ body('postal_code').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number),
+
+ body('mobile_number')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .isNumeric()
+ .withMessage(_faSr.format.number)
+ .custom((value, { req }) => {
+ if (!checkMobileNumber(value)) return Promise.reject(new Error('فرمت شماره موبایل درست نمیباشد'))
+ else return Promise.resolve()
+ }),
+
+ body('tel_number').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number),
+
+ body('email').notEmpty().withMessage(_faSr.required.field).bail().isEmail().withMessage(_faSr.format.email),
+
+ body('address')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید'))
+ else return Promise.resolve()
+ }),
+
+ body('business_license')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .bail()
+ .isBoolean()
+ .withMessage(_faSr.format.boolean),
+
+ body('ownership_type').notEmpty().withMessage(_faSr.required.field),
+
+ body('total_area').notEmpty().withMessage(_faSr.required.field),
+
+ body('repair_area').notEmpty().withMessage(_faSr.required.field),
+
+ body('stock_area').notEmpty().withMessage(_faSr.required.field),
+
+ body('customer_reference_floor').notEmpty().withMessage(_faSr.required.field),
+
+ body('place_location').notEmpty().withMessage(_faSr.required.field),
+
+ body('geo_location').notEmpty().withMessage(_faSr.required.field),
+
+ body('banner_info').notEmpty().withMessage(_faSr.required.field),
+
+ body('repair_technicians').notEmpty().withMessage(_faSr.required.field),
+
+ body('repair_masters').notEmpty().withMessage(_faSr.required.field),
+
+ body('office_workers').notEmpty().withMessage(_faSr.required.field),
+
+ body('bike_deliveries').notEmpty().withMessage(_faSr.required.field),
+
+ body('computer_repair_exp').notEmpty().withMessage(_faSr.required.field),
+
+ body('multimedia_repair_exp').notEmpty().withMessage(_faSr.required.field),
+
+ body('business_exp').notEmpty().withMessage(_faSr.required.field),
+
+ body('know_asanServ_from').notEmpty().withMessage(_faSr.required.field),
+
+ body('asanServ_products_knowledge').notEmpty().withMessage(_faSr.required.field),
+
+ body('computer_saling_exp').notEmpty().withMessage(_faSr.required.field)
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const { user_id } = req
+ const representation_id = req.params?.representation_id
+ if (!user_id || !representation_id) throw new Error('invalid user id')
+ const {
+ representation_type,
+ full_name,
+ birth_date,
+ id_number,
+ place_of_issue,
+ national_code,
+ fathers_name,
+ education_level,
+ military_status,
+ certificates,
+ store_name,
+ province_name,
+ province_id,
+ city_name,
+ city_id,
+ postal_code,
+ mobile_number,
+ tel_number,
+ fax_number,
+ economic_code,
+ email,
+ address,
+ business_license,
+ ownership_type,
+ total_area,
+ repair_area,
+ stock_area,
+ customer_reference_floor,
+ place_location,
+ geo_location,
+ banner_info,
+ repair_technicians,
+ repair_masters,
+ office_workers,
+ bike_deliveries,
+ computer_repair_exp,
+ multimedia_repair_exp,
+ business_exp,
+ know_asanServ_from,
+ introducer_info,
+ asanServ_products_knowledge,
+ computer_saling_exp,
+ computer_saling_description,
+ other_representations,
+ more_descriptions
+ } = req.body
+ const data = {
+ user_id,
+ representation_type,
+ full_name,
+ birth_date,
+ id_number,
+ place_of_issue,
+ national_code,
+ fathers_name,
+ education_level,
+ military_status,
+ certificates,
+ store_name,
+ province_name,
+ province_id,
+ city_name,
+ city_id,
+ postal_code,
+ mobile_number,
+ tel_number,
+ fax_number,
+ economic_code,
+ email,
+ address,
+ business_license,
+ ownership_type,
+ total_area,
+ repair_area,
+ stock_area,
+ customer_reference_floor,
+ place_location,
+ geo_location,
+ banner_info,
+ repair_technicians,
+ repair_masters,
+ office_workers,
+ bike_deliveries,
+ computer_repair_exp,
+ multimedia_repair_exp,
+ business_exp,
+ know_asanServ_from,
+ introducer_info,
+ asanServ_products_knowledge,
+ computer_saling_exp,
+ computer_saling_description,
+ other_representations,
+ more_descriptions
+ }
+ try {
+ const checkAccess = await Representation.findById(representation_id)
+ if (!checkAccess.editAccess) throw new Error('شما دسترسی ویرایش اطلاعات ندارید')
+ await Representation.findByIdAndUpdate(representation_id, data)
+ return res.json({ message: 'با موفقیت آپدیت شد' })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.getAll = [
+ (req, res) => {
+ Representation.find({})
+ .select(
+ 'user_id representation_code agent_code full_name national_code mobile_number province_name province_id city_name city_id status created_at representation_type'
+ )
+ .exec((err, data) => {
+ if (err || !data) return res404(res, err)
+ else return res.json(data)
+ })
+ }
+]
+
+module.exports.getOne = [
+ async (req, res) => {
+ try {
+ const representation = await Representation.findById(req.params?.id)
+ .populate('_updatedBy', 'username first_name last_name')
+ .populate('_revokedBy', 'username first_name last_name')
+ if (!representation) return res404(res, 'incorrect id')
+ if (representation.status === 'registered') {
+ representation.status = 'ongoing'
+ await representation.save()
+ const smsMsg = [
+ ' متقاصی گرامی درخواست شما برای اخذ نمایندگی آسان سرویس به کد پیگیری ',
+ representation.representation_code,
+ ' مورخ ',
+ SmsDateFormat(Date.now()),
+ ' توسط کارشناسان آسان سرویس مشاهده و مورد بررسی قرار گرفت. ',
+ '\n',
+ phrases.signature
+ ]
+ SMS([representation.mobile_number], smsMsg.join(''))
+ notifyAdmin('updateNewRepresentations')
+ return res.json(representation)
+ } else return res.json(representation)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.getLastUserRep = [
+ async (req, res) => {
+ try {
+ const repId = req.params?.id
+ const isId = Mongoose.isValidObjectId(repId)
+ const representation = await Representation.findOne({
+ $or: [{ representation_code: repId }, { _id: isId ? repId : undefined }]
+ })
+ if (!representation) return res404(res, 'incorrect id')
+ return res.json(representation)
+ } catch (e) {
+ console.log('🚀 ~ file: representationController.js:620 ~ e', e)
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.change_form_status = [
+ async (req, res) => {
+ const status = req.body?.status
+ // status prop validation check
+ if (!status) return res500(res, 'status prop required')
+ const availableStatuses = [
+ 'verification',
+ 'accepted',
+ 'rejected',
+ 'uploadOff',
+ 'uploadOn',
+ 'editAccessOn',
+ 'editAccessOff'
+ ]
+ if (!availableStatuses.includes(status)) return res500(res, 'invalid status')
+
+ try {
+ // find representation and user
+ const representation = await Representation.findById(req.params.id)
+ if (!representation) return res404(res, 'incorrect id')
+ if (
+ status !== 'uploadOn' &&
+ status !== 'uploadOff' &&
+ status !== 'editAccessOn' &&
+ status !== 'editAccessOff' &&
+ representation.archived
+ ) {
+ return res500(res, 'شما نمیتوانید وضعیت این فرم را تغییر دهید')
+ }
+ const user = await User.findById(representation.user_id)
+ if (!user) throw new Error('incorrect user id')
+ if (status === 'accepted' && user.isAgent) return res500(res, 'حساب این کاربر قبلا به حساب نماینده تبدیل شده')
+
+ // change upload ability
+ if (status === 'uploadOn') {
+ representation.upload = true
+ await representation.save()
+ const smsMsg = [
+ ' متقاصی گرامی دسرسی آپلود مدارک برای درخواست ',
+ representation.representation_code,
+ ' ایجاد شد، لطفا هرچه سریع تر نسبت به آپلود مدارک خود اقدام کنید. ',
+ '\n',
+ phrases.signature
+ ]
+ SMS([representation.mobile_number], smsMsg.join(''))
+ return res.json({ message: 'وضعیت جدید در سیستم ثبت شد و پیامک اطلاع رسانی برای متقاضی ارسال شد' })
+ }
+ if (status === 'uploadOff') {
+ representation.upload = false
+ await representation.save()
+ return res.json({ message: 'وضعیت جدید در سیستم ثبت شد' })
+ }
+ // change editAccess ability
+ if (status === 'editAccessOn') {
+ representation.editAccess = true
+ await representation.save()
+ const smsMsg = [
+ ' نماینده گرامی دسرسی ویرایش اطلاعات نمایندگی برای شما ایجاد شد، لطفا هرچه سریع تر نسبت به ویرایش اطلاعات خود اقدام کنید.',
+ '\n',
+ phrases.signature
+ ]
+ SMS([representation.mobile_number], smsMsg.join(''))
+ return res.json({ message: 'وضعیت جدید در سیستم ثبت شد و پیامک اطلاع رسانی برای متقاضی ارسال شد' })
+ }
+ if (status === 'editAccessOff') {
+ representation.editAccess = false
+ await representation.save()
+ return res.json({ message: 'وضعیت جدید در سیستم ثبت شد' })
+ }
+ // change representation and user data
+ representation.status = status
+ user.askedForRepresentation = true
+ user.isAgent = false
+
+ if (status === 'rejected') {
+ user.askedForRepresentation = false
+ representation.archived = true
+ representation.upload = false
+ representation.editAccess = false
+ }
+ if (status === 'accepted') {
+ user.askedForRepresentation = false
+ representation.archived = true
+ representation.upload = false
+ representation.editAccess = false
+ user.isAgent = true
+ user.representation_id = representation._id
+ const agentsCount = await Representation.find({ status: 'accepted' })
+ representation.agent_code = 'ASG' + agentsCount.length.toString().padStart(2, '0')
+ }
+
+ // save changes
+ await representation.save()
+ await user.save()
+
+ // send sms for user
+ function statusToPhrase() {
+ if (status === 'verification') return ' در وضعیت احراز هویت و بررسی مدارک قرار گرفت.'
+ else if (status === 'rejected') return ' رد شد. '
+ else return ' مورد قبول قرار گرفت. برای ادامه ی فرایند از طرف شرکت با شما تماس گرفته خواهد شد. '
+ }
+
+ const smsMsg = [
+ ' متقاصی گرامی درخواست شما برای اخذ نمایندگی آسان سرویس به کد پیگیری ',
+ representation.representation_code,
+ ' مورخ ',
+ SmsDateFormat(Date.now()),
+ statusToPhrase(),
+ '\n',
+ phrases.signature
+ ]
+ SMS([representation.mobile_number], smsMsg.join(''))
+ return res.json({ message: 'وضعیت جدید در سیستم ثبت شد و پیامک اطلاع رسانی برای متقاضی ارسال شد' })
+ } catch (e) {
+ return res404(res, `there is an error here --- ${e}`)
+ }
+ }
+]
+
+module.exports.check_representation = [
+ [
+ body('representation_code')
+ .notEmpty()
+ .withMessage('کد پیگیری را وارد کنید')
+ .bail()
+ .isLength({ min: 13 })
+ .withMessage('فرمت کدپیگیری صحیح نمیباشد')
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ const { representation_code } = req.body
+ const { user_id } = req
+ if (!user_id) return res500(res, 'ابتدا وارد حساب کاربری خود شوید')
+ Representation.findOne({ user_id, representation_code: representation_code.toUpperCase() })
+ .select('_id status upload created_at')
+ .exec((err, data) => {
+ if (err || !data) return res404(res, 'درخواستی با این کد پیگیری ثبت نشده')
+ else return res.json(data)
+ })
+ }
+]
+
+module.exports.upload_image_to_representation = [
+ (req, res) => {
+ const file = req.files?.file
+ const fieldName = req.query?.name
+ const userType = req.params?.userType
+ const representation_code = req.params?.representation_code
+
+ if (!file) return res500(res, 'هیچ فایلی برای آپلود انتخاب نکرده اید')
+ if (!fieldName) return res500(res, 'هیچ دسته بندی ای انتخاب نکرده اید')
+ if (file.mimetype !== 'image/jpeg') return res500(res, 'فقط فرمت jpg قابل قبول است')
+ if (file.size / 1024 / 1024 > 2) return res500(res, 'حداکثر حجم مجاز آپلود 2 مگابایت میباشد')
+
+ Representation.findOne({ representation_code }, (err, data) => {
+ if (err || !data) return res500(res, 'invalid rep id')
+ if ((!data.upload || data.status === 'rejected') && userType !== 'admin') {
+ return res500(res, 'شما دسترسی آپلود ندارید')
+ }
+ const fileName = data.representation_code + '_' + Date.now() + Math.random() + fieldName + file.name
+ data[fieldName].push({ name: fileName })
+ data.markModified(fieldName)
+ file.mv(`./static/uploads/representation_docs/${fileName}`, err => {
+ if (err) console.log(err)
+ })
+ data.save((err, data) => {
+ if (err) console.log(err)
+ return res.json({ message: 'فایل مدارک در سیستم ذخیره شد' })
+ })
+ })
+ }
+]
+
+module.exports.remove_image_from_representation = [
+ (req, res) => {
+ const representation_code = req.params?.representation_code
+ const imgId = req.params?.imgId
+ const fieldName = req.query?.name
+ const userType = req.params?.userType
+
+ if (!representation_code || !imgId || !fieldName) return res500(res, 'please provide all nessesory information')
+
+ Representation.findOne({ representation_code }, (err, data) => {
+ if (err || !data) return res500(res, 'invalid rep id')
+ if ((!data.upload || data.status === 'rejected') && userType !== 'admin') {
+ return res500(res, 'شما دسترسی آپلود ندارید')
+ }
+ try {
+ const img = data[fieldName].id(imgId)
+ img.remove(err => {
+ if (err) console.log(err)
+ fs.unlink(`./static/uploads/representation_docs/${img.name}`, err => {
+ if (err) console.log(err)
+ })
+ })
+ data.save((err, data) => {
+ if (err) console.log(err)
+ return res.json({ message: 'file removed successfully' })
+ })
+ } catch (err) {
+ res500(res, 'error')
+ }
+ })
+ }
+]
+
+module.exports.get_agents = [
+ (req, res) => {
+ Representation.find({ status: 'accepted', _revoked: false })
+ .select(
+ 'full_name province_name province_id city_name city_id address postal_code tel_number fax_number mobile_number email store_name agent_code representation_type'
+ )
+ .exec((err, agents) => {
+ if (err) return res404(res, err)
+ return res.json(agents)
+ })
+ }
+]
+
+module.exports.get_revoked_agents_for_admin = [
+ (req, res) => {
+ Representation.find({ _revoked: true })
+ .select(
+ 'full_name province_name province_id city_name city_id address postal_code tel_number fax_number mobile_number email store_name agent_code representation_type'
+ )
+ .exec((err, agents) => {
+ if (err) return res404(res, err)
+ return res.json(agents)
+ })
+ }
+]
+
+module.exports.update_representation_by_admin = [
+ [
+ body('representation_type')
+ .notEmpty()
+ .withMessage('نوع نمایندگی را مشخص کنید')
+ .bail()
+ .custom((value, { req }) => {
+ const acceptedValues = ['verity', 'panatech', 'both']
+ if (!acceptedValues.includes(value)) return Promise.reject(new Error('invalid value'))
+ else return true
+ }),
+
+ body('full_name')
+ .notEmpty()
+ .withMessage(_faSr.required.name)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersian(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید'))
+ else return Promise.resolve()
+ }),
+
+ body('birth_date').notEmpty().withMessage(_faSr.required.birthdate),
+
+ body('id_number').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number),
+
+ body('place_of_issue')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید'))
+ else return Promise.resolve()
+ }),
+
+ body('national_code')
+ .notEmpty()
+ .withMessage(_faSr.required.national_code)
+ .custom((value, { req }) => {
+ if (!checkNationalCode(value)) return Promise.reject(_faSr.format.national_code)
+ else return Promise.resolve()
+ }),
+
+ body('fathers_name')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersian(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید'))
+ else return Promise.resolve()
+ }),
+
+ body('education_level').notEmpty().withMessage(_faSr.required.field),
+
+ body('military_status')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید'))
+ else return Promise.resolve()
+ }),
+
+ body('store_name').notEmpty().withMessage(_faSr.required.field),
+
+ body('province_name').notEmpty().withMessage(_faSr.required.field),
+
+ body('province_id').notEmpty().withMessage(_faSr.required.field),
+
+ body('city_name').notEmpty().withMessage(_faSr.required.field),
+
+ body('city_id').notEmpty().withMessage(_faSr.required.field),
+
+ body('postal_code').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number),
+
+ body('mobile_number')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .isNumeric()
+ .withMessage(_faSr.format.number)
+ .custom((value, { req }) => {
+ if (!checkMobileNumber(value)) return Promise.reject(new Error('فرمت شماره موبایل درست نمیباشد'))
+ else return Promise.resolve()
+ }),
+
+ body('tel_number').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number),
+
+ body('email').notEmpty().withMessage(_faSr.required.field).bail().isEmail().withMessage(_faSr.format.email),
+
+ body('address')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید'))
+ else return Promise.resolve()
+ }),
+
+ body('business_license')
+ .notEmpty()
+ .withMessage(_faSr.required.field)
+ .bail()
+ .isBoolean()
+ .withMessage(_faSr.format.boolean),
+
+ body('ownership_type').notEmpty().withMessage(_faSr.required.field),
+
+ body('total_area').notEmpty().withMessage(_faSr.required.field),
+
+ body('repair_area').notEmpty().withMessage(_faSr.required.field),
+
+ body('stock_area').notEmpty().withMessage(_faSr.required.field),
+
+ body('customer_reference_floor').notEmpty().withMessage(_faSr.required.field),
+
+ body('place_location').notEmpty().withMessage(_faSr.required.field),
+
+ body('geo_location').notEmpty().withMessage(_faSr.required.field),
+
+ body('banner_info').notEmpty().withMessage(_faSr.required.field),
+
+ body('repair_technicians').notEmpty().withMessage(_faSr.required.field),
+
+ body('repair_masters').notEmpty().withMessage(_faSr.required.field),
+
+ body('office_workers').notEmpty().withMessage(_faSr.required.field),
+
+ body('bike_deliveries').notEmpty().withMessage(_faSr.required.field),
+
+ body('computer_repair_exp').notEmpty().withMessage(_faSr.required.field),
+
+ body('multimedia_repair_exp').notEmpty().withMessage(_faSr.required.field),
+
+ body('business_exp').notEmpty().withMessage(_faSr.required.field),
+
+ body('know_asanServ_from').notEmpty().withMessage(_faSr.required.field),
+
+ body('asanServ_products_knowledge').notEmpty().withMessage(_faSr.required.field),
+
+ body('computer_saling_exp').notEmpty().withMessage(_faSr.required.field)
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const { user_id } = req
+ const representation_id = req.params?.id
+ if (!user_id || !representation_id) throw new Error('invalid user id')
+ const {
+ representation_type,
+ full_name,
+ birth_date,
+ id_number,
+ place_of_issue,
+ national_code,
+ fathers_name,
+ education_level,
+ military_status,
+ certificates,
+ store_name,
+ province_name,
+ province_id,
+ city_name,
+ city_id,
+ postal_code,
+ mobile_number,
+ tel_number,
+ fax_number,
+ economic_code,
+ email,
+ address,
+ business_license,
+ ownership_type,
+ total_area,
+ repair_area,
+ stock_area,
+ customer_reference_floor,
+ place_location,
+ geo_location,
+ banner_info,
+ repair_technicians,
+ repair_masters,
+ office_workers,
+ bike_deliveries,
+ computer_repair_exp,
+ multimedia_repair_exp,
+ business_exp,
+ know_asanServ_from,
+ introducer_info,
+ asanServ_products_knowledge,
+ computer_saling_exp,
+ computer_saling_description,
+ other_representations,
+ more_descriptions
+ } = req.body
+ const data = {
+ _updatedBy: user_id,
+ representation_type,
+ full_name,
+ birth_date,
+ id_number,
+ place_of_issue,
+ national_code,
+ fathers_name,
+ education_level,
+ military_status,
+ certificates,
+ store_name,
+ province_name,
+ province_id,
+ city_name,
+ city_id,
+ postal_code,
+ mobile_number,
+ tel_number,
+ fax_number,
+ economic_code,
+ email,
+ address,
+ business_license,
+ ownership_type,
+ total_area,
+ repair_area,
+ stock_area,
+ customer_reference_floor,
+ place_location,
+ geo_location,
+ banner_info,
+ repair_technicians,
+ repair_masters,
+ office_workers,
+ bike_deliveries,
+ computer_repair_exp,
+ multimedia_repair_exp,
+ business_exp,
+ know_asanServ_from,
+ introducer_info,
+ asanServ_products_knowledge,
+ computer_saling_exp,
+ computer_saling_description,
+ other_representations,
+ more_descriptions
+ }
+ try {
+ await Representation.findByIdAndUpdate(representation_id, data)
+ return res.json({ message: 'با موفقیت آپدیت شد' })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.revoke_representation_by_admin = [
+ async (req, res) => {
+ try {
+ const { user_id } = req
+ if (!user_id) return res406(res, 'invalid user id')
+ const representation = await Representation.findByIdAndUpdate(req.params?.id)
+ const agentAccount = await User.findById(representation.user_id)
+
+ representation._revoked = true
+ representation._revokedBy = user_id
+
+ agentAccount.isAgent = false
+ agentAccount.representation_id = undefined
+ agentAccount.askedForRepresentation = false
+
+ await representation.save()
+ await agentAccount.save()
+
+ return res.json({ message: 'امتیاز نمایندگی صلب شد' })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.add_agent_by_admin = [
+ async (req, res) => {
+ const user_id = req.body.user
+ if (!user_id) throw new Error('invalid user id')
+
+ const data = {
+ user_id,
+ representation_type: 'both',
+ full_name: '', // todo
+ birth_date: '',
+ id_number: '',
+ place_of_issue: '',
+ national_code: '', // todo
+ fathers_name: '',
+ education_level: '',
+ military_status: '',
+ certificates: '',
+ store_name: '',
+ province_name: '', // todo
+ province_id: '', // todo
+ city_name: '', // todo
+ city_id: '', // todo
+ postal_code: '',
+ mobile_number: '', // todo
+ tel_number: '',
+ fax_number: '',
+ economic_code: '',
+ email: '', // todo
+ address: '', // todo
+ business_license: true,
+ ownership_type: 'owner',
+ total_area: '',
+ repair_area: '',
+ stock_area: '',
+ customer_reference_floor: '',
+ place_location: 'other',
+ geo_location: 'inside_passage',
+ banner_info: '',
+ repair_technicians: '',
+ repair_masters: '',
+ office_workers: '',
+ bike_deliveries: '',
+ computer_repair_exp: '',
+ multimedia_repair_exp: '',
+ business_exp: '',
+ know_asanServ_from: 'other',
+ introducer_info: '',
+ asanServ_products_knowledge: 4,
+ computer_saling_exp: true,
+ computer_saling_description: '',
+ other_representations: [],
+ more_descriptions: ''
+ }
+
+ try {
+ const allRepresentations = await Representation.find()
+ // generate rep code
+ const representation_code =
+ 'ASAREP' +
+ moment(Date.now()).format('jMMM').toUpperCase() +
+ allRepresentations.length.toString().padStart(4, '0')
+
+ // generate agent code
+ const agentsCount = await Representation.find({ status: 'accepted' })
+ data.agent_code = 'ASG' + agentsCount.length.toString().padStart(2, '0')
+
+ data.representation_code = representation_code
+
+ // find user and import information
+ const user = await User.findById(user_id)
+ if (user.isAgent) return res500(res, 'حساب کاربر از قبل نماینده است')
+ user.askedForRepresentation = false
+ user.isAgent = true
+ user.representation_code = representation_code
+
+ data.full_name = user.first_name + ' ' + user.last_name
+ data.national_code = user.national_code
+ data.province_name = user.province_name
+ data.province_id = user.province_id
+ data.city_name = user.city_name
+ data.city_id = user.city_id
+ data.mobile_number = user.mobile_number
+ data.email = user.email
+ data.address = user.address
+ data.archived = true
+ data.upload = true
+ data.editAccess = true
+ data.status = 'accepted'
+
+ const representation = new Representation(data)
+ await representation.save()
+ user.representation_id = representation._id
+ await user.save()
+
+ return res.json({ representationId: representation.id })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
diff --git a/server/controllers/serialsExelController.js b/server/controllers/serialsExelController.js
new file mode 100644
index 0000000..8126b04
--- /dev/null
+++ b/server/controllers/serialsExelController.js
@@ -0,0 +1,113 @@
+const fs = require('fs')
+const { body, validationResult } = require('express-validator')
+const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions')
+const { _sr } = require('../plugins/serverResponses')
+const { serialChecker } = require('../plugins/asanServiceSerialChecker')
+const _faSr = _sr.fa
+
+const guaranteeSerialsPath = './static/uploads/serials'
+const productSerialsPath = './static/uploads/serials_products'
+
+/// // router modules
+module.exports.addExel = [
+ [
+ body('type')
+ .notEmpty()
+ .withMessage('choose type')
+ .bail()
+ .custom((value, { rew }) => {
+ const validValues = ['guaranteeSerial', 'orginality']
+ if (!validValues.includes(value)) return Promise.reject(new Error('invalid type'))
+ else return Promise.resolve()
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ if (!req.files?.file) return res.status(422).json({ validation: { file: { msg: 'فایل را اضافه کنید' } } })
+ if (!req.files?.file.name.split('.').some(item => ['xlsx', 'xltx', 'xlsm', 'xlsb'].includes(item)))
+ return res.status(422).json({ validation: { file: { msg: 'فرمت فایل درست نمیباشد' } } })
+ const file = req.files.file
+ const { type } = req.body
+ try {
+ const path = type === 'guaranteeSerial' ? guaranteeSerialsPath : productSerialsPath
+ const files = await fs.readdirSync(path)
+ for await (const item of files) {
+ if (file.name === item) return res.status(422).json({ validation: { file: { msg: 'نام فایل تکراریست' } } })
+ }
+
+ await file.mv(`${path}/${file.name}`)
+
+ return res.json({ message: _faSr.response.success_save })
+ } catch (err) {
+ return res500(res, err)
+ }
+ }
+]
+
+module.exports.getAllExels = [
+ (req, res) => {
+ const type = req.query?.type
+ if (!type) return res500(res, 'choose type')
+ const validValues = ['guaranteeSerial', 'orginality']
+ if (!validValues.includes(type)) return res500(res, 'choose type')
+ const path = type === 'guaranteeSerial' ? guaranteeSerialsPath : productSerialsPath
+ const downloadAblePath = type === 'guaranteeSerial' ? '/uploads/serials/' : '/uploads/serials_products/'
+ fs.readdir(path, (err, files) => {
+ if (err) return res500(res, err)
+ const filesWithURL = files.map(item => {
+ return { url: downloadAblePath, name: item }
+ })
+ return res.json(filesWithURL)
+ })
+ }
+]
+
+module.exports.removeExel = [
+ (req, res) => {
+ const type = req.query?.type
+ if (!type) return res500(res, 'choose type')
+ const validValues = ['guaranteeSerial', 'orginality']
+ if (!validValues.includes(type)) return res500(res, 'choose type')
+ const path = type === 'guaranteeSerial' ? guaranteeSerialsPath : productSerialsPath
+ fs.unlink(`${path}/${req.params.name}`, err => {
+ if (err) return res404(res, _faSr.not_found.item_id)
+ else return res.json({ message: _faSr.response.success_remove })
+ })
+ }
+]
+
+module.exports.checkSerial = [
+ [
+ body('serial').notEmpty().withMessage('شماره سریال را وارد کنید'),
+
+ body('type')
+ .notEmpty()
+ .withMessage('choose type')
+ .bail()
+ .custom((value, { rew }) => {
+ const validValues = ['guaranteeSerial', 'orginality']
+ if (!validValues.includes(value)) return Promise.reject(new Error('invalid type'))
+ else return Promise.resolve()
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const { serial, type } = req.body
+ const serialStatus = await serialChecker(serial, type)
+
+ let okMsg
+ if (type === 'guaranteeSerial') okMsg = 'شماره سریال گارانتی معتبر میباشد.'
+ else okMsg = 'شماره سریال کالا معتبر میباشد.'
+
+ let errMsg
+ if (type === 'guaranteeSerial') errMsg = 'شماره سریال گارانتی معتبر نیست.'
+ else errMsg = 'شماره سریال کالا معتبر نیست.'
+
+ if (serialStatus) return res.json({ message: okMsg })
+ else return res404(res, errMsg)
+ } catch (e) {
+ return res500(res, `there is an error here --- ${e}`)
+ }
+ }
+]
diff --git a/server/controllers/smsBroadcastController.js b/server/controllers/smsBroadcastController.js
new file mode 100644
index 0000000..dbca0f2
--- /dev/null
+++ b/server/controllers/smsBroadcastController.js
@@ -0,0 +1,52 @@
+const { body, validationResult } = require('express-validator')
+const SMSBroadcast = require('../models/SMSBroadcast')
+const { _sr } = require('../plugins/serverResponses')
+const { res500, checkValidations } = require('../plugins/controllersHelperFunctions')
+const { SMS } = require('../plugins/SMS_Module')
+const _faSr = _sr.fa
+
+module.exports.broadcast = [
+ [
+ body('message').notEmpty().withMessage(_faSr.required.message),
+
+ body('recievers').notEmpty().withMessage('لیست دریافت کنندگان را پر کنید')
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const { message, recievers } = req.body
+ const { user_id } = req
+ const data = { message, recievers, _creator: user_id }
+ const smsBroadcast = new SMSBroadcast(data)
+ await smsBroadcast.save()
+ for await (const item of recievers) {
+ await SMS([item.mobile_number], message)
+ }
+ return res.json({ message: 'پیامک برای همه مخاطبین ارسال گردید' })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.getAllForAdmin = [
+ (req, res) => {
+ SMSBroadcast.find({}, (err, data) => {
+ if (err) return res500(res, err)
+ return res.json(data)
+ })
+ }
+]
+
+module.exports.getOneForAdmin = [
+ async (req, res) => {
+ try {
+ const sms = await SMSBroadcast.findById(req.params.id)
+ .populate('recievers.user_id', 'mobile_number first_name last_name verity_businessCode panatech_businessCode')
+ .populate('_creator', 'username first_name last_name')
+ return res.json(sms)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
diff --git a/server/controllers/surveyController.js b/server/controllers/surveyController.js
new file mode 100644
index 0000000..98266c1
--- /dev/null
+++ b/server/controllers/surveyController.js
@@ -0,0 +1,70 @@
+const Survey = require('../models/Survey')
+const { _sr } = require('../plugins/serverResponses')
+const { res404, res500 } = require('../plugins/controllersHelperFunctions')
+const _faSr = _sr.fa
+
+module.exports.create = [
+ (req, res) => {
+ const {
+ purchasedProduct,
+ guaranteeWorkFlow,
+ employeeResponsibility,
+ serviceQuality,
+ serviceTime,
+ repairQuality,
+ coast,
+ description,
+ code
+ } = req.body
+
+ const data = {
+ purchasedProduct,
+ guaranteeWorkFlow,
+ employeeResponsibility,
+ serviceQuality,
+ serviceTime,
+ repairQuality,
+ coast,
+ description,
+ code,
+ user: req.user_id
+ }
+
+ const survey = new Survey(data)
+ survey.save(err => {
+ if (err) return res500(res, err)
+ return res.json({ message: _faSr.response.success_save })
+ })
+ }
+]
+
+module.exports.getAllForUser = [
+ (req, res) => {
+ Survey.find({ user: req.user_id }, (err, data) => {
+ if (err) return res500(res, err)
+ return res.json(data)
+ })
+ }
+]
+
+module.exports.getAllForAdmin = [
+ (req, res) => {
+ Survey.find({})
+ .populate('user', 'first_name last_name')
+ .exec((err, data) => {
+ if (err) return res500(res, err)
+ return res.json(data)
+ })
+ }
+]
+
+module.exports.getOneForAdmin = [
+ (req, res) => {
+ Survey.findById(req.params.id)
+ .populate('user', 'first_name last_name')
+ .exec((err, data) => {
+ if (err) return res404(res, err)
+ return res.json(data)
+ })
+ }
+]
diff --git a/server/controllers/thirdPartyController.js b/server/controllers/thirdPartyController.js
new file mode 100644
index 0000000..ff7a733
--- /dev/null
+++ b/server/controllers/thirdPartyController.js
@@ -0,0 +1,130 @@
+const { body, validationResult } = require('express-validator')
+const User = require('../models/User')
+const SurveyCheck = require('../models/SurveyCheck')
+const { res406, res500, checkValidations } = require('../plugins/controllersHelperFunctions')
+const { SMS } = require('../plugins/SMS_Module')
+const { phrases } = require('../plugins/SMS_Phrases')
+
+module.exports.reception = [
+ [
+ body('BusinessID').notEmpty().withMessage('BusinessID is required'),
+ body('TempReceiptTransNumber').notEmpty().withMessage('TempReceiptTransNumber is required'),
+ body('ItemReceptionTransNumber').notEmpty().withMessage('ItemReceptionTransNumber is required')
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const { BusinessID, TempReceiptTransNumber, ItemReceptionTransNumber } = req.body
+ try {
+ // check user id and agent status
+ const user = await User.findOne({ $or: [{ verity_businessID: BusinessID }, { panatech_businessID: BusinessID }] })
+ if (!user) return res406(res, 'Incorrect BusinessID')
+
+ function getMessageTxt() {
+ const msgArray = [
+ 'مشتری گرامی',
+ user.first_name + ' ' + user.last_name,
+ '\n',
+ 'کالاهای شما با شماره پذیرش موقت',
+ TempReceiptTransNumber,
+ 'توسط واحد گارانتی آسان سرویس دریافت شد و با شماره پذیرش دائم',
+ ItemReceptionTransNumber,
+ 'دردست بررسی می باشد. به محض آماده شدن کالاها به شما اطلاع رسانی خواهد شد.',
+ '\n',
+ phrases.signature
+ ]
+ return msgArray.join(' ')
+ }
+
+ SMS([user.mobile_number], getMessageTxt())
+ return res.json({ message: 'Message sent successfully' })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.repair = [
+ [
+ body('BusinessID').notEmpty().withMessage('BusinessID is required'),
+ body('TransNumber').notEmpty().withMessage('TransNumber is required'),
+ body('ItemReceptionTransNumber').notEmpty().withMessage('ItemReceptionTransNumber is required')
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const { BusinessID, ItemReceptionTransNumber, TransNumber } = req.body
+ try {
+ // check user id and agent status
+ const user = await User.findOne({ $or: [{ verity_businessID: BusinessID }, { panatech_businessID: BusinessID }] })
+ if (!user) return res406(res, 'Incorrect BusinessID')
+
+ function getMessageTxt() {
+ const msgArray = [
+ 'مشتری گرامی',
+ user.first_name + ' ' + user.last_name,
+ '\n',
+ 'مراحل تعمیر و بررسی کالاهای ارسالی شما با شماره پذیرش',
+ ItemReceptionTransNumber,
+ 'توسط واحد گارانتی آسان سرویس انجام شد و با شماره فاکتور گارانتی',
+ TransNumber,
+ 'ثبت شد. به زودی کالاها به آدرس شما ارسال می گردد. ',
+ '\n',
+ phrases.signature
+ ]
+ return msgArray.join(' ')
+ }
+
+ SMS([user.mobile_number], getMessageTxt())
+ return res.json({ message: 'Message sent successfully' })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.sendBack = [
+ [
+ body('BusinessID').notEmpty().withMessage('BusinessID is required'),
+ body('DeliveryCode').notEmpty().withMessage('DeliveryCode is required'),
+ body('ItemReceptionTransNumber').notEmpty().withMessage('ItemReceptionTransNumber is required')
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const { BusinessID, ItemReceptionTransNumber, DeliveryCode } = req.body
+ try {
+ // check user id and agent status
+ const user = await User.findOne({ $or: [{ verity_businessID: BusinessID }, { panatech_businessID: BusinessID }] })
+ if (!user) return res406(res, 'Incorrect BusinessID')
+
+ function getMessageTxt() {
+ const msgArray = [
+ 'مشتری گرامی',
+ user.first_name + ' ' + user.last_name,
+ '\n',
+ 'کالاهای ارسالی شما با شماره پذیرش',
+ ItemReceptionTransNumber,
+ 'پس از انجام مراحل گارانتی توسط واحد گارانتی به آدرس شما ارسال شد. شماره بیجک بسته ارسالی',
+ DeliveryCode,
+ 'می باشد. از همراهی و خرید شما سپاس گزاریم. ',
+ '\n',
+ phrases.signature
+ ]
+ return msgArray.join(' ')
+ }
+
+ const surveyData = {
+ code: ItemReceptionTransNumber,
+ user: user._id,
+ timeAdded: Date.now()
+ }
+ const surveyCheck = new SurveyCheck(surveyData)
+ surveyCheck.save(err => {
+ if (err) console.log('surveyCheck save error', err)
+ })
+
+ SMS([user.mobile_number], getMessageTxt())
+ return res.json({ message: 'Message sent successfully' })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
diff --git a/server/controllers/ticketsController.js b/server/controllers/ticketsController.js
new file mode 100644
index 0000000..e234cbe
--- /dev/null
+++ b/server/controllers/ticketsController.js
@@ -0,0 +1,157 @@
+const { body, validationResult } = require('express-validator')
+const TicketConversation = require('../models/TicketConversation')
+const User = require('../models/User')
+const { notifyUser } = require('../WebSocket/controllers/user_EventsController')
+const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController')
+const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions')
+const { _sr } = require('../plugins/serverResponses')
+const _faSr = _sr.fa
+
+// env variables
+const maxAttachmentSize = 2048
+const userIdPopulation = 'first_name last_name verity_businessCode panatech_businessCode'
+
+/// ////////// user
+module.exports.add_ticket = [
+ [
+ body('title').notEmpty().withMessage(_faSr.required.title),
+ body('user_id').notEmpty().withMessage('کد مشتری را وارد کنید')
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ const { title, transaction_id, user_id } = req.body
+
+ const data = { title, transaction_id, user_id }
+
+ const ticketConversation = new TicketConversation(data)
+ ticketConversation.save((err, data) => {
+ if (err) console.log(err)
+ return res.json(data)
+ })
+ }
+]
+
+module.exports.add_message_to_ticket = [
+ [
+ body('message')
+ .if((value, { req }) => !req.files)
+ .notEmpty()
+ .withMessage(_faSr.required.message)
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const { message } = req.body
+ const { user_id } = req
+
+ const data = { message, user_id, isUser: true }
+
+ try {
+ // check user scope
+ const user = await User.findById(user_id)
+ if (user.scope.includes('admin')) data.isUser = false
+
+ // save files
+ if (req.files?.image) {
+ const image = req.files.image
+ const fileName = 'TicketAttachment_' + Date.now() + '.' + image.mimetype.split('/')[1]
+ const acceptableFormats = ['png', 'jpg', 'jpeg', 'webp']
+ if (!acceptableFormats.includes(image.mimetype.split('/')[1]))
+ return res.status(422).json({ validation: { image: { msg: _faSr.format.image } } })
+ if (image.size / 1024 > maxAttachmentSize)
+ return res
+ .status(422)
+ .json({ validation: { image: { msg: `حجم تصویر نباید بیشتر از ${maxAttachmentSize} KB باشد.` } } })
+ data.image = fileName
+ await image.mv(`./static/uploads/images/tickets/${fileName}`)
+ }
+
+ // find conversation and update messages
+ const conversation = await TicketConversation.findById(req.params.id)
+ .populate('user_id', userIdPopulation)
+ .populate('messages.user_id', userIdPopulation)
+ conversation.messages.push(data)
+ await conversation.save()
+ if (data.isUser) {
+ notifyAdmin('newTicketMsg')
+ notifyAdmin('updateUnreadTickets')
+ } else {
+ notifyUser('updateUnreadTickets', conversation.user_id._id)
+ notifyUser('newTicketMsg', conversation.user_id._id)
+ }
+ return res.json(conversation)
+ } catch (e) {
+ return res404(res, e)
+ }
+ }
+]
+
+module.exports.get_all_tickets = [
+ (req, res) => {
+ const { user_id } = req
+ TicketConversation.find({ user_id }, (err, conversations) => {
+ if (err) return res500(res, err)
+ else return res.json(conversations)
+ })
+ }
+]
+
+module.exports.get_one_ticket = [
+ (req, res) => {
+ TicketConversation.findById(req.params.id)
+ .populate('user_id', userIdPopulation)
+ .populate('messages.user_id', userIdPopulation)
+ .exec((err, data) => {
+ if (err) return res404(res, err)
+ // after sending messages to user set read status to true
+ const messages = data.messages
+ setTimeout(async () => {
+ try {
+ const user = await User.findById(req.user_id)
+ if (messages.length) {
+ let userNeedsNotify = false
+ let adminNeedsNotify = false
+ messages.forEach((item, index) => {
+ if (item.isUser && user.scope.includes('admin') && !item.read) {
+ // console.log(index, ' these are user messages')
+ adminNeedsNotify = true
+ item.read = true
+ }
+
+ if (!item.isUser && !user.scope.includes('admin') && !item.read) {
+ // console.log(index, ' these are admin messages')
+ userNeedsNotify = true
+ item.read = true
+ }
+
+ if (index === messages.length - 1) {
+ data.save(err => {
+ if (err) console.log(err)
+
+ if (userNeedsNotify) notifyUser('updateUnreadTickets', data.user_id._id)
+
+ if (adminNeedsNotify) notifyAdmin('updateUnreadTickets')
+ })
+ }
+ })
+ }
+ } catch (e) {
+ return res500(res, e)
+ }
+ }, 500)
+ return res.json(data)
+ })
+ }
+]
+
+/// ///////// admin
+
+module.exports.get_all_tickets_for_admin = [
+ (req, res) => {
+ TicketConversation.find({})
+ .populate('user_id', userIdPopulation)
+ .exec((err, data) => {
+ if (err) return res500(res, err)
+ return res.json(data)
+ })
+ }
+]
diff --git a/server/controllers/transactionController.js b/server/controllers/transactionController.js
new file mode 100644
index 0000000..719370e
--- /dev/null
+++ b/server/controllers/transactionController.js
@@ -0,0 +1,333 @@
+const moment = require('moment-jalaali')
+const { body, validationResult } = require('express-validator')
+const TransactionDraft = require('../models/TransactionDraft')
+const Transaction = require('../models/Transaction')
+const User = require('../models/User')
+const SurveyCheck = require('../models/SurveyCheck')
+const { _sr } = require('../plugins/serverResponses')
+const { saveTransactionToArpa } = require('../ArpaWebservice.js')
+const {
+ res404,
+ res406,
+ res500,
+ checkValidations,
+ generateRandomDigits
+} = require('../plugins/controllersHelperFunctions')
+const { SMS } = require('../plugins/SMS_Module')
+const { phrases } = require('../plugins/SMS_Phrases')
+const { notifyAgent } = require('../WebSocket/controllers/agent_EventsController')
+const { notifyUser } = require('../WebSocket/controllers/user_EventsController')
+const _faSr = _sr.fa
+
+// date formatters
+function ArpaDateFormat(date) {
+ return moment(date).format('YYYY-MM-DD HH:mm:ss')
+}
+
+function SmsDateFormat(date) {
+ return moment(date).format('jYYYY/jMM/jDD')
+}
+
+/// ///////////////// users
+module.exports.add_transaction = [
+ [
+ body('BusinessID').notEmpty().withMessage('Enter businessID'),
+ body('cAddress1').notEmpty().withMessage(_faSr.required.address),
+ body('TransCCustom1').notEmpty().withMessage(_faSr.required.receiver_first_name),
+ body('cTel1').notEmpty().withMessage(_faSr.required.receiver_mobile)
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ if (!req.body.termsOfUse) return res406(res, 'با متن تعهدنامه موافقت نکرده اید')
+ if (!req.body.items?.length) return res406(res, 'هیچ کالایی به فرم اضافه نکرده اید')
+
+ const { BusinessID, Description, cAddress1, TransCCustom1, cTel1, items, draftId, db_name, agent } = req.body
+
+ const data = {
+ BusinessID,
+ Description,
+ cAddress1,
+ TransCCustom1,
+ cTel1
+ }
+
+ try {
+ const userId = req.user_id
+ const thisTime = Date.now()
+ // check user id and agent status
+ const user = await User.findById(userId)
+ if (!user) return res406(res, 'اطلاعات کاربری صحیح نمیباشد')
+ if (user.isAgent && agent !== 'main')
+ return res406(res, 'نمایندگان فقط میتوانند به خود شرکت آسان سرویس فرم ارسال نمایند')
+
+ function getMessageTxt(transNumber) {
+ const msgArray = [
+ 'مشتری گرامی',
+ user.first_name + ' ' + user.last_name,
+ '\n',
+ 'کالاهای شما با شماره پذیرش موقت',
+ transNumber,
+ 'در سایت آسان سرویس ثبت گردید. کالاهای ارسالی شما پس از دریافت توسط واحد گارانتی، بررسی شده و به شما اطلاع رسانی خواهد شد.',
+ '\n',
+ phrases.signature
+ ]
+ return msgArray.join(' ')
+ }
+
+ // save transaction
+ if (agent === 'main') {
+ const ArpaResponse = await saveTransactionToArpa(data, items, db_name)
+ await TransactionDraft.findByIdAndRemove(draftId)
+ SMS([user.mobile_number], getMessageTxt(ArpaResponse))
+ notifyUser('updateDraftsCount', userId)
+ return res.json({
+ host: 'ar',
+ transNumber: ArpaResponse
+ })
+ } else {
+ // get transactions count
+ const transactions = await Transaction.find()
+ // fill specific fields
+ data.user_id = userId
+ data.agent_id = agent
+ data.db_name = db_name
+ data.items = items
+ data.TempReceiptTransDate = ArpaDateFormat(thisTime)
+ data.TempReceiptTransNumber = 'AG' + transactions.length.toString().padStart(4, '0')
+ data.statusHistory = [{ status: 'saved', date: thisTime }]
+ const transaction = new Transaction(data)
+ await transaction.save()
+ await TransactionDraft.findByIdAndRemove(draftId)
+ SMS([user.mobile_number], getMessageTxt(transaction.TempReceiptTransNumber))
+ notifyUser('updateDraftsCount', userId)
+ notifyAgent('newAgentInbox', agent)
+ notifyAgent('updateAgentInbox', agent)
+ return res.json({
+ host: 'as',
+ transNumber: transaction.TempReceiptTransNumber
+ })
+ }
+ } catch (e) {
+ // console.log('there is an error in (Post Transaction to Arpa)', e)
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.get_all_transactions_for_user = [
+ (req, res) => {
+ const { user_id } = req
+ Transaction.find({ user_id }, (err, data) => {
+ if (err) return res500(res, err)
+ else return res.json(data)
+ })
+ }
+]
+
+module.exports.get_one_transaction_for_user = [
+ (req, res) => {
+ const { user_id } = req
+ Transaction.findOne({ user_id, TempReceiptTransNumber: req.params?.ttn })
+ .populate('agent_id', 'full_name province_name city_name address postal_code tel_number mobile_number')
+ .exec((err, data) => {
+ if (err || !data) return res404(res, err)
+ else return res.json(data)
+ })
+ }
+]
+
+/// ///////////////// agents
+module.exports.get_all_transactions_for_agent = [
+ async (req, res) => {
+ try {
+ const { agent_id } = req
+ const transactions = await Transaction.find({ agent_id })
+ return res.json(transactions)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.get_one_transaction_for_agent = [
+ async (req, res) => {
+ try {
+ const { agent_id } = req
+ const transaction = await Transaction.findOne({ agent_id, _id: req.params?.id })
+ if (!transaction) return res404(res, 'invalid transaction id')
+ if (!transaction.seen) {
+ transaction.seen = true
+ await transaction.save()
+ notifyAgent('updateAgentInbox', agent_id)
+ }
+ return res.json(transaction)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.change_transaction_status_by_agent = [
+ [
+ body('status')
+ .notEmpty()
+ .withMessage('status is required')
+ .bail()
+ .custom((value, { req }) => {
+ const acceptablvalues = ['recieved', 'ongoing', 'waiting', 'delivered']
+ if (!acceptablvalues.includes(value)) return Promise.reject(new Error('invalid status'))
+ else return true
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const { status, deliveryCode } = req.body
+ const { agent_id } = req
+ const thisTime = Date.now()
+
+ try {
+ const transaction = await Transaction.findOne({ agent_id, _id: req.params?.id })
+ if (!transaction) return res404(res, 'invalid transaction id')
+
+ // status order check
+ const errMsg = 'invalid status for this time'
+
+ if (transaction.status === 'saved' && status !== 'recieved') return res406(res, errMsg)
+ if (transaction.status === 'recieved' && status !== 'ongoing') return res406(res, errMsg)
+
+ // avoid repeated status
+ if (transaction.status === 'waiting' && status === 'waiting') return res406(res, errMsg)
+ if (transaction.status === 'delivered' && status === 'delivered') return res406(res, errMsg)
+
+ // save status
+ transaction.status = status
+ transaction.statusHistory.push({ status, date: thisTime })
+
+ let smsMessage
+ // different status methods
+ if (status === 'recieved') {
+ const receiptTN = transaction.TempReceiptTransNumber + 'R' + generateRandomDigits(2)
+ transaction.ItemReceptionTransNumber = receiptTN
+ transaction.ItemReceptionTransDate = ArpaDateFormat(thisTime)
+
+ smsMessage = [
+ ' کاربر گرامی فرم گارانتی شما با کد پذیرش موقت ',
+ transaction.TempReceiptTransNumber,
+ ' در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' تحویل دفتر نمایندگی و پذیرش شد. ',
+ '\n',
+ ' کد پذیرش: ',
+ receiptTN,
+ '\n',
+ phrases.signature
+ ]
+ }
+
+ if (status === 'ongoing') {
+ smsMessage = [
+ ' کاربر گرامی فرم گارانتی شما با کد پذیرش ',
+ transaction.ItemReceptionTransNumber,
+ ' در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' در دست اقدام قرار گرفت. ',
+ '\n',
+ phrases.signature
+ ]
+ }
+
+ if (status === 'waiting') {
+ smsMessage = [
+ ' کاربر گرامی فرم گارانتی شما با کد پذیرش ',
+ transaction.ItemReceptionTransNumber,
+ ' در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' در انتظار قطعه میباشد. ',
+ '\n',
+ phrases.signature
+ ]
+ }
+
+ if (status === 'delivered') {
+ if (deliveryCode) transaction.deliveryCode = deliveryCode
+
+ function deliveryCodePhrase() {
+ if (deliveryCode.length) return `کد پیگیری مرسوله: ${deliveryCode}` + '\n'
+ else return ''
+ }
+
+ smsMessage = [
+ ' کاربر گرامی فرم گارانتی شما با کد پذیرش ',
+ transaction.ItemReceptionTransNumber,
+ ' در تاریخ ',
+ SmsDateFormat(thisTime),
+ ' تحویل شد. ',
+ '\n',
+ deliveryCodePhrase(),
+ phrases.signature
+ ]
+
+ const surveyData = {
+ code: transaction.ItemReceptionTransNumber,
+ user: transaction.user_id,
+ timeAdded: Date.now()
+ }
+ const surveyCheck = new SurveyCheck(surveyData)
+ surveyCheck.save(err => {
+ if (err) console.log('surveyCheck save error', err)
+ })
+ }
+
+ await SMS([transaction.cTel1], smsMessage.join(''))
+ await transaction.save()
+
+ return res.json({ message: _faSr.response.success_save })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+/// ///////////////// admin
+module.exports.get_all_agents_inbox_for_admin = [
+ async (req, res) => {
+ try {
+ const transactions = await Transaction.find()
+ .populate('agent_id', 'agent_code full_name')
+ .populate('user_id', 'province_id province_name city_id city_name')
+ return res.json(transactions)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.get_one_agent_inbox_for_admin = [
+ async (req, res) => {
+ try {
+ const agent_id = req.params?.agent_id
+ const transactions = await Transaction.find({ agent_id })
+ return res.json(transactions)
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.get_one_transaction_for_admin = [
+ (req, res) => {
+ Transaction.findById(req.params?.id)
+ .populate(
+ 'agent_id',
+ 'full_name province_name city_name address postal_code tel_number fax_number mobile_number store_name agent_code'
+ )
+ .populate(
+ 'user_id',
+ 'first_name last_name province_name city_name panatech_businessCode verity_businessCode national_code mobile_number address postal_code'
+ )
+ .exec((err, data) => {
+ if (err || !data) return res404(res, err)
+ else return res.json(data)
+ })
+ }
+]
diff --git a/server/controllers/transactionDraftsController.js b/server/controllers/transactionDraftsController.js
new file mode 100644
index 0000000..8328435
--- /dev/null
+++ b/server/controllers/transactionDraftsController.js
@@ -0,0 +1,168 @@
+const { body, validationResult } = require('express-validator')
+const TransactionDraft = require('../models/TransactionDraft')
+const { VerityStockAreaId, PanatechStockAreaId } = require('../_env')
+const { res404, res406, res500, checkValidations } = require('../plugins/controllersHelperFunctions')
+const { notifyUser } = require('../WebSocket/controllers/user_EventsController')
+
+module.exports.add_transaction_draft = [
+ [
+ body('db_name')
+ .notEmpty()
+ .withMessage('db param is required')
+ .bail()
+ .custom((value, { req }) => {
+ if (value === 'verity' || value === 'panatech') return Promise.resolve()
+ else return Promise.reject(new Error('incorrect db value'))
+ })
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ const { user_id } = req
+ if (!user_id) return res404(res, 'invalid userID')
+ const { db_name, description } = req.body
+ const data = { user_id, db_name, description }
+
+ const draft = new TransactionDraft(data)
+ draft.save((err, data) => {
+ if (err) return res500(res, err)
+ notifyUser('updateDraftsCount', user_id)
+ return res.json({ draftId: data._id })
+ })
+ }
+]
+
+module.exports.update_draft_description = [
+ (req, res) => {
+ const draftId = req.params?.draftId
+ const { description } = req.body
+ TransactionDraft.findByIdAndUpdate(draftId, { description }, (err, oldData) => {
+ if (err || !oldData) return res404(res, err)
+ else return res.json({ message: 'توضیحات فرم با موفقیت بروزرسانی شد' })
+ })
+ }
+]
+
+module.exports.get_user_drafts = [
+ async (req, res) => {
+ try {
+ const { user_id } = req
+ const drafts = await TransactionDraft.find({ user_id })
+ return res.json(drafts)
+ } catch (e) {
+ return res.status(500).json({ message: e })
+ }
+ }
+]
+
+module.exports.get_one_user_draft = [
+ (req, res) => {
+ TransactionDraft.findById(req.params?.draftId, (err, data) => {
+ if (err || !data) return res404(res, err)
+ else return res.json(data)
+ })
+ }
+]
+
+module.exports.add_stuff_to_draft = [
+ async (req, res) => {
+ const userId = req.user_id
+ const draftId = req.params?.draftId
+ const { ItemID, ItemCode, MjQty, SerialNo1, GStartDate, GEndDate } = req.body
+
+ try {
+ // custom validations
+ if (!Number(MjQty) || !Number.isInteger(Number(MjQty))) return res406(res, 'تعداد باید از جنس عدد صحیح باشد')
+
+ if (!ItemID?.length || !ItemCode?.length) return res406(res, 'کالا را انتخاب کنید')
+
+ if (Number(MjQty) < 1) return res406(res, 'تعداد نباید کمتر از 1 باشد')
+
+ if (SerialNo1?.length && Number(MjQty) !== 1)
+ return res406(res, 'تعداد کالاهایی که شماره سریال اختصاصی دارند نمیتواند بیشتر از یکی باشد')
+
+ const draft = await TransactionDraft.findOne({ user_id: userId, _id: draftId })
+
+ if (!draft) return res404(res, 'this transaction does not exist or not belongs to you')
+
+ // check if item already exists
+ for (let i = 0; i < draft.items.length; i++) {
+ if ((await draft.items[i].SerialNo1) !== '') {
+ if ((await draft.items[i].SerialNo1) === SerialNo1) return res406(res, 'این شماره سریال قبلا افزوده شده')
+ } else {
+ // eslint-disable-next-line no-lonely-if
+ if ((await draft.items[i].ItemID) === ItemID) {
+ draft.items[i].MjQty = Number(draft.items[i].MjQty) + Number(MjQty)
+ draft.markModified('items')
+ await draft.save()
+ return res.json({ message: 'این کالا به تعداد کالای مشابه داخل لیست اضافه گردید' })
+ }
+ }
+ }
+
+ function stockAreaID(db) {
+ if (db === 'verity') return VerityStockAreaId
+ else if (db === 'panatech') return PanatechStockAreaId
+ else return null
+ }
+
+ const item = {
+ ItemID,
+ ItemCode,
+ MjQty: Number(MjQty),
+ SerialNo1,
+ GStartDate,
+ GEndDate,
+ StockAreaID: stockAreaID(draft.db_name),
+ TransLineID: 'null',
+ Price: 0,
+ DiscountAmount: 0,
+ DiscountPercent: 0,
+ TaxAmount: 0,
+ TollAmount: 0
+ }
+
+ draft.items.push(item)
+ await draft.save()
+ return res.json({ message: 'کالا با موفقیت به فرم افزوده شد' })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.remove_stuff_from_draft = [
+ async (req, res) => {
+ const draftId = req.params?.draftId
+ const { user_id } = req
+ const { itemId, itemSerial } = req.body
+
+ try {
+ const draft = await TransactionDraft.findOne({ user_id, _id: draftId })
+ if (!draft) return res404(res, 'this transaction does not exist or not belongs to you')
+ draft.items = await draft.items.filter(item => {
+ if (itemSerial === '') {
+ return item.ItemID !== itemId
+ } else {
+ return item.SerialNo1 !== itemSerial
+ }
+ })
+ draft.markModified('items')
+ await draft.save()
+ return res.json({ message: 'آیتم با موفقیت از لیست حذف شد' })
+ } catch (e) {
+ return res500(res, e)
+ }
+ }
+]
+
+module.exports.remove_draft = [
+ (req, res) => {
+ const draftId = req.params?.draftId
+
+ TransactionDraft.findByIdAndDelete(draftId, (err, data) => {
+ if (err || !data) return res404(res, err)
+ notifyUser('updateDraftsCount', data.user_id)
+ return res.json({ message: 'پیشنویس با موفقیت حذف شد' })
+ })
+ }
+]
diff --git a/server/controllers/userController.js b/server/controllers/userController.js
new file mode 100644
index 0000000..c8679dc
--- /dev/null
+++ b/server/controllers/userController.js
@@ -0,0 +1,1219 @@
+const crypto = require('crypto')
+const nodemailer = require('nodemailer')
+const bcrypt = require('bcryptjs')
+const { body, validationResult } = require('express-validator')
+const jwt = require('jsonwebtoken')
+const User = require('../models/User')
+const { secretKey } = require('../authentication')
+const permissions = require('../plugins/permissions')
+const { _sr } = require('../plugins/serverResponses')
+const { SMS } = require('../plugins/SMS_Module')
+const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController')
+const { saveUserToArpa, updateUserOnArpa } = require('../ArpaWebservice.js')
+const {
+ res404,
+ res500,
+ checkValidations,
+ removeWhiteSpaces,
+ checkMobileNumber,
+ normalizeMobileNumber,
+ nameOptimizer,
+ checkNationalCode,
+ isPersian,
+ isPersianWithDigits,
+ generateRandomDigits
+} = require('../plugins/controllersHelperFunctions')
+const _faSr = _sr.fa
+
+/// ///////////////////////////////////////////////////////////////// verify account functions
+function sendConfirmationEmail(userId) {
+ return new Promise(async (resolve, reject) => {
+ try {
+ const user = await User.findById(userId)
+ if (!user) throw new Error('invalid id')
+
+ const emailKey = generateRandomDigits(6)
+ user.emailConfirmationKey = emailKey
+ await user.save()
+
+ /// //// email configs
+ // const hostURL = 'www.asan-service.com'
+ const transporter = nodemailer.createTransport({
+ host: 'mail.asan-service.com',
+ port: 587,
+ secure: false, // true for 465, false for other ports
+ auth: {
+ user: 'confirmation@asan-service.com',
+ pass: 'N7xNFZp*L_X{'
+ },
+ tls: {
+ rejectUnauthorized: false
+ }
+ })
+
+ const emailHTMLTemplate = `
+
+
+
+ این ایمیل در وبسایت
+ آسان سرویس
+ ثبت شده است.
+
+
کد تایید آدرس ایمیل شما:
+
+
+
+ `
+
+ // send mail with defined transport object
+ await transporter.sendMail({
+ from: '"AsanService" ', // sender address
+ to: user.email, // list of receivers
+ subject: 'تایید ایمیل',
+ text: emailHTMLTemplate,
+ html: emailHTMLTemplate
+ })
+
+ resolve()
+ } catch (err) {
+ reject(err)
+ }
+ })
+}
+
+function sendConfirmationSMS(userId) {
+ return new Promise(async (resolve, reject) => {
+ try {
+ const user = await User.findById(userId)
+ if (!user) throw new Error('invalid id')
+
+ const mobileKey = generateRandomDigits(6)
+ user.mobileConfirmationKey = mobileKey
+ await user.save()
+
+ const smsMsg = [
+ 'این شماره در وبسایت آسان سرویس جهت ارائه خدمات گارانتی ثبت گردیده.',
+ ' کد تایید شماره همراه: ',
+ mobileKey
+ ]
+
+ await SMS([user.mobile_number], smsMsg.join(''))
+
+ resolve()
+ } catch (err) {
+ reject(err)
+ }
+ })
+}
+
+/// //////////////////////////////////////////////////////////////////// admin accounts
+module.exports.register_admin = [
+ [
+ body('first_name')
+ .notEmpty()
+ .withMessage(_faSr.required.first_name)
+ .bail()
+ .isLength({ min: 2 })
+ .withMessage(_faSr.min_char.min2),
+
+ body('last_name')
+ .notEmpty()
+ .withMessage(_faSr.required.last_name)
+ .bail()
+ .isLength({ min: 2 })
+ .withMessage(_faSr.min_char.min2),
+
+ body('username')
+ .notEmpty()
+ .withMessage(_faSr.required.username)
+ .bail()
+ .isLength({ min: 4 })
+ .withMessage(_faSr.min_char.min4)
+ .custom((value, { req }) => {
+ return User.findOne({ username: value }).then(admin => {
+ if (admin && admin.username === value) return Promise.reject(_faSr.duplicated.username)
+ else return true
+ })
+ }),
+
+ body('password')
+ .isLength({ min: 4 })
+ .withMessage(_faSr.min_char.min4)
+ .custom((value, { req }) => {
+ if (value === req.body.password_confirmation) return true
+ else return Promise.reject(_faSr.response.passwords_not_match)
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const { first_name, last_name, username, permissions } = req.body
+
+ const data = { first_name, last_name, username, permissions }
+ data._creator = req.user_id
+ data.confirmed = true
+ data.scope = ['admin']
+
+ const salt = await bcrypt.genSalt(10)
+ const hash = await bcrypt.hash(req.body.password, salt)
+ data.password = hash
+
+ const admin = new User(data)
+ await admin.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (err) {
+ return res500(res, err)
+ }
+ }
+]
+
+module.exports.update_admin = [
+ [
+ body('first_name')
+ .notEmpty()
+ .withMessage(_faSr.required.first_name)
+ .bail()
+ .isLength({ min: 2 })
+ .withMessage(_faSr.min_char.min2),
+
+ body('last_name')
+ .notEmpty()
+ .withMessage(_faSr.required.last_name)
+ .bail()
+ .isLength({ min: 2 })
+ .withMessage(_faSr.min_char.min2),
+
+ body('username')
+ .notEmpty()
+ .withMessage(_faSr.required.username)
+ .bail()
+ .isLength({ min: 4 })
+ .withMessage(_faSr.min_char.min4)
+ .custom((value, { req }) => {
+ return User.findOne({ username: value }).then(admin => {
+ if (admin && admin.username === value && admin._id.toString() !== req.params.id)
+ return Promise.reject(_faSr.duplicated.username)
+ else return true
+ })
+ })
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ const { username, first_name, last_name, permissions } = req.body
+
+ const data = { username, first_name, last_name, permissions }
+ data._creator = req.user_id
+
+ User.findByIdAndUpdate(req.params.id, data, (err, oldData) => {
+ if (err || !oldData) return res.status(404).json({ message: _faSr.not_found.user_id })
+ return res.json({ message: _faSr.response.success_activation })
+ })
+ }
+]
+
+module.exports.get_admins = [
+ (req, res) => {
+ const regex = /admin/
+ User.find({ scope: regex, private: false }, (err, admins) => {
+ if (err) return res500(res, err)
+ return res.json(admins)
+ })
+ }
+]
+
+module.exports.get_one_admin = [
+ (req, res) => {
+ User.findById(req.params.id)
+ .select('first_name last_name username permissions _creator')
+ .populate('_creator', 'first_name last_name')
+ .exec((err, admin) => {
+ if (err || !admin) return res.status(404).json({ message: _faSr.not_found.user_id })
+ else return res.json(admin)
+ })
+ }
+]
+
+module.exports.delete_admin = [
+ (req, res) => {
+ User.findByIdAndDelete(req.params.id, (err, user) => {
+ if (err || !user) return res.status(404).json({ message: _faSr.not_found.user_id })
+ else return res.json({ message: _faSr.response.success_save })
+ })
+ }
+]
+
+module.exports.permissions = [
+ (req, res) => {
+ return res.json(permissions)
+ }
+]
+
+/// //////////////////////////////////////////////////////////////////// user accounts
+
+module.exports.register_user = [
+ [
+ body('first_name')
+ .notEmpty()
+ .withMessage(_faSr.required.first_name)
+ .bail()
+ .isLength({ min: 2 })
+ .withMessage(_faSr.min_char.min2)
+ .bail()
+ .custom((value, { req }) => {
+ if (removeWhiteSpaces(value).length < 2) return Promise.reject(_faSr.min_char.min2)
+ if (!isPersian(value)) return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید'))
+ else return true
+ }),
+
+ body('last_name')
+ .notEmpty()
+ .withMessage(_faSr.required.first_name)
+ .bail()
+ .isLength({ min: 2 })
+ .withMessage(_faSr.min_char.min2)
+ .bail()
+ .custom((value, { req }) => {
+ if (removeWhiteSpaces(value).length < 2) return Promise.reject(_faSr.min_char.min2)
+ if (!isPersian(value)) return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید'))
+ else return true
+ }),
+
+ body('national_code')
+ .notEmpty()
+ .withMessage(_faSr.required.national_code)
+ .bail()
+ .custom((value, { req }) => {
+ if (checkNationalCode(value)) return true
+ else return Promise.reject(_faSr.format.national_code)
+ })
+ .bail()
+ .custom((value, { req }) => {
+ const nationalCode = value.trim()
+ return User.findOne({ national_code: nationalCode }).then(user => {
+ if (user && user.national_code === nationalCode)
+ return Promise.reject(new Error('کاربر با این کد ملی از قبل وجود دارد'))
+ else return true
+ })
+ }),
+
+ body('province_id').notEmpty().withMessage(_faSr.required.province),
+
+ body('city_id').notEmpty().withMessage(_faSr.required.city),
+
+ body('address')
+ .notEmpty()
+ .withMessage(_faSr.required.address)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersianWithDigits(value)) return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید'))
+ else return true
+ }),
+
+ body('postal_code')
+ .notEmpty()
+ .withMessage(_faSr.required.postal_code)
+ .bail()
+ .isNumeric()
+ .withMessage(_faSr.format.number),
+
+ body('email')
+ .notEmpty()
+ .withMessage(_faSr.required.email)
+ .bail()
+ .isEmail()
+ .withMessage(_faSr.format.email)
+ .bail()
+ .custom((value, { req }) => {
+ const email = value.trim().toLowerCase()
+ return User.findOne({ email }).then(user => {
+ if (user && user.email === email) return Promise.reject(_faSr.duplicated.email)
+ else return true
+ })
+ }),
+
+ body('tel_number')
+ .notEmpty()
+ .withMessage(_faSr.required.phone_number)
+ .bail()
+ .isNumeric()
+ .withMessage(_faSr.format.phone_number),
+
+ body('mobile_number')
+ .notEmpty()
+ .withMessage(_faSr.required.phone_number)
+ .bail()
+ .custom((value, { req }) => {
+ const mobileNStatus = checkMobileNumber(value)
+ if (!mobileNStatus) return Promise.reject(_faSr.format.phone_number)
+ else return Promise.resolve()
+ })
+ .bail()
+ .custom((value, { req }) => {
+ const mobileNumber = value.trim()
+ return User.findOne({ mobile_number: mobileNumber }).then(user => {
+ if (user && user.mobile_number === mobileNumber)
+ return Promise.reject(new Error('کاربر با این شماره موبایل از قبل وجود دارد'))
+ else return true
+ })
+ }),
+
+ body('password')
+ .isLength({ min: 4 })
+ .withMessage(_faSr.min_char.min4)
+ .custom((value, { req }) => {
+ if (value === req.body.password_confirmation) return true
+ else return Promise.reject(_faSr.response.passwords_not_match)
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const {
+ first_name,
+ last_name,
+ national_code,
+ province_id,
+ province_name,
+ city_id,
+ city_name,
+ address,
+ postal_code,
+ tel_number,
+ mobile_number,
+ email,
+ store_name,
+ password
+ } = req.body
+
+ const data = {
+ last_name,
+ province_id,
+ province_name,
+ city_id,
+ city_name,
+ address,
+ postal_code,
+ tel_number,
+ store_name
+ }
+ data.first_name = nameOptimizer(first_name)
+ data.national_code = national_code.trim()
+ data.mobile_number = normalizeMobileNumber(mobile_number)
+ data.email = email.trim().toLowerCase()
+
+ // hash user password and done
+ const salt = await bcrypt.genSalt(10)
+ const hash = await bcrypt.hash(password, salt)
+ data.password = hash
+
+ const user = new User(data)
+ await user.save()
+ await sendConfirmationEmail(user._id)
+ await sendConfirmationSMS(user._id)
+ return res.json({ message: _faSr.response.success_save })
+ } catch (err) {
+ const registerFailurMsg = 'مشکلی در ثبت نام پیش آمده، لطفا مجددا تلاش کنید'
+ res500(res, registerFailurMsg)
+ }
+ }
+]
+
+module.exports.update_user = [
+ [
+ body('first_name')
+ .notEmpty()
+ .withMessage(_faSr.required.first_name)
+ .bail()
+ .isLength({ min: 2 })
+ .withMessage(_faSr.min_char.min2)
+ .bail()
+ .custom((value, { req }) => {
+ if (removeWhiteSpaces(value).length < 2) return Promise.reject(_faSr.min_char.min2)
+ if (!isPersian(value)) return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید'))
+ else return true
+ }),
+
+ body('last_name')
+ .notEmpty()
+ .withMessage(_faSr.required.first_name)
+ .bail()
+ .isLength({ min: 2 })
+ .withMessage(_faSr.min_char.min2)
+ .bail()
+ .custom((value, { req }) => {
+ if (removeWhiteSpaces(value).length < 2) return Promise.reject(_faSr.min_char.min2)
+ if (!isPersian(value)) return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید'))
+ else return true
+ }),
+
+ body('national_code')
+ .notEmpty()
+ .withMessage(_faSr.required.national_code)
+ .bail()
+ .custom((value, { req }) => {
+ if (checkNationalCode(value)) return true
+ else return Promise.reject(_faSr.format.national_code)
+ })
+ .custom((value, { req }) => {
+ const nationalCode = value.trim()
+ return User.findOne({ national_code: nationalCode }).then(user => {
+ if (user && user.national_code === nationalCode && user._id.toString() !== req.body._id)
+ return Promise.reject(new Error('کاربر با این کد ملی از قبل وجود دارد'))
+ else return true
+ })
+ }),
+
+ body('province_id').notEmpty().withMessage(_faSr.required.province),
+
+ body('city_id').notEmpty().withMessage(_faSr.required.city),
+
+ body('address')
+ .notEmpty()
+ .withMessage(_faSr.required.address)
+ .bail()
+ .custom((value, { req }) => {
+ if (!isPersianWithDigits(value)) return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید'))
+ else return true
+ }),
+
+ body('postal_code')
+ .notEmpty()
+ .withMessage(_faSr.required.postal_code)
+ .bail()
+ .isNumeric()
+ .withMessage(_faSr.format.number),
+
+ body('tel_number')
+ .notEmpty()
+ .withMessage(_faSr.required.phone_number)
+ .bail()
+ .isNumeric()
+ .withMessage(_faSr.format.phone_number),
+
+ body('mobile_number')
+ .notEmpty()
+ .withMessage(_faSr.required.phone_number)
+ .bail()
+ .custom((value, { req }) => {
+ const mobileNStatus = checkMobileNumber(value)
+ if (!mobileNStatus) return Promise.reject(_faSr.format.phone_number)
+ else return Promise.resolve()
+ })
+ .bail()
+ .custom((value, { req }) => {
+ const mobileNumber = value.trim()
+ return User.findOne({ mobile_number: mobileNumber }).then(user => {
+ if (user && user.mobile_number === mobileNumber && user._id.toString() !== req.body._id)
+ return Promise.reject(new Error('کاربر با این شماره موبایل از قبل وجود دارد'))
+ else return true
+ })
+ }),
+
+ body('email')
+ .notEmpty()
+ .withMessage(_faSr.required.email)
+ .bail()
+ .isEmail()
+ .withMessage(_faSr.format.email)
+ .bail()
+ .custom((value, { req }) => {
+ const email = value.trim().toLowerCase()
+ return User.findOne({ email }).then(user => {
+ if (user && user.email === email && user._id.toString() !== req.body._id)
+ return Promise.reject(_faSr.duplicated.email)
+ else return true
+ })
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ const {
+ first_name,
+ last_name,
+ national_code,
+ province_id,
+ province_name,
+ city_id,
+ city_name,
+ address,
+ postal_code,
+ tel_number,
+ mobile_number,
+ email,
+ store_name
+ } = req.body
+
+ const MongoData = {
+ last_name,
+ province_id,
+ province_name,
+ city_id,
+ city_name,
+ address,
+ postal_code,
+ tel_number,
+ store_name
+ }
+ MongoData.first_name = nameOptimizer(first_name)
+ MongoData.national_code = national_code.trim()
+ MongoData.mobile_number = normalizeMobileNumber(mobile_number)
+ MongoData.email = email.trim().toLowerCase()
+
+ try {
+ const { user_id } = req
+ const user = await User.findById(user_id)
+ if (!user) return res404(res, _faSr.not_found.user_id)
+
+ // check if need to ferify email or mobile
+ const newEmail = user.email !== MongoData.email
+ const newMobile = user.mobile_number !== MongoData.mobile_number
+ if (newEmail) user.email_confirmed = false
+ if (newMobile) user.mobile_confirmed = false
+
+ // save new info to arpa
+ await updateUserOnArpa(MongoData, user.verity_businessID, 'verity')
+ await updateUserOnArpa(MongoData, user.panatech_businessID, 'panatech')
+
+ // save new info to user
+ user.first_name = MongoData.first_name
+ user.last_name = MongoData.last_name
+ user.national_code = MongoData.national_code
+ user.province_id = MongoData.province_id
+ user.province_name = MongoData.province_name
+ user.city_id = MongoData.city_id
+ user.city_name = MongoData.city_name
+ user.address = MongoData.address
+ user.postal_code = MongoData.postal_code
+ user.tel_number = MongoData.tel_number
+ user.store_name = MongoData.store_name
+ user.mobile_number = MongoData.mobile_number
+ user.email = MongoData.email
+
+ await user.save()
+
+ // send confirmation key after user saved
+ if (newEmail) await sendConfirmationEmail(user_id)
+ if (newMobile) await sendConfirmationSMS(user_id)
+
+ return res.json({ message: _faSr.response.success_save })
+ } catch (e) {
+ console.log('Arpa Error during update user --', e)
+ return res500(res, _faSr.response.problem)
+ }
+ }
+]
+
+module.exports.update_user_password = [
+ [
+ body('password')
+ .isLength({ min: 4 })
+ .withMessage(_faSr.min_char.min4)
+ .custom((value, { req }) => {
+ if (value === req.body.password_confirmation) return true
+ else return Promise.reject(_faSr.response.passwords_not_match)
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ // hash user password and done
+ try {
+ const { _id, password } = req.body
+ const { user_id } = req
+ const salt = await bcrypt.genSalt(10)
+ const hash = await bcrypt.hash(password, salt)
+ const user = await User.findById(_id)
+ if (!user) throw new Error(_faSr.not_found.user_id)
+ user.password = hash
+ if (user.scope.includes('admin')) user._creator = user_id
+ await user.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (err) {
+ if (err) return res500(res, err)
+ }
+ }
+]
+
+/// // reset user password
+
+module.exports.generate_reset_user_password_link = [
+ [
+ body('type')
+ .notEmpty()
+ .withMessage('choose type')
+ .bail()
+ .custom((value, { req }) => {
+ if (value === 'email' || value === 'mobile') return Promise.resolve()
+ else return Promise.reject(new Error('invalid type'))
+ }),
+
+ body('email')
+ .if((value, { req }) => req.body.type === 'email')
+ .notEmpty()
+ .withMessage(_faSr.required.email)
+ .bail()
+ .isEmail()
+ .withMessage(_faSr.format.email),
+
+ body('mobile')
+ .if((value, { req }) => req.body.type === 'mobile')
+ .notEmpty()
+ .withMessage(_faSr.required.phone_number)
+ .bail()
+ .custom((value, { req }) => {
+ const mobileNStatus = checkMobileNumber(value)
+ if (!mobileNStatus) return Promise.reject(_faSr.format.phone_number)
+ else return Promise.resolve()
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const { type, email, mobile } = req.body
+ const query = {}
+ if (type === 'email') query.email = email.toLowerCase().trim()
+ if (type === 'mobile') query.mobile_number = normalizeMobileNumber(mobile)
+
+ const user = await User.findOne(query)
+ if (!user) throw new Error('err')
+
+ const resetPassKey = await crypto.randomBytes(20).toString('hex')
+ user.resetPassToken = resetPassKey
+ const hostURL = 'www.asan-service.com'
+
+ if (type === 'email') {
+ const transporter = nodemailer.createTransport({
+ host: 'mail.asan-service.com',
+ port: 587,
+ secure: false, // true for 465, false for other ports
+ auth: {
+ user: 'resetpassword@asan-service.com',
+ pass: '3e9atXQV+7a&'
+ },
+ tls: {
+ rejectUnauthorized: false
+ }
+ })
+
+ const emailHTMLTemplate = `
+
+
+
برای بازیابی کلمه عبور حساب کاربری خود روی لینک زیر کلیک کنید.
+
+
بازیابی کلمه عبور
+
+ چنانچه قادر به کلیلک روی لینک بالا نیستید آدرس زیر را در مرورگر خود باز کنید.
+
+
https://${hostURL}/auth/resetpass-newpass/${resetPassKey}
+
+
+
+ `
+
+ // send mail with defined transport object
+ await transporter.sendMail({
+ from: '"AsanService" ', // sender address
+ to: email, // list of receivers
+ subject: 'لینک بازیابی کلمه عبور',
+ text: emailHTMLTemplate,
+ html: emailHTMLTemplate
+ })
+ } else {
+ const smsMsg = [
+ ' لینک بازیابی کلمه عبور آسان سرویس: ',
+ `https://${hostURL}/auth/resetpass-newpass/${resetPassKey}`
+ ]
+ await SMS([user.mobile_number], smsMsg.join(''))
+ }
+
+ await user.save()
+ let responseMsg = 'لینک بازیابی برای شما ارسال شد'
+ if (type === 'email')
+ responseMsg =
+ 'لینک بازیابی برای شما ارسال شد، چنانچه قادر به مشاهده ایمیل در صندوق ورودی خود نیستید پوشه spam را چک کنید.'
+ return res.json({ message: responseMsg })
+ } catch (err) {
+ let errMsg = _faSr.not_found.user_id
+ if (err.code === 'EENVELOPE') errMsg = 'مشکلی در ارسال ایمیل پیش آمد لطفا دوباره تلاش کنید'
+ return res404(res, errMsg)
+ }
+ }
+]
+
+module.exports.reset_password_using_token = [
+ [
+ body('password')
+ .isLength({ min: 4 })
+ .withMessage(_faSr.min_char.min4)
+ .custom((value, { req }) => {
+ if (value === req.body.password_confirmation) return true
+ else return Promise.reject(_faSr.response.passwords_not_match)
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const { token, password } = req.body
+ if (!token) throw new Error('err')
+ const user = await User.findOne({ resetPassToken: token })
+ if (!user) throw new Error('err')
+ const salt = await bcrypt.genSalt(10)
+ const hash = await bcrypt.hash(password, salt)
+ user.password = hash
+ user.token = null
+ user.resetPassToken = undefined
+ await user.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (err) {
+ return res404(res, _faSr.response.expired_reset_link)
+ }
+ }
+]
+
+/// // confirm email
+module.exports.changeEmail = [
+ [
+ body('email')
+ .notEmpty()
+ .withMessage(_faSr.required.email)
+ .bail()
+ .isEmail()
+ .withMessage(_faSr.format.email)
+ .bail()
+ .custom((value, { req }) => {
+ const email = value.toLowerCase()
+ return User.findOne({ email }).then(user => {
+ if (user && user.email === email) return Promise.reject(_faSr.duplicated.email)
+ else return true
+ })
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const { user_id } = req
+ const { email } = req.body
+ const user = await User.findById(user_id)
+ if (!user) throw new Error('invalid id')
+ user.email = email
+ user.email_confirmed = false
+ await user.save()
+ await sendConfirmationEmail(user_id)
+ return res.json({ message: 'کد تایید برای شما ارسال شد' })
+ } catch (err) {
+ return res500(res, err)
+ }
+ }
+]
+
+module.exports.resendEmailConfirmation = [
+ async (req, res) => {
+ try {
+ const { user_id } = req
+ await sendConfirmationEmail(user_id)
+ return res.json({ message: 'کد تایید برای شما ارسال شد' })
+ } catch (err) {
+ return res500(res, err)
+ }
+ }
+]
+
+module.exports.confirmEmail = [
+ async (req, res) => {
+ try {
+ const { user_id } = req
+ const { verificationKey } = req.body
+ const user = await User.findById(user_id)
+ if (!user) throw new Error('err')
+
+ if (verificationKey?.trim() !== user.emailConfirmationKey) throw new Error('404')
+
+ if (!user.confirmed) {
+ user.confirmed = true
+
+ const verityID = await saveUserToArpa(user, 'verity')
+ const panatechID = await saveUserToArpa(user, 'panatech')
+
+ user.verity_businessID = verityID.businessID
+ user.verity_businessCode = verityID.businessCode
+
+ user.panatech_businessID = panatechID.businessID
+ user.panatech_businessCode = panatechID.businessCode
+ }
+
+ // save new info to arpa
+ await updateUserOnArpa(user, user.verity_businessID, 'verity')
+ await updateUserOnArpa(user, user.panatech_businessID, 'panatech')
+
+ // update user info in mongoDB
+ user.email_confirmed = true
+ user.emailConfirmationKey = undefined
+ await user.save()
+
+ return res.json({ message: 'ایمل شما تایید شد.' })
+ } catch (e) {
+ if (e === '404') return res404(res, 'کد تایید صحیح نمیباشد.')
+ else return res500(res, 'مشکلی در تایید ایمیل پیش آمده، لطفا دوباره تلاش کنید')
+ }
+ }
+]
+
+/// // confirm mobile
+module.exports.changeMobile = [
+ [
+ body('mobile')
+ .notEmpty()
+ .withMessage(_faSr.required.phone_number)
+ .bail()
+ .custom((value, { req }) => {
+ const mobileNStatus = checkMobileNumber(value)
+ if (!mobileNStatus) return Promise.reject(_faSr.format.phone_number)
+ else return Promise.resolve()
+ })
+ .bail()
+ .custom((value, { req }) => {
+ return User.findOne({ mobile_number: value }).then(user => {
+ if (user && user.mobile_number === value)
+ return Promise.reject(new Error('کاربر با این شماره موبایل از قبل وجود دارد'))
+ else return true
+ })
+ })
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const { user_id } = req
+ const { mobile } = req.body
+ const user = await User.findById(user_id)
+ if (!user) throw new Error('invalid id')
+ user.mobile_number = mobile
+ user.mobile_confirmed = false
+ await user.save()
+ await sendConfirmationSMS(user_id)
+ return res.json({ message: 'کد تایید برای شما پیامک شد' })
+ } catch (err) {
+ return res500(res, err)
+ }
+ }
+]
+
+module.exports.resendMobileConfirmation = [
+ async (req, res) => {
+ try {
+ const { user_id } = req
+ await sendConfirmationSMS(user_id)
+ return res.json({ message: 'کد تایید برای شما پیامک شد' })
+ } catch (err) {
+ return res500(res, err)
+ }
+ }
+]
+
+module.exports.confirmMobile = [
+ async (req, res) => {
+ try {
+ const { user_id } = req
+ const { verificationKey } = req.body
+ const user = await User.findById(user_id)
+ if (!user) throw new Error('err')
+
+ if (verificationKey?.trim() !== user.mobileConfirmationKey) throw new Error('404')
+
+ if (!user.confirmed) {
+ user.confirmed = true
+
+ const verityID = await saveUserToArpa(user, 'verity')
+ const panatechID = await saveUserToArpa(user, 'panatech')
+
+ user.verity_businessID = verityID.businessID
+ user.verity_businessCode = verityID.businessCode
+
+ user.panatech_businessID = panatechID.businessID
+ user.panatech_businessCode = panatechID.businessCode
+ }
+
+ // save new info to arpa
+ await updateUserOnArpa(user, user.verity_businessID, 'verity')
+ await updateUserOnArpa(user, user.panatech_businessID, 'panatech')
+
+ // update user info in mongoDB
+ user.mobile_confirmed = true
+ user.mobileConfirmationKey = undefined
+ await user.save()
+
+ return res.json({ message: 'شماره شما تایید شد.' })
+ } catch (e) {
+ if (e === '404') return res404(res, 'کد تایید صحیح نمیباشد.')
+ else return res500(res, 'مشکلی در تایید شماره پیش آمده، لطفا دوباره تلاش کنید')
+ }
+ }
+]
+
+/// //////////////////////////////////////////////////////////////////// user managemnet by admin
+module.exports.get_all_users_for_admin = [
+ (req, res) => {
+ User.find(
+ {
+ scope: ['user'],
+ confirmed: true,
+ verity_businessID: { $ne: null },
+ verity_businessCode: { $ne: null }
+ },
+ (err, data) => {
+ if (err) return res500(res, err)
+ return res.json(data)
+ }
+ )
+ }
+]
+
+module.exports.get_one_user_for_admin = [
+ (req, res) => {
+ User.findById(req.params.id, (err, user) => {
+ if (err || !user) return res404(res, err)
+ if (!user.seenByAdmin) {
+ user.seenByAdmin = true
+ user.save(err => {
+ if (err) console.log('get one user for admin - save seenByAdmin error :', err)
+ notifyAdmin('updateNewCustomers')
+ })
+ }
+ return res.json(user)
+ })
+ }
+]
+
+module.exports.change_verity_info_by_admin = [
+ [
+ body('verity_businessCode').notEmpty().withMessage('کد مشتری نباید خالی باشد'),
+
+ body('verity_businessID').notEmpty().withMessage('آیدی مشتری نباید خالی باشد')
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const user = await User.findById(req.params?.id)
+ if (!user) return res404(res, 'invalid user id')
+ if (!user.old_verity_businessID && !user.old_verity_businessCode) {
+ user.old_verity_businessID = user.verity_businessID
+ user.old_verity_businessCode = user.verity_businessCode
+ await user.save()
+ }
+ user.verity_businessID = req.body.verity_businessID
+ user.verity_businessCode = req.body.verity_businessCode
+ await user.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (err) {
+ return res500(res, err)
+ }
+ }
+]
+
+module.exports.change_panatech_info_by_admin = [
+ [
+ body('panatech_businessCode').notEmpty().withMessage('کد مشتری نباید خالی باشد'),
+
+ body('panatech_businessID').notEmpty().withMessage('آیدی مشتری نباید خالی باشد')
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const user = await User.findById(req.params?.id)
+ if (!user) return res404(res, 'invalid user id')
+ if (!user.old_panatech_businessID && !user.old_panatech_businessCode) {
+ user.old_panatech_businessID = user.panatech_businessID
+ user.old_panatech_businessCode = user.panatech_businessCode
+ await user.save()
+ }
+ user.panatech_businessID = req.body.panatech_businessID
+ user.panatech_businessCode = req.body.panatech_businessCode
+ await user.save()
+ return res.json({ message: _faSr.response.success_save })
+ } catch (err) {
+ return res500(res, err)
+ }
+ }
+]
+
+/// //////////////////////////////////////////////////////////////////// authentication
+
+/// //////// Login
+
+module.exports.webLogin = [
+ [
+ body('username')
+ .isLength({ min: 4 })
+ .withMessage(_faSr.min_char.min4)
+ .bail()
+ .if((value, { req }) => {
+ return req.body.password && req.body.password.length >= 4
+ })
+ .custom((value, { req }) => {
+ return User.findOne({
+ $or: [{ email: value.toLowerCase().trim() }, { national_code: value }, { username: value }]
+ }).then(user => {
+ if (!user) return Promise.reject(_faSr.not_found.password)
+ else return true
+ })
+ }),
+
+ body('password')
+ .notEmpty()
+ .withMessage(_faSr.required.password)
+ .bail()
+ .isLength({ min: 4 })
+ .withMessage(_faSr.min_char.min4),
+
+ body('remember_me')
+ .exists()
+ .withMessage(_faSr.required.remember_me)
+ .bail()
+ .isBoolean()
+ .withMessage(_faSr.format.boolean)
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const { username, password } = req.body
+ const user = await User.findOne({
+ $or: [{ email: username.toLowerCase().trim() }, { national_code: username }, { username }]
+ })
+ if (!user) throw new Error('err')
+ const passwordMatch = await bcrypt.compare(password, user.password)
+ if (!passwordMatch) throw new Error('err')
+ const token = await jwt.sign({ _id: user._id }, secretKey, {
+ expiresIn: req.body.remember_me ? '30d' : '7d'
+ })
+ user.token = token
+ await user.save()
+ return res.json({ token })
+ } catch (err) {
+ return res.status(422).json({
+ validation: { username: { msg: _faSr.not_found.password } }
+ })
+ }
+ }
+]
+
+module.exports.appLogin = [
+ [
+ body('username')
+ .isLength({ min: 4 })
+ .withMessage(_faSr.min_char.min4)
+ .bail()
+ .if((value, { req }) => {
+ return req.body.password && req.body.password.length >= 4
+ })
+ .custom((value, { req }) => {
+ return User.findOne({
+ $or: [{ email: value.toLowerCase().trim() }, { national_code: value }]
+ }).then(user => {
+ if (!user) return Promise.reject(_faSr.not_found.password)
+ else return true
+ })
+ }),
+
+ body('password')
+ .notEmpty()
+ .withMessage(_faSr.required.password)
+ .bail()
+ .isLength({ min: 4 })
+ .withMessage(_faSr.min_char.min4)
+ ],
+ checkValidations(validationResult),
+ async (req, res) => {
+ try {
+ const { username, password } = req.body
+ const user = await User.findOne({
+ $or: [{ email: username.toLowerCase().trim() }, { national_code: username }]
+ })
+ if (!user) throw new Error('err')
+
+ const passwordMatch = await bcrypt.compare(password, user.password)
+ if (!passwordMatch) throw new Error('err')
+
+ const token = await jwt.sign({ _id: user._id }, secretKey, {
+ expiresIn: '60d'
+ })
+ user.appToken = token
+ await user.save()
+ return res.json({ token })
+ } catch (err) {
+ return res.status(422).json({
+ validation: { username: { msg: _faSr.not_found.password } }
+ })
+ }
+ }
+]
+
+/// //////// logout
+module.exports.webLogout = [
+ async (req, res) => {
+ try {
+ const token = req.headers?.authorization
+ if (!token) throw new Error('err')
+
+ const user = await User.findOne({ token })
+ if (!user) throw new Error('err')
+
+ user.token = null
+ await user.save()
+
+ return res.json({ message: _faSr.response.logged_out })
+ } catch (err) {
+ return res.status(401).json({ message: _faSr.response.not_logged_in })
+ }
+ }
+]
+
+module.exports.appLogout = [
+ async (req, res) => {
+ try {
+ const token = req.headers?.authorization
+ if (!token) throw new Error('err')
+
+ const user = await User.findOne({ appToken: token })
+ if (!user) throw new Error('err')
+
+ user.appToken = null
+ await user.save()
+
+ return res.json({ message: _faSr.response.logged_out })
+ } catch (err) {
+ return res.status(401).json({ message: _faSr.response.not_logged_in })
+ }
+ }
+]
+
+/// //////// get user
+module.exports.getUser = [
+ async (req, res) => {
+ try {
+ const token = req.headers?.authorization
+ if (!token) throw new Error('err')
+
+ const decoded = jwt.verify(token, secretKey)
+ if (!decoded) throw new Error('err')
+
+ const user = await User.findById(decoded?._id).select(
+ '-token -appToken -emailConfirmationKey -mobileConfirmationKey -password -resetPassToken'
+ )
+ return res.json({ user })
+ } catch (err) {
+ console.log('🚀 ~ file: userController.js ~ line 1070 ~ err', err)
+ return res.status(401).json({ message: 'unauthenticated' })
+ }
+ }
+]
diff --git a/server/controllers/warrantyTermsController.js b/server/controllers/warrantyTermsController.js
new file mode 100644
index 0000000..cebcba1
--- /dev/null
+++ b/server/controllers/warrantyTermsController.js
@@ -0,0 +1,144 @@
+const fs = require('fs')
+const { body, validationResult } = require('express-validator')
+const jimp = require('jimp')
+const Warranty = require('../models/WarrantyTerms')
+const { _sr } = require('../plugins/serverResponses')
+const { res404, checkValidations } = require('../plugins/controllersHelperFunctions')
+const _faSr = _sr.fa
+
+const shortDescriptionLength = 200
+const paginateLimit = 10
+
+module.exports.create = [
+ [
+ body('title').notEmpty().withMessage(_faSr.required.title),
+
+ body('short_description').notEmpty().withMessage(_faSr.required.description),
+
+ body('description').notEmpty().withMessage(_faSr.required.description)
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ if (!req.files || !req.files.image)
+ return res.status(422).json({ validation: { image: { msg: _faSr.required.image } } })
+
+ const image = req.files.image
+ const fileName = 'warranty_' + Date.now() + '.' + image.mimetype.split('/')[1]
+
+ // validate image format
+ const supportedFormats = ['jpg', 'jpeg', 'png', 'webp']
+ if (!supportedFormats.includes(image.mimetype.split('/')[1])) {
+ return res.status(422).json({ validation: { image: { msg: _faSr.format.image } } })
+ }
+
+ const data = {
+ _creator: req.user_id,
+ title: req.body.title,
+ short_description: req.body.short_description.slice(0, shortDescriptionLength),
+ description: req.body.description,
+ image: fileName
+ }
+
+ jimp
+ .read(image.data)
+ .then(img => {
+ img.cover(350, 350).write(`./static/uploads/images/warrantyTerms/${fileName}`, cb => {
+ const warranty = new Warranty(data)
+ warranty.save(err => {
+ if (err) console.log(err)
+ return res.json({ message: _faSr.response.success_save })
+ })
+ })
+ })
+ .catch(err => {
+ console.log(err)
+ })
+ }
+]
+
+module.exports.getAll = [
+ (req, res) => {
+ Warranty.paginate({}, { page: req.params?.page || 1, limit: paginateLimit }, (err, result) => {
+ if (err) return res.status(404).json({ message: _faSr.not_found.item_id })
+ if (!result.docs.length && Number(req.params.page) !== 1)
+ return res.status(404).json({ message: _faSr.not_found.item_id })
+ else return res.json(result)
+ })
+ }
+]
+
+module.exports.getOne = [
+ (req, res) => {
+ Warranty.findById(req.params.id)
+ .populate('_creator', 'first_name last_name')
+ .exec((err, data) => {
+ if (err) return res.status(404).json({ message: err })
+ return res.json(data)
+ })
+ }
+]
+
+module.exports.update = [
+ [
+ body('title').notEmpty().withMessage(_faSr.required.title),
+
+ body('short_description').notEmpty().withMessage(_faSr.required.description),
+
+ body('description').notEmpty().withMessage(_faSr.required.description)
+ ],
+ checkValidations(validationResult),
+ (req, res) => {
+ const data = {
+ _creator: req.user_id,
+ title: req.body.title,
+ short_description: req.body.short_description.slice(0, shortDescriptionLength),
+ description: req.body.description
+ }
+
+ if (req.files && req.files.image) {
+ const image = req.files.image
+ const fileName = 'warranty_' + Date.now() + '.' + image.mimetype.split('/')[1]
+
+ // validate image format
+ const supportedFormats = ['jpg', 'jpeg', 'png', 'webp']
+ if (!supportedFormats.includes(image.mimetype.split('/')[1])) {
+ return res.status(422).json({ validation: { image: { msg: _faSr.format.image } } })
+ }
+
+ data.image = fileName
+
+ jimp
+ .read(image.data)
+ .then(img => {
+ img.cover(350, 350).write(`./static/uploads/images/warrantyTerms/${fileName}`)
+ })
+ .catch(err => {
+ console.log(err)
+ })
+ }
+
+ Warranty.findByIdAndUpdate(req.params.id, data, (err, oldData) => {
+ if (err) return res404(res, err)
+ if (req.files && req.files.image)
+ fs.unlink(`./static/${oldData.image}`, err => {
+ if (err) console.log(err)
+ })
+ Warranty.findById(req.params.id, (err, data) => {
+ if (err) return res404(res, err)
+ return res.json(data)
+ })
+ })
+ }
+]
+
+module.exports.delete = [
+ (req, res) => {
+ Warranty.findByIdAndDelete(req.params.id, (err, data) => {
+ if (err) return res.status(404).json({ message: _faSr.not_found.item_id })
+ fs.unlink(`./static/${data.image}`, err => {
+ if (err) console.log(err)
+ })
+ return res.json({ message: _faSr.response.success_remove })
+ })
+ }
+]
diff --git a/server/database.js b/server/database.js
new file mode 100644
index 0000000..be3b527
--- /dev/null
+++ b/server/database.js
@@ -0,0 +1,31 @@
+/* eslint-disable no-unused-vars */
+const mongoose = require('mongoose')
+
+mongoose.plugin(schema => {
+ schema.set('toObject', { getters: true })
+ schema.set('toJSON', { getters: true })
+ schema.set('timestamps', {
+ createdAt: 'created_at',
+ updatedAt: 'updated_at'
+ })
+})
+
+// mongodb database connection string. change it as per your needs. here "mydb" is the name of the database. You don't need to create DB from mongodb terminal. mongoose create the database automatically.
+const inHostUrl = 'mongodb://asanserv_admin:admin1234@localhost:27017/asanserv_database'
+const outHostUrl =
+ 'mongodb://asanserv_admin:admin1234@www.asan-service.com:27017/asanserv_database?serverSelectionTimeoutMS=5000&connectTimeoutMS=10000&authSource=asanserv_database'
+const locaUrl = 'mongodb://localhost:27017/AsanService'
+mongoose.connect(locaUrl, {
+ useNewUrlParser: true,
+ useUnifiedTopology: true,
+ useFindAndModify: false,
+ useCreateIndex: true
+})
+
+const database = mongoose.connection
+database.on('error', console.error.bind(console, 'connection error:'))
+database.once('open', function callback() {
+ console.log('🟠 ~ MongoDB Connected...')
+})
+
+module.exports = database
diff --git a/server/index.js b/server/index.js
new file mode 100644
index 0000000..673e553
--- /dev/null
+++ b/server/index.js
@@ -0,0 +1,65 @@
+/// / develop environment config
+const { isDev, isProduction, DevServerPort } = require('./_env')
+const wss = require('./WebSocket/wss')
+
+/// / init express app (wrapping all functions into init() to prevent running in development mode by nuxt dev mode)
+function init() {
+ // run preConfigured modules
+ require('./database')
+ require('body-parser')
+
+ // include modules to configure
+ const express = require('express')
+ const fileUpload = require('express-fileupload')
+ const authentication = require('./authentication')
+ const { checkThirdPartyAccess } = require('./plugins/checkThirdPartyAccess')
+ // const { getVerityToken, getPanatechToken } = require('./ArpaWebService')
+ const cronJobs = require('./plugins/cronJobs')
+ const router = express.Router()
+
+ // Create express instance
+ const app = express()
+
+ // Init body-parser options (inbuilt with express)
+ app.use(express.json())
+ app.use(express.urlencoded({ extended: true }))
+ app.use(fileUpload())
+
+ // load plugins
+ // getVerityToken()
+ // getPanatechToken()
+ cronJobs()
+
+ // API routes
+ const Public = require('./routes/public')
+ const admin = require('./routes/admin')
+ const user = require('./routes/user')
+ const agent = require('./routes/agent')
+ const auth = require('./routes/auth')
+ const cross = require('./routes/cross')
+ const thirdParty = require('./routes/thirdParty')
+
+ // Use API Routes
+ router.use('/public', Public)
+ router.use('/admin', authentication.isAdmin, admin)
+ router.use('/user', authentication.isUser, user)
+ router.use('/agent', authentication.isAgent, agent)
+ router.use('/auth', auth)
+ router.use('/cross', cross)
+ router.use('/thirdParty', checkThirdPartyAccess, thirdParty)
+
+ app.use(isDev ? '/api' : '', router)
+
+ return app
+}
+
+/// / development server
+if (isDev) {
+ init().listen(DevServerPort, () => {
+ console.log('🟢 ~ Node Server is running in development mode on port:', DevServerPort)
+ })
+ wss()
+}
+
+/// / server middleware (production mode)
+module.exports.serverMiddleware = isProduction && { path: '/api', handler: init() }
diff --git a/server/models/Announcement.js b/server/models/Announcement.js
new file mode 100644
index 0000000..3f31525
--- /dev/null
+++ b/server/models/Announcement.js
@@ -0,0 +1,13 @@
+const mongoose = require('mongoose')
+
+const AnnouncementSchema = mongoose.Schema({
+ title: String,
+ caption: String,
+ seenBy: [mongoose.ObjectId],
+ expireDate: Number,
+ expired: { type: Boolean, default: false },
+ isForAgents: { type: Boolean, default: false },
+ _creator: { type: mongoose.ObjectId, ref: 'User' }
+})
+
+module.exports = mongoose.model('Announcement', AnnouncementSchema)
diff --git a/server/models/BufferRequest.js b/server/models/BufferRequest.js
new file mode 100644
index 0000000..404fd52
--- /dev/null
+++ b/server/models/BufferRequest.js
@@ -0,0 +1,36 @@
+const mongoose = require('mongoose')
+
+const BufferRequestSchema = mongoose.Schema({
+ // system structure
+ _openedBy: { type: mongoose.ObjectId, ref: 'User' },
+ _updatedBy: { type: mongoose.ObjectId, ref: 'User' },
+ user_id: { type: mongoose.ObjectId, ref: 'User' },
+ agent_id: { type: mongoose.ObjectId, ref: 'Representation' },
+
+ // form info
+ description: String,
+ createDate: String,
+ sendDate: String,
+ trackingCode: String,
+ items: [
+ {
+ ItemName: String,
+ ItemID: String,
+ ItemCode: String,
+ bufferQuantity: Number
+ }
+ ],
+
+ // admin operations
+ seen: { type: Boolean, default: false },
+ status: { type: String, enum: ['temp', 'sent', 'ongoing', 'waiting', 'delivered'], default: 'temp' },
+ statusHistory: [
+ {
+ status: String,
+ date: Number
+ }
+ ],
+ deliveryCode: String
+})
+
+module.exports = mongoose.model('BufferRequest', BufferRequestSchema)
diff --git a/server/models/ContactPageMessage.js b/server/models/ContactPageMessage.js
new file mode 100644
index 0000000..1a3de12
--- /dev/null
+++ b/server/models/ContactPageMessage.js
@@ -0,0 +1,11 @@
+const mongoose = require('mongoose')
+
+const ContactPageMessageSchema = new mongoose.Schema({
+ full_name: String,
+ email: String,
+ message: String,
+ read: { type: Boolean, default: false },
+ read_by: { type: mongoose.ObjectId, ref: 'User' }
+})
+
+module.exports = mongoose.model('ContactPageMessage', ContactPageMessageSchema)
diff --git a/server/models/FAQ.js b/server/models/FAQ.js
new file mode 100644
index 0000000..2ec1761
--- /dev/null
+++ b/server/models/FAQ.js
@@ -0,0 +1,9 @@
+const mongoose = require('mongoose')
+
+const FAQSchema = mongoose.Schema({
+ _creator: { type: mongoose.ObjectId, ref: 'User' },
+ question: String,
+ answer: String
+})
+
+module.exports = mongoose.model('FAQ', FAQSchema)
diff --git a/server/models/GuaranteeReport.js b/server/models/GuaranteeReport.js
new file mode 100644
index 0000000..bf8d18e
--- /dev/null
+++ b/server/models/GuaranteeReport.js
@@ -0,0 +1,42 @@
+const mongoose = require('mongoose')
+
+const GuaranteeReportSchema = mongoose.Schema({
+ // system structure
+ _openedBy: { type: mongoose.ObjectId, ref: 'User' },
+ _updatedBy: { type: mongoose.ObjectId, ref: 'User' },
+ user_id: { type: mongoose.ObjectId, ref: 'User' },
+ agent_id: { type: mongoose.ObjectId, ref: 'Representation' },
+
+ // form info
+ description: String,
+ createDate: String,
+ sendDate: String,
+ trackingCode: String,
+ items: [
+ {
+ // customer info
+ customerName: String,
+ customerTel: String,
+ // product info
+ ItemName: String,
+ SerialNo1: String,
+ ItemID: String,
+ ItemCode: String,
+
+ // product issue
+ productIssue: String,
+ usedPieces: String,
+
+ // dates
+ recieveDate: String,
+ deliverDate: String
+ }
+ ],
+
+ // admin operations
+ seen: { type: Boolean, default: false },
+ archived: { type: Boolean, default: false },
+ status: { type: String, enum: ['temp', 'sent'], default: 'temp' }
+})
+
+module.exports = mongoose.model('GuaranteeReport', GuaranteeReportSchema)
diff --git a/server/models/Help.js b/server/models/Help.js
new file mode 100644
index 0000000..e14d518
--- /dev/null
+++ b/server/models/Help.js
@@ -0,0 +1,8 @@
+const mongoose = require('mongoose')
+
+const HelpSchema = mongoose.Schema({
+ _creator: { type: mongoose.ObjectId, ref: 'User' },
+ helpId: { type: mongoose.ObjectId, ref: 'Learning' }
+})
+
+module.exports = mongoose.model('Help', HelpSchema)
diff --git a/server/models/Learning.js b/server/models/Learning.js
new file mode 100644
index 0000000..23a574b
--- /dev/null
+++ b/server/models/Learning.js
@@ -0,0 +1,27 @@
+const mongoose = require('mongoose')
+const paginate = require('mongoose-paginate-v2')
+
+function video(vid) {
+ if (vid) return '/uploads/videos/' + vid
+}
+
+function image(img) {
+ return '/uploads/images/blog/' + img
+}
+
+function thumb(img) {
+ return '/uploads/images/blog/thumb/' + img
+}
+
+const LearningSchema = mongoose.Schema({
+ _creator: { type: mongoose.ObjectId, ref: 'User' },
+ title: String,
+ short_description: String,
+ description: String,
+ cover: { type: String, get: image },
+ video: { type: String, get: video },
+ thumb: { type: String, get: thumb }
+})
+LearningSchema.plugin(paginate)
+
+module.exports = mongoose.model('Learning', LearningSchema)
diff --git a/server/models/Lottery.js b/server/models/Lottery.js
new file mode 100644
index 0000000..b7f6f83
--- /dev/null
+++ b/server/models/Lottery.js
@@ -0,0 +1,23 @@
+const mongoose = require('mongoose')
+
+function image(img) {
+ if (img) return '/uploads/images/lottery/' + img
+}
+
+const LotterySchema = mongoose.Schema({
+ entryWidth: Number,
+ entryHeight: Number,
+ entryBgImg: { type: String, get: image },
+ resultWidth: Number,
+ resultHeight: Number,
+ resultBgImg: { type: String, get: image },
+ title: String,
+ lotteryCode: String,
+ participants: [],
+ winnersCount: { type: Number, default: 1 },
+ winnersList: [],
+ expireDate: Number,
+ expired: { type: Boolean, default: false }
+})
+
+module.exports = mongoose.model('Lottery', LotterySchema)
diff --git a/server/models/LotteryPopUp.js b/server/models/LotteryPopUp.js
new file mode 100644
index 0000000..88d0b2f
--- /dev/null
+++ b/server/models/LotteryPopUp.js
@@ -0,0 +1,16 @@
+const mongoose = require('mongoose')
+
+function image(img) {
+ if (img) return '/uploads/images/lottery/' + img
+}
+
+const LotteryPopUpSchema = mongoose.Schema({
+ visible: { type: Boolean, default: true },
+ x: { type: Number, default: 15 },
+ y: { type: Number, default: 15 },
+ w: { type: Number, default: 40 },
+ h: { type: Number, default: 40 },
+ bgImg: { type: String, get: image }
+})
+
+module.exports = mongoose.model('LotteryPopUp', LotteryPopUpSchema)
diff --git a/server/models/OldPieceRequest.js b/server/models/OldPieceRequest.js
new file mode 100644
index 0000000..0182fb7
--- /dev/null
+++ b/server/models/OldPieceRequest.js
@@ -0,0 +1,45 @@
+const mongoose = require('mongoose')
+
+const OldPieceRequestSchema = mongoose.Schema({
+ // system structure
+ _openedBy: { type: mongoose.ObjectId, ref: 'User' },
+ _updatedBy: { type: mongoose.ObjectId, ref: 'User' },
+ user_id: { type: mongoose.ObjectId, ref: 'User' },
+ agent_id: { type: mongoose.ObjectId, ref: 'Representation' },
+
+ // form info
+ description: String,
+ createDate: String,
+ sendDate: String,
+ trackingCode: String,
+ items: [
+ {
+ // product info
+ ItemReceptionTransDate: String,
+ ItemName: String,
+ SerialNo1: String,
+ ItemID: String,
+ ItemCode: String,
+ // GStartDate: String,
+ // GEndDate: String,
+
+ // piece info
+ pieceName: String,
+ pieceCode: String,
+ pieceId: { type: mongoose.ObjectId, ref: 'Piece' }
+ }
+ ],
+
+ // admin operations
+ seen: { type: Boolean, default: false },
+ status: { type: String, enum: ['temp', 'sent', 'ongoing', 'waiting', 'delivered'], default: 'temp' },
+ statusHistory: [
+ {
+ status: String,
+ date: Number
+ }
+ ],
+ deliveryCode: String
+})
+
+module.exports = mongoose.model('OldPieceRequest', OldPieceRequestSchema)
diff --git a/server/models/Piece.js b/server/models/Piece.js
new file mode 100644
index 0000000..96c1051
--- /dev/null
+++ b/server/models/Piece.js
@@ -0,0 +1,8 @@
+const mongoose = require('mongoose')
+
+const PieceSchema = mongoose.Schema({
+ name: String,
+ code: String
+})
+
+module.exports = mongoose.model('Piece', PieceSchema)
diff --git a/server/models/PieceRequest.js b/server/models/PieceRequest.js
new file mode 100644
index 0000000..61fddc4
--- /dev/null
+++ b/server/models/PieceRequest.js
@@ -0,0 +1,47 @@
+const mongoose = require('mongoose')
+
+const PieceRequestSchema = mongoose.Schema({
+ // system structure
+ _openedBy: { type: mongoose.ObjectId, ref: 'User' },
+ _updatedBy: { type: mongoose.ObjectId, ref: 'User' },
+ user_id: { type: mongoose.ObjectId, ref: 'User' },
+ agent_id: { type: mongoose.ObjectId, ref: 'Representation' },
+
+ // form info
+ description: String,
+ createDate: String,
+ sendDate: String,
+ trackingCode: String,
+ items: [
+ {
+ // product info
+ ItemReceptionTransDate: String,
+ ItemName: String,
+ SerialNo1: String,
+ ItemID: String,
+ ItemCode: String,
+ // GStartDate: String,
+ // GEndDate: String,
+ gStatus: Boolean,
+
+ // piece info
+ pieceName: String,
+ pieceCode: String,
+ pieceQuantity: Number,
+ pieceId: { type: mongoose.ObjectId, ref: 'Piece' }
+ }
+ ],
+
+ // admin operations
+ seen: { type: Boolean, default: false },
+ status: { type: String, enum: ['temp', 'sent', 'ongoing', 'waiting', 'delivered'], default: 'temp' },
+ statusHistory: [
+ {
+ status: String,
+ date: Number
+ }
+ ],
+ deliveryCode: String
+})
+
+module.exports = mongoose.model('PieceRequest', PieceRequestSchema)
diff --git a/server/models/Representation.js b/server/models/Representation.js
new file mode 100644
index 0000000..af9ec21
--- /dev/null
+++ b/server/models/Representation.js
@@ -0,0 +1,111 @@
+const mongoose = require('mongoose')
+
+function file(file) {
+ return '/uploads/representation_docs/' + this.name
+}
+
+const FilesSchema = mongoose.Schema({
+ name: String
+})
+FilesSchema.virtual('url').get(file)
+
+const RepresentationSchema = mongoose.Schema({
+ // user info
+ user_id: { type: mongoose.ObjectId, ref: 'User' },
+ representation_code: String,
+ agent_code: String,
+ editAccess: { type: Boolean, default: false },
+
+ // personal info
+ full_name: String,
+ birth_date: String,
+ id_number: String,
+ place_of_issue: String,
+ national_code: String,
+ fathers_name: String,
+ education_level: String,
+ military_status: String,
+ certificates: String,
+
+ // contact info
+ store_name: String,
+ province_name: String,
+ province_id: String,
+ city_name: String,
+ city_id: String,
+ postal_code: String,
+ mobile_number: String,
+ tel_number: String,
+ fax_number: String,
+ economic_code: String,
+ email: String,
+ address: String,
+
+ // location info
+ business_license: Boolean,
+ ownership_type: { type: String, enum: ['owner', 'rent', 'rghit_of_business'] },
+ total_area: String,
+ repair_area: String,
+ stock_area: String,
+ customer_reference_floor: String,
+ place_location: { type: String, enum: ['tech_passage', 'other'] },
+ geo_location: { type: String, enum: ['main_street', 'side_street', 'alley', 'inside_passage', 'outside_passage'] },
+ banner_info: String,
+ repair_technicians: String,
+ repair_masters: String,
+ office_workers: String,
+ bike_deliveries: String,
+
+ // experience info
+ computer_repair_exp: String,
+ multimedia_repair_exp: String,
+ business_exp: String,
+
+ // common questions
+ representation_type: {
+ type: String,
+ enum: ['verity', 'panatech', 'both'],
+ default: 'both'
+ },
+ know_asanServ_from: {
+ type: String,
+ enum: ['company_agents', 'website', 'company_workers', 'exhibition', 'introduced', 'other']
+ },
+ introducer_info: String,
+ asanServ_products_knowledge: { type: Number, enum: [0, 1, 2, 3, 4] },
+ computer_saling_exp: Boolean,
+ computer_saling_description: String,
+ other_representations: [
+ {
+ trademark: String,
+ company_name: String,
+ cooperation_history: String,
+ cooperation_start_year: String
+ }
+ ],
+ more_descriptions: String,
+
+ // admins
+ status: {
+ type: String,
+ enum: ['registered', 'ongoing', 'verification', 'accepted', 'rejected'],
+ default: 'registered'
+ },
+
+ // files
+ upload: { type: Boolean, default: true },
+ tradeUnion: [FilesSchema],
+ expertise: [FilesSchema],
+ ownership: [FilesSchema],
+ repairShop: [FilesSchema],
+ itEmployee: [FilesSchema],
+ itExpert: [FilesSchema],
+ financialGuarantees: [FilesSchema],
+ //
+ archived: { type: Boolean, default: false },
+ _updatedBy: { type: mongoose.ObjectId, ref: 'User' },
+ _revoked: { type: Boolean, default: false },
+ _revokedBy: { type: mongoose.ObjectId, ref: 'User' }
+})
+
+module.exports = mongoose.model('Representation', RepresentationSchema)
diff --git a/server/models/SMSBroadcast.js b/server/models/SMSBroadcast.js
new file mode 100644
index 0000000..83b822c
--- /dev/null
+++ b/server/models/SMSBroadcast.js
@@ -0,0 +1,14 @@
+const mongoose = require('mongoose')
+
+const SMSBroadcastSchema = mongoose.Schema({
+ message: String,
+ recievers: [
+ {
+ user_id: { type: mongoose.ObjectId, ref: 'User' },
+ mobile_number: String
+ }
+ ],
+ _creator: { type: mongoose.ObjectId, ref: 'User' }
+})
+
+module.exports = mongoose.model('SMSBroadcast', SMSBroadcastSchema)
diff --git a/server/models/Survey.js b/server/models/Survey.js
new file mode 100644
index 0000000..f673deb
--- /dev/null
+++ b/server/models/Survey.js
@@ -0,0 +1,16 @@
+const mongoose = require('mongoose')
+
+const SurveySchema = mongoose.Schema({
+ purchasedProduct: { type: Number, enum: [1, 2, 3, 4, 5] },
+ guaranteeWorkFlow: { type: Number, enum: [1, 2, 3, 4, 5] },
+ employeeResponsibility: { type: Number, enum: [1, 2, 3, 4, 5] },
+ serviceQuality: { type: Number, enum: [1, 2, 3, 4, 5] },
+ serviceTime: { type: Number, enum: [1, 2, 3, 4, 5] },
+ repairQuality: { type: Number, enum: [1, 2, 3, 4, 5] },
+ coast: { type: Number, enum: [1, 2, 3, 4, 5] },
+ description: String,
+ code: String,
+ user: { type: mongoose.ObjectId, ref: 'User' },
+})
+
+module.exports = mongoose.model('Survey', SurveySchema)
diff --git a/server/models/SurveyCheck.js b/server/models/SurveyCheck.js
new file mode 100644
index 0000000..5b5c165
--- /dev/null
+++ b/server/models/SurveyCheck.js
@@ -0,0 +1,10 @@
+const mongoose = require('mongoose')
+
+const SurveyCheckSchema = mongoose.Schema({
+ code: String,
+ user: { type: mongoose.ObjectId, ref: 'User' },
+ smsSent: { type: Boolean, default: false },
+ timeAdded: Number // timestamp
+})
+
+module.exports = mongoose.model('SurveyCheck', SurveyCheckSchema)
diff --git a/server/models/TicketConversation.js b/server/models/TicketConversation.js
new file mode 100644
index 0000000..92c25e5
--- /dev/null
+++ b/server/models/TicketConversation.js
@@ -0,0 +1,22 @@
+const mongoose = require('mongoose')
+
+function image(img) {
+ if (img) return '/uploads/images/tickets/' + img
+}
+
+const Ticket = mongoose.Schema({
+ message: String,
+ image: { type: String, get: image },
+ isUser: { type: Boolean, default: true },
+ read: { type: Boolean, default: false },
+ user_id: { type: mongoose.ObjectId, ref: 'User' }
+})
+
+const TicketConversation = mongoose.Schema({
+ title: String,
+ transaction_id: String,
+ user_id: { type: mongoose.ObjectId, ref: 'User' },
+ messages: [Ticket]
+})
+
+module.exports = mongoose.model('TicketConversation', TicketConversation)
diff --git a/server/models/Transaction.js b/server/models/Transaction.js
new file mode 100644
index 0000000..c3c6af6
--- /dev/null
+++ b/server/models/Transaction.js
@@ -0,0 +1,34 @@
+const mongoose = require('mongoose')
+
+const TransactionSchema = mongoose.Schema({
+ // system structure
+ user_id: { type: mongoose.ObjectId, ref: 'User' },
+ agent_id: { type: mongoose.ObjectId, ref: 'Representation' },
+ db_name: { type: String, enum: ['verity', 'panatech'] },
+
+ // form info
+ BusinessID: String,
+ Description: String,
+ cAddress1: String,
+ TransCCustom1: String,
+ cTel1: String,
+ items: Array,
+ //
+ TempReceiptTransNumber: String,
+ ItemReceptionTransNumber: String,
+ TempReceiptTransDate: String,
+ ItemReceptionTransDate: String,
+
+ // agent operations
+ seen: { type: Boolean, default: false },
+ status: { type: String, enum: ['saved', 'recieved', 'ongoing', 'waiting', 'delivered'], default: 'saved' },
+ statusHistory: [
+ {
+ status: String,
+ date: Number
+ }
+ ],
+ deliveryCode: String
+})
+
+module.exports = mongoose.model('Transaction', TransactionSchema)
diff --git a/server/models/TransactionDraft.js b/server/models/TransactionDraft.js
new file mode 100644
index 0000000..fd6f9f4
--- /dev/null
+++ b/server/models/TransactionDraft.js
@@ -0,0 +1,10 @@
+const mongoose = require('mongoose')
+
+const TransactionDraftSchema = mongoose.Schema({
+ user_id: { type: mongoose.ObjectId, ref: 'User' },
+ db_name: { type: String, enum: ['verity', 'panatech'] },
+ description: String,
+ items: { type: Array, default: [] }
+})
+
+module.exports = mongoose.model('TransactionDraft', TransactionDraftSchema)
diff --git a/server/models/User.js b/server/models/User.js
new file mode 100644
index 0000000..7be7f33
--- /dev/null
+++ b/server/models/User.js
@@ -0,0 +1,59 @@
+const mongoose = require('mongoose')
+
+const UserSchema = mongoose.Schema({
+ // for admins
+ _creator: { type: mongoose.ObjectId, ref: 'User' },
+ private: { type: Boolean, default: false },
+ username: String,
+ permissions: Array,
+ // for user
+ national_code: String,
+ province_id: String,
+ city_id: String,
+ province_name: String,
+ city_name: String,
+ address: String,
+ postal_code: String,
+ tel_number: String,
+ mobile_number: String,
+ email: String,
+ store_name: String,
+
+ // verity info
+ verity_businessID: String,
+ verity_businessCode: String,
+ old_verity_businessID: String,
+ old_verity_businessCode: String,
+
+ // panatech info
+ panatech_businessID: String,
+ panatech_businessCode: String,
+ old_panatech_businessID: String,
+ old_panatech_businessCode: String,
+
+ isAgent: { type: Boolean, default: false },
+ representation_id: { type: mongoose.ObjectId, ref: 'Representation' },
+ representation_code: String,
+ askedForRepresentation: { type: Boolean, default: false },
+
+ // for both
+ first_name: String,
+ last_name: String,
+ password: String,
+
+ /// //////////////////////////////// user confirmations
+ confirmed: { type: Boolean, default: false },
+ email_confirmed: { type: Boolean, default: false },
+ mobile_confirmed: { type: Boolean, default: false },
+ emailConfirmationKey: String,
+ mobileConfirmationKey: String,
+ seenByAdmin: { type: Boolean, default: false },
+
+ /// /////////////
+ scope: { type: Array, default: ['user'] },
+ token: String,
+ appToken: String,
+ resetPassToken: String
+})
+
+module.exports = mongoose.model('User', UserSchema)
diff --git a/server/models/WarrantyTerms.js b/server/models/WarrantyTerms.js
new file mode 100644
index 0000000..3cecb01
--- /dev/null
+++ b/server/models/WarrantyTerms.js
@@ -0,0 +1,17 @@
+const mongoose = require('mongoose')
+const paginate = require('mongoose-paginate-v2')
+
+function image(img) {
+ return '/uploads/images/warrantyTerms/' + img
+}
+
+const WarrantySchema = mongoose.Schema({
+ _creator: { type: mongoose.ObjectId, ref: 'User' },
+ title: String,
+ short_description: String,
+ description: String,
+ image: { type: String, get: image }
+})
+WarrantySchema.plugin(paginate)
+
+module.exports = mongoose.model('Warranty', WarrantySchema)
diff --git a/server/models/download/Download.js b/server/models/download/Download.js
new file mode 100644
index 0000000..cf070c2
--- /dev/null
+++ b/server/models/download/Download.js
@@ -0,0 +1,33 @@
+const mongoose = require('mongoose')
+const paginate = require('mongoose-paginate-v2')
+
+function image(img) {
+ return '/uploads/images/downloads/' + img
+}
+
+function file(file) {
+ return '/uploads/apps/' + file
+}
+
+const DownloadFilesSchema = mongoose.Schema({
+ _creator: { type: mongoose.ObjectId, ref: 'User' },
+ name: String,
+ os: {
+ type: String,
+ enum: ['windows', 'linux', 'mac', 'android', 'ios']
+ },
+ file: { type: String, get: file }
+})
+
+const DownloadSchema = mongoose.Schema({
+ _creator: { type: mongoose.ObjectId, ref: 'User' },
+ title: String,
+ short_description: String,
+ description: String,
+ image: { type: String, get: image },
+ category: mongoose.ObjectId,
+ files: [DownloadFilesSchema]
+})
+DownloadSchema.plugin(paginate)
+
+module.exports = mongoose.model('Download', DownloadSchema)
diff --git a/server/models/download/DownloadCategory.js b/server/models/download/DownloadCategory.js
new file mode 100644
index 0000000..9ca80ff
--- /dev/null
+++ b/server/models/download/DownloadCategory.js
@@ -0,0 +1,8 @@
+const mongoose = require('mongoose')
+
+const DownloadCategorySchema = mongoose.Schema({
+ _creator: { type: mongoose.ObjectId, ref: 'User' },
+ name: String
+})
+
+module.exports = mongoose.model('DownloadCategory', DownloadCategorySchema)
diff --git a/server/plugins/SMS_Module.js b/server/plugins/SMS_Module.js
new file mode 100644
index 0000000..252b4f2
--- /dev/null
+++ b/server/plugins/SMS_Module.js
@@ -0,0 +1,53 @@
+const axios = require('axios')
+
+const accountInfo = {
+ Username: 'asanservice.sms@gmail.com',
+ Password: '7ea2243a',
+ Number: '5000467341',
+ url: 'http://www.afe.ir/WebService/V4/BoxService.asmx'
+}
+
+/// /////// http post soap method
+module.exports.SMS = (mobileNumbersArray, message) => {
+ return new Promise((resolve, reject) => {
+ function renderMobileNumbers(array) {
+ return array.map(item => `${item} `).join('')
+ }
+
+ const xml = `
+
+
+
+ ${accountInfo.Username}
+ ${accountInfo.Password}
+ ${accountInfo.Number}
+
+ ${renderMobileNumbers(mobileNumbersArray)}
+
+ ${message}
+ 1
+
+
+ `
+
+ axios
+ .post(accountInfo.url, xml, {
+ headers: {
+ 'Content-Type': 'text/xml; charset=utf-8',
+ SOAPAction: 'http://www.afe.ir/SendMessage'
+ }
+ })
+ .then(res => {
+ resolve(res)
+ })
+ .catch(err => {
+ console.log(
+ 'this is sms module error ------------------ status code: ',
+ err.response.status,
+ 'error message: ',
+ err.response.data
+ )
+ resolve(err)
+ })
+ })
+}
diff --git a/server/plugins/SMS_Phrases.js b/server/plugins/SMS_Phrases.js
new file mode 100644
index 0000000..825ebe1
--- /dev/null
+++ b/server/plugins/SMS_Phrases.js
@@ -0,0 +1,4 @@
+module.exports.phrases = {
+ signature: ' asan-service.com ',
+ thanks: ' از همراهی شما سپاس گزاریم. '
+}
diff --git a/server/plugins/asanServiceSerialChecker.js b/server/plugins/asanServiceSerialChecker.js
new file mode 100644
index 0000000..03a295d
--- /dev/null
+++ b/server/plugins/asanServiceSerialChecker.js
@@ -0,0 +1,58 @@
+const fs = require('fs')
+const readXlsxFile = require('read-excel-file/node')
+
+const guaranteeSerialsPath = './static/uploads/serials'
+const productSerialsPath = './static/uploads/serials_products'
+
+const serialChecker = async (serial, type = 'guaranteeSerial') => {
+ let exelsPath
+ if (type === 'guaranteeSerial') exelsPath = guaranteeSerialsPath
+ if (type === 'orginality') exelsPath = productSerialsPath
+
+ const lowerSerial = serial.toLowerCase()
+ // a promise to lowercase items and filter null or DateObjects
+ const toLowerCaseArray = array => {
+ return new Promise((resolve, reject) => {
+ const newArray = []
+ array.forEach((item, index) => {
+ if (item !== null && typeof item === 'string') newArray.push(item.toLowerCase())
+ if (item !== null && typeof item === 'number') newArray.push(item.toString())
+ if (index === array.length - 1) return resolve(newArray)
+ })
+ })
+ }
+
+ // create an array of all exel files data
+ const exelFilesData = []
+ try {
+ // get a list of all exel files
+ const serialFiles = await fs.readdirSync(exelsPath)
+
+ // push each exel file data to exelFilesData array
+ let n0 = 0
+ for await (const file of serialFiles) {
+ // reading all exel files one by one
+ const exelFile = await readXlsxFile(`${exelsPath}/${file}`)
+ exelFilesData.push(exelFile)
+
+ // flat exelFilesData and filter and lowerCase it's items
+ if (n0 === serialFiles.length - 1) {
+ const flattedArray = exelFilesData.flat(10000)
+ const lowerCaseFlattedArray = await toLowerCaseArray(flattedArray)
+
+ // loop throw lowerCased items to find exact match item
+ let n1 = 0
+ for await (const item of lowerCaseFlattedArray) {
+ if (item === lowerSerial) return true
+ if (n1 === lowerCaseFlattedArray.length - 1) return false
+ n1++
+ }
+ }
+ n0++
+ }
+ } catch (e) {
+ throw new Error(e)
+ }
+}
+
+module.exports.serialChecker = serialChecker
diff --git a/server/plugins/checkThirdPartyAccess.js b/server/plugins/checkThirdPartyAccess.js
new file mode 100644
index 0000000..c4f4b42
--- /dev/null
+++ b/server/plugins/checkThirdPartyAccess.js
@@ -0,0 +1,9 @@
+const token = '8f552d860d0cdbbf4afaa0749acb7f3e32efcdc85fc4b49bb3d356ff30f0504a'
+module.exports.checkThirdPartyAccess = (req, res, next) => {
+ try {
+ if (req.headers?.authorization?.trim() !== token) throw new Error('unauthorized')
+ else next()
+ } catch {
+ return res.status(422).json({ message: 'unauthorized' })
+ }
+}
diff --git a/server/plugins/controllersHelperFunctions.js b/server/plugins/controllersHelperFunctions.js
new file mode 100644
index 0000000..aa64209
--- /dev/null
+++ b/server/plugins/controllersHelperFunctions.js
@@ -0,0 +1,114 @@
+/// ///////////////////////////////////////////////////////////////////////////////////////// expresjs methods
+module.exports.res404 = (res, err) => {
+ return res.status(404).json({ message: err })
+}
+
+module.exports.res406 = (res, err) => {
+ return res.status(406).json({ message: err })
+}
+
+module.exports.res500 = (res, err) => {
+ return res.status(500).json({ message: err })
+}
+
+module.exports.checkValidations = validationResult => {
+ return (req, res, next) => {
+ const errors = validationResult(req)
+ if (!errors.isEmpty()) return res.status(422).json({ validation: errors.mapped() })
+ else next()
+ }
+}
+
+/// ///////////////////////////////////////////////////////////////////////////////////////// sting methods
+module.exports.removeWhiteSpaces = str => {
+ return str.replace(/ /g, '')
+}
+
+module.exports.isPersian = str => {
+ return str.match(/^[\u0600-\u06FF\s]+$/)
+}
+
+module.exports.isPersianWithDigits = str => {
+ return str.match(/^[\u0600-\u06FF\s\d]+$/)
+}
+
+module.exports.isLatin = str => {
+ return str.match(/^[A-Za-z\s]+$/g)
+}
+
+module.exports.isLatinWithDigits = str => {
+ return str.match(/^[a-zA-Z\s0-9()*_\-!#$%^&*,."'\][]*$/g)
+}
+
+module.exports.hasWhiteSpaces = str => {
+ return str.includes(' ')
+}
+
+/// ///////////////////////////////////////////////////////////////////////////////////////// number methods
+module.exports.generateRandomDigits = digitsLength => {
+ function generateRandomDigits(DIGITS_LENGTH) {
+ const add = 1
+ let max = 12 - add // 12 is the min safe number Math.random() can generate without it starting to pad the end with zeros.
+ if (DIGITS_LENGTH > max) {
+ return generateRandomDigits(max) + generateRandomDigits(DIGITS_LENGTH - max)
+ }
+ max = Math.pow(10, DIGITS_LENGTH + add)
+ const min = max / 10 // Math.pow(10, n) basically
+ const number = Math.floor(Math.random() * (max - min + 1)) + min
+
+ return ('' + number).substring(add)
+ }
+ return generateRandomDigits(digitsLength)
+}
+
+module.exports.generateRandomDigitsInRangeOf = max => {
+ return Math.floor(Math.random() * max) + 1
+}
+
+/// ///////////////////////////////////////////////////////////////////////////////////////// iran region methods
+module.exports.checkNationalCode = code => {
+ /* eslint-disable eqeqeq */
+ const L = code.length
+ if (L < 8 || parseInt(code, 10) == 0) return false
+ code = ('0000' + code).substr(L + 4 - 10)
+ if (parseInt(code.substr(3, 6), 10) == 0) return false
+ const c = parseInt(code.substr(9, 1), 10)
+ let s = 0
+ for (let i = 0; i < 9; i++) {
+ s += parseInt(code.substr(i, 1), 10) * (10 - i)
+ }
+ s = s % 11
+ return (s < 2 && c == s) || (s >= 2 && c == 11 - s)
+ /* eslint-enable eqeqeq */
+}
+
+module.exports.checkMobileNumber = number => {
+ const regex = /^(\+98|0)?9\d{9}$/
+ const result = regex.test(number)
+ return result
+}
+
+module.exports.normalizeMobileNumber = number => {
+ return number.split('').reverse().join('').slice(0, 10).concat('0').split('').reverse().join('')
+}
+
+module.exports.nameOptimizer = name => {
+ function regex(str) {
+ return new RegExp(str)
+ }
+
+ return name
+ .replace(regex('آقای'), '')
+ .replace(regex('آقا'), '')
+ .replace(regex('جنابه'), '')
+ .replace(regex('جناب'), '')
+ .replace(regex('سرکار خانوم'), '')
+ .replace(regex('سرکار خانم'), '')
+ .replace(regex('سرکارخانوم'), '')
+ .replace(regex('سرکارخانومه'), '')
+ .replace(regex('سرکارخانمه'), '')
+ .replace(regex('سرکارخانم'), '')
+ .replace(regex('سرکار'), '')
+ .replace(regex('خانوم'), '')
+ .replace(regex('خانم'), '')
+}
diff --git a/server/plugins/cronJobs.js b/server/plugins/cronJobs.js
new file mode 100644
index 0000000..5da3317
--- /dev/null
+++ b/server/plugins/cronJobs.js
@@ -0,0 +1,289 @@
+/* eslint-disable no-unused-vars */
+const User = require('../models/User')
+const Lottery = require('../models/Lottery')
+const SurveyCheck = require('../models/SurveyCheck')
+const Survey = require('../models/Survey')
+const Announcement = require('../models/Announcement')
+const { saveUserToArpa, updateUserOnArpa } = require('../ArpaWebservice')
+const { generateRandomDigitsInRangeOf } = require('./controllersHelperFunctions')
+const { SMS } = require('./SMS_Module')
+const { phrases } = require('./SMS_Phrases')
+
+/// /////// times
+const minute = 1000 * 60
+const hour = minute * 60
+const day = hour * 24
+
+/// /////// jobs
+const jobs = {
+ checkUserActivation() {
+ console.log('✅ --job: check users for activation is running')
+
+ return setInterval(async () => {
+ try {
+ const users = await User.find({ confirmed: false })
+ for await (const user of users) {
+ // item time and timeout
+ const itemTime = Date.parse(user.created_at)
+ const timeout = itemTime + day
+
+ // check if passed 24 hours and remove registration
+ if (Date.now() >= timeout) {
+ await user.remove()
+ }
+ }
+ } catch (e) {
+ console.log(e)
+ }
+ }, hour)
+ },
+ checkIfAnnouncementsExpired() {
+ console.log('✅ --job: check announcements for expire date is running')
+
+ return setInterval(async () => {
+ try {
+ const announcements = await Announcement.find({ expired: false })
+ for await (const notif of announcements) {
+ if (Date.now() > notif.expireDate) {
+ notif.expired = true
+ await notif.save()
+ }
+ }
+ } catch (e) {
+ console.log(e)
+ }
+ }, hour)
+ },
+ drawLottery() {
+ console.log('✅ --job: check for lottery draw is running')
+
+ return setInterval(async () => {
+ try {
+ const lottery = await Lottery.findOne({ expired: false })
+ if (!lottery || lottery.expireDate > Date.now()) return
+
+ /// ///////// assets (arrays)
+ const winnersCount = lottery.winnersCount
+
+ const participants = lottery.participants
+ const participantsMobileNumbers = []
+
+ const winnersArray = []
+ const winnersMobileNumbers = []
+
+ /// ///////// assets (functions)
+ function getWinner(array) {
+ return new Promise(async (resolve, reject) => {
+ const winner = array[generateRandomDigitsInRangeOf(array.length - 1)]
+ if (await winnersMobileNumbers.includes(winner.mobile)) resolve(await getWinner(array))
+ else {
+ winnersMobileNumbers.push(winner.mobile)
+ winnersArray.push(winner)
+ resolve()
+ }
+ })
+ }
+
+ // normalize repeated mobile numbers to decide which method to use
+ for await (const item of participants) {
+ if (!participantsMobileNumbers.includes(item.mobile)) participantsMobileNumbers.push(item.mobile)
+ }
+
+ // draw function
+ if (participantsMobileNumbers.length > 1000) {
+ // console.log('------------------------- larg number block ran')
+
+ // chunk all participants to n part (Number(winnersCount) part)
+ const partLength = Math.floor(participants.length / winnersCount)
+ const chunckedArrayToParts = []
+
+ for (let i = 0; i < winnersCount; i++) {
+ const chunck = await participants.slice(i * partLength, i * partLength + partLength)
+ await chunckedArrayToParts.push(chunck)
+ }
+
+ for await (const item of chunckedArrayToParts) {
+ await getWinner(item)
+ }
+ } else if (participantsMobileNumbers.length > winnersCount) {
+ // console.log('------------------------- grater than winnersCount block ran')
+
+ const winnersCountArray = []
+ for (let i = 0; i < winnersCount; i++) {
+ winnersCountArray.push(i)
+ }
+
+ for await (const item of winnersCountArray) {
+ await getWinner(participants)
+ }
+ } else {
+ // console.log('------------------------- less or equal to winnersCount block ran')
+ for await (const item of participants) {
+ if (!winnersMobileNumbers.includes(item.mobile)) {
+ winnersMobileNumbers.push(item.mobile)
+ winnersArray.push(item)
+ }
+ }
+ }
+
+ // save result to db
+ lottery.winnersList = winnersArray
+ lottery.markModified('winnersList')
+ lottery.expired = true
+ lottery.save()
+
+ // send sms for winners
+ for await (const item of winnersArray) {
+ const msg = [
+ 'تبریک!!!',
+ '\n',
+ item.fullName,
+ ' عزیز شما در قرعه کشی آسان سرویس با کد پیگیری ',
+ item.enrollCode,
+ ' برنده شدید. به زودی از شرکت آسان سرویس با شما تماس گرفته خواهد شد. در صورتی که تا 3 روز کاری با شما تماس گرفته نشد میتوانید از طریق شماره 02167341 داخلی 200 و کد پیگیری خود جهت دریافت جایزه اقدام نماید.',
+ '\n',
+ phrases.thanks,
+ '\n',
+ phrases.signature
+ ]
+
+ SMS([item.mobile], msg.join(''))
+ }
+
+ /// /////////////////////////////////////////////////////// fake data for tests
+
+ // for (let i = 0; i < 4; i++) {
+ // participants.push({
+ // fullName: 'Amir Mohamadi 2',
+ // mobile: '34dfssdkfisjdf34534',
+ // serial: `S-ffasdfdf`,
+ // enrollCode: `CODE-${i}`
+ // })
+ // console.log('--',i)
+ // }
+
+ // lottery.participants = []
+
+ // lottery.markModified('participants')
+ // return lottery.save()
+ } catch (e) {
+ console.log('an error happend in drawLottery job --- error: ', e)
+ }
+ }, hour)
+ },
+ checkUserSurveys() {
+ console.log('✅ --job: check users for surveys is running')
+
+ return setInterval(async () => {
+ try {
+ const surveyCheck = await SurveyCheck.find({ smsSent: false }).populate('user')
+ for await (const item of surveyCheck) {
+ // timeout
+ const timeout = item.timeAdded + day * 7
+
+ // check if passed one week
+ if (Date.now() >= timeout) {
+ const survey = await Survey.findOne({ code: item.code })
+ if (!survey?._id) {
+ const msg = [
+ 'مشتری گرامی',
+ item.user.first_name + ' ' + item.user.last_name,
+ '\n',
+ 'لطفا با شرکت در نظرسنجی خدمات پس از فروش آسان سرویس، میزان رضایت خود از خدمات گارانتی را به ما اعلام کنید و ما را در ارائه خدمات بهتر یاری نمایید. به پاس همراهی شما عزیزان، بین شرکت کنندگان در نظرسنجی ابتدای هرماه به قید قرعه جوایزی اهدا خواهد شد.',
+ '\n',
+ 'لینک شرکت در نظر سنجی:',
+ '\n',
+ `https://asan-service.com/account/survey?code=${item.code}`
+ ]
+ SMS([item.user.mobile_number], msg.join(' '))
+ item.smsSent = true
+ await item.save()
+ }
+ }
+ }
+ } catch (e) {
+ console.log(e)
+ }
+ }, day)
+ }
+}
+
+/// /////// for develop usages
+const permissions = require('./permissions')
+const devTools = {
+ async checkUsersArpaAccounts() {
+ try {
+ const users = await User.find({ scope: ['user'], confirmed: true })
+ let index = 0
+ for await (const user of users) {
+ if (user.scope.includes('user')) {
+ // if (!user.panatech_businessID && !user.panatech_businessCode) {
+ // const panatechID = await saveUserToArpa(user, 'panatech')
+ // user.panatech_businessID = panatechID.businessID
+ // user.panatech_businessCode = panatechID.businessCode
+ // await user.save()
+ // console.log('🚀 ~ file: cronJobs.js ~ panatechID.businessCode', index)
+ // }
+
+ index++
+ }
+ }
+ } catch (e) {
+ console.log('we got error --- ', e)
+ }
+ },
+ async addNewPermissionsToPrivateAdmin() {
+ console.log('addNewPermissionsToPrivateAdmin started')
+
+ try {
+ const users = await User.find({ private: true })
+
+ for await (const user of users) {
+ // console.log('🚀 ~ file: cronJobs.js ~ line 187 ~ forawait ~ user', user)
+ user.permissions = []
+ for await (const permission of permissions) {
+ user.permissions.push(permission.value)
+ // console.log('🚀 ~ file: cronJobs.js ~ line 190 ~ forawait ~ permission', permission.value)
+ }
+ await user.save()
+ }
+ } catch (e) {
+ console.log(e)
+ }
+ },
+ async findDuplicatedUsers() {
+ try {
+ const usersArray = new Set()
+ const duplicatedUsersArray = new Set()
+
+ const users = await User.find({ scope: ['user'] })
+
+ for await (const user of users) {
+ if (!usersArray.has(user.mobile_number)) usersArray.add(user.mobile_number)
+ else duplicatedUsersArray.add(user.mobile_number)
+ }
+ console.log(
+ '🚀 ~ file: cronJobs.js ~ line 220 ~ findDuplicatedUsers ~ duplicatedUsersArray',
+ duplicatedUsersArray
+ )
+ console.log(
+ '🚀 ~ file: cronJobs.js ~ line 220 ~ findDuplicatedUsers ~ duplicatedUsersArray',
+ duplicatedUsersArray.size
+ )
+ } catch (e) {
+ console.log('🚀 ~ file: cronJobs.js ~ line 223 ~ findDuplicatedUsers - catch ~ e', e)
+ }
+ }
+}
+
+module.exports = () => {
+ jobs.checkUserActivation()
+ jobs.drawLottery()
+ jobs.checkIfAnnouncementsExpired()
+ jobs.checkUserSurveys()
+
+ // remember to run it once !!!
+ // devTools.checkUsersArpaAccounts()
+ // devTools.addNewPermissionsToPrivateAdmin()
+ // devTools.findDuplicatedUsers()
+}
diff --git a/server/plugins/iranCities.js b/server/plugins/iranCities.js
new file mode 100644
index 0000000..f635200
--- /dev/null
+++ b/server/plugins/iranCities.js
@@ -0,0 +1,386 @@
+// province cities
+const eastazarbaijan1 = [
+ 'آذرشهر',
+ 'اسکو',
+ 'اهر',
+ 'بستانآباد',
+ 'بناب',
+ 'تبریز',
+ 'جلفا',
+ 'چاراویماق',
+ 'سراب',
+ 'شبستر',
+ 'مراغه'
+]
+const westazarbaijan2 = [
+ 'ارومیه',
+ 'اشنویه',
+ 'بوکان',
+ 'پیرانشهر',
+ 'تکاب',
+ 'چالدران',
+ 'خوی',
+ 'سردشت',
+ 'سلماس',
+ 'شاهیندژ',
+ 'ماکو',
+ 'مهاباد',
+ 'میاندوآب',
+ 'نقده'
+]
+const ardabil3 = ['اردبیل', 'بیلهسوار', 'پارسآباد', 'خلخال', 'کوثر', 'گِرمی', 'مِشگینشهر', 'نَمین', 'نیر']
+const esfahan4 = [
+ 'آران و بیدگل',
+ 'اردستان',
+ 'اصفهان',
+ 'برخوار و میمه',
+ 'تیران و کرون',
+ 'چادگان',
+ 'خمینیشهر',
+ 'خوانسار',
+ 'سمیرم',
+ 'شهرضا',
+ 'سمیرم سفلی',
+ 'فریدن',
+ 'فریدونشهر',
+ 'فلاورجان',
+ 'کاشان',
+ 'گلپایگان',
+ 'لنجان',
+ 'مبارکه',
+ 'نائین',
+ 'نجفآباد',
+ 'نطنز'
+]
+const ilam5 = ['آبدانان', 'ایلام', 'ایوان', 'درهشهر', 'دهلران', 'شیروان و چرداول', 'مهران']
+const booshehr6 = ['بوشهر', 'تنگستان', 'جم', 'دشتستان', 'دشتی', 'دیر', 'دیلم', 'کنگان', 'گناوه']
+const tehran7 = [
+ 'اسلامشهر',
+ 'پاکدشت',
+ 'تهران',
+ 'دماوند',
+ 'رباطکریم',
+ 'ری',
+ 'ساوجبلاغ',
+ 'شمیرانات',
+ 'شهریار',
+ 'فیروزکوه',
+ 'ورامین'
+]
+const chaharmahalobakhtiari8 = ['اردل', 'بروجن', 'شهرکرد', 'فارسان', 'کوهرنگ', 'لردگان']
+const khorasanjonoobi9 = ['بیرجند', 'درمیان', 'سرایان', 'سربیشه', 'فردوس', 'قائنات', 'نهبندان']
+const khorasanrazavi10 = [
+ 'بردسکن',
+ 'تایباد',
+ 'تربت جام',
+ 'تربت حیدریه',
+ 'چناران',
+ 'خلیلآباد',
+ 'خواف',
+ 'درگز',
+ 'رشتخوار',
+ 'سبزوار',
+ 'سرخس',
+ 'فریمان',
+ 'قوچان',
+ 'کاشمر',
+ 'کلات',
+ 'گناباد',
+ 'مشهد',
+ 'مه ولات',
+ 'نیشابور'
+]
+const khorasanshomali11 = ['اسفراین', 'بجنورد', 'جاجرم', 'شیروان', 'فاروج', 'مانه و سملقان']
+const khoozestan12 = [
+ 'آبادان',
+ 'امیدیه',
+ 'اندیمشک',
+ 'اهواز',
+ 'ایذه',
+ 'باغملک',
+ 'بندر ماهشهر',
+ 'بهبهان',
+ 'خرمشهر',
+ 'دزفول',
+ 'دشت آزادگان',
+ 'رامشیر',
+ 'رامهرمز',
+ 'شادگان',
+ 'شوش',
+ 'شوشتر'
+]
+const zanjan13 = ['ابهر', 'ایجرود', 'خدابنده', 'خرمدره', 'زنجان', 'طارم', 'ماهنشان']
+const semnan14 = ['دامغان', 'سمنان', 'شاهرود', 'گرمسار', 'مهدیشهر']
+const sistanobaloochestan15 = [
+ 'ایرانشهر',
+ 'چابهار',
+ 'خاش',
+ 'دلگان',
+ 'زابل',
+ 'زاهدان',
+ 'زهک',
+ 'سراوان',
+ 'سرباز',
+ 'کنارک',
+ 'نیکشهر'
+]
+const fars16 = [
+ 'آباده',
+ 'ارسنجان',
+ 'استهبان',
+ 'اقلید',
+ 'بوانات',
+ 'پاسارگاد',
+ 'جهرم',
+ 'خرمبید',
+ 'خنج',
+ 'داراب',
+ 'زریندشت',
+ 'سپیدان',
+ 'شیراز',
+ 'فراشبند',
+ 'فسا',
+ 'فیروزآباد',
+ 'قیر و کارزین',
+ 'کازرون',
+ 'لارستان',
+ 'لامِرد',
+ 'مرودشت',
+ 'ممسنی',
+ 'مهر',
+ 'نیریز'
+]
+const qazvin17 = ['آبیک', 'البرز', 'بوئینزهرا', 'تاکستان', 'قزوین']
+const qom18 = ['قم']
+const kordestan19 = ['بانه', 'بیجار', 'دیواندره', 'سروآباد', 'سقز', 'سنندج', 'قروه', 'کامیاران', 'مریوان']
+const kerman20 = [
+ 'بافت',
+ 'بردسیر',
+ 'بم',
+ 'جیرفت',
+ 'راور',
+ 'رفسنجان',
+ 'رودبار جنوب',
+ 'زرند',
+ 'سیرجان',
+ 'شهر بابک',
+ 'عنبرآباد',
+ 'قلعه گنج',
+ 'کرمان',
+ 'کوهبنان',
+ 'کهنوج',
+ 'منوجان'
+]
+const kermanshah21 = [
+ 'اسلامآباد غرب',
+ 'پاوه',
+ 'ثلاث باباجانی',
+ 'جوانرود',
+ 'دالاهو',
+ 'روانسر',
+ 'سرپل ذهاب',
+ 'سنقر',
+ 'صحنه',
+ 'قصر شیرین',
+ 'کرمانشاه',
+ 'کنگاور',
+ 'گیلان غرب',
+ 'هرسین'
+]
+const kohkilooyevaboyrahmad22 = ['بویراحمد', 'بهمئی', 'دنا', 'کهگیلویه', 'گچساران']
+const golestan23 = [
+ 'آزادشهر',
+ 'آققلا',
+ 'بندر گز',
+ 'ترکمن',
+ 'رامیان',
+ 'علیآباد',
+ 'کردکوی',
+ 'کلاله',
+ 'گرگان',
+ 'گنبد کاووس',
+ 'مراوهتپه',
+ 'مینودشت'
+]
+const gilan24 = [
+ 'آستارا',
+ 'آستانه اشرفیه',
+ 'اَملَش',
+ 'بندر انزلی',
+ 'رشت',
+ 'رضوانشهر',
+ 'رودبار',
+ 'رودسر',
+ 'سیاهکل',
+ 'شَفت',
+ 'صومعهسرا',
+ 'طوالش',
+ 'فومَن',
+ 'لاهیجان',
+ 'لنگرود',
+ 'ماسال'
+]
+const lorestan25 = ['ازنا', 'الیگودرز', 'بروجرد', 'پلدختر', 'خرمآباد', 'دورود', 'دلفان', 'سلسله ,کوهدشت']
+const mazandaran26 = [
+ 'آمل',
+ 'بابل',
+ 'بابلسر',
+ 'بهشهر',
+ 'تنکابن',
+ 'جویبار',
+ 'چالوس',
+ 'رامسر',
+ 'ساری',
+ 'سوادکوه',
+ 'قائمشهر',
+ 'گلوگاه',
+ 'محمودآباد',
+ 'نکا',
+ 'نور',
+ 'نوشهر'
+]
+const markazi27 = ['آشتیان', 'اراک', 'تفرش', 'خمین', 'دلیجان', 'زرندیه', 'ساوه', 'شازند', 'کمیجان', 'محلات']
+const hormozgan28 = [
+ 'ابوموسی',
+ 'بستک',
+ 'بندر عباس',
+ 'بندر لنگه',
+ 'جاسک',
+ 'حاجیآباد',
+ 'شهرستان خمیر',
+ 'رودان',
+ 'قشم',
+ 'گاوبندی',
+ 'میناب'
+]
+const hamedan29 = ['اسدآباد', 'بهار', 'تویسرکان', 'رزن', 'کبودرآهنگ', 'ملایر', 'نهاوند', 'همدان']
+const yazd30 = ['ابرکوه', 'اردکان', 'بافق', 'تفت', 'خاتم', 'صدوق', 'طبس', 'مهریز', 'مِیبُد', 'یزد']
+const alborz31 = ['کرج', 'نظرآباد', 'فردیس', 'اشتهارد', 'هشتگرد', 'طالقان']
+
+// provinces list
+module.exports.iranCities = [
+ {
+ name: 'آذربایجان شرقی',
+ cities: eastazarbaijan1
+ },
+ {
+ name: 'آذربایجان غربی',
+ cities: westazarbaijan2
+ },
+ {
+ name: 'اردبیل',
+ cities: ardabil3
+ },
+ {
+ name: 'اصفهان',
+ cities: esfahan4
+ },
+ {
+ name: 'ایلام',
+ cities: ilam5
+ },
+ {
+ name: 'بوشهر',
+ cities: booshehr6
+ },
+ {
+ name: 'تهران',
+ cities: tehran7
+ },
+ {
+ name: 'چهارمحال بختیاری',
+ cities: chaharmahalobakhtiari8
+ },
+ {
+ name: 'خراسان جنوبی',
+ cities: khorasanjonoobi9
+ },
+ {
+ name: 'خراسان رضوی',
+ cities: khorasanrazavi10
+ },
+ {
+ name: 'خراسان شمالی',
+ cities: khorasanshomali11
+ },
+ {
+ name: 'خوزستان',
+ cities: khoozestan12
+ },
+ {
+ name: 'زنجان',
+ cities: zanjan13
+ },
+ {
+ name: 'سمنان',
+ cities: semnan14
+ },
+ {
+ name: 'سیستان بلوچستان',
+ cities: sistanobaloochestan15
+ },
+ {
+ name: 'فارس',
+ cities: fars16
+ },
+ {
+ name: 'قزوین',
+ cities: qazvin17
+ },
+ {
+ name: 'قم',
+ cities: qom18
+ },
+ {
+ name: 'کردستان',
+ cities: kordestan19
+ },
+ {
+ name: 'کرمان',
+ cities: kerman20
+ },
+ {
+ name: 'کرمانشاه',
+ cities: kermanshah21
+ },
+ {
+ name: 'کهکیلویه و بویراحمد',
+ cities: kohkilooyevaboyrahmad22
+ },
+ {
+ name: 'گلستان',
+ cities: golestan23
+ },
+ {
+ name: 'گیلان',
+ cities: gilan24
+ },
+ {
+ name: 'لرستان',
+ cities: lorestan25
+ },
+ {
+ name: 'مازندران',
+ cities: mazandaran26
+ },
+ {
+ name: 'مرکزی',
+ cities: markazi27
+ },
+ {
+ name: 'هرمزگان',
+ cities: hormozgan28
+ },
+ {
+ name: 'همدان',
+ cities: hamedan29
+ },
+ {
+ name: 'یزد',
+ cities: yazd30
+ },
+ {
+ name: 'البرز',
+ cities: alborz31
+ }
+]
diff --git a/server/plugins/permissions.js b/server/plugins/permissions.js
new file mode 100644
index 0000000..6523808
--- /dev/null
+++ b/server/plugins/permissions.js
@@ -0,0 +1,106 @@
+module.exports = [
+ {
+ name: 'مدیریت کاربران',
+ value: 'admins'
+ },
+ {
+ name: 'مشاهده پیام های تماس با ما',
+ value: 'contact-us'
+ },
+ {
+ name: 'مدیریت دسته بندی دانلودها',
+ value: 'download-categories'
+ },
+ {
+ name: 'مدیریت دانلودها',
+ value: 'downloads'
+ },
+ {
+ name: 'مدیریت سوالات متداول',
+ value: 'faq'
+ },
+ {
+ name: 'مدیریت آموزش ها',
+ value: 'learning'
+ },
+ {
+ name: 'مدیریت تیکت ها',
+ value: 'tickets'
+ },
+ {
+ name: 'اپلود فایل اکسل (شماره سریال گارانتی)',
+ value: 'serials-exel'
+ },
+ {
+ name: 'مدیریت شرایط گارانتی',
+ value: 'warranty-terms'
+ },
+ {
+ name: 'مدیریت مشتریان',
+ value: 'customers'
+ },
+ {
+ name: 'مدیریت راهنمای ثبت گارانتی',
+ value: 'help'
+ },
+ {
+ name: 'مدیریت اعلانات و اطلاعیه ها',
+ value: 'announcements'
+ },
+ {
+ name: 'ارسال پیامک',
+ value: 'sms'
+ },
+ {
+ name: 'مدیریت ظاهر دکمه قرعه کشی',
+ value: 'lotteryPopUp'
+ },
+ {
+ name: 'مدیریت قرعه کشی',
+ value: 'lottery'
+ },
+ {
+ name: 'مدیریت درخواست های نمایندگی',
+ value: 'representations'
+ },
+ {
+ name: 'مدیریت نمایندگان',
+ value: 'agents'
+ },
+ {
+ name: 'ویرایش اطلاعات نمایندگان',
+ value: 'agentUpdate'
+ },
+ {
+ name: 'مشاهده صندوق ورودی نمایندگان',
+ value: 'agentsInbox'
+ },
+ {
+ name: 'مدیریت قطعات',
+ value: 'pieces'
+ },
+ {
+ name: 'مدیریت درخواست قطعه',
+ value: 'piece-requests'
+ },
+ {
+ name: 'مدیریت درخواست کالای بافر',
+ value: 'buffer-requests'
+ },
+ {
+ name: 'مدیریت درخواست قطعه داغی',
+ value: 'op-requests'
+ },
+ {
+ name: 'مشاهده فرم عملکرد گارانتی نمایندگان',
+ value: 'guarantee-reports'
+ },
+ {
+ name: 'گزارشات',
+ value: 'agentReports'
+ },
+ {
+ name: 'نظر سنجی',
+ value: 'surveys'
+ }
+]
diff --git a/server/plugins/serverResponses.js b/server/plugins/serverResponses.js
new file mode 100644
index 0000000..8900a12
--- /dev/null
+++ b/server/plugins/serverResponses.js
@@ -0,0 +1,744 @@
+module.exports._sr = {
+ fa: {
+ required: {
+ token: 'توکن را وارد کنید',
+ field: 'این فیلد نباید خالی باشد',
+ // developer validations
+ remember_me: 'پارامتر remember_me الزامی است',
+ // registration validations
+ name: 'نام را وارد کنید',
+ first_name: 'نام را وارد کنید',
+ last_name: 'نام خانوادگی را وارد کنید',
+ email: 'ایمیل را وارد کنید',
+ national_code: 'کد ملی الزامی است',
+ email_personal: 'ایمیل شخصی الزامی است',
+ email_company: 'ایمیل کمپانی برای اشخاص حقوقی الزامی است',
+ company_name: 'درصورتی که شخص حقوقی هستید، نام کمپانی را وارد کنید',
+ username: 'نام کاربری را وارد کنید',
+ phone_number: 'شماره تماس را وارد کنید',
+ password: 'پسورد را وارد کنید',
+ birthdate: 'تاریخ تولد را وارد کنید',
+ // addressing validations
+ country: 'کشور را وارد کنید',
+ province: 'استان را وارد کنید',
+ city: 'شهر را وارد کنید',
+ address: 'آدرس را وارد کنید',
+ postal_code: 'کد پستی را وارد کنید',
+ plaque: 'پلاک را وارد کنید',
+ receiver_first_name: 'نام گیرنده را وارد کنید',
+ receiver_last_name: 'نام خانوادگی گیرنده را وارد کنید',
+ receiver_mobile: 'شماره موبایل گیرنده را وارد کنید',
+ // global (post - gallery - ...)
+ title: 'عنوان را وارد کنید',
+ caption: 'متن را وارد کنید',
+ description: 'توضیحات را وارد کنید',
+ category: 'دسته بندی را انتخاب کنید',
+ image: 'عکس اجباری است',
+ cover: 'کاور اجباری است',
+ file: 'فایل اجباری است',
+ message: 'پیام را بنویسید',
+ quantity: 'تعداد را وارد کنید',
+ date: 'تاریخ را وارد کنید',
+ reason: 'دلیل را انتخاب کنید',
+ question: 'سوال را بنویسید',
+ answer: 'جواب را بنویسید',
+ price: 'قیمت را وارد کنید',
+ type: 'نوع را انتخاب کنید',
+ discount_code: 'کد تخفیف را وارد کنید',
+ discount_amount: 'مقدار تخفیف را وارد کنید',
+ discount_expire_date: 'تاریخ انقضای کد تخفیف را مشخص کنید',
+ user_id: 'کاربر را انتخاب کنید',
+ video: 'ویدیو اجباری است'
+ },
+ format: {
+ phone_number: 'فرمت شماره تماس صحیح نیست',
+ email: 'فرمت ایمیل قابل قبول نیست',
+ number: 'مقدار باید از جنس عدد باشد',
+ boolean: 'مقدار باید از جنس Boolean باشد',
+ image: 'فرمت عکس قابل قبول نیست',
+ video: 'فرمت ویدیو قابل قبول نیست',
+ national_code: 'کد ملی صحیح نیست'
+ },
+ min_char: {
+ min2: 'حداقل 2 کاراکتر',
+ min4: 'حداقل 4 کاراکتر',
+ min8: 'حداقل 8 کاراکتر',
+ min10: 'حداقل 10 کاراکتر',
+ min20: 'حداقل 20 کاراکتر',
+ min30: 'حداقل 30 کاراکتر',
+ min40: 'حداقل 40 کاراکتر',
+ min50: 'حداقل 50 کاراکتر',
+ min60: 'حداقل 60 کاراکتر',
+ min100: 'حداقل 100 کاراکتر',
+ min120: 'حداقل 120 کاراکتر',
+ min150: 'حداقل 150 کاراکتر',
+ min200: 'حداقل 200 کاراکتر',
+ data_size: 'حجم قابل قبول حداقل: ',
+ image_width_size: 'عرض حداقل: ',
+ image_height_size: 'ارتفاع حداقل: '
+ },
+ max_char: {
+ max4: 'حداکثر 4 کاراکتر',
+ max8: 'حداکثر 8 کاراکتر',
+ max10: 'حداکثر 10 کاراکتر',
+ max15: 'حداکثر 15 کاراکتر',
+ max20: 'حداکثر 20 کاراکتر',
+ max30: 'حداکثر 30 کاراکتر',
+ max40: 'حداکثر 40 کاراکتر',
+ max50: 'حداکثر 50 کاراکتر',
+ max60: 'حداکثر 60 کاراکتر',
+ max100: 'حداکثر 100 کاراکتر',
+ max120: 'حداکثر 120 کاراکتر',
+ max150: 'حداکثر 150 کاراکتر',
+ max200: 'حداکثر 200 کاراکتر',
+ data_size: 'حجم قابل قبول حداکثر: ',
+ image_width_size: 'عرض حداکثر: ',
+ image_height_size: 'ارتفاع حداکثر: '
+ },
+ not_found: {
+ user_id: 'کاربری با این مشخصات وجود ندارد',
+ admin_id: 'ادمینی با این مشخصات وجود ندارد',
+ order_id: 'سفارشی با این مشخصات وجود ندارد',
+ item_id: 'موردی با این مشخصات وجود ندارد',
+ password: 'رمز عبور یا آیدی درست نیست'
+ },
+ duplicated: {
+ username: 'این نام کاربری از قبل وجود دارد',
+ email: 'این ایمیل از قبل وجود دارد',
+ name: 'نام تکراری است',
+ title: 'عنوان تکراری است',
+ phone_number: 'این شماره تماس از قبل وجود دارد'
+ },
+ response: {
+ logged_in: 'شما وارد سیستم شدید',
+ not_logged_in: 'شما وارد سیستم نشدید',
+ logged_out: 'شما از سیستم خارج شدید',
+ unauthenticated: 'غیرمجاز',
+ recovery_link: 'لینک بازیابی فرستاده شد',
+ success_save: 'با موفقیت ثبت شد',
+ success_remove: 'با موفقیت حذف شد',
+ cart_empty: 'سبد خرید خالی است',
+ already_has_address: 'آدرس قبلا اضافه شده',
+ activation_code: 'کد فعالسازی برای شما ارسال شد',
+ activation_email: 'ایمیل فعال سازی برای شما ارسال شد',
+ expired_reset_link: 'این لینک بازیابی منقضی شده است',
+ email_not_confirmed: 'ابتدا ایمیل خود را تایید کنید،لینک فعال سازی قبلا برای شما فرستاده شده است.',
+ expired_activation_link: 'این لینک فعال سازی منقضی شده است',
+ success_activation: 'اکانت شما با موفقیت فعال شد',
+ passwords_not_match: 'پسورد ها یکی نیست',
+ problem: 'مشکلی پیش آمده، لطفا دوباره تلاش کنید.',
+ latinChar: 'لطفا با حروف لاتین بنویسید',
+ persianChar: 'لطفا با حروف فارسی بنویسید',
+ whiteSpace: 'بین حروف و کلمات نباید فاصله باشد'
+ },
+ file_types: {
+ jpg: 'فقط فرمت jpg قابل قبول است',
+ png: 'فقط فرمت png قابل قبول است',
+ gif: 'فقط فرمت gif قابل قبول است',
+ pdf: 'فقط فرمت pdf قابل قبول است',
+ txt: 'فقط فرمت txt قابل قبول است',
+ log: 'فقط فرمت log قابل قبول است',
+ mp3: 'فقط فرمت mp3 قابل قبول است',
+ ogg: 'فقط فرمت ogg قابل قبول است',
+ wmv: 'فقط فرمت wmv قابل قبول است',
+ mp4: 'فقط فرمت mp4 قابل قبول است',
+ mov: 'فقط فرمت mov قابل قبول است',
+ mkv: 'فقط فرمت mkv قابل قبول است',
+ flv: 'فقط فرمت flv قابل قبول است'
+ }
+ },
+ en: {
+ required: {
+ token: 'Token is required',
+ field: 'This field is required',
+ // developer validations
+ remember_me: 'Remember_me parameter required',
+ // registration validations
+ name: 'Enter name',
+ first_name: 'Enter first name',
+ last_name: 'Enter last name',
+ national_code: 'National code is required',
+ email: 'Enter email',
+ email_personal: 'Personal email is required',
+ email_company: 'Company email is required for legal entities',
+ company_name: 'Enter company name if you are a legal entity',
+ username: 'Enter username',
+ phone_number: 'Enter phone number',
+ password: 'Enter password',
+ birthdate: 'Enter birthdate',
+ // addressing validations
+ country: 'Enter country',
+ province: 'Enter province',
+ city: 'Enter city',
+ address: 'Enter address',
+ postal_code: 'Enter postal code',
+ plaque: 'Enter plaque',
+ receiver_first_name: 'Enter recipient name',
+ receiver_last_name: 'Enter recipient surname',
+ receiver_mobile: "Enter recipient's mobile number",
+ // global (post - gallery - ...)
+ title: 'Enter title',
+ caption: 'Enter caption',
+ description: 'Enter description',
+ category: 'Select category',
+ image: 'Image is required',
+ cover: 'Cover is required',
+ file: 'File is required',
+ message: 'Write message',
+ quantity: 'Enter quantity',
+ date: 'Enter date',
+ reason: 'Select reason',
+ question: 'Write the question',
+ answer: 'Write the answer',
+ price: 'Enter Price',
+ type: 'Select type',
+ discount_code: 'Enter discount code',
+ discount_amount: 'Enter discount amount',
+ discount_expire_date: 'Specify discount code expiration date',
+ user_id: 'Select user',
+ video: 'Video is required'
+ },
+ format: {
+ phone_number: 'Phone number format in incorrect',
+ email: 'Email format is not correct',
+ number: 'Value must be number',
+ boolean: 'Value must be Boolean',
+ image: 'Photo format is not acceptable',
+ video: 'Video format is not acceptable',
+ national_code: 'National code format is not correct'
+ },
+ min_char: {
+ min2: 'At least 2 characters',
+ min4: 'At least 4 characters',
+ min8: 'At least 8 characters',
+ min10: 'At least 10 characters',
+ min20: 'At least 20 characters',
+ min30: 'At least 30 characters',
+ min40: 'At least 40 characters',
+ min50: 'At least 50 characters',
+ min60: 'At least 60 characters',
+ min100: 'At least 100 characters',
+ min120: 'At least 120 characters',
+ min150: 'At least 150 characters',
+ min200: 'At least 200 characters',
+ data_size: 'Acceptable minimum size: ',
+ image_width_size: 'Minimum width: ',
+ image_height_size: 'Minimum height: '
+ },
+ max_char: {
+ max4: 'Maximum 4 characters',
+ max8: 'Maximum 8 characters',
+ max10: 'Maximum 10 characters',
+ max15: 'Maximum 15 characters',
+ max20: 'Maximum 20 characters',
+ max30: 'Maximum 30 characters',
+ max40: 'Maximum 40 characters',
+ max50: 'Maximum 50 characters',
+ max60: 'Maximum 60 characters',
+ max100: 'Maximum 100 characters',
+ max120: 'Maximum 120 characters',
+ max150: 'Maximum 150 characters',
+ max200: 'Maximum 200 characters',
+ data_size: 'Maximum acceptable size: ',
+ image_width_size: 'Maximum width: ',
+ image_height_size: 'Maximum height: '
+ },
+ not_found: {
+ user_id: 'There is no user with this profile',
+ admin_id: 'There is no admin with this profile',
+ order_id: 'There is no order with this profile',
+ item_id: 'There is no item with this specification',
+ password: 'Password or ID is incorrect'
+ },
+ duplicated: {
+ username: 'This username already exists',
+ email: 'This email already exists',
+ name: 'Name already exists',
+ title: 'Title already exists',
+ phone_number: 'Phone number already exists'
+ },
+ response: {
+ logged_in: 'You are logged in',
+ not_logged_in: 'You are not logged in',
+ logged_out: 'You are logged out',
+ unauthenticated: 'unauthenticated',
+ recovery_link: 'Recovery link sent',
+ success_save: 'Successfully saved',
+ success_remove: 'Successfully removed',
+ cart_empty: 'Cart is empty',
+ already_has_address: 'Already has address',
+ activation_code: 'Activation code sent to you',
+ activation_email: 'Activation email sent to you',
+ expired_reset_link: 'The current reset pass link has been expired',
+ email_not_confirmed: 'Confirm your email first, the activation link has already been sent to you.',
+ expired_activation_link: 'This activation link has expired',
+ success_activation: 'Your account has been successfully activated',
+ passwords_not_match: 'Passwords are not the same',
+ problem: 'There is a problem, please try again.',
+ latinChar: 'Please write in Latin letters',
+ persianChar: 'Please write in Persian letters',
+ whiteSpace: 'There should be no space between letters and words'
+ },
+ file_types: {
+ jpg: 'Only jpg format is acceptable',
+ png: 'Only png format is acceptable',
+ gif: 'Only gif format is acceptable',
+ pdf: 'Only pdf format is acceptable',
+ txt: 'Only txt format is acceptable',
+ log: 'Only log format is acceptable',
+ mp3: 'Only mp3 format is acceptable',
+ ogg: 'Only ogg format is acceptable',
+ wmv: 'Only wmv format is acceptable',
+ mp4: 'Only mp4 format is acceptable',
+ mov: 'Only mov format is acceptable',
+ mkv: 'Only mkv format is acceptable',
+ flv: 'Only flv format is acceptable'
+ }
+ },
+ de: {
+ required: {
+ token: 'Token is required',
+ field: 'This field is required',
+ // developer validations
+ remember_me: 'Remember_me-Parameter erforderlich',
+ // registration validations
+ name: 'Name eingeben',
+ first_name: 'Name eingeben',
+ last_name: 'Nachnamen eingeben',
+ national_code: 'Nationaler Code ist erforderlich',
+ email: 'Email eingeben',
+ email_personal: 'Persönliche E-Mail ist erforderlich',
+ email_company: 'Für juristische Personen ist eine Unternehmens-E-Mail erforderlich',
+ company_name: 'Geben Sie den Firmennamen ein, wenn Sie eine juristische Person sind',
+ username: 'Geben Sie den Benutzernamen ein',
+ phone_number: 'Telefonnummer eingeben',
+ password: 'Passwort eingeben',
+ birthdate: 'Enter birthdate',
+ // addressing validations
+ country: 'Land eingeben',
+ province: 'Stadt betreten',
+ city: 'Stadt betreten',
+ address: 'Adresse eingeben',
+ postal_code: 'Postleitzahl eingeben',
+ plaque: 'Plakette eingeben',
+ receiver_first_name: 'Empfängername eingeben',
+ receiver_last_name: 'Nachname des Empfängers eingeben',
+ receiver_mobile: 'Handynummer des Empfängers eingebenr',
+ // global (post - gallery - ...)
+ title: 'Titel eingeben',
+ caption: 'Beschriftung eingeben',
+ description: 'Beschreibung eingeben',
+ category: 'Kategorie wählen',
+ image: 'Bild ist erforderlich',
+ cover: 'Bild ist erforderlich Abdeckung ist erforderlich',
+ file: 'Datei ist erforderlich',
+ message: 'Nachricht schreiben',
+ quantity: 'Menge eingeben',
+ date: 'Enter date',
+ reason: 'Grund auswählen',
+ question: 'Schreibe die Frage',
+ answer: 'Schreibe die Antwort',
+ price: 'Enter Price',
+ type: 'Select type',
+ discount_code: 'Enter discount code',
+ discount_amount: 'Enter discount amount',
+ discount_expire_date: 'Specify discount code expiration date',
+ user_id: 'Select user',
+ video: 'Video is required'
+ },
+ format: {
+ phone_number: 'Telefonnummernformat falsch',
+ email: 'E-Mail-Format nicht korrekt',
+ number: 'Wert muss Nummer sein',
+ boolean: 'Wert muss Boolescher Wert sein',
+ image: 'Photo format is not acceptable',
+ video: 'Video format is not acceptable',
+ national_code: 'Nationales Codeformat ist nicht korrekt'
+ },
+ min_char: {
+ min2: 'Mindestens 2 Zeichen',
+ min4: 'Mindestens 4 Zeichen',
+ min8: 'Mindestens 8 Zeichen',
+ min10: 'Mindestens 10 Zeichen',
+ min20: 'Mindestens 20 Zeichen',
+ min30: 'Mindestens 30 Zeichen',
+ min40: 'Mindestens 40 Zeichen',
+ min50: 'Mindestens 50 Zeichen',
+ min60: 'Mindestens 60 Zeichen',
+ min100: 'Mindestens 100 Zeichen',
+ min120: 'Mindestens 120 Zeichen',
+ min150: 'Mindestens 150 Zeichen',
+ min200: 'Mindestens 200 Zeichen',
+ data_size: 'Akzeptable Mindestgröße: ',
+ image_width_size: 'Mindestbreite: ',
+ image_height_size: 'Mindesthöhe: '
+ },
+ max_char: {
+ max4: 'Maximal 4 Zeichen',
+ max8: 'Maximal 8 Zeichen',
+ max10: 'Maximal 10 Zeichen',
+ max15: 'Maximal 15 Zeichen',
+ max20: 'Maximal 20 Zeichen',
+ max30: 'Maximal 30 Zeichen',
+ max40: 'Maximal 40 Zeichen',
+ max50: 'Maximal 50 Zeichen',
+ max60: 'Maximal 60 Zeichen',
+ max100: 'Maximal 100 Zeichen',
+ max120: 'Maximal 120 Zeichen',
+ max150: 'Maximal 150 Zeichen',
+ max200: 'Maximal 200 Zeichen',
+ data_size: 'Maximal zulässige Größe: ',
+ image_width_size: 'Maximale Breite: ',
+ image_height_size: 'Maximale Höhe: '
+ },
+ not_found: {
+ user_id: 'Es gibt keinen Benutzer mit diesem Profil',
+ admin_id: 'Es gibt keinen Administrator mit diesem Profil',
+ order_id: 'Es gibt keine Bestellung mit diesem Profil',
+ item_id: 'Es gibt keinen Artikel mit dieser Spezifikation',
+ password: 'Passwort oder ID ist falsch'
+ },
+ duplicated: {
+ username: 'Dieser Benutzername existiert bereits',
+ email: 'Diese E-Mail existiert bereits',
+ name: 'Name ist doppelt',
+ title: 'Titel ist doppelt',
+ phone_number: 'Phone number already exists'
+ },
+ response: {
+ logged_in: 'Sie sind angemeldet',
+ not_logged_in: 'Sie sind nicht angemeldet',
+ logged_out: 'Sie sind abgemeldet',
+ unauthenticated: 'nicht authentifiziert',
+ recovery_link: 'Wiederherstellungslink gesendet',
+ success_save: 'Erfolgreich gespeichert',
+ success_remove: 'Erfolgreich entfernt',
+ cart_empty: 'Warenkorb ist leer',
+ ready_has_address: 'Hat bereits Adresse',
+ activation_code: 'Activation code sent to you',
+ activation_email: 'Activation email sent to you',
+ expired_reset_link: 'Der aktuelle Reset-Pass-Link ist abgelaufen',
+ email_not_confirmed: 'Bestätigen Sie zuerst Ihre E-Mail, der Aktivierungslink wurde bereits an Sie gesendet.',
+ expired_activation_link: 'Dieser Aktivierungslink ist abgelaufen',
+ success_activation: 'Ihr Konto wurde erfolgreich aktiviert',
+ passwords_not_match: 'Passwörter sind nicht dasselbe',
+ problem: 'Es gibt ein Problem, bitte versuchen Sie es erneut.',
+ latinChar: 'Please write in Latin letters',
+ persianChar: 'Please write in Persian letters',
+ whiteSpace: 'There should be no space between letters and words'
+ },
+ file_types: {
+ jpg: 'Nur das jpg-Format ist akzeptabel',
+ png: 'Nur das png-Format ist akzeptabel',
+ gif: 'Nur das gif-Format ist akzeptabel',
+ pdf: 'Nur das PDF-Format ist akzeptabel',
+ txt: 'Nur das txt-Format ist akzeptabel',
+ log: 'Nur das log-Format ist akzeptabel',
+ mp3: 'Nur das mp3-Format ist akzeptabel',
+ ogg: 'Nur das ogg-Format ist akzeptabel',
+ wmv: 'Nur das wmv-Format ist akzeptabel',
+ mp4: 'Nur das mp4-Format ist akzeptabel',
+ mov: 'Nur das mov-Format ist akzeptabel',
+ mkv: 'Nur das mkv-Format ist akzeptabel',
+ flv: 'Nur das flv-Format ist akzeptabel'
+ }
+ },
+ tr: {
+ required: {
+ token: 'Token is required',
+ field: 'This field is required',
+ // geliştirici doğrulamaları
+ Remember_me: 'Remember_me parametresi gerekli',
+ // kayıt doğrulamaları
+ name: 'Adı girin',
+ first_name: 'Adı girin',
+ last_name: 'Soyadı girin',
+ national_code: 'Nationaler Kodu erforderlich',
+ email: 'E-posta girin',
+ email_personal: 'Kişisel e-posta gereklidir',
+ email_company: 'Tüzel kişiler için şirket e-postası gereklidir',
+ company_name: 'Tüzel kişiyseniz şirket adını girin',
+ username: 'Kullanıcı adını girin',
+ phone_number: 'Telefon numarasını girin',
+ password: 'Şifre girin',
+ birthdate: 'Enter birthdate',
+ // doğrulamaları adresleme
+ country: 'Ülke girin',
+ province: 'İl girin',
+ city: 'Şehir girin',
+ address: 'Adres girin',
+ postal_code: 'Posta kodunu girin',
+ plaque: 'Plak girin',
+ receiver_first_name: 'Alıcı adını girin',
+ receiver_last_name: 'Alıcının soyadını girin',
+ receiver_mobile: 'Alıcının cep telefonu numarasını girin',
+ // global (post - galeri - ...)
+ title: 'Başlığı girin',
+ caption: 'Başlık girin',
+ description: 'Açıklama girin',
+ category: 'Kategori seçin',
+ image: 'Resim gerekli',
+ cover: 'Kapak gereklidir',
+ file: 'Dosya gerekli',
+ message: 'Mesaj yaz',
+ quantity: 'Miktar girin',
+ date: 'Enter date',
+ reason: 'Nedeni seçin',
+ question: 'Soruyu yazın',
+ answer: 'Cevabı yaz',
+ price: 'Enter Price',
+ type: 'Select type',
+ discount_code: 'Enter discount code',
+ discount_amount: 'Enter discount amount',
+ discount_expire_date: 'Specify discount code expiration date',
+ user_id: 'Select user',
+ video: 'Video is required'
+ },
+ format: {
+ phone_number: 'Telefon numarası biçimi yanlış',
+ email: 'E-posta formatı doğru değil',
+ number: 'Değer sayı olmalıdır',
+ boolean: 'Değer Boole olmalıdır',
+ image: 'Photo format is not acceptable',
+ video: 'Video format is not acceptable',
+ national_code: 'Ulusal kod formatı doğru değil'
+ },
+ min_char: {
+ min2: 'En az 2 karakter',
+ min4: 'En az 4 karakter',
+ min8: 'En az 8 karakter',
+ min10: 'En az 10 karakter',
+ min20: 'En az 20 karakter',
+ min30: 'En az 30 karakter',
+ min40: 'En az 40 karakter',
+ min50: 'En az 50 karakter',
+ min60: 'En az 60 karakter',
+ min100: 'En az 100 karakter',
+ min120: 'En az 120 karakter',
+ min150: 'En az 150 karakter',
+ min200: 'En az 200 karakter',
+ data_size: 'Kabul edilebilir minimum boyut: ',
+ image_width_size: 'Minimum genişlik: ',
+ image_height_size: 'Minimum yükseklik: '
+ },
+ max_char: {
+ max4: 'Maksimum 4 karakter',
+ max8: 'Maksimum 8 karakter',
+ max10: 'Maksimum 10 karakter',
+ max15: 'Maksimum 15 karakter',
+ max20: 'Maksimum 20 karakter',
+ max30: 'Maksimum 30 karakter',
+ max40: 'Maksimum 40 karakter',
+ max50: 'Maksimum 50 karakter',
+ max60: 'Maksimum 60 karakter',
+ max100: 'Maksimum 100 karakter',
+ max120: 'Maksimum 120 karakter',
+ max150: 'Maksimum 150 karakter',
+ max200: 'Maksimum 200 karakter',
+ data_size: 'Kabul edilebilir maksimum boyut: ',
+ image_width_size: 'Maksimum genişlik: ',
+ image_height_size: 'Maksimum yükseklik: '
+ },
+ not_found: {
+ user_id: 'Bu profile sahip kullanıcı yok',
+ admin_id: 'Bu profile sahip yönetici yok',
+ order_id: 'Bu profilde sipariş yok',
+ item_id: 'Bu spesifikasyona sahip hiçbir öğe yok',
+ password: 'Şifre veya kimlik yanlış'
+ },
+ duplicated: {
+ username: 'Bu kullanıcı adı zaten mevcut',
+ email: 'Bu email zaten var',
+ name: 'Ad çift',
+ title: 'Başlık yineleniyor',
+ phone_number: 'Phone number already exists'
+ },
+ response: {
+ logged_in: 'Giriş yaptınız',
+ not_logged_in: 'Giriş yapmadınız',
+ logged_out: 'Çıkış yaptınız',
+ unauthenticated: 'unauthenticated',
+ recovery_link: 'Kurtarma bağlantısı gönderildi',
+ success_save: 'Başarıyla kaydedildi',
+ success_remove: 'Başarıyla kaldırıldı',
+ cart_empty: 'Sepet boş',
+ already_has_address: 'Zaten adresi var',
+ activation_code: 'Activation code sent to you',
+ activation_email: 'Activation email sent to you',
+ expired_reset_link: 'Mevcut sıfırlama geçiş bağlantısının süresi doldu',
+ email_not_confirmed: 'Önce e-postanızı onaylayın, aktivasyon bağlantısı size zaten gönderildi.',
+ expired_activation_link: 'Bu aktivasyon bağlantısının süresi doldu',
+ success_activation: 'Hesabınız başarıyla etkinleştirildi',
+ passwords_not_match: 'Şifreler aynı değil',
+ problem: 'Bir sorun var, lütfen tekrar deneyin.',
+ latinChar: 'Please write in Latin letters',
+ persianChar: 'Please write in Persian letters',
+ whiteSpace: 'There should be no space between letters and words'
+ },
+ file_types: {
+ jpg: 'Yalnızca jpg formatı kabul edilebilir',
+ png: 'Sadece png formatı kabul edilebilir',
+ gif: 'Yalnızca gif formatı kabul edilebilir',
+ pdf: 'Yalnızca pdf formatı kabul edilebilir',
+ txt: 'Yalnızca txt formatı kabul edilebilir',
+ log: 'Yalnızca log formatı kabul edilebilir',
+ mp3: 'Yalnızca mp3 formatı kabul edilebilir',
+ ogg: 'Yalnızca ogg formatı kabul edilebilir',
+ wmv: 'Yalnızca wmv formatı kabul edilebilir',
+ mp4: 'Yalnızca mp4 formatı kabul edilebilir',
+ mov: 'Yalnızca mov formatı kabul edilebilir',
+ mkv: 'Yalnızca mkv formatı kabul edilebilir',
+ flv: 'Yalnızca flv biçimi kabul edilebilir'
+ }
+ },
+ it: {
+ required: {
+ token: 'Token is required',
+ field: 'This field is required',
+ // convalide dello sviluppatore
+ Remember_me: 'Remember_me parameter required',
+ // convalide della registrazione
+ name: 'Inserisci nome',
+ first_name: 'Inserisci nome',
+ last_name: 'Inserisci il cognome',
+ national_code: 'Il codice Nationaler è comune',
+ email: 'Enter email',
+ email_personal: "L'email personale è obbligatoria",
+ email_company: "L'email aziendale è obbligatoria per le persone giuridiche",
+ company_name: "Inserisci il nome dell'azienda se sei una persona giuridica",
+ username: 'Inserisci nome utente',
+ phone_number: 'Inserisci numero di telefono',
+ password: 'Inserisci password',
+ birthdate: 'Enter birthdate',
+ // indirizzamento delle convalide
+ country: 'Inserisci paese',
+ province: 'Inserisci provincia',
+ city: 'Inserisci città',
+ address: 'Inserisci indirizzo',
+ postal_code: 'Inserisci codice postale',
+ plaque: 'Inserisci targa',
+ receiver_first_name: 'Inserisci il nome del destinatario',
+ receiver_last_name: 'Inserisci il cognome del destinatario',
+ receiver_mobile: 'Inserisci il numero di cellulare del destinatario',
+ // globale (post - gallery - ...)
+ title: 'Inserisci titolo',
+ caption: 'Inserisci didascalia',
+ description: 'Inserisci descrizione',
+ category: 'Seleziona categoria',
+ image: "L'immagine è obbligatoria",
+ cover: 'Cover is required',
+ file: 'Il file è obbligatorio',
+ message: 'Scrivi messaggio',
+ quantity: 'Inserisci quantità',
+ date: 'Enter date',
+ reason: 'Seleziona motivo',
+ question: 'Scrivi la domanda',
+ answer: 'Scrivi la risposta',
+ price: 'Enter Price',
+ type: 'Select type',
+ discount_code: 'Enter discount code',
+ discount_amount: 'Enter discount amount',
+ discount_expire_date: 'Specify discount code expiration date',
+ user_id: 'Select user',
+ video: 'Video is required'
+ },
+ format: {
+ phone_number: 'Formato del numero di telefono non corretto',
+ email: 'Formato email non corretto',
+ number: 'Il valore deve essere un numero',
+ boolean: 'Il valore deve essere booleano',
+ image: 'Photo format is not acceptable',
+ video: 'Video format is not acceptable',
+ national_code: 'Il formato del codice nazionale non è corretto'
+ },
+ min_char: {
+ min2: 'Almeno 2 caratteri',
+ min4: 'Almeno 4 caratteri',
+ min8: 'Almeno 8 caratteri',
+ min10: 'Almeno 10 caratteri',
+ min20: 'Almeno 20 caratteri',
+ min30: 'Almeno 30 caratteri',
+ min40: 'Almeno 40 caratteri',
+ min50: 'Almeno 50 caratteri',
+ min60: 'Almeno 60 caratteri',
+ min100: 'Almeno 100 caratteri',
+ min120: 'Almeno 120 caratteri',
+ min150: 'Almeno 150 caratteri',
+ min200: 'Almeno 200 caratteri',
+ data_size: 'Dimensione minima accettabile: ',
+ image_width_size: 'Larghezza minima: ',
+ image_height_size: 'Altezza minima: '
+ },
+ max_char: {
+ max4: 'Massimo 4 caratteri',
+ max8: 'Massimo 8 caratteri',
+ max10: 'Massimo 10 caratteri',
+ max15: 'Massimo 15 caratteri',
+ max20: 'Massimo 20 caratteri',
+ max30: 'Massimo 30 caratteri',
+ max40: 'Massimo 40 caratteri',
+ max50: 'Massimo 50 caratteri',
+ max60: 'Massimo 60 caratteri',
+ max100: 'Massimo 100 caratteri',
+ max120: 'Massimo 120 caratteri',
+ max150: 'Massimo 150 caratteri',
+ max200: 'Massimo 200 caratteri',
+ data_size: 'Dimensione massima accettabile: ',
+ image_width_size: 'Larghezza massima: ',
+ image_height_size: 'Altezza massima: '
+ },
+ not_found: {
+ user_id: 'Nessun utente con questo profilo',
+ admin_id: 'Nessun amministratore con questo profilo',
+ order_id: 'Nessun ordine con questo profilo',
+ item_id: 'Nessun articolo con questa specifica',
+ password: "La password o l'ID non sono corretti"
+ },
+ duplicated: {
+ username: 'Questo nome utente esiste già',
+ email: 'Questa email esiste già',
+ name: 'Il nome è duplicato',
+ title: 'Il titolo è duplicato',
+ phone_number: 'Phone number already exists'
+ },
+ response: {
+ logged_in: "Hai effettuato l'accesso",
+ not_logged_in: 'Non sei loggato',
+ logged_out: 'Sei disconnesso',
+ unauthenticated: 'unauthenticated',
+ recovery_link: 'Link di ripristino inviato',
+ success_save: 'Salvataggio riuscito',
+ success_remove: 'Rimosso con successo',
+ cart_empty: 'Il carrello è vuoto',
+ already_has_address: 'Ha già indirizzo',
+ activation_code: 'Activation code sent to you',
+ activation_email: 'Activation email sent to you',
+ expired_reset_link: "L'attuale link del passaggio di reimpostazione è scaduto",
+ email_not_confirmed: 'Conferma prima la tua email, il link di attivazione ti è già stato inviato.',
+ expired_activation_link: 'Questo link di attivazione è scaduto',
+ success_activation: 'Il tuo account è stato attivato con successo',
+ passwords_not_match: 'Le password non sono le stesse',
+ problem: 'Si è verificato un problema, riprova.',
+ latinChar: 'Please write in Latin letters',
+ persianChar: 'Please write in Persian letters',
+ whiteSpace: 'There should be no space between letters and words'
+ },
+ file_types: {
+ jpg: 'È accettabile solo il formato jpg',
+ png: 'È accettabile solo il formato png',
+ gif: 'È accettabile solo il formato GIF',
+ pdf: 'È accettabile solo il formato pdf',
+ txt: 'È accettabile solo il formato txt',
+ log: 'È accettabile solo il formato log',
+ mp3: 'È accettabile solo il formato mp3',
+ ogg: 'È accettabile solo il formato ogg',
+ wmv: 'È accettabile solo il formato wmv',
+ mp4: 'È accettabile solo il formato mp4',
+ mov: 'È accettabile solo il formato mov',
+ mkv: 'È accettabile solo il formato mkv',
+ flv: 'È accettabile solo il formato flv'
+ }
+ },
+ supportedImageFormats: ['jpg', 'jpeg', 'png', 'svg', 'svg+xml', 'webp'],
+ supportedVideoFormats: ['mp4', 'wmv']
+}
diff --git a/server/routes/admin.js b/server/routes/admin.js
new file mode 100644
index 0000000..d75a0d7
--- /dev/null
+++ b/server/routes/admin.js
@@ -0,0 +1,194 @@
+const { Router } = require('express')
+const router = Router()
+/// //////////////////////////////////////////////////////// controllers
+const { hasPermission } = require('../authentication')
+const warrantyTermsController = require('../controllers/warrantyTermsController')
+const contactPageController = require('../controllers/contactPageController')
+const faqController = require('../controllers/faqController')
+const learningController = require('../controllers/learningController')
+const downloadCategoryController = require('../controllers/downloadCategoryController')
+const downloadController = require('../controllers/downloadController')
+const userController = require('../controllers/userController')
+const ticketsController = require('../controllers/ticketsController')
+const serialsExelController = require('../controllers/serialsExelController')
+const helpController = require('../controllers/helpController')
+const announcementController = require('../controllers/announcementController')
+const lotteryPopUpController = require('../controllers/lotteryPopUpController')
+const lotteryController = require('../controllers/lotteryController')
+const representationController = require('../controllers/representationController')
+const pieceController = require('../controllers/pieceController')
+const pieceRequestController = require('../controllers/pieceRequestController')
+const oldPieceRequestController = require('../controllers/oldPieceRequestController')
+const bufferRequestController = require('../controllers/bufferRequestController')
+const guaranteeReportController = require('../controllers/guaranteeReportController')
+const transactionController = require('../controllers/transactionController')
+const smsBroadcastController = require('../controllers/smsBroadcastController')
+const surveyController = require('../controllers/surveyController')
+/// //////////////////////////////////////////////////////// routes
+
+/// ///////////// warranty terms
+router.post('/warranty', hasPermission('warranty-terms'), warrantyTermsController.create)
+router.put('/warranty/:id', hasPermission('warranty-terms'), warrantyTermsController.update)
+router.delete('/warranty/:id', hasPermission('warranty-terms'), warrantyTermsController.delete)
+
+/// ///////////// FAQ
+router.post('/faq', hasPermission('faq'), faqController.create)
+router.put('/faq/:id', hasPermission('faq'), faqController.update)
+router.delete('/faq/:id', hasPermission('faq'), faqController.delete)
+
+/// ///////////// Learning
+router.post('/learning', hasPermission('learning'), learningController.create)
+router.put('/learning/:id', hasPermission('learning'), learningController.update)
+router.delete('/learning/:id', hasPermission('learning'), learningController.delete)
+
+/// ///////////// download category
+router.post('/dCategory', hasPermission('download-categories'), downloadCategoryController.create)
+router.put('/dCategory/:id', hasPermission('download-categories'), downloadCategoryController.update)
+router.delete('/dCategory/:id', hasPermission('download-categories'), downloadCategoryController.delete)
+
+/// ///////////// downloads
+router.post('/downloads', hasPermission('downloads'), downloadController.create)
+router.put('/downloads/:id', hasPermission('downloads'), downloadController.update)
+router.delete('/downloads/:id', hasPermission('downloads'), downloadController.delete)
+
+// files
+router.post('/downloads/file', hasPermission('downloads'), downloadController.addFile)
+router.delete('/downloads/file/:id', hasPermission('downloads'), downloadController.deletFile)
+
+/// ///////////// contact us
+router.get('/contact', hasPermission('contact-us'), contactPageController.getAll)
+router.get('/contact/:id', hasPermission('contact-us'), contactPageController.getOne)
+
+/// ///////////// tickets
+router.post('/addTicket', hasPermission('tickets'), ticketsController.add_ticket)
+router.get('/tickets', hasPermission('tickets'), ticketsController.get_all_tickets_for_admin)
+router.get('/ticket/:id', hasPermission('tickets'), ticketsController.get_one_ticket)
+router.post('/addMessageToTicket/:id', hasPermission('tickets'), ticketsController.add_message_to_ticket)
+router.get('/allUsers', hasPermission('tickets'), userController.get_all_users_for_admin)
+
+/// ///////////// transactions
+// router.get('/transactions', hasPermission('transactions'), userController.get_all_transactions_for_admin)
+// router.get('/transaction/:id', hasPermission('transactions'), userController.get_one_transaction_for_admin)
+
+/// ///////////// manage admins
+router.post('/addAdmin', hasPermission('admins'), userController.register_admin)
+router.put('/updateAdmin/:id', hasPermission('admins'), userController.update_admin)
+router.delete('/deleteAdmin/:id', hasPermission('admins'), userController.delete_admin)
+router.put('/updateAdminPassword', hasPermission('admins'), userController.update_user_password)
+router.get('/admins', hasPermission('admins'), userController.get_admins)
+router.get('/admin/:id', hasPermission('admins'), userController.get_one_admin)
+router.get('/permissions', hasPermission('admins'), userController.permissions)
+
+/// ///////////// manage users
+router.get('/users', hasPermission('customers'), userController.get_all_users_for_admin)
+router.get('/user/:id', hasPermission('customers'), userController.get_one_user_for_admin)
+router.put('/user/changeVerityInfo/:id', hasPermission('customers'), userController.change_verity_info_by_admin)
+router.put('/user/changePanatechInfo/:id', hasPermission('customers'), userController.change_panatech_info_by_admin)
+
+/// ///////////// serials exel file
+router.post('/addExel', hasPermission('serials-exel'), serialsExelController.addExel)
+router.delete('/removeExel/:name', hasPermission('serials-exel'), serialsExelController.removeExel)
+router.get('/serialExels', hasPermission('serials-exel'), serialsExelController.getAllExels)
+
+/// ///////////// update help page
+router.put('/help', hasPermission('help'), helpController.set)
+
+/// ///////////// announcements
+router.post('/announcements', hasPermission('announcements'), announcementController.create)
+router.get('/announcements', hasPermission('announcements'), announcementController.getAllForAdmin)
+router.get('/announcementsUsers', hasPermission('announcements'), userController.get_all_users_for_admin)
+router.get('/announcements/:id', hasPermission('announcements'), announcementController.getOneForAdmin)
+router.delete('/announcements/:id', hasPermission('announcements'), announcementController.deleteAnnouncement)
+// router.put('/announcement/:id', hasPermission('announcements'), announcementController.updateByAdmin)
+
+/// ///////////// lottery
+router.put('/lotteryPopUp', hasPermission('lotteryPopUp'), lotteryPopUpController.modify)
+router.post('/lottery', hasPermission('lottery'), lotteryController.addLottery)
+router.delete('/lottery/:lotteryId', hasPermission('lottery'), lotteryController.deleteLottery)
+router.put('/lottery/:lotteryId', hasPermission('lottery'), lotteryController.updateLottery)
+router.get('/lottery/:lotteryId', hasPermission('lottery'), lotteryController.getOneLottery)
+router.get('/lotteries', hasPermission('lottery'), lotteryController.getAllLotteries)
+
+/// ///////////// representations (agents)
+router.get('/representations', hasPermission('representations'), representationController.getAll)
+router.get('/representation/:id', hasPermission('representations'), representationController.getOne)
+router.put('/representationStatus/:id', hasPermission('representations'), representationController.change_form_status)
+router.post('/addAgentByAdmin', hasPermission('representations'), representationController.add_agent_by_admin)
+
+/// ///////////// pieces
+router.post('/piece', hasPermission('pieces'), pieceController.add_piece)
+router.put('/piece/:id', hasPermission('pieces'), pieceController.update_piece)
+router.delete('/piece/:id', hasPermission('pieces'), pieceController.remove_piece)
+router.get('/pieces', hasPermission('pieces'), pieceController.get_all_pieces)
+router.get('/pieces/:id', hasPermission('pieces'), pieceController.get_one_pieces)
+
+/// ///////////// piece requests
+router.get('/prList', hasPermission('piece-requests'), pieceRequestController.get_all_pr_for_admin)
+router.get('/pr/:id', hasPermission('piece-requests'), pieceRequestController.get_one_pr_for_admin)
+router.put('/prStatus/:id', hasPermission('piece-requests'), pieceRequestController.change_pr_status_by_admin)
+
+/// ///////////// oldPiece requests
+router.get('/oprList', hasPermission('op-requests'), oldPieceRequestController.get_all_opr_for_admin)
+router.get('/opr/:id', hasPermission('op-requests'), oldPieceRequestController.get_one_opr_for_admin)
+router.put('/oprStatus/:id', hasPermission('op-requests'), oldPieceRequestController.change_opr_status_by_admin)
+
+/// ///////////// buffer requests
+router.get('/brList', hasPermission('buffer-requests'), bufferRequestController.get_all_br_for_admin)
+router.get('/br/:id', hasPermission('buffer-requests'), bufferRequestController.get_one_br_for_admin)
+router.put('/brStatus/:id', hasPermission('buffer-requests'), bufferRequestController.change_br_status_by_admin)
+
+/// ///////////// agents guarantee jobs reports
+router.get('/grList', hasPermission('guarantee-reports'), guaranteeReportController.get_all_gr_for_admin)
+router.get('/gr/:id', hasPermission('guarantee-reports'), guaranteeReportController.get_one_gr_for_admin)
+// router.put('/grStatus/:id', hasPermission('guarantee-reports'), guaranteeReportController.change_gr_status_by_admin)
+
+/// ///////////// agent inbox
+router.get('/allAgentsInbox', hasPermission('agentsInbox'), transactionController.get_all_agents_inbox_for_admin)
+router.get('/allAgentsInbox/:id', hasPermission('agentsInbox'), transactionController.get_one_transaction_for_admin)
+
+/// ///////////// one agent details and reports
+router.get('/agentDetails/:id', hasPermission('agents'), representationController.getOne)
+router.get('/agentInbox/:agent_id', hasPermission('agents'), transactionController.get_one_agent_inbox_for_admin)
+router.get('/agentBr/:agent_id', hasPermission('agents'), bufferRequestController.get_oneAgent_br_for_admin)
+router.get('/agentOpr/:agent_id', hasPermission('agents'), oldPieceRequestController.get_oneAgent_opr_for_admin)
+router.get('/agentPr/:agent_id', hasPermission('agents'), pieceRequestController.get_oneAgent_pr_for_admin)
+
+/// ///////////// update agent info
+router.put('/updateAgent/:id', hasPermission('agentUpdate'), representationController.update_representation_by_admin)
+router.post('/revokeAgent/:id', hasPermission('agentUpdate'), representationController.revoke_representation_by_admin)
+router.get('/revokedAgents', representationController.get_revoked_agents_for_admin)
+
+// update files
+router.post(
+ '/representationImages/:userType/:representation_code',
+ representationController.upload_image_to_representation
+)
+router.delete(
+ '/representationImages/:userType/:representation_code/:imgId',
+ representationController.remove_image_from_representation
+)
+
+/// ///////////// all agents report (advance report)
+router.get('/report/pieces', hasPermission('agentReports'), pieceController.get_all_pieces)
+router.get(
+ '/report/allAgentsInbox',
+ hasPermission('agentReports'),
+ transactionController.get_all_agents_inbox_for_admin
+)
+router.get('/report/grList', hasPermission('agentReports'), guaranteeReportController.get_all_gr_for_admin)
+router.get('/report/brList', hasPermission('agentReports'), bufferRequestController.get_all_br_for_admin)
+router.get('/report/prList', hasPermission('agentReports'), pieceRequestController.get_all_pr_for_admin)
+router.get('/report/oprList', hasPermission('agentReports'), oldPieceRequestController.get_all_opr_for_admin)
+
+/// ///////////// broadcast sms for users
+router.post('/broadcastSMS', hasPermission('sms'), smsBroadcastController.broadcast)
+router.get('/smsBroadcasts', hasPermission('sms'), smsBroadcastController.getAllForAdmin)
+router.get('/smsBroadcasts/:id', hasPermission('sms'), smsBroadcastController.getOneForAdmin)
+router.get('/usersForSMS', hasPermission('sms'), userController.get_all_users_for_admin)
+
+
+/// ///////////// survey
+router.get('/surveys', surveyController.getAllForAdmin)
+router.get('/surveys/:id', surveyController.getOneForAdmin)
+
+module.exports = router
diff --git a/server/routes/agent.js b/server/routes/agent.js
new file mode 100644
index 0000000..82711c5
--- /dev/null
+++ b/server/routes/agent.js
@@ -0,0 +1,59 @@
+const { Router } = require('express')
+const router = Router()
+const transactionController = require('../controllers/transactionController')
+const pieceController = require('../controllers/pieceController')
+const pieceRequestController = require('../controllers/pieceRequestController')
+const oldPieceRequestController = require('../controllers/oldPieceRequestController')
+const bufferRequestController = require('../controllers/bufferRequestController')
+
+const guaranteeReportController = require('../controllers/guaranteeReportController')
+
+/// // inbox
+router.get('/inbox', transactionController.get_all_transactions_for_agent)
+router.get('/inbox/:id', transactionController.get_one_transaction_for_agent)
+router.put('/changeTStatus/:id', transactionController.change_transaction_status_by_agent)
+
+/// ///////////// pieces
+router.get('/pieces', pieceController.get_all_pieces)
+
+/// // piece request
+router.post('/pr', pieceRequestController.add_piece_request)
+router.post('/sendPr/:id', pieceRequestController.change_pr_status_to_sent_by_agent)
+router.put('/prDescription/:id', pieceRequestController.update_pr_description)
+router.put('/addPrItems/:prId', pieceRequestController.add_pieces_to_pr)
+router.delete('/removePrItems/:pieceItemId', pieceRequestController.remove_piece_from_pr)
+router.delete('/pr/:id', pieceRequestController.delete_pr)
+router.get('/prList', pieceRequestController.get_all_pr_for_agent)
+router.get('/pr/:id', pieceRequestController.get_one_pr_for_agent)
+
+/// // oldPiece request
+router.post('/opr', oldPieceRequestController.add_oldPiece_request)
+router.post('/sendOpr/:id', oldPieceRequestController.change_opr_status_to_sent_by_agent)
+router.put('/oprDescription/:id', oldPieceRequestController.update_opr_description)
+router.put('/addOprItems/:oprId', oldPieceRequestController.add_oldPieces_to_opr)
+router.delete('/removeOprItems/:oldPieceItemId', oldPieceRequestController.remove_oldPiece_from_opr)
+router.delete('/opr/:id', oldPieceRequestController.delete_opr)
+router.get('/oprList', oldPieceRequestController.get_all_opr_for_agent)
+router.get('/opr/:id', oldPieceRequestController.get_one_opr_for_agent)
+
+/// // buffer request
+router.post('/br', bufferRequestController.add_buffer_request)
+router.post('/sendBr/:id', bufferRequestController.change_br_status_to_sent_by_agent)
+router.put('/brDescription/:id', bufferRequestController.update_br_description)
+router.put('/addBrItems/:brId', bufferRequestController.add_buffer_to_br)
+router.delete('/removeBrItems/:bufferItemId', bufferRequestController.remove_buffer_from_br)
+router.delete('/br/:id', bufferRequestController.delete_br)
+router.get('/brList', bufferRequestController.get_all_br_for_agent)
+router.get('/br/:id', bufferRequestController.get_one_br_for_agent)
+
+/// // guarantee report
+router.post('/gr', guaranteeReportController.add_guaranteeReport)
+router.post('/sendGr/:id', guaranteeReportController.change_gr_status_to_sent_by_agent)
+router.put('/grDescription/:id', guaranteeReportController.update_gr_description)
+router.put('/addGrItems/:grId', guaranteeReportController.add_report_to_gr)
+router.delete('/removeGrItems/:reportItemId', guaranteeReportController.remove_report_from_gr)
+router.delete('/gr/:id', guaranteeReportController.delete_gr)
+router.get('/grList', guaranteeReportController.get_all_gr_for_agent)
+router.get('/gr/:id', guaranteeReportController.get_one_gr_for_agent)
+
+module.exports = router
diff --git a/server/routes/auth.js b/server/routes/auth.js
new file mode 100644
index 0000000..bf7de62
--- /dev/null
+++ b/server/routes/auth.js
@@ -0,0 +1,16 @@
+const { Router } = require('express')
+const router = Router()
+const userController = require('../controllers/userController')
+
+/// /////////////////// admin routes
+// router.post('/register/admin', userController.register_admin)
+router.post('/register/user', userController.register_user)
+// router.post('/activation/:key', userController.activation)
+router.post('/reset-pass-token', userController.generate_reset_user_password_link)
+router.post('/set-new-pass', userController.reset_password_using_token)
+
+router.post('/login', userController.webLogin)
+router.post('/logout', userController.webLogout)
+router.get('/user', userController.getUser)
+
+module.exports = router
diff --git a/server/routes/cross.js b/server/routes/cross.js
new file mode 100644
index 0000000..4c0b7ae
--- /dev/null
+++ b/server/routes/cross.js
@@ -0,0 +1,10 @@
+const { Router } = require('express')
+const router = Router()
+const arpaConnectionController = require('../controllers/arpaConnectionController')
+
+router.post('/getRouteManager', arpaConnectionController.getRouteManager)
+router.post('/postRouteManager', arpaConnectionController.postRouteManager)
+router.post('/putRouteManager', arpaConnectionController.putRouteManager)
+router.post('/deleteRouteManager', arpaConnectionController.deleteRouteManager)
+
+module.exports = router
diff --git a/server/routes/public.js b/server/routes/public.js
new file mode 100644
index 0000000..24f4542
--- /dev/null
+++ b/server/routes/public.js
@@ -0,0 +1,60 @@
+const { Router } = require('express')
+const router = Router()
+
+/// //////////////////////////////////////////////////////// controllers
+const warrantyTermsController = require('../controllers/warrantyTermsController')
+const contactPageController = require('../controllers/contactPageController')
+const faqController = require('../controllers/faqController')
+const learningController = require('../controllers/learningController')
+const downloadCategoryController = require('../controllers/downloadCategoryController')
+const downloadController = require('../controllers/downloadController')
+const iranCitiesController = require('../controllers/iranCitiesController')
+const serialsExelController = require('../controllers/serialsExelController')
+const helpController = require('../controllers/helpController')
+const lotteryPopUpController = require('../controllers/lotteryPopUpController')
+const lotteryController = require('../controllers/lotteryController')
+const representationController = require('../controllers/representationController')
+
+/// //////////////////////////////////////////////////////// routes
+/// ///////////// warranty terms
+router.get('/warranty/page/:page', warrantyTermsController.getAll)
+router.get('/warranty/:id(*)', warrantyTermsController.getOne)
+
+/// ///////////// FAQ
+router.get('/faq', faqController.getAll)
+router.get('/faq/:id(*)', faqController.getOne)
+
+/// ///////////// Learning
+router.get('/learning/page/:page', learningController.getAll)
+router.get('/learning/:id(*)', learningController.getOne)
+
+/// ///////////// download category
+router.get('/dCategory', downloadCategoryController.getAll)
+router.get('/dCategory/:id(*)', downloadCategoryController.getOne)
+
+/// ///////////// downloads
+router.get('/downloads/page/:category/:page', downloadController.getAll)
+router.get('/downloads/:id(*)', downloadController.getOne)
+router.get('/downloads-newest', downloadController.getNewest)
+
+/// ///////////// contact us
+router.post('/contact', contactPageController.create)
+
+/// ///////////// get iran cities
+router.get('/iranCities', iranCitiesController.getIranCities)
+
+/// ///////////// check device serial number
+router.post('/checkSerial', serialsExelController.checkSerial)
+
+/// ///////////// get help page
+router.get('/help', helpController.get)
+
+/// ///////////// get agents
+router.get('/agents', representationController.get_agents)
+
+/// ///////////// lottery
+router.get('/lotteryPopUp', lotteryPopUpController.getPopUpInfo)
+router.get('/lastLottery', lotteryController.getLastLottery)
+router.post('/enrollParticipant', lotteryController.enrollParticipant)
+
+module.exports = router
diff --git a/server/routes/thirdParty.js b/server/routes/thirdParty.js
new file mode 100644
index 0000000..6943fcd
--- /dev/null
+++ b/server/routes/thirdParty.js
@@ -0,0 +1,12 @@
+const { Router } = require('express')
+const router = Router()
+
+/// //////////////////////////////////////////////////////// controllers
+const thirdPartyController = require('../controllers/thirdPartyController')
+
+/// //////////////////////////////////////////////////////// routes
+router.post('/reception', thirdPartyController.reception)
+router.post('/repair', thirdPartyController.repair)
+router.post('/sendBack', thirdPartyController.sendBack)
+
+module.exports = router
diff --git a/server/routes/user.js b/server/routes/user.js
new file mode 100644
index 0000000..a896171
--- /dev/null
+++ b/server/routes/user.js
@@ -0,0 +1,56 @@
+const { Router } = require('express')
+const router = Router()
+const userController = require('../controllers/userController')
+const ticketsController = require('../controllers/ticketsController')
+const representationController = require('../controllers/representationController')
+const transactionDraftsController = require('../controllers/transactionDraftsController')
+const transactionController = require('../controllers/transactionController')
+const surveyController = require('../controllers/surveyController')
+
+/// // profile
+router.put('/update_profile', userController.update_user)
+router.put('/update_password', userController.update_user_password)
+router.put('/changeEmail', userController.changeEmail)
+router.post('/resendEmailConfirmation', userController.resendEmailConfirmation)
+router.put('/confirmEmail', userController.confirmEmail)
+router.put('/changeMobile', userController.changeMobile)
+router.post('/resendMobileConfirmation', userController.resendMobileConfirmation)
+router.put('/confirmMobile', userController.confirmMobile)
+
+/// // transactions
+router.post('/transaction', transactionController.add_transaction)
+router.get('/transactions', transactionController.get_all_transactions_for_user)
+router.get('/transaction/:ttn', transactionController.get_one_transaction_for_user)
+
+/// /// transaction drafts
+router.post('/transactionDraft', transactionDraftsController.add_transaction_draft)
+router.get('/transactionDrafts', transactionDraftsController.get_user_drafts)
+router.get('/transactionDraft/:draftId', transactionDraftsController.get_one_user_draft)
+router.put('/transactionDraft/:draftId', transactionDraftsController.update_draft_description)
+router.delete('/transactionDraft/:draftId', transactionDraftsController.remove_draft)
+
+router.put('/transactionDraftItemAdd/:draftId', transactionDraftsController.add_stuff_to_draft)
+router.put('/transactionDraftItemRemove/:draftId', transactionDraftsController.remove_stuff_from_draft)
+
+/// // tickets
+router.get('/ticketConversations', ticketsController.get_all_tickets)
+router.get('/getTicket/:id', ticketsController.get_one_ticket)
+router.post('/addTicketConversation', ticketsController.add_ticket)
+router.post('/addMessageToTicket/:id', ticketsController.add_message_to_ticket)
+
+/// // representation
+router.post('/representation', representationController.add_representation)
+router.put('/representation/:representation_id', representationController.edit_representation_by_user)
+router.post('/checkRepresentation', representationController.check_representation)
+router.post('/representationImages/:representation_code', representationController.upload_image_to_representation)
+router.delete(
+ '/representationImages/:representation_code/:imgId',
+ representationController.remove_image_from_representation
+)
+router.get('/representation/:id', representationController.getLastUserRep)
+
+/// // survey
+router.post('/survey', surveyController.create)
+router.get('/surveys', surveyController.getAllForUser)
+
+module.exports = router
diff --git a/static/CustomSW.js b/static/CustomSW.js
new file mode 100644
index 0000000..96b1c22
--- /dev/null
+++ b/static/CustomSW.js
@@ -0,0 +1,61 @@
+// variables
+let deferredPrompt
+const events = ['click', 'touchend', 'ontouchend']
+const customDialog = document.querySelector('.pwa_dialog')
+const installBtn = document.querySelector('#installPWA')
+const showPwaDialogBtn = document.querySelector('#showPwaDialog')
+const closePwaDialogBtn = document.querySelector('#closePwaDialog')
+
+// functions
+function showCustomInstallPromotion() {
+ setTimeout(function() {
+ customDialog.classList.add('active')
+ }, 500)
+}
+function hideCustomInstallPromotion() {
+ setTimeout(function() {
+ customDialog.classList.remove('active')
+ }, 500)
+}
+
+// events
+window.addEventListener('beforeinstallprompt', e => {
+ // Prevent the mini-infobar from appearing on mobile
+ e.preventDefault()
+ // Stash the event so it can be triggered later.
+ deferredPrompt = e
+ // Update UI notify the user they can install the PWA
+ // if (location.pathname !== '/') showCustomInstallPromotion()
+ showCustomInstallPromotion()
+})
+
+events.forEach(evt => {
+ closePwaDialogBtn.addEventListener(evt, e => {
+ hideCustomInstallPromotion()
+ })
+
+ installBtn.addEventListener(evt, e => {
+ // Hide the app provided install promotion
+ hideCustomInstallPromotion()
+ // Show the install prompt
+ deferredPrompt.prompt()
+ // Wait for the user to respond to the prompt
+ deferredPrompt.userChoice.then(choiceResult => {
+ if (choiceResult.outcome === 'accepted') {
+ console.log('User accepted the install prompt')
+ } else {
+ console.log('User dismissed the install prompt')
+ }
+ })
+ })
+
+ try {
+ showPwaDialogBtn.addEventListener(evt, e => {
+ if (deferredPrompt) {
+ showCustomInstallPromotion()
+ } else {
+ alert('شما قبلا برنامه را نصب کرده اید')
+ }
+ })
+ } catch (e) {}
+})
diff --git a/static/assets/css/bootstrap-grid.css b/static/assets/css/bootstrap-grid.css
new file mode 100644
index 0000000..a6c9575
--- /dev/null
+++ b/static/assets/css/bootstrap-grid.css
@@ -0,0 +1,5014 @@
+/*!
+ * Bootstrap Grid v5.0.0-beta1 (https://getbootstrap.com/)
+ * Copyright 2011-2020 The Bootstrap Authors
+ * Copyright 2011-2020 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ */
+.container,
+.container-fluid,
+.container-xxl,
+.container-xl,
+.container-lg,
+.container-md,
+.container-sm{
+ width: 100%;
+ box-sizing: border-box;
+ padding-right: var(--bs-gutter-x, 0.75rem);
+ padding-left: var(--bs-gutter-x, 0.75rem);
+ margin-right: auto;
+ margin-left: auto;
+}
+
+@media (min-width: 576px){
+ .container-sm, .container{
+ max-width: 540px;
+ }
+}
+
+@media (min-width: 768px){
+ .container-md, .container-sm, .container{
+ max-width: 720px;
+ }
+}
+
+@media (min-width: 992px){
+ .container-lg, .container-md, .container-sm, .container{
+ max-width: 960px;
+ }
+}
+
+@media (min-width: 1200px){
+ .container-xl, .container-lg, .container-md, .container-sm, .container{
+ max-width: 1140px;
+ }
+}
+
+@media (min-width: 1400px){
+ .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container{
+ max-width: 1320px;
+ }
+}
+
+.row{
+ --bs-gutter-x: 1.5rem;
+ --bs-gutter-y: 0;
+ display: flex;
+ flex-wrap: wrap;
+ margin-top: calc(var(--bs-gutter-y) * -1);
+ margin-right: calc(var(--bs-gutter-x) / -2);
+ margin-left: calc(var(--bs-gutter-x) / -2);
+}
+
+.row > *{
+ box-sizing: border-box;
+ flex-shrink: 0;
+ width: 100%;
+ max-width: 100%;
+ padding-right: calc(var(--bs-gutter-x) / 2);
+ padding-left: calc(var(--bs-gutter-x) / 2);
+ margin-top: var(--bs-gutter-y);
+}
+
+.col{
+ flex: 1 0 0%;
+}
+
+.row-cols-auto > *{
+ flex: 0 0 auto;
+ width: auto;
+}
+
+.row-cols-1 > *{
+ flex: 0 0 auto;
+ width: 100%;
+}
+
+.row-cols-2 > *{
+ flex: 0 0 auto;
+ width: 50%;
+}
+
+.row-cols-3 > *{
+ flex: 0 0 auto;
+ width: 33.3333333333%;
+}
+
+.row-cols-4 > *{
+ flex: 0 0 auto;
+ width: 25%;
+}
+
+.row-cols-5 > *{
+ flex: 0 0 auto;
+ width: 20%;
+}
+
+.row-cols-6 > *{
+ flex: 0 0 auto;
+ width: 16.6666666667%;
+}
+
+.col-auto{
+ flex: 0 0 auto;
+ width: auto;
+}
+
+.col-1{
+ flex: 0 0 auto;
+ width: 8.3333333333%;
+}
+
+.col-2{
+ flex: 0 0 auto;
+ width: 16.6666666667%;
+}
+
+.col-3{
+ flex: 0 0 auto;
+ width: 25%;
+}
+
+.col-4{
+ flex: 0 0 auto;
+ width: 33.3333333333%;
+}
+
+.col-5{
+ flex: 0 0 auto;
+ width: 41.6666666667%;
+}
+
+.col-6{
+ flex: 0 0 auto;
+ width: 50%;
+}
+
+.col-7{
+ flex: 0 0 auto;
+ width: 58.3333333333%;
+}
+
+.col-8{
+ flex: 0 0 auto;
+ width: 66.6666666667%;
+}
+
+.col-9{
+ flex: 0 0 auto;
+ width: 75%;
+}
+
+.col-10{
+ flex: 0 0 auto;
+ width: 83.3333333333%;
+}
+
+.col-11{
+ flex: 0 0 auto;
+ width: 91.6666666667%;
+}
+
+.col-12{
+ flex: 0 0 auto;
+ width: 100%;
+}
+
+.offset-1{
+ margin-left: 8.3333333333%;
+}
+
+.offset-2{
+ margin-left: 16.6666666667%;
+}
+
+.offset-3{
+ margin-left: 25%;
+}
+
+.offset-4{
+ margin-left: 33.3333333333%;
+}
+
+.offset-5{
+ margin-left: 41.6666666667%;
+}
+
+.offset-6{
+ margin-left: 50%;
+}
+
+.offset-7{
+ margin-left: 58.3333333333%;
+}
+
+.offset-8{
+ margin-left: 66.6666666667%;
+}
+
+.offset-9{
+ margin-left: 75%;
+}
+
+.offset-10{
+ margin-left: 83.3333333333%;
+}
+
+.offset-11{
+ margin-left: 91.6666666667%;
+}
+
+.g-0,
+.gx-0{
+ --bs-gutter-x: 0;
+}
+
+.g-0,
+.gy-0{
+ --bs-gutter-y: 0;
+}
+
+.g-1,
+.gx-1{
+ --bs-gutter-x: 0.25rem;
+}
+
+.g-1,
+.gy-1{
+ --bs-gutter-y: 0.25rem;
+}
+
+.g-2,
+.gx-2{
+ --bs-gutter-x: 0.5rem;
+}
+
+.g-2,
+.gy-2{
+ --bs-gutter-y: 0.5rem;
+}
+
+.g-3,
+.gx-3{
+ --bs-gutter-x: 1rem;
+}
+
+.g-3,
+.gy-3{
+ --bs-gutter-y: 1rem;
+}
+
+.g-4,
+.gx-4{
+ --bs-gutter-x: 1.5rem;
+}
+
+.g-4,
+.gy-4{
+ --bs-gutter-y: 1.5rem;
+}
+
+.g-5,
+.gx-5{
+ --bs-gutter-x: 3rem;
+}
+
+.g-5,
+.gy-5{
+ --bs-gutter-y: 3rem;
+}
+
+@media (min-width: 576px){
+ .col-sm{
+ flex: 1 0 0%;
+ }
+
+ .row-cols-sm-auto > *{
+ flex: 0 0 auto;
+ width: auto;
+ }
+
+ .row-cols-sm-1 > *{
+ flex: 0 0 auto;
+ width: 100%;
+ }
+
+ .row-cols-sm-2 > *{
+ flex: 0 0 auto;
+ width: 50%;
+ }
+
+ .row-cols-sm-3 > *{
+ flex: 0 0 auto;
+ width: 33.3333333333%;
+ }
+
+ .row-cols-sm-4 > *{
+ flex: 0 0 auto;
+ width: 25%;
+ }
+
+ .row-cols-sm-5 > *{
+ flex: 0 0 auto;
+ width: 20%;
+ }
+
+ .row-cols-sm-6 > *{
+ flex: 0 0 auto;
+ width: 16.6666666667%;
+ }
+
+ .col-sm-auto{
+ flex: 0 0 auto;
+ width: auto;
+ }
+
+ .col-sm-1{
+ flex: 0 0 auto;
+ width: 8.3333333333%;
+ }
+
+ .col-sm-2{
+ flex: 0 0 auto;
+ width: 16.6666666667%;
+ }
+
+ .col-sm-3{
+ flex: 0 0 auto;
+ width: 25%;
+ }
+
+ .col-sm-4{
+ flex: 0 0 auto;
+ width: 33.3333333333%;
+ }
+
+ .col-sm-5{
+ flex: 0 0 auto;
+ width: 41.6666666667%;
+ }
+
+ .col-sm-6{
+ flex: 0 0 auto;
+ width: 50%;
+ }
+
+ .col-sm-7{
+ flex: 0 0 auto;
+ width: 58.3333333333%;
+ }
+
+ .col-sm-8{
+ flex: 0 0 auto;
+ width: 66.6666666667%;
+ }
+
+ .col-sm-9{
+ flex: 0 0 auto;
+ width: 75%;
+ }
+
+ .col-sm-10{
+ flex: 0 0 auto;
+ width: 83.3333333333%;
+ }
+
+ .col-sm-11{
+ flex: 0 0 auto;
+ width: 91.6666666667%;
+ }
+
+ .col-sm-12{
+ flex: 0 0 auto;
+ width: 100%;
+ }
+
+ .offset-sm-0{
+ margin-left: 0;
+ }
+
+ .offset-sm-1{
+ margin-left: 8.3333333333%;
+ }
+
+ .offset-sm-2{
+ margin-left: 16.6666666667%;
+ }
+
+ .offset-sm-3{
+ margin-left: 25%;
+ }
+
+ .offset-sm-4{
+ margin-left: 33.3333333333%;
+ }
+
+ .offset-sm-5{
+ margin-left: 41.6666666667%;
+ }
+
+ .offset-sm-6{
+ margin-left: 50%;
+ }
+
+ .offset-sm-7{
+ margin-left: 58.3333333333%;
+ }
+
+ .offset-sm-8{
+ margin-left: 66.6666666667%;
+ }
+
+ .offset-sm-9{
+ margin-left: 75%;
+ }
+
+ .offset-sm-10{
+ margin-left: 83.3333333333%;
+ }
+
+ .offset-sm-11{
+ margin-left: 91.6666666667%;
+ }
+
+ .g-sm-0,
+ .gx-sm-0{
+ --bs-gutter-x: 0;
+ }
+
+ .g-sm-0,
+ .gy-sm-0{
+ --bs-gutter-y: 0;
+ }
+
+ .g-sm-1,
+ .gx-sm-1{
+ --bs-gutter-x: 0.25rem;
+ }
+
+ .g-sm-1,
+ .gy-sm-1{
+ --bs-gutter-y: 0.25rem;
+ }
+
+ .g-sm-2,
+ .gx-sm-2{
+ --bs-gutter-x: 0.5rem;
+ }
+
+ .g-sm-2,
+ .gy-sm-2{
+ --bs-gutter-y: 0.5rem;
+ }
+
+ .g-sm-3,
+ .gx-sm-3{
+ --bs-gutter-x: 1rem;
+ }
+
+ .g-sm-3,
+ .gy-sm-3{
+ --bs-gutter-y: 1rem;
+ }
+
+ .g-sm-4,
+ .gx-sm-4{
+ --bs-gutter-x: 1.5rem;
+ }
+
+ .g-sm-4,
+ .gy-sm-4{
+ --bs-gutter-y: 1.5rem;
+ }
+
+ .g-sm-5,
+ .gx-sm-5{
+ --bs-gutter-x: 3rem;
+ }
+
+ .g-sm-5,
+ .gy-sm-5{
+ --bs-gutter-y: 3rem;
+ }
+}
+
+@media (min-width: 768px){
+ .col-md{
+ flex: 1 0 0%;
+ }
+
+ .row-cols-md-auto > *{
+ flex: 0 0 auto;
+ width: auto;
+ }
+
+ .row-cols-md-1 > *{
+ flex: 0 0 auto;
+ width: 100%;
+ }
+
+ .row-cols-md-2 > *{
+ flex: 0 0 auto;
+ width: 50%;
+ }
+
+ .row-cols-md-3 > *{
+ flex: 0 0 auto;
+ width: 33.3333333333%;
+ }
+
+ .row-cols-md-4 > *{
+ flex: 0 0 auto;
+ width: 25%;
+ }
+
+ .row-cols-md-5 > *{
+ flex: 0 0 auto;
+ width: 20%;
+ }
+
+ .row-cols-md-6 > *{
+ flex: 0 0 auto;
+ width: 16.6666666667%;
+ }
+
+ .col-md-auto{
+ flex: 0 0 auto;
+ width: auto;
+ }
+
+ .col-md-1{
+ flex: 0 0 auto;
+ width: 8.3333333333%;
+ }
+
+ .col-md-2{
+ flex: 0 0 auto;
+ width: 16.6666666667%;
+ }
+
+ .col-md-3{
+ flex: 0 0 auto;
+ width: 25%;
+ }
+
+ .col-md-4{
+ flex: 0 0 auto;
+ width: 33.3333333333%;
+ }
+
+ .col-md-5{
+ flex: 0 0 auto;
+ width: 41.6666666667%;
+ }
+
+ .col-md-6{
+ flex: 0 0 auto;
+ width: 50%;
+ }
+
+ .col-md-7{
+ flex: 0 0 auto;
+ width: 58.3333333333%;
+ }
+
+ .col-md-8{
+ flex: 0 0 auto;
+ width: 66.6666666667%;
+ }
+
+ .col-md-9{
+ flex: 0 0 auto;
+ width: 75%;
+ }
+
+ .col-md-10{
+ flex: 0 0 auto;
+ width: 83.3333333333%;
+ }
+
+ .col-md-11{
+ flex: 0 0 auto;
+ width: 91.6666666667%;
+ }
+
+ .col-md-12{
+ flex: 0 0 auto;
+ width: 100%;
+ }
+
+ .offset-md-0{
+ margin-left: 0;
+ }
+
+ .offset-md-1{
+ margin-left: 8.3333333333%;
+ }
+
+ .offset-md-2{
+ margin-left: 16.6666666667%;
+ }
+
+ .offset-md-3{
+ margin-left: 25%;
+ }
+
+ .offset-md-4{
+ margin-left: 33.3333333333%;
+ }
+
+ .offset-md-5{
+ margin-left: 41.6666666667%;
+ }
+
+ .offset-md-6{
+ margin-left: 50%;
+ }
+
+ .offset-md-7{
+ margin-left: 58.3333333333%;
+ }
+
+ .offset-md-8{
+ margin-left: 66.6666666667%;
+ }
+
+ .offset-md-9{
+ margin-left: 75%;
+ }
+
+ .offset-md-10{
+ margin-left: 83.3333333333%;
+ }
+
+ .offset-md-11{
+ margin-left: 91.6666666667%;
+ }
+
+ .g-md-0,
+ .gx-md-0{
+ --bs-gutter-x: 0;
+ }
+
+ .g-md-0,
+ .gy-md-0{
+ --bs-gutter-y: 0;
+ }
+
+ .g-md-1,
+ .gx-md-1{
+ --bs-gutter-x: 0.25rem;
+ }
+
+ .g-md-1,
+ .gy-md-1{
+ --bs-gutter-y: 0.25rem;
+ }
+
+ .g-md-2,
+ .gx-md-2{
+ --bs-gutter-x: 0.5rem;
+ }
+
+ .g-md-2,
+ .gy-md-2{
+ --bs-gutter-y: 0.5rem;
+ }
+
+ .g-md-3,
+ .gx-md-3{
+ --bs-gutter-x: 1rem;
+ }
+
+ .g-md-3,
+ .gy-md-3{
+ --bs-gutter-y: 1rem;
+ }
+
+ .g-md-4,
+ .gx-md-4{
+ --bs-gutter-x: 1.5rem;
+ }
+
+ .g-md-4,
+ .gy-md-4{
+ --bs-gutter-y: 1.5rem;
+ }
+
+ .g-md-5,
+ .gx-md-5{
+ --bs-gutter-x: 3rem;
+ }
+
+ .g-md-5,
+ .gy-md-5{
+ --bs-gutter-y: 3rem;
+ }
+}
+
+@media (min-width: 992px){
+ .col-lg{
+ flex: 1 0 0%;
+ }
+
+ .row-cols-lg-auto > *{
+ flex: 0 0 auto;
+ width: auto;
+ }
+
+ .row-cols-lg-1 > *{
+ flex: 0 0 auto;
+ width: 100%;
+ }
+
+ .row-cols-lg-2 > *{
+ flex: 0 0 auto;
+ width: 50%;
+ }
+
+ .row-cols-lg-3 > *{
+ flex: 0 0 auto;
+ width: 33.3333333333%;
+ }
+
+ .row-cols-lg-4 > *{
+ flex: 0 0 auto;
+ width: 25%;
+ }
+
+ .row-cols-lg-5 > *{
+ flex: 0 0 auto;
+ width: 20%;
+ }
+
+ .row-cols-lg-6 > *{
+ flex: 0 0 auto;
+ width: 16.6666666667%;
+ }
+
+ .col-lg-auto{
+ flex: 0 0 auto;
+ width: auto;
+ }
+
+ .col-lg-1{
+ flex: 0 0 auto;
+ width: 8.3333333333%;
+ }
+
+ .col-lg-2{
+ flex: 0 0 auto;
+ width: 16.6666666667%;
+ }
+
+ .col-lg-3{
+ flex: 0 0 auto;
+ width: 25%;
+ }
+
+ .col-lg-4{
+ flex: 0 0 auto;
+ width: 33.3333333333%;
+ }
+
+ .col-lg-5{
+ flex: 0 0 auto;
+ width: 41.6666666667%;
+ }
+
+ .col-lg-6{
+ flex: 0 0 auto;
+ width: 50%;
+ }
+
+ .col-lg-7{
+ flex: 0 0 auto;
+ width: 58.3333333333%;
+ }
+
+ .col-lg-8{
+ flex: 0 0 auto;
+ width: 66.6666666667%;
+ }
+
+ .col-lg-9{
+ flex: 0 0 auto;
+ width: 75%;
+ }
+
+ .col-lg-10{
+ flex: 0 0 auto;
+ width: 83.3333333333%;
+ }
+
+ .col-lg-11{
+ flex: 0 0 auto;
+ width: 91.6666666667%;
+ }
+
+ .col-lg-12{
+ flex: 0 0 auto;
+ width: 100%;
+ }
+
+ .offset-lg-0{
+ margin-left: 0;
+ }
+
+ .offset-lg-1{
+ margin-left: 8.3333333333%;
+ }
+
+ .offset-lg-2{
+ margin-left: 16.6666666667%;
+ }
+
+ .offset-lg-3{
+ margin-left: 25%;
+ }
+
+ .offset-lg-4{
+ margin-left: 33.3333333333%;
+ }
+
+ .offset-lg-5{
+ margin-left: 41.6666666667%;
+ }
+
+ .offset-lg-6{
+ margin-left: 50%;
+ }
+
+ .offset-lg-7{
+ margin-left: 58.3333333333%;
+ }
+
+ .offset-lg-8{
+ margin-left: 66.6666666667%;
+ }
+
+ .offset-lg-9{
+ margin-left: 75%;
+ }
+
+ .offset-lg-10{
+ margin-left: 83.3333333333%;
+ }
+
+ .offset-lg-11{
+ margin-left: 91.6666666667%;
+ }
+
+ .g-lg-0,
+ .gx-lg-0{
+ --bs-gutter-x: 0;
+ }
+
+ .g-lg-0,
+ .gy-lg-0{
+ --bs-gutter-y: 0;
+ }
+
+ .g-lg-1,
+ .gx-lg-1{
+ --bs-gutter-x: 0.25rem;
+ }
+
+ .g-lg-1,
+ .gy-lg-1{
+ --bs-gutter-y: 0.25rem;
+ }
+
+ .g-lg-2,
+ .gx-lg-2{
+ --bs-gutter-x: 0.5rem;
+ }
+
+ .g-lg-2,
+ .gy-lg-2{
+ --bs-gutter-y: 0.5rem;
+ }
+
+ .g-lg-3,
+ .gx-lg-3{
+ --bs-gutter-x: 1rem;
+ }
+
+ .g-lg-3,
+ .gy-lg-3{
+ --bs-gutter-y: 1rem;
+ }
+
+ .g-lg-4,
+ .gx-lg-4{
+ --bs-gutter-x: 1.5rem;
+ }
+
+ .g-lg-4,
+ .gy-lg-4{
+ --bs-gutter-y: 1.5rem;
+ }
+
+ .g-lg-5,
+ .gx-lg-5{
+ --bs-gutter-x: 3rem;
+ }
+
+ .g-lg-5,
+ .gy-lg-5{
+ --bs-gutter-y: 3rem;
+ }
+}
+
+@media (min-width: 1200px){
+ .col-xl{
+ flex: 1 0 0%;
+ }
+
+ .row-cols-xl-auto > *{
+ flex: 0 0 auto;
+ width: auto;
+ }
+
+ .row-cols-xl-1 > *{
+ flex: 0 0 auto;
+ width: 100%;
+ }
+
+ .row-cols-xl-2 > *{
+ flex: 0 0 auto;
+ width: 50%;
+ }
+
+ .row-cols-xl-3 > *{
+ flex: 0 0 auto;
+ width: 33.3333333333%;
+ }
+
+ .row-cols-xl-4 > *{
+ flex: 0 0 auto;
+ width: 25%;
+ }
+
+ .row-cols-xl-5 > *{
+ flex: 0 0 auto;
+ width: 20%;
+ }
+
+ .row-cols-xl-6 > *{
+ flex: 0 0 auto;
+ width: 16.6666666667%;
+ }
+
+ .col-xl-auto{
+ flex: 0 0 auto;
+ width: auto;
+ }
+
+ .col-xl-1{
+ flex: 0 0 auto;
+ width: 8.3333333333%;
+ }
+
+ .col-xl-2{
+ flex: 0 0 auto;
+ width: 16.6666666667%;
+ }
+
+ .col-xl-3{
+ flex: 0 0 auto;
+ width: 25%;
+ }
+
+ .col-xl-4{
+ flex: 0 0 auto;
+ width: 33.3333333333%;
+ }
+
+ .col-xl-5{
+ flex: 0 0 auto;
+ width: 41.6666666667%;
+ }
+
+ .col-xl-6{
+ flex: 0 0 auto;
+ width: 50%;
+ }
+
+ .col-xl-7{
+ flex: 0 0 auto;
+ width: 58.3333333333%;
+ }
+
+ .col-xl-8{
+ flex: 0 0 auto;
+ width: 66.6666666667%;
+ }
+
+ .col-xl-9{
+ flex: 0 0 auto;
+ width: 75%;
+ }
+
+ .col-xl-10{
+ flex: 0 0 auto;
+ width: 83.3333333333%;
+ }
+
+ .col-xl-11{
+ flex: 0 0 auto;
+ width: 91.6666666667%;
+ }
+
+ .col-xl-12{
+ flex: 0 0 auto;
+ width: 100%;
+ }
+
+ .offset-xl-0{
+ margin-left: 0;
+ }
+
+ .offset-xl-1{
+ margin-left: 8.3333333333%;
+ }
+
+ .offset-xl-2{
+ margin-left: 16.6666666667%;
+ }
+
+ .offset-xl-3{
+ margin-left: 25%;
+ }
+
+ .offset-xl-4{
+ margin-left: 33.3333333333%;
+ }
+
+ .offset-xl-5{
+ margin-left: 41.6666666667%;
+ }
+
+ .offset-xl-6{
+ margin-left: 50%;
+ }
+
+ .offset-xl-7{
+ margin-left: 58.3333333333%;
+ }
+
+ .offset-xl-8{
+ margin-left: 66.6666666667%;
+ }
+
+ .offset-xl-9{
+ margin-left: 75%;
+ }
+
+ .offset-xl-10{
+ margin-left: 83.3333333333%;
+ }
+
+ .offset-xl-11{
+ margin-left: 91.6666666667%;
+ }
+
+ .g-xl-0,
+ .gx-xl-0{
+ --bs-gutter-x: 0;
+ }
+
+ .g-xl-0,
+ .gy-xl-0{
+ --bs-gutter-y: 0;
+ }
+
+ .g-xl-1,
+ .gx-xl-1{
+ --bs-gutter-x: 0.25rem;
+ }
+
+ .g-xl-1,
+ .gy-xl-1{
+ --bs-gutter-y: 0.25rem;
+ }
+
+ .g-xl-2,
+ .gx-xl-2{
+ --bs-gutter-x: 0.5rem;
+ }
+
+ .g-xl-2,
+ .gy-xl-2{
+ --bs-gutter-y: 0.5rem;
+ }
+
+ .g-xl-3,
+ .gx-xl-3{
+ --bs-gutter-x: 1rem;
+ }
+
+ .g-xl-3,
+ .gy-xl-3{
+ --bs-gutter-y: 1rem;
+ }
+
+ .g-xl-4,
+ .gx-xl-4{
+ --bs-gutter-x: 1.5rem;
+ }
+
+ .g-xl-4,
+ .gy-xl-4{
+ --bs-gutter-y: 1.5rem;
+ }
+
+ .g-xl-5,
+ .gx-xl-5{
+ --bs-gutter-x: 3rem;
+ }
+
+ .g-xl-5,
+ .gy-xl-5{
+ --bs-gutter-y: 3rem;
+ }
+}
+
+@media (min-width: 1400px){
+ .col-xxl{
+ flex: 1 0 0%;
+ }
+
+ .row-cols-xxl-auto > *{
+ flex: 0 0 auto;
+ width: auto;
+ }
+
+ .row-cols-xxl-1 > *{
+ flex: 0 0 auto;
+ width: 100%;
+ }
+
+ .row-cols-xxl-2 > *{
+ flex: 0 0 auto;
+ width: 50%;
+ }
+
+ .row-cols-xxl-3 > *{
+ flex: 0 0 auto;
+ width: 33.3333333333%;
+ }
+
+ .row-cols-xxl-4 > *{
+ flex: 0 0 auto;
+ width: 25%;
+ }
+
+ .row-cols-xxl-5 > *{
+ flex: 0 0 auto;
+ width: 20%;
+ }
+
+ .row-cols-xxl-6 > *{
+ flex: 0 0 auto;
+ width: 16.6666666667%;
+ }
+
+ .col-xxl-auto{
+ flex: 0 0 auto;
+ width: auto;
+ }
+
+ .col-xxl-1{
+ flex: 0 0 auto;
+ width: 8.3333333333%;
+ }
+
+ .col-xxl-2{
+ flex: 0 0 auto;
+ width: 16.6666666667%;
+ }
+
+ .col-xxl-3{
+ flex: 0 0 auto;
+ width: 25%;
+ }
+
+ .col-xxl-4{
+ flex: 0 0 auto;
+ width: 33.3333333333%;
+ }
+
+ .col-xxl-5{
+ flex: 0 0 auto;
+ width: 41.6666666667%;
+ }
+
+ .col-xxl-6{
+ flex: 0 0 auto;
+ width: 50%;
+ }
+
+ .col-xxl-7{
+ flex: 0 0 auto;
+ width: 58.3333333333%;
+ }
+
+ .col-xxl-8{
+ flex: 0 0 auto;
+ width: 66.6666666667%;
+ }
+
+ .col-xxl-9{
+ flex: 0 0 auto;
+ width: 75%;
+ }
+
+ .col-xxl-10{
+ flex: 0 0 auto;
+ width: 83.3333333333%;
+ }
+
+ .col-xxl-11{
+ flex: 0 0 auto;
+ width: 91.6666666667%;
+ }
+
+ .col-xxl-12{
+ flex: 0 0 auto;
+ width: 100%;
+ }
+
+ .offset-xxl-0{
+ margin-left: 0;
+ }
+
+ .offset-xxl-1{
+ margin-left: 8.3333333333%;
+ }
+
+ .offset-xxl-2{
+ margin-left: 16.6666666667%;
+ }
+
+ .offset-xxl-3{
+ margin-left: 25%;
+ }
+
+ .offset-xxl-4{
+ margin-left: 33.3333333333%;
+ }
+
+ .offset-xxl-5{
+ margin-left: 41.6666666667%;
+ }
+
+ .offset-xxl-6{
+ margin-left: 50%;
+ }
+
+ .offset-xxl-7{
+ margin-left: 58.3333333333%;
+ }
+
+ .offset-xxl-8{
+ margin-left: 66.6666666667%;
+ }
+
+ .offset-xxl-9{
+ margin-left: 75%;
+ }
+
+ .offset-xxl-10{
+ margin-left: 83.3333333333%;
+ }
+
+ .offset-xxl-11{
+ margin-left: 91.6666666667%;
+ }
+
+ .g-xxl-0,
+ .gx-xxl-0{
+ --bs-gutter-x: 0;
+ }
+
+ .g-xxl-0,
+ .gy-xxl-0{
+ --bs-gutter-y: 0;
+ }
+
+ .g-xxl-1,
+ .gx-xxl-1{
+ --bs-gutter-x: 0.25rem;
+ }
+
+ .g-xxl-1,
+ .gy-xxl-1{
+ --bs-gutter-y: 0.25rem;
+ }
+
+ .g-xxl-2,
+ .gx-xxl-2{
+ --bs-gutter-x: 0.5rem;
+ }
+
+ .g-xxl-2,
+ .gy-xxl-2{
+ --bs-gutter-y: 0.5rem;
+ }
+
+ .g-xxl-3,
+ .gx-xxl-3{
+ --bs-gutter-x: 1rem;
+ }
+
+ .g-xxl-3,
+ .gy-xxl-3{
+ --bs-gutter-y: 1rem;
+ }
+
+ .g-xxl-4,
+ .gx-xxl-4{
+ --bs-gutter-x: 1.5rem;
+ }
+
+ .g-xxl-4,
+ .gy-xxl-4{
+ --bs-gutter-y: 1.5rem;
+ }
+
+ .g-xxl-5,
+ .gx-xxl-5{
+ --bs-gutter-x: 3rem;
+ }
+
+ .g-xxl-5,
+ .gy-xxl-5{
+ --bs-gutter-y: 3rem;
+ }
+}
+
+.d-inline{
+ display: inline !important;
+}
+
+.d-inline-block{
+ display: inline-block !important;
+}
+
+.d-block{
+ display: block !important;
+}
+
+.d-grid{
+ display: grid !important;
+}
+
+.d-table{
+ display: table !important;
+}
+
+.d-table-row{
+ display: table-row !important;
+}
+
+.d-table-cell{
+ display: table-cell !important;
+}
+
+.d-flex{
+ display: flex !important;
+}
+
+.d-inline-flex{
+ display: inline-flex !important;
+}
+
+.d-none{
+ display: none !important;
+}
+
+.flex-fill{
+ flex: 1 1 auto !important;
+}
+
+.flex-row{
+ flex-direction: row !important;
+}
+
+.flex-column{
+ flex-direction: column !important;
+}
+
+.flex-row-reverse{
+ flex-direction: row-reverse !important;
+}
+
+.flex-column-reverse{
+ flex-direction: column-reverse !important;
+}
+
+.flex-grow-0{
+ flex-grow: 0 !important;
+}
+
+.flex-grow-1{
+ flex-grow: 1 !important;
+}
+
+.flex-shrink-0{
+ flex-shrink: 0 !important;
+}
+
+.flex-shrink-1{
+ flex-shrink: 1 !important;
+}
+
+.flex-wrap{
+ flex-wrap: wrap !important;
+}
+
+.flex-nowrap{
+ flex-wrap: nowrap !important;
+}
+
+.flex-wrap-reverse{
+ flex-wrap: wrap-reverse !important;
+}
+
+.justify-content-start{
+ justify-content: flex-start !important;
+}
+
+.justify-content-end{
+ justify-content: flex-end !important;
+}
+
+.justify-content-center{
+ justify-content: center !important;
+}
+
+.justify-content-between{
+ justify-content: space-between !important;
+}
+
+.justify-content-around{
+ justify-content: space-around !important;
+}
+
+.justify-content-evenly{
+ justify-content: space-evenly !important;
+}
+
+.align-items-start{
+ align-items: flex-start !important;
+}
+
+.align-items-end{
+ align-items: flex-end !important;
+}
+
+.align-items-center{
+ align-items: center !important;
+}
+
+.align-items-baseline{
+ align-items: baseline !important;
+}
+
+.align-items-stretch{
+ align-items: stretch !important;
+}
+
+.align-content-start{
+ align-content: flex-start !important;
+}
+
+.align-content-end{
+ align-content: flex-end !important;
+}
+
+.align-content-center{
+ align-content: center !important;
+}
+
+.align-content-between{
+ align-content: space-between !important;
+}
+
+.align-content-around{
+ align-content: space-around !important;
+}
+
+.align-content-stretch{
+ align-content: stretch !important;
+}
+
+.align-self-auto{
+ align-self: auto !important;
+}
+
+.align-self-start{
+ align-self: flex-start !important;
+}
+
+.align-self-end{
+ align-self: flex-end !important;
+}
+
+.align-self-center{
+ align-self: center !important;
+}
+
+.align-self-baseline{
+ align-self: baseline !important;
+}
+
+.align-self-stretch{
+ align-self: stretch !important;
+}
+
+.order-first{
+ order: -1 !important;
+}
+
+.order-0{
+ order: 0 !important;
+}
+
+.order-1{
+ order: 1 !important;
+}
+
+.order-2{
+ order: 2 !important;
+}
+
+.order-3{
+ order: 3 !important;
+}
+
+.order-4{
+ order: 4 !important;
+}
+
+.order-5{
+ order: 5 !important;
+}
+
+.order-last{
+ order: 6 !important;
+}
+
+.m-0{
+ margin: 0 !important;
+}
+
+.m-1{
+ margin: 0.25rem !important;
+}
+
+.m-2{
+ margin: 0.5rem !important;
+}
+
+.m-3{
+ margin: 1rem !important;
+}
+
+.m-4{
+ margin: 1.5rem !important;
+}
+
+.m-5{
+ margin: 3rem !important;
+}
+
+.m-auto{
+ margin: auto !important;
+}
+
+.mx-0{
+ margin-right: 0 !important;
+ margin-left: 0 !important;
+}
+
+.mx-1{
+ margin-right: 0.25rem !important;
+ margin-left: 0.25rem !important;
+}
+
+.mx-2{
+ margin-right: 0.5rem !important;
+ margin-left: 0.5rem !important;
+}
+
+.mx-3{
+ margin-right: 1rem !important;
+ margin-left: 1rem !important;
+}
+
+.mx-4{
+ margin-right: 1.5rem !important;
+ margin-left: 1.5rem !important;
+}
+
+.mx-5{
+ margin-right: 3rem !important;
+ margin-left: 3rem !important;
+}
+
+.mx-auto{
+ margin-right: auto !important;
+ margin-left: auto !important;
+}
+
+.my-0{
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+}
+
+.my-1{
+ margin-top: 0.25rem !important;
+ margin-bottom: 0.25rem !important;
+}
+
+.my-2{
+ margin-top: 0.5rem !important;
+ margin-bottom: 0.5rem !important;
+}
+
+.my-3{
+ margin-top: 1rem !important;
+ margin-bottom: 1rem !important;
+}
+
+.my-4{
+ margin-top: 1.5rem !important;
+ margin-bottom: 1.5rem !important;
+}
+
+.my-5{
+ margin-top: 3rem !important;
+ margin-bottom: 3rem !important;
+}
+
+.my-auto{
+ margin-top: auto !important;
+ margin-bottom: auto !important;
+}
+
+.mt-0{
+ margin-top: 0 !important;
+}
+
+.mt-1{
+ margin-top: 0.25rem !important;
+}
+
+.mt-2{
+ margin-top: 0.5rem !important;
+}
+
+.mt-3{
+ margin-top: 1rem !important;
+}
+
+.mt-4{
+ margin-top: 1.5rem !important;
+}
+
+.mt-5{
+ margin-top: 3rem !important;
+}
+
+.mt-auto{
+ margin-top: auto !important;
+}
+
+.me-0{
+ margin-right: 0 !important;
+}
+
+.me-1{
+ margin-right: 0.25rem !important;
+}
+
+.me-2{
+ margin-right: 0.5rem !important;
+}
+
+.me-3{
+ margin-right: 1rem !important;
+}
+
+.me-4{
+ margin-right: 1.5rem !important;
+}
+
+.me-5{
+ margin-right: 3rem !important;
+}
+
+.me-auto{
+ margin-right: auto !important;
+}
+
+.mb-0{
+ margin-bottom: 0 !important;
+}
+
+.mb-1{
+ margin-bottom: 0.25rem !important;
+}
+
+.mb-2{
+ margin-bottom: 0.5rem !important;
+}
+
+.mb-3{
+ margin-bottom: 1rem !important;
+}
+
+.mb-4{
+ margin-bottom: 1.5rem !important;
+}
+
+.mb-5{
+ margin-bottom: 3rem !important;
+}
+
+.mb-auto{
+ margin-bottom: auto !important;
+}
+
+.ms-0{
+ margin-left: 0 !important;
+}
+
+.ms-1{
+ margin-left: 0.25rem !important;
+}
+
+.ms-2{
+ margin-left: 0.5rem !important;
+}
+
+.ms-3{
+ margin-left: 1rem !important;
+}
+
+.ms-4{
+ margin-left: 1.5rem !important;
+}
+
+.ms-5{
+ margin-left: 3rem !important;
+}
+
+.ms-auto{
+ margin-left: auto !important;
+}
+
+.p-0{
+ padding: 0 !important;
+}
+
+.p-1{
+ padding: 0.25rem !important;
+}
+
+.p-2{
+ padding: 0.5rem !important;
+}
+
+.p-3{
+ padding: 1rem !important;
+}
+
+.p-4{
+ padding: 1.5rem !important;
+}
+
+.p-5{
+ padding: 3rem !important;
+}
+
+.px-0{
+ padding-right: 0 !important;
+ padding-left: 0 !important;
+}
+
+.px-1{
+ padding-right: 0.25rem !important;
+ padding-left: 0.25rem !important;
+}
+
+.px-2{
+ padding-right: 0.5rem !important;
+ padding-left: 0.5rem !important;
+}
+
+.px-3{
+ padding-right: 1rem !important;
+ padding-left: 1rem !important;
+}
+
+.px-4{
+ padding-right: 1.5rem !important;
+ padding-left: 1.5rem !important;
+}
+
+.px-5{
+ padding-right: 3rem !important;
+ padding-left: 3rem !important;
+}
+
+.py-0{
+ padding-top: 0 !important;
+ padding-bottom: 0 !important;
+}
+
+.py-1{
+ padding-top: 0.25rem !important;
+ padding-bottom: 0.25rem !important;
+}
+
+.py-2{
+ padding-top: 0.5rem !important;
+ padding-bottom: 0.5rem !important;
+}
+
+.py-3{
+ padding-top: 1rem !important;
+ padding-bottom: 1rem !important;
+}
+
+.py-4{
+ padding-top: 1.5rem !important;
+ padding-bottom: 1.5rem !important;
+}
+
+.py-5{
+ padding-top: 3rem !important;
+ padding-bottom: 3rem !important;
+}
+
+.pt-0{
+ padding-top: 0 !important;
+}
+
+.pt-1{
+ padding-top: 0.25rem !important;
+}
+
+.pt-2{
+ padding-top: 0.5rem !important;
+}
+
+.pt-3{
+ padding-top: 1rem !important;
+}
+
+.pt-4{
+ padding-top: 1.5rem !important;
+}
+
+.pt-5{
+ padding-top: 3rem !important;
+}
+
+.pe-0{
+ padding-right: 0 !important;
+}
+
+.pe-1{
+ padding-right: 0.25rem !important;
+}
+
+.pe-2{
+ padding-right: 0.5rem !important;
+}
+
+.pe-3{
+ padding-right: 1rem !important;
+}
+
+.pe-4{
+ padding-right: 1.5rem !important;
+}
+
+.pe-5{
+ padding-right: 3rem !important;
+}
+
+.pb-0{
+ padding-bottom: 0 !important;
+}
+
+.pb-1{
+ padding-bottom: 0.25rem !important;
+}
+
+.pb-2{
+ padding-bottom: 0.5rem !important;
+}
+
+.pb-3{
+ padding-bottom: 1rem !important;
+}
+
+.pb-4{
+ padding-bottom: 1.5rem !important;
+}
+
+.pb-5{
+ padding-bottom: 3rem !important;
+}
+
+.ps-0{
+ padding-left: 0 !important;
+}
+
+.ps-1{
+ padding-left: 0.25rem !important;
+}
+
+.ps-2{
+ padding-left: 0.5rem !important;
+}
+
+.ps-3{
+ padding-left: 1rem !important;
+}
+
+.ps-4{
+ padding-left: 1.5rem !important;
+}
+
+.ps-5{
+ padding-left: 3rem !important;
+}
+
+@media (min-width: 576px){
+ .d-sm-inline{
+ display: inline !important;
+ }
+
+ .d-sm-inline-block{
+ display: inline-block !important;
+ }
+
+ .d-sm-block{
+ display: block !important;
+ }
+
+ .d-sm-grid{
+ display: grid !important;
+ }
+
+ .d-sm-table{
+ display: table !important;
+ }
+
+ .d-sm-table-row{
+ display: table-row !important;
+ }
+
+ .d-sm-table-cell{
+ display: table-cell !important;
+ }
+
+ .d-sm-flex{
+ display: flex !important;
+ }
+
+ .d-sm-inline-flex{
+ display: inline-flex !important;
+ }
+
+ .d-sm-none{
+ display: none !important;
+ }
+
+ .flex-sm-fill{
+ flex: 1 1 auto !important;
+ }
+
+ .flex-sm-row{
+ flex-direction: row !important;
+ }
+
+ .flex-sm-column{
+ flex-direction: column !important;
+ }
+
+ .flex-sm-row-reverse{
+ flex-direction: row-reverse !important;
+ }
+
+ .flex-sm-column-reverse{
+ flex-direction: column-reverse !important;
+ }
+
+ .flex-sm-grow-0{
+ flex-grow: 0 !important;
+ }
+
+ .flex-sm-grow-1{
+ flex-grow: 1 !important;
+ }
+
+ .flex-sm-shrink-0{
+ flex-shrink: 0 !important;
+ }
+
+ .flex-sm-shrink-1{
+ flex-shrink: 1 !important;
+ }
+
+ .flex-sm-wrap{
+ flex-wrap: wrap !important;
+ }
+
+ .flex-sm-nowrap{
+ flex-wrap: nowrap !important;
+ }
+
+ .flex-sm-wrap-reverse{
+ flex-wrap: wrap-reverse !important;
+ }
+
+ .justify-content-sm-start{
+ justify-content: flex-start !important;
+ }
+
+ .justify-content-sm-end{
+ justify-content: flex-end !important;
+ }
+
+ .justify-content-sm-center{
+ justify-content: center !important;
+ }
+
+ .justify-content-sm-between{
+ justify-content: space-between !important;
+ }
+
+ .justify-content-sm-around{
+ justify-content: space-around !important;
+ }
+
+ .justify-content-sm-evenly{
+ justify-content: space-evenly !important;
+ }
+
+ .align-items-sm-start{
+ align-items: flex-start !important;
+ }
+
+ .align-items-sm-end{
+ align-items: flex-end !important;
+ }
+
+ .align-items-sm-center{
+ align-items: center !important;
+ }
+
+ .align-items-sm-baseline{
+ align-items: baseline !important;
+ }
+
+ .align-items-sm-stretch{
+ align-items: stretch !important;
+ }
+
+ .align-content-sm-start{
+ align-content: flex-start !important;
+ }
+
+ .align-content-sm-end{
+ align-content: flex-end !important;
+ }
+
+ .align-content-sm-center{
+ align-content: center !important;
+ }
+
+ .align-content-sm-between{
+ align-content: space-between !important;
+ }
+
+ .align-content-sm-around{
+ align-content: space-around !important;
+ }
+
+ .align-content-sm-stretch{
+ align-content: stretch !important;
+ }
+
+ .align-self-sm-auto{
+ align-self: auto !important;
+ }
+
+ .align-self-sm-start{
+ align-self: flex-start !important;
+ }
+
+ .align-self-sm-end{
+ align-self: flex-end !important;
+ }
+
+ .align-self-sm-center{
+ align-self: center !important;
+ }
+
+ .align-self-sm-baseline{
+ align-self: baseline !important;
+ }
+
+ .align-self-sm-stretch{
+ align-self: stretch !important;
+ }
+
+ .order-sm-first{
+ order: -1 !important;
+ }
+
+ .order-sm-0{
+ order: 0 !important;
+ }
+
+ .order-sm-1{
+ order: 1 !important;
+ }
+
+ .order-sm-2{
+ order: 2 !important;
+ }
+
+ .order-sm-3{
+ order: 3 !important;
+ }
+
+ .order-sm-4{
+ order: 4 !important;
+ }
+
+ .order-sm-5{
+ order: 5 !important;
+ }
+
+ .order-sm-last{
+ order: 6 !important;
+ }
+
+ .m-sm-0{
+ margin: 0 !important;
+ }
+
+ .m-sm-1{
+ margin: 0.25rem !important;
+ }
+
+ .m-sm-2{
+ margin: 0.5rem !important;
+ }
+
+ .m-sm-3{
+ margin: 1rem !important;
+ }
+
+ .m-sm-4{
+ margin: 1.5rem !important;
+ }
+
+ .m-sm-5{
+ margin: 3rem !important;
+ }
+
+ .m-sm-auto{
+ margin: auto !important;
+ }
+
+ .mx-sm-0{
+ margin-right: 0 !important;
+ margin-left: 0 !important;
+ }
+
+ .mx-sm-1{
+ margin-right: 0.25rem !important;
+ margin-left: 0.25rem !important;
+ }
+
+ .mx-sm-2{
+ margin-right: 0.5rem !important;
+ margin-left: 0.5rem !important;
+ }
+
+ .mx-sm-3{
+ margin-right: 1rem !important;
+ margin-left: 1rem !important;
+ }
+
+ .mx-sm-4{
+ margin-right: 1.5rem !important;
+ margin-left: 1.5rem !important;
+ }
+
+ .mx-sm-5{
+ margin-right: 3rem !important;
+ margin-left: 3rem !important;
+ }
+
+ .mx-sm-auto{
+ margin-right: auto !important;
+ margin-left: auto !important;
+ }
+
+ .my-sm-0{
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+ }
+
+ .my-sm-1{
+ margin-top: 0.25rem !important;
+ margin-bottom: 0.25rem !important;
+ }
+
+ .my-sm-2{
+ margin-top: 0.5rem !important;
+ margin-bottom: 0.5rem !important;
+ }
+
+ .my-sm-3{
+ margin-top: 1rem !important;
+ margin-bottom: 1rem !important;
+ }
+
+ .my-sm-4{
+ margin-top: 1.5rem !important;
+ margin-bottom: 1.5rem !important;
+ }
+
+ .my-sm-5{
+ margin-top: 3rem !important;
+ margin-bottom: 3rem !important;
+ }
+
+ .my-sm-auto{
+ margin-top: auto !important;
+ margin-bottom: auto !important;
+ }
+
+ .mt-sm-0{
+ margin-top: 0 !important;
+ }
+
+ .mt-sm-1{
+ margin-top: 0.25rem !important;
+ }
+
+ .mt-sm-2{
+ margin-top: 0.5rem !important;
+ }
+
+ .mt-sm-3{
+ margin-top: 1rem !important;
+ }
+
+ .mt-sm-4{
+ margin-top: 1.5rem !important;
+ }
+
+ .mt-sm-5{
+ margin-top: 3rem !important;
+ }
+
+ .mt-sm-auto{
+ margin-top: auto !important;
+ }
+
+ .me-sm-0{
+ margin-right: 0 !important;
+ }
+
+ .me-sm-1{
+ margin-right: 0.25rem !important;
+ }
+
+ .me-sm-2{
+ margin-right: 0.5rem !important;
+ }
+
+ .me-sm-3{
+ margin-right: 1rem !important;
+ }
+
+ .me-sm-4{
+ margin-right: 1.5rem !important;
+ }
+
+ .me-sm-5{
+ margin-right: 3rem !important;
+ }
+
+ .me-sm-auto{
+ margin-right: auto !important;
+ }
+
+ .mb-sm-0{
+ margin-bottom: 0 !important;
+ }
+
+ .mb-sm-1{
+ margin-bottom: 0.25rem !important;
+ }
+
+ .mb-sm-2{
+ margin-bottom: 0.5rem !important;
+ }
+
+ .mb-sm-3{
+ margin-bottom: 1rem !important;
+ }
+
+ .mb-sm-4{
+ margin-bottom: 1.5rem !important;
+ }
+
+ .mb-sm-5{
+ margin-bottom: 3rem !important;
+ }
+
+ .mb-sm-auto{
+ margin-bottom: auto !important;
+ }
+
+ .ms-sm-0{
+ margin-left: 0 !important;
+ }
+
+ .ms-sm-1{
+ margin-left: 0.25rem !important;
+ }
+
+ .ms-sm-2{
+ margin-left: 0.5rem !important;
+ }
+
+ .ms-sm-3{
+ margin-left: 1rem !important;
+ }
+
+ .ms-sm-4{
+ margin-left: 1.5rem !important;
+ }
+
+ .ms-sm-5{
+ margin-left: 3rem !important;
+ }
+
+ .ms-sm-auto{
+ margin-left: auto !important;
+ }
+
+ .p-sm-0{
+ padding: 0 !important;
+ }
+
+ .p-sm-1{
+ padding: 0.25rem !important;
+ }
+
+ .p-sm-2{
+ padding: 0.5rem !important;
+ }
+
+ .p-sm-3{
+ padding: 1rem !important;
+ }
+
+ .p-sm-4{
+ padding: 1.5rem !important;
+ }
+
+ .p-sm-5{
+ padding: 3rem !important;
+ }
+
+ .px-sm-0{
+ padding-right: 0 !important;
+ padding-left: 0 !important;
+ }
+
+ .px-sm-1{
+ padding-right: 0.25rem !important;
+ padding-left: 0.25rem !important;
+ }
+
+ .px-sm-2{
+ padding-right: 0.5rem !important;
+ padding-left: 0.5rem !important;
+ }
+
+ .px-sm-3{
+ padding-right: 1rem !important;
+ padding-left: 1rem !important;
+ }
+
+ .px-sm-4{
+ padding-right: 1.5rem !important;
+ padding-left: 1.5rem !important;
+ }
+
+ .px-sm-5{
+ padding-right: 3rem !important;
+ padding-left: 3rem !important;
+ }
+
+ .py-sm-0{
+ padding-top: 0 !important;
+ padding-bottom: 0 !important;
+ }
+
+ .py-sm-1{
+ padding-top: 0.25rem !important;
+ padding-bottom: 0.25rem !important;
+ }
+
+ .py-sm-2{
+ padding-top: 0.5rem !important;
+ padding-bottom: 0.5rem !important;
+ }
+
+ .py-sm-3{
+ padding-top: 1rem !important;
+ padding-bottom: 1rem !important;
+ }
+
+ .py-sm-4{
+ padding-top: 1.5rem !important;
+ padding-bottom: 1.5rem !important;
+ }
+
+ .py-sm-5{
+ padding-top: 3rem !important;
+ padding-bottom: 3rem !important;
+ }
+
+ .pt-sm-0{
+ padding-top: 0 !important;
+ }
+
+ .pt-sm-1{
+ padding-top: 0.25rem !important;
+ }
+
+ .pt-sm-2{
+ padding-top: 0.5rem !important;
+ }
+
+ .pt-sm-3{
+ padding-top: 1rem !important;
+ }
+
+ .pt-sm-4{
+ padding-top: 1.5rem !important;
+ }
+
+ .pt-sm-5{
+ padding-top: 3rem !important;
+ }
+
+ .pe-sm-0{
+ padding-right: 0 !important;
+ }
+
+ .pe-sm-1{
+ padding-right: 0.25rem !important;
+ }
+
+ .pe-sm-2{
+ padding-right: 0.5rem !important;
+ }
+
+ .pe-sm-3{
+ padding-right: 1rem !important;
+ }
+
+ .pe-sm-4{
+ padding-right: 1.5rem !important;
+ }
+
+ .pe-sm-5{
+ padding-right: 3rem !important;
+ }
+
+ .pb-sm-0{
+ padding-bottom: 0 !important;
+ }
+
+ .pb-sm-1{
+ padding-bottom: 0.25rem !important;
+ }
+
+ .pb-sm-2{
+ padding-bottom: 0.5rem !important;
+ }
+
+ .pb-sm-3{
+ padding-bottom: 1rem !important;
+ }
+
+ .pb-sm-4{
+ padding-bottom: 1.5rem !important;
+ }
+
+ .pb-sm-5{
+ padding-bottom: 3rem !important;
+ }
+
+ .ps-sm-0{
+ padding-left: 0 !important;
+ }
+
+ .ps-sm-1{
+ padding-left: 0.25rem !important;
+ }
+
+ .ps-sm-2{
+ padding-left: 0.5rem !important;
+ }
+
+ .ps-sm-3{
+ padding-left: 1rem !important;
+ }
+
+ .ps-sm-4{
+ padding-left: 1.5rem !important;
+ }
+
+ .ps-sm-5{
+ padding-left: 3rem !important;
+ }
+}
+
+@media (min-width: 768px){
+ .d-md-inline{
+ display: inline !important;
+ }
+
+ .d-md-inline-block{
+ display: inline-block !important;
+ }
+
+ .d-md-block{
+ display: block !important;
+ }
+
+ .d-md-grid{
+ display: grid !important;
+ }
+
+ .d-md-table{
+ display: table !important;
+ }
+
+ .d-md-table-row{
+ display: table-row !important;
+ }
+
+ .d-md-table-cell{
+ display: table-cell !important;
+ }
+
+ .d-md-flex{
+ display: flex !important;
+ }
+
+ .d-md-inline-flex{
+ display: inline-flex !important;
+ }
+
+ .d-md-none{
+ display: none !important;
+ }
+
+ .flex-md-fill{
+ flex: 1 1 auto !important;
+ }
+
+ .flex-md-row{
+ flex-direction: row !important;
+ }
+
+ .flex-md-column{
+ flex-direction: column !important;
+ }
+
+ .flex-md-row-reverse{
+ flex-direction: row-reverse !important;
+ }
+
+ .flex-md-column-reverse{
+ flex-direction: column-reverse !important;
+ }
+
+ .flex-md-grow-0{
+ flex-grow: 0 !important;
+ }
+
+ .flex-md-grow-1{
+ flex-grow: 1 !important;
+ }
+
+ .flex-md-shrink-0{
+ flex-shrink: 0 !important;
+ }
+
+ .flex-md-shrink-1{
+ flex-shrink: 1 !important;
+ }
+
+ .flex-md-wrap{
+ flex-wrap: wrap !important;
+ }
+
+ .flex-md-nowrap{
+ flex-wrap: nowrap !important;
+ }
+
+ .flex-md-wrap-reverse{
+ flex-wrap: wrap-reverse !important;
+ }
+
+ .justify-content-md-start{
+ justify-content: flex-start !important;
+ }
+
+ .justify-content-md-end{
+ justify-content: flex-end !important;
+ }
+
+ .justify-content-md-center{
+ justify-content: center !important;
+ }
+
+ .justify-content-md-between{
+ justify-content: space-between !important;
+ }
+
+ .justify-content-md-around{
+ justify-content: space-around !important;
+ }
+
+ .justify-content-md-evenly{
+ justify-content: space-evenly !important;
+ }
+
+ .align-items-md-start{
+ align-items: flex-start !important;
+ }
+
+ .align-items-md-end{
+ align-items: flex-end !important;
+ }
+
+ .align-items-md-center{
+ align-items: center !important;
+ }
+
+ .align-items-md-baseline{
+ align-items: baseline !important;
+ }
+
+ .align-items-md-stretch{
+ align-items: stretch !important;
+ }
+
+ .align-content-md-start{
+ align-content: flex-start !important;
+ }
+
+ .align-content-md-end{
+ align-content: flex-end !important;
+ }
+
+ .align-content-md-center{
+ align-content: center !important;
+ }
+
+ .align-content-md-between{
+ align-content: space-between !important;
+ }
+
+ .align-content-md-around{
+ align-content: space-around !important;
+ }
+
+ .align-content-md-stretch{
+ align-content: stretch !important;
+ }
+
+ .align-self-md-auto{
+ align-self: auto !important;
+ }
+
+ .align-self-md-start{
+ align-self: flex-start !important;
+ }
+
+ .align-self-md-end{
+ align-self: flex-end !important;
+ }
+
+ .align-self-md-center{
+ align-self: center !important;
+ }
+
+ .align-self-md-baseline{
+ align-self: baseline !important;
+ }
+
+ .align-self-md-stretch{
+ align-self: stretch !important;
+ }
+
+ .order-md-first{
+ order: -1 !important;
+ }
+
+ .order-md-0{
+ order: 0 !important;
+ }
+
+ .order-md-1{
+ order: 1 !important;
+ }
+
+ .order-md-2{
+ order: 2 !important;
+ }
+
+ .order-md-3{
+ order: 3 !important;
+ }
+
+ .order-md-4{
+ order: 4 !important;
+ }
+
+ .order-md-5{
+ order: 5 !important;
+ }
+
+ .order-md-last{
+ order: 6 !important;
+ }
+
+ .m-md-0{
+ margin: 0 !important;
+ }
+
+ .m-md-1{
+ margin: 0.25rem !important;
+ }
+
+ .m-md-2{
+ margin: 0.5rem !important;
+ }
+
+ .m-md-3{
+ margin: 1rem !important;
+ }
+
+ .m-md-4{
+ margin: 1.5rem !important;
+ }
+
+ .m-md-5{
+ margin: 3rem !important;
+ }
+
+ .m-md-auto{
+ margin: auto !important;
+ }
+
+ .mx-md-0{
+ margin-right: 0 !important;
+ margin-left: 0 !important;
+ }
+
+ .mx-md-1{
+ margin-right: 0.25rem !important;
+ margin-left: 0.25rem !important;
+ }
+
+ .mx-md-2{
+ margin-right: 0.5rem !important;
+ margin-left: 0.5rem !important;
+ }
+
+ .mx-md-3{
+ margin-right: 1rem !important;
+ margin-left: 1rem !important;
+ }
+
+ .mx-md-4{
+ margin-right: 1.5rem !important;
+ margin-left: 1.5rem !important;
+ }
+
+ .mx-md-5{
+ margin-right: 3rem !important;
+ margin-left: 3rem !important;
+ }
+
+ .mx-md-auto{
+ margin-right: auto !important;
+ margin-left: auto !important;
+ }
+
+ .my-md-0{
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+ }
+
+ .my-md-1{
+ margin-top: 0.25rem !important;
+ margin-bottom: 0.25rem !important;
+ }
+
+ .my-md-2{
+ margin-top: 0.5rem !important;
+ margin-bottom: 0.5rem !important;
+ }
+
+ .my-md-3{
+ margin-top: 1rem !important;
+ margin-bottom: 1rem !important;
+ }
+
+ .my-md-4{
+ margin-top: 1.5rem !important;
+ margin-bottom: 1.5rem !important;
+ }
+
+ .my-md-5{
+ margin-top: 3rem !important;
+ margin-bottom: 3rem !important;
+ }
+
+ .my-md-auto{
+ margin-top: auto !important;
+ margin-bottom: auto !important;
+ }
+
+ .mt-md-0{
+ margin-top: 0 !important;
+ }
+
+ .mt-md-1{
+ margin-top: 0.25rem !important;
+ }
+
+ .mt-md-2{
+ margin-top: 0.5rem !important;
+ }
+
+ .mt-md-3{
+ margin-top: 1rem !important;
+ }
+
+ .mt-md-4{
+ margin-top: 1.5rem !important;
+ }
+
+ .mt-md-5{
+ margin-top: 3rem !important;
+ }
+
+ .mt-md-auto{
+ margin-top: auto !important;
+ }
+
+ .me-md-0{
+ margin-right: 0 !important;
+ }
+
+ .me-md-1{
+ margin-right: 0.25rem !important;
+ }
+
+ .me-md-2{
+ margin-right: 0.5rem !important;
+ }
+
+ .me-md-3{
+ margin-right: 1rem !important;
+ }
+
+ .me-md-4{
+ margin-right: 1.5rem !important;
+ }
+
+ .me-md-5{
+ margin-right: 3rem !important;
+ }
+
+ .me-md-auto{
+ margin-right: auto !important;
+ }
+
+ .mb-md-0{
+ margin-bottom: 0 !important;
+ }
+
+ .mb-md-1{
+ margin-bottom: 0.25rem !important;
+ }
+
+ .mb-md-2{
+ margin-bottom: 0.5rem !important;
+ }
+
+ .mb-md-3{
+ margin-bottom: 1rem !important;
+ }
+
+ .mb-md-4{
+ margin-bottom: 1.5rem !important;
+ }
+
+ .mb-md-5{
+ margin-bottom: 3rem !important;
+ }
+
+ .mb-md-auto{
+ margin-bottom: auto !important;
+ }
+
+ .ms-md-0{
+ margin-left: 0 !important;
+ }
+
+ .ms-md-1{
+ margin-left: 0.25rem !important;
+ }
+
+ .ms-md-2{
+ margin-left: 0.5rem !important;
+ }
+
+ .ms-md-3{
+ margin-left: 1rem !important;
+ }
+
+ .ms-md-4{
+ margin-left: 1.5rem !important;
+ }
+
+ .ms-md-5{
+ margin-left: 3rem !important;
+ }
+
+ .ms-md-auto{
+ margin-left: auto !important;
+ }
+
+ .p-md-0{
+ padding: 0 !important;
+ }
+
+ .p-md-1{
+ padding: 0.25rem !important;
+ }
+
+ .p-md-2{
+ padding: 0.5rem !important;
+ }
+
+ .p-md-3{
+ padding: 1rem !important;
+ }
+
+ .p-md-4{
+ padding: 1.5rem !important;
+ }
+
+ .p-md-5{
+ padding: 3rem !important;
+ }
+
+ .px-md-0{
+ padding-right: 0 !important;
+ padding-left: 0 !important;
+ }
+
+ .px-md-1{
+ padding-right: 0.25rem !important;
+ padding-left: 0.25rem !important;
+ }
+
+ .px-md-2{
+ padding-right: 0.5rem !important;
+ padding-left: 0.5rem !important;
+ }
+
+ .px-md-3{
+ padding-right: 1rem !important;
+ padding-left: 1rem !important;
+ }
+
+ .px-md-4{
+ padding-right: 1.5rem !important;
+ padding-left: 1.5rem !important;
+ }
+
+ .px-md-5{
+ padding-right: 3rem !important;
+ padding-left: 3rem !important;
+ }
+
+ .py-md-0{
+ padding-top: 0 !important;
+ padding-bottom: 0 !important;
+ }
+
+ .py-md-1{
+ padding-top: 0.25rem !important;
+ padding-bottom: 0.25rem !important;
+ }
+
+ .py-md-2{
+ padding-top: 0.5rem !important;
+ padding-bottom: 0.5rem !important;
+ }
+
+ .py-md-3{
+ padding-top: 1rem !important;
+ padding-bottom: 1rem !important;
+ }
+
+ .py-md-4{
+ padding-top: 1.5rem !important;
+ padding-bottom: 1.5rem !important;
+ }
+
+ .py-md-5{
+ padding-top: 3rem !important;
+ padding-bottom: 3rem !important;
+ }
+
+ .pt-md-0{
+ padding-top: 0 !important;
+ }
+
+ .pt-md-1{
+ padding-top: 0.25rem !important;
+ }
+
+ .pt-md-2{
+ padding-top: 0.5rem !important;
+ }
+
+ .pt-md-3{
+ padding-top: 1rem !important;
+ }
+
+ .pt-md-4{
+ padding-top: 1.5rem !important;
+ }
+
+ .pt-md-5{
+ padding-top: 3rem !important;
+ }
+
+ .pe-md-0{
+ padding-right: 0 !important;
+ }
+
+ .pe-md-1{
+ padding-right: 0.25rem !important;
+ }
+
+ .pe-md-2{
+ padding-right: 0.5rem !important;
+ }
+
+ .pe-md-3{
+ padding-right: 1rem !important;
+ }
+
+ .pe-md-4{
+ padding-right: 1.5rem !important;
+ }
+
+ .pe-md-5{
+ padding-right: 3rem !important;
+ }
+
+ .pb-md-0{
+ padding-bottom: 0 !important;
+ }
+
+ .pb-md-1{
+ padding-bottom: 0.25rem !important;
+ }
+
+ .pb-md-2{
+ padding-bottom: 0.5rem !important;
+ }
+
+ .pb-md-3{
+ padding-bottom: 1rem !important;
+ }
+
+ .pb-md-4{
+ padding-bottom: 1.5rem !important;
+ }
+
+ .pb-md-5{
+ padding-bottom: 3rem !important;
+ }
+
+ .ps-md-0{
+ padding-left: 0 !important;
+ }
+
+ .ps-md-1{
+ padding-left: 0.25rem !important;
+ }
+
+ .ps-md-2{
+ padding-left: 0.5rem !important;
+ }
+
+ .ps-md-3{
+ padding-left: 1rem !important;
+ }
+
+ .ps-md-4{
+ padding-left: 1.5rem !important;
+ }
+
+ .ps-md-5{
+ padding-left: 3rem !important;
+ }
+}
+
+@media (min-width: 992px){
+ .d-lg-inline{
+ display: inline !important;
+ }
+
+ .d-lg-inline-block{
+ display: inline-block !important;
+ }
+
+ .d-lg-block{
+ display: block !important;
+ }
+
+ .d-lg-grid{
+ display: grid !important;
+ }
+
+ .d-lg-table{
+ display: table !important;
+ }
+
+ .d-lg-table-row{
+ display: table-row !important;
+ }
+
+ .d-lg-table-cell{
+ display: table-cell !important;
+ }
+
+ .d-lg-flex{
+ display: flex !important;
+ }
+
+ .d-lg-inline-flex{
+ display: inline-flex !important;
+ }
+
+ .d-lg-none{
+ display: none !important;
+ }
+
+ .flex-lg-fill{
+ flex: 1 1 auto !important;
+ }
+
+ .flex-lg-row{
+ flex-direction: row !important;
+ }
+
+ .flex-lg-column{
+ flex-direction: column !important;
+ }
+
+ .flex-lg-row-reverse{
+ flex-direction: row-reverse !important;
+ }
+
+ .flex-lg-column-reverse{
+ flex-direction: column-reverse !important;
+ }
+
+ .flex-lg-grow-0{
+ flex-grow: 0 !important;
+ }
+
+ .flex-lg-grow-1{
+ flex-grow: 1 !important;
+ }
+
+ .flex-lg-shrink-0{
+ flex-shrink: 0 !important;
+ }
+
+ .flex-lg-shrink-1{
+ flex-shrink: 1 !important;
+ }
+
+ .flex-lg-wrap{
+ flex-wrap: wrap !important;
+ }
+
+ .flex-lg-nowrap{
+ flex-wrap: nowrap !important;
+ }
+
+ .flex-lg-wrap-reverse{
+ flex-wrap: wrap-reverse !important;
+ }
+
+ .justify-content-lg-start{
+ justify-content: flex-start !important;
+ }
+
+ .justify-content-lg-end{
+ justify-content: flex-end !important;
+ }
+
+ .justify-content-lg-center{
+ justify-content: center !important;
+ }
+
+ .justify-content-lg-between{
+ justify-content: space-between !important;
+ }
+
+ .justify-content-lg-around{
+ justify-content: space-around !important;
+ }
+
+ .justify-content-lg-evenly{
+ justify-content: space-evenly !important;
+ }
+
+ .align-items-lg-start{
+ align-items: flex-start !important;
+ }
+
+ .align-items-lg-end{
+ align-items: flex-end !important;
+ }
+
+ .align-items-lg-center{
+ align-items: center !important;
+ }
+
+ .align-items-lg-baseline{
+ align-items: baseline !important;
+ }
+
+ .align-items-lg-stretch{
+ align-items: stretch !important;
+ }
+
+ .align-content-lg-start{
+ align-content: flex-start !important;
+ }
+
+ .align-content-lg-end{
+ align-content: flex-end !important;
+ }
+
+ .align-content-lg-center{
+ align-content: center !important;
+ }
+
+ .align-content-lg-between{
+ align-content: space-between !important;
+ }
+
+ .align-content-lg-around{
+ align-content: space-around !important;
+ }
+
+ .align-content-lg-stretch{
+ align-content: stretch !important;
+ }
+
+ .align-self-lg-auto{
+ align-self: auto !important;
+ }
+
+ .align-self-lg-start{
+ align-self: flex-start !important;
+ }
+
+ .align-self-lg-end{
+ align-self: flex-end !important;
+ }
+
+ .align-self-lg-center{
+ align-self: center !important;
+ }
+
+ .align-self-lg-baseline{
+ align-self: baseline !important;
+ }
+
+ .align-self-lg-stretch{
+ align-self: stretch !important;
+ }
+
+ .order-lg-first{
+ order: -1 !important;
+ }
+
+ .order-lg-0{
+ order: 0 !important;
+ }
+
+ .order-lg-1{
+ order: 1 !important;
+ }
+
+ .order-lg-2{
+ order: 2 !important;
+ }
+
+ .order-lg-3{
+ order: 3 !important;
+ }
+
+ .order-lg-4{
+ order: 4 !important;
+ }
+
+ .order-lg-5{
+ order: 5 !important;
+ }
+
+ .order-lg-last{
+ order: 6 !important;
+ }
+
+ .m-lg-0{
+ margin: 0 !important;
+ }
+
+ .m-lg-1{
+ margin: 0.25rem !important;
+ }
+
+ .m-lg-2{
+ margin: 0.5rem !important;
+ }
+
+ .m-lg-3{
+ margin: 1rem !important;
+ }
+
+ .m-lg-4{
+ margin: 1.5rem !important;
+ }
+
+ .m-lg-5{
+ margin: 3rem !important;
+ }
+
+ .m-lg-auto{
+ margin: auto !important;
+ }
+
+ .mx-lg-0{
+ margin-right: 0 !important;
+ margin-left: 0 !important;
+ }
+
+ .mx-lg-1{
+ margin-right: 0.25rem !important;
+ margin-left: 0.25rem !important;
+ }
+
+ .mx-lg-2{
+ margin-right: 0.5rem !important;
+ margin-left: 0.5rem !important;
+ }
+
+ .mx-lg-3{
+ margin-right: 1rem !important;
+ margin-left: 1rem !important;
+ }
+
+ .mx-lg-4{
+ margin-right: 1.5rem !important;
+ margin-left: 1.5rem !important;
+ }
+
+ .mx-lg-5{
+ margin-right: 3rem !important;
+ margin-left: 3rem !important;
+ }
+
+ .mx-lg-auto{
+ margin-right: auto !important;
+ margin-left: auto !important;
+ }
+
+ .my-lg-0{
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+ }
+
+ .my-lg-1{
+ margin-top: 0.25rem !important;
+ margin-bottom: 0.25rem !important;
+ }
+
+ .my-lg-2{
+ margin-top: 0.5rem !important;
+ margin-bottom: 0.5rem !important;
+ }
+
+ .my-lg-3{
+ margin-top: 1rem !important;
+ margin-bottom: 1rem !important;
+ }
+
+ .my-lg-4{
+ margin-top: 1.5rem !important;
+ margin-bottom: 1.5rem !important;
+ }
+
+ .my-lg-5{
+ margin-top: 3rem !important;
+ margin-bottom: 3rem !important;
+ }
+
+ .my-lg-auto{
+ margin-top: auto !important;
+ margin-bottom: auto !important;
+ }
+
+ .mt-lg-0{
+ margin-top: 0 !important;
+ }
+
+ .mt-lg-1{
+ margin-top: 0.25rem !important;
+ }
+
+ .mt-lg-2{
+ margin-top: 0.5rem !important;
+ }
+
+ .mt-lg-3{
+ margin-top: 1rem !important;
+ }
+
+ .mt-lg-4{
+ margin-top: 1.5rem !important;
+ }
+
+ .mt-lg-5{
+ margin-top: 3rem !important;
+ }
+
+ .mt-lg-auto{
+ margin-top: auto !important;
+ }
+
+ .me-lg-0{
+ margin-right: 0 !important;
+ }
+
+ .me-lg-1{
+ margin-right: 0.25rem !important;
+ }
+
+ .me-lg-2{
+ margin-right: 0.5rem !important;
+ }
+
+ .me-lg-3{
+ margin-right: 1rem !important;
+ }
+
+ .me-lg-4{
+ margin-right: 1.5rem !important;
+ }
+
+ .me-lg-5{
+ margin-right: 3rem !important;
+ }
+
+ .me-lg-auto{
+ margin-right: auto !important;
+ }
+
+ .mb-lg-0{
+ margin-bottom: 0 !important;
+ }
+
+ .mb-lg-1{
+ margin-bottom: 0.25rem !important;
+ }
+
+ .mb-lg-2{
+ margin-bottom: 0.5rem !important;
+ }
+
+ .mb-lg-3{
+ margin-bottom: 1rem !important;
+ }
+
+ .mb-lg-4{
+ margin-bottom: 1.5rem !important;
+ }
+
+ .mb-lg-5{
+ margin-bottom: 3rem !important;
+ }
+
+ .mb-lg-auto{
+ margin-bottom: auto !important;
+ }
+
+ .ms-lg-0{
+ margin-left: 0 !important;
+ }
+
+ .ms-lg-1{
+ margin-left: 0.25rem !important;
+ }
+
+ .ms-lg-2{
+ margin-left: 0.5rem !important;
+ }
+
+ .ms-lg-3{
+ margin-left: 1rem !important;
+ }
+
+ .ms-lg-4{
+ margin-left: 1.5rem !important;
+ }
+
+ .ms-lg-5{
+ margin-left: 3rem !important;
+ }
+
+ .ms-lg-auto{
+ margin-left: auto !important;
+ }
+
+ .p-lg-0{
+ padding: 0 !important;
+ }
+
+ .p-lg-1{
+ padding: 0.25rem !important;
+ }
+
+ .p-lg-2{
+ padding: 0.5rem !important;
+ }
+
+ .p-lg-3{
+ padding: 1rem !important;
+ }
+
+ .p-lg-4{
+ padding: 1.5rem !important;
+ }
+
+ .p-lg-5{
+ padding: 3rem !important;
+ }
+
+ .px-lg-0{
+ padding-right: 0 !important;
+ padding-left: 0 !important;
+ }
+
+ .px-lg-1{
+ padding-right: 0.25rem !important;
+ padding-left: 0.25rem !important;
+ }
+
+ .px-lg-2{
+ padding-right: 0.5rem !important;
+ padding-left: 0.5rem !important;
+ }
+
+ .px-lg-3{
+ padding-right: 1rem !important;
+ padding-left: 1rem !important;
+ }
+
+ .px-lg-4{
+ padding-right: 1.5rem !important;
+ padding-left: 1.5rem !important;
+ }
+
+ .px-lg-5{
+ padding-right: 3rem !important;
+ padding-left: 3rem !important;
+ }
+
+ .py-lg-0{
+ padding-top: 0 !important;
+ padding-bottom: 0 !important;
+ }
+
+ .py-lg-1{
+ padding-top: 0.25rem !important;
+ padding-bottom: 0.25rem !important;
+ }
+
+ .py-lg-2{
+ padding-top: 0.5rem !important;
+ padding-bottom: 0.5rem !important;
+ }
+
+ .py-lg-3{
+ padding-top: 1rem !important;
+ padding-bottom: 1rem !important;
+ }
+
+ .py-lg-4{
+ padding-top: 1.5rem !important;
+ padding-bottom: 1.5rem !important;
+ }
+
+ .py-lg-5{
+ padding-top: 3rem !important;
+ padding-bottom: 3rem !important;
+ }
+
+ .pt-lg-0{
+ padding-top: 0 !important;
+ }
+
+ .pt-lg-1{
+ padding-top: 0.25rem !important;
+ }
+
+ .pt-lg-2{
+ padding-top: 0.5rem !important;
+ }
+
+ .pt-lg-3{
+ padding-top: 1rem !important;
+ }
+
+ .pt-lg-4{
+ padding-top: 1.5rem !important;
+ }
+
+ .pt-lg-5{
+ padding-top: 3rem !important;
+ }
+
+ .pe-lg-0{
+ padding-right: 0 !important;
+ }
+
+ .pe-lg-1{
+ padding-right: 0.25rem !important;
+ }
+
+ .pe-lg-2{
+ padding-right: 0.5rem !important;
+ }
+
+ .pe-lg-3{
+ padding-right: 1rem !important;
+ }
+
+ .pe-lg-4{
+ padding-right: 1.5rem !important;
+ }
+
+ .pe-lg-5{
+ padding-right: 3rem !important;
+ }
+
+ .pb-lg-0{
+ padding-bottom: 0 !important;
+ }
+
+ .pb-lg-1{
+ padding-bottom: 0.25rem !important;
+ }
+
+ .pb-lg-2{
+ padding-bottom: 0.5rem !important;
+ }
+
+ .pb-lg-3{
+ padding-bottom: 1rem !important;
+ }
+
+ .pb-lg-4{
+ padding-bottom: 1.5rem !important;
+ }
+
+ .pb-lg-5{
+ padding-bottom: 3rem !important;
+ }
+
+ .ps-lg-0{
+ padding-left: 0 !important;
+ }
+
+ .ps-lg-1{
+ padding-left: 0.25rem !important;
+ }
+
+ .ps-lg-2{
+ padding-left: 0.5rem !important;
+ }
+
+ .ps-lg-3{
+ padding-left: 1rem !important;
+ }
+
+ .ps-lg-4{
+ padding-left: 1.5rem !important;
+ }
+
+ .ps-lg-5{
+ padding-left: 3rem !important;
+ }
+}
+
+@media (min-width: 1200px){
+ .d-xl-inline{
+ display: inline !important;
+ }
+
+ .d-xl-inline-block{
+ display: inline-block !important;
+ }
+
+ .d-xl-block{
+ display: block !important;
+ }
+
+ .d-xl-grid{
+ display: grid !important;
+ }
+
+ .d-xl-table{
+ display: table !important;
+ }
+
+ .d-xl-table-row{
+ display: table-row !important;
+ }
+
+ .d-xl-table-cell{
+ display: table-cell !important;
+ }
+
+ .d-xl-flex{
+ display: flex !important;
+ }
+
+ .d-xl-inline-flex{
+ display: inline-flex !important;
+ }
+
+ .d-xl-none{
+ display: none !important;
+ }
+
+ .flex-xl-fill{
+ flex: 1 1 auto !important;
+ }
+
+ .flex-xl-row{
+ flex-direction: row !important;
+ }
+
+ .flex-xl-column{
+ flex-direction: column !important;
+ }
+
+ .flex-xl-row-reverse{
+ flex-direction: row-reverse !important;
+ }
+
+ .flex-xl-column-reverse{
+ flex-direction: column-reverse !important;
+ }
+
+ .flex-xl-grow-0{
+ flex-grow: 0 !important;
+ }
+
+ .flex-xl-grow-1{
+ flex-grow: 1 !important;
+ }
+
+ .flex-xl-shrink-0{
+ flex-shrink: 0 !important;
+ }
+
+ .flex-xl-shrink-1{
+ flex-shrink: 1 !important;
+ }
+
+ .flex-xl-wrap{
+ flex-wrap: wrap !important;
+ }
+
+ .flex-xl-nowrap{
+ flex-wrap: nowrap !important;
+ }
+
+ .flex-xl-wrap-reverse{
+ flex-wrap: wrap-reverse !important;
+ }
+
+ .justify-content-xl-start{
+ justify-content: flex-start !important;
+ }
+
+ .justify-content-xl-end{
+ justify-content: flex-end !important;
+ }
+
+ .justify-content-xl-center{
+ justify-content: center !important;
+ }
+
+ .justify-content-xl-between{
+ justify-content: space-between !important;
+ }
+
+ .justify-content-xl-around{
+ justify-content: space-around !important;
+ }
+
+ .justify-content-xl-evenly{
+ justify-content: space-evenly !important;
+ }
+
+ .align-items-xl-start{
+ align-items: flex-start !important;
+ }
+
+ .align-items-xl-end{
+ align-items: flex-end !important;
+ }
+
+ .align-items-xl-center{
+ align-items: center !important;
+ }
+
+ .align-items-xl-baseline{
+ align-items: baseline !important;
+ }
+
+ .align-items-xl-stretch{
+ align-items: stretch !important;
+ }
+
+ .align-content-xl-start{
+ align-content: flex-start !important;
+ }
+
+ .align-content-xl-end{
+ align-content: flex-end !important;
+ }
+
+ .align-content-xl-center{
+ align-content: center !important;
+ }
+
+ .align-content-xl-between{
+ align-content: space-between !important;
+ }
+
+ .align-content-xl-around{
+ align-content: space-around !important;
+ }
+
+ .align-content-xl-stretch{
+ align-content: stretch !important;
+ }
+
+ .align-self-xl-auto{
+ align-self: auto !important;
+ }
+
+ .align-self-xl-start{
+ align-self: flex-start !important;
+ }
+
+ .align-self-xl-end{
+ align-self: flex-end !important;
+ }
+
+ .align-self-xl-center{
+ align-self: center !important;
+ }
+
+ .align-self-xl-baseline{
+ align-self: baseline !important;
+ }
+
+ .align-self-xl-stretch{
+ align-self: stretch !important;
+ }
+
+ .order-xl-first{
+ order: -1 !important;
+ }
+
+ .order-xl-0{
+ order: 0 !important;
+ }
+
+ .order-xl-1{
+ order: 1 !important;
+ }
+
+ .order-xl-2{
+ order: 2 !important;
+ }
+
+ .order-xl-3{
+ order: 3 !important;
+ }
+
+ .order-xl-4{
+ order: 4 !important;
+ }
+
+ .order-xl-5{
+ order: 5 !important;
+ }
+
+ .order-xl-last{
+ order: 6 !important;
+ }
+
+ .m-xl-0{
+ margin: 0 !important;
+ }
+
+ .m-xl-1{
+ margin: 0.25rem !important;
+ }
+
+ .m-xl-2{
+ margin: 0.5rem !important;
+ }
+
+ .m-xl-3{
+ margin: 1rem !important;
+ }
+
+ .m-xl-4{
+ margin: 1.5rem !important;
+ }
+
+ .m-xl-5{
+ margin: 3rem !important;
+ }
+
+ .m-xl-auto{
+ margin: auto !important;
+ }
+
+ .mx-xl-0{
+ margin-right: 0 !important;
+ margin-left: 0 !important;
+ }
+
+ .mx-xl-1{
+ margin-right: 0.25rem !important;
+ margin-left: 0.25rem !important;
+ }
+
+ .mx-xl-2{
+ margin-right: 0.5rem !important;
+ margin-left: 0.5rem !important;
+ }
+
+ .mx-xl-3{
+ margin-right: 1rem !important;
+ margin-left: 1rem !important;
+ }
+
+ .mx-xl-4{
+ margin-right: 1.5rem !important;
+ margin-left: 1.5rem !important;
+ }
+
+ .mx-xl-5{
+ margin-right: 3rem !important;
+ margin-left: 3rem !important;
+ }
+
+ .mx-xl-auto{
+ margin-right: auto !important;
+ margin-left: auto !important;
+ }
+
+ .my-xl-0{
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+ }
+
+ .my-xl-1{
+ margin-top: 0.25rem !important;
+ margin-bottom: 0.25rem !important;
+ }
+
+ .my-xl-2{
+ margin-top: 0.5rem !important;
+ margin-bottom: 0.5rem !important;
+ }
+
+ .my-xl-3{
+ margin-top: 1rem !important;
+ margin-bottom: 1rem !important;
+ }
+
+ .my-xl-4{
+ margin-top: 1.5rem !important;
+ margin-bottom: 1.5rem !important;
+ }
+
+ .my-xl-5{
+ margin-top: 3rem !important;
+ margin-bottom: 3rem !important;
+ }
+
+ .my-xl-auto{
+ margin-top: auto !important;
+ margin-bottom: auto !important;
+ }
+
+ .mt-xl-0{
+ margin-top: 0 !important;
+ }
+
+ .mt-xl-1{
+ margin-top: 0.25rem !important;
+ }
+
+ .mt-xl-2{
+ margin-top: 0.5rem !important;
+ }
+
+ .mt-xl-3{
+ margin-top: 1rem !important;
+ }
+
+ .mt-xl-4{
+ margin-top: 1.5rem !important;
+ }
+
+ .mt-xl-5{
+ margin-top: 3rem !important;
+ }
+
+ .mt-xl-auto{
+ margin-top: auto !important;
+ }
+
+ .me-xl-0{
+ margin-right: 0 !important;
+ }
+
+ .me-xl-1{
+ margin-right: 0.25rem !important;
+ }
+
+ .me-xl-2{
+ margin-right: 0.5rem !important;
+ }
+
+ .me-xl-3{
+ margin-right: 1rem !important;
+ }
+
+ .me-xl-4{
+ margin-right: 1.5rem !important;
+ }
+
+ .me-xl-5{
+ margin-right: 3rem !important;
+ }
+
+ .me-xl-auto{
+ margin-right: auto !important;
+ }
+
+ .mb-xl-0{
+ margin-bottom: 0 !important;
+ }
+
+ .mb-xl-1{
+ margin-bottom: 0.25rem !important;
+ }
+
+ .mb-xl-2{
+ margin-bottom: 0.5rem !important;
+ }
+
+ .mb-xl-3{
+ margin-bottom: 1rem !important;
+ }
+
+ .mb-xl-4{
+ margin-bottom: 1.5rem !important;
+ }
+
+ .mb-xl-5{
+ margin-bottom: 3rem !important;
+ }
+
+ .mb-xl-auto{
+ margin-bottom: auto !important;
+ }
+
+ .ms-xl-0{
+ margin-left: 0 !important;
+ }
+
+ .ms-xl-1{
+ margin-left: 0.25rem !important;
+ }
+
+ .ms-xl-2{
+ margin-left: 0.5rem !important;
+ }
+
+ .ms-xl-3{
+ margin-left: 1rem !important;
+ }
+
+ .ms-xl-4{
+ margin-left: 1.5rem !important;
+ }
+
+ .ms-xl-5{
+ margin-left: 3rem !important;
+ }
+
+ .ms-xl-auto{
+ margin-left: auto !important;
+ }
+
+ .p-xl-0{
+ padding: 0 !important;
+ }
+
+ .p-xl-1{
+ padding: 0.25rem !important;
+ }
+
+ .p-xl-2{
+ padding: 0.5rem !important;
+ }
+
+ .p-xl-3{
+ padding: 1rem !important;
+ }
+
+ .p-xl-4{
+ padding: 1.5rem !important;
+ }
+
+ .p-xl-5{
+ padding: 3rem !important;
+ }
+
+ .px-xl-0{
+ padding-right: 0 !important;
+ padding-left: 0 !important;
+ }
+
+ .px-xl-1{
+ padding-right: 0.25rem !important;
+ padding-left: 0.25rem !important;
+ }
+
+ .px-xl-2{
+ padding-right: 0.5rem !important;
+ padding-left: 0.5rem !important;
+ }
+
+ .px-xl-3{
+ padding-right: 1rem !important;
+ padding-left: 1rem !important;
+ }
+
+ .px-xl-4{
+ padding-right: 1.5rem !important;
+ padding-left: 1.5rem !important;
+ }
+
+ .px-xl-5{
+ padding-right: 3rem !important;
+ padding-left: 3rem !important;
+ }
+
+ .py-xl-0{
+ padding-top: 0 !important;
+ padding-bottom: 0 !important;
+ }
+
+ .py-xl-1{
+ padding-top: 0.25rem !important;
+ padding-bottom: 0.25rem !important;
+ }
+
+ .py-xl-2{
+ padding-top: 0.5rem !important;
+ padding-bottom: 0.5rem !important;
+ }
+
+ .py-xl-3{
+ padding-top: 1rem !important;
+ padding-bottom: 1rem !important;
+ }
+
+ .py-xl-4{
+ padding-top: 1.5rem !important;
+ padding-bottom: 1.5rem !important;
+ }
+
+ .py-xl-5{
+ padding-top: 3rem !important;
+ padding-bottom: 3rem !important;
+ }
+
+ .pt-xl-0{
+ padding-top: 0 !important;
+ }
+
+ .pt-xl-1{
+ padding-top: 0.25rem !important;
+ }
+
+ .pt-xl-2{
+ padding-top: 0.5rem !important;
+ }
+
+ .pt-xl-3{
+ padding-top: 1rem !important;
+ }
+
+ .pt-xl-4{
+ padding-top: 1.5rem !important;
+ }
+
+ .pt-xl-5{
+ padding-top: 3rem !important;
+ }
+
+ .pe-xl-0{
+ padding-right: 0 !important;
+ }
+
+ .pe-xl-1{
+ padding-right: 0.25rem !important;
+ }
+
+ .pe-xl-2{
+ padding-right: 0.5rem !important;
+ }
+
+ .pe-xl-3{
+ padding-right: 1rem !important;
+ }
+
+ .pe-xl-4{
+ padding-right: 1.5rem !important;
+ }
+
+ .pe-xl-5{
+ padding-right: 3rem !important;
+ }
+
+ .pb-xl-0{
+ padding-bottom: 0 !important;
+ }
+
+ .pb-xl-1{
+ padding-bottom: 0.25rem !important;
+ }
+
+ .pb-xl-2{
+ padding-bottom: 0.5rem !important;
+ }
+
+ .pb-xl-3{
+ padding-bottom: 1rem !important;
+ }
+
+ .pb-xl-4{
+ padding-bottom: 1.5rem !important;
+ }
+
+ .pb-xl-5{
+ padding-bottom: 3rem !important;
+ }
+
+ .ps-xl-0{
+ padding-left: 0 !important;
+ }
+
+ .ps-xl-1{
+ padding-left: 0.25rem !important;
+ }
+
+ .ps-xl-2{
+ padding-left: 0.5rem !important;
+ }
+
+ .ps-xl-3{
+ padding-left: 1rem !important;
+ }
+
+ .ps-xl-4{
+ padding-left: 1.5rem !important;
+ }
+
+ .ps-xl-5{
+ padding-left: 3rem !important;
+ }
+}
+
+@media (min-width: 1400px){
+ .d-xxl-inline{
+ display: inline !important;
+ }
+
+ .d-xxl-inline-block{
+ display: inline-block !important;
+ }
+
+ .d-xxl-block{
+ display: block !important;
+ }
+
+ .d-xxl-grid{
+ display: grid !important;
+ }
+
+ .d-xxl-table{
+ display: table !important;
+ }
+
+ .d-xxl-table-row{
+ display: table-row !important;
+ }
+
+ .d-xxl-table-cell{
+ display: table-cell !important;
+ }
+
+ .d-xxl-flex{
+ display: flex !important;
+ }
+
+ .d-xxl-inline-flex{
+ display: inline-flex !important;
+ }
+
+ .d-xxl-none{
+ display: none !important;
+ }
+
+ .flex-xxl-fill{
+ flex: 1 1 auto !important;
+ }
+
+ .flex-xxl-row{
+ flex-direction: row !important;
+ }
+
+ .flex-xxl-column{
+ flex-direction: column !important;
+ }
+
+ .flex-xxl-row-reverse{
+ flex-direction: row-reverse !important;
+ }
+
+ .flex-xxl-column-reverse{
+ flex-direction: column-reverse !important;
+ }
+
+ .flex-xxl-grow-0{
+ flex-grow: 0 !important;
+ }
+
+ .flex-xxl-grow-1{
+ flex-grow: 1 !important;
+ }
+
+ .flex-xxl-shrink-0{
+ flex-shrink: 0 !important;
+ }
+
+ .flex-xxl-shrink-1{
+ flex-shrink: 1 !important;
+ }
+
+ .flex-xxl-wrap{
+ flex-wrap: wrap !important;
+ }
+
+ .flex-xxl-nowrap{
+ flex-wrap: nowrap !important;
+ }
+
+ .flex-xxl-wrap-reverse{
+ flex-wrap: wrap-reverse !important;
+ }
+
+ .justify-content-xxl-start{
+ justify-content: flex-start !important;
+ }
+
+ .justify-content-xxl-end{
+ justify-content: flex-end !important;
+ }
+
+ .justify-content-xxl-center{
+ justify-content: center !important;
+ }
+
+ .justify-content-xxl-between{
+ justify-content: space-between !important;
+ }
+
+ .justify-content-xxl-around{
+ justify-content: space-around !important;
+ }
+
+ .justify-content-xxl-evenly{
+ justify-content: space-evenly !important;
+ }
+
+ .align-items-xxl-start{
+ align-items: flex-start !important;
+ }
+
+ .align-items-xxl-end{
+ align-items: flex-end !important;
+ }
+
+ .align-items-xxl-center{
+ align-items: center !important;
+ }
+
+ .align-items-xxl-baseline{
+ align-items: baseline !important;
+ }
+
+ .align-items-xxl-stretch{
+ align-items: stretch !important;
+ }
+
+ .align-content-xxl-start{
+ align-content: flex-start !important;
+ }
+
+ .align-content-xxl-end{
+ align-content: flex-end !important;
+ }
+
+ .align-content-xxl-center{
+ align-content: center !important;
+ }
+
+ .align-content-xxl-between{
+ align-content: space-between !important;
+ }
+
+ .align-content-xxl-around{
+ align-content: space-around !important;
+ }
+
+ .align-content-xxl-stretch{
+ align-content: stretch !important;
+ }
+
+ .align-self-xxl-auto{
+ align-self: auto !important;
+ }
+
+ .align-self-xxl-start{
+ align-self: flex-start !important;
+ }
+
+ .align-self-xxl-end{
+ align-self: flex-end !important;
+ }
+
+ .align-self-xxl-center{
+ align-self: center !important;
+ }
+
+ .align-self-xxl-baseline{
+ align-self: baseline !important;
+ }
+
+ .align-self-xxl-stretch{
+ align-self: stretch !important;
+ }
+
+ .order-xxl-first{
+ order: -1 !important;
+ }
+
+ .order-xxl-0{
+ order: 0 !important;
+ }
+
+ .order-xxl-1{
+ order: 1 !important;
+ }
+
+ .order-xxl-2{
+ order: 2 !important;
+ }
+
+ .order-xxl-3{
+ order: 3 !important;
+ }
+
+ .order-xxl-4{
+ order: 4 !important;
+ }
+
+ .order-xxl-5{
+ order: 5 !important;
+ }
+
+ .order-xxl-last{
+ order: 6 !important;
+ }
+
+ .m-xxl-0{
+ margin: 0 !important;
+ }
+
+ .m-xxl-1{
+ margin: 0.25rem !important;
+ }
+
+ .m-xxl-2{
+ margin: 0.5rem !important;
+ }
+
+ .m-xxl-3{
+ margin: 1rem !important;
+ }
+
+ .m-xxl-4{
+ margin: 1.5rem !important;
+ }
+
+ .m-xxl-5{
+ margin: 3rem !important;
+ }
+
+ .m-xxl-auto{
+ margin: auto !important;
+ }
+
+ .mx-xxl-0{
+ margin-right: 0 !important;
+ margin-left: 0 !important;
+ }
+
+ .mx-xxl-1{
+ margin-right: 0.25rem !important;
+ margin-left: 0.25rem !important;
+ }
+
+ .mx-xxl-2{
+ margin-right: 0.5rem !important;
+ margin-left: 0.5rem !important;
+ }
+
+ .mx-xxl-3{
+ margin-right: 1rem !important;
+ margin-left: 1rem !important;
+ }
+
+ .mx-xxl-4{
+ margin-right: 1.5rem !important;
+ margin-left: 1.5rem !important;
+ }
+
+ .mx-xxl-5{
+ margin-right: 3rem !important;
+ margin-left: 3rem !important;
+ }
+
+ .mx-xxl-auto{
+ margin-right: auto !important;
+ margin-left: auto !important;
+ }
+
+ .my-xxl-0{
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+ }
+
+ .my-xxl-1{
+ margin-top: 0.25rem !important;
+ margin-bottom: 0.25rem !important;
+ }
+
+ .my-xxl-2{
+ margin-top: 0.5rem !important;
+ margin-bottom: 0.5rem !important;
+ }
+
+ .my-xxl-3{
+ margin-top: 1rem !important;
+ margin-bottom: 1rem !important;
+ }
+
+ .my-xxl-4{
+ margin-top: 1.5rem !important;
+ margin-bottom: 1.5rem !important;
+ }
+
+ .my-xxl-5{
+ margin-top: 3rem !important;
+ margin-bottom: 3rem !important;
+ }
+
+ .my-xxl-auto{
+ margin-top: auto !important;
+ margin-bottom: auto !important;
+ }
+
+ .mt-xxl-0{
+ margin-top: 0 !important;
+ }
+
+ .mt-xxl-1{
+ margin-top: 0.25rem !important;
+ }
+
+ .mt-xxl-2{
+ margin-top: 0.5rem !important;
+ }
+
+ .mt-xxl-3{
+ margin-top: 1rem !important;
+ }
+
+ .mt-xxl-4{
+ margin-top: 1.5rem !important;
+ }
+
+ .mt-xxl-5{
+ margin-top: 3rem !important;
+ }
+
+ .mt-xxl-auto{
+ margin-top: auto !important;
+ }
+
+ .me-xxl-0{
+ margin-right: 0 !important;
+ }
+
+ .me-xxl-1{
+ margin-right: 0.25rem !important;
+ }
+
+ .me-xxl-2{
+ margin-right: 0.5rem !important;
+ }
+
+ .me-xxl-3{
+ margin-right: 1rem !important;
+ }
+
+ .me-xxl-4{
+ margin-right: 1.5rem !important;
+ }
+
+ .me-xxl-5{
+ margin-right: 3rem !important;
+ }
+
+ .me-xxl-auto{
+ margin-right: auto !important;
+ }
+
+ .mb-xxl-0{
+ margin-bottom: 0 !important;
+ }
+
+ .mb-xxl-1{
+ margin-bottom: 0.25rem !important;
+ }
+
+ .mb-xxl-2{
+ margin-bottom: 0.5rem !important;
+ }
+
+ .mb-xxl-3{
+ margin-bottom: 1rem !important;
+ }
+
+ .mb-xxl-4{
+ margin-bottom: 1.5rem !important;
+ }
+
+ .mb-xxl-5{
+ margin-bottom: 3rem !important;
+ }
+
+ .mb-xxl-auto{
+ margin-bottom: auto !important;
+ }
+
+ .ms-xxl-0{
+ margin-left: 0 !important;
+ }
+
+ .ms-xxl-1{
+ margin-left: 0.25rem !important;
+ }
+
+ .ms-xxl-2{
+ margin-left: 0.5rem !important;
+ }
+
+ .ms-xxl-3{
+ margin-left: 1rem !important;
+ }
+
+ .ms-xxl-4{
+ margin-left: 1.5rem !important;
+ }
+
+ .ms-xxl-5{
+ margin-left: 3rem !important;
+ }
+
+ .ms-xxl-auto{
+ margin-left: auto !important;
+ }
+
+ .p-xxl-0{
+ padding: 0 !important;
+ }
+
+ .p-xxl-1{
+ padding: 0.25rem !important;
+ }
+
+ .p-xxl-2{
+ padding: 0.5rem !important;
+ }
+
+ .p-xxl-3{
+ padding: 1rem !important;
+ }
+
+ .p-xxl-4{
+ padding: 1.5rem !important;
+ }
+
+ .p-xxl-5{
+ padding: 3rem !important;
+ }
+
+ .px-xxl-0{
+ padding-right: 0 !important;
+ padding-left: 0 !important;
+ }
+
+ .px-xxl-1{
+ padding-right: 0.25rem !important;
+ padding-left: 0.25rem !important;
+ }
+
+ .px-xxl-2{
+ padding-right: 0.5rem !important;
+ padding-left: 0.5rem !important;
+ }
+
+ .px-xxl-3{
+ padding-right: 1rem !important;
+ padding-left: 1rem !important;
+ }
+
+ .px-xxl-4{
+ padding-right: 1.5rem !important;
+ padding-left: 1.5rem !important;
+ }
+
+ .px-xxl-5{
+ padding-right: 3rem !important;
+ padding-left: 3rem !important;
+ }
+
+ .py-xxl-0{
+ padding-top: 0 !important;
+ padding-bottom: 0 !important;
+ }
+
+ .py-xxl-1{
+ padding-top: 0.25rem !important;
+ padding-bottom: 0.25rem !important;
+ }
+
+ .py-xxl-2{
+ padding-top: 0.5rem !important;
+ padding-bottom: 0.5rem !important;
+ }
+
+ .py-xxl-3{
+ padding-top: 1rem !important;
+ padding-bottom: 1rem !important;
+ }
+
+ .py-xxl-4{
+ padding-top: 1.5rem !important;
+ padding-bottom: 1.5rem !important;
+ }
+
+ .py-xxl-5{
+ padding-top: 3rem !important;
+ padding-bottom: 3rem !important;
+ }
+
+ .pt-xxl-0{
+ padding-top: 0 !important;
+ }
+
+ .pt-xxl-1{
+ padding-top: 0.25rem !important;
+ }
+
+ .pt-xxl-2{
+ padding-top: 0.5rem !important;
+ }
+
+ .pt-xxl-3{
+ padding-top: 1rem !important;
+ }
+
+ .pt-xxl-4{
+ padding-top: 1.5rem !important;
+ }
+
+ .pt-xxl-5{
+ padding-top: 3rem !important;
+ }
+
+ .pe-xxl-0{
+ padding-right: 0 !important;
+ }
+
+ .pe-xxl-1{
+ padding-right: 0.25rem !important;
+ }
+
+ .pe-xxl-2{
+ padding-right: 0.5rem !important;
+ }
+
+ .pe-xxl-3{
+ padding-right: 1rem !important;
+ }
+
+ .pe-xxl-4{
+ padding-right: 1.5rem !important;
+ }
+
+ .pe-xxl-5{
+ padding-right: 3rem !important;
+ }
+
+ .pb-xxl-0{
+ padding-bottom: 0 !important;
+ }
+
+ .pb-xxl-1{
+ padding-bottom: 0.25rem !important;
+ }
+
+ .pb-xxl-2{
+ padding-bottom: 0.5rem !important;
+ }
+
+ .pb-xxl-3{
+ padding-bottom: 1rem !important;
+ }
+
+ .pb-xxl-4{
+ padding-bottom: 1.5rem !important;
+ }
+
+ .pb-xxl-5{
+ padding-bottom: 3rem !important;
+ }
+
+ .ps-xxl-0{
+ padding-left: 0 !important;
+ }
+
+ .ps-xxl-1{
+ padding-left: 0.25rem !important;
+ }
+
+ .ps-xxl-2{
+ padding-left: 0.5rem !important;
+ }
+
+ .ps-xxl-3{
+ padding-left: 1rem !important;
+ }
+
+ .ps-xxl-4{
+ padding-left: 1.5rem !important;
+ }
+
+ .ps-xxl-5{
+ padding-left: 3rem !important;
+ }
+}
+
+@media print{
+ .d-print-inline{
+ display: inline !important;
+ }
+
+ .d-print-inline-block{
+ display: inline-block !important;
+ }
+
+ .d-print-block{
+ display: block !important;
+ }
+
+ .d-print-grid{
+ display: grid !important;
+ }
+
+ .d-print-table{
+ display: table !important;
+ }
+
+ .d-print-table-row{
+ display: table-row !important;
+ }
+
+ .d-print-table-cell{
+ display: table-cell !important;
+ }
+
+ .d-print-flex{
+ display: flex !important;
+ }
+
+ .d-print-inline-flex{
+ display: inline-flex !important;
+ }
+
+ .d-print-none{
+ display: none !important;
+ }
+}
+
+/*# sourceMappingURL=bootstrap-grid.css.map */
diff --git a/static/assets/css/fontawesome/css/all.min.css b/static/assets/css/fontawesome/css/all.min.css
new file mode 100644
index 0000000..0998088
--- /dev/null
+++ b/static/assets/css/fontawesome/css/all.min.css
@@ -0,0 +1,6 @@
+/*!
+ * Font Awesome Pro 5.12.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license (Commercial License)
+ * www.Ulabs.ir
+ */
+.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-abacus:before{content:"\f640"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acorn:before{content:"\f6ae"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-conditioner:before{content:"\f8f4"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-alarm-clock:before{content:"\f34e"}.fa-alarm-exclamation:before{content:"\f843"}.fa-alarm-plus:before{content:"\f844"}.fa-alarm-snooze:before{content:"\f845"}.fa-album:before{content:"\f89f"}.fa-album-collection:before{content:"\f8a0"}.fa-algolia:before{content:"\f36c"}.fa-alicorn:before{content:"\f6b0"}.fa-alien:before{content:"\f8f5"}.fa-alien-monster:before{content:"\f8f6"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-align-slash:before{content:"\f846"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-amp-guitar:before{content:"\f8a1"}.fa-analytics:before{content:"\f643"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angel:before{content:"\f779"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-crate:before{content:"\f6b1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-alt-down:before{content:"\f354"}.fa-arrow-alt-from-bottom:before{content:"\f346"}.fa-arrow-alt-from-left:before{content:"\f347"}.fa-arrow-alt-from-right:before{content:"\f348"}.fa-arrow-alt-from-top:before{content:"\f349"}.fa-arrow-alt-left:before{content:"\f355"}.fa-arrow-alt-right:before{content:"\f356"}.fa-arrow-alt-square-down:before{content:"\f350"}.fa-arrow-alt-square-left:before{content:"\f351"}.fa-arrow-alt-square-right:before{content:"\f352"}.fa-arrow-alt-square-up:before{content:"\f353"}.fa-arrow-alt-to-bottom:before{content:"\f34a"}.fa-arrow-alt-to-left:before{content:"\f34b"}.fa-arrow-alt-to-right:before{content:"\f34c"}.fa-arrow-alt-to-top:before{content:"\f34d"}.fa-arrow-alt-up:before{content:"\f357"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-from-bottom:before{content:"\f342"}.fa-arrow-from-left:before{content:"\f343"}.fa-arrow-from-right:before{content:"\f344"}.fa-arrow-from-top:before{content:"\f345"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-square-down:before{content:"\f339"}.fa-arrow-square-left:before{content:"\f33a"}.fa-arrow-square-right:before{content:"\f33b"}.fa-arrow-square-up:before{content:"\f33c"}.fa-arrow-to-bottom:before{content:"\f33d"}.fa-arrow-to-left:before{content:"\f33e"}.fa-arrow-to-right:before{content:"\f340"}.fa-arrow-to-top:before{content:"\f341"}.fa-arrow-up:before{content:"\f062"}.fa-arrows:before{content:"\f047"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-arrows-h:before{content:"\f07e"}.fa-arrows-v:before{content:"\f07d"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-atom-alt:before{content:"\f5d3"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-axe:before{content:"\f6b2"}.fa-axe-battle:before{content:"\f6b3"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backpack:before{content:"\f5d4"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-badge:before{content:"\f335"}.fa-badge-check:before{content:"\f336"}.fa-badge-dollar:before{content:"\f645"}.fa-badge-percent:before{content:"\f646"}.fa-badge-sheriff:before{content:"\f8a2"}.fa-badger-honey:before{content:"\f6b4"}.fa-bags-shopping:before{content:"\f847"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ball-pile:before{content:"\f77e"}.fa-ballot:before{content:"\f732"}.fa-ballot-check:before{content:"\f733"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-banjo:before{content:"\f8a3"}.fa-barcode:before{content:"\f02a"}.fa-barcode-alt:before{content:"\f463"}.fa-barcode-read:before{content:"\f464"}.fa-barcode-scan:before{content:"\f465"}.fa-bars:before{content:"\f0c9"}.fa-baseball:before{content:"\f432"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-basketball-hoop:before{content:"\f435"}.fa-bat:before{content:"\f6b5"}.fa-bath:before{content:"\f2cd"}.fa-battery-bolt:before{content:"\f376"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-slash:before{content:"\f377"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-bed-alt:before{content:"\f8f7"}.fa-bed-bunk:before{content:"\f8f8"}.fa-bed-empty:before{content:"\f8f9"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-exclamation:before{content:"\f848"}.fa-bell-on:before{content:"\f8fa"}.fa-bell-plus:before{content:"\f849"}.fa-bell-school:before{content:"\f5d5"}.fa-bell-school-slash:before{content:"\f5d6"}.fa-bell-slash:before{content:"\f1f6"}.fa-bells:before{content:"\f77f"}.fa-betamax:before{content:"\f8a4"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-biking-mountain:before{content:"\f84b"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blanket:before{content:"\f498"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blinds:before{content:"\f8fb"}.fa-blinds-open:before{content:"\f8fc"}.fa-blinds-raised:before{content:"\f8fd"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bone-break:before{content:"\f5d8"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-alt:before{content:"\f5d9"}.fa-book-dead:before{content:"\f6b7"}.fa-book-heart:before{content:"\f499"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-book-spells:before{content:"\f6b8"}.fa-book-user:before{content:"\f7e7"}.fa-bookmark:before{content:"\f02e"}.fa-books:before{content:"\f5db"}.fa-books-medical:before{content:"\f7e8"}.fa-boombox:before{content:"\f8a5"}.fa-boot:before{content:"\f782"}.fa-booth-curtain:before{content:"\f734"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-bottom:before{content:"\f84d"}.fa-border-center-h:before{content:"\f89c"}.fa-border-center-v:before{content:"\f89d"}.fa-border-inner:before{content:"\f84e"}.fa-border-left:before{content:"\f84f"}.fa-border-none:before{content:"\f850"}.fa-border-outer:before{content:"\f851"}.fa-border-right:before{content:"\f852"}.fa-border-style:before{content:"\f853"}.fa-border-style-alt:before{content:"\f854"}.fa-border-top:before{content:"\f855"}.fa-bow-arrow:before{content:"\f6b9"}.fa-bowling-ball:before{content:"\f436"}.fa-bowling-pins:before{content:"\f437"}.fa-box:before{content:"\f466"}.fa-box-alt:before{content:"\f49a"}.fa-box-ballot:before{content:"\f735"}.fa-box-check:before{content:"\f467"}.fa-box-fragile:before{content:"\f49b"}.fa-box-full:before{content:"\f49c"}.fa-box-heart:before{content:"\f49d"}.fa-box-open:before{content:"\f49e"}.fa-box-up:before{content:"\f49f"}.fa-box-usd:before{content:"\f4a0"}.fa-boxes:before{content:"\f468"}.fa-boxes-alt:before{content:"\f4a1"}.fa-boxing-glove:before{content:"\f438"}.fa-brackets:before{content:"\f7e9"}.fa-brackets-curly:before{content:"\f7ea"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-loaf:before{content:"\f7eb"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-bring-forward:before{content:"\f856"}.fa-bring-front:before{content:"\f857"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-browser:before{content:"\f37e"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-bullseye-arrow:before{content:"\f648"}.fa-bullseye-pointer:before{content:"\f649"}.fa-burger-soda:before{content:"\f858"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-burrito:before{content:"\f7ed"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-bus-school:before{content:"\f5dd"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-cabinet-filing:before{content:"\f64b"}.fa-cactus:before{content:"\f8a7"}.fa-calculator:before{content:"\f1ec"}.fa-calculator-alt:before{content:"\f64c"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-edit:before{content:"\f333"}.fa-calendar-exclamation:before{content:"\f334"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-star:before{content:"\f736"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camcorder:before{content:"\f8a8"}.fa-camera:before{content:"\f030"}.fa-camera-alt:before{content:"\f332"}.fa-camera-home:before{content:"\f8fe"}.fa-camera-movie:before{content:"\f8a9"}.fa-camera-polaroid:before{content:"\f8aa"}.fa-camera-retro:before{content:"\f083"}.fa-campfire:before{content:"\f6ba"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candle-holder:before{content:"\f6bc"}.fa-candy-cane:before{content:"\f786"}.fa-candy-corn:before{content:"\f6bd"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-building:before{content:"\f859"}.fa-car-bump:before{content:"\f5e0"}.fa-car-bus:before{content:"\f85a"}.fa-car-crash:before{content:"\f5e1"}.fa-car-garage:before{content:"\f5e2"}.fa-car-mechanic:before{content:"\f5e3"}.fa-car-side:before{content:"\f5e4"}.fa-car-tilt:before{content:"\f5e5"}.fa-car-wash:before{content:"\f5e6"}.fa-caravan:before{content:"\f8ff"}.fa-caravan-alt:before{content:"\f900"}.fa-caret-circle-down:before{content:"\f32d"}.fa-caret-circle-left:before{content:"\f32e"}.fa-caret-circle-right:before{content:"\f330"}.fa-caret-circle-up:before{content:"\f331"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cars:before{content:"\f85b"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cassette-tape:before{content:"\f8ab"}.fa-cat:before{content:"\f6be"}.fa-cat-space:before{content:"\f901"}.fa-cauldron:before{content:"\f6bf"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-cctv:before{content:"\f8ac"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chair-office:before{content:"\f6c1"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-line-down:before{content:"\f64d"}.fa-chart-network:before{content:"\f78a"}.fa-chart-pie:before{content:"\f200"}.fa-chart-pie-alt:before{content:"\f64e"}.fa-chart-scatter:before{content:"\f7ee"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-cheese-swiss:before{content:"\f7f0"}.fa-cheeseburger:before{content:"\f7f1"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-bishop-alt:before{content:"\f43b"}.fa-chess-board:before{content:"\f43c"}.fa-chess-clock:before{content:"\f43d"}.fa-chess-clock-alt:before{content:"\f43e"}.fa-chess-king:before{content:"\f43f"}.fa-chess-king-alt:before{content:"\f440"}.fa-chess-knight:before{content:"\f441"}.fa-chess-knight-alt:before{content:"\f442"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-pawn-alt:before{content:"\f444"}.fa-chess-queen:before{content:"\f445"}.fa-chess-queen-alt:before{content:"\f446"}.fa-chess-rook:before{content:"\f447"}.fa-chess-rook-alt:before{content:"\f448"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-double-down:before{content:"\f322"}.fa-chevron-double-left:before{content:"\f323"}.fa-chevron-double-right:before{content:"\f324"}.fa-chevron-double-up:before{content:"\f325"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-square-down:before{content:"\f329"}.fa-chevron-square-left:before{content:"\f32a"}.fa-chevron-square-right:before{content:"\f32b"}.fa-chevron-square-up:before{content:"\f32c"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chimney:before{content:"\f78b"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clarinet:before{content:"\f8ad"}.fa-claw-marks:before{content:"\f6c2"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clipboard-list-check:before{content:"\f737"}.fa-clipboard-prescription:before{content:"\f5e8"}.fa-clipboard-user:before{content:"\f7f3"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-drizzle:before{content:"\f738"}.fa-cloud-hail:before{content:"\f739"}.fa-cloud-hail-mixed:before{content:"\f73a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-music:before{content:"\f8ae"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-rainbow:before{content:"\f73e"}.fa-cloud-showers:before{content:"\f73f"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sleet:before{content:"\f741"}.fa-cloud-snow:before{content:"\f742"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload:before{content:"\f0ee"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-clouds:before{content:"\f744"}.fa-clouds-moon:before{content:"\f745"}.fa-clouds-sun:before{content:"\f746"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-club:before{content:"\f327"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-code-commit:before{content:"\f386"}.fa-code-merge:before{content:"\f387"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-coffee-pot:before{content:"\f902"}.fa-coffee-togo:before{content:"\f6c5"}.fa-coffin:before{content:"\f6c6"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coin:before{content:"\f85c"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comet:before{content:"\f903"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-alt-check:before{content:"\f4a2"}.fa-comment-alt-dollar:before{content:"\f650"}.fa-comment-alt-dots:before{content:"\f4a3"}.fa-comment-alt-edit:before{content:"\f4a4"}.fa-comment-alt-exclamation:before{content:"\f4a5"}.fa-comment-alt-lines:before{content:"\f4a6"}.fa-comment-alt-medical:before{content:"\f7f4"}.fa-comment-alt-minus:before{content:"\f4a7"}.fa-comment-alt-music:before{content:"\f8af"}.fa-comment-alt-plus:before{content:"\f4a8"}.fa-comment-alt-slash:before{content:"\f4a9"}.fa-comment-alt-smile:before{content:"\f4aa"}.fa-comment-alt-times:before{content:"\f4ab"}.fa-comment-check:before{content:"\f4ac"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-edit:before{content:"\f4ae"}.fa-comment-exclamation:before{content:"\f4af"}.fa-comment-lines:before{content:"\f4b0"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-minus:before{content:"\f4b1"}.fa-comment-music:before{content:"\f8b0"}.fa-comment-plus:before{content:"\f4b2"}.fa-comment-slash:before{content:"\f4b3"}.fa-comment-smile:before{content:"\f4b4"}.fa-comment-times:before{content:"\f4b5"}.fa-comments:before{content:"\f086"}.fa-comments-alt:before{content:"\f4b6"}.fa-comments-alt-dollar:before{content:"\f652"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compass-slash:before{content:"\f5e9"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-compress-wide:before{content:"\f326"}.fa-computer-classic:before{content:"\f8b1"}.fa-computer-speaker:before{content:"\f8b2"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-construction:before{content:"\f85d"}.fa-container-storage:before{content:"\f4b7"}.fa-contao:before{content:"\f26d"}.fa-conveyor-belt:before{content:"\f46e"}.fa-conveyor-belt-alt:before{content:"\f46f"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-corn:before{content:"\f6c7"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cow:before{content:"\f6c8"}.fa-cowbell:before{content:"\f8b3"}.fa-cowbell-more:before{content:"\f8b4"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-credit-card-blank:before{content:"\f389"}.fa-credit-card-front:before{content:"\f38a"}.fa-cricket:before{content:"\f449"}.fa-critical-role:before{content:"\f6c9"}.fa-croissant:before{content:"\f7f6"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-crutches:before{content:"\f7f8"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-curling:before{content:"\f44a"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dagger:before{content:"\f6cb"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-debug:before{content:"\f7f9"}.fa-deer:before{content:"\f78e"}.fa-deer-rudolph:before{content:"\f78f"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-desktop-alt:before{content:"\f390"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dewpoint:before{content:"\f748"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diamond:before{content:"\f219"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d10:before{content:"\f6cd"}.fa-dice-d12:before{content:"\f6ce"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d4:before{content:"\f6d0"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-d8:before{content:"\f6d2"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digging:before{content:"\f85e"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-diploma:before{content:"\f5ea"}.fa-directions:before{content:"\f5eb"}.fa-disc-drive:before{content:"\f8b5"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-do-not-enter:before{content:"\f5ec"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dog-leashed:before{content:"\f6d4"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-empty:before{content:"\f473"}.fa-dolly-flatbed:before{content:"\f474"}.fa-dolly-flatbed-alt:before{content:"\f475"}.fa-dolly-flatbed-empty:before{content:"\f476"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-circle:before{content:"\f5ed"}.fa-draw-polygon:before{content:"\f5ee"}.fa-draw-square:before{content:"\f5ef"}.fa-dreidel:before{content:"\f792"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-drone:before{content:"\f85f"}.fa-drone-alt:before{content:"\f860"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick:before{content:"\f6d6"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dryer:before{content:"\f861"}.fa-dryer-alt:before{content:"\f862"}.fa-duck:before{content:"\f6d8"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-ear:before{content:"\f5f0"}.fa-ear-muffs:before{content:"\f795"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-eclipse:before{content:"\f749"}.fa-eclipse-alt:before{content:"\f74a"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-egg-fried:before{content:"\f7fc"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-elephant:before{content:"\f6da"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-h-alt:before{content:"\f39b"}.fa-ellipsis-v:before{content:"\f142"}.fa-ellipsis-v-alt:before{content:"\f39c"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-empty-set:before{content:"\f656"}.fa-engine-warning:before{content:"\f5f2"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-dollar:before{content:"\f657"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange:before{content:"\f0ec"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-square:before{content:"\f321"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows:before{content:"\f31d"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expand-wide:before{content:"\f320"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link:before{content:"\f08e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square:before{content:"\f14c"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-evil:before{content:"\f6db"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fan-table:before{content:"\f904"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-farm:before{content:"\f864"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\f905"}.fa-faucet-drip:before{content:"\f906"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-field-hockey:before{content:"\f44c"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-certificate:before{content:"\f5f3"}.fa-file-chart-line:before{content:"\f659"}.fa-file-chart-pie:before{content:"\f65a"}.fa-file-check:before{content:"\f316"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-edit:before{content:"\f31c"}.fa-file-excel:before{content:"\f1c3"}.fa-file-exclamation:before{content:"\f31a"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-minus:before{content:"\f318"}.fa-file-music:before{content:"\f8b6"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-plus:before{content:"\f319"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-search:before{content:"\f865"}.fa-file-signature:before{content:"\f573"}.fa-file-spreadsheet:before{content:"\f65b"}.fa-file-times:before{content:"\f317"}.fa-file-upload:before{content:"\f574"}.fa-file-user:before{content:"\f65c"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-files-medical:before{content:"\f7fd"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-film-alt:before{content:"\f3a0"}.fa-film-canister:before{content:"\f8b7"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-fire-smoke:before{content:"\f74b"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\f907"}.fa-fireplace:before{content:"\f79a"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fish-cooked:before{content:"\f7fe"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-alt:before{content:"\f74c"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flame:before{content:"\f6df"}.fa-flashlight:before{content:"\f8b8"}.fa-flask:before{content:"\f0c3"}.fa-flask-poison:before{content:"\f6e0"}.fa-flask-potion:before{content:"\f6e1"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flower:before{content:"\f7ff"}.fa-flower-daffodil:before{content:"\f800"}.fa-flower-tulip:before{content:"\f801"}.fa-flushed:before{content:"\f579"}.fa-flute:before{content:"\f8b9"}.fa-flux-capacitor:before{content:"\f8ba"}.fa-fly:before{content:"\f417"}.fa-fog:before{content:"\f74e"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-folder-times:before{content:"\f65f"}.fa-folder-tree:before{content:"\f802"}.fa-folders:before{content:"\f660"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-font-case:before{content:"\f866"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-football-helmet:before{content:"\f44f"}.fa-forklift:before{content:"\f47a"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-fragile:before{content:"\f4bb"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-french-fries:before{content:"\f803"}.fa-frog:before{content:"\f52e"}.fa-frosty-head:before{content:"\f79b"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-function:before{content:"\f661"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-galaxy:before{content:"\f908"}.fa-game-board:before{content:"\f867"}.fa-game-board-alt:before{content:"\f868"}.fa-game-console-handheld:before{content:"\f8bb"}.fa-gamepad:before{content:"\f11b"}.fa-gamepad-alt:before{content:"\f8bc"}.fa-garage:before{content:"\f909"}.fa-garage-car:before{content:"\f90a"}.fa-garage-open:before{content:"\f90b"}.fa-gas-pump:before{content:"\f52f"}.fa-gas-pump-slash:before{content:"\f5f4"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gift-card:before{content:"\f663"}.fa-gifts:before{content:"\f79c"}.fa-gingerbread-man:before{content:"\f79d"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass:before{content:"\f804"}.fa-glass-champagne:before{content:"\f79e"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-citrus:before{content:"\f869"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glass-whiskey-rocks:before{content:"\f7a1"}.fa-glasses:before{content:"\f530"}.fa-glasses-alt:before{content:"\f5f5"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-globe-snow:before{content:"\f7a3"}.fa-globe-stand:before{content:"\f5f6"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-golf-club:before{content:"\f451"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gramophone:before{content:"\f8bd"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-guitar-electric:before{content:"\f8be"}.fa-guitars:before{content:"\f8bf"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-h1:before{content:"\f313"}.fa-h2:before{content:"\f314"}.fa-h3:before{content:"\f315"}.fa-h4:before{content:"\f86a"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hammer-war:before{content:"\f6e4"}.fa-hamsa:before{content:"\f665"}.fa-hand-heart:before{content:"\f4bc"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-box:before{content:"\f47b"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-magic:before{content:"\f6e5"}.fa-hand-holding-seedling:before{content:"\f4bf"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-receiving:before{content:"\f47c"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-heart:before{content:"\f4c3"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-usd:before{content:"\f4c5"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt:before{content:"\f4c6"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-chef:before{content:"\f86b"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-santa:before{content:"\f7a7"}.fa-hat-winter:before{content:"\f7a8"}.fa-hat-witch:before{content:"\f6e7"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side:before{content:"\f6e9"}.fa-head-side-brain:before{content:"\f808"}.fa-head-side-headphones:before{content:"\f8c2"}.fa-head-side-medical:before{content:"\f809"}.fa-head-vr:before{content:"\f6ea"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heart-circle:before{content:"\f4c7"}.fa-heart-rate:before{content:"\f5f8"}.fa-heart-square:before{content:"\f4c8"}.fa-heartbeat:before{content:"\f21e"}.fa-heat:before{content:"\f90c"}.fa-helicopter:before{content:"\f533"}.fa-helmet-battle:before{content:"\f6eb"}.fa-hexagon:before{content:"\f312"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-mask:before{content:"\f6ee"}.fa-hockey-puck:before{content:"\f453"}.fa-hockey-sticks:before{content:"\f454"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-home-alt:before{content:"\f80a"}.fa-home-heart:before{content:"\f4c9"}.fa-home-lg:before{content:"\f80b"}.fa-home-lg-alt:before{content:"\f80c"}.fa-hood-cloak:before{content:"\f6ef"}.fa-hooli:before{content:"\f427"}.fa-horizontal-rule:before{content:"\f86c"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-horse-saddle:before{content:"\f8c3"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hospitals:before{content:"\f80e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house:before{content:"\f90d"}.fa-house-damage:before{content:"\f6f1"}.fa-house-day:before{content:"\f90e"}.fa-house-flood:before{content:"\f74f"}.fa-house-leave:before{content:"\f90f"}.fa-house-night:before{content:"\f910"}.fa-house-return:before{content:"\f911"}.fa-house-signal:before{content:"\f912"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-humidity:before{content:"\f750"}.fa-hurricane:before{content:"\f751"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-ice-skate:before{content:"\f7ac"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-icons-alt:before{content:"\f86e"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\f913"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-image-polaroid:before{content:"\f8c4"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-inbox-in:before{content:"\f310"}.fa-inbox-out:before{content:"\f311"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-industry-alt:before{content:"\f3b3"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-info-square:before{content:"\f30f"}.fa-inhaler:before{content:"\f5f9"}.fa-instagram:before{content:"\f16d"}.fa-integral:before{content:"\f667"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-intersection:before{content:"\f668"}.fa-inventory:before{content:"\f480"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-island-tropical:before{content:"\f811"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-jack-o-lantern:before{content:"\f30e"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-joystick:before{content:"\f8c5"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-jug:before{content:"\f8c6"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-kazoo:before{content:"\f8c7"}.fa-kerning:before{content:"\f86f"}.fa-key:before{content:"\f084"}.fa-key-skeleton:before{content:"\f6f3"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-keynote:before{content:"\f66c"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kidneys:before{content:"\f5fb"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kite:before{content:"\f6f4"}.fa-kiwi-bird:before{content:"\f535"}.fa-knife-kitchen:before{content:"\f6f5"}.fa-korvue:before{content:"\f42f"}.fa-lambda:before{content:"\f66e"}.fa-lamp:before{content:"\f4ca"}.fa-lamp-desk:before{content:"\f914"}.fa-lamp-floor:before{content:"\f915"}.fa-landmark:before{content:"\f66f"}.fa-landmark-alt:before{content:"\f752"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lasso:before{content:"\f8c8"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-layer-minus:before{content:"\f5fe"}.fa-layer-plus:before{content:"\f5ff"}.fa-leaf:before{content:"\f06c"}.fa-leaf-heart:before{content:"\f4cb"}.fa-leaf-maple:before{content:"\f6f6"}.fa-leaf-oak:before{content:"\f6f7"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down:before{content:"\f149"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up:before{content:"\f148"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-light-ceiling:before{content:"\f916"}.fa-light-switch:before{content:"\f917"}.fa-light-switch-off:before{content:"\f918"}.fa-light-switch-on:before{content:"\f919"}.fa-lightbulb:before{content:"\f0eb"}.fa-lightbulb-dollar:before{content:"\f670"}.fa-lightbulb-exclamation:before{content:"\f671"}.fa-lightbulb-on:before{content:"\f672"}.fa-lightbulb-slash:before{content:"\f673"}.fa-lights-holiday:before{content:"\f7b2"}.fa-line:before{content:"\f3c0"}.fa-line-columns:before{content:"\f870"}.fa-line-height:before{content:"\f871"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lips:before{content:"\f600"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-music:before{content:"\f8c9"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location:before{content:"\f601"}.fa-location-arrow:before{content:"\f124"}.fa-location-circle:before{content:"\f602"}.fa-location-slash:before{content:"\f603"}.fa-lock:before{content:"\f023"}.fa-lock-alt:before{content:"\f30d"}.fa-lock-open:before{content:"\f3c1"}.fa-lock-open-alt:before{content:"\f3c2"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-long-arrow-up:before{content:"\f176"}.fa-loveseat:before{content:"\f4cc"}.fa-low-vision:before{content:"\f2a8"}.fa-luchador:before{content:"\f455"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lyft:before{content:"\f3c3"}.fa-mace:before{content:"\f6f8"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailbox:before{content:"\f813"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-mandolin:before{content:"\f6f9"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-marker-alt-slash:before{content:"\f605"}.fa-map-marker-check:before{content:"\f606"}.fa-map-marker-edit:before{content:"\f607"}.fa-map-marker-exclamation:before{content:"\f608"}.fa-map-marker-minus:before{content:"\f609"}.fa-map-marker-plus:before{content:"\f60a"}.fa-map-marker-question:before{content:"\f60b"}.fa-map-marker-slash:before{content:"\f60c"}.fa-map-marker-smile:before{content:"\f60d"}.fa-map-marker-times:before{content:"\f60e"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-meat:before{content:"\f814"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaphone:before{content:"\f675"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\f91a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microphone-stand:before{content:"\f8cb"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-microwave:before{content:"\f91b"}.fa-mind-share:before{content:"\f677"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-hexagon:before{content:"\f307"}.fa-minus-octagon:before{content:"\f308"}.fa-minus-square:before{content:"\f146"}.fa-mistletoe:before{content:"\f7b4"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-mobile-android:before{content:"\f3ce"}.fa-mobile-android-alt:before{content:"\f3cf"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-money-check-edit:before{content:"\f872"}.fa-money-check-edit-alt:before{content:"\f873"}.fa-monitor-heart-rate:before{content:"\f611"}.fa-monkey:before{content:"\f6fb"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-moon-cloud:before{content:"\f754"}.fa-moon-stars:before{content:"\f755"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mountains:before{content:"\f6fd"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-alt:before{content:"\f8cd"}.fa-mouse-pointer:before{content:"\f245"}.fa-mp3-player:before{content:"\f8ce"}.fa-mug:before{content:"\f874"}.fa-mug-hot:before{content:"\f7b6"}.fa-mug-marshmallows:before{content:"\f7b7"}.fa-mug-tea:before{content:"\f875"}.fa-music:before{content:"\f001"}.fa-music-alt:before{content:"\f8cf"}.fa-music-alt-slash:before{content:"\f8d0"}.fa-music-slash:before{content:"\f8d1"}.fa-napster:before{content:"\f3d2"}.fa-narwhal:before{content:"\f6fe"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octagon:before{content:"\f306"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-oil-temp:before{content:"\f614"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-omega:before{content:"\f67a"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-ornament:before{content:"\f7b8"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-outlet:before{content:"\f91c"}.fa-oven:before{content:"\f91d"}.fa-overline:before{content:"\f876"}.fa-page-break:before{content:"\f877"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-brush-alt:before{content:"\f5a9"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-pallet-alt:before{content:"\f483"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-paragraph-rtl:before{content:"\f878"}.fa-parking:before{content:"\f540"}.fa-parking-circle:before{content:"\f615"}.fa-parking-circle-slash:before{content:"\f616"}.fa-parking-slash:before{content:"\f617"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paw-alt:before{content:"\f701"}.fa-paw-claws:before{content:"\f702"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pegasus:before{content:"\f703"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil:before{content:"\f040"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-paintbrush:before{content:"\f618"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-pennant:before{content:"\f456"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-person-carry:before{content:"\f4cf"}.fa-person-dolly:before{content:"\f4d0"}.fa-person-dolly-empty:before{content:"\f4d1"}.fa-person-sign:before{content:"\f757"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-laptop:before{content:"\f87a"}.fa-phone-office:before{content:"\f67d"}.fa-phone-plus:before{content:"\f4d2"}.fa-phone-rotary:before{content:"\f8d3"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pi:before{content:"\f67e"}.fa-piano:before{content:"\f8d4"}.fa-piano-keyboard:before{content:"\f8d5"}.fa-pie:before{content:"\f705"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\f91e"}.fa-pig:before{content:"\f706"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza:before{content:"\f817"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-alt:before{content:"\f3de"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-planet-moon:before{content:"\f91f"}.fa-planet-ringed:before{content:"\f920"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-hexagon:before{content:"\f300"}.fa-plus-octagon:before{content:"\f301"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-podium:before{content:"\f680"}.fa-podium-star:before{content:"\f758"}.fa-police-box:before{content:"\f921"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poll-people:before{content:"\f759"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-popcorn:before{content:"\f819"}.fa-portal-enter:before{content:"\f922"}.fa-portal-exit:before{content:"\f923"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-presentation:before{content:"\f685"}.fa-print:before{content:"\f02f"}.fa-print-search:before{content:"\f81a"}.fa-print-slash:before{content:"\f686"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-projector:before{content:"\f8d6"}.fa-pumpkin:before{content:"\f707"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-question-square:before{content:"\f2fd"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-rabbit:before{content:"\f708"}.fa-rabbit-fast:before{content:"\f709"}.fa-racquet:before{content:"\f45a"}.fa-radar:before{content:"\f924"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-radio:before{content:"\f8d7"}.fa-radio-alt:before{content:"\f8d8"}.fa-rainbow:before{content:"\f75b"}.fa-raindrops:before{content:"\f75c"}.fa-ram:before{content:"\f70a"}.fa-ramp-loading:before{content:"\f4d4"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-raygun:before{content:"\f925"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-rectangle-landscape:before{content:"\f2fa"}.fa-rectangle-portrait:before{content:"\f2fb"}.fa-rectangle-wide:before{content:"\f2fc"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-refrigerator:before{content:"\f926"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-repeat:before{content:"\f363"}.fa-repeat-1:before{content:"\f365"}.fa-repeat-1-alt:before{content:"\f366"}.fa-repeat-alt:before{content:"\f364"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-retweet-alt:before{content:"\f361"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-rings-wedding:before{content:"\f81b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocket-launch:before{content:"\f927"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-route-highway:before{content:"\f61a"}.fa-route-interstate:before{content:"\f61b"}.fa-router:before{content:"\f8da"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-triangle:before{content:"\f61c"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rv:before{content:"\f7be"}.fa-sack:before{content:"\f81c"}.fa-sack-dollar:before{content:"\f81d"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salad:before{content:"\f81e"}.fa-salesforce:before{content:"\f83b"}.fa-sandwich:before{content:"\f81f"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-sausage:before{content:"\f820"}.fa-save:before{content:"\f0c7"}.fa-sax-hot:before{content:"\f8db"}.fa-saxophone:before{content:"\f8dc"}.fa-scalpel:before{content:"\f61d"}.fa-scalpel-path:before{content:"\f61e"}.fa-scanner:before{content:"\f488"}.fa-scanner-image:before{content:"\f8f3"}.fa-scanner-keyboard:before{content:"\f489"}.fa-scanner-touchscreen:before{content:"\f48a"}.fa-scarecrow:before{content:"\f70d"}.fa-scarf:before{content:"\f7c1"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-scroll-old:before{content:"\f70f"}.fa-scrubber:before{content:"\f2f8"}.fa-scythe:before{content:"\f710"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-send-back:before{content:"\f87e"}.fa-send-backward:before{content:"\f87f"}.fa-sensor:before{content:"\f928"}.fa-sensor-alert:before{content:"\f929"}.fa-sensor-fire:before{content:"\f92a"}.fa-sensor-on:before{content:"\f92b"}.fa-sensor-smoke:before{content:"\f92c"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-all:before{content:"\f367"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-sheep:before{content:"\f711"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield:before{content:"\f132"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-check:before{content:"\f2f7"}.fa-shield-cross:before{content:"\f712"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shipping-timed:before{content:"\f48c"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shish-kebab:before{content:"\f821"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shovel:before{content:"\f713"}.fa-shovel-snow:before{content:"\f7c3"}.fa-shower:before{content:"\f2cc"}.fa-shredder:before{content:"\f68a"}.fa-shuttle-van:before{content:"\f5b6"}.fa-shuttlecock:before{content:"\f45b"}.fa-sickle:before{content:"\f822"}.fa-sigma:before{content:"\f68b"}.fa-sign:before{content:"\f4d9"}.fa-sign-in:before{content:"\f090"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out:before{content:"\f08b"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signal-1:before{content:"\f68c"}.fa-signal-2:before{content:"\f68d"}.fa-signal-3:before{content:"\f68e"}.fa-signal-4:before{content:"\f68f"}.fa-signal-alt:before{content:"\f690"}.fa-signal-alt-1:before{content:"\f691"}.fa-signal-alt-2:before{content:"\f692"}.fa-signal-alt-3:before{content:"\f693"}.fa-signal-alt-slash:before{content:"\f694"}.fa-signal-slash:before{content:"\f695"}.fa-signal-stream:before{content:"\f8dd"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-siren:before{content:"\f92d"}.fa-siren-on:before{content:"\f92e"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-skeleton:before{content:"\f620"}.fa-sketch:before{content:"\f7c6"}.fa-ski-jump:before{content:"\f7c7"}.fa-ski-lift:before{content:"\f7c8"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-cow:before{content:"\f8de"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sledding:before{content:"\f7cb"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-sliders-h-square:before{content:"\f3f0"}.fa-sliders-v:before{content:"\f3f1"}.fa-sliders-v-square:before{content:"\f3f2"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-plus:before{content:"\f5b9"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoke:before{content:"\f760"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snake:before{content:"\f716"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snooze:before{content:"\f880"}.fa-snow-blowing:before{content:"\f761"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowflakes:before{content:"\f7cf"}.fa-snowman:before{content:"\f7d0"}.fa-snowmobile:before{content:"\f7d1"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-solar-system:before{content:"\f92f"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-alt:before{content:"\f883"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-circle:before{content:"\f930"}.fa-sort-circle-down:before{content:"\f931"}.fa-sort-circle-up:before{content:"\f932"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-shapes-down:before{content:"\f888"}.fa-sort-shapes-down-alt:before{content:"\f889"}.fa-sort-shapes-up:before{content:"\f88a"}.fa-sort-shapes-up-alt:before{content:"\f88b"}.fa-sort-size-down:before{content:"\f88c"}.fa-sort-size-down-alt:before{content:"\f88d"}.fa-sort-size-up:before{content:"\f88e"}.fa-sort-size-up-alt:before{content:"\f88f"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-soup:before{content:"\f823"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-space-station-moon:before{content:"\f933"}.fa-space-station-moon-alt:before{content:"\f934"}.fa-spade:before{content:"\f2f4"}.fa-sparkles:before{content:"\f890"}.fa-speakap:before{content:"\f3f3"}.fa-speaker:before{content:"\f8df"}.fa-speaker-deck:before{content:"\f83c"}.fa-speakers:before{content:"\f8e0"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spider-black-widow:before{content:"\f718"}.fa-spider-web:before{content:"\f719"}.fa-spinner:before{content:"\f110"}.fa-spinner-third:before{content:"\f3f4"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-sprinkler:before{content:"\f935"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root:before{content:"\f697"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-squirrel:before{content:"\f71a"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-staff:before{content:"\f71b"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-christmas:before{content:"\f7d4"}.fa-star-exclamation:before{content:"\f2f3"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-star-shooting:before{content:"\f936"}.fa-starfighter:before{content:"\f937"}.fa-starfighter-alt:before{content:"\f938"}.fa-stars:before{content:"\f762"}.fa-starship:before{content:"\f939"}.fa-starship-freighter:before{content:"\f93a"}.fa-staylinked:before{content:"\f3f5"}.fa-steak:before{content:"\f824"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-steering-wheel:before{content:"\f622"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stocking:before{content:"\f7d5"}.fa-stomach:before{content:"\f623"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-stretcher:before{content:"\f825"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-sun-cloud:before{content:"\f763"}.fa-sun-dust:before{content:"\f764"}.fa-sun-haze:before{content:"\f765"}.fa-sunglasses:before{content:"\f892"}.fa-sunrise:before{content:"\f766"}.fa-sunset:before{content:"\f767"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-sword:before{content:"\f71c"}.fa-sword-laser:before{content:"\f93b"}.fa-sword-laser-alt:before{content:"\f93c"}.fa-swords:before{content:"\f71d"}.fa-swords-laser:before{content:"\f93d"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablet-android:before{content:"\f3fb"}.fa-tablet-android-alt:before{content:"\f3fc"}.fa-tablet-rugged:before{content:"\f48f"}.fa-tablets:before{content:"\f490"}.fa-tachometer:before{content:"\f0e4"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tachometer-alt-average:before{content:"\f624"}.fa-tachometer-alt-fast:before{content:"\f625"}.fa-tachometer-alt-fastest:before{content:"\f626"}.fa-tachometer-alt-slow:before{content:"\f627"}.fa-tachometer-alt-slowest:before{content:"\f628"}.fa-tachometer-average:before{content:"\f629"}.fa-tachometer-fast:before{content:"\f62a"}.fa-tachometer-fastest:before{content:"\f62b"}.fa-tachometer-slow:before{content:"\f62c"}.fa-tachometer-slowest:before{content:"\f62d"}.fa-taco:before{content:"\f826"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tally:before{content:"\f69c"}.fa-tanakh:before{content:"\f827"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-tasks-alt:before{content:"\f828"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-telescope:before{content:"\f93e"}.fa-temperature-down:before{content:"\f93f"}.fa-temperature-frigid:before{content:"\f768"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-hot:before{content:"\f76a"}.fa-temperature-low:before{content:"\f76b"}.fa-temperature-up:before{content:"\f940"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-tennis-ball:before{content:"\f45e"}.fa-terminal:before{content:"\f120"}.fa-text:before{content:"\f893"}.fa-text-height:before{content:"\f034"}.fa-text-size:before{content:"\f894"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-theta:before{content:"\f69e"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-thunderstorm:before{content:"\f76c"}.fa-thunderstorm-moon:before{content:"\f76d"}.fa-thunderstorm-sun:before{content:"\f76e"}.fa-ticket:before{content:"\f145"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tilde:before{content:"\f69f"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-times-hexagon:before{content:"\f2ee"}.fa-times-octagon:before{content:"\f2f0"}.fa-times-square:before{content:"\f2d3"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tire:before{content:"\f631"}.fa-tire-flat:before{content:"\f632"}.fa-tire-pressure-warning:before{content:"\f633"}.fa-tire-rugged:before{content:"\f634"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-alt:before{content:"\f71f"}.fa-tombstone:before{content:"\f720"}.fa-tombstone-alt:before{content:"\f721"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-toothbrush:before{content:"\f635"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tornado:before{content:"\f76f"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-cone:before{content:"\f636"}.fa-traffic-light:before{content:"\f637"}.fa-traffic-light-go:before{content:"\f638"}.fa-traffic-light-slow:before{content:"\f639"}.fa-traffic-light-stop:before{content:"\f63a"}.fa-trailer:before{content:"\f941"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-transporter:before{content:"\f942"}.fa-transporter-1:before{content:"\f943"}.fa-transporter-2:before{content:"\f944"}.fa-transporter-3:before{content:"\f945"}.fa-transporter-empty:before{content:"\f946"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-trash-undo:before{content:"\f895"}.fa-trash-undo-alt:before{content:"\f896"}.fa-treasure-chest:before{content:"\f723"}.fa-tree:before{content:"\f1bb"}.fa-tree-alt:before{content:"\f400"}.fa-tree-christmas:before{content:"\f7db"}.fa-tree-decorated:before{content:"\f7dc"}.fa-tree-large:before{content:"\f7dd"}.fa-tree-palm:before{content:"\f82b"}.fa-trees:before{content:"\f724"}.fa-trello:before{content:"\f181"}.fa-triangle:before{content:"\f2ec"}.fa-triangle-music:before{content:"\f8e2"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-trophy-alt:before{content:"\f2eb"}.fa-truck:before{content:"\f0d1"}.fa-truck-container:before{content:"\f4dc"}.fa-truck-couch:before{content:"\f4dd"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-truck-plow:before{content:"\f7de"}.fa-truck-ramp:before{content:"\f4e0"}.fa-trumpet:before{content:"\f8e3"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-turkey:before{content:"\f725"}.fa-turntable:before{content:"\f8e4"}.fa-turtle:before{content:"\f726"}.fa-tv:before{content:"\f26c"}.fa-tv-alt:before{content:"\f8e5"}.fa-tv-music:before{content:"\f8e6"}.fa-tv-retro:before{content:"\f401"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typewriter:before{content:"\f8e7"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-ufo:before{content:"\f947"}.fa-ufo-beam:before{content:"\f948"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-unicorn:before{content:"\f727"}.fa-union:before{content:"\f6a2"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\f949"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-usb-drive:before{content:"\f8e9"}.fa-usd-circle:before{content:"\f2e8"}.fa-usd-square:before{content:"\f2e9"}.fa-user:before{content:"\f007"}.fa-user-alien:before{content:"\f94a"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-chart:before{content:"\f6a3"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-cowboy:before{content:"\f8ea"}.fa-user-crown:before{content:"\f6a4"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-hard-hat:before{content:"\f82c"}.fa-user-headset:before{content:"\f82d"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-md-chat:before{content:"\f82e"}.fa-user-minus:before{content:"\f503"}.fa-user-music:before{content:"\f8eb"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-robot:before{content:"\f94b"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-user-visor:before{content:"\f94c"}.fa-users:before{content:"\f0c0"}.fa-users-class:before{content:"\f63d"}.fa-users-cog:before{content:"\f509"}.fa-users-crown:before{content:"\f6a5"}.fa-users-medical:before{content:"\f830"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-fork:before{content:"\f2e3"}.fa-utensil-knife:before{content:"\f2e4"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-utensils-alt:before{content:"\f2e6"}.fa-vaadin:before{content:"\f408"}.fa-vacuum:before{content:"\f94d"}.fa-vacuum-robot:before{content:"\f94e"}.fa-value-absolute:before{content:"\f6a6"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vhs:before{content:"\f8ec"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-plus:before{content:"\f4e1"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-violin:before{content:"\f8ed"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volcano:before{content:"\f770"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume:before{content:"\f6a8"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-slash:before{content:"\f2e2"}.fa-volume-up:before{content:"\f028"}.fa-vote-nay:before{content:"\f771"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-wagon-covered:before{content:"\f8ee"}.fa-walker:before{content:"\f831"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-wand:before{content:"\f72a"}.fa-wand-magic:before{content:"\f72b"}.fa-warehouse:before{content:"\f494"}.fa-warehouse-alt:before{content:"\f495"}.fa-washer:before{content:"\f898"}.fa-watch:before{content:"\f2e1"}.fa-watch-calculator:before{content:"\f8f0"}.fa-watch-fitness:before{content:"\f63e"}.fa-water:before{content:"\f773"}.fa-water-lower:before{content:"\f774"}.fa-water-rise:before{content:"\f775"}.fa-wave-sine:before{content:"\f899"}.fa-wave-square:before{content:"\f83e"}.fa-wave-triangle:before{content:"\f89a"}.fa-waveform:before{content:"\f8f1"}.fa-waveform-path:before{content:"\f8f2"}.fa-waze:before{content:"\f83f"}.fa-webcam:before{content:"\f832"}.fa-webcam-slash:before{content:"\f833"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whale:before{content:"\f72c"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheat:before{content:"\f72d"}.fa-wheelchair:before{content:"\f193"}.fa-whistle:before{content:"\f460"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wifi-1:before{content:"\f6aa"}.fa-wifi-2:before{content:"\f6ab"}.fa-wifi-slash:before{content:"\f6ac"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-wind-turbine:before{content:"\f89b"}.fa-wind-warning:before{content:"\f776"}.fa-window:before{content:"\f40e"}.fa-window-alt:before{content:"\f40f"}.fa-window-close:before{content:"\f410"}.fa-window-frame:before{content:"\f94f"}.fa-window-frame-open:before{content:"\f950"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-windsock:before{content:"\f777"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wreath:before{content:"\f7e2"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Duotone";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-duotone-900.eot);src:url(../webfonts/fa-duotone-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-duotone-900.woff2) format("woff2"),url(../webfonts/fa-duotone-900.woff) format("woff"),url(../webfonts/fa-duotone-900.ttf) format("truetype"),url(../webfonts/fa-duotone-900.svg#fontawesome) format("svg")}.fad{position:relative;font-family:"Font Awesome 5 Duotone";font-weight:900}.fad:before{position:absolute;color:var(--fa-primary-color,inherit);opacity:1;opacity:var(--fa-primary-opacity,1)}.fad:after{color:var(--fa-secondary-color,inherit)}.fa-swap-opacity .fad:before,.fad.fa-swap-opacity:before,.fad:after{opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.fa-swap-opacity .fad:after,.fad.fa-swap-opacity:after{opacity:1;opacity:var(--fa-primary-opacity,1)}.fad.fa-inverse{color:#fff}.fad.fa-stack-1x,.fad.fa-stack-2x{position:absolute}.fad.fa-fw:before,.fad.fa-stack-1x:before,.fad.fa-stack-2x:before{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.fad.fa-abacus:after{content:"\10f640"}.fad.fa-acorn:after{content:"\10f6ae"}.fad.fa-ad:after{content:"\10f641"}.fad.fa-address-book:after{content:"\10f2b9"}.fad.fa-address-card:after{content:"\10f2bb"}.fad.fa-adjust:after{content:"\10f042"}.fad.fa-air-conditioner:after{content:"\10f8f4"}.fad.fa-air-freshener:after{content:"\10f5d0"}.fad.fa-alarm-clock:after{content:"\10f34e"}.fad.fa-alarm-exclamation:after{content:"\10f843"}.fad.fa-alarm-plus:after{content:"\10f844"}.fad.fa-alarm-snooze:after{content:"\10f845"}.fad.fa-album:after{content:"\10f89f"}.fad.fa-album-collection:after{content:"\10f8a0"}.fad.fa-alicorn:after{content:"\10f6b0"}.fad.fa-alien:after{content:"\10f8f5"}.fad.fa-alien-monster:after{content:"\10f8f6"}.fad.fa-align-center:after{content:"\10f037"}.fad.fa-align-justify:after{content:"\10f039"}.fad.fa-align-left:after{content:"\10f036"}.fad.fa-align-right:after{content:"\10f038"}.fad.fa-align-slash:after{content:"\10f846"}.fad.fa-allergies:after{content:"\10f461"}.fad.fa-ambulance:after{content:"\10f0f9"}.fad.fa-american-sign-language-interpreting:after{content:"\10f2a3"}.fad.fa-amp-guitar:after{content:"\10f8a1"}.fad.fa-analytics:after{content:"\10f643"}.fad.fa-anchor:after{content:"\10f13d"}.fad.fa-angel:after{content:"\10f779"}.fad.fa-angle-double-down:after{content:"\10f103"}.fad.fa-angle-double-left:after{content:"\10f100"}.fad.fa-angle-double-right:after{content:"\10f101"}.fad.fa-angle-double-up:after{content:"\10f102"}.fad.fa-angle-down:after{content:"\10f107"}.fad.fa-angle-left:after{content:"\10f104"}.fad.fa-angle-right:after{content:"\10f105"}.fad.fa-angle-up:after{content:"\10f106"}.fad.fa-angry:after{content:"\10f556"}.fad.fa-ankh:after{content:"\10f644"}.fad.fa-apple-alt:after{content:"\10f5d1"}.fad.fa-apple-crate:after{content:"\10f6b1"}.fad.fa-archive:after{content:"\10f187"}.fad.fa-archway:after{content:"\10f557"}.fad.fa-arrow-alt-circle-down:after{content:"\10f358"}.fad.fa-arrow-alt-circle-left:after{content:"\10f359"}.fad.fa-arrow-alt-circle-right:after{content:"\10f35a"}.fad.fa-arrow-alt-circle-up:after{content:"\10f35b"}.fad.fa-arrow-alt-down:after{content:"\10f354"}.fad.fa-arrow-alt-from-bottom:after{content:"\10f346"}.fad.fa-arrow-alt-from-left:after{content:"\10f347"}.fad.fa-arrow-alt-from-right:after{content:"\10f348"}.fad.fa-arrow-alt-from-top:after{content:"\10f349"}.fad.fa-arrow-alt-left:after{content:"\10f355"}.fad.fa-arrow-alt-right:after{content:"\10f356"}.fad.fa-arrow-alt-square-down:after{content:"\10f350"}.fad.fa-arrow-alt-square-left:after{content:"\10f351"}.fad.fa-arrow-alt-square-right:after{content:"\10f352"}.fad.fa-arrow-alt-square-up:after{content:"\10f353"}.fad.fa-arrow-alt-to-bottom:after{content:"\10f34a"}.fad.fa-arrow-alt-to-left:after{content:"\10f34b"}.fad.fa-arrow-alt-to-right:after{content:"\10f34c"}.fad.fa-arrow-alt-to-top:after{content:"\10f34d"}.fad.fa-arrow-alt-up:after{content:"\10f357"}.fad.fa-arrow-circle-down:after{content:"\10f0ab"}.fad.fa-arrow-circle-left:after{content:"\10f0a8"}.fad.fa-arrow-circle-right:after{content:"\10f0a9"}.fad.fa-arrow-circle-up:after{content:"\10f0aa"}.fad.fa-arrow-down:after{content:"\10f063"}.fad.fa-arrow-from-bottom:after{content:"\10f342"}.fad.fa-arrow-from-left:after{content:"\10f343"}.fad.fa-arrow-from-right:after{content:"\10f344"}.fad.fa-arrow-from-top:after{content:"\10f345"}.fad.fa-arrow-left:after{content:"\10f060"}.fad.fa-arrow-right:after{content:"\10f061"}.fad.fa-arrow-square-down:after{content:"\10f339"}.fad.fa-arrow-square-left:after{content:"\10f33a"}.fad.fa-arrow-square-right:after{content:"\10f33b"}.fad.fa-arrow-square-up:after{content:"\10f33c"}.fad.fa-arrow-to-bottom:after{content:"\10f33d"}.fad.fa-arrow-to-left:after{content:"\10f33e"}.fad.fa-arrow-to-right:after{content:"\10f340"}.fad.fa-arrow-to-top:after{content:"\10f341"}.fad.fa-arrow-up:after{content:"\10f062"}.fad.fa-arrows:after{content:"\10f047"}.fad.fa-arrows-alt:after{content:"\10f0b2"}.fad.fa-arrows-alt-h:after{content:"\10f337"}.fad.fa-arrows-alt-v:after{content:"\10f338"}.fad.fa-arrows-h:after{content:"\10f07e"}.fad.fa-arrows-v:after{content:"\10f07d"}.fad.fa-assistive-listening-systems:after{content:"\10f2a2"}.fad.fa-asterisk:after{content:"\10f069"}.fad.fa-at:after{content:"\10f1fa"}.fad.fa-atlas:after{content:"\10f558"}.fad.fa-atom:after{content:"\10f5d2"}.fad.fa-atom-alt:after{content:"\10f5d3"}.fad.fa-audio-description:after{content:"\10f29e"}.fad.fa-award:after{content:"\10f559"}.fad.fa-axe:after{content:"\10f6b2"}.fad.fa-axe-battle:after{content:"\10f6b3"}.fad.fa-baby:after{content:"\10f77c"}.fad.fa-baby-carriage:after{content:"\10f77d"}.fad.fa-backpack:after{content:"\10f5d4"}.fad.fa-backspace:after{content:"\10f55a"}.fad.fa-backward:after{content:"\10f04a"}.fad.fa-bacon:after{content:"\10f7e5"}.fad.fa-badge:after{content:"\10f335"}.fad.fa-badge-check:after{content:"\10f336"}.fad.fa-badge-dollar:after{content:"\10f645"}.fad.fa-badge-percent:after{content:"\10f646"}.fad.fa-badge-sheriff:after{content:"\10f8a2"}.fad.fa-badger-honey:after{content:"\10f6b4"}.fad.fa-bags-shopping:after{content:"\10f847"}.fad.fa-bahai:after{content:"\10f666"}.fad.fa-balance-scale:after{content:"\10f24e"}.fad.fa-balance-scale-left:after{content:"\10f515"}.fad.fa-balance-scale-right:after{content:"\10f516"}.fad.fa-ball-pile:after{content:"\10f77e"}.fad.fa-ballot:after{content:"\10f732"}.fad.fa-ballot-check:after{content:"\10f733"}.fad.fa-ban:after{content:"\10f05e"}.fad.fa-band-aid:after{content:"\10f462"}.fad.fa-banjo:after{content:"\10f8a3"}.fad.fa-barcode:after{content:"\10f02a"}.fad.fa-barcode-alt:after{content:"\10f463"}.fad.fa-barcode-read:after{content:"\10f464"}.fad.fa-barcode-scan:after{content:"\10f465"}.fad.fa-bars:after{content:"\10f0c9"}.fad.fa-baseball:after{content:"\10f432"}.fad.fa-baseball-ball:after{content:"\10f433"}.fad.fa-basketball-ball:after{content:"\10f434"}.fad.fa-basketball-hoop:after{content:"\10f435"}.fad.fa-bat:after{content:"\10f6b5"}.fad.fa-bath:after{content:"\10f2cd"}.fad.fa-battery-bolt:after{content:"\10f376"}.fad.fa-battery-empty:after{content:"\10f244"}.fad.fa-battery-full:after{content:"\10f240"}.fad.fa-battery-half:after{content:"\10f242"}.fad.fa-battery-quarter:after{content:"\10f243"}.fad.fa-battery-slash:after{content:"\10f377"}.fad.fa-battery-three-quarters:after{content:"\10f241"}.fad.fa-bed:after{content:"\10f236"}.fad.fa-bed-alt:after{content:"\10f8f7"}.fad.fa-bed-bunk:after{content:"\10f8f8"}.fad.fa-bed-empty:after{content:"\10f8f9"}.fad.fa-beer:after{content:"\10f0fc"}.fad.fa-bell:after{content:"\10f0f3"}.fad.fa-bell-exclamation:after{content:"\10f848"}.fad.fa-bell-on:after{content:"\10f8fa"}.fad.fa-bell-plus:after{content:"\10f849"}.fad.fa-bell-school:after{content:"\10f5d5"}.fad.fa-bell-school-slash:after{content:"\10f5d6"}.fad.fa-bell-slash:after{content:"\10f1f6"}.fad.fa-bells:after{content:"\10f77f"}.fad.fa-betamax:after{content:"\10f8a4"}.fad.fa-bezier-curve:after{content:"\10f55b"}.fad.fa-bible:after{content:"\10f647"}.fad.fa-bicycle:after{content:"\10f206"}.fad.fa-biking:after{content:"\10f84a"}.fad.fa-biking-mountain:after{content:"\10f84b"}.fad.fa-binoculars:after{content:"\10f1e5"}.fad.fa-biohazard:after{content:"\10f780"}.fad.fa-birthday-cake:after{content:"\10f1fd"}.fad.fa-blanket:after{content:"\10f498"}.fad.fa-blender:after{content:"\10f517"}.fad.fa-blender-phone:after{content:"\10f6b6"}.fad.fa-blind:after{content:"\10f29d"}.fad.fa-blinds:after{content:"\10f8fb"}.fad.fa-blinds-open:after{content:"\10f8fc"}.fad.fa-blinds-raised:after{content:"\10f8fd"}.fad.fa-blog:after{content:"\10f781"}.fad.fa-bold:after{content:"\10f032"}.fad.fa-bolt:after{content:"\10f0e7"}.fad.fa-bomb:after{content:"\10f1e2"}.fad.fa-bone:after{content:"\10f5d7"}.fad.fa-bone-break:after{content:"\10f5d8"}.fad.fa-bong:after{content:"\10f55c"}.fad.fa-book:after{content:"\10f02d"}.fad.fa-book-alt:after{content:"\10f5d9"}.fad.fa-book-dead:after{content:"\10f6b7"}.fad.fa-book-heart:after{content:"\10f499"}.fad.fa-book-medical:after{content:"\10f7e6"}.fad.fa-book-open:after{content:"\10f518"}.fad.fa-book-reader:after{content:"\10f5da"}.fad.fa-book-spells:after{content:"\10f6b8"}.fad.fa-book-user:after{content:"\10f7e7"}.fad.fa-bookmark:after{content:"\10f02e"}.fad.fa-books:after{content:"\10f5db"}.fad.fa-books-medical:after{content:"\10f7e8"}.fad.fa-boombox:after{content:"\10f8a5"}.fad.fa-boot:after{content:"\10f782"}.fad.fa-booth-curtain:after{content:"\10f734"}.fad.fa-border-all:after{content:"\10f84c"}.fad.fa-border-bottom:after{content:"\10f84d"}.fad.fa-border-center-h:after{content:"\10f89c"}.fad.fa-border-center-v:after{content:"\10f89d"}.fad.fa-border-inner:after{content:"\10f84e"}.fad.fa-border-left:after{content:"\10f84f"}.fad.fa-border-none:after{content:"\10f850"}.fad.fa-border-outer:after{content:"\10f851"}.fad.fa-border-right:after{content:"\10f852"}.fad.fa-border-style:after{content:"\10f853"}.fad.fa-border-style-alt:after{content:"\10f854"}.fad.fa-border-top:after{content:"\10f855"}.fad.fa-bow-arrow:after{content:"\10f6b9"}.fad.fa-bowling-ball:after{content:"\10f436"}.fad.fa-bowling-pins:after{content:"\10f437"}.fad.fa-box:after{content:"\10f466"}.fad.fa-box-alt:after{content:"\10f49a"}.fad.fa-box-ballot:after{content:"\10f735"}.fad.fa-box-check:after{content:"\10f467"}.fad.fa-box-fragile:after{content:"\10f49b"}.fad.fa-box-full:after{content:"\10f49c"}.fad.fa-box-heart:after{content:"\10f49d"}.fad.fa-box-open:after{content:"\10f49e"}.fad.fa-box-up:after{content:"\10f49f"}.fad.fa-box-usd:after{content:"\10f4a0"}.fad.fa-boxes:after{content:"\10f468"}.fad.fa-boxes-alt:after{content:"\10f4a1"}.fad.fa-boxing-glove:after{content:"\10f438"}.fad.fa-brackets:after{content:"\10f7e9"}.fad.fa-brackets-curly:after{content:"\10f7ea"}.fad.fa-braille:after{content:"\10f2a1"}.fad.fa-brain:after{content:"\10f5dc"}.fad.fa-bread-loaf:after{content:"\10f7eb"}.fad.fa-bread-slice:after{content:"\10f7ec"}.fad.fa-briefcase:after{content:"\10f0b1"}.fad.fa-briefcase-medical:after{content:"\10f469"}.fad.fa-bring-forward:after{content:"\10f856"}.fad.fa-bring-front:after{content:"\10f857"}.fad.fa-broadcast-tower:after{content:"\10f519"}.fad.fa-broom:after{content:"\10f51a"}.fad.fa-browser:after{content:"\10f37e"}.fad.fa-brush:after{content:"\10f55d"}.fad.fa-bug:after{content:"\10f188"}.fad.fa-building:after{content:"\10f1ad"}.fad.fa-bullhorn:after{content:"\10f0a1"}.fad.fa-bullseye:after{content:"\10f140"}.fad.fa-bullseye-arrow:after{content:"\10f648"}.fad.fa-bullseye-pointer:after{content:"\10f649"}.fad.fa-burger-soda:after{content:"\10f858"}.fad.fa-burn:after{content:"\10f46a"}.fad.fa-burrito:after{content:"\10f7ed"}.fad.fa-bus:after{content:"\10f207"}.fad.fa-bus-alt:after{content:"\10f55e"}.fad.fa-bus-school:after{content:"\10f5dd"}.fad.fa-business-time:after{content:"\10f64a"}.fad.fa-cabinet-filing:after{content:"\10f64b"}.fad.fa-cactus:after{content:"\10f8a7"}.fad.fa-calculator:after{content:"\10f1ec"}.fad.fa-calculator-alt:after{content:"\10f64c"}.fad.fa-calendar:after{content:"\10f133"}.fad.fa-calendar-alt:after{content:"\10f073"}.fad.fa-calendar-check:after{content:"\10f274"}.fad.fa-calendar-day:after{content:"\10f783"}.fad.fa-calendar-edit:after{content:"\10f333"}.fad.fa-calendar-exclamation:after{content:"\10f334"}.fad.fa-calendar-minus:after{content:"\10f272"}.fad.fa-calendar-plus:after{content:"\10f271"}.fad.fa-calendar-star:after{content:"\10f736"}.fad.fa-calendar-times:after{content:"\10f273"}.fad.fa-calendar-week:after{content:"\10f784"}.fad.fa-camcorder:after{content:"\10f8a8"}.fad.fa-camera:after{content:"\10f030"}.fad.fa-camera-alt:after{content:"\10f332"}.fad.fa-camera-home:after{content:"\10f8fe"}.fad.fa-camera-movie:after{content:"\10f8a9"}.fad.fa-camera-polaroid:after{content:"\10f8aa"}.fad.fa-camera-retro:after{content:"\10f083"}.fad.fa-campfire:after{content:"\10f6ba"}.fad.fa-campground:after{content:"\10f6bb"}.fad.fa-candle-holder:after{content:"\10f6bc"}.fad.fa-candy-cane:after{content:"\10f786"}.fad.fa-candy-corn:after{content:"\10f6bd"}.fad.fa-cannabis:after{content:"\10f55f"}.fad.fa-capsules:after{content:"\10f46b"}.fad.fa-car:after{content:"\10f1b9"}.fad.fa-car-alt:after{content:"\10f5de"}.fad.fa-car-battery:after{content:"\10f5df"}.fad.fa-car-building:after{content:"\10f859"}.fad.fa-car-bump:after{content:"\10f5e0"}.fad.fa-car-bus:after{content:"\10f85a"}.fad.fa-car-crash:after{content:"\10f5e1"}.fad.fa-car-garage:after{content:"\10f5e2"}.fad.fa-car-mechanic:after{content:"\10f5e3"}.fad.fa-car-side:after{content:"\10f5e4"}.fad.fa-car-tilt:after{content:"\10f5e5"}.fad.fa-car-wash:after{content:"\10f5e6"}.fad.fa-caravan:after{content:"\10f8ff"}.fad.fa-caravan-alt:after{content:"\10f900"}.fad.fa-caret-circle-down:after{content:"\10f32d"}.fad.fa-caret-circle-left:after{content:"\10f32e"}.fad.fa-caret-circle-right:after{content:"\10f330"}.fad.fa-caret-circle-up:after{content:"\10f331"}.fad.fa-caret-down:after{content:"\10f0d7"}.fad.fa-caret-left:after{content:"\10f0d9"}.fad.fa-caret-right:after{content:"\10f0da"}.fad.fa-caret-square-down:after{content:"\10f150"}.fad.fa-caret-square-left:after{content:"\10f191"}.fad.fa-caret-square-right:after{content:"\10f152"}.fad.fa-caret-square-up:after{content:"\10f151"}.fad.fa-caret-up:after{content:"\10f0d8"}.fad.fa-carrot:after{content:"\10f787"}.fad.fa-cars:after{content:"\10f85b"}.fad.fa-cart-arrow-down:after{content:"\10f218"}.fad.fa-cart-plus:after{content:"\10f217"}.fad.fa-cash-register:after{content:"\10f788"}.fad.fa-cassette-tape:after{content:"\10f8ab"}.fad.fa-cat:after{content:"\10f6be"}.fad.fa-cat-space:after{content:"\10f901"}.fad.fa-cauldron:after{content:"\10f6bf"}.fad.fa-cctv:after{content:"\10f8ac"}.fad.fa-certificate:after{content:"\10f0a3"}.fad.fa-chair:after{content:"\10f6c0"}.fad.fa-chair-office:after{content:"\10f6c1"}.fad.fa-chalkboard:after{content:"\10f51b"}.fad.fa-chalkboard-teacher:after{content:"\10f51c"}.fad.fa-charging-station:after{content:"\10f5e7"}.fad.fa-chart-area:after{content:"\10f1fe"}.fad.fa-chart-bar:after{content:"\10f080"}.fad.fa-chart-line:after{content:"\10f201"}.fad.fa-chart-line-down:after{content:"\10f64d"}.fad.fa-chart-network:after{content:"\10f78a"}.fad.fa-chart-pie:after{content:"\10f200"}.fad.fa-chart-pie-alt:after{content:"\10f64e"}.fad.fa-chart-scatter:after{content:"\10f7ee"}.fad.fa-check:after{content:"\10f00c"}.fad.fa-check-circle:after{content:"\10f058"}.fad.fa-check-double:after{content:"\10f560"}.fad.fa-check-square:after{content:"\10f14a"}.fad.fa-cheese:after{content:"\10f7ef"}.fad.fa-cheese-swiss:after{content:"\10f7f0"}.fad.fa-cheeseburger:after{content:"\10f7f1"}.fad.fa-chess:after{content:"\10f439"}.fad.fa-chess-bishop:after{content:"\10f43a"}.fad.fa-chess-bishop-alt:after{content:"\10f43b"}.fad.fa-chess-board:after{content:"\10f43c"}.fad.fa-chess-clock:after{content:"\10f43d"}.fad.fa-chess-clock-alt:after{content:"\10f43e"}.fad.fa-chess-king:after{content:"\10f43f"}.fad.fa-chess-king-alt:after{content:"\10f440"}.fad.fa-chess-knight:after{content:"\10f441"}.fad.fa-chess-knight-alt:after{content:"\10f442"}.fad.fa-chess-pawn:after{content:"\10f443"}.fad.fa-chess-pawn-alt:after{content:"\10f444"}.fad.fa-chess-queen:after{content:"\10f445"}.fad.fa-chess-queen-alt:after{content:"\10f446"}.fad.fa-chess-rook:after{content:"\10f447"}.fad.fa-chess-rook-alt:after{content:"\10f448"}.fad.fa-chevron-circle-down:after{content:"\10f13a"}.fad.fa-chevron-circle-left:after{content:"\10f137"}.fad.fa-chevron-circle-right:after{content:"\10f138"}.fad.fa-chevron-circle-up:after{content:"\10f139"}.fad.fa-chevron-double-down:after{content:"\10f322"}.fad.fa-chevron-double-left:after{content:"\10f323"}.fad.fa-chevron-double-right:after{content:"\10f324"}.fad.fa-chevron-double-up:after{content:"\10f325"}.fad.fa-chevron-down:after{content:"\10f078"}.fad.fa-chevron-left:after{content:"\10f053"}.fad.fa-chevron-right:after{content:"\10f054"}.fad.fa-chevron-square-down:after{content:"\10f329"}.fad.fa-chevron-square-left:after{content:"\10f32a"}.fad.fa-chevron-square-right:after{content:"\10f32b"}.fad.fa-chevron-square-up:after{content:"\10f32c"}.fad.fa-chevron-up:after{content:"\10f077"}.fad.fa-child:after{content:"\10f1ae"}.fad.fa-chimney:after{content:"\10f78b"}.fad.fa-church:after{content:"\10f51d"}.fad.fa-circle:after{content:"\10f111"}.fad.fa-circle-notch:after{content:"\10f1ce"}.fad.fa-city:after{content:"\10f64f"}.fad.fa-clarinet:after{content:"\10f8ad"}.fad.fa-claw-marks:after{content:"\10f6c2"}.fad.fa-clinic-medical:after{content:"\10f7f2"}.fad.fa-clipboard:after{content:"\10f328"}.fad.fa-clipboard-check:after{content:"\10f46c"}.fad.fa-clipboard-list:after{content:"\10f46d"}.fad.fa-clipboard-list-check:after{content:"\10f737"}.fad.fa-clipboard-prescription:after{content:"\10f5e8"}.fad.fa-clipboard-user:after{content:"\10f7f3"}.fad.fa-clock:after{content:"\10f017"}.fad.fa-clone:after{content:"\10f24d"}.fad.fa-closed-captioning:after{content:"\10f20a"}.fad.fa-cloud:after{content:"\10f0c2"}.fad.fa-cloud-download:after{content:"\10f0ed"}.fad.fa-cloud-download-alt:after{content:"\10f381"}.fad.fa-cloud-drizzle:after{content:"\10f738"}.fad.fa-cloud-hail:after{content:"\10f739"}.fad.fa-cloud-hail-mixed:after{content:"\10f73a"}.fad.fa-cloud-meatball:after{content:"\10f73b"}.fad.fa-cloud-moon:after{content:"\10f6c3"}.fad.fa-cloud-moon-rain:after{content:"\10f73c"}.fad.fa-cloud-music:after{content:"\10f8ae"}.fad.fa-cloud-rain:after{content:"\10f73d"}.fad.fa-cloud-rainbow:after{content:"\10f73e"}.fad.fa-cloud-showers:after{content:"\10f73f"}.fad.fa-cloud-showers-heavy:after{content:"\10f740"}.fad.fa-cloud-sleet:after{content:"\10f741"}.fad.fa-cloud-snow:after{content:"\10f742"}.fad.fa-cloud-sun:after{content:"\10f6c4"}.fad.fa-cloud-sun-rain:after{content:"\10f743"}.fad.fa-cloud-upload:after{content:"\10f0ee"}.fad.fa-cloud-upload-alt:after{content:"\10f382"}.fad.fa-clouds:after{content:"\10f744"}.fad.fa-clouds-moon:after{content:"\10f745"}.fad.fa-clouds-sun:after{content:"\10f746"}.fad.fa-club:after{content:"\10f327"}.fad.fa-cocktail:after{content:"\10f561"}.fad.fa-code:after{content:"\10f121"}.fad.fa-code-branch:after{content:"\10f126"}.fad.fa-code-commit:after{content:"\10f386"}.fad.fa-code-merge:after{content:"\10f387"}.fad.fa-coffee:after{content:"\10f0f4"}.fad.fa-coffee-pot:after{content:"\10f902"}.fad.fa-coffee-togo:after{content:"\10f6c5"}.fad.fa-coffin:after{content:"\10f6c6"}.fad.fa-cog:after{content:"\10f013"}.fad.fa-cogs:after{content:"\10f085"}.fad.fa-coin:after{content:"\10f85c"}.fad.fa-coins:after{content:"\10f51e"}.fad.fa-columns:after{content:"\10f0db"}.fad.fa-comet:after{content:"\10f903"}.fad.fa-comment:after{content:"\10f075"}.fad.fa-comment-alt:after{content:"\10f27a"}.fad.fa-comment-alt-check:after{content:"\10f4a2"}.fad.fa-comment-alt-dollar:after{content:"\10f650"}.fad.fa-comment-alt-dots:after{content:"\10f4a3"}.fad.fa-comment-alt-edit:after{content:"\10f4a4"}.fad.fa-comment-alt-exclamation:after{content:"\10f4a5"}.fad.fa-comment-alt-lines:after{content:"\10f4a6"}.fad.fa-comment-alt-medical:after{content:"\10f7f4"}.fad.fa-comment-alt-minus:after{content:"\10f4a7"}.fad.fa-comment-alt-music:after{content:"\10f8af"}.fad.fa-comment-alt-plus:after{content:"\10f4a8"}.fad.fa-comment-alt-slash:after{content:"\10f4a9"}.fad.fa-comment-alt-smile:after{content:"\10f4aa"}.fad.fa-comment-alt-times:after{content:"\10f4ab"}.fad.fa-comment-check:after{content:"\10f4ac"}.fad.fa-comment-dollar:after{content:"\10f651"}.fad.fa-comment-dots:after{content:"\10f4ad"}.fad.fa-comment-edit:after{content:"\10f4ae"}.fad.fa-comment-exclamation:after{content:"\10f4af"}.fad.fa-comment-lines:after{content:"\10f4b0"}.fad.fa-comment-medical:after{content:"\10f7f5"}.fad.fa-comment-minus:after{content:"\10f4b1"}.fad.fa-comment-music:after{content:"\10f8b0"}.fad.fa-comment-plus:after{content:"\10f4b2"}.fad.fa-comment-slash:after{content:"\10f4b3"}.fad.fa-comment-smile:after{content:"\10f4b4"}.fad.fa-comment-times:after{content:"\10f4b5"}.fad.fa-comments:after{content:"\10f086"}.fad.fa-comments-alt:after{content:"\10f4b6"}.fad.fa-comments-alt-dollar:after{content:"\10f652"}.fad.fa-comments-dollar:after{content:"\10f653"}.fad.fa-compact-disc:after{content:"\10f51f"}.fad.fa-compass:after{content:"\10f14e"}.fad.fa-compass-slash:after{content:"\10f5e9"}.fad.fa-compress:after{content:"\10f066"}.fad.fa-compress-alt:after{content:"\10f422"}.fad.fa-compress-arrows-alt:after{content:"\10f78c"}.fad.fa-compress-wide:after{content:"\10f326"}.fad.fa-computer-classic:after{content:"\10f8b1"}.fad.fa-computer-speaker:after{content:"\10f8b2"}.fad.fa-concierge-bell:after{content:"\10f562"}.fad.fa-construction:after{content:"\10f85d"}.fad.fa-container-storage:after{content:"\10f4b7"}.fad.fa-conveyor-belt:after{content:"\10f46e"}.fad.fa-conveyor-belt-alt:after{content:"\10f46f"}.fad.fa-cookie:after{content:"\10f563"}.fad.fa-cookie-bite:after{content:"\10f564"}.fad.fa-copy:after{content:"\10f0c5"}.fad.fa-copyright:after{content:"\10f1f9"}.fad.fa-corn:after{content:"\10f6c7"}.fad.fa-couch:after{content:"\10f4b8"}.fad.fa-cow:after{content:"\10f6c8"}.fad.fa-cowbell:after{content:"\10f8b3"}.fad.fa-cowbell-more:after{content:"\10f8b4"}.fad.fa-credit-card:after{content:"\10f09d"}.fad.fa-credit-card-blank:after{content:"\10f389"}.fad.fa-credit-card-front:after{content:"\10f38a"}.fad.fa-cricket:after{content:"\10f449"}.fad.fa-croissant:after{content:"\10f7f6"}.fad.fa-crop:after{content:"\10f125"}.fad.fa-crop-alt:after{content:"\10f565"}.fad.fa-cross:after{content:"\10f654"}.fad.fa-crosshairs:after{content:"\10f05b"}.fad.fa-crow:after{content:"\10f520"}.fad.fa-crown:after{content:"\10f521"}.fad.fa-crutch:after{content:"\10f7f7"}.fad.fa-crutches:after{content:"\10f7f8"}.fad.fa-cube:after{content:"\10f1b2"}.fad.fa-cubes:after{content:"\10f1b3"}.fad.fa-curling:after{content:"\10f44a"}.fad.fa-cut:after{content:"\10f0c4"}.fad.fa-dagger:after{content:"\10f6cb"}.fad.fa-database:after{content:"\10f1c0"}.fad.fa-deaf:after{content:"\10f2a4"}.fad.fa-debug:after{content:"\10f7f9"}.fad.fa-deer:after{content:"\10f78e"}.fad.fa-deer-rudolph:after{content:"\10f78f"}.fad.fa-democrat:after{content:"\10f747"}.fad.fa-desktop:after{content:"\10f108"}.fad.fa-desktop-alt:after{content:"\10f390"}.fad.fa-dewpoint:after{content:"\10f748"}.fad.fa-dharmachakra:after{content:"\10f655"}.fad.fa-diagnoses:after{content:"\10f470"}.fad.fa-diamond:after{content:"\10f219"}.fad.fa-dice:after{content:"\10f522"}.fad.fa-dice-d10:after{content:"\10f6cd"}.fad.fa-dice-d12:after{content:"\10f6ce"}.fad.fa-dice-d20:after{content:"\10f6cf"}.fad.fa-dice-d4:after{content:"\10f6d0"}.fad.fa-dice-d6:after{content:"\10f6d1"}.fad.fa-dice-d8:after{content:"\10f6d2"}.fad.fa-dice-five:after{content:"\10f523"}.fad.fa-dice-four:after{content:"\10f524"}.fad.fa-dice-one:after{content:"\10f525"}.fad.fa-dice-six:after{content:"\10f526"}.fad.fa-dice-three:after{content:"\10f527"}.fad.fa-dice-two:after{content:"\10f528"}.fad.fa-digging:after{content:"\10f85e"}.fad.fa-digital-tachograph:after{content:"\10f566"}.fad.fa-diploma:after{content:"\10f5ea"}.fad.fa-directions:after{content:"\10f5eb"}.fad.fa-disc-drive:after{content:"\10f8b5"}.fad.fa-disease:after{content:"\10f7fa"}.fad.fa-divide:after{content:"\10f529"}.fad.fa-dizzy:after{content:"\10f567"}.fad.fa-dna:after{content:"\10f471"}.fad.fa-do-not-enter:after{content:"\10f5ec"}.fad.fa-dog:after{content:"\10f6d3"}.fad.fa-dog-leashed:after{content:"\10f6d4"}.fad.fa-dollar-sign:after{content:"\10f155"}.fad.fa-dolly:after{content:"\10f472"}.fad.fa-dolly-empty:after{content:"\10f473"}.fad.fa-dolly-flatbed:after{content:"\10f474"}.fad.fa-dolly-flatbed-alt:after{content:"\10f475"}.fad.fa-dolly-flatbed-empty:after{content:"\10f476"}.fad.fa-donate:after{content:"\10f4b9"}.fad.fa-door-closed:after{content:"\10f52a"}.fad.fa-door-open:after{content:"\10f52b"}.fad.fa-dot-circle:after{content:"\10f192"}.fad.fa-dove:after{content:"\10f4ba"}.fad.fa-download:after{content:"\10f019"}.fad.fa-drafting-compass:after{content:"\10f568"}.fad.fa-dragon:after{content:"\10f6d5"}.fad.fa-draw-circle:after{content:"\10f5ed"}.fad.fa-draw-polygon:after{content:"\10f5ee"}.fad.fa-draw-square:after{content:"\10f5ef"}.fad.fa-dreidel:after{content:"\10f792"}.fad.fa-drone:after{content:"\10f85f"}.fad.fa-drone-alt:after{content:"\10f860"}.fad.fa-drum:after{content:"\10f569"}.fad.fa-drum-steelpan:after{content:"\10f56a"}.fad.fa-drumstick:after{content:"\10f6d6"}.fad.fa-drumstick-bite:after{content:"\10f6d7"}.fad.fa-dryer:after{content:"\10f861"}.fad.fa-dryer-alt:after{content:"\10f862"}.fad.fa-duck:after{content:"\10f6d8"}.fad.fa-dumbbell:after{content:"\10f44b"}.fad.fa-dumpster:after{content:"\10f793"}.fad.fa-dumpster-fire:after{content:"\10f794"}.fad.fa-dungeon:after{content:"\10f6d9"}.fad.fa-ear:after{content:"\10f5f0"}.fad.fa-ear-muffs:after{content:"\10f795"}.fad.fa-eclipse:after{content:"\10f749"}.fad.fa-eclipse-alt:after{content:"\10f74a"}.fad.fa-edit:after{content:"\10f044"}.fad.fa-egg:after{content:"\10f7fb"}.fad.fa-egg-fried:after{content:"\10f7fc"}.fad.fa-eject:after{content:"\10f052"}.fad.fa-elephant:after{content:"\10f6da"}.fad.fa-ellipsis-h:after{content:"\10f141"}.fad.fa-ellipsis-h-alt:after{content:"\10f39b"}.fad.fa-ellipsis-v:after{content:"\10f142"}.fad.fa-ellipsis-v-alt:after{content:"\10f39c"}.fad.fa-empty-set:after{content:"\10f656"}.fad.fa-engine-warning:after{content:"\10f5f2"}.fad.fa-envelope:after{content:"\10f0e0"}.fad.fa-envelope-open:after{content:"\10f2b6"}.fad.fa-envelope-open-dollar:after{content:"\10f657"}.fad.fa-envelope-open-text:after{content:"\10f658"}.fad.fa-envelope-square:after{content:"\10f199"}.fad.fa-equals:after{content:"\10f52c"}.fad.fa-eraser:after{content:"\10f12d"}.fad.fa-ethernet:after{content:"\10f796"}.fad.fa-euro-sign:after{content:"\10f153"}.fad.fa-exchange:after{content:"\10f0ec"}.fad.fa-exchange-alt:after{content:"\10f362"}.fad.fa-exclamation:after{content:"\10f12a"}.fad.fa-exclamation-circle:after{content:"\10f06a"}.fad.fa-exclamation-square:after{content:"\10f321"}.fad.fa-exclamation-triangle:after{content:"\10f071"}.fad.fa-expand:after{content:"\10f065"}.fad.fa-expand-alt:after{content:"\10f424"}.fad.fa-expand-arrows:after{content:"\10f31d"}.fad.fa-expand-arrows-alt:after{content:"\10f31e"}.fad.fa-expand-wide:after{content:"\10f320"}.fad.fa-external-link:after{content:"\10f08e"}.fad.fa-external-link-alt:after{content:"\10f35d"}.fad.fa-external-link-square:after{content:"\10f14c"}.fad.fa-external-link-square-alt:after{content:"\10f360"}.fad.fa-eye:after{content:"\10f06e"}.fad.fa-eye-dropper:after{content:"\10f1fb"}.fad.fa-eye-evil:after{content:"\10f6db"}.fad.fa-eye-slash:after{content:"\10f070"}.fad.fa-fan:after{content:"\10f863"}.fad.fa-fan-table:after{content:"\10f904"}.fad.fa-farm:after{content:"\10f864"}.fad.fa-fast-backward:after{content:"\10f049"}.fad.fa-fast-forward:after{content:"\10f050"}.fad.fa-faucet:after{content:"\10f905"}.fad.fa-faucet-drip:after{content:"\10f906"}.fad.fa-fax:after{content:"\10f1ac"}.fad.fa-feather:after{content:"\10f52d"}.fad.fa-feather-alt:after{content:"\10f56b"}.fad.fa-female:after{content:"\10f182"}.fad.fa-field-hockey:after{content:"\10f44c"}.fad.fa-fighter-jet:after{content:"\10f0fb"}.fad.fa-file:after{content:"\10f15b"}.fad.fa-file-alt:after{content:"\10f15c"}.fad.fa-file-archive:after{content:"\10f1c6"}.fad.fa-file-audio:after{content:"\10f1c7"}.fad.fa-file-certificate:after{content:"\10f5f3"}.fad.fa-file-chart-line:after{content:"\10f659"}.fad.fa-file-chart-pie:after{content:"\10f65a"}.fad.fa-file-check:after{content:"\10f316"}.fad.fa-file-code:after{content:"\10f1c9"}.fad.fa-file-contract:after{content:"\10f56c"}.fad.fa-file-csv:after{content:"\10f6dd"}.fad.fa-file-download:after{content:"\10f56d"}.fad.fa-file-edit:after{content:"\10f31c"}.fad.fa-file-excel:after{content:"\10f1c3"}.fad.fa-file-exclamation:after{content:"\10f31a"}.fad.fa-file-export:after{content:"\10f56e"}.fad.fa-file-image:after{content:"\10f1c5"}.fad.fa-file-import:after{content:"\10f56f"}.fad.fa-file-invoice:after{content:"\10f570"}.fad.fa-file-invoice-dollar:after{content:"\10f571"}.fad.fa-file-medical:after{content:"\10f477"}.fad.fa-file-medical-alt:after{content:"\10f478"}.fad.fa-file-minus:after{content:"\10f318"}.fad.fa-file-music:after{content:"\10f8b6"}.fad.fa-file-pdf:after{content:"\10f1c1"}.fad.fa-file-plus:after{content:"\10f319"}.fad.fa-file-powerpoint:after{content:"\10f1c4"}.fad.fa-file-prescription:after{content:"\10f572"}.fad.fa-file-search:after{content:"\10f865"}.fad.fa-file-signature:after{content:"\10f573"}.fad.fa-file-spreadsheet:after{content:"\10f65b"}.fad.fa-file-times:after{content:"\10f317"}.fad.fa-file-upload:after{content:"\10f574"}.fad.fa-file-user:after{content:"\10f65c"}.fad.fa-file-video:after{content:"\10f1c8"}.fad.fa-file-word:after{content:"\10f1c2"}.fad.fa-files-medical:after{content:"\10f7fd"}.fad.fa-fill:after{content:"\10f575"}.fad.fa-fill-drip:after{content:"\10f576"}.fad.fa-film:after{content:"\10f008"}.fad.fa-film-alt:after{content:"\10f3a0"}.fad.fa-film-canister:after{content:"\10f8b7"}.fad.fa-filter:after{content:"\10f0b0"}.fad.fa-fingerprint:after{content:"\10f577"}.fad.fa-fire:after{content:"\10f06d"}.fad.fa-fire-alt:after{content:"\10f7e4"}.fad.fa-fire-extinguisher:after{content:"\10f134"}.fad.fa-fire-smoke:after{content:"\10f74b"}.fad.fa-fireplace:after{content:"\10f79a"}.fad.fa-first-aid:after{content:"\10f479"}.fad.fa-fish:after{content:"\10f578"}.fad.fa-fish-cooked:after{content:"\10f7fe"}.fad.fa-fist-raised:after{content:"\10f6de"}.fad.fa-flag:after{content:"\10f024"}.fad.fa-flag-alt:after{content:"\10f74c"}.fad.fa-flag-checkered:after{content:"\10f11e"}.fad.fa-flag-usa:after{content:"\10f74d"}.fad.fa-flame:after{content:"\10f6df"}.fad.fa-flashlight:after{content:"\10f8b8"}.fad.fa-flask:after{content:"\10f0c3"}.fad.fa-flask-poison:after{content:"\10f6e0"}.fad.fa-flask-potion:after{content:"\10f6e1"}.fad.fa-flower:after{content:"\10f7ff"}.fad.fa-flower-daffodil:after{content:"\10f800"}.fad.fa-flower-tulip:after{content:"\10f801"}.fad.fa-flushed:after{content:"\10f579"}.fad.fa-flute:after{content:"\10f8b9"}.fad.fa-flux-capacitor:after{content:"\10f8ba"}.fad.fa-fog:after{content:"\10f74e"}.fad.fa-folder:after{content:"\10f07b"}.fad.fa-folder-minus:after{content:"\10f65d"}.fad.fa-folder-open:after{content:"\10f07c"}.fad.fa-folder-plus:after{content:"\10f65e"}.fad.fa-folder-times:after{content:"\10f65f"}.fad.fa-folder-tree:after{content:"\10f802"}.fad.fa-folders:after{content:"\10f660"}.fad.fa-font:after{content:"\10f031"}.fad.fa-font-awesome-logo-full:after{content:"\10f4e6"}.fad.fa-font-case:after{content:"\10f866"}.fad.fa-football-ball:after{content:"\10f44e"}.fad.fa-football-helmet:after{content:"\10f44f"}.fad.fa-forklift:after{content:"\10f47a"}.fad.fa-forward:after{content:"\10f04e"}.fad.fa-fragile:after{content:"\10f4bb"}.fad.fa-french-fries:after{content:"\10f803"}.fad.fa-frog:after{content:"\10f52e"}.fad.fa-frosty-head:after{content:"\10f79b"}.fad.fa-frown:after{content:"\10f119"}.fad.fa-frown-open:after{content:"\10f57a"}.fad.fa-function:after{content:"\10f661"}.fad.fa-funnel-dollar:after{content:"\10f662"}.fad.fa-futbol:after{content:"\10f1e3"}.fad.fa-galaxy:after{content:"\10f908"}.fad.fa-game-board:after{content:"\10f867"}.fad.fa-game-board-alt:after{content:"\10f868"}.fad.fa-game-console-handheld:after{content:"\10f8bb"}.fad.fa-gamepad:after{content:"\10f11b"}.fad.fa-gamepad-alt:after{content:"\10f8bc"}.fad.fa-garage:after{content:"\10f909"}.fad.fa-garage-car:after{content:"\10f90a"}.fad.fa-garage-open:after{content:"\10f90b"}.fad.fa-gas-pump:after{content:"\10f52f"}.fad.fa-gas-pump-slash:after{content:"\10f5f4"}.fad.fa-gavel:after{content:"\10f0e3"}.fad.fa-gem:after{content:"\10f3a5"}.fad.fa-genderless:after{content:"\10f22d"}.fad.fa-ghost:after{content:"\10f6e2"}.fad.fa-gift:after{content:"\10f06b"}.fad.fa-gift-card:after{content:"\10f663"}.fad.fa-gifts:after{content:"\10f79c"}.fad.fa-gingerbread-man:after{content:"\10f79d"}.fad.fa-glass:after{content:"\10f804"}.fad.fa-glass-champagne:after{content:"\10f79e"}.fad.fa-glass-cheers:after{content:"\10f79f"}.fad.fa-glass-citrus:after{content:"\10f869"}.fad.fa-glass-martini:after{content:"\10f000"}.fad.fa-glass-martini-alt:after{content:"\10f57b"}.fad.fa-glass-whiskey:after{content:"\10f7a0"}.fad.fa-glass-whiskey-rocks:after{content:"\10f7a1"}.fad.fa-glasses:after{content:"\10f530"}.fad.fa-glasses-alt:after{content:"\10f5f5"}.fad.fa-globe:after{content:"\10f0ac"}.fad.fa-globe-africa:after{content:"\10f57c"}.fad.fa-globe-americas:after{content:"\10f57d"}.fad.fa-globe-asia:after{content:"\10f57e"}.fad.fa-globe-europe:after{content:"\10f7a2"}.fad.fa-globe-snow:after{content:"\10f7a3"}.fad.fa-globe-stand:after{content:"\10f5f6"}.fad.fa-golf-ball:after{content:"\10f450"}.fad.fa-golf-club:after{content:"\10f451"}.fad.fa-gopuram:after{content:"\10f664"}.fad.fa-graduation-cap:after{content:"\10f19d"}.fad.fa-gramophone:after{content:"\10f8bd"}.fad.fa-greater-than:after{content:"\10f531"}.fad.fa-greater-than-equal:after{content:"\10f532"}.fad.fa-grimace:after{content:"\10f57f"}.fad.fa-grin:after{content:"\10f580"}.fad.fa-grin-alt:after{content:"\10f581"}.fad.fa-grin-beam:after{content:"\10f582"}.fad.fa-grin-beam-sweat:after{content:"\10f583"}.fad.fa-grin-hearts:after{content:"\10f584"}.fad.fa-grin-squint:after{content:"\10f585"}.fad.fa-grin-squint-tears:after{content:"\10f586"}.fad.fa-grin-stars:after{content:"\10f587"}.fad.fa-grin-tears:after{content:"\10f588"}.fad.fa-grin-tongue:after{content:"\10f589"}.fad.fa-grin-tongue-squint:after{content:"\10f58a"}.fad.fa-grin-tongue-wink:after{content:"\10f58b"}.fad.fa-grin-wink:after{content:"\10f58c"}.fad.fa-grip-horizontal:after{content:"\10f58d"}.fad.fa-grip-lines:after{content:"\10f7a4"}.fad.fa-grip-lines-vertical:after{content:"\10f7a5"}.fad.fa-grip-vertical:after{content:"\10f58e"}.fad.fa-guitar:after{content:"\10f7a6"}.fad.fa-guitar-electric:after{content:"\10f8be"}.fad.fa-guitars:after{content:"\10f8bf"}.fad.fa-h-square:after{content:"\10f0fd"}.fad.fa-h1:after{content:"\10f313"}.fad.fa-h2:after{content:"\10f314"}.fad.fa-h3:after{content:"\10f315"}.fad.fa-h4:after{content:"\10f86a"}.fad.fa-hamburger:after{content:"\10f805"}.fad.fa-hammer:after{content:"\10f6e3"}.fad.fa-hammer-war:after{content:"\10f6e4"}.fad.fa-hamsa:after{content:"\10f665"}.fad.fa-hand-heart:after{content:"\10f4bc"}.fad.fa-hand-holding:after{content:"\10f4bd"}.fad.fa-hand-holding-box:after{content:"\10f47b"}.fad.fa-hand-holding-heart:after{content:"\10f4be"}.fad.fa-hand-holding-magic:after{content:"\10f6e5"}.fad.fa-hand-holding-seedling:after{content:"\10f4bf"}.fad.fa-hand-holding-usd:after{content:"\10f4c0"}.fad.fa-hand-holding-water:after{content:"\10f4c1"}.fad.fa-hand-lizard:after{content:"\10f258"}.fad.fa-hand-middle-finger:after{content:"\10f806"}.fad.fa-hand-paper:after{content:"\10f256"}.fad.fa-hand-peace:after{content:"\10f25b"}.fad.fa-hand-point-down:after{content:"\10f0a7"}.fad.fa-hand-point-left:after{content:"\10f0a5"}.fad.fa-hand-point-right:after{content:"\10f0a4"}.fad.fa-hand-point-up:after{content:"\10f0a6"}.fad.fa-hand-pointer:after{content:"\10f25a"}.fad.fa-hand-receiving:after{content:"\10f47c"}.fad.fa-hand-rock:after{content:"\10f255"}.fad.fa-hand-scissors:after{content:"\10f257"}.fad.fa-hand-spock:after{content:"\10f259"}.fad.fa-hands:after{content:"\10f4c2"}.fad.fa-hands-heart:after{content:"\10f4c3"}.fad.fa-hands-helping:after{content:"\10f4c4"}.fad.fa-hands-usd:after{content:"\10f4c5"}.fad.fa-handshake:after{content:"\10f2b5"}.fad.fa-handshake-alt:after{content:"\10f4c6"}.fad.fa-hanukiah:after{content:"\10f6e6"}.fad.fa-hard-hat:after{content:"\10f807"}.fad.fa-hashtag:after{content:"\10f292"}.fad.fa-hat-chef:after{content:"\10f86b"}.fad.fa-hat-cowboy:after{content:"\10f8c0"}.fad.fa-hat-cowboy-side:after{content:"\10f8c1"}.fad.fa-hat-santa:after{content:"\10f7a7"}.fad.fa-hat-winter:after{content:"\10f7a8"}.fad.fa-hat-witch:after{content:"\10f6e7"}.fad.fa-hat-wizard:after{content:"\10f6e8"}.fad.fa-hdd:after{content:"\10f0a0"}.fad.fa-head-side:after{content:"\10f6e9"}.fad.fa-head-side-brain:after{content:"\10f808"}.fad.fa-head-side-headphones:after{content:"\10f8c2"}.fad.fa-head-side-medical:after{content:"\10f809"}.fad.fa-head-vr:after{content:"\10f6ea"}.fad.fa-heading:after{content:"\10f1dc"}.fad.fa-headphones:after{content:"\10f025"}.fad.fa-headphones-alt:after{content:"\10f58f"}.fad.fa-headset:after{content:"\10f590"}.fad.fa-heart:after{content:"\10f004"}.fad.fa-heart-broken:after{content:"\10f7a9"}.fad.fa-heart-circle:after{content:"\10f4c7"}.fad.fa-heart-rate:after{content:"\10f5f8"}.fad.fa-heart-square:after{content:"\10f4c8"}.fad.fa-heartbeat:after{content:"\10f21e"}.fad.fa-heat:after{content:"\10f90c"}.fad.fa-helicopter:after{content:"\10f533"}.fad.fa-helmet-battle:after{content:"\10f6eb"}.fad.fa-hexagon:after{content:"\10f312"}.fad.fa-highlighter:after{content:"\10f591"}.fad.fa-hiking:after{content:"\10f6ec"}.fad.fa-hippo:after{content:"\10f6ed"}.fad.fa-history:after{content:"\10f1da"}.fad.fa-hockey-mask:after{content:"\10f6ee"}.fad.fa-hockey-puck:after{content:"\10f453"}.fad.fa-hockey-sticks:after{content:"\10f454"}.fad.fa-holly-berry:after{content:"\10f7aa"}.fad.fa-home:after{content:"\10f015"}.fad.fa-home-alt:after{content:"\10f80a"}.fad.fa-home-heart:after{content:"\10f4c9"}.fad.fa-home-lg:after{content:"\10f80b"}.fad.fa-home-lg-alt:after{content:"\10f80c"}.fad.fa-hood-cloak:after{content:"\10f6ef"}.fad.fa-horizontal-rule:after{content:"\10f86c"}.fad.fa-horse:after{content:"\10f6f0"}.fad.fa-horse-head:after{content:"\10f7ab"}.fad.fa-horse-saddle:after{content:"\10f8c3"}.fad.fa-hospital:after{content:"\10f0f8"}.fad.fa-hospital-alt:after{content:"\10f47d"}.fad.fa-hospital-symbol:after{content:"\10f47e"}.fad.fa-hospital-user:after{content:"\10f80d"}.fad.fa-hospitals:after{content:"\10f80e"}.fad.fa-hot-tub:after{content:"\10f593"}.fad.fa-hotdog:after{content:"\10f80f"}.fad.fa-hotel:after{content:"\10f594"}.fad.fa-hourglass:after{content:"\10f254"}.fad.fa-hourglass-end:after{content:"\10f253"}.fad.fa-hourglass-half:after{content:"\10f252"}.fad.fa-hourglass-start:after{content:"\10f251"}.fad.fa-house:after{content:"\10f90d"}.fad.fa-house-damage:after{content:"\10f6f1"}.fad.fa-house-day:after{content:"\10f90e"}.fad.fa-house-flood:after{content:"\10f74f"}.fad.fa-house-leave:after{content:"\10f90f"}.fad.fa-house-night:after{content:"\10f910"}.fad.fa-house-return:after{content:"\10f911"}.fad.fa-house-signal:after{content:"\10f912"}.fad.fa-hryvnia:after{content:"\10f6f2"}.fad.fa-humidity:after{content:"\10f750"}.fad.fa-hurricane:after{content:"\10f751"}.fad.fa-i-cursor:after{content:"\10f246"}.fad.fa-ice-cream:after{content:"\10f810"}.fad.fa-ice-skate:after{content:"\10f7ac"}.fad.fa-icicles:after{content:"\10f7ad"}.fad.fa-icons:after{content:"\10f86d"}.fad.fa-icons-alt:after{content:"\10f86e"}.fad.fa-id-badge:after{content:"\10f2c1"}.fad.fa-id-card:after{content:"\10f2c2"}.fad.fa-id-card-alt:after{content:"\10f47f"}.fad.fa-igloo:after{content:"\10f7ae"}.fad.fa-image:after{content:"\10f03e"}.fad.fa-image-polaroid:after{content:"\10f8c4"}.fad.fa-images:after{content:"\10f302"}.fad.fa-inbox:after{content:"\10f01c"}.fad.fa-inbox-in:after{content:"\10f310"}.fad.fa-inbox-out:after{content:"\10f311"}.fad.fa-indent:after{content:"\10f03c"}.fad.fa-industry:after{content:"\10f275"}.fad.fa-industry-alt:after{content:"\10f3b3"}.fad.fa-infinity:after{content:"\10f534"}.fad.fa-info:after{content:"\10f129"}.fad.fa-info-circle:after{content:"\10f05a"}.fad.fa-info-square:after{content:"\10f30f"}.fad.fa-inhaler:after{content:"\10f5f9"}.fad.fa-integral:after{content:"\10f667"}.fad.fa-intersection:after{content:"\10f668"}.fad.fa-inventory:after{content:"\10f480"}.fad.fa-island-tropical:after{content:"\10f811"}.fad.fa-italic:after{content:"\10f033"}.fad.fa-jack-o-lantern:after{content:"\10f30e"}.fad.fa-jedi:after{content:"\10f669"}.fad.fa-joint:after{content:"\10f595"}.fad.fa-journal-whills:after{content:"\10f66a"}.fad.fa-joystick:after{content:"\10f8c5"}.fad.fa-jug:after{content:"\10f8c6"}.fad.fa-kaaba:after{content:"\10f66b"}.fad.fa-kazoo:after{content:"\10f8c7"}.fad.fa-kerning:after{content:"\10f86f"}.fad.fa-key:after{content:"\10f084"}.fad.fa-key-skeleton:after{content:"\10f6f3"}.fad.fa-keyboard:after{content:"\10f11c"}.fad.fa-keynote:after{content:"\10f66c"}.fad.fa-khanda:after{content:"\10f66d"}.fad.fa-kidneys:after{content:"\10f5fb"}.fad.fa-kiss:after{content:"\10f596"}.fad.fa-kiss-beam:after{content:"\10f597"}.fad.fa-kiss-wink-heart:after{content:"\10f598"}.fad.fa-kite:after{content:"\10f6f4"}.fad.fa-kiwi-bird:after{content:"\10f535"}.fad.fa-knife-kitchen:after{content:"\10f6f5"}.fad.fa-lambda:after{content:"\10f66e"}.fad.fa-lamp:after{content:"\10f4ca"}.fad.fa-lamp-desk:after{content:"\10f914"}.fad.fa-lamp-floor:after{content:"\10f915"}.fad.fa-landmark:after{content:"\10f66f"}.fad.fa-landmark-alt:after{content:"\10f752"}.fad.fa-language:after{content:"\10f1ab"}.fad.fa-laptop:after{content:"\10f109"}.fad.fa-laptop-code:after{content:"\10f5fc"}.fad.fa-laptop-medical:after{content:"\10f812"}.fad.fa-lasso:after{content:"\10f8c8"}.fad.fa-laugh:after{content:"\10f599"}.fad.fa-laugh-beam:after{content:"\10f59a"}.fad.fa-laugh-squint:after{content:"\10f59b"}.fad.fa-laugh-wink:after{content:"\10f59c"}.fad.fa-layer-group:after{content:"\10f5fd"}.fad.fa-layer-minus:after{content:"\10f5fe"}.fad.fa-layer-plus:after{content:"\10f5ff"}.fad.fa-leaf:after{content:"\10f06c"}.fad.fa-leaf-heart:after{content:"\10f4cb"}.fad.fa-leaf-maple:after{content:"\10f6f6"}.fad.fa-leaf-oak:after{content:"\10f6f7"}.fad.fa-lemon:after{content:"\10f094"}.fad.fa-less-than:after{content:"\10f536"}.fad.fa-less-than-equal:after{content:"\10f537"}.fad.fa-level-down:after{content:"\10f149"}.fad.fa-level-down-alt:after{content:"\10f3be"}.fad.fa-level-up:after{content:"\10f148"}.fad.fa-level-up-alt:after{content:"\10f3bf"}.fad.fa-life-ring:after{content:"\10f1cd"}.fad.fa-light-ceiling:after{content:"\10f916"}.fad.fa-light-switch:after{content:"\10f917"}.fad.fa-light-switch-off:after{content:"\10f918"}.fad.fa-light-switch-on:after{content:"\10f919"}.fad.fa-lightbulb:after{content:"\10f0eb"}.fad.fa-lightbulb-dollar:after{content:"\10f670"}.fad.fa-lightbulb-exclamation:after{content:"\10f671"}.fad.fa-lightbulb-on:after{content:"\10f672"}.fad.fa-lightbulb-slash:after{content:"\10f673"}.fad.fa-lights-holiday:after{content:"\10f7b2"}.fad.fa-line-columns:after{content:"\10f870"}.fad.fa-line-height:after{content:"\10f871"}.fad.fa-link:after{content:"\10f0c1"}.fad.fa-lips:after{content:"\10f600"}.fad.fa-lira-sign:after{content:"\10f195"}.fad.fa-list:after{content:"\10f03a"}.fad.fa-list-alt:after{content:"\10f022"}.fad.fa-list-music:after{content:"\10f8c9"}.fad.fa-list-ol:after{content:"\10f0cb"}.fad.fa-list-ul:after{content:"\10f0ca"}.fad.fa-location:after{content:"\10f601"}.fad.fa-location-arrow:after{content:"\10f124"}.fad.fa-location-circle:after{content:"\10f602"}.fad.fa-location-slash:after{content:"\10f603"}.fad.fa-lock:after{content:"\10f023"}.fad.fa-lock-alt:after{content:"\10f30d"}.fad.fa-lock-open:after{content:"\10f3c1"}.fad.fa-lock-open-alt:after{content:"\10f3c2"}.fad.fa-long-arrow-alt-down:after{content:"\10f309"}.fad.fa-long-arrow-alt-left:after{content:"\10f30a"}.fad.fa-long-arrow-alt-right:after{content:"\10f30b"}.fad.fa-long-arrow-alt-up:after{content:"\10f30c"}.fad.fa-long-arrow-down:after{content:"\10f175"}.fad.fa-long-arrow-left:after{content:"\10f177"}.fad.fa-long-arrow-right:after{content:"\10f178"}.fad.fa-long-arrow-up:after{content:"\10f176"}.fad.fa-loveseat:after{content:"\10f4cc"}.fad.fa-low-vision:after{content:"\10f2a8"}.fad.fa-luchador:after{content:"\10f455"}.fad.fa-luggage-cart:after{content:"\10f59d"}.fad.fa-lungs:after{content:"\10f604"}.fad.fa-mace:after{content:"\10f6f8"}.fad.fa-magic:after{content:"\10f0d0"}.fad.fa-magnet:after{content:"\10f076"}.fad.fa-mail-bulk:after{content:"\10f674"}.fad.fa-mailbox:after{content:"\10f813"}.fad.fa-male:after{content:"\10f183"}.fad.fa-mandolin:after{content:"\10f6f9"}.fad.fa-map:after{content:"\10f279"}.fad.fa-map-marked:after{content:"\10f59f"}.fad.fa-map-marked-alt:after{content:"\10f5a0"}.fad.fa-map-marker:after{content:"\10f041"}.fad.fa-map-marker-alt:after{content:"\10f3c5"}.fad.fa-map-marker-alt-slash:after{content:"\10f605"}.fad.fa-map-marker-check:after{content:"\10f606"}.fad.fa-map-marker-edit:after{content:"\10f607"}.fad.fa-map-marker-exclamation:after{content:"\10f608"}.fad.fa-map-marker-minus:after{content:"\10f609"}.fad.fa-map-marker-plus:after{content:"\10f60a"}.fad.fa-map-marker-question:after{content:"\10f60b"}.fad.fa-map-marker-slash:after{content:"\10f60c"}.fad.fa-map-marker-smile:after{content:"\10f60d"}.fad.fa-map-marker-times:after{content:"\10f60e"}.fad.fa-map-pin:after{content:"\10f276"}.fad.fa-map-signs:after{content:"\10f277"}.fad.fa-marker:after{content:"\10f5a1"}.fad.fa-mars:after{content:"\10f222"}.fad.fa-mars-double:after{content:"\10f227"}.fad.fa-mars-stroke:after{content:"\10f229"}.fad.fa-mars-stroke-h:after{content:"\10f22b"}.fad.fa-mars-stroke-v:after{content:"\10f22a"}.fad.fa-mask:after{content:"\10f6fa"}.fad.fa-meat:after{content:"\10f814"}.fad.fa-medal:after{content:"\10f5a2"}.fad.fa-medkit:after{content:"\10f0fa"}.fad.fa-megaphone:after{content:"\10f675"}.fad.fa-meh:after{content:"\10f11a"}.fad.fa-meh-blank:after{content:"\10f5a4"}.fad.fa-meh-rolling-eyes:after{content:"\10f5a5"}.fad.fa-memory:after{content:"\10f538"}.fad.fa-menorah:after{content:"\10f676"}.fad.fa-mercury:after{content:"\10f223"}.fad.fa-meteor:after{content:"\10f753"}.fad.fa-microchip:after{content:"\10f2db"}.fad.fa-microphone:after{content:"\10f130"}.fad.fa-microphone-alt:after{content:"\10f3c9"}.fad.fa-microphone-alt-slash:after{content:"\10f539"}.fad.fa-microphone-slash:after{content:"\10f131"}.fad.fa-microphone-stand:after{content:"\10f8cb"}.fad.fa-microscope:after{content:"\10f610"}.fad.fa-microwave:after{content:"\10f91b"}.fad.fa-mind-share:after{content:"\10f677"}.fad.fa-minus:after{content:"\10f068"}.fad.fa-minus-circle:after{content:"\10f056"}.fad.fa-minus-hexagon:after{content:"\10f307"}.fad.fa-minus-octagon:after{content:"\10f308"}.fad.fa-minus-square:after{content:"\10f146"}.fad.fa-mistletoe:after{content:"\10f7b4"}.fad.fa-mitten:after{content:"\10f7b5"}.fad.fa-mobile:after{content:"\10f10b"}.fad.fa-mobile-alt:after{content:"\10f3cd"}.fad.fa-mobile-android:after{content:"\10f3ce"}.fad.fa-mobile-android-alt:after{content:"\10f3cf"}.fad.fa-money-bill:after{content:"\10f0d6"}.fad.fa-money-bill-alt:after{content:"\10f3d1"}.fad.fa-money-bill-wave:after{content:"\10f53a"}.fad.fa-money-bill-wave-alt:after{content:"\10f53b"}.fad.fa-money-check:after{content:"\10f53c"}.fad.fa-money-check-alt:after{content:"\10f53d"}.fad.fa-money-check-edit:after{content:"\10f872"}.fad.fa-money-check-edit-alt:after{content:"\10f873"}.fad.fa-monitor-heart-rate:after{content:"\10f611"}.fad.fa-monkey:after{content:"\10f6fb"}.fad.fa-monument:after{content:"\10f5a6"}.fad.fa-moon:after{content:"\10f186"}.fad.fa-moon-cloud:after{content:"\10f754"}.fad.fa-moon-stars:after{content:"\10f755"}.fad.fa-mortar-pestle:after{content:"\10f5a7"}.fad.fa-mosque:after{content:"\10f678"}.fad.fa-motorcycle:after{content:"\10f21c"}.fad.fa-mountain:after{content:"\10f6fc"}.fad.fa-mountains:after{content:"\10f6fd"}.fad.fa-mouse:after{content:"\10f8cc"}.fad.fa-mouse-alt:after{content:"\10f8cd"}.fad.fa-mouse-pointer:after{content:"\10f245"}.fad.fa-mp3-player:after{content:"\10f8ce"}.fad.fa-mug:after{content:"\10f874"}.fad.fa-mug-hot:after{content:"\10f7b6"}.fad.fa-mug-marshmallows:after{content:"\10f7b7"}.fad.fa-mug-tea:after{content:"\10f875"}.fad.fa-music:after{content:"\10f001"}.fad.fa-music-alt:after{content:"\10f8cf"}.fad.fa-music-alt-slash:after{content:"\10f8d0"}.fad.fa-music-slash:after{content:"\10f8d1"}.fad.fa-narwhal:after{content:"\10f6fe"}.fad.fa-network-wired:after{content:"\10f6ff"}.fad.fa-neuter:after{content:"\10f22c"}.fad.fa-newspaper:after{content:"\10f1ea"}.fad.fa-not-equal:after{content:"\10f53e"}.fad.fa-notes-medical:after{content:"\10f481"}.fad.fa-object-group:after{content:"\10f247"}.fad.fa-object-ungroup:after{content:"\10f248"}.fad.fa-octagon:after{content:"\10f306"}.fad.fa-oil-can:after{content:"\10f613"}.fad.fa-oil-temp:after{content:"\10f614"}.fad.fa-om:after{content:"\10f679"}.fad.fa-omega:after{content:"\10f67a"}.fad.fa-ornament:after{content:"\10f7b8"}.fad.fa-otter:after{content:"\10f700"}.fad.fa-outdent:after{content:"\10f03b"}.fad.fa-outlet:after{content:"\10f91c"}.fad.fa-oven:after{content:"\10f91d"}.fad.fa-overline:after{content:"\10f876"}.fad.fa-page-break:after{content:"\10f877"}.fad.fa-pager:after{content:"\10f815"}.fad.fa-paint-brush:after{content:"\10f1fc"}.fad.fa-paint-brush-alt:after{content:"\10f5a9"}.fad.fa-paint-roller:after{content:"\10f5aa"}.fad.fa-palette:after{content:"\10f53f"}.fad.fa-pallet:after{content:"\10f482"}.fad.fa-pallet-alt:after{content:"\10f483"}.fad.fa-paper-plane:after{content:"\10f1d8"}.fad.fa-paperclip:after{content:"\10f0c6"}.fad.fa-parachute-box:after{content:"\10f4cd"}.fad.fa-paragraph:after{content:"\10f1dd"}.fad.fa-paragraph-rtl:after{content:"\10f878"}.fad.fa-parking:after{content:"\10f540"}.fad.fa-parking-circle:after{content:"\10f615"}.fad.fa-parking-circle-slash:after{content:"\10f616"}.fad.fa-parking-slash:after{content:"\10f617"}.fad.fa-passport:after{content:"\10f5ab"}.fad.fa-pastafarianism:after{content:"\10f67b"}.fad.fa-paste:after{content:"\10f0ea"}.fad.fa-pause:after{content:"\10f04c"}.fad.fa-pause-circle:after{content:"\10f28b"}.fad.fa-paw:after{content:"\10f1b0"}.fad.fa-paw-alt:after{content:"\10f701"}.fad.fa-paw-claws:after{content:"\10f702"}.fad.fa-peace:after{content:"\10f67c"}.fad.fa-pegasus:after{content:"\10f703"}.fad.fa-pen:after{content:"\10f304"}.fad.fa-pen-alt:after{content:"\10f305"}.fad.fa-pen-fancy:after{content:"\10f5ac"}.fad.fa-pen-nib:after{content:"\10f5ad"}.fad.fa-pen-square:after{content:"\10f14b"}.fad.fa-pencil:after{content:"\10f040"}.fad.fa-pencil-alt:after{content:"\10f303"}.fad.fa-pencil-paintbrush:after{content:"\10f618"}.fad.fa-pencil-ruler:after{content:"\10f5ae"}.fad.fa-pennant:after{content:"\10f456"}.fad.fa-people-carry:after{content:"\10f4ce"}.fad.fa-pepper-hot:after{content:"\10f816"}.fad.fa-percent:after{content:"\10f295"}.fad.fa-percentage:after{content:"\10f541"}.fad.fa-person-booth:after{content:"\10f756"}.fad.fa-person-carry:after{content:"\10f4cf"}.fad.fa-person-dolly:after{content:"\10f4d0"}.fad.fa-person-dolly-empty:after{content:"\10f4d1"}.fad.fa-person-sign:after{content:"\10f757"}.fad.fa-phone:after{content:"\10f095"}.fad.fa-phone-alt:after{content:"\10f879"}.fad.fa-phone-laptop:after{content:"\10f87a"}.fad.fa-phone-office:after{content:"\10f67d"}.fad.fa-phone-plus:after{content:"\10f4d2"}.fad.fa-phone-rotary:after{content:"\10f8d3"}.fad.fa-phone-slash:after{content:"\10f3dd"}.fad.fa-phone-square:after{content:"\10f098"}.fad.fa-phone-square-alt:after{content:"\10f87b"}.fad.fa-phone-volume:after{content:"\10f2a0"}.fad.fa-photo-video:after{content:"\10f87c"}.fad.fa-pi:after{content:"\10f67e"}.fad.fa-piano:after{content:"\10f8d4"}.fad.fa-piano-keyboard:after{content:"\10f8d5"}.fad.fa-pie:after{content:"\10f705"}.fad.fa-pig:after{content:"\10f706"}.fad.fa-piggy-bank:after{content:"\10f4d3"}.fad.fa-pills:after{content:"\10f484"}.fad.fa-pizza:after{content:"\10f817"}.fad.fa-pizza-slice:after{content:"\10f818"}.fad.fa-place-of-worship:after{content:"\10f67f"}.fad.fa-plane:after{content:"\10f072"}.fad.fa-plane-alt:after{content:"\10f3de"}.fad.fa-plane-arrival:after{content:"\10f5af"}.fad.fa-plane-departure:after{content:"\10f5b0"}.fad.fa-planet-moon:after{content:"\10f91f"}.fad.fa-planet-ringed:after{content:"\10f920"}.fad.fa-play:after{content:"\10f04b"}.fad.fa-play-circle:after{content:"\10f144"}.fad.fa-plug:after{content:"\10f1e6"}.fad.fa-plus:after{content:"\10f067"}.fad.fa-plus-circle:after{content:"\10f055"}.fad.fa-plus-hexagon:after{content:"\10f300"}.fad.fa-plus-octagon:after{content:"\10f301"}.fad.fa-plus-square:after{content:"\10f0fe"}.fad.fa-podcast:after{content:"\10f2ce"}.fad.fa-podium:after{content:"\10f680"}.fad.fa-podium-star:after{content:"\10f758"}.fad.fa-police-box:after{content:"\10f921"}.fad.fa-poll:after{content:"\10f681"}.fad.fa-poll-h:after{content:"\10f682"}.fad.fa-poll-people:after{content:"\10f759"}.fad.fa-poo:after{content:"\10f2fe"}.fad.fa-poo-storm:after{content:"\10f75a"}.fad.fa-poop:after{content:"\10f619"}.fad.fa-popcorn:after{content:"\10f819"}.fad.fa-portal-enter:after{content:"\10f922"}.fad.fa-portal-exit:after{content:"\10f923"}.fad.fa-portrait:after{content:"\10f3e0"}.fad.fa-pound-sign:after{content:"\10f154"}.fad.fa-power-off:after{content:"\10f011"}.fad.fa-pray:after{content:"\10f683"}.fad.fa-praying-hands:after{content:"\10f684"}.fad.fa-prescription:after{content:"\10f5b1"}.fad.fa-prescription-bottle:after{content:"\10f485"}.fad.fa-prescription-bottle-alt:after{content:"\10f486"}.fad.fa-presentation:after{content:"\10f685"}.fad.fa-print:after{content:"\10f02f"}.fad.fa-print-search:after{content:"\10f81a"}.fad.fa-print-slash:after{content:"\10f686"}.fad.fa-procedures:after{content:"\10f487"}.fad.fa-project-diagram:after{content:"\10f542"}.fad.fa-projector:after{content:"\10f8d6"}.fad.fa-pumpkin:after{content:"\10f707"}.fad.fa-puzzle-piece:after{content:"\10f12e"}.fad.fa-qrcode:after{content:"\10f029"}.fad.fa-question:after{content:"\10f128"}.fad.fa-question-circle:after{content:"\10f059"}.fad.fa-question-square:after{content:"\10f2fd"}.fad.fa-quidditch:after{content:"\10f458"}.fad.fa-quote-left:after{content:"\10f10d"}.fad.fa-quote-right:after{content:"\10f10e"}.fad.fa-quran:after{content:"\10f687"}.fad.fa-rabbit:after{content:"\10f708"}.fad.fa-rabbit-fast:after{content:"\10f709"}.fad.fa-racquet:after{content:"\10f45a"}.fad.fa-radar:after{content:"\10f924"}.fad.fa-radiation:after{content:"\10f7b9"}.fad.fa-radiation-alt:after{content:"\10f7ba"}.fad.fa-radio:after{content:"\10f8d7"}.fad.fa-radio-alt:after{content:"\10f8d8"}.fad.fa-rainbow:after{content:"\10f75b"}.fad.fa-raindrops:after{content:"\10f75c"}.fad.fa-ram:after{content:"\10f70a"}.fad.fa-ramp-loading:after{content:"\10f4d4"}.fad.fa-random:after{content:"\10f074"}.fad.fa-raygun:after{content:"\10f925"}.fad.fa-receipt:after{content:"\10f543"}.fad.fa-record-vinyl:after{content:"\10f8d9"}.fad.fa-rectangle-landscape:after{content:"\10f2fa"}.fad.fa-rectangle-portrait:after{content:"\10f2fb"}.fad.fa-rectangle-wide:after{content:"\10f2fc"}.fad.fa-recycle:after{content:"\10f1b8"}.fad.fa-redo:after{content:"\10f01e"}.fad.fa-redo-alt:after{content:"\10f2f9"}.fad.fa-refrigerator:after{content:"\10f926"}.fad.fa-registered:after{content:"\10f25d"}.fad.fa-remove-format:after{content:"\10f87d"}.fad.fa-repeat:after{content:"\10f363"}.fad.fa-repeat-1:after{content:"\10f365"}.fad.fa-repeat-1-alt:after{content:"\10f366"}.fad.fa-repeat-alt:after{content:"\10f364"}.fad.fa-reply:after{content:"\10f3e5"}.fad.fa-reply-all:after{content:"\10f122"}.fad.fa-republican:after{content:"\10f75e"}.fad.fa-restroom:after{content:"\10f7bd"}.fad.fa-retweet:after{content:"\10f079"}.fad.fa-retweet-alt:after{content:"\10f361"}.fad.fa-ribbon:after{content:"\10f4d6"}.fad.fa-ring:after{content:"\10f70b"}.fad.fa-rings-wedding:after{content:"\10f81b"}.fad.fa-road:after{content:"\10f018"}.fad.fa-robot:after{content:"\10f544"}.fad.fa-rocket:after{content:"\10f135"}.fad.fa-rocket-launch:after{content:"\10f927"}.fad.fa-route:after{content:"\10f4d7"}.fad.fa-route-highway:after{content:"\10f61a"}.fad.fa-route-interstate:after{content:"\10f61b"}.fad.fa-router:after{content:"\10f8da"}.fad.fa-rss:after{content:"\10f09e"}.fad.fa-rss-square:after{content:"\10f143"}.fad.fa-ruble-sign:after{content:"\10f158"}.fad.fa-ruler:after{content:"\10f545"}.fad.fa-ruler-combined:after{content:"\10f546"}.fad.fa-ruler-horizontal:after{content:"\10f547"}.fad.fa-ruler-triangle:after{content:"\10f61c"}.fad.fa-ruler-vertical:after{content:"\10f548"}.fad.fa-running:after{content:"\10f70c"}.fad.fa-rupee-sign:after{content:"\10f156"}.fad.fa-rv:after{content:"\10f7be"}.fad.fa-sack:after{content:"\10f81c"}.fad.fa-sack-dollar:after{content:"\10f81d"}.fad.fa-sad-cry:after{content:"\10f5b3"}.fad.fa-sad-tear:after{content:"\10f5b4"}.fad.fa-salad:after{content:"\10f81e"}.fad.fa-sandwich:after{content:"\10f81f"}.fad.fa-satellite:after{content:"\10f7bf"}.fad.fa-satellite-dish:after{content:"\10f7c0"}.fad.fa-sausage:after{content:"\10f820"}.fad.fa-save:after{content:"\10f0c7"}.fad.fa-sax-hot:after{content:"\10f8db"}.fad.fa-saxophone:after{content:"\10f8dc"}.fad.fa-scalpel:after{content:"\10f61d"}.fad.fa-scalpel-path:after{content:"\10f61e"}.fad.fa-scanner:after{content:"\10f488"}.fad.fa-scanner-image:after{content:"\10f8f3"}.fad.fa-scanner-keyboard:after{content:"\10f489"}.fad.fa-scanner-touchscreen:after{content:"\10f48a"}.fad.fa-scarecrow:after{content:"\10f70d"}.fad.fa-scarf:after{content:"\10f7c1"}.fad.fa-school:after{content:"\10f549"}.fad.fa-screwdriver:after{content:"\10f54a"}.fad.fa-scroll:after{content:"\10f70e"}.fad.fa-scroll-old:after{content:"\10f70f"}.fad.fa-scrubber:after{content:"\10f2f8"}.fad.fa-scythe:after{content:"\10f710"}.fad.fa-sd-card:after{content:"\10f7c2"}.fad.fa-search:after{content:"\10f002"}.fad.fa-search-dollar:after{content:"\10f688"}.fad.fa-search-location:after{content:"\10f689"}.fad.fa-search-minus:after{content:"\10f010"}.fad.fa-search-plus:after{content:"\10f00e"}.fad.fa-seedling:after{content:"\10f4d8"}.fad.fa-send-back:after{content:"\10f87e"}.fad.fa-send-backward:after{content:"\10f87f"}.fad.fa-sensor:after{content:"\10f928"}.fad.fa-sensor-alert:after{content:"\10f929"}.fad.fa-sensor-fire:after{content:"\10f92a"}.fad.fa-sensor-on:after{content:"\10f92b"}.fad.fa-sensor-smoke:after{content:"\10f92c"}.fad.fa-server:after{content:"\10f233"}.fad.fa-shapes:after{content:"\10f61f"}.fad.fa-share:after{content:"\10f064"}.fad.fa-share-all:after{content:"\10f367"}.fad.fa-share-alt:after{content:"\10f1e0"}.fad.fa-share-alt-square:after{content:"\10f1e1"}.fad.fa-share-square:after{content:"\10f14d"}.fad.fa-sheep:after{content:"\10f711"}.fad.fa-shekel-sign:after{content:"\10f20b"}.fad.fa-shield:after{content:"\10f132"}.fad.fa-shield-alt:after{content:"\10f3ed"}.fad.fa-shield-check:after{content:"\10f2f7"}.fad.fa-shield-cross:after{content:"\10f712"}.fad.fa-ship:after{content:"\10f21a"}.fad.fa-shipping-fast:after{content:"\10f48b"}.fad.fa-shipping-timed:after{content:"\10f48c"}.fad.fa-shish-kebab:after{content:"\10f821"}.fad.fa-shoe-prints:after{content:"\10f54b"}.fad.fa-shopping-bag:after{content:"\10f290"}.fad.fa-shopping-basket:after{content:"\10f291"}.fad.fa-shopping-cart:after{content:"\10f07a"}.fad.fa-shovel:after{content:"\10f713"}.fad.fa-shovel-snow:after{content:"\10f7c3"}.fad.fa-shower:after{content:"\10f2cc"}.fad.fa-shredder:after{content:"\10f68a"}.fad.fa-shuttle-van:after{content:"\10f5b6"}.fad.fa-shuttlecock:after{content:"\10f45b"}.fad.fa-sickle:after{content:"\10f822"}.fad.fa-sigma:after{content:"\10f68b"}.fad.fa-sign:after{content:"\10f4d9"}.fad.fa-sign-in:after{content:"\10f090"}.fad.fa-sign-in-alt:after{content:"\10f2f6"}.fad.fa-sign-language:after{content:"\10f2a7"}.fad.fa-sign-out:after{content:"\10f08b"}.fad.fa-sign-out-alt:after{content:"\10f2f5"}.fad.fa-signal:after{content:"\10f012"}.fad.fa-signal-1:after{content:"\10f68c"}.fad.fa-signal-2:after{content:"\10f68d"}.fad.fa-signal-3:after{content:"\10f68e"}.fad.fa-signal-4:after{content:"\10f68f"}.fad.fa-signal-alt:after{content:"\10f690"}.fad.fa-signal-alt-1:after{content:"\10f691"}.fad.fa-signal-alt-2:after{content:"\10f692"}.fad.fa-signal-alt-3:after{content:"\10f693"}.fad.fa-signal-alt-slash:after{content:"\10f694"}.fad.fa-signal-slash:after{content:"\10f695"}.fad.fa-signal-stream:after{content:"\10f8dd"}.fad.fa-signature:after{content:"\10f5b7"}.fad.fa-sim-card:after{content:"\10f7c4"}.fad.fa-siren:after{content:"\10f92d"}.fad.fa-siren-on:after{content:"\10f92e"}.fad.fa-sitemap:after{content:"\10f0e8"}.fad.fa-skating:after{content:"\10f7c5"}.fad.fa-skeleton:after{content:"\10f620"}.fad.fa-ski-jump:after{content:"\10f7c7"}.fad.fa-ski-lift:after{content:"\10f7c8"}.fad.fa-skiing:after{content:"\10f7c9"}.fad.fa-skiing-nordic:after{content:"\10f7ca"}.fad.fa-skull:after{content:"\10f54c"}.fad.fa-skull-cow:after{content:"\10f8de"}.fad.fa-skull-crossbones:after{content:"\10f714"}.fad.fa-slash:after{content:"\10f715"}.fad.fa-sledding:after{content:"\10f7cb"}.fad.fa-sleigh:after{content:"\10f7cc"}.fad.fa-sliders-h:after{content:"\10f1de"}.fad.fa-sliders-h-square:after{content:"\10f3f0"}.fad.fa-sliders-v:after{content:"\10f3f1"}.fad.fa-sliders-v-square:after{content:"\10f3f2"}.fad.fa-smile:after{content:"\10f118"}.fad.fa-smile-beam:after{content:"\10f5b8"}.fad.fa-smile-plus:after{content:"\10f5b9"}.fad.fa-smile-wink:after{content:"\10f4da"}.fad.fa-smog:after{content:"\10f75f"}.fad.fa-smoke:after{content:"\10f760"}.fad.fa-smoking:after{content:"\10f48d"}.fad.fa-smoking-ban:after{content:"\10f54d"}.fad.fa-sms:after{content:"\10f7cd"}.fad.fa-snake:after{content:"\10f716"}.fad.fa-snooze:after{content:"\10f880"}.fad.fa-snow-blowing:after{content:"\10f761"}.fad.fa-snowboarding:after{content:"\10f7ce"}.fad.fa-snowflake:after{content:"\10f2dc"}.fad.fa-snowflakes:after{content:"\10f7cf"}.fad.fa-snowman:after{content:"\10f7d0"}.fad.fa-snowmobile:after{content:"\10f7d1"}.fad.fa-snowplow:after{content:"\10f7d2"}.fad.fa-socks:after{content:"\10f696"}.fad.fa-solar-panel:after{content:"\10f5ba"}.fad.fa-solar-system:after{content:"\10f92f"}.fad.fa-sort:after{content:"\10f0dc"}.fad.fa-sort-alpha-down:after{content:"\10f15d"}.fad.fa-sort-alpha-down-alt:after{content:"\10f881"}.fad.fa-sort-alpha-up:after{content:"\10f15e"}.fad.fa-sort-alpha-up-alt:after{content:"\10f882"}.fad.fa-sort-alt:after{content:"\10f883"}.fad.fa-sort-amount-down:after{content:"\10f160"}.fad.fa-sort-amount-down-alt:after{content:"\10f884"}.fad.fa-sort-amount-up:after{content:"\10f161"}.fad.fa-sort-amount-up-alt:after{content:"\10f885"}.fad.fa-sort-circle:after{content:"\10f930"}.fad.fa-sort-circle-down:after{content:"\10f931"}.fad.fa-sort-circle-up:after{content:"\10f932"}.fad.fa-sort-down:after{content:"\10f0dd"}.fad.fa-sort-numeric-down:after{content:"\10f162"}.fad.fa-sort-numeric-down-alt:after{content:"\10f886"}.fad.fa-sort-numeric-up:after{content:"\10f163"}.fad.fa-sort-numeric-up-alt:after{content:"\10f887"}.fad.fa-sort-shapes-down:after{content:"\10f888"}.fad.fa-sort-shapes-down-alt:after{content:"\10f889"}.fad.fa-sort-shapes-up:after{content:"\10f88a"}.fad.fa-sort-shapes-up-alt:after{content:"\10f88b"}.fad.fa-sort-size-down:after{content:"\10f88c"}.fad.fa-sort-size-down-alt:after{content:"\10f88d"}.fad.fa-sort-size-up:after{content:"\10f88e"}.fad.fa-sort-size-up-alt:after{content:"\10f88f"}.fad.fa-sort-up:after{content:"\10f0de"}.fad.fa-soup:after{content:"\10f823"}.fad.fa-spa:after{content:"\10f5bb"}.fad.fa-space-shuttle:after{content:"\10f197"}.fad.fa-space-station-moon:after{content:"\10f933"}.fad.fa-space-station-moon-alt:after{content:"\10f934"}.fad.fa-spade:after{content:"\10f2f4"}.fad.fa-sparkles:after{content:"\10f890"}.fad.fa-speaker:after{content:"\10f8df"}.fad.fa-speakers:after{content:"\10f8e0"}.fad.fa-spell-check:after{content:"\10f891"}.fad.fa-spider:after{content:"\10f717"}.fad.fa-spider-black-widow:after{content:"\10f718"}.fad.fa-spider-web:after{content:"\10f719"}.fad.fa-spinner:after{content:"\10f110"}.fad.fa-spinner-third:after{content:"\10f3f4"}.fad.fa-splotch:after{content:"\10f5bc"}.fad.fa-spray-can:after{content:"\10f5bd"}.fad.fa-sprinkler:after{content:"\10f935"}.fad.fa-square:after{content:"\10f0c8"}.fad.fa-square-full:after{content:"\10f45c"}.fad.fa-square-root:after{content:"\10f697"}.fad.fa-square-root-alt:after{content:"\10f698"}.fad.fa-squirrel:after{content:"\10f71a"}.fad.fa-staff:after{content:"\10f71b"}.fad.fa-stamp:after{content:"\10f5bf"}.fad.fa-star:after{content:"\10f005"}.fad.fa-star-and-crescent:after{content:"\10f699"}.fad.fa-star-christmas:after{content:"\10f7d4"}.fad.fa-star-exclamation:after{content:"\10f2f3"}.fad.fa-star-half:after{content:"\10f089"}.fad.fa-star-half-alt:after{content:"\10f5c0"}.fad.fa-star-of-david:after{content:"\10f69a"}.fad.fa-star-of-life:after{content:"\10f621"}.fad.fa-star-shooting:after{content:"\10f936"}.fad.fa-starfighter:after{content:"\10f937"}.fad.fa-starfighter-alt:after{content:"\10f938"}.fad.fa-stars:after{content:"\10f762"}.fad.fa-starship:after{content:"\10f939"}.fad.fa-starship-freighter:after{content:"\10f93a"}.fad.fa-steak:after{content:"\10f824"}.fad.fa-steering-wheel:after{content:"\10f622"}.fad.fa-step-backward:after{content:"\10f048"}.fad.fa-step-forward:after{content:"\10f051"}.fad.fa-stethoscope:after{content:"\10f0f1"}.fad.fa-sticky-note:after{content:"\10f249"}.fad.fa-stocking:after{content:"\10f7d5"}.fad.fa-stomach:after{content:"\10f623"}.fad.fa-stop:after{content:"\10f04d"}.fad.fa-stop-circle:after{content:"\10f28d"}.fad.fa-stopwatch:after{content:"\10f2f2"}.fad.fa-store:after{content:"\10f54e"}.fad.fa-store-alt:after{content:"\10f54f"}.fad.fa-stream:after{content:"\10f550"}.fad.fa-street-view:after{content:"\10f21d"}.fad.fa-stretcher:after{content:"\10f825"}.fad.fa-strikethrough:after{content:"\10f0cc"}.fad.fa-stroopwafel:after{content:"\10f551"}.fad.fa-subscript:after{content:"\10f12c"}.fad.fa-subway:after{content:"\10f239"}.fad.fa-suitcase:after{content:"\10f0f2"}.fad.fa-suitcase-rolling:after{content:"\10f5c1"}.fad.fa-sun:after{content:"\10f185"}.fad.fa-sun-cloud:after{content:"\10f763"}.fad.fa-sun-dust:after{content:"\10f764"}.fad.fa-sun-haze:after{content:"\10f765"}.fad.fa-sunglasses:after{content:"\10f892"}.fad.fa-sunrise:after{content:"\10f766"}.fad.fa-sunset:after{content:"\10f767"}.fad.fa-superscript:after{content:"\10f12b"}.fad.fa-surprise:after{content:"\10f5c2"}.fad.fa-swatchbook:after{content:"\10f5c3"}.fad.fa-swimmer:after{content:"\10f5c4"}.fad.fa-swimming-pool:after{content:"\10f5c5"}.fad.fa-sword:after{content:"\10f71c"}.fad.fa-sword-laser:after{content:"\10f93b"}.fad.fa-sword-laser-alt:after{content:"\10f93c"}.fad.fa-swords:after{content:"\10f71d"}.fad.fa-swords-laser:after{content:"\10f93d"}.fad.fa-synagogue:after{content:"\10f69b"}.fad.fa-sync:after{content:"\10f021"}.fad.fa-sync-alt:after{content:"\10f2f1"}.fad.fa-syringe:after{content:"\10f48e"}.fad.fa-table:after{content:"\10f0ce"}.fad.fa-table-tennis:after{content:"\10f45d"}.fad.fa-tablet:after{content:"\10f10a"}.fad.fa-tablet-alt:after{content:"\10f3fa"}.fad.fa-tablet-android:after{content:"\10f3fb"}.fad.fa-tablet-android-alt:after{content:"\10f3fc"}.fad.fa-tablet-rugged:after{content:"\10f48f"}.fad.fa-tablets:after{content:"\10f490"}.fad.fa-tachometer:after{content:"\10f0e4"}.fad.fa-tachometer-alt:after{content:"\10f3fd"}.fad.fa-tachometer-alt-average:after{content:"\10f624"}.fad.fa-tachometer-alt-fast:after{content:"\10f625"}.fad.fa-tachometer-alt-fastest:after{content:"\10f626"}.fad.fa-tachometer-alt-slow:after{content:"\10f627"}.fad.fa-tachometer-alt-slowest:after{content:"\10f628"}.fad.fa-tachometer-average:after{content:"\10f629"}.fad.fa-tachometer-fast:after{content:"\10f62a"}.fad.fa-tachometer-fastest:after{content:"\10f62b"}.fad.fa-tachometer-slow:after{content:"\10f62c"}.fad.fa-tachometer-slowest:after{content:"\10f62d"}.fad.fa-taco:after{content:"\10f826"}.fad.fa-tag:after{content:"\10f02b"}.fad.fa-tags:after{content:"\10f02c"}.fad.fa-tally:after{content:"\10f69c"}.fad.fa-tanakh:after{content:"\10f827"}.fad.fa-tape:after{content:"\10f4db"}.fad.fa-tasks:after{content:"\10f0ae"}.fad.fa-tasks-alt:after{content:"\10f828"}.fad.fa-taxi:after{content:"\10f1ba"}.fad.fa-teeth:after{content:"\10f62e"}.fad.fa-teeth-open:after{content:"\10f62f"}.fad.fa-telescope:after{content:"\10f93e"}.fad.fa-temperature-down:after{content:"\10f93f"}.fad.fa-temperature-frigid:after{content:"\10f768"}.fad.fa-temperature-high:after{content:"\10f769"}.fad.fa-temperature-hot:after{content:"\10f76a"}.fad.fa-temperature-low:after{content:"\10f76b"}.fad.fa-temperature-up:after{content:"\10f940"}.fad.fa-tenge:after{content:"\10f7d7"}.fad.fa-tennis-ball:after{content:"\10f45e"}.fad.fa-terminal:after{content:"\10f120"}.fad.fa-text:after{content:"\10f893"}.fad.fa-text-height:after{content:"\10f034"}.fad.fa-text-size:after{content:"\10f894"}.fad.fa-text-width:after{content:"\10f035"}.fad.fa-th:after{content:"\10f00a"}.fad.fa-th-large:after{content:"\10f009"}.fad.fa-th-list:after{content:"\10f00b"}.fad.fa-theater-masks:after{content:"\10f630"}.fad.fa-thermometer:after{content:"\10f491"}.fad.fa-thermometer-empty:after{content:"\10f2cb"}.fad.fa-thermometer-full:after{content:"\10f2c7"}.fad.fa-thermometer-half:after{content:"\10f2c9"}.fad.fa-thermometer-quarter:after{content:"\10f2ca"}.fad.fa-thermometer-three-quarters:after{content:"\10f2c8"}.fad.fa-theta:after{content:"\10f69e"}.fad.fa-thumbs-down:after{content:"\10f165"}.fad.fa-thumbs-up:after{content:"\10f164"}.fad.fa-thumbtack:after{content:"\10f08d"}.fad.fa-thunderstorm:after{content:"\10f76c"}.fad.fa-thunderstorm-moon:after{content:"\10f76d"}.fad.fa-thunderstorm-sun:after{content:"\10f76e"}.fad.fa-ticket:after{content:"\10f145"}.fad.fa-ticket-alt:after{content:"\10f3ff"}.fad.fa-tilde:after{content:"\10f69f"}.fad.fa-times:after{content:"\10f00d"}.fad.fa-times-circle:after{content:"\10f057"}.fad.fa-times-hexagon:after{content:"\10f2ee"}.fad.fa-times-octagon:after{content:"\10f2f0"}.fad.fa-times-square:after{content:"\10f2d3"}.fad.fa-tint:after{content:"\10f043"}.fad.fa-tint-slash:after{content:"\10f5c7"}.fad.fa-tire:after{content:"\10f631"}.fad.fa-tire-flat:after{content:"\10f632"}.fad.fa-tire-pressure-warning:after{content:"\10f633"}.fad.fa-tire-rugged:after{content:"\10f634"}.fad.fa-tired:after{content:"\10f5c8"}.fad.fa-toggle-off:after{content:"\10f204"}.fad.fa-toggle-on:after{content:"\10f205"}.fad.fa-toilet:after{content:"\10f7d8"}.fad.fa-toilet-paper:after{content:"\10f71e"}.fad.fa-toilet-paper-alt:after{content:"\10f71f"}.fad.fa-tombstone:after{content:"\10f720"}.fad.fa-tombstone-alt:after{content:"\10f721"}.fad.fa-toolbox:after{content:"\10f552"}.fad.fa-tools:after{content:"\10f7d9"}.fad.fa-tooth:after{content:"\10f5c9"}.fad.fa-toothbrush:after{content:"\10f635"}.fad.fa-torah:after{content:"\10f6a0"}.fad.fa-torii-gate:after{content:"\10f6a1"}.fad.fa-tornado:after{content:"\10f76f"}.fad.fa-tractor:after{content:"\10f722"}.fad.fa-trademark:after{content:"\10f25c"}.fad.fa-traffic-cone:after{content:"\10f636"}.fad.fa-traffic-light:after{content:"\10f637"}.fad.fa-traffic-light-go:after{content:"\10f638"}.fad.fa-traffic-light-slow:after{content:"\10f639"}.fad.fa-traffic-light-stop:after{content:"\10f63a"}.fad.fa-trailer:after{content:"\10f941"}.fad.fa-train:after{content:"\10f238"}.fad.fa-tram:after{content:"\10f7da"}.fad.fa-transgender:after{content:"\10f224"}.fad.fa-transgender-alt:after{content:"\10f225"}.fad.fa-transporter:after{content:"\10f942"}.fad.fa-transporter-1:after{content:"\10f943"}.fad.fa-transporter-2:after{content:"\10f944"}.fad.fa-transporter-3:after{content:"\10f945"}.fad.fa-transporter-empty:after{content:"\10f946"}.fad.fa-trash:after{content:"\10f1f8"}.fad.fa-trash-alt:after{content:"\10f2ed"}.fad.fa-trash-restore:after{content:"\10f829"}.fad.fa-trash-restore-alt:after{content:"\10f82a"}.fad.fa-trash-undo:after{content:"\10f895"}.fad.fa-trash-undo-alt:after{content:"\10f896"}.fad.fa-treasure-chest:after{content:"\10f723"}.fad.fa-tree:after{content:"\10f1bb"}.fad.fa-tree-alt:after{content:"\10f400"}.fad.fa-tree-christmas:after{content:"\10f7db"}.fad.fa-tree-decorated:after{content:"\10f7dc"}.fad.fa-tree-large:after{content:"\10f7dd"}.fad.fa-tree-palm:after{content:"\10f82b"}.fad.fa-trees:after{content:"\10f724"}.fad.fa-triangle:after{content:"\10f2ec"}.fad.fa-triangle-music:after{content:"\10f8e2"}.fad.fa-trophy:after{content:"\10f091"}.fad.fa-trophy-alt:after{content:"\10f2eb"}.fad.fa-truck:after{content:"\10f0d1"}.fad.fa-truck-container:after{content:"\10f4dc"}.fad.fa-truck-couch:after{content:"\10f4dd"}.fad.fa-truck-loading:after{content:"\10f4de"}.fad.fa-truck-monster:after{content:"\10f63b"}.fad.fa-truck-moving:after{content:"\10f4df"}.fad.fa-truck-pickup:after{content:"\10f63c"}.fad.fa-truck-plow:after{content:"\10f7de"}.fad.fa-truck-ramp:after{content:"\10f4e0"}.fad.fa-trumpet:after{content:"\10f8e3"}.fad.fa-tshirt:after{content:"\10f553"}.fad.fa-tty:after{content:"\10f1e4"}.fad.fa-turkey:after{content:"\10f725"}.fad.fa-turntable:after{content:"\10f8e4"}.fad.fa-turtle:after{content:"\10f726"}.fad.fa-tv:after{content:"\10f26c"}.fad.fa-tv-alt:after{content:"\10f8e5"}.fad.fa-tv-music:after{content:"\10f8e6"}.fad.fa-tv-retro:after{content:"\10f401"}.fad.fa-typewriter:after{content:"\10f8e7"}.fad.fa-ufo:after{content:"\10f947"}.fad.fa-ufo-beam:after{content:"\10f948"}.fad.fa-umbrella:after{content:"\10f0e9"}.fad.fa-umbrella-beach:after{content:"\10f5ca"}.fad.fa-underline:after{content:"\10f0cd"}.fad.fa-undo:after{content:"\10f0e2"}.fad.fa-undo-alt:after{content:"\10f2ea"}.fad.fa-unicorn:after{content:"\10f727"}.fad.fa-union:after{content:"\10f6a2"}.fad.fa-universal-access:after{content:"\10f29a"}.fad.fa-university:after{content:"\10f19c"}.fad.fa-unlink:after{content:"\10f127"}.fad.fa-unlock:after{content:"\10f09c"}.fad.fa-unlock-alt:after{content:"\10f13e"}.fad.fa-upload:after{content:"\10f093"}.fad.fa-usb-drive:after{content:"\10f8e9"}.fad.fa-usd-circle:after{content:"\10f2e8"}.fad.fa-usd-square:after{content:"\10f2e9"}.fad.fa-user:after{content:"\10f007"}.fad.fa-user-alien:after{content:"\10f94a"}.fad.fa-user-alt:after{content:"\10f406"}.fad.fa-user-alt-slash:after{content:"\10f4fa"}.fad.fa-user-astronaut:after{content:"\10f4fb"}.fad.fa-user-chart:after{content:"\10f6a3"}.fad.fa-user-check:after{content:"\10f4fc"}.fad.fa-user-circle:after{content:"\10f2bd"}.fad.fa-user-clock:after{content:"\10f4fd"}.fad.fa-user-cog:after{content:"\10f4fe"}.fad.fa-user-cowboy:after{content:"\10f8ea"}.fad.fa-user-crown:after{content:"\10f6a4"}.fad.fa-user-edit:after{content:"\10f4ff"}.fad.fa-user-friends:after{content:"\10f500"}.fad.fa-user-graduate:after{content:"\10f501"}.fad.fa-user-hard-hat:after{content:"\10f82c"}.fad.fa-user-headset:after{content:"\10f82d"}.fad.fa-user-injured:after{content:"\10f728"}.fad.fa-user-lock:after{content:"\10f502"}.fad.fa-user-md:after{content:"\10f0f0"}.fad.fa-user-md-chat:after{content:"\10f82e"}.fad.fa-user-minus:after{content:"\10f503"}.fad.fa-user-music:after{content:"\10f8eb"}.fad.fa-user-ninja:after{content:"\10f504"}.fad.fa-user-nurse:after{content:"\10f82f"}.fad.fa-user-plus:after{content:"\10f234"}.fad.fa-user-robot:after{content:"\10f94b"}.fad.fa-user-secret:after{content:"\10f21b"}.fad.fa-user-shield:after{content:"\10f505"}.fad.fa-user-slash:after{content:"\10f506"}.fad.fa-user-tag:after{content:"\10f507"}.fad.fa-user-tie:after{content:"\10f508"}.fad.fa-user-times:after{content:"\10f235"}.fad.fa-user-visor:after{content:"\10f94c"}.fad.fa-users:after{content:"\10f0c0"}.fad.fa-users-class:after{content:"\10f63d"}.fad.fa-users-cog:after{content:"\10f509"}.fad.fa-users-crown:after{content:"\10f6a5"}.fad.fa-users-medical:after{content:"\10f830"}.fad.fa-utensil-fork:after{content:"\10f2e3"}.fad.fa-utensil-knife:after{content:"\10f2e4"}.fad.fa-utensil-spoon:after{content:"\10f2e5"}.fad.fa-utensils:after{content:"\10f2e7"}.fad.fa-utensils-alt:after{content:"\10f2e6"}.fad.fa-vacuum:after{content:"\10f94d"}.fad.fa-vacuum-robot:after{content:"\10f94e"}.fad.fa-value-absolute:after{content:"\10f6a6"}.fad.fa-vector-square:after{content:"\10f5cb"}.fad.fa-venus:after{content:"\10f221"}.fad.fa-venus-double:after{content:"\10f226"}.fad.fa-venus-mars:after{content:"\10f228"}.fad.fa-vhs:after{content:"\10f8ec"}.fad.fa-vial:after{content:"\10f492"}.fad.fa-vials:after{content:"\10f493"}.fad.fa-video:after{content:"\10f03d"}.fad.fa-video-plus:after{content:"\10f4e1"}.fad.fa-video-slash:after{content:"\10f4e2"}.fad.fa-vihara:after{content:"\10f6a7"}.fad.fa-violin:after{content:"\10f8ed"}.fad.fa-voicemail:after{content:"\10f897"}.fad.fa-volcano:after{content:"\10f770"}.fad.fa-volleyball-ball:after{content:"\10f45f"}.fad.fa-volume:after{content:"\10f6a8"}.fad.fa-volume-down:after{content:"\10f027"}.fad.fa-volume-mute:after{content:"\10f6a9"}.fad.fa-volume-off:after{content:"\10f026"}.fad.fa-volume-slash:after{content:"\10f2e2"}.fad.fa-volume-up:after{content:"\10f028"}.fad.fa-vote-nay:after{content:"\10f771"}.fad.fa-vote-yea:after{content:"\10f772"}.fad.fa-vr-cardboard:after{content:"\10f729"}.fad.fa-wagon-covered:after{content:"\10f8ee"}.fad.fa-walker:after{content:"\10f831"}.fad.fa-walkie-talkie:after{content:"\10f8ef"}.fad.fa-walking:after{content:"\10f554"}.fad.fa-wallet:after{content:"\10f555"}.fad.fa-wand:after{content:"\10f72a"}.fad.fa-wand-magic:after{content:"\10f72b"}.fad.fa-warehouse:after{content:"\10f494"}.fad.fa-warehouse-alt:after{content:"\10f495"}.fad.fa-washer:after{content:"\10f898"}.fad.fa-watch:after{content:"\10f2e1"}.fad.fa-watch-calculator:after{content:"\10f8f0"}.fad.fa-watch-fitness:after{content:"\10f63e"}.fad.fa-water:after{content:"\10f773"}.fad.fa-water-lower:after{content:"\10f774"}.fad.fa-water-rise:after{content:"\10f775"}.fad.fa-wave-sine:after{content:"\10f899"}.fad.fa-wave-square:after{content:"\10f83e"}.fad.fa-wave-triangle:after{content:"\10f89a"}.fad.fa-waveform:after{content:"\10f8f1"}.fad.fa-waveform-path:after{content:"\10f8f2"}.fad.fa-webcam:after{content:"\10f832"}.fad.fa-webcam-slash:after{content:"\10f833"}.fad.fa-weight:after{content:"\10f496"}.fad.fa-weight-hanging:after{content:"\10f5cd"}.fad.fa-whale:after{content:"\10f72c"}.fad.fa-wheat:after{content:"\10f72d"}.fad.fa-wheelchair:after{content:"\10f193"}.fad.fa-whistle:after{content:"\10f460"}.fad.fa-wifi:after{content:"\10f1eb"}.fad.fa-wifi-1:after{content:"\10f6aa"}.fad.fa-wifi-2:after{content:"\10f6ab"}.fad.fa-wifi-slash:after{content:"\10f6ac"}.fad.fa-wind:after{content:"\10f72e"}.fad.fa-wind-turbine:after{content:"\10f89b"}.fad.fa-wind-warning:after{content:"\10f776"}.fad.fa-window:after{content:"\10f40e"}.fad.fa-window-alt:after{content:"\10f40f"}.fad.fa-window-close:after{content:"\10f410"}.fad.fa-window-frame:after{content:"\10f94f"}.fad.fa-window-frame-open:after{content:"\10f950"}.fad.fa-window-maximize:after{content:"\10f2d0"}.fad.fa-window-minimize:after{content:"\10f2d1"}.fad.fa-window-restore:after{content:"\10f2d2"}.fad.fa-windsock:after{content:"\10f777"}.fad.fa-wine-bottle:after{content:"\10f72f"}.fad.fa-wine-glass:after{content:"\10f4e3"}.fad.fa-wine-glass-alt:after{content:"\10f5ce"}.fad.fa-won-sign:after{content:"\10f159"}.fad.fa-wreath:after{content:"\10f7e2"}.fad.fa-wrench:after{content:"\10f0ad"}.fad.fa-x-ray:after{content:"\10f497"}.fad.fa-yen-sign:after{content:"\10f157"}.fad.fa-yin-yang:after{content:"\10f6ad"}@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:300;font-display:auto;src:url(../webfonts/fa-light-300.eot);src:url(../webfonts/fa-light-300.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-light-300.woff2) format("woff2"),url(../webfonts/fa-light-300.woff) format("woff"),url(../webfonts/fa-light-300.ttf) format("truetype"),url(../webfonts/fa-light-300.svg#fontawesome) format("svg")}.fal{font-weight:300}@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.fal,.far{font-family:"Font Awesome 5 Pro"}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Pro";font-weight:900}
\ No newline at end of file
diff --git a/static/assets/css/fontawesome/webfonts/fa-brands-400.eot b/static/assets/css/fontawesome/webfonts/fa-brands-400.eot
new file mode 100644
index 0000000..ff42eeb
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-brands-400.eot differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-brands-400.svg b/static/assets/css/fontawesome/webfonts/fa-brands-400.svg
new file mode 100644
index 0000000..3613b35
--- /dev/null
+++ b/static/assets/css/fontawesome/webfonts/fa-brands-400.svg
@@ -0,0 +1,3535 @@
+
+
+
+
+
+Created by FontForge 20190801 at Tue Dec 10 16:08:44 2019
+ By Robert Madole
+Copyright (c) Font Awesome
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/assets/css/fontawesome/webfonts/fa-brands-400.ttf b/static/assets/css/fontawesome/webfonts/fa-brands-400.ttf
new file mode 100644
index 0000000..79b6bae
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-brands-400.ttf differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-brands-400.woff b/static/assets/css/fontawesome/webfonts/fa-brands-400.woff
new file mode 100644
index 0000000..56d4bbb
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-brands-400.woff differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-brands-400.woff2 b/static/assets/css/fontawesome/webfonts/fa-brands-400.woff2
new file mode 100644
index 0000000..8a83663
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-brands-400.woff2 differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-duotone-900.eot b/static/assets/css/fontawesome/webfonts/fa-duotone-900.eot
new file mode 100644
index 0000000..6ca4482
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-duotone-900.eot differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-duotone-900.svg b/static/assets/css/fontawesome/webfonts/fa-duotone-900.svg
new file mode 100644
index 0000000..43d3417
--- /dev/null
+++ b/static/assets/css/fontawesome/webfonts/fa-duotone-900.svg
@@ -0,0 +1,14692 @@
+
+
+
+
+
+Created by FontForge 20190801 at Tue Dec 10 16:08:45 2019
+ By Robert Madole
+Copyright (c) Font Awesome
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/assets/css/fontawesome/webfonts/fa-duotone-900.woff b/static/assets/css/fontawesome/webfonts/fa-duotone-900.woff
new file mode 100644
index 0000000..de2ce75
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-duotone-900.woff differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-duotone-900.woff2 b/static/assets/css/fontawesome/webfonts/fa-duotone-900.woff2
new file mode 100644
index 0000000..0d57b19
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-duotone-900.woff2 differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-light-300.eot b/static/assets/css/fontawesome/webfonts/fa-light-300.eot
new file mode 100644
index 0000000..5051b87
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-light-300.eot differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-light-300.svg b/static/assets/css/fontawesome/webfonts/fa-light-300.svg
new file mode 100644
index 0000000..48908c4
--- /dev/null
+++ b/static/assets/css/fontawesome/webfonts/fa-light-300.svg
@@ -0,0 +1,11936 @@
+
+
+
+
+
+Created by FontForge 20190801 at Tue Dec 10 16:08:46 2019
+ By Robert Madole
+Copyright (c) Font Awesome
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/assets/css/fontawesome/webfonts/fa-light-300.ttf b/static/assets/css/fontawesome/webfonts/fa-light-300.ttf
new file mode 100644
index 0000000..34489d0
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-light-300.ttf differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-light-300.woff b/static/assets/css/fontawesome/webfonts/fa-light-300.woff
new file mode 100644
index 0000000..414c107
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-light-300.woff differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-light-300.woff2 b/static/assets/css/fontawesome/webfonts/fa-light-300.woff2
new file mode 100644
index 0000000..d49e7e2
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-light-300.woff2 differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-regular-400.eot b/static/assets/css/fontawesome/webfonts/fa-regular-400.eot
new file mode 100644
index 0000000..4c6662f
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-regular-400.eot differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-regular-400.svg b/static/assets/css/fontawesome/webfonts/fa-regular-400.svg
new file mode 100644
index 0000000..32aae12
--- /dev/null
+++ b/static/assets/css/fontawesome/webfonts/fa-regular-400.svg
@@ -0,0 +1,10905 @@
+
+
+
+
+
+Created by FontForge 20190801 at Tue Dec 10 16:08:46 2019
+ By Robert Madole
+Copyright (c) Font Awesome
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/assets/css/fontawesome/webfonts/fa-regular-400.ttf b/static/assets/css/fontawesome/webfonts/fa-regular-400.ttf
new file mode 100644
index 0000000..2da2b23
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-regular-400.ttf differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-regular-400.woff b/static/assets/css/fontawesome/webfonts/fa-regular-400.woff
new file mode 100644
index 0000000..ae20cd5
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-regular-400.woff differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-regular-400.woff2 b/static/assets/css/fontawesome/webfonts/fa-regular-400.woff2
new file mode 100644
index 0000000..783cfcf
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-regular-400.woff2 differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-solid-900.eot b/static/assets/css/fontawesome/webfonts/fa-solid-900.eot
new file mode 100644
index 0000000..cbcc72f
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-solid-900.eot differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-solid-900.svg b/static/assets/css/fontawesome/webfonts/fa-solid-900.svg
new file mode 100644
index 0000000..190c4c8
--- /dev/null
+++ b/static/assets/css/fontawesome/webfonts/fa-solid-900.svg
@@ -0,0 +1,9297 @@
+
+
+
+
+
+Created by FontForge 20190801 at Tue Dec 10 16:08:45 2019
+ By Robert Madole
+Copyright (c) Font Awesome
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/assets/css/fontawesome/webfonts/fa-solid-900.ttf b/static/assets/css/fontawesome/webfonts/fa-solid-900.ttf
new file mode 100644
index 0000000..18e30d4
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-solid-900.ttf differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-solid-900.woff b/static/assets/css/fontawesome/webfonts/fa-solid-900.woff
new file mode 100644
index 0000000..c0e39e2
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-solid-900.woff differ
diff --git a/static/assets/css/fontawesome/webfonts/fa-solid-900.woff2 b/static/assets/css/fontawesome/webfonts/fa-solid-900.woff2
new file mode 100644
index 0000000..2524b30
Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-solid-900.woff2 differ
diff --git a/static/assets/css/reset-css.css b/static/assets/css/reset-css.css
new file mode 100644
index 0000000..6f12183
--- /dev/null
+++ b/static/assets/css/reset-css.css
@@ -0,0 +1,264 @@
+a, abbr, acronym, address, applet, article, aside, audio, b, big, blockquote, body, canvas, caption, center, cite, code, dd, del, details, dfn, div, dl, dt, em, embed, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, html, i, iframe, img, ins, kbd, label, legend, li, mark, menu, nav, object, ol, output, p, pre, q, ruby, s, samp, section, small, span, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, time, tr, tt, u, ul, var, video{
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section{
+ display: block
+}
+
+body{
+ line-height: 1;
+ margin: 0
+}
+
+ol, ul{
+ list-style: none
+}
+
+blockquote, q{
+ quotes: none
+}
+
+blockquote:after, blockquote:before, q:after, q:before{
+ content: '';
+ content: none
+}
+
+table{
+ border-collapse: collapse;
+ border-spacing: 0
+}
+
+html{
+ line-height: 1.15;
+ -webkit-text-size-adjust: 100%
+}
+
+h1{
+ font-size: 2em;
+ margin: .67em 0
+}
+
+hr{
+ box-sizing: content-box;
+ height: 0;
+ overflow: visible
+}
+
+pre{
+ font-family: monospace, monospace;
+ font-size: 1em
+}
+
+a{
+ background-color: transparent
+}
+
+abbr[title]{
+ border-bottom: none;
+ text-decoration: underline;
+ text-decoration: underline dotted
+}
+
+b, strong{
+ font-weight: bolder
+}
+
+code, kbd, samp{
+ font-family: monospace, monospace;
+ font-size: 1em
+}
+
+small{
+ font-size: 80%
+}
+
+sub, sup{
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline
+}
+
+sub{
+ bottom: -.25em
+}
+
+sup{
+ top: -.5em
+}
+
+img{
+ border-style: none
+}
+
+button, input, optgroup, select, textarea{
+ font-family: inherit;
+ font-size: 100%;
+ line-height: 1.15;
+ margin: 0
+}
+
+button, input{
+ overflow: visible
+}
+
+button, select{
+ text-transform: none
+}
+
+[type=button], [type=reset], [type=submit], button{
+ -webkit-appearance: button
+}
+
+[type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner, button::-moz-focus-inner{
+ border-style: none;
+ padding: 0
+}
+
+[type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring, button:-moz-focusring{
+ outline: 1px dotted ButtonText
+}
+
+fieldset{
+ padding: .35em .75em .625em
+}
+
+legend{
+ box-sizing: border-box;
+ color: inherit;
+ display: table;
+ max-width: 100%;
+ padding: 0;
+ white-space: normal
+}
+
+progress{
+ vertical-align: baseline
+}
+
+textarea{
+ overflow: auto
+}
+
+[type=checkbox], [type=radio]{
+ box-sizing: border-box;
+ padding: 0
+}
+
+[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button{
+ height: auto
+}
+
+[type=search]{
+ -webkit-appearance: textfield;
+ outline-offset: -2px
+}
+
+[type=search]::-webkit-search-decoration{
+ -webkit-appearance: none
+}
+
+::-webkit-file-upload-button{
+ -webkit-appearance: button;
+ font: inherit
+}
+
+details{
+ display: block
+}
+
+summary{
+ display: list-item
+}
+
+template{
+ display: none
+}
+
+[hidden]{
+ display: none
+}
+
+::selection{
+ background: #468fd2;
+ color: #fff
+}
+
+::-webkit-selection{
+ background: #468fd2;
+ color: #fff
+}
+
+::-moz-selection{
+ background: #468fd2;
+ color: #fff
+}
+
+a{
+ text-decoration: none
+}
+
+h1{
+ font-size: 32px;
+}
+
+h2{
+ font-size: 24px;
+}
+
+h3{
+ font-size: 18.72px;
+}
+
+h4{
+ font-size: 16px;
+}
+
+h5{
+ font-size: 13.28px;
+}
+
+h6{
+ font-size: 10.72px;
+}
+
+.clear{
+ clear: both;
+ display: block;
+ overflow: hidden;
+ visibility: hidden;
+ width: 0;
+ height: 0
+}
+
+.clearfix{
+ zoom: 1
+}
+
+.clearfix:after, .clearfix:before, .row:after, .row:before{
+ content: '\0020';
+ display: block;
+ overflow: hidden;
+ visibility: hidden;
+ width: 0;
+ height: 0
+}
+
+.clearfix:after, .row:after{
+ clear: both
+}
+
+.relativePos{
+ position: relative;
+ width: 100%;
+ height: 100%
+}
diff --git a/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.eot b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.eot
new file mode 100644
index 0000000..1bad4dd
Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.eot differ
diff --git a/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.ttf b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.ttf
new file mode 100644
index 0000000..926ea50
Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.ttf differ
diff --git a/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff
new file mode 100644
index 0000000..e29e1b4
Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff differ
diff --git a/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff2 b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff2
new file mode 100644
index 0000000..5c7209a
Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff2 differ
diff --git a/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.eot b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.eot
new file mode 100644
index 0000000..00c2977
Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.eot differ
diff --git a/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.ttf b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.ttf
new file mode 100644
index 0000000..8e2ff0b
Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.ttf differ
diff --git a/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff
new file mode 100644
index 0000000..dffe8ee
Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff differ
diff --git a/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff2 b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff2
new file mode 100644
index 0000000..e9a8ee7
Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff2 differ
diff --git a/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.eot b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.eot
new file mode 100644
index 0000000..4d31645
Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.eot differ
diff --git a/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.ttf b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.ttf
new file mode 100644
index 0000000..c109c68
Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.ttf differ
diff --git a/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff
new file mode 100644
index 0000000..3f1756d
Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff differ
diff --git a/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff2 b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff2
new file mode 100644
index 0000000..3acdbf5
Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff2 differ
diff --git a/static/assets/img/FAQ/hero.jpg b/static/assets/img/FAQ/hero.jpg
new file mode 100644
index 0000000..fe13a17
Binary files /dev/null and b/static/assets/img/FAQ/hero.jpg differ
diff --git a/static/assets/img/about/s3.jpg b/static/assets/img/about/s3.jpg
new file mode 100644
index 0000000..d6b74c5
Binary files /dev/null and b/static/assets/img/about/s3.jpg differ
diff --git a/static/assets/img/about/s5.jpg b/static/assets/img/about/s5.jpg
new file mode 100644
index 0000000..d0f310b
Binary files /dev/null and b/static/assets/img/about/s5.jpg differ
diff --git a/static/assets/img/agents/agents-hero.jpg b/static/assets/img/agents/agents-hero.jpg
new file mode 100644
index 0000000..b896c3c
Binary files /dev/null and b/static/assets/img/agents/agents-hero.jpg differ
diff --git a/static/assets/img/agents/representations-hero.jpg b/static/assets/img/agents/representations-hero.jpg
new file mode 100644
index 0000000..a093894
Binary files /dev/null and b/static/assets/img/agents/representations-hero.jpg differ
diff --git a/static/assets/img/auth/bg.jpg b/static/assets/img/auth/bg.jpg
new file mode 100644
index 0000000..4fc3fbf
Binary files /dev/null and b/static/assets/img/auth/bg.jpg differ
diff --git a/static/assets/img/auth/formbg.jpg b/static/assets/img/auth/formbg.jpg
new file mode 100644
index 0000000..cb7eff6
Binary files /dev/null and b/static/assets/img/auth/formbg.jpg differ
diff --git a/static/assets/img/avatars/1.jpg b/static/assets/img/avatars/1.jpg
new file mode 100644
index 0000000..0b08703
Binary files /dev/null and b/static/assets/img/avatars/1.jpg differ
diff --git a/static/assets/img/avatars/2.jpg b/static/assets/img/avatars/2.jpg
new file mode 100644
index 0000000..e736709
Binary files /dev/null and b/static/assets/img/avatars/2.jpg differ
diff --git a/static/assets/img/avatars/3.jpg b/static/assets/img/avatars/3.jpg
new file mode 100644
index 0000000..caf9a7e
Binary files /dev/null and b/static/assets/img/avatars/3.jpg differ
diff --git a/static/assets/img/avatars/4.jpg b/static/assets/img/avatars/4.jpg
new file mode 100644
index 0000000..97f6769
Binary files /dev/null and b/static/assets/img/avatars/4.jpg differ
diff --git a/static/assets/img/avatars/5.jpg b/static/assets/img/avatars/5.jpg
new file mode 100644
index 0000000..82b025f
Binary files /dev/null and b/static/assets/img/avatars/5.jpg differ
diff --git a/static/assets/img/avatars/6.jpg b/static/assets/img/avatars/6.jpg
new file mode 100644
index 0000000..1d2b884
Binary files /dev/null and b/static/assets/img/avatars/6.jpg differ
diff --git a/static/assets/img/avatars/7.jpg b/static/assets/img/avatars/7.jpg
new file mode 100644
index 0000000..2903cd2
Binary files /dev/null and b/static/assets/img/avatars/7.jpg differ
diff --git a/static/assets/img/avatars/8.jpg b/static/assets/img/avatars/8.jpg
new file mode 100644
index 0000000..3a5eba9
Binary files /dev/null and b/static/assets/img/avatars/8.jpg differ
diff --git a/static/assets/img/avatars/avatar.png b/static/assets/img/avatars/avatar.png
new file mode 100644
index 0000000..e16488e
Binary files /dev/null and b/static/assets/img/avatars/avatar.png differ
diff --git a/static/assets/img/contact/bg.jpg b/static/assets/img/contact/bg.jpg
new file mode 100644
index 0000000..c6f216f
Binary files /dev/null and b/static/assets/img/contact/bg.jpg differ
diff --git a/static/assets/img/download/android.svg b/static/assets/img/download/android.svg
new file mode 100644
index 0000000..1e31489
--- /dev/null
+++ b/static/assets/img/download/android.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/assets/img/download/hero.jpg b/static/assets/img/download/hero.jpg
new file mode 100644
index 0000000..4ea813e
Binary files /dev/null and b/static/assets/img/download/hero.jpg differ
diff --git a/static/assets/img/download/ios.svg b/static/assets/img/download/ios.svg
new file mode 100644
index 0000000..78d7943
--- /dev/null
+++ b/static/assets/img/download/ios.svg
@@ -0,0 +1,1071 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/assets/img/download/linux.png b/static/assets/img/download/linux.png
new file mode 100644
index 0000000..c0288ab
Binary files /dev/null and b/static/assets/img/download/linux.png differ
diff --git a/static/assets/img/download/mac.png b/static/assets/img/download/mac.png
new file mode 100644
index 0000000..6ebaf86
Binary files /dev/null and b/static/assets/img/download/mac.png differ
diff --git a/static/assets/img/download/windows.png b/static/assets/img/download/windows.png
new file mode 100644
index 0000000..1b47220
Binary files /dev/null and b/static/assets/img/download/windows.png differ
diff --git a/static/assets/img/favicon.png b/static/assets/img/favicon.png
new file mode 100644
index 0000000..d9c8a21
Binary files /dev/null and b/static/assets/img/favicon.png differ
diff --git a/static/assets/img/favicon_white.png b/static/assets/img/favicon_white.png
new file mode 100644
index 0000000..53f5614
Binary files /dev/null and b/static/assets/img/favicon_white.png differ
diff --git a/static/assets/img/footer/androidApp.png b/static/assets/img/footer/androidApp.png
new file mode 100644
index 0000000..2eb8c2d
Binary files /dev/null and b/static/assets/img/footer/androidApp.png differ
diff --git a/static/assets/img/footer/aparat.svg b/static/assets/img/footer/aparat.svg
new file mode 100644
index 0000000..cfe5d64
--- /dev/null
+++ b/static/assets/img/footer/aparat.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/assets/img/footer/apple.png b/static/assets/img/footer/apple.png
new file mode 100644
index 0000000..1b5d60a
Binary files /dev/null and b/static/assets/img/footer/apple.png differ
diff --git a/static/assets/img/footer/guarantee.svg b/static/assets/img/footer/guarantee.svg
new file mode 100644
index 0000000..cae888b
--- /dev/null
+++ b/static/assets/img/footer/guarantee.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/assets/img/footer/instagram.svg b/static/assets/img/footer/instagram.svg
new file mode 100644
index 0000000..a760a62
--- /dev/null
+++ b/static/assets/img/footer/instagram.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/static/assets/img/footer/learning.svg b/static/assets/img/footer/learning.svg
new file mode 100644
index 0000000..4e3ab63
--- /dev/null
+++ b/static/assets/img/footer/learning.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/assets/img/footer/nintendo.png b/static/assets/img/footer/nintendo.png
new file mode 100644
index 0000000..5dc991b
Binary files /dev/null and b/static/assets/img/footer/nintendo.png differ
diff --git a/static/assets/img/footer/panatech.png b/static/assets/img/footer/panatech.png
new file mode 100644
index 0000000..8dc65a6
Binary files /dev/null and b/static/assets/img/footer/panatech.png differ
diff --git a/static/assets/img/footer/pwaApp.png b/static/assets/img/footer/pwaApp.png
new file mode 100644
index 0000000..99a1607
Binary files /dev/null and b/static/assets/img/footer/pwaApp.png differ
diff --git a/static/assets/img/footer/repair.svg b/static/assets/img/footer/repair.svg
new file mode 100644
index 0000000..47667a6
--- /dev/null
+++ b/static/assets/img/footer/repair.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/assets/img/footer/service.svg b/static/assets/img/footer/service.svg
new file mode 100644
index 0000000..2618083
--- /dev/null
+++ b/static/assets/img/footer/service.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/assets/img/footer/software.svg b/static/assets/img/footer/software.svg
new file mode 100644
index 0000000..6e050b0
--- /dev/null
+++ b/static/assets/img/footer/software.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/assets/img/footer/sony.png b/static/assets/img/footer/sony.png
new file mode 100644
index 0000000..19829c5
Binary files /dev/null and b/static/assets/img/footer/sony.png differ
diff --git a/static/assets/img/footer/support.svg b/static/assets/img/footer/support.svg
new file mode 100644
index 0000000..4673f07
--- /dev/null
+++ b/static/assets/img/footer/support.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/assets/img/footer/verity.png b/static/assets/img/footer/verity.png
new file mode 100644
index 0000000..0ada453
Binary files /dev/null and b/static/assets/img/footer/verity.png differ
diff --git a/static/assets/img/footer/whatsapp.svg b/static/assets/img/footer/whatsapp.svg
new file mode 100644
index 0000000..54cd6d9
--- /dev/null
+++ b/static/assets/img/footer/whatsapp.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/static/assets/img/home/bg.jpg b/static/assets/img/home/bg.jpg
new file mode 100644
index 0000000..97a41c7
Binary files /dev/null and b/static/assets/img/home/bg.jpg differ
diff --git a/static/assets/img/learning/hero.jpg b/static/assets/img/learning/hero.jpg
new file mode 100644
index 0000000..9004c3c
Binary files /dev/null and b/static/assets/img/learning/hero.jpg differ
diff --git a/static/assets/img/learning/pic.jpg b/static/assets/img/learning/pic.jpg
new file mode 100644
index 0000000..bc2556c
Binary files /dev/null and b/static/assets/img/learning/pic.jpg differ
diff --git a/static/assets/img/lottery/lottery.jpg b/static/assets/img/lottery/lottery.jpg
new file mode 100644
index 0000000..673bd72
Binary files /dev/null and b/static/assets/img/lottery/lottery.jpg differ
diff --git a/static/assets/img/lottery/lottery2.png b/static/assets/img/lottery/lottery2.png
new file mode 100644
index 0000000..a15fc56
Binary files /dev/null and b/static/assets/img/lottery/lottery2.png differ
diff --git a/static/assets/img/panatech-alt.png b/static/assets/img/panatech-alt.png
new file mode 100644
index 0000000..616565e
Binary files /dev/null and b/static/assets/img/panatech-alt.png differ
diff --git a/static/assets/img/panatech-alt_backup.png b/static/assets/img/panatech-alt_backup.png
new file mode 100644
index 0000000..39e820c
Binary files /dev/null and b/static/assets/img/panatech-alt_backup.png differ
diff --git a/static/assets/img/panatech-small.png b/static/assets/img/panatech-small.png
new file mode 100644
index 0000000..7739130
Binary files /dev/null and b/static/assets/img/panatech-small.png differ
diff --git a/static/assets/img/panatech-small_backup.png b/static/assets/img/panatech-small_backup.png
new file mode 100644
index 0000000..e9f4a9d
Binary files /dev/null and b/static/assets/img/panatech-small_backup.png differ
diff --git a/static/assets/img/panatech.png b/static/assets/img/panatech.png
new file mode 100644
index 0000000..e3e0445
Binary files /dev/null and b/static/assets/img/panatech.png differ
diff --git a/static/assets/img/panatech_backup.png b/static/assets/img/panatech_backup.png
new file mode 100644
index 0000000..fc57dd0
Binary files /dev/null and b/static/assets/img/panatech_backup.png differ
diff --git a/static/assets/img/tipaxQR.jpg b/static/assets/img/tipaxQR.jpg
new file mode 100644
index 0000000..d99f072
Binary files /dev/null and b/static/assets/img/tipaxQR.jpg differ
diff --git a/static/assets/img/verity-alt.png b/static/assets/img/verity-alt.png
new file mode 100644
index 0000000..4a0038e
Binary files /dev/null and b/static/assets/img/verity-alt.png differ
diff --git a/static/assets/img/verity-alt_backup.png b/static/assets/img/verity-alt_backup.png
new file mode 100644
index 0000000..d41260e
Binary files /dev/null and b/static/assets/img/verity-alt_backup.png differ
diff --git a/static/assets/img/verity-small.png b/static/assets/img/verity-small.png
new file mode 100644
index 0000000..e99b465
Binary files /dev/null and b/static/assets/img/verity-small.png differ
diff --git a/static/assets/img/verity-small_backup.png b/static/assets/img/verity-small_backup.png
new file mode 100644
index 0000000..b592d5d
Binary files /dev/null and b/static/assets/img/verity-small_backup.png differ
diff --git a/static/assets/img/verity.png b/static/assets/img/verity.png
new file mode 100644
index 0000000..f0f4272
Binary files /dev/null and b/static/assets/img/verity.png differ
diff --git a/static/assets/img/verity_backup.png b/static/assets/img/verity_backup.png
new file mode 100644
index 0000000..066280c
Binary files /dev/null and b/static/assets/img/verity_backup.png differ
diff --git a/static/assets/img/warranty-terms/hero.jpg b/static/assets/img/warranty-terms/hero.jpg
new file mode 100644
index 0000000..6ca5964
Binary files /dev/null and b/static/assets/img/warranty-terms/hero.jpg differ
diff --git a/static/assets/img/warranty-terms/pic.jpg b/static/assets/img/warranty-terms/pic.jpg
new file mode 100644
index 0000000..80f68ba
Binary files /dev/null and b/static/assets/img/warranty-terms/pic.jpg differ
diff --git a/static/assets/js/jQuery.print.min.js b/static/assets/js/jQuery.print.min.js
new file mode 100644
index 0000000..811cb88
--- /dev/null
+++ b/static/assets/js/jQuery.print.min.js
@@ -0,0 +1,6 @@
+/* @license
+ * jQuery.print, version 1.6.0
+ * (c) Sathvik Ponangi, Doers' Guild
+ * Licence: CC-By (http://creativecommons.org/licenses/by/3.0/)
+ *--------------------------------------------------------------------------*/
+!function(e){"use strict";function t(t,n,r){for(var o=e(t),i=o.clone(n,r),a=o.find("textarea").add(o.filter("textarea")),l=i.find("textarea").add(i.filter("textarea")),c=o.find("select").add(o.filter("select")),d=i.find("select").add(i.filter("select")),f=0,s=a.length;f ").html(n)}return r}function r(t,n,r){var o=e.Deferred();try{var i=(t=t.contentWindow||t.contentDocument||t).document||t.contentDocument||t;r.doctype&&i.write(r.doctype),i.write(n),i.close();var a=!1,l=function(){if(!a){t.focus();try{t.document.execCommand("print",!1,null)||t.print(),e("body").focus()}catch(e){t.print()}t.close(),a=!0,o.resolve()}};e(t).on("load",l),setTimeout(l,r.timeout)}catch(e){o.reject(e)}return o}function o(e,t){return r(window.open(),e,t).always(function(){try{t.deferred.resolve()}catch(e){console.warn("Error notifying deferred",e)}})}function i(e){return!!("object"==typeof Node?e instanceof Node:e&&"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName)}e.print=e.fn.print=function(){var a,l,c=this;c instanceof e&&(c=c.get(0)),i(c)?(l=e(c),arguments.length>0&&(a=arguments[0])):arguments.length>0?i((l=e(arguments[0]))[0])?arguments.length>1&&(a=arguments[1]):(a=arguments[0],l=e("html")):l=e("html");var d={globalStyles:!0,mediaPrint:!1,stylesheet:null,noPrintSelector:".no-print",iframe:!0,append:null,prepend:null,manuallyCopyFormValues:!0,deferred:e.Deferred(),timeout:750,title:null,doctype:""};a=e.extend({},d,a||{});var f=e("");a.globalStyles?f=e("style, link, meta, base, title"):a.mediaPrint&&(f=e("link[media=print]")),a.stylesheet&&(f=e.merge(f,e(' ')));var s=t(l);if((s=e(" ").append(s)).find(a.noPrintSelector).remove(),s.append(t(f)),a.title){var p=e("title",s);0===p.length&&(p=e(" "),s.append(p)),p.text(a.title)}s.append(n(a.append)),s.prepend(n(a.prepend)),a.manuallyCopyFormValues&&(s.find("input").each(function(){var t=e(this);t.is("[type='radio']")||t.is("[type='checkbox']")?t.prop("checked")&&t.attr("checked","checked"):t.attr("value",t.val())}),s.find("select").each(function(){e(this).find(":selected").attr("selected","selected")}),s.find("textarea").each(function(){var t=e(this);t.text(t.val())}));var u,h,m,y,v=s.html();try{a.deferred.notify("generated_markup",v,s)}catch(e){console.warn("Error notifying deferred",e)}if(s.remove(),a.iframe)try{u=v,m=e((h=a).iframe+""),0===(y=m.length)&&(m=e('').prependTo("body").css({position:"absolute",top:-999,left:-999})),r(m.get(0),u,h).done(function(){setTimeout(function(){0===y&&m.remove()},1e3)}).fail(function(e){console.error("Failed to print from iframe",e),o(u,h)}).always(function(){try{h.deferred.resolve()}catch(e){console.warn("Error notifying deferred",e)}})}catch(e){console.error("Failed to print from iframe",e.stack,e.message),o(v,a)}else o(v,a);return this}}(jQuery);
\ No newline at end of file
diff --git a/static/bigIcon.png b/static/bigIcon.png
new file mode 100644
index 0000000..3b04ffc
Binary files /dev/null and b/static/bigIcon.png differ
diff --git a/store/admin.js b/store/admin.js
new file mode 100644
index 0000000..805979e
--- /dev/null
+++ b/store/admin.js
@@ -0,0 +1,31 @@
+export const state = () => ({
+ sidebarShow: 'responsive',
+ sidebarMinimize: false,
+ adminWS: false,
+ unreadCuMsgs: 0,
+ unreadTickets: 0,
+ newCustomers: 0,
+ newRepresentations: 0,
+ newPieceRequests: 0,
+ newOldPieceRequests: 0,
+ newBufferRequests: 0,
+ newGuaranteeReports: 0,
+ verityProducts: [],
+ panatechProducts: [],
+ iranProvinces: [],
+ iranCities: []
+})
+
+export const mutations = {
+ toggleSidebarDesktop(state) {
+ const sidebarOpened = [true, 'responsive'].includes(state.sidebarShow)
+ state.sidebarShow = sidebarOpened ? false : 'responsive'
+ },
+ toggleSidebarMobile(state) {
+ const sidebarClosed = [false, 'responsive'].includes(state.sidebarShow)
+ state.sidebarShow = sidebarClosed ? true : 'responsive'
+ },
+ set(state, [variable, value]) {
+ state[variable] = value
+ }
+}
diff --git a/store/front.js b/store/front.js
new file mode 100644
index 0000000..9e8e8cb
--- /dev/null
+++ b/store/front.js
@@ -0,0 +1,108 @@
+export const state = () => ({
+ mobileMenu: false,
+ // websockets statuses
+ userWS: false,
+ agentWS: false,
+ // notifications count
+ unreadTickets: 0,
+ agentInbox: 0,
+ draftsCount: 0,
+ // announcements
+ newUserAnnosCount: 0,
+ newAgentAnnosCount: 0,
+ userAnnouncements: [],
+ agentAnnouncements: [],
+ // arpa products
+ verityProducts: [],
+ panatechProducts: [],
+ // agents
+ agentAssetCategories: [
+ {
+ title: 'مدارک عضویت در اتحادیه صنفی:',
+ description: 'عضویت در اتحادیه صنفی مرتبط یا نمایندگی مجاز خدمات یا ارائه جواز کسب.',
+ fieldName: 'tradeUnion'
+ },
+ {
+ title: 'تخصص:',
+ description: 'شایستگی ، حسن شهرت و تجربه کافی در ارائه خدمات پس از فروش کاالی مرتبط.',
+ fieldName: 'expertise'
+ },
+ {
+ title: 'مالکیت:',
+ description: 'سرقفلی یا اجاره نامه معتبر مغازه یا دفترکار در شهر.',
+ fieldName: 'ownership'
+ },
+ {
+ title: 'تعمیرگاه مناسب:',
+ description: 'دارابودن امکانات و تجهیزات سرویس، تعمیر و نگهداری دستگاه های مرتبط.',
+ fieldName: 'repairShop'
+ },
+ {
+ title: 'نیروی کار:',
+ description: 'داشتن کارمند اداری مسلط به امور اداری و کامپیوتر.',
+ fieldName: 'itEmployee'
+ },
+ {
+ title: 'کارشناس تعمیر:',
+ description: 'داشتن کارشناس فنی مجرب تعمیر و سرویس دستگاه های مرتبط.',
+ fieldName: 'itExpert'
+ },
+ {
+ title: 'تضامین مالی:',
+ description: 'رائه تضامین مالی مورد نظر شرکت آسان سرویس. ',
+ fieldName: 'financialGuarantees'
+ }
+ ],
+ surveyOptions: [
+ {
+ title: 'میزان رضایت شما از محصول خریداری شده از شرکت آسان سرویس چقدر است؟',
+ fieldName: 'purchasedProduct'
+ },
+ {
+ title: 'میزان رضایت شما از سهولت انجام فرآیند ثبت گارانتی و پیگیری محصوالت در سایت آسان سرویس به چه اندازه است؟',
+ fieldName: 'guaranteeWorkFlow'
+ },
+ {
+ title: 'از پاسخگویی پرسنل واحد گارانتی آسان سرویس تا چه میزان رضایت دارید؟',
+ fieldName: 'employeeResponsibility'
+ },
+ {
+ title: 'از کیفیت خدماتی که دریافت کردید تا چه میزان رضایت دارید؟',
+ fieldName: 'serviceQuality'
+ },
+ {
+ title: 'میزان رضایت شما از مدت زمان انجام کارتان تا چه میزان است؟',
+ fieldName: 'serviceTime'
+ },
+ {
+ title: 'چنانچه کالای شما جز کالاهای تعمیری میباشد، میزان رضایت شما از کیفیت تعمیرات چقدر است؟',
+ fieldName: 'repairQuality'
+ },
+ {
+ title: 'میزان رضایت شما از اجرت تعمیرات و یا مابه الفتاوت پرداختی کالای تعویضی چقدر است؟',
+ fieldName: 'coast'
+ }
+ ],
+ surveyOptionsValues: new Map().set(1, 'خیلی کم').set(2, 'کم').set(3, 'متوسط').set(4, 'زیاد').set(5, 'خیلی زیاد')
+})
+
+export const getters = {
+ agentAssetCategories(state) {
+ return state.agentAssetCategories
+ },
+ surveyOptions(state) {
+ return state.surveyOptions
+ },
+ surveyOptionsValues(state) {
+ return state.surveyOptionsValues
+ }
+}
+
+export const mutations = {
+ toggleMobileMenu(state) {
+ state.mobileMenu = !state.mobileMenu
+ },
+ set(state, [param, payload]) {
+ state[param] = payload
+ }
+}
diff --git a/utils/adminPanelIcons.js b/utils/adminPanelIcons.js
new file mode 100644
index 0000000..75e4f04
--- /dev/null
+++ b/utils/adminPanelIcons.js
@@ -0,0 +1,163 @@
+import {
+ cibFacebook,
+ cibTwitter,
+ cibLinkedin,
+ cibFlickr,
+ cibTumblr,
+ cibXing,
+ cibGithub,
+ cibStackoverflow,
+ cibYoutube,
+ cibDribbble,
+ cibInstagram,
+ cibPinterest,
+ cibVk,
+ cibYahoo,
+ cibBehance,
+ cibReddit,
+ cibVimeo,
+ cibCcMastercard,
+ cibCcVisa,
+ cibStripe,
+ cibPaypal,
+ cibGooglePay,
+ cibCcAmex,
+ cifUs,
+ cifBr,
+ cifIn,
+ cifFr,
+ cifEs,
+ cifPl,
+ cilArrowRight,
+ cilBan,
+ cilBasket,
+ cilBell,
+ cilCalculator,
+ cilCalendar,
+ cilCloudDownload,
+ cilChartPie,
+ cilCheck,
+ cilChevronBottom,
+ cilChevronTop,
+ cilCheckCircle,
+ cilCommentSquare,
+ cilCursor,
+ cilDrop,
+ cilDollar,
+ cilEnvelopeClosed,
+ cilEnvelopeOpen,
+ cilEuro,
+ cilGlobeAlt,
+ cilGrid,
+ cilFile,
+ cilJustifyCenter,
+ cilLaptop,
+ cilLayers,
+ cilLightbulb,
+ cilList,
+ cilLocationPin,
+ cilLockLocked,
+ cilMagnifyingGlass,
+ cilMoon,
+ cilOptions,
+ cilPencil,
+ cilPeople,
+ cilPuzzle,
+ cilSettings,
+ cilShieldAlt,
+ cilSpeech,
+ cilSpeedometer,
+ cilStar,
+ cilTask,
+ cilUser,
+ cilUserFemale,
+ cilUserFollow,
+ cilXCircle
+} from '@coreui/icons'
+
+import { logo } from './adminPanelLogo'
+
+export const iconsSet = Object.assign(
+ {},
+ { logo },
+ {
+ cilArrowRight,
+ cilBan,
+ cilBasket,
+ cilBell,
+ cilCalculator,
+ cilCalendar,
+ cilCloudDownload,
+ cilChartPie,
+ cilCheck,
+ cilChevronBottom,
+ cilChevronTop,
+ cilCheckCircle,
+ cilCommentSquare,
+ cilCursor,
+ cilDrop,
+ cilDollar,
+ cilEnvelopeClosed,
+ cilEnvelopeOpen,
+ cilEuro,
+ cilGlobeAlt,
+ cilGrid,
+ cilFile,
+ cilJustifyCenter,
+ cilLaptop,
+ cilLayers,
+ cilLightbulb,
+ cilList,
+ cilLocationPin,
+ cilLockLocked,
+ cilMagnifyingGlass,
+ cilMoon,
+ cilOptions,
+ cilPencil,
+ cilPeople,
+ cilPuzzle,
+ cilSettings,
+ cilShieldAlt,
+ cilSpeech,
+ cilSpeedometer,
+ cilStar,
+ cilTask,
+ cilUser,
+ cilUserFemale,
+ cilUserFollow,
+ cilXCircle
+ },
+ {
+ cifUs,
+ cifBr,
+ cifIn,
+ cifFr,
+ cifEs,
+ cifPl
+ },
+ {
+ cibFacebook,
+ cibTwitter,
+ cibLinkedin,
+ cibFlickr,
+ cibTumblr,
+ cibXing,
+ cibGithub,
+ cibStackoverflow,
+ cibYoutube,
+ cibDribbble,
+ cibInstagram,
+ cibPinterest,
+ cibVk,
+ cibYahoo,
+ cibBehance,
+ cibReddit,
+ cibVimeo,
+ cibCcMastercard,
+ cibCcVisa,
+ cibStripe,
+ cibPaypal,
+ cibGooglePay,
+ cibCcAmex
+ }
+)
diff --git a/utils/adminPanelLogo.js b/utils/adminPanelLogo.js
new file mode 100644
index 0000000..3a0d4da
--- /dev/null
+++ b/utils/adminPanelLogo.js
@@ -0,0 +1,32 @@
+// Example of SVG converted to js array, so it can be used with CIcon.
+// the first argument is two last values of svg viewBox,
+// the second argument is the SVG content stripped of SVG tags
+export const logo = [
+ '556 134',
+ `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`
+]