From 552a6821c16c740df3378e8b334dcd843c2a8c88 Mon Sep 17 00:00:00 2001 From: lipenghui Date: Wed, 17 Jan 2024 14:08:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:1.=20=E5=B0=81=E8=A3=85axios=EF=BC=9B2.=20?= =?UTF-8?q?=E5=B0=81=E8=A3=85=E8=8F=9C=E5=8D=95=E6=A0=8F=EF=BC=9B3.=20?= =?UTF-8?q?=E5=B0=81=E8=A3=85=E5=AD=90=E8=8F=9C=E5=8D=95=E6=A0=8F=EF=BC=9B?= =?UTF-8?q?4.=20=E5=B0=81=E8=A3=85=E6=95=B4=E4=BD=93=E5=B8=83=E5=B1=80?= =?UTF-8?q?=EF=BC=9B5.=20=E9=85=8D=E7=BD=AEvscode=E8=A7=84=E5=88=99?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 8 + .env.development | 10 + .env.production | 10 + .vscode/settings.json | 4 +- eslint.config.js | 3 + index.html | 2 +- package.json | 19 +- pnpm-lock.yaml | 1314 +++++++++++++++++++++- src/App.vue | 32 +- src/api/base/login.ts | 23 + src/api/base/user.ts | 0 src/assets/images/bg_menu.png | Bin 0 -> 186956 bytes src/assets/images/logo.png | Bin 0 -> 19763 bytes src/assets/svg/404.svg | 1 + src/assets/svg/jue_se.svg | 11 + src/assets/svg/qu_dao.svg | 12 + src/assets/svg/ren_wu.svg | 15 + src/assets/svg/vue.svg | 1 + src/assets/svg/wei_xin.svg | 18 + src/assets/svg/wen_sheng_tu.svg | 13 + src/assets/svg/wo_de.svg | 14 + src/assets/svg/xiao_cheng_xu.svg | 22 + src/components/AppContainerBox/index.ts | 3 + src/components/AppContainerBox/index.vue | 22 + src/components/AppContentBox/index.ts | 3 + src/components/AppContentBox/index.vue | 17 + src/components/AppSubMenuBox/index.ts | 3 + src/components/AppSubMenuBox/index.vue | 14 + src/components/AppSubMenuList/index.d.ts | 5 + src/components/AppSubMenuList/index.ts | 3 + src/components/AppSubMenuList/index.vue | 51 + src/components/AppSubMenuTitle/index.ts | 3 + src/components/AppSubMenuTitle/index.vue | 36 + src/components/HelloWorld.vue | 41 - src/components/SvgIcon/index.ts | 3 + src/components/SvgIcon/index.vue | 51 + src/design/index.scss | 72 ++ src/design/mixins/config.scss | 3 + src/design/mixins/mixins.scss | 6 + src/design/public.scss | 49 + src/enums/cacheEnum.ts | 12 + src/enums/commonEnum.ts | 14 + src/enums/httpEnum.ts | 55 + src/enums/menuEnum.ts | 22 + src/enums/pageEnum.ts | 11 + src/hooks/useMessage.tsx | 111 ++ src/layout/AppMain/index.vue | 14 + src/layout/AppMenu/index.d.ts | 8 + src/layout/AppMenu/index.vue | 131 +++ src/layout/index.vue | 23 + src/main.ts | 23 +- src/router/guard.ts | 35 + src/router/index.ts | 47 +- src/store/index.ts | 11 + src/store/moules/userStore/index.d.ts | 15 + src/store/moules/userStore/index.ts | 73 ++ src/style.css | 79 -- src/utils/axios/Axios.ts | 337 ++++++ src/utils/axios/axiosCancel.ts | 59 + src/utils/axios/axiosRetry.ts | 33 + src/utils/axios/axiosTransform.ts | 57 + src/utils/axios/checkStatus.ts | 69 ++ src/utils/axios/helper.ts | 47 + src/utils/axios/index.ts | 313 ++++++ src/utils/crypto.ts | 48 + src/utils/env.ts | 3 + src/utils/file/base64Conver.ts | 42 + src/utils/file/download.ts | 86 ++ src/utils/index.ts | 81 ++ src/utils/is.ts | 66 ++ src/views/conversation/index.vue | 36 + src/views/error/404.vue | 11 + src/views/login.vue | 13 - src/views/login/index.vue | 57 + src/views/textToPicture/index.vue | 16 + src/vite-env.d.ts | 1 - tsconfig.json | 6 +- types/axios.d.ts | 54 + types/global.d.ts | 98 ++ types/index.d.ts | 1 + types/shims-vue.d.ts | 6 + types/vite-env.d.ts | 12 + types/vue-router.d.ts | 19 + vite.config.ts | 20 +- 84 files changed, 4002 insertions(+), 190 deletions(-) create mode 100644 .env create mode 100644 .env.development create mode 100644 .env.production create mode 100644 src/api/base/login.ts create mode 100644 src/api/base/user.ts create mode 100644 src/assets/images/bg_menu.png create mode 100644 src/assets/images/logo.png create mode 100644 src/assets/svg/404.svg create mode 100644 src/assets/svg/jue_se.svg create mode 100644 src/assets/svg/qu_dao.svg create mode 100644 src/assets/svg/ren_wu.svg create mode 100644 src/assets/svg/vue.svg create mode 100644 src/assets/svg/wei_xin.svg create mode 100644 src/assets/svg/wen_sheng_tu.svg create mode 100644 src/assets/svg/wo_de.svg create mode 100644 src/assets/svg/xiao_cheng_xu.svg create mode 100644 src/components/AppContainerBox/index.ts create mode 100644 src/components/AppContainerBox/index.vue create mode 100644 src/components/AppContentBox/index.ts create mode 100644 src/components/AppContentBox/index.vue create mode 100644 src/components/AppSubMenuBox/index.ts create mode 100644 src/components/AppSubMenuBox/index.vue create mode 100644 src/components/AppSubMenuList/index.d.ts create mode 100644 src/components/AppSubMenuList/index.ts create mode 100644 src/components/AppSubMenuList/index.vue create mode 100644 src/components/AppSubMenuTitle/index.ts create mode 100644 src/components/AppSubMenuTitle/index.vue delete mode 100644 src/components/HelloWorld.vue create mode 100644 src/components/SvgIcon/index.ts create mode 100644 src/components/SvgIcon/index.vue create mode 100644 src/design/index.scss create mode 100644 src/design/mixins/config.scss create mode 100644 src/design/mixins/mixins.scss create mode 100644 src/design/public.scss create mode 100644 src/enums/cacheEnum.ts create mode 100644 src/enums/commonEnum.ts create mode 100644 src/enums/httpEnum.ts create mode 100644 src/enums/menuEnum.ts create mode 100644 src/enums/pageEnum.ts create mode 100644 src/hooks/useMessage.tsx create mode 100644 src/layout/AppMain/index.vue create mode 100644 src/layout/AppMenu/index.d.ts create mode 100644 src/layout/AppMenu/index.vue create mode 100644 src/layout/index.vue create mode 100644 src/router/guard.ts create mode 100644 src/store/index.ts create mode 100644 src/store/moules/userStore/index.d.ts create mode 100644 src/store/moules/userStore/index.ts delete mode 100644 src/style.css create mode 100644 src/utils/axios/Axios.ts create mode 100644 src/utils/axios/axiosCancel.ts create mode 100644 src/utils/axios/axiosRetry.ts create mode 100644 src/utils/axios/axiosTransform.ts create mode 100644 src/utils/axios/checkStatus.ts create mode 100644 src/utils/axios/helper.ts create mode 100644 src/utils/axios/index.ts create mode 100644 src/utils/crypto.ts create mode 100644 src/utils/env.ts create mode 100644 src/utils/file/base64Conver.ts create mode 100644 src/utils/file/download.ts create mode 100644 src/utils/index.ts create mode 100644 src/utils/is.ts create mode 100644 src/views/conversation/index.vue create mode 100644 src/views/error/404.vue delete mode 100644 src/views/login.vue create mode 100644 src/views/login/index.vue create mode 100644 src/views/textToPicture/index.vue delete mode 100644 src/vite-env.d.ts create mode 100644 types/axios.d.ts create mode 100644 types/global.d.ts create mode 100644 types/index.d.ts create mode 100644 types/shims-vue.d.ts create mode 100644 types/vite-env.d.ts create mode 100644 types/vue-router.d.ts diff --git a/.env b/.env new file mode 100644 index 0000000..d13f88a --- /dev/null +++ b/.env @@ -0,0 +1,8 @@ +# 网站标题 +VITE_GLOB_APP_TITLE = 青鸟语言大模型-同聪 + +# 简称,用于配置文件名字 不要出现空格、数字开头等特殊字符 +VITE_GLOB_APP_SHORT_NAME = 同聪 + +# token key +VITE_GLOB_APP_TOKEN_KEY = "hulk-Auth" \ No newline at end of file diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..199e83f --- /dev/null +++ b/.env.development @@ -0,0 +1,10 @@ +# 本地开发环境 + +# 公共地址 +VITE_GLOB_BASE_URL = "http://localhost:48080" + +# 本地MQTT地址 +VITE_GLOB_MQTT_URL = "http://localhost:48080" + +# 接口授权标识 +VITE_GLOB_APP_AUTHORIZATION = "ZmFsY29uOmZhbGNvbl9zZWNyZXQ=" \ No newline at end of file diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..e85c639 --- /dev/null +++ b/.env.production @@ -0,0 +1,10 @@ +# 正式环境 + +# 公共地址 +VITE_GLOB_BASE_URL = "http://223.99.228.207:19872" + +# 本地MQTT地址 +VITE_GLOB_MQTT_URL = "http://localhost:48080" + +# 接口授权标识 +VITE_GLOB_APP_AUTHORIZATION = "ZmFsY29uOmZhbGNvbl9zZWNyZXQ=" \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index b18bc31..884e5f1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -14,7 +14,7 @@ "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, "[scss]": { - "editor.defaultFormatter": "dbaeumer.vscode-eslint" + "editor.defaultFormatter": "sibiraj-s.vscode-scss-formatter" }, "[typescript]": { "editor.defaultFormatter": "dbaeumer.vscode-eslint" @@ -22,7 +22,7 @@ // 关闭自动添加文件头部注释 "fileheader.configObj": { - "autoAdd": false, // 默认开启 + "autoAdd": false // 默认开启 }, // 自动修复 diff --git a/eslint.config.js b/eslint.config.js index 4d1f23a..50cdef1 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -5,5 +5,8 @@ export default antfu( { // unocss: true, formatters: true, + rules: { + 'vue/html-self-closing': 'off', + }, }, ) diff --git a/index.html b/index.html index dde16aa..9a6ce0d 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - Vite + Vue + TS + %VITE_GLOB_APP_TITLE%
diff --git a/package.json b/package.json index 6a97091..d15b365 100644 --- a/package.json +++ b/package.json @@ -3,28 +3,45 @@ "type": "module", "version": "0.0.0", "private": true, + "engines": { + "node": ">=20.0.0", + "pnpm": ">=8.14.0" + }, "scripts": { - "dev": "vite", + "dev": "vite --host --mode development", + "dev:prod": "vite --host --mode production", "build": "vue-tsc && vite build", "preview": "vite preview", "lint": "eslint .", "lint:fix": "eslint . --fix" }, "dependencies": { + "@ant-design/icons-vue": "^7.0.1", "@vueuse/core": "^10.7.2", "ant-design-vue": "^4.1.0", + "axios": "^1.6.5", + "crypto-js": "^4.2.0", + "lodash-es": "^4.17.21", + "pinia": "^2.1.7", + "pinia-plugin-persistedstate": "^3.2.1", + "qs": "^6.11.2", "vue": "^3.3.11", "vue-router": "^4.2.5" }, "devDependencies": { "@antfu/eslint-config": "^2.6.2", + "@types/crypto-js": "^4.2.1", + "@types/lodash-es": "^4.17.12", "@types/node": "^20.11.0", + "@types/qs": "^6.9.11", "@vitejs/plugin-vue": "^4.5.2", "eslint": "^8.56.0", "eslint-plugin-format": "^0.1.0", + "sass": "^1.69.7", "typescript": "^5.2.2", "unocss": "^0.58.3", "vite": "^5.0.8", + "vite-plugin-svg-icons": "^2.0.1", "vue-tsc": "^1.8.25" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 35eb17f..66cd466 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,12 +5,33 @@ settings: excludeLinksFromLockfile: false dependencies: + '@ant-design/icons-vue': + specifier: ^7.0.1 + version: 7.0.1(vue@3.4.13) '@vueuse/core': specifier: ^10.7.2 version: 10.7.2(vue@3.4.13) ant-design-vue: - specifier: ~4.1.0 + specifier: ^4.1.0 version: 4.1.0(vue@3.4.13) + axios: + specifier: ^1.6.5 + version: 1.6.5 + crypto-js: + specifier: ^4.2.0 + version: 4.2.0 + lodash-es: + specifier: ^4.17.21 + version: 4.17.21 + pinia: + specifier: ^2.1.7 + version: 2.1.7(typescript@5.3.3)(vue@3.4.13) + pinia-plugin-persistedstate: + specifier: ^3.2.1 + version: 3.2.1(pinia@2.1.7) + qs: + specifier: ^6.11.2 + version: 6.11.2 vue: specifier: ^3.3.11 version: 3.4.13(typescript@5.3.3) @@ -22,9 +43,18 @@ devDependencies: '@antfu/eslint-config': specifier: ^2.6.2 version: 2.6.2(@vue/compiler-sfc@3.4.13)(eslint-plugin-format@0.1.0)(eslint@8.56.0)(typescript@5.3.3) + '@types/crypto-js': + specifier: ^4.2.1 + version: 4.2.1 + '@types/lodash-es': + specifier: ^4.17.12 + version: 4.17.12 '@types/node': specifier: ^20.11.0 version: 20.11.0 + '@types/qs': + specifier: ^6.9.11 + version: 6.9.11 '@vitejs/plugin-vue': specifier: ^4.5.2 version: 4.6.2(vite@5.0.11)(vue@3.4.13) @@ -34,6 +64,9 @@ devDependencies: eslint-plugin-format: specifier: ^0.1.0 version: 0.1.0(eslint@8.56.0) + sass: + specifier: ^1.69.7 + version: 1.69.7 typescript: specifier: ^5.2.2 version: 5.3.3 @@ -42,7 +75,10 @@ devDependencies: version: 0.58.3(postcss@8.4.33)(vite@5.0.11) vite: specifier: ^5.0.8 - version: 5.0.11(@types/node@20.11.0) + version: 5.0.11(@types/node@20.11.0)(sass@1.69.7) + vite-plugin-svg-icons: + specifier: ^2.0.1 + version: 2.0.1(vite@5.0.11) vue-tsc: specifier: ^1.8.25 version: 1.8.27(typescript@5.3.3) @@ -1074,6 +1110,15 @@ packages: - typescript dev: true + /@trysound/sax@0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: true + + /@types/crypto-js@4.2.1: + resolution: {integrity: sha512-FSPGd9+OcSok3RsM0UZ/9fcvMOXJ1ENE/ZbLfOPlBWj7BgXtEAM8VYfTtT760GiLbQIMoVozwVuisjvsVwqYWw==} + dev: true + /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true @@ -1082,6 +1127,16 @@ packages: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true + /@types/lodash-es@4.17.12: + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + dependencies: + '@types/lodash': 4.14.202 + dev: true + + /@types/lodash@4.14.202: + resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + dev: true + /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} dependencies: @@ -1098,10 +1153,20 @@ packages: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} dev: true + /@types/qs@6.9.11: + resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} + dev: true + /@types/semver@7.5.6: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: true + /@types/svgo@2.6.4: + resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==} + dependencies: + '@types/node': 20.11.0 + dev: true + /@types/unist@2.0.10: resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} dev: true @@ -1257,7 +1322,7 @@ packages: '@unocss/core': 0.58.3 '@unocss/reset': 0.58.3 '@unocss/vite': 0.58.3(vite@5.0.11) - vite: 5.0.11(@types/node@20.11.0) + vite: 5.0.11(@types/node@20.11.0)(sass@1.69.7) transitivePeerDependencies: - rollup dev: true @@ -1455,7 +1520,7 @@ packages: chokidar: 3.5.3 fast-glob: 3.3.2 magic-string: 0.30.5 - vite: 5.0.11(@types/node@20.11.0) + vite: 5.0.11(@types/node@20.11.0)(sass@1.69.7) transitivePeerDependencies: - rollup dev: true @@ -1467,7 +1532,7 @@ packages: vite: ^4.0.0 || ^5.0.0 vue: ^3.2.25 dependencies: - vite: 5.0.11(@types/node@20.11.0) + vite: 5.0.11(@types/node@20.11.0)(sass@1.69.7) vue: 3.4.13(typescript@5.3.3) dev: true @@ -1626,11 +1691,21 @@ packages: uri-js: 4.4.1 dev: true + /ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + dev: true + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} dev: true + /ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + dev: true + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -1693,6 +1768,21 @@ packages: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true + /arr-diff@4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-flatten@1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-union@3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + dev: true + /array-tree-filter@2.1.0: resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==} dev: false @@ -1702,19 +1792,70 @@ packages: engines: {node: '>=8'} dev: true + /array-unique@0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + dev: true + + /assign-symbols@1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + dev: true + /async-validator@4.2.5: resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} dev: false + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /atob@2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + dev: true + + /axios@1.6.5: + resolution: {integrity: sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==} + dependencies: + follow-redirects: 1.15.5 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true + /base@0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.1 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + dev: true + + /big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: true + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true + /bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true + /boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: true @@ -1732,6 +1873,24 @@ packages: balanced-match: 1.0.2 dev: true + /braces@2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} + dependencies: + 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.4 + snapdragon: 0.8.2 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -1766,6 +1925,29 @@ packages: engines: {node: '>=8'} dev: true + /cache-base@1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.1 + get-value: 2.0.6 + has-value: 1.0.0 + isobject: 3.0.1 + set-value: 2.0.1 + to-object-path: 0.3.0 + union-value: 1.0.1 + unset-value: 1.0.0 + dev: true + + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.2.0 + dev: false + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1775,6 +1957,17 @@ packages: resolution: {integrity: sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==} dev: true + /chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + dev: true + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -1824,6 +2017,16 @@ packages: engines: {node: '>=8'} dev: true + /class-utils@0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + dev: true + /clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -1840,6 +2043,19 @@ packages: wrap-ansi: 7.0.0 dev: true + /clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + dev: true + + /collection-visit@1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + dev: true + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -1865,11 +2081,27 @@ packages: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: true + /comment-parser@1.4.1: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} dev: true + /component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + dev: true + /compute-scroll-into-view@1.0.20: resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==} dev: false @@ -1891,6 +2123,11 @@ packages: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true + /copy-descriptor@0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + dev: true + /core-js-compat@3.35.0: resolution: {integrity: sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==} dependencies: @@ -1902,6 +2139,14 @@ packages: requiresBuild: true dev: false + /cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + dev: true + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -1911,6 +2156,28 @@ packages: which: 2.0.2 dev: true + /crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + dev: false + + /css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + dev: true + + /css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: true + /css-tree@2.3.1: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} @@ -1919,12 +2186,24 @@ packages: source-map-js: 1.0.2 dev: true + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: true + /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true dev: true + /csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + dev: true + /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -1936,6 +2215,17 @@ packages: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} dev: true + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: true + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -1959,14 +2249,55 @@ packages: ms: 2.1.2 dev: true + /decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: true + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: false + + /define-property@0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 0.1.7 + dev: true + + /define-property@1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.3 + dev: true + + /define-property@2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.3 + isobject: 3.0.1 + dev: true + /defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} dev: true + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + /destr@2.0.2: resolution: {integrity: sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==} dev: true @@ -1993,6 +2324,57 @@ packages: resolution: {integrity: sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==} dev: false + /dom-serializer@0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + dev: true + + /dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + dev: true + + /domelementtype@1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + dev: true + + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: true + + /domhandler@2.4.2: + resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} + dependencies: + domelementtype: 1.3.1 + dev: true + + /domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + + /domutils@1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + dev: true + + /domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + dev: true + /duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true @@ -2005,6 +2387,19 @@ packages: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true + /emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: true + + /entities@1.1.2: + resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} + dev: true + + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true + /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -2527,6 +2922,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: true + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -2557,6 +2957,52 @@ packages: strip-final-newline: 3.0.0 dev: true + /expand-brackets@2.1.4: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} + dependencies: + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + posix-character-classes: 0.1.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: true + + /extend-shallow@3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + dev: true + + /extglob@2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + dependencies: + 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.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -2597,6 +3043,16 @@ packages: flat-cache: 3.2.0 dev: true + /fill-range@4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + dev: true + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -2633,6 +3089,46 @@ packages: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true + /follow-redirects@1.15.5: + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /for-in@1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + dev: true + + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /fragment-cache@0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} + dependencies: + map-cache: 0.2.2 + dev: true + + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -2647,7 +3143,6 @@ packages: /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -2659,6 +3154,15 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: false + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -2675,6 +3179,11 @@ packages: resolve-pkg-maps: 1.0.0 dev: true + /get-value@2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + dev: true + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2724,6 +3233,16 @@ packages: slash: 3.0.0 dev: true + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + dev: false + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true @@ -2735,6 +3254,18 @@ packages: duplexer: 0.1.2 dev: true + /has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + + /has-flag@1.0.0: + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} + engines: {node: '>=0.10.0'} + dev: true + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -2745,22 +3276,79 @@ packages: engines: {node: '>=8'} dev: true - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.2 + dev: false + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: false + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} + dev: false + + /has-value@0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} dependencies: - function-bind: 1.1.2 + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 dev: true - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true + /has-value@1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + dev: true + + /has-values@0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + dev: true + + /has-values@1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + dev: true + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true dev: true /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true + /htmlparser2@3.10.1: + resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} + dependencies: + domelementtype: 1.3.1 + domhandler: 2.4.2 + domutils: 1.7.0 + entities: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -2776,6 +3364,16 @@ packages: engines: {node: '>= 4'} dev: true + /image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dev: true + + /immutable@4.3.4: + resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} + dev: true + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -2805,6 +3403,13 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true + /is-accessor-descriptor@1.0.1: + resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==} + engines: {node: '>= 0.10'} + dependencies: + hasown: 2.0.0 + dev: true + /is-alphabetical@1.0.4: resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} dev: true @@ -2827,6 +3432,10 @@ packages: binary-extensions: 2.2.0 dev: true + /is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + dev: true + /is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} @@ -2840,10 +3449,45 @@ packages: hasown: 2.0.0 dev: true + /is-data-descriptor@1.0.1: + resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} + engines: {node: '>= 0.4'} + dependencies: + hasown: 2.0.0 + dev: true + /is-decimal@1.0.4: resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} dev: true + /is-descriptor@0.1.7: + resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==} + engines: {node: '>= 0.4'} + dependencies: + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 + dev: true + + /is-descriptor@1.0.3: + resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==} + engines: {node: '>= 0.4'} + dependencies: + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 + dev: true + + /is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: true + + /is-extendable@1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-object: 2.0.4 + dev: true + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -2865,6 +3509,13 @@ packages: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} dev: true + /is-number@3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -2875,6 +3526,18 @@ packages: engines: {node: '>=8'} dev: true + /is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + dev: true + + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + /is-plain-object@3.0.1: resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==} engines: {node: '>=0.10.0'} @@ -2890,15 +3553,40 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true + /isobject@2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} + dependencies: + isarray: 1.0.0 + dev: true + + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: true + /jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true dev: true + /js-base64@2.6.4: + resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} + dev: true + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -2947,6 +3635,13 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -2967,12 +3662,44 @@ packages: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: true + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 dev: true + /kind-of@3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of@4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of@5.1.0: + resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} + engines: {node: '>=0.10.0'} + dev: true + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -2994,6 +3721,15 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true + /loader-utils@1.4.2: + resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} + engines: {node: '>=4.0.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 1.0.2 + dev: true + /local-pkg@0.4.3: resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} engines: {node: '>=14'} @@ -3058,6 +3794,18 @@ packages: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + /map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-visit@1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} + dependencies: + object-visit: 1.0.1 + dev: true + /mdast-util-from-markdown@0.8.5: resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} dependencies: @@ -3074,10 +3822,21 @@ packages: resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} dev: true + /mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: true + /mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} dev: true + /merge-options@1.0.1: + resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==} + engines: {node: '>=4'} + dependencies: + is-plain-obj: 1.1.0 + dev: true + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true @@ -3096,6 +3855,27 @@ packages: - supports-color dev: true + /micromatch@3.1.0: + resolution: {integrity: sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2 + define-property: 1.0.0 + extend-shallow: 2.0.1 + extglob: 2.0.4 + fragment-cache: 0.2.1 + kind-of: 5.1.0 + nanomatch: 1.2.13 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -3104,6 +3884,18 @@ packages: picomatch: 2.3.1 dev: true + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -3132,6 +3924,18 @@ packages: brace-expansion: 2.0.1 dev: true + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /mixin-deep@1.3.2: + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} + engines: {node: '>=0.10.0'} + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 + dev: true + /mlly@1.5.0: resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==} dependencies: @@ -3146,6 +3950,10 @@ packages: engines: {node: '>=10'} dev: true + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: true + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true @@ -3163,6 +3971,25 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + /nanomatch@1.2.13: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} + dependencies: + 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.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + /nanopop@2.3.0: resolution: {integrity: sha512-fzN+T2K7/Ah25XU02MJkPZ5q4Tj5FpjmIYq4rvoHX4yb16HzFdCO6JxFFn5Y/oBhQ8no8fUZavnyIv9/+xkBBw==} dev: false @@ -3217,6 +4044,38 @@ packages: boolbase: 1.0.0 dev: true + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-copy@0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + dev: true + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: false + + /object-visit@1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /object.pick@1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + /ofetch@1.3.3: resolution: {integrity: sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==} dependencies: @@ -3323,6 +4182,11 @@ packages: lines-and-columns: 1.2.4 dev: true + /pascalcase@0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + dev: true + /path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} dev: true @@ -3356,6 +4220,10 @@ packages: engines: {node: '>=8'} dev: true + /pathe@0.2.0: + resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} + dev: true + /pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} dev: true @@ -3372,6 +4240,32 @@ packages: engines: {node: '>=8.6'} dev: true + /pinia-plugin-persistedstate@3.2.1(pinia@2.1.7): + resolution: {integrity: sha512-MK++8LRUsGF7r45PjBFES82ISnPzyO6IZx3CH5vyPseFLZCk1g2kgx6l/nW8pEBKxxd4do0P6bJw+mUSZIEZUQ==} + peerDependencies: + pinia: ^2.0.0 + dependencies: + pinia: 2.1.7(typescript@5.3.3)(vue@3.4.13) + dev: false + + /pinia@2.1.7(typescript@5.3.3)(vue@3.4.13): + resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==} + peerDependencies: + '@vue/composition-api': ^1.4.0 + typescript: '>=4.4.4' + vue: ^2.6.14 || ^3.3.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + typescript: + optional: true + dependencies: + '@vue/devtools-api': 6.5.1 + typescript: 5.3.3 + vue: 3.4.13(typescript@5.3.3) + vue-demi: 0.14.6(vue@3.4.13) + dev: false + /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: @@ -3385,6 +4279,19 @@ packages: engines: {node: '>=4'} dev: true + /posix-character-classes@0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + dev: true + + /postcss-prefix-selector@1.16.0(postcss@5.2.18): + resolution: {integrity: sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==} + peerDependencies: + postcss: '>4 <9' + dependencies: + postcss: 5.2.18 + dev: true + /postcss-selector-parser@6.0.15: resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} engines: {node: '>=4'} @@ -3393,6 +4300,16 @@ packages: util-deprecate: 1.0.2 dev: true + /postcss@5.2.18: + resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==} + engines: {node: '>=0.12'} + dependencies: + chalk: 1.1.3 + js-base64: 2.6.4 + source-map: 0.5.7 + supports-color: 3.2.3 + dev: true + /postcss@8.4.33: resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} engines: {node: ^10 || ^12 || >=14} @@ -3401,6 +4318,41 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 + /posthtml-parser@0.2.1: + resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==} + dependencies: + htmlparser2: 3.10.1 + isobject: 2.1.0 + dev: true + + /posthtml-rename-id@1.0.12: + resolution: {integrity: sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /posthtml-render@1.4.0: + resolution: {integrity: sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==} + engines: {node: '>=10'} + dev: true + + /posthtml-svg-mode@1.0.3: + resolution: {integrity: sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==} + dependencies: + merge-options: 1.0.1 + posthtml: 0.9.2 + posthtml-parser: 0.2.1 + posthtml-render: 1.4.0 + dev: true + + /posthtml@0.9.2: + resolution: {integrity: sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==} + engines: {node: '>=0.10.0'} + dependencies: + posthtml-parser: 0.2.1 + posthtml-render: 1.4.0 + dev: true + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -3427,11 +4379,30 @@ packages: sisteransi: 1.0.5 dev: true + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} dev: true + /qs@6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: false + + /query-string@4.3.4: + resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==} + engines: {node: '>=0.10.0'} + dependencies: + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + dev: true + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true @@ -3455,6 +4426,15 @@ packages: type-fest: 0.6.0 dev: true + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -3466,6 +4446,14 @@ packages: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: false + /regex-not@1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + dev: true + /regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true @@ -3478,6 +4466,16 @@ packages: jsesc: 0.5.0 dev: true + /repeat-element@1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} + dev: true + + /repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + dev: true + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -3496,6 +4494,11 @@ packages: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true + /resolve-url@0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: true + /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -3505,6 +4508,11 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /ret@0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + dev: true + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -3546,6 +4554,26 @@ packages: queue-microtask: 1.2.3 dev: true + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /safe-regex@1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + dependencies: + ret: 0.1.15 + dev: true + + /sass@1.69.7: + resolution: {integrity: sha512-rzj2soDeZ8wtE2egyLXgOOHQvaC2iosZrkF6v3EUG+tBwEvhqUCzm0VP3k9gHF9LXbSrRhT5SksoI56Iw8NPnQ==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.3.4 + source-map-js: 1.0.2 + dev: true + /scroll-into-view-if-needed@2.2.31: resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==} dependencies: @@ -3570,6 +4598,27 @@ packages: lru-cache: 6.0.0 dev: true + /set-function-length@1.2.0: + resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: false + + /set-value@2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + dev: true + /shallow-equal@1.2.1: resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==} dev: false @@ -3586,6 +4635,14 @@ packages: engines: {node: '>=8'} dev: true + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 + dev: false + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true @@ -3613,10 +4670,68 @@ packages: engines: {node: '>=8'} dev: true + /snapdragon-node@2.1.1: + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 1.0.0 + isobject: 3.0.1 + snapdragon-util: 3.0.1 + dev: true + + /snapdragon-util@3.0.1: + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /snapdragon@0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + dependencies: + base: 0.11.2 + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + /source-map-resolve@0.5.3: + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.2 + resolve-url: 0.2.1 + source-map-url: 0.4.1 + urix: 0.1.0 + dev: true + + /source-map-url@0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + dev: true + + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: @@ -3646,6 +4761,31 @@ packages: resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} dev: true + /split-string@3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + dev: true + + /stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: true + + /static-extend@0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + dev: true + + /strict-uri-encode@1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + dev: true + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -3655,6 +4795,19 @@ packages: strip-ansi: 6.0.1 dev: true + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -3688,6 +4841,18 @@ packages: resolution: {integrity: sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==} dev: false + /supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + dev: true + + /supports-color@3.2.3: + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} + engines: {node: '>=0.8.0'} + dependencies: + has-flag: 1.0.0 + dev: true + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -3707,6 +4872,40 @@ packages: engines: {node: '>= 0.4'} dev: true + /svg-baker@1.7.0: + resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==} + dependencies: + bluebird: 3.7.2 + clone: 2.1.2 + he: 1.2.0 + image-size: 0.5.5 + loader-utils: 1.4.2 + merge-options: 1.0.1 + micromatch: 3.1.0 + postcss: 5.2.18 + postcss-prefix-selector: 1.16.0(postcss@5.2.18) + posthtml-rename-id: 1.0.12 + posthtml-svg-mode: 1.0.3 + query-string: 4.3.4 + traverse: 0.6.8 + transitivePeerDependencies: + - supports-color + dev: true + + /svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.0.0 + stable: 0.1.8 + dev: true + /synckit@0.8.8: resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} engines: {node: ^14.18.0 || >=16.0.0} @@ -3728,6 +4927,21 @@ packages: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} + /to-object-path@0.3.0: + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /to-regex-range@2.1.1: + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + repeat-string: 1.6.1 + dev: true + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -3735,6 +4949,16 @@ packages: is-number: 7.0.0 dev: true + /to-regex@3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + dev: true + /toml-eslint-parser@0.9.3: resolution: {integrity: sha512-moYoCvkNUAPCxSW9jmHmRElhm4tVJpHL8ItC/+uYD0EpPSFXbck7yREz9tNdJVTSpHVod8+HoipcpbQ0oE6gsw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3747,6 +4971,11 @@ packages: engines: {node: '>=6'} dev: true + /traverse@0.6.8: + resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} + engines: {node: '>= 0.4'} + dev: true + /ts-api-utils@1.0.3(typescript@5.3.3): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} @@ -3804,12 +5033,27 @@ packages: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true + /union-value@1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + dev: true + /unist-util-stringify-position@2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} dependencies: '@types/unist': 2.0.10 dev: true + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true + /unocss@0.58.3(postcss@8.4.33)(vite@5.0.11): resolution: {integrity: sha512-2rnvghfiIDRQ2cOrmN4P7J7xV2p3yBK+bPAt1aoUxCXcszkLczAnQzh9c7IZ+p70kSVstK45cJTYV6TMzOLF7Q==} engines: {node: '>=14'} @@ -3842,13 +5086,21 @@ packages: '@unocss/transformer-directives': 0.58.3 '@unocss/transformer-variant-group': 0.58.3 '@unocss/vite': 0.58.3(vite@5.0.11) - vite: 5.0.11(@types/node@20.11.0) + vite: 5.0.11(@types/node@20.11.0)(sass@1.69.7) transitivePeerDependencies: - postcss - rollup - supports-color dev: true + /unset-value@1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + dev: true + /update-browserslist-db@1.0.13(browserslist@4.22.2): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true @@ -3866,6 +5118,16 @@ packages: punycode: 2.3.1 dev: true + /urix@0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + dev: true + + /use@3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + dev: true + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true @@ -3877,7 +5139,30 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /vite@5.0.11(@types/node@20.11.0): + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: true + + /vite-plugin-svg-icons@2.0.1(vite@5.0.11): + resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==} + peerDependencies: + vite: '>=2.0.0' + dependencies: + '@types/svgo': 2.6.4 + cors: 2.8.5 + debug: 4.3.4 + etag: 1.8.1 + fs-extra: 10.1.0 + pathe: 0.2.0 + svg-baker: 1.7.0 + svgo: 2.8.0 + vite: 5.0.11(@types/node@20.11.0)(sass@1.69.7) + transitivePeerDependencies: + - supports-color + dev: true + + /vite@5.0.11(@types/node@20.11.0)(sass@1.69.7): resolution: {integrity: sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -3909,6 +5194,7 @@ packages: esbuild: 0.19.11 postcss: 8.4.33 rollup: 4.9.5 + sass: 1.69.7 optionalDependencies: fsevents: 2.3.3 dev: true diff --git a/src/App.vue b/src/App.vue index d1a7305..ee14bb1 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,48 +1,30 @@ diff --git a/src/api/base/login.ts b/src/api/base/login.ts new file mode 100644 index 0000000..946d61b --- /dev/null +++ b/src/api/base/login.ts @@ -0,0 +1,23 @@ +import { defHttp } from '@/utils/axios/index' + +export interface TokenParams { + user_type: string + grant_type: string + invite_code: string + phone: string + phoneCode: string + type: string +} +export async function token(params: TokenParams) { + return defHttp.post({ + url: `/hulk-auth/oauth/token?grant_type=${params.grant_type}&user_type=${params.user_type}&invite_code=${params.invite_code}&phone=${params.phone}&phoneCode=${params.phoneCode}&type=${params.type}`, + }, { + isTransformResponse: false, + }) +} + +export async function sendCode(phone: string) { + return defHttp.post({ + url: `/open-chat/unauth/sendSms?phone=${phone}`, + }) +} diff --git a/src/api/base/user.ts b/src/api/base/user.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/images/bg_menu.png b/src/assets/images/bg_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..3a788fab8c67ae60de679e3d0625a5e09401c895 GIT binary patch literal 186956 zcmcFq^+S_wxKdc=@g`q?kR$FBMn25F6j>GkOpZc4WqjmFj{Ja3>e#a z;XCI~I6rNy-sicW>%QXN2vt{=e}qqgf9KAfM+)y`HGtdMJ9i#9KEML*{aLdx0dDTP zXvj<7DIccVxq~&2qaZ7#5Jg z7V4^0C6cstbQ(iljIGoy{nP&-nM$r#Bsux$&ND)%7%Fq|z zs7a&Rdm7D!9=Lf$;`G?HbM5?SHA+aaa6u1-d`+-WXa{#cFV2^R9~~V9OV_UT+a)UP z!KADSGFLHi)!1O<(rIUH5}w z3XDY<%qL{^LS$%`0?fQ77$~xH-NX>QT=UJo`#x|{3UH8b0DC~W+Ek|XmthL<3~&t? z`3`klRT}U2qegePNQ}&y;M;Gf?$)X6uWadxY*1MOek5hd&WZ=7t+7sMO>G~3^l-O> z>bSV@xl5SuuiMWEwF((Rz&=UhNzGfI*IFt}Aw|d_U;P&m_eMR$nRP z2c*vw6hy7omeszG#7y)!L{TOL4*R7+OI5z;zzV?x@7iVrMW zbt54J2wK6~gg>^L%gpYp2=UJvN1q?;-c%*prb}yr!d-4UN_jir*Dja*QGq3-2UdrS zF5DcqW*Ja}7R|?EwY=t^1l9#k@zvbTvl#mlMXR&>bqd)`3K25+nC~WIy|Et~(H}J_ z#OtaN32{NBx!VLfgV=iS+0cErK^aHEsHTX8uo@!^`se407i`Qdvu{tN*Ih1+I;G~s z*-b-kw;16rjBbcd&KH^&Ees?cKF+`0xsRt7|kWifX^iS-Q zqzYlLu0Qb@sPUs!dmYw>b|NG=>YOK66f(_w^MyLYyL7Kw9Zj-*LuIe{`Z|?F5 zp^*p5brH^P7K%g}))q5J2~oe3gQd9Tz(9H#1qulj`JX+oP^8KjrNw@1Qlv;5ALg{$ z>d-3T;FtouwI)⁣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 + else + return content +} + +/** + * @description: Create confirmation box + */ +function createConfirm(options: ModalOptionsEx) { + const iconType = options.iconType || 'warning' + Reflect.deleteProperty(options, 'iconType') + const opt: ModalFuncProps = { + centered: true, + icon: getIcon(iconType), + ...options, + content: renderContent(options), + } + return Modal.confirm(opt) +} + +function getBaseOptions() { + return { + okText: '确认', + centered: true, + } +} + +function createModalOptions(options: ModalOptionsPartial, icon: string): ModalOptionsPartial { + return { + ...getBaseOptions(), + ...options, + content: renderContent(options), + icon: getIcon(icon), + } +} + +function createSuccessModal(options: ModalOptionsPartial) { + return Modal.success(createModalOptions(options, 'success')) +} + +function createErrorModal(options: ModalOptionsPartial) { + return Modal.error(createModalOptions(options, 'close')) +} + +function createInfoModal(options: ModalOptionsPartial) { + return Modal.info(createModalOptions(options, 'info')) +} + +function createWarningModal(options: ModalOptionsPartial) { + return Modal.warning(createModalOptions(options, 'warning')) +} + +notification.config({ + placement: 'topRight', + duration: 3, +}) + +/** + * @description: message + */ +export function useMessage() { + return { + createMessage: Message, + notification: notification as NotifyApi, + createConfirm, + createSuccessModal, + createErrorModal, + createInfoModal, + createWarningModal, + } +} diff --git a/src/layout/AppMain/index.vue b/src/layout/AppMain/index.vue new file mode 100644 index 0000000..fdee26b --- /dev/null +++ b/src/layout/AppMain/index.vue @@ -0,0 +1,14 @@ + + + + + diff --git a/src/layout/AppMenu/index.d.ts b/src/layout/AppMenu/index.d.ts new file mode 100644 index 0000000..eb9b25c --- /dev/null +++ b/src/layout/AppMenu/index.d.ts @@ -0,0 +1,8 @@ +import type { MenuTypeEnum } from '@/enums/menuEnum' + +export interface MenuItem { + name: string + icon: string + path: string + key: MenuTypeEnum +} diff --git a/src/layout/AppMenu/index.vue b/src/layout/AppMenu/index.vue new file mode 100644 index 0000000..583babc --- /dev/null +++ b/src/layout/AppMenu/index.vue @@ -0,0 +1,131 @@ + + + + + diff --git a/src/layout/index.vue b/src/layout/index.vue new file mode 100644 index 0000000..dba5755 --- /dev/null +++ b/src/layout/index.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/src/main.ts b/src/main.ts index c28322b..e73cd0c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -2,17 +2,30 @@ * @Description: * @Author: yeke * @Date: 2024-01-14 15:47:49 - * @LastEditors: yeke - * @LastEditTime: 2024-01-14 21:34:34 + * @LastEditors: lipenghui + * @LastEditTime: 2024-01-16 15:24:25 */ import { createApp } from 'vue' -import './style.css' + +import './design/public.scss' import 'virtual:uno.css' import 'ant-design-vue/dist/reset.css' -import router from './router/index' import App from './App.vue' +import { setupStore } from '@/store' +import { router, setupRouter } from '@/router' +import { setupRouterGuard } from '@/router/guard' + +// svg图标 +import 'virtual:svg-icons-register' const app = createApp(App) +// 挂载状态管理 +setupStore(app) + +// 配置路由 +setupRouter(app) + +// 路由守卫 +setupRouterGuard(router) -app.use(router) app.mount('#app') diff --git a/src/router/guard.ts b/src/router/guard.ts new file mode 100644 index 0000000..78077aa --- /dev/null +++ b/src/router/guard.ts @@ -0,0 +1,35 @@ +import type { Router } from 'vue-router' +import { PageEnum } from '@/enums/pageEnum' +import { useUserStore } from '@/store/moules/userStore/index' + +export function setupRouterGuard(router: Router) { + createRouterGuards(router) +} + +const WHITE_NAME_LIST: string[] = [ + PageEnum.BASE_LOGIN, +] + +function createRouterGuards(router: Router) { + const userStore = useUserStore() + // 前置 + router.beforeEach(async (to, _from, next) => { + const isErrorPage = router.getRoutes().findIndex(item => item.name === to.name) + if (isErrorPage === -1) + next({ name: PageEnum.ERROR_PAGE_NAME_404 }) + + if (userStore.getToken) { + next() + } + else { + if (WHITE_NAME_LIST.includes(to.name as string)) + next() + else + next({ name: PageEnum.BASE_LOGIN }) + } + }) + + // router.afterEach((to, _) => { + // document.title = (to?.meta?.title as string) || document.title + // }) +} diff --git a/src/router/index.ts b/src/router/index.ts index 0291432..30277ca 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,3 +1,4 @@ +import type { App } from 'vue' import type { RouteRecordRaw, } from 'vue-router' @@ -5,21 +6,57 @@ import { createRouter, createWebHistory, } from 'vue-router' +import Layout from '@/layout/index.vue' export const constantRoutes: Array = [ + { + path: '/404', + name: '404', + component: () => import('@/views/error/404.vue'), + meta: { + title: '404', + }, + }, { path: '/login', name: 'Login', - component: () => import('@/views/login.vue'), + component: () => import('@/views/login/index.vue'), + meta: { + title: '登录', + }, + }, + { + name: 'Layout', + path: '/', + component: Layout, + redirect: '/conversation', + children: [ + { + name: 'Conversation', + path: '/conversation', + component: () => import('@/views/conversation/index.vue'), + meta: { + title: '会话', + }, + }, + { + name: 'TextToPicture', + path: '/textToPicture', + component: () => import('@/views/textToPicture/index.vue'), + meta: { + title: '文生图', + }, + }, + ], }, ] -// 1.返回一个 router 实列,为函数,里面有配置项(对象) history -const router = createRouter({ +export const router = createRouter({ history: createWebHistory(), routes: constantRoutes, }) -// 3导出路由 然后去 main.ts 注册 router.ts -export default router +export function setupRouter(app: App) { + app.use(router) +} diff --git a/src/store/index.ts b/src/store/index.ts new file mode 100644 index 0000000..5c02824 --- /dev/null +++ b/src/store/index.ts @@ -0,0 +1,11 @@ +import type { App } from 'vue' +import { createPinia } from 'pinia' +import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' + +const pinia = createPinia() +pinia.use(piniaPluginPersistedstate) +export function setupStore(app: App) { + app.use(pinia) +} + +export { pinia } diff --git a/src/store/moules/userStore/index.d.ts b/src/store/moules/userStore/index.d.ts new file mode 100644 index 0000000..fc7e958 --- /dev/null +++ b/src/store/moules/userStore/index.d.ts @@ -0,0 +1,15 @@ +export interface UserStateType { + token: string | null + userInfo: string | null +} + +export interface UserInfoType { + user_id: string + avatar: string + access_token: string + token_type: string + role_name: string + user_name: string + real_name: string + nick_name: string +} diff --git a/src/store/moules/userStore/index.ts b/src/store/moules/userStore/index.ts new file mode 100644 index 0000000..ba8ecf9 --- /dev/null +++ b/src/store/moules/userStore/index.ts @@ -0,0 +1,73 @@ +/* + * @Description: 主题状态控制 + * @Author: yeke + * @Date: 2023-06-28 11:16:32 + * @LastEditors: lipenghui + * @LastEditTime: 2024-01-17 13:54:13 + */ +import { defineStore } from 'pinia' +import type { UserInfoType, UserStateType } from './index.d' +import { router } from '@/router' +import { PageEnum } from '@/enums/pageEnum' +import { ACCESS_TOKEN_KEY, USER_INFO_KEY } from '@/enums/cacheEnum' +import { token } from '@/api/base/login' +import type { TokenParams } from '@/api/base/login' +import crypto from '@/utils/crypto' + +export const useUserStore = defineStore('useUserStore', { + state: (): UserStateType => { + return { + token: null, + userInfo: null, + } + }, + getters: { + getToken(): string | null { + return this.token ? crypto.decryptAES(this.token, crypto.localKey) : null + }, + getUserInfo(): UserInfoType | null { + return this.userInfo ? JSON.parse(crypto.decryptAES(this.userInfo, crypto.localKey)) : null + }, + }, + actions: { + setToken(token: string) { + this.token = token + }, + + setUserInfo(userInfo: string) { + this.userInfo = userInfo + }, + + async login(params: TokenParams) { + return new Promise((resolve, reject) => { + token(params).then((res) => { + this.setToken(crypto.encryptAES(res.access_token, crypto.localKey)) + this.setUserInfo(crypto.encryptAES(JSON.stringify(res), crypto.localKey)) + resolve(res) + }).catch((err) => { + reject(err) + }) + }) + }, + + /** + * @description: logout + */ + async logout(goLogin = false) { + this.$reset() + localStorage.clear() + // 清空数据 + goLogin && router.push(PageEnum.BASE_LOGIN) + }, + }, + persist: [ + { + paths: ['token'], + key: ACCESS_TOKEN_KEY, + }, + { + paths: ['userInfo'], + key: USER_INFO_KEY, + }, + ], +}) diff --git a/src/style.css b/src/style.css deleted file mode 100644 index bb131d6..0000000 --- a/src/style.css +++ /dev/null @@ -1,79 +0,0 @@ -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -.card { - padding: 2em; -} - -#app { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/src/utils/axios/Axios.ts b/src/utils/axios/Axios.ts new file mode 100644 index 0000000..d93fe88 --- /dev/null +++ b/src/utils/axios/Axios.ts @@ -0,0 +1,337 @@ +import type { + AxiosError, + AxiosInstance, + AxiosRequestConfig, + AxiosResponse, + InternalAxiosRequestConfig, +} from 'axios' +import axios from 'axios' +import qs from 'qs' +import { cloneDeep } from 'lodash-es' +import type { CreateAxiosOptions } from './axiosTransform' +import { AxiosCanceler } from './axiosCancel' +import { isFunction } from '@/utils/is' +import { downloadByData } from '@/utils/file/download' +import type { RequestOptions, Result, UploadFileParams } from '/#/axios' +import { ContentTypeEnum, RequestEnum } from '@/enums/httpEnum' + +/** + * @description: axios 模块 + */ +export class VAxios { + private axiosInstance: AxiosInstance + private readonly options: CreateAxiosOptions + + constructor(options: CreateAxiosOptions) { + this.options = options + this.axiosInstance = axios.create(options) + this.setupInterceptors() + } + + /** + * @description: 创建 axios 实例 + */ + private createAxios(config: CreateAxiosOptions): void { + this.axiosInstance = axios.create(config) + } + + private getTransform() { + const { transform } = this.options + return transform + } + + getAxios(): AxiosInstance { + return this.axiosInstance + } + + /** + * @description: 重新配置 axios + */ + configAxios(config: CreateAxiosOptions) { + if (!this.axiosInstance) + return + + this.createAxios(config) + } + + /** + * @description: 设置通用标题 + */ + setHeader(headers: any): void { + if (!this.axiosInstance) + return + + Object.assign(this.axiosInstance.defaults.headers, headers) + } + + /** + * @description: Interceptor configuration 拦截器配置 + */ + private setupInterceptors() { + // const transform = this.getTransform(); + const { + axiosInstance, + options: { transform }, + } = this + if (!transform) + return + + const { + requestInterceptors, + requestInterceptorsCatch, + responseInterceptors, + responseInterceptorsCatch, + } = transform + + const axiosCanceler = new AxiosCanceler() + + // 请求拦截器配置处理 + this.axiosInstance.interceptors.request.use((config: InternalAxiosRequestConfig) => { + // If cancel repeat request is turned on, then cancel repeat request is prohibited + const requestOptions + = (config as unknown as any).requestOptions ?? this.options.requestOptions + const ignoreCancelToken = requestOptions?.ignoreCancelToken ?? true + + !ignoreCancelToken && axiosCanceler.addPending(config) + + if (requestInterceptors && isFunction(requestInterceptors)) + config = requestInterceptors(config, this.options) + + return config + }, undefined) + + // 请求拦截器错误捕获 + requestInterceptorsCatch + && isFunction(requestInterceptorsCatch) + && this.axiosInstance.interceptors.request.use(undefined, requestInterceptorsCatch) + + // 响应结果拦截器处理 + this.axiosInstance.interceptors.response.use(async (res: AxiosResponse) => { + if (res.data.code === 401) { + // 如果未认证,说明可能是访问令牌过期了,跳转登录页 + } + res && axiosCanceler.removePending(res.config) + if (responseInterceptors && isFunction(responseInterceptors)) + res = responseInterceptors(res) + + return res + }, undefined) + + // 响应结果拦截器错误捕获 + responseInterceptorsCatch + && isFunction(responseInterceptorsCatch) + && this.axiosInstance.interceptors.response.use(undefined, (error) => { + return responseInterceptorsCatch(axiosInstance, error) + }) + } + + /** + * @description: 文件上传 + */ + uploadFile(config: AxiosRequestConfig, params: UploadFileParams) { + const formData = new window.FormData() + const customFilename = params.name || 'file' + + if (params.filename) + formData.append(customFilename, params.file, params.filename) + + else + formData.append(customFilename, params.file) + + if (params.data) { + Object.keys(params.data).forEach((key) => { + const value = params.data![key] + if (Array.isArray(value)) { + value.forEach((item) => { + formData.append(`${key}[]`, item) + }) + return + } + + formData.append(key, params.data![key]) + }) + } + + return this.axiosInstance.request({ + ...config, + method: 'POST', + data: formData, + headers: { + 'Content-type': ContentTypeEnum.FORM_DATA, + 'ignoreCancelToken': true, + }, + }) + } + + // 支持表单数据 + supportFormData(config: AxiosRequestConfig) { + const headers = config.headers || this.options.headers + const contentType = headers?.['Content-Type'] || headers?.['content-type'] + + if ( + contentType !== ContentTypeEnum.FORM_URLENCODED + || !Reflect.has(config, 'data') + || config.method?.toUpperCase() === RequestEnum.GET + ) + return config + + return { + ...config, + data: qs.stringify(config.data, { arrayFormat: 'brackets' }), + } + } + + get(config: AxiosRequestConfig, options?: RequestOptions): Promise { + return this.request({ ...config, method: 'GET' }, options) + } + + post(config: AxiosRequestConfig, options?: RequestOptions): Promise { + return this.request({ ...config, method: 'POST' }, options) + } + + put(config: AxiosRequestConfig, options?: RequestOptions): Promise { + return this.request({ ...config, method: 'PUT' }, options) + } + + delete(config: AxiosRequestConfig, options?: RequestOptions): Promise { + return this.request({ ...config, method: 'DELETE' }, options) + } + + download(config: AxiosRequestConfig, title?: string, options?: RequestOptions): Promise { + let conf: CreateAxiosOptions = cloneDeep({ + ...config, + method: 'GET', + responseType: 'blob', + }) + const transform = this.getTransform() + + const { requestOptions } = this.options + + const opt: RequestOptions = Object.assign({}, requestOptions, options) + + const { beforeRequestHook, requestCatchHook } = transform || {} + + if (beforeRequestHook && isFunction(beforeRequestHook)) + conf = beforeRequestHook(conf, opt) + + conf.requestOptions = opt + + conf = this.supportFormData(conf) + + return new Promise((resolve, reject) => { + this.axiosInstance + .request>(conf) + .then((res: AxiosResponse) => { + resolve(res as unknown as Promise) + // download file + if (typeof res != 'undefined') + downloadByData(res?.data as unknown as BlobPart, title || 'export') + }) + .catch((e: Error | AxiosError) => { + if (requestCatchHook && isFunction(requestCatchHook)) { + reject(requestCatchHook(e, opt)) + return + } + if (axios.isAxiosError(e)) { + // rewrite error message from axios in here + } + reject(e) + }) + }) + } + + export(config: AxiosRequestConfig, title: string, options?: RequestOptions): Promise { + let conf: CreateAxiosOptions = cloneDeep({ + ...config, + method: 'POST', + responseType: 'blob', + }) + const transform = this.getTransform() + + const { requestOptions } = this.options + + const opt: RequestOptions = Object.assign({}, requestOptions, options) + + const { beforeRequestHook, requestCatchHook } = transform || {} + + if (beforeRequestHook && isFunction(beforeRequestHook)) + conf = beforeRequestHook(conf, opt) + + conf.requestOptions = opt + + conf = this.supportFormData(conf) + + return new Promise((resolve, reject) => { + this.axiosInstance + .request>(conf) + .then((res: AxiosResponse) => { + resolve(res as unknown as Promise) + // download file + if (typeof res != 'undefined') + downloadByData(res?.data as unknown as BlobPart, title) + }) + .catch((e: Error | AxiosError) => { + if (requestCatchHook && isFunction(requestCatchHook)) { + reject(requestCatchHook(e, opt)) + return + } + if (axios.isAxiosError(e)) { + // rewrite error message from axios in here + } + reject(e) + }) + }) + } + + request(config: AxiosRequestConfig, options?: RequestOptions): Promise { + let conf: CreateAxiosOptions = cloneDeep(config) + + // cancelToken 如果被深拷贝,会导致最外层无法使用cancel方法来取消请求 + if (config.cancelToken) + conf.cancelToken = config.cancelToken + + if (config.signal) + conf.signal = config.signal + + const transform = this.getTransform() + + const { requestOptions } = this.options + + const opt: RequestOptions = Object.assign({}, requestOptions, options) + const { beforeRequestHook, requestCatchHook, transformResponseHook } = transform || {} + if (beforeRequestHook && isFunction(beforeRequestHook)) + conf = beforeRequestHook(conf, opt) + + conf.requestOptions = opt + + conf = this.supportFormData(conf) + + return new Promise((resolve, reject) => { + this.axiosInstance + .request>(conf) + .then((res: AxiosResponse) => { + if (transformResponseHook && isFunction(transformResponseHook)) { + try { + const ret = transformResponseHook(res, opt) + resolve(ret) + } + catch (err) { + reject(err || new Error('request error!')) + } + return + } + resolve(res as unknown as Promise) + }) + .catch((e: Error | AxiosError) => { + if (requestCatchHook && isFunction(requestCatchHook)) { + reject(requestCatchHook(e, opt)) + return + } + if (axios.isAxiosError(e)) { + // 在此处重写来自 axios 的错误消息 + } + reject(e) + }) + }) + } +} diff --git a/src/utils/axios/axiosCancel.ts b/src/utils/axios/axiosCancel.ts new file mode 100644 index 0000000..e28b2c7 --- /dev/null +++ b/src/utils/axios/axiosCancel.ts @@ -0,0 +1,59 @@ +import type { AxiosRequestConfig } from 'axios' + +// 用于存储每个请求的标识和取消函数 +const pendingMap = new Map() + +function getPendingUrl(config: AxiosRequestConfig): string { + return [config.method, config.url].join('&') +} + +export class AxiosCanceler { + /** + * 添加请求 + * @param config 请求配置 + */ + public addPending(config: AxiosRequestConfig): void { + this.removePending(config) + const url = getPendingUrl(config) + const controller = new AbortController() + config.signal = config.signal || controller.signal + if (!pendingMap.has(url)) { + // 如果当前请求不在等待中,将其添加到等待中 + pendingMap.set(url, controller) + } + } + + /** + * 清除所有等待中的请求 + */ + public removeAllPending(): void { + pendingMap.forEach((abortController) => { + if (abortController) + abortController.abort() + }) + this.reset() + } + + /** + * 移除请求 + * @param config 请求配置 + */ + public removePending(config: AxiosRequestConfig): void { + const url = getPendingUrl(config) + if (pendingMap.has(url)) { + // 如果当前请求在等待中,取消它并将其从等待中移除 + const abortController = pendingMap.get(url) + if (abortController) + abortController.abort(url) + + pendingMap.delete(url) + } + } + + /** + * 重置 + */ + public reset(): void { + pendingMap.clear() + } +} diff --git a/src/utils/axios/axiosRetry.ts b/src/utils/axios/axiosRetry.ts new file mode 100644 index 0000000..e8e6e55 --- /dev/null +++ b/src/utils/axios/axiosRetry.ts @@ -0,0 +1,33 @@ +import type { AxiosError, AxiosInstance } from 'axios' + +/** + * 请求重试机制 + */ + +export class AxiosRetry { + /** + * 重试 + */ + async retry(axiosInstance: AxiosInstance, error: AxiosError) { + // eslint-disable-next-line ts/ban-ts-comment, ts/prefer-ts-expect-error + // @ts-ignore + const { config } = error.response + const { waitTime, count } = config?.requestOptions?.retryRequest ?? {} + config.__retryCount = config.__retryCount || 0 + if (config.__retryCount >= count) + return Promise.reject(error) + + config.__retryCount += 1 + // 请求返回后config的header不正确造成重试请求失败,删除返回headers采用默认headers + delete config.headers + await this.delay(waitTime) + return await axiosInstance(config) + } + + /** + * 延迟 + */ + private delay(waitTime: number) { + return new Promise(resolve => setTimeout(resolve, waitTime)) + } +} diff --git a/src/utils/axios/axiosTransform.ts b/src/utils/axios/axiosTransform.ts new file mode 100644 index 0000000..a433530 --- /dev/null +++ b/src/utils/axios/axiosTransform.ts @@ -0,0 +1,57 @@ +/** + * Data processing class, can be configured according to the project + */ +import type { + AxiosInstance, + AxiosRequestConfig, + AxiosResponse, + InternalAxiosRequestConfig, +} from 'axios' +import type { RequestOptions, Result } from '/#/axios' + +export interface CreateAxiosOptions extends AxiosRequestConfig { + authenticationScheme?: string + tokenScheme?: string + transform?: AxiosTransform + requestOptions?: RequestOptions +} + +export abstract class AxiosTransform { + /** + * @description: 在发送请求之前调用的函数。它可以根据需要修改请求配置 + */ + beforeRequestHook?: (config: AxiosRequestConfig, options: RequestOptions) => AxiosRequestConfig + + /** + * @description: 处理响应数据 + */ + transformResponseHook?: (res: AxiosResponse, options: RequestOptions) => any + + /** + * @description: 请求失败处理 + */ + requestCatchHook?: (e: Error, options: RequestOptions) => Promise + + /** + * @description: 请求之前的拦截器 + */ + requestInterceptors?: ( + config: InternalAxiosRequestConfig, + options: CreateAxiosOptions, + ) => InternalAxiosRequestConfig + + /** + * @description: 请求之后的拦截器 + */ + responseInterceptors?: (res: AxiosResponse) => AxiosResponse + + /** + * @description: 请求之前的拦截器错误处理 + */ + requestInterceptorsCatch?: (error: Error) => void + + /** + * @description: 请求之后的拦截器错误处理 + */ + responseInterceptorsCatch?: (axiosInstance: AxiosInstance, error: Error) => void +} diff --git a/src/utils/axios/checkStatus.ts b/src/utils/axios/checkStatus.ts new file mode 100644 index 0000000..5b67fdd --- /dev/null +++ b/src/utils/axios/checkStatus.ts @@ -0,0 +1,69 @@ +import type { ErrorMessageMode } from '/#/axios' +import { useMessage } from '@/hooks/useMessage' +import { useUserStore } from '@/store/moules/userStore/index' +import { HttpErrorMsgEnum } from '@/enums/httpEnum' + +const { createMessage, createErrorModal } = useMessage() +const error = createMessage.error! +export function checkStatus( + status: number, + msg: string, + errorMessageMode: ErrorMessageMode = 'message', +): void { + const userStore = useUserStore() + let errMessage = '' + + switch (status) { + case 400: + errMessage = msg || HttpErrorMsgEnum.API_REQUEST_FAILED + break + // 401: Not logged in + // Jump to the login page if not logged in, and carry the path of the current page + // Return to the current page after successful login. This step needs to be operated on the login page. + case 401: + errMessage = msg || HttpErrorMsgEnum.ERROR_MESSAGE_401 + userStore.logout(true) + + break + case 403: + errMessage = msg || HttpErrorMsgEnum.ERROR_MESSAGE_403 + break + // 404请求不存在 + case 404: + errMessage = msg || HttpErrorMsgEnum.ERROR_MESSAGE_404 + break + case 405: + errMessage = msg || HttpErrorMsgEnum.ERROR_MESSAGE_405 + break + case 408: + errMessage = msg || HttpErrorMsgEnum.ERROR_MESSAGE_408 + break + case 500: + errMessage = msg || HttpErrorMsgEnum.ERROR_MESSAGE_500 + break + case 501: + errMessage = msg || HttpErrorMsgEnum.ERROR_MESSAGE_501 + break + case 502: + errMessage = msg || HttpErrorMsgEnum.ERROR_MESSAGE_502 + break + case 503: + errMessage = msg || HttpErrorMsgEnum.ERROR_MESSAGE_503 + break + case 504: + errMessage = msg || HttpErrorMsgEnum.ERROR_MESSAGE_504 + break + case 505: + errMessage = msg || HttpErrorMsgEnum.ERROR_MESSAGE_505 + break + default: + } + + if (errMessage) { + if (errorMessageMode === 'modal') + createErrorModal({ title: HttpErrorMsgEnum.ERROR_TIP, content: errMessage }) + + else if (errorMessageMode === 'message') + error({ content: errMessage, key: `global_error_message_status_${status}` }) + } +} diff --git a/src/utils/axios/helper.ts b/src/utils/axios/helper.ts new file mode 100644 index 0000000..6fc13b5 --- /dev/null +++ b/src/utils/axios/helper.ts @@ -0,0 +1,47 @@ +import { isObject, isString } from '@/utils/is' + +const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss' + +export function joinTimestamp( + join: boolean, + restful: T, +): T extends true ? string : object + +export function joinTimestamp(join: boolean, restful = false): string | object { + if (!join) + return restful ? '' : {} + + const now = new Date().getTime() + if (restful) + return `?_t=${now}` + + return { _t: now } +} + +/** + * @description: 请求参数时间格式 + */ +export function formatRequestDate(params: Recordable) { + if (Object.prototype.toString.call(params) !== '[object Object]') + return + + for (const key in params) { + const format = params[key]?.format ?? null + if (format && typeof format === 'function') + params[key] = params[key].format(DATE_TIME_FORMAT) + + if (isString(key)) { + const value = params[key] + if (value) { + try { + params[key] = isString(value) ? value.trim() : value + } + catch (error: any) { + throw new Error(error) + } + } + } + if (isObject(params[key])) + formatRequestDate(params[key]) + } +} diff --git a/src/utils/axios/index.ts b/src/utils/axios/index.ts new file mode 100644 index 0000000..4e7f04b --- /dev/null +++ b/src/utils/axios/index.ts @@ -0,0 +1,313 @@ +// axios配置 可自行根据项目进行更改,只需更改该文件即可,其他文件可以不动 +// The axios configuration can be changed according to the project, just change the file, other files can be left unchanged + +import type { AxiosInstance, AxiosResponse } from 'axios' +import { clone } from 'lodash-es' +import axios from 'axios' +import type { AxiosTransform, CreateAxiosOptions } from './axiosTransform' +import { VAxios } from './Axios' +import { checkStatus } from './checkStatus' +import { formatRequestDate, joinTimestamp } from './helper' +import type { RequestOptions, Result } from '/#/axios' +import { AxiosRetry } from './axiosRetry' +import { useMessage } from '@/hooks/useMessage' +import { ContentTypeEnum, HttpErrorMsgEnum, HttpSuccessEnum, RequestEnum, ResultEnum } from '@/enums/httpEnum' +import { isEmpty, isNull, isString, isUndefined } from '@/utils/is' +import { deepMerge, setObjToUrlParams } from '@/utils' +import { useUserStore } from '@/store/moules/userStore/index' + +const { createMessage, createErrorModal, createSuccessModal } = useMessage() + +// 请求白名单,无须token的接口 +const whiteList: string[] = ['/login', '/refresh-token'] + +/** + * @description: 数据处理,方便区分多种处理方式 + */ +const transform: AxiosTransform = { + /** + * @description: 处理响应数据。如果数据不是预期格式,可直接抛出错误 + */ + transformResponseHook: (res: AxiosResponse, options: RequestOptions) => { + const { isTransformResponse, isReturnNativeResponse } = options + // 二进制数据则直接返回 + if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') + return res.data + + // 是否返回原生响应头 比如:需要获取响应头时使用该属性 + if (isReturnNativeResponse) + return res + + // 不进行任何处理,直接返回 + // 用于页面代码可能需要直接获取code,data,message这些信息时开启 + if (!isTransformResponse) + return res.data + + // 错误的时候返回 + + const { data } = res + + if (!data) { + // return '[HTTP] Request has no return value'; + throw new Error(HttpErrorMsgEnum.API_REQUEST_FAILED) + } + // 这里 code,result,message为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式 + const { code, data: result, msg } = data + // 这里逻辑可以根据项目进行修改 + const hasSuccess = data && Reflect.has(data, 'code') && code === ResultEnum.SUCCESS + if (hasSuccess) { + let successMsg = msg + + if (isNull(successMsg) || isUndefined(successMsg) || isEmpty(successMsg)) + successMsg = HttpSuccessEnum.OPERATION_SUCCESS + + if (options.successMessageMode === 'modal') + createSuccessModal({ title: HttpSuccessEnum.SUCCESS_TIP, content: successMsg }) + + else if (options.successMessageMode === 'message') + createMessage.success(successMsg) + + return result + } + + // 在此处根据自己项目的实际情况对不同的code执行不同的操作 + // 如果不希望中断当前请求,请return数据,否则直接抛出异常即可 + let timeoutMsg = '' + switch (code) { + case ResultEnum.UNAUTHORIZED: + timeoutMsg = HttpErrorMsgEnum.API_TIMEOUT_MESSAGE + break + default: + if (msg) + timeoutMsg = msg + } + + // errorMessageMode='modal' 的时候会显示modal错误弹窗,而不是消息提示,用于一些比较重要的错误 + // errorMessageMode='none' 一般是调用时明确表示不希望自动弹出错误提示 + if (options.errorMessageMode === 'modal') + createErrorModal({ title: HttpErrorMsgEnum.ERROR_TIP, content: timeoutMsg }) + + else if (options.errorMessageMode === 'message') + createMessage.error(timeoutMsg) + + throw new Error(timeoutMsg || HttpErrorMsgEnum.API_REQUEST_FAILED) + }, + + // 请求之前处理config + beforeRequestHook: (config, options) => { + const { apiUrl, joinPrefix, joinParamsToUrl, formatDate, joinTime = true } = options + + if (joinPrefix) + config.url = `${config.url}` + + if (apiUrl && isString(apiUrl)) + config.url = `${apiUrl}${config.url}` + + const params = config.params || {} + const data = config.data || false + formatDate && data && !isString(data) && formatRequestDate(data) + + if (config.method?.toUpperCase() === RequestEnum.GET) { + if (!isString(params)) { + // 给 get 请求加上时间戳参数,避免从缓存中拿数据。 + let url = `${config.url}?` + for (const propName of Object.keys(params)) { + const value = params[propName] + + if (value !== void 0 && value !== null && typeof value !== 'undefined') { + if (typeof value === 'object') { + for (const val of Object.keys(value)) { + const paramss = `${propName}[${val}]` + const subPart = `${encodeURIComponent(paramss)}=` + url += `${subPart + encodeURIComponent(value[val])}&` + } + } + else { + url += `${propName}=${encodeURIComponent(value)}&` + } + } + } + url = url.slice(0, -1) + config.params = {} + config.url = url + } + else { + // 兼容restful风格 + config.url = `${config.url + params}${joinTimestamp(joinTime, true)}` + config.params = undefined + } + } + else { + if (!isString(params)) { + formatDate && formatRequestDate(params) + if ( + Reflect.has(config, 'data') + && config.data + && (Object.keys(config.data).length > 0 || config.data instanceof FormData) + ) { + config.data = data + config.params = params + } + else { + // 非GET请求如果没有提供data,则将params视为data + config.data = params + config.params = undefined + } + if (joinParamsToUrl) { + config.url = setObjToUrlParams( + config.url as string, + Object.assign({}, config.params, config.data), + ) + } + } + else { + // 兼容restful风格 + config.url = config.url + params + config.params = undefined + } + } + return config + }, + + /** + * @description: 请求拦截器处理 + */ + requestInterceptors: (config, options) => { + const userStore = useUserStore() + + // 是否需要设置 token + let isToken = (config as Recordable)?.requestOptions?.withToken === false + isToken = whiteList.some((v) => { + if (config.url) { + config.url.includes(v) + return false + } + return true + }) + // 请求之前处理config + const token = userStore.getToken + if (token && !isToken) { + // jwt token + (config as Recordable).headers[import.meta.env.VITE_GLOB_APP_TOKEN_KEY] = options.tokenScheme + ? `${options.tokenScheme} ${token}` + : token + } + + (config as Recordable).headers.Authorization = `${options.authenticationScheme} ${import.meta.env.VITE_GLOB_APP_AUTHORIZATION}` + return config + }, + + /** + * @description: 响应拦截器处理 + */ + responseInterceptors: (res: AxiosResponse) => { + return res + }, + + /** + * @description: 响应错误处理 + */ + responseInterceptorsCatch: (axiosInstance: AxiosInstance, error: any) => { + const { response, code, message, config } = error || {} + const errorMessageMode = config?.requestOptions?.errorMessageMode || 'none' + const msg: string = response?.data?.msg ?? '' + const err: string = error?.toString?.() ?? '' + let errMessage = '' + + if (axios.isCancel(error)) + return Promise.reject(error) + + try { + if (code === 'ECONNABORTED' && message.includes('timeout')) + errMessage = HttpErrorMsgEnum.API_TIMEOUT_MESSAGE + + if (err?.includes('Network Error')) + errMessage = HttpErrorMsgEnum.NETWORK_EXCEPTION + + if (errMessage) { + if (errorMessageMode === 'modal') + createErrorModal({ title: HttpErrorMsgEnum.ERROR_TIP, content: errMessage }) + + else if (errorMessageMode === 'message') + createMessage.error(errMessage) + + return Promise.reject(error) + } + } + catch (error) { + throw new Error(error as unknown as string) + } + + checkStatus(error?.response?.status, msg, errorMessageMode) + + // 添加自动重试机制 保险起见 只针对GET请求 + const retryRequest = new AxiosRetry() + const { isOpenRetry } = config.requestOptions.retryRequest + + config.method?.toUpperCase() === RequestEnum.GET + && isOpenRetry + && retryRequest.retry(axiosInstance, error) + return Promise.reject(error) + }, +} + +function createAxios(opt?: Partial) { + return new VAxios( + // 深度合并 + deepMerge( + { + // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#authentication_schemes + // authentication schemes,e.g: Bearer + tokenScheme: 'crypto', + authenticationScheme: 'Basic', + timeout: 10 * 1000, + // 基础接口地址 + // baseURL: globSetting.apiUrl, + + headers: { 'Content-Type': ContentTypeEnum.JSON }, + // 如果是form-data格式 + // headers: { 'Content-Type': ContentTypeEnum.FORM_URLENCODED }, + // 数据处理方式 + transform: clone(transform), + // 配置项,下面的选项都可以在独立的接口请求中覆盖 + requestOptions: { + // 默认将prefix 添加到url + joinPrefix: true, + // 是否返回原生响应头 比如:需要获取响应头时使用该属性 + isReturnNativeResponse: false, + // 需要对返回数据进行处理 + isTransformResponse: true, + // post请求的时候添加参数到url + joinParamsToUrl: false, + // 格式化提交参数时间 + formatDate: true, + // 消息提示类型 + errorMessageMode: 'message', + // 接口地址 + apiUrl: import.meta.env.VITE_GLOB_BASE_URL, + // 是否加入时间戳 + joinTime: true, + // 忽略重复请求 + ignoreCancelToken: true, + // 是否携带token + withToken: true, + retryRequest: { + isOpenRetry: true, + count: 5, + waitTime: 100, + }, + }, + }, + opt || {}, + ), + ) +} +export const defHttp = createAxios() + +// other api url +// export const otherHttp = createAxios({ +// requestOptions: { +// apiUrl: 'xxx', +// urlPrefix: 'xxx', +// }, +// }); diff --git a/src/utils/crypto.ts b/src/utils/crypto.ts new file mode 100644 index 0000000..bf7be98 --- /dev/null +++ b/src/utils/crypto.ts @@ -0,0 +1,48 @@ +import CryptoJS from 'crypto-js' + +export default class crypto { + /** + * token加密key 使用@org.springblade.test.CryptoKeyGenerator获取,需和后端配置保持一致 + * @type {string} + */ + + static cryptoKey: string = 'Zc72Ghs63Z2b8jl7PXnr68r7B69xmRLX' + /** + * 报文加密key 使用@org.springblade.test.CryptoKeyGenerator获取,需和后端配置保持一致 + * @type {string} + */ + static aesKey: string = 'OPGbg7HHRiClg4u9euSPXt5Dtwed9qcG' + + /** + * 本地加密key 使用@org.springblade.test.CryptoKeyGenerator获取,需和后端配置保持一致 + * @type {string} + */ + static localKey: string = 'LaiJiangKeLiuXingMing_LaoTie6666' + + /** + * aes 加密方法,同java:AesUtil.encryptToBase64(text, aesKey); + */ + static encryptAES(data: string, key: string) { + const dataBytes = CryptoJS.enc.Utf8.parse(data) + const keyBytes = CryptoJS.enc.Utf8.parse(key) + const encrypted = CryptoJS.AES.encrypt(dataBytes, keyBytes, { + iv: keyBytes, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, + }) + return CryptoJS.enc.Base64.stringify(encrypted.ciphertext) + } + + /** + * aes 解密方法,同java:AesUtil.decryptFormBase64ToString(encrypt, aesKey); + */ + static decryptAES(data: string | CryptoJS.lib.CipherParams, key: string) { + const keyBytes = CryptoJS.enc.Utf8.parse(key) + const decrypted = CryptoJS.AES.decrypt(data, keyBytes, { + iv: keyBytes, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, + }) + return CryptoJS.enc.Utf8.stringify(decrypted) + } +} diff --git a/src/utils/env.ts b/src/utils/env.ts new file mode 100644 index 0000000..d1c8b66 --- /dev/null +++ b/src/utils/env.ts @@ -0,0 +1,3 @@ +export function getEnv() { + return import.meta.env +} diff --git a/src/utils/file/base64Conver.ts b/src/utils/file/base64Conver.ts new file mode 100644 index 0000000..8ed49ad --- /dev/null +++ b/src/utils/file/base64Conver.ts @@ -0,0 +1,42 @@ +/** + * @description: base64 to blob + */ +export function dataURLtoBlob(base64Buf: string): Blob { + const arr = base64Buf.split(',') + const typeItem = arr[0] + const mime = typeItem.match(/:(.*?);/)![1] + const bstr = window.atob(arr[1]) + let n = bstr.length + const u8arr = new Uint8Array(n) + while (n--) + u8arr[n] = bstr.charCodeAt(n) + + return new Blob([u8arr], { type: mime }) +} + +/** + * img url to base64 + * @param url + */ +export function urlToBase64(url: string, mineType?: string): Promise { + return new Promise((resolve, reject) => { + let canvas = document.createElement('CANVAS') as Nullable + const ctx = canvas!.getContext('2d') + + const img = new Image() + img.crossOrigin = '' + img.onload = function () { + if (!canvas || !ctx) + // eslint-disable-next-line prefer-promise-reject-errors + return reject() + + canvas.height = img.height + canvas.width = img.width + ctx.drawImage(img, 0, 0) + const dataURL = canvas.toDataURL(mineType || 'image/png') + canvas = null + resolve(dataURL) + } + img.src = url + }) +} diff --git a/src/utils/file/download.ts b/src/utils/file/download.ts new file mode 100644 index 0000000..0350036 --- /dev/null +++ b/src/utils/file/download.ts @@ -0,0 +1,86 @@ +import { openWindow } from '..' +import { dataURLtoBlob, urlToBase64 } from './base64Conver' + +/** + * Download online pictures + * @param url + * @param filename + * @param mime + * @param bom + */ +export function downloadByOnlineUrl(url: string, filename: string, mime?: string, bom?: BlobPart) { + urlToBase64(url).then((base64) => { + downloadByBase64(base64, filename, mime, bom) + }) +} + +/** + * Download pictures based on base64 + * @param buf + * @param filename + * @param mime + * @param bom + */ +export function downloadByBase64(buf: string, filename: string, mime?: string, bom?: BlobPart) { + const base64Buf = dataURLtoBlob(buf) + downloadByData(base64Buf, filename, mime, bom) +} + +/** + * Download according to the background interface file stream + * @param {*} data + * @param {*} filename + * @param {*} mime + * @param {*} bom + */ +export function downloadByData(data: BlobPart, filename: string, mime?: string, bom?: BlobPart) { + const blobData = typeof bom !== 'undefined' ? [bom, data] : [data] + const blob = new Blob(blobData, { type: mime || 'application/octet-stream' }) + + const blobURL = window.URL.createObjectURL(blob) + const tempLink = document.createElement('a') + tempLink.style.display = 'none' + tempLink.href = blobURL + tempLink.setAttribute('download', filename) + if (typeof tempLink.download === 'undefined') + tempLink.setAttribute('target', '_blank') + + document.body.appendChild(tempLink) + tempLink.click() + document.body.removeChild(tempLink) + window.URL.revokeObjectURL(blobURL) +} + +/** + * Download file according to file address + * @param {*} sUrl + */ +export function downloadByUrl({ url, target = '_blank', fileName }: { url: string, target?: TargetContext, fileName?: string }): boolean { + const isChrome = window.navigator.userAgent.toLowerCase().includes('chrome') + const isSafari = window.navigator.userAgent.toLowerCase().includes('safari') + + if (/(iP)/g.test(window.navigator.userAgent)) { + console.error('Your browser does not support download!') + return false + } + if (isChrome || isSafari) { + const link = document.createElement('a') + link.href = url + link.target = target + + if (link.download !== undefined) + link.download = fileName || url.substring(url.lastIndexOf('/') + 1, url.length) + + if (document.createEvent) { + const e = document.createEvent('MouseEvents') + e.initEvent('click', true, true) + link.dispatchEvent(e) + return true + } + } + if (!url.includes('?')) + url += '?download' + + openWindow(url, { target }) + return true +} diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 0000000..ca17b0e --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,81 @@ +import { intersectionWith, isEqual, mergeWith, unionWith } from 'lodash-es' +import { isArray, isObject } from '@/utils/is' + +/** + * Add the object as a parameter to the URL + * @param baseUrl url + * @param obj + * @returns {string} + * eg: + * let obj = {a: '3', b: '4'} + * setObjToUrlParams('www.baidu.com', obj) + * ==>www.baidu.com?a=3&b=4 + */ +export function setObjToUrlParams(baseUrl: string, obj: any): string { + let parameters = '' + for (const key in obj) + parameters += `${key}=${encodeURIComponent(obj[key])}&` + + parameters = parameters.replace(/&$/, '') + return /\?$/.test(baseUrl) ? baseUrl + parameters : baseUrl.replace(/\/?$/, '?') + parameters +} + +/** + * Recursively merge two objects. + * 递归合并两个对象。 + * + * @param source The source object to merge from. 要合并的源对象。 + * @param target The target object to merge into. 目标对象,合并后结果存放于此。 + * @param mergeArrays How to merge arrays. Default is "replace". + * 如何合并数组。默认为replace。 + * - "union": Union the arrays. 对数组执行并集操作。 + * - "intersection": Intersect the arrays. 对数组执行交集操作。 + * - "concat": Concatenate the arrays. 连接数组。 + * - "replace": Replace the source array with the target array. 用目标数组替换源数组。 + * @returns The merged object. 合并后的对象。 + */ +export function deepMerge( + source: T, + target: U, + mergeArrays: 'union' | 'intersection' | 'concat' | 'replace' = 'replace', +): T & U { + if (!target) + return source as T & U + + if (!source) + return target as T & U + + return mergeWith({}, source, target, (sourceValue, targetValue) => { + if (isArray(targetValue) && isArray(sourceValue)) { + switch (mergeArrays) { + case 'union': + return unionWith(sourceValue, targetValue, isEqual) + case 'intersection': + return intersectionWith(sourceValue, targetValue, isEqual) + case 'concat': + return sourceValue.concat(targetValue) + case 'replace': + return targetValue + default: + throw new Error(`Unknown merge array strategy: ${mergeArrays as string}`) + } + } + if (isObject(targetValue) && isObject(sourceValue)) + return deepMerge(sourceValue, targetValue, mergeArrays) + + return undefined + }) +} + +export function openWindow( + url: string, + opt?: { target?: TargetContext | string, noopener?: boolean, noreferrer?: boolean }, +) { + const { target = '__blank', noopener = true, noreferrer = true } = opt || {} + const feature: string[] = [] + + noopener && feature.push('noopener=yes') + noreferrer && feature.push('noreferrer=yes') + + window.open(url, target, feature.join(',')) +} diff --git a/src/utils/is.ts b/src/utils/is.ts new file mode 100644 index 0000000..c4c1917 --- /dev/null +++ b/src/utils/is.ts @@ -0,0 +1,66 @@ +export { + isArguments, + isArrayBuffer, + isArrayLike, + isArrayLikeObject, + isBuffer, + isBoolean, + isDate, + isElement, + isEmpty, + isEqual, + isEqualWith, + isError, + isFunction, + isFinite, + isLength, + isMap, + isMatch, + isMatchWith, + isNative, + isNil, + isNumber, + isNull, + isObjectLike, + isPlainObject, + isRegExp, + isSafeInteger, + isSet, + isString, + isSymbol, + isTypedArray, + isUndefined, + isWeakMap, + isWeakSet, +} from 'lodash-es' + +const toString = Object.prototype.toString + +export function is(val: unknown, type: string) { + return toString.call(val) === `[object ${type}]` +} + +export function isDef(val?: T): val is T { + return typeof val !== 'undefined' +} + +export function isObject(val: any): val is Record { + return val !== null && is(val, 'Object') +} + +export function isArray(val: any): val is Array { + return val && Array.isArray(val) +} + +export function isWindow(val: any): val is Window { + return typeof window !== 'undefined' && is(val, 'Window') +} + +export const isServer = typeof window === 'undefined' + +export const isClient = !isServer + +export function isHttpUrl(path: string): boolean { + const reg = /^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?/ + return reg.test(path) +} diff --git a/src/views/conversation/index.vue b/src/views/conversation/index.vue new file mode 100644 index 0000000..d8db631 --- /dev/null +++ b/src/views/conversation/index.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/src/views/error/404.vue b/src/views/error/404.vue new file mode 100644 index 0000000..712cfd4 --- /dev/null +++ b/src/views/error/404.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/src/views/login.vue b/src/views/login.vue deleted file mode 100644 index 65c5dc5..0000000 --- a/src/views/login.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/src/views/login/index.vue b/src/views/login/index.vue new file mode 100644 index 0000000..36c5fdb --- /dev/null +++ b/src/views/login/index.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/views/textToPicture/index.vue b/src/views/textToPicture/index.vue new file mode 100644 index 0000000..512b931 --- /dev/null +++ b/src/views/textToPicture/index.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts deleted file mode 100644 index 11f02fe..0000000 --- a/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/tsconfig.json b/tsconfig.json index 0bd78d5..ebe8a0c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,9 +10,11 @@ /* Bundler mode */ "moduleResolution": "bundler", "paths": { - "@/*": ["src/*"] + "@/*": ["src/*"], + "/#/*": ["types/*"] }, "resolveJsonModule": true, + "types": ["vite/client"], "allowImportingTsExtensions": true, "strict": true, @@ -26,6 +28,6 @@ "isolatedModules": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"], + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "types/**/*"], "exclude": ["dist", "node_modules"] } diff --git a/types/axios.d.ts b/types/axios.d.ts new file mode 100644 index 0000000..94846a1 --- /dev/null +++ b/types/axios.d.ts @@ -0,0 +1,54 @@ +export type ErrorMessageMode = 'none' | 'modal' | 'message' | undefined +export type SuccessMessageMode = ErrorMessageMode + +export interface RequestOptions { + // Splicing request parameters to url + joinParamsToUrl?: boolean + // Format request parameter time + formatDate?: boolean + // Whether to process the request result + isTransformResponse?: boolean + // Whether to return native response headers + // For example: use this attribute when you need to get the response headers + isReturnNativeResponse?: boolean + // Whether to join url + joinPrefix?: boolean + // Interface address, use the default apiUrl if you leave it blank + apiUrl?: string + // Error message prompt type + errorMessageMode?: ErrorMessageMode + // Success message prompt type + successMessageMode?: SuccessMessageMode + // Whether to add a timestamp + joinTime?: boolean + ignoreCancelToken?: boolean + // Whether to send token in header + withToken?: boolean + // 请求重试机制 + retryRequest?: RetryRequest +} + +export interface RetryRequest { + isOpenRetry: boolean + count: number + waitTime: number +} + +export interface Result { + code: number + msg: string + data: T +} + +// multipart/form-data: upload file +export interface UploadFileParams { + // Other parameters + data?: Recordable + // File parameter interface field name + name?: string + // file name + file: File | Blob + // file name + filename?: string + [key: string]: any +} diff --git a/types/global.d.ts b/types/global.d.ts new file mode 100644 index 0000000..b184ee3 --- /dev/null +++ b/types/global.d.ts @@ -0,0 +1,98 @@ +import type { ComponentPublicInstance, ComponentRenderProxy, FunctionalComponent, VNode, VNodeChild, PropType as VuePropType } from 'vue' + +declare type Recordable = Record + +declare type Nullable = T | null + +declare global { + const __APP_INFO__: { + pkg: { + name: string + version: string + dependencies: Recordable + devDependencies: Recordable + } + lastBuildTime: string + } + declare interface Window { + _hmt: [string, string][] + } + + interface Document { + mozFullScreenElement?: Element + msFullscreenElement?: Element + webkitFullscreenElement?: Element + } + + // vue + declare type PropType = VuePropType + declare type VueNode = VNodeChild | JSX.Element + + export type Writable = { + -readonly [P in keyof T]: T[P] + } + + declare type Nullable = T | null + declare type NonNullable = T extends null | undefined ? never : T + declare type Recordable = Record + declare interface ReadonlyRecordable { + readonly [key: string]: T + } + declare interface Indexable { + [key: string]: T + } + declare type DeepPartial = { + [P in keyof T]?: DeepPartial + } + declare type TimeoutHandle = ReturnType + declare type IntervalHandle = ReturnType + + declare interface ChangeEvent extends Event { + target: HTMLInputElement + } + + declare interface WheelEvent { + path?: EventTarget[] + } + interface ImportMetaEnv extends ViteEnv { + __: unknown + } + + declare interface ViteEnv { + VITE_PORT: number + VITE_USE_PWA: boolean + VITE_PUBLIC_PATH: string + VITE_PROXY: [string, string][] + VITE_GLOB_APP_TITLE: string + VITE_GLOB_APP_SHORT_NAME: string + VITE_USE_CDN: boolean + VITE_DROP_CONSOLE: boolean + VITE_BUILD_COMPRESS: 'gzip' | 'brotli' | 'none' + VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE: boolean + VITE_GENERATE_UI: string + } + + declare function parseInt(s: string | number, radix?: number): number + + declare function parseFloat(string: string | number): number + + namespace JSX { + // tslint:disable no-empty-interface + type Element = VNode + // tslint:disable no-empty-interface + type ElementClass = ComponentRenderProxy + interface ElementAttributesProperty { + $props: any + } + interface IntrinsicElements { + [elem: string]: any + } + interface IntrinsicAttributes { + [elem: string]: any + } + } +} + +declare module 'vue' { + export type JSXComponent = { new (): ComponentPublicInstance } | FunctionalComponent +} diff --git a/types/index.d.ts b/types/index.d.ts new file mode 100644 index 0000000..a608579 --- /dev/null +++ b/types/index.d.ts @@ -0,0 +1 @@ +declare type TargetContext = '_self' | '_blank' diff --git a/types/shims-vue.d.ts b/types/shims-vue.d.ts new file mode 100644 index 0000000..9a74572 --- /dev/null +++ b/types/shims-vue.d.ts @@ -0,0 +1,6 @@ +declare module '*.vue' { + import type { DefineComponent } from 'vue' + + const component: DefineComponent + export default component +} diff --git a/types/vite-env.d.ts b/types/vite-env.d.ts new file mode 100644 index 0000000..4616d11 --- /dev/null +++ b/types/vite-env.d.ts @@ -0,0 +1,12 @@ +/// + +interface ImportMetaEnv { + NODE_ENV: string + + VITE_GLOB_APP_TITLE: string + VITE_GLOB_APP_SHORT_NAME: string + VITE_GLOB_BASE_URL: string + VITE_GLOB_MQTT_URL: string + VITE_GLOB_APP_AUTHORIZATION: string + VITE_GLOB_APP_TOKEN_KEY: string +} diff --git a/types/vue-router.d.ts b/types/vue-router.d.ts new file mode 100644 index 0000000..05629a4 --- /dev/null +++ b/types/vue-router.d.ts @@ -0,0 +1,19 @@ +export {} + +declare module 'vue-router' { + interface RouteMeta extends Record { + orderNo?: number + // 路由title 一般必填 + title: string + // 是否忽略权限,只在权限模式为Role的时候有效 + ignoreAuth?: boolean + // 是否固定标签 + affix?: boolean + // 图标,也是菜单图标 + icon?: string + // img on tab + img?: string + // 内嵌iframe的地址 + frameSrc?: string + } +} diff --git a/vite.config.ts b/vite.config.ts index 5938e5f..8831b8e 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,10 +2,19 @@ import { join, resolve } from 'node:path' import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import UnoCSS from 'unocss/vite' +import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' // https://vitejs.dev/config/ export default defineConfig({ - plugins: [vue(), UnoCSS()], + plugins: [ + vue(), + UnoCSS(), + createSvgIconsPlugin({ + // eslint-disable-next-line node/prefer-global/process + iconDirs: [resolve(process.cwd(), 'src/assets/svg')], + symbolId: 'icon-[name]', + }), + ], server: { host: '0.0.0.0', }, @@ -15,4 +24,13 @@ export default defineConfig({ '@': join(__dirname, 'src'), }, }, + // 全局 css 注册 + css: { + preprocessorOptions: { + scss: { + javascriptEnabled: true, + additionalData: `@import "src/design/index.scss";`, + }, + }, + }, })

*G*Q;f69qNb( zh>!YjBUk>%mj7*g*meF-a5Fgn5zy&A^Yt?2A{_p><^U1H#LYZ!Dl|7guB{pK+G?AP z50UzfVg0SeugIyaO7>RqsU(r_+G7&AtAzPEBpT$z4OU>t*S_q|Bg8TeiML7Rl0ouE zXFnjYU^RY8LZzNz-zB=S8~=m;Yoa~-Q%0~GLy39PB;DB$l55*~7pcmG(s^X(Y7`qC z|M}FNc54=-*K6F|2quFGF!x_Q!UsKGqeBeGd@Y#%pfKQDk7zkIs5sSF6Oxr91>*vX z_cJ~X9LMCUv=snLwpi9!+&&dWP3Jr4D3LWBA`zDjTrPQ>Amg6!OM~1eu%syFuhvAE z{ZHcm^kM%C`tSNrCC8%)iaq~F@Lz7B*qe5Z9q|QVy*={vM-|T*fa1)E3Z^K}8;Jr| zgk~(vDmFr>(I)*LH2d53k1kmC4)G-VAML&oIUvk;c957%BD1XSMy(BmdDrggBVaV| z3P}uN9LfclQ{dU4e1(1Kbl)DwpZ_FFab=MFjpqMR5Kz7=2bxeWR~pmTQvY?#8GOf- zJ-6d(f2QLFcIv18cJ=>ku)8DEG}&=H%rN@#Ti$<*Ky$T?A39UFAZw_K4oM1G{F6EaaTJ$%2MS*V87*cwT=HGK(B0Y{oaTde>V>Di^5Hc0V1(1lI{;=UjnPfwZMp{ z63XN{$|&J82I(SwCCrpH04iK^DqYRPQCd`vKCYJtJwZY+Z%gW})e-o#*lWcC3K(*? zc>h!FfAIcC@L#Ga;Q#n>{~`G+qe;NZ{*PrbN+&_-Xosa3b`uVN%f+@0!&z2UlqUbH zsFh4s4Gf)g=vHC++Ygale*E?URrv=149Wg4Nj00$wqsCHtA$zuYV6V8> z*8HAY`8D=zDakDTz=o53`(^%^xP$S)^Wvn$G3EPn*f%p!Hi8Uc$9$!K>xO{!_eO1U zZ6p8rf3FBfpjdm~5Rd*QI1&M0p?KqGaEH#kn*-1%`(dCsSY6Ae$Q;w;VkoTbC<#p| zg~_Mzw^EZudx@NSaMqky_AMpqv{QHpaETH^QU&eFL-#qcI2b7kxuE z1x(}AtRf-+>r^rT1lD|7V}P@47rqABBYO{m@?BS(m&@x~>`%^~zI3nzWD)zk6W5|2MY zw*)*CfFcC+-wMP5{IBhMLJ2t2YQdSs0Af6&QwbQufQ_4-|EqzfWhxt^Tj)nr6|LkMN61%flAT7)E=6w( z7D7#05nf^+Dti+1EbyN!V_<(+{Cn&_xZ(T(KhdAn_OatX=#(%uKd*dgj#7&+8%J^# zG&k;3Kt}VmX?@zl?r#k-H$SL?j2vlNkG^Y;HSa>Q@+!jKeBaCVWDSLwhaN2$mjdnz z`{8KX9+X@s8|o-XEqpA>ACGT(-Z6)93;aiDLY}e89(=3(KNf#PcZ`_0==kA&)#M&K z#`hd$gP6F#;e_alHLGd5VSst`#=)BTcw;;&0R688vdX)f6%}0myk7wB%bubOK zu%RZ`GfM4s61i@&2ANzoC}QL!UDjn6E}pVTV|-{=!GcG3{9N`0w;zmu-~Z6^e>DH) z<~cfgBmW^Qw~cyyLDi(^A9njCzWK=w8%Q|H>!)QQl#Wzz*;L$lheR8tXR`e5(8-#) zj|wny_0ei+jLlite5Hq@JS8J@%<;BpBNwvr!6H+akLC`S67|bPI!<}2D&?=)Y$$&l z2bk={=2qUV?R(=7COgaJmoJr1Y5d~<$>!OA-2ZS|ksagl@ZQ|;)8Q%3u#59cAo$b4 zE*e;G8*x)1vI)~ohd%w0|N6kR6}e$opg zVbfIJPZR7~H3H)>iqGuRl&|aD>f*=OUH1QuKOgY_=D=Xkr!cYQzbs6V`(&Jx!sphs zy9AW)tD?ToF#0ZFDi`u+0pfRU`ub7O`Q0EGl{kq$%OB2wE;x<^&7bjm3$ouA>^2E? z!^OStuEYoWAIIi)_lsJx9qWMdR^#T8RR_2q!cSuk*(H`)iab z5@th$!pRQK7bXsZ-M+n4fsgpNa6gwrw=vvH@%@C) z9fT>Lc|HI4*)hDP;r+=CKj+q!AF*uw6uK%T7xn%7&jQ5qseEKe#dl*+u{03ZU=qCk zMC@MipkWk1d_MrN7%`U+#uG>Srv&kk^%jhJjZbpDkB|{l+R?DL3wdvR%u;zY6irM$ zfeP|5E%2YR<^}$@{aNh)ypnZU1*Ntbw+OPCv3|x3pt38|>-V1-pt>uJ^|QdYY#SEs zQzlUZr7b7dbLi97OIQW_&_=*K+Nxy0ceT=*%KuDPX?(2) zZ2Qlh)okDLU%PBpS5UOM;k(Uczh%BFQJ@_BZAYXiLeuC^oIoRH6<(&{Xi|;~Od%e~ zjJpAH-9QMtQE)4)f3_%A*wm60g__5i?!H=^et-ZR+xNp!Q9I!>0N0(5_7Kt2_%Kxd z>S@Nr5`R*|{~G8=x6HtQX&1O`k2bhmfldXo9lUzUim}6cB=DkB>Tk$WF@gO}M>I0i z-GbEL9MApU5S3zj5s_RaQj8i5AYMIKEq*mgh>$A0i&W|=E0dL{a23eOzvETGnrs@9_{&Tvf8))b^MlnG2P z{0Jp{nQCvhZ`SbW0=&u!que?1D)#eJt%}B>q1dadEKdO`tvPB@ z>GI(9Zl7XNB&V45NdxDAJp`|s5i1$^WMZ68u9i2%rtuPRm%nP;&r|SF!mm`-j|e{=T}DInkpJub@%B??UnIjp|1f{4)qCE7b#26jI342)C7VMU+?B32-d}@6`rnx^ z-L4zwJK-1waFPZo4E;gD0B`*6hpoTcFf|3hJ_Y$EWAPT#%w=Cp9yQZ^wIdSC+o!5~ zg;&aC%LsBX=O{dW!`^1t*Bs~l8^@QF1#e?JEzdI5KFp5m<_4ST3g)7PYd@($0TF2* zF$6U^9RS1yi!VyL@jIjWyH2kzPnT~o`yY+4^?PgMy9*hGai8=q)GTDovHz=V91AqZ z(i@SA^j$7SMx-RdxJ$<^OK{_d65Z!(Y>DceR_D~AyxaJv72{(PWBwoS`hWVU|9L}U zy(U4?-CM`u&q)1Ry30_r1~5cz4d0*8ngAP3mfciXWcqCJE{3NJUqosZWfC+|N1XK( z&~gKAgAT{nW@dszxd1vvf=~xxzFj|0Dg|)a@*v-Jh(yUWLd+v5SB>cZvFCqm`~TYW zKeqipKJY&rnFW{Yh_AONU=#S1LS*|peH5+vg^(ISQ0|U-as&5QNjEUIwIZi(dI{qlb&w$U=PbVD`ZBX}CckX(Y}Fcme|2=r^SiwF{D0_gq2Lb(g0Fr0 z1jTh}*0Q-~0#>t`D`=1;)0rHZcTY(pGm+v-&22IQh*v?<(F$>; zrKOZiN`Fl_!5WU!gl(Y`_$$7}9*~-~=+fab`_QnrN=Cx+nv(JJDG##Hf2}Ak^k3<7 zf&a}!q?4>5Q-)pPv%vso?C795C<=ez1xDj4WQ1XjIA0=mE6Q;`NI=KNY?%71q@Ma@ z9Wi_2ywN1-h!Dl2Ml*>#kvF7zA#+y9RXE<2scj0cverZ-$xx_BkO9X_k>+R{55~9S zmH$}90p&%t8+eC5=i|_6kvArtrUNz~$+`OLm>wo5?bqQ}&ATyThQbTN#SX%!1(yTh z#_?s@_|b(mQez9g<-4jzFI9XHsT{>>RPZx?rx*aD1qxduES@TvZ;=v3R+NncY{=|p zjVg$qjHlYZH$DhA_R%2*mhJ$Z6Ko_K=YjvipyofsxUZAd5{v(p{h@@6_QJ(05>R#+ z@j-J#&QbK*8x}JP=k1}wC8ATz=2YVa;FzcT7d?I*m>q{s41gT$0s|kLHbPhzAVyEC zZr;zeX1y;#m?+7?^KpV&ZO%p&Z5*e+MmjEBrI$@+Pee~;e~fs6Z3@PrPPOdf{aNI{ z2AV*w0ggETD`uUXeNPv>7Z=VOVIMa&8@)uBC=sSt2CLx79U+)r2ZnONC4CFR)Wx7z zcU)PP)gN;nAv;uv#27$B*e5tCQA=k5F2H!uixg!_RSuAkfV5=MXVlwIft{fL$|Pqvuy)#|x=@vQbL z72bfKzS7G4VsJ`SNjr)?zD_p2Gw6>$HO7Y}$>je>#_#(N;Fj}~XXJPnaGebLIM-2L zt{FgX&Mni~jM48e*T(E-oe-6FgBi)s3a^M`7ZSAS*2ootR|*wg46ORS07r^JD>j|G zZ>Z_P2^n?)BG6>n&gE$>4?Z6?bpTD|MCC!P=aT)AqKpJSnj%#?S#0mN8@o7&%Y-obFq^Eyt04cZQ#_4d zg-B-1{mdwgh)em%a5lW;mp3D%!d2Hl^yLjrFA%H_ z=r+jJW3&b94#i&UAOX^^au6yjr)X+(1q)#mEnQFtzzX}u_#&RaCX|aU%B;sHRoRW- zvG4l7(!L)5m>vt)tz_jrN68d8V3zPQXRLtBjJzzi2@2&n;L^r<0YW8!3c0>GvUC)i zxN)l~NyhIUk=MHv3vs7Q!UT~|c#Z^BQbak-8;3NyQVJCKzs}x@G}S_<2@;FGz14U? zTy*x@m*D;Rp#8mx_-jZRWBFU%XxP6-9I7U zhKU*sX?zxK#Z!LH@qDox_N`qtdoaH2-m~xSrfQ?>KWKrK{o?VTmurVUM~M`K;boHy znh%y;hfWCN=u^jM!%v+3jaD7q4n7!AXkw_~uudUC3!oUe;=50dDs;V4G7S~Tt{)q1mfw%cx51J zaT{ft8vw6DpOG%PeROr%4*`^6#1!k1x*=)Cacu*s!%LNcy(pFD7!j9~n&eUHr^73$ zhT6u$Qcfa;Masvp0tV+bZ=XLJBqSKtjBmX;D$S?>)bt;EZ32ijq}rhW*zfr2)qV+S z%6ov_JFj=)(10lO@}O{Gp7T-Ti;JZvXW0>%bl0$h#T7Jj>tSpWqI@)%E8Is02WHdAa$d}QD8KZ*b4h}fsf|J;x}iT~xJkG1SI)S z2maJ{w|sDG8v`6EFx^(^d5y?A2B1XPB^;hpT_8L7_!VYCHAVDz4quXn@zwiZG5cs`A zgoQ_eK?%w=aTX3Xmc5$6*2k%XAMHxrXuayvn!YPK z9bWM`R!ua)6uGV(aRbt@seJYO6m}>Z4f`5WP8Y2Ge|_Z7QvYM9wL=D6FL4=nP=0MS z4Y)#WlOQXDYYTP?-0P-dT;8~1gdlLV5SG{%Ie6Z=LJ^No+_L-L8wEh3U>%F;QoTEc{ z<=xZ*N{aHO7ms6UwWk&czfe1Za zFRl*3pxjbmr##ey?0ur$cos~poGI1wd&R-NJ#lD-q@CmmExG&VcE=x*G{wyNTox=) zoXZl4iXie)A+~)S_wyi!Yi&O+7(akISRX9(hGHj=KjX~Czi$tzn2`7WD*ji$cNq)T zHf0$=X1*<|gLW_jt1!pbqAoqi^yy1y)*EL0stJe3D^2m+wn9|R%c-(Sjga&wz_(h- zPzSFRIZ(24Omg1i{F*n)t{#^S%Wu4WIAp-t#(n!G{H9?^O)Q$*1rSx*$5TPPKI~1#32$k;549Wq+Hnvmd zwlK}E7G|9*9Y)^!f7fqVb25T}AP&9ysD)Ib;q`#W)=CS;JANsh9s+Gnc zViDE$iiH+jJb-XCP^wbx4;qwtD!&%eH7M870)Vm(YPVg%@)i$Rj^(7vtMMq%;Q$Az z4UCIyR?E_Z?;yx=&ka3?sI>}$U76+}-J$DrZ+!UZtLBr(Bz3Meq{NHwL7JcuM@gI$2&^-JZ{|}%Ka~6WV3xkPmSDrx07)v8n zNg8FmtD;j#F#}QO{VUe`1{9)!P-$Zui9xp!d%aqO+6ZAcHOp>2p+0@Me*bsA?o5CG z#@FHY1Z+L^BiGidY0+ypBZX*9Gg$0Ggi6A4D=N4SFA?!7^nA543zL->`ai!9&NcXsE(FJX(d0QwBby3F*C`hR-@wgvuI%YwI#7_OwtY$;bAUl_RC zd?Ye=DsXX%^znc-Ky0aGw|PN=R8$FMx6$QT8wM)^RH9fxFg9$zTnVFFZch}teR}?A zgXa=(Kts*?MuD}U`Iq?ro^@?~f1$nG?v)Or{Wdl}+D0Fi(GelKAsakGjJ5u|{#O6rC*@7f1h*B> zxxi@KYDCz=j7%e39bPw>4)fG+A%UaDm+Q!}f$)kBU^!PDQC znf{4s_wUTCANn75?xH4mkL_*7nW2qAi3S^_!)>#m%zXS3@AnrX{xt->XnBH*C$Mn5i+@M7+(72&tMhQ=>rvVCo@AL8mQ$ z0hUd&Yr{IMZ?=hG>HxiU;hjHDjOakTb)~{{QC59X#-wsW5GTftz)=PNi$#Q|6WQ}w+oz@*ph~cKz^y}FHCSn z%cmp7aJpNNJ>nPfHLgF}Y#Vv{&}36^U?WVtaj}HOxM|~-Yi--IK*grMTk*+G`k^$Q z7`1#_F8K_YRwoeul>aIm0#|J)5WE^LUtroTQBhSu++knzbG+}u9R>3Y|;5!nl7c4Ykg+=Rr1ZB@c+Gk zqNSlo%noy<0MuRhB(H0o$^dpD4M$De>(W;SYsPM}NB~H8bl7!ZeQD>^Kxql{dIfIb z(HFZREj&dr6{Cn=t$E25h8Jlq19e&F6J!1({*U`gy`%m@!zH2@Q(}K+rMt?RZ75k?8XUV7g`0G7UdS*tdx(Gd&qI$-BGzzbcbm z!bUx&Tr_3>{r=zTC_3$4sZC+q0HW^_;QUnc3_f^mi`5VbY%myjVKyZ~t#SngZUOX_ z*BeA1wnCgb&_PoH3ggsTOPx|~RNiy4(geg>)>&Nz`7${s z{UiS0F!6puck}B--t~;*@p2^DF23KJK(9>@kA(s$&>Xi_44}CeKUE=G-Wc)%#X|q~y`deG)U6gSAUH%WdtHNt@yO#5N!B+A@ z;Ev^G%_=fyC=TXFG#NT~4QP(7{)0QD+YB4V&fk_C>&2)4Bi%4p5+k=9#d0UCd&fT6 zO)C|9S|y__%2*e~g{zwwI>Pc=8R!fAKPcu3fM6y~y8Dh%4GqV7E>>vn1dh8p;YAxY zNW`*kb;LpXTpY#9SW|tt0OMJ1DJI*u-QT$GVsvT=CyJUc?kW?{idfZ>A5yGxw!IxJ5 zLE}qX$EyU(>~}_!;|pk54(=}ywz|gHo^;Yp8dheh#AFMknI+=(68-NB{l7Ig>}Is> zk})6QGC?ty05s-~ubgvGHk~6*0P7C_mc9#Vcr0I?8l;OsLa*ng`FgQ$e@L#QMX1-B zZi#Ct$0|CjQwg3P)_<1-@_lxBJVh?an)^2K@ALnV2nu<7CkOM!E@93q^R;3njn;)v~>FjF@C{OfF{K z!1s=Dw~Tu8WE}6z$x(yXo$G^y*}vR`_i_0kofB838+`Qi}`A?ha>pU|dJE93ITOHoq$_E3hV{Tc0rPc*cj{yTPace74ZG zRX^M~&2_ze(@O|?lFHiYvePy5W%A8O{2%uamX%9ViWZw&N@&+|W0&@t(K8}~3ns2| z&91XcIVh2ai(Dm0*hoCE zf!hNo=uJ*m>esR<3}UP$478w4tJg=^W!cW_EB)VJi)6Da39s*9*kMf>!I4_cg;B65 z*M8SXR)+4RU*c3$f{0>Km6Y26Zy~)sh83}Pg(9b{3GV8Ok_VXM~x8VL$2{7(=21(&ePA}x?WfYJf)4E^G29ZsEz|rS$B3U{vM=(# zOv-hF%!)KlF%5Ra6hYp{w_eHSJ)C9dWELdZpSiqz|1jDGcc&<>}2$%h<3 zk#3PLN_qG0qy~56#zD7A~IGM8MA{w&Y_x866Wn~f1th)w%HsXO! zRLYpX0(`Fx)pJ{;BwCN)PC-Qr3ap>PI$-rO%{KFO zr^rr*y9`W^zw5L9?-R_MG8@9=2xy}`blgTJ(e?|?K>u@6b|VJ3Gt0Yx)dv6#`>V^e zT);qPzRcK)Cb!M@?<-CHKJiM>kGNkWXYA#D54(Lv)V8B|Mu?`sDPHn zEncK#u^pDwK;KaiD~}p{eXT;Mx6D&*ybh2qxHQ7xTYuCE0D72K2E9YN^$5cb7~7rmarf6_(eC;np=PESt(7Yl>gy|2sMrf>JtDQnVx&s=Xt|Y7nuh z%sZMAsh=j8vW;AgXz!A%i(ma;p<=hAmY<=O20bLv4nVKoz5!p15GaClMV+Tr9m`8% ztnRcZ1UBz@Oos>yOYvNn!02NCI!mpix@{VOL`4IavRf&`KvV#b!r9-B zL)ePU+IS&rVqLp}FEnkm_>VTOPBdt8XA{28;K|ra@v#&r>nbaYl8+8p7qRbG_&-O7 z$-+M0L__G5}FKoc$>tNCMx)(oaIJ9XJxGa{n&5jyvjxWDy$+ z+*spjX~gW56lBMLb|z$b;~u}-B;$c;p| z##o(xM8wcmJAfS5mZpkf>qTDuktE%OFm20Txt7bd2*bo*XcQO-Q0o9XaDMu$DBOenyC1B(-#H zR{Fn3wz&PXT%fx5T`R2JUVGvLJ8s2d3ml=eWmPg{K@gUu{AHw~98653J>hyMjJt$) z1(kPQvV~aTU079JLQkz_WYX#Oc=KAjzMMMM&bqtuSBUdPJHw_lzfUYzjLaH;m<<{E7VIS8j zxx037f&g|g?g*en{}!QITuUMsV0T~%7M3O8a?)=0+5t^ZlZ1kIfJkW6)iq z_U~%m2i?FQXNe#+WYp&S{A&9!^c z^aMbua)m3+aeE02%E9Z{=+NOHfpZt6&jC{$aW(9)5R7fM0Og$prgi#ET8~F_WLk|* z+j3PUY9#AFsIya!>m(UV*l4wU)19W5Br8k(hky_3BFU8saD@ufq-K}e_iD5Ju&r4$ z*=)|29Ql|DGIM7m;kCcrr;!y<^NOhv)c^}X8~ueo@frX>K)}DD2nlx}Xjqnkxxgkl zMHA92`z^qTc#-h65^#(3#m@LWcI;2n@iYF1J@+3pHfZu1xf6^ltqDY&x=NPt0waj) z*RXTNu^OGJ8@W2t-3#pYEUGsO;sD2;TmIsfC{%=M8^EvInr>qaQ$5d5E90}3@nVOK zx`{}S1y{4|BL9U&0CRi9S!&8-%!0{Rez%(ZYQtC>yvR(CdBEjSE{4N+w2BjR6@JupXhf^FG2lT=%eJJ{IH7*THT<>Uiu24C*EKH*@RxMQESZ9P_8rhH zk#g4hZ{XXficwfOYkZ2+WfPZ1Y}g5w!L41l4y+aXVw&mYB$(x$f`c|lz;!&Dsyem% zT}_6r;#ZVlZPLFAlsO8o3*v)y@pRae-)>PPgi#8qQ3vyMP|)C7}gYWE{@Z0cJofnVzwx{=*);f_*_ zVw_NP#4owny)_~WfVCteUOVO^|L5At9?r62Vvi_sd8?`j z9hgFNq6EmM=EmshnQO#b23#vn?ImF#{$JZlLR)h3XJC-5|7k%7&4P>FWyb{>@oHeL z{M-7t<$6}HYh@>x+|BlTN+AWxX_Uv+l_$LKA!(&ZpV#c|9kU9px)$1PFEH?#(@;&O zE|D6mK3wM7Yef{?OJZA&)PD$sx@{6_>>O+yVS*%b1(r=nt3xZ&ExOt`oFt|y%*&8{F2ZBCAH|v4^T33RTI6I zsh(Ax(pyNB(r05t;$WrEJ=JzgYr;M;$XpetmIY$i`JA`Pv^a#_dwCUcTnSzgG;orr z@Vs$9;;LzP$@I5`rPek&dQ`mg71^a&_L(7Cr+6_fBjl^5$|y8tV{t zSFtHP4q)85c%v@jdG#vnTpL*OD{k9m@kT7`NK}CM_e`T}a%pb=NMq0 zs{U4&wkQAS&Ry00#aUOCifP2z%t92b$ed89;v~POZiPE=Q0I<)yP)UkXWtQT_f4>-u;&sEO!|SMItl}Z%D4_*sWH2L z-XZl_romTAoLmrH;8Ax;R*6@{cp&FqbaGr-Tz)D1v|{|!iRh!Si0ytQX#T`^^~bEz zNjM{|E*Pw=6z;?@t6qrSoRWwRDeP;{U-m61RVHTW)CzDpPEd;7WBUa}3;nRw8Q0A< zuAgnFqRd8_$+rN?j`z>Rx(YR3nF^(V@G`*N9;7cpLRTov|{n~ou@ zo?Kd5J-h)^MPGFG)BPUmvvobUn)DH-b@7I1Ra=VosVX1)hVY?NM;@pv%6$ZF{;meeYY#2|59TYlS3G?jHpVT(I%_ zKaxVR2QS1-UmiDB2NHFq!kN`NjIryC=FBFiq{s~HK;WkKgVIIW?I z;erM?d+In0d&1?gOF?Q3IUX%&mdhL{gT~9>1?2!Dq6+|q)+z;}Ta9bmQR%ga1C2zj zn)*HRTK8C;itXy?v%#zbQ|!|xnC}lXLwxo0tySHTw)J+`kLZktJ7>S8kbz7S%PddD z39VR2Y@oNn&gb4mV7$3 z%Sf&N+|laUCZ-%7MyO2%cb^vMh;ofTq6Myv1wYM#G$TU;i%bU^4yING1^Lotj&Z<# zEhSX@3Pvgw{U9o6#8|K)Ve5cB;c#{9z#wpanP~}efAce+nW3y$NVOUuxmPc~Y{Dz~ zM|83{FziT+9rmfopidvZ*ndKT`6{rYxE~}$6a1A8eGj?9p=#V7mlBhzM+psHEnhHj z(usp9qZvckee^85myBxPNVe{Ttt<<0thvJ(U!IUVZ=eXOYsZvUjo0^HLTYFQe#Lj} zKZ&5vh@Yv5{E>KZopwn4M_SrGLG~cj2tr-pA}?WgU)~F+?mJEJRgq(ClB4s<8nX_&*kswkVt~Za0(CLEz8-%9k| zE(dw9b+3JFbja>~ZP$o)Zv{g%3jjwI&x2bcC};-Arhw3KyZidj>xtV5Sj?kcSs+=R zW)C96z5?qWTbZh)N~Zq6tF+vGm{YDN1;@A-=JXdnJ+%2M7W@oTj{93#dB{PP3^MFF z)!p-C*US=jsn<1Flc;XPQkdB2@x~7DR{OU-HF<}TLqb9w>y@m&%eut1h+Wbz_xv0Z zeB#R92e0sS2kuAQyXLf(&g#Th&$}SO3ZS3D*8t+rPP>oCe4mu90XFIlGw5x-+bbIq3Sj9f)_$;-uwR0h`<~k>W(e6@M|uB0%pO z&l_uU^B1jn#d1B0;h{WS<&F>{YtNfZfi zA|Ff&;C>F^(Whpd*Oy2>9xu}PAgL2#J`_j3M~6+7tCDuzMM}`n#q~5HHtnX7-^;5# za?nY7-kn$K!M7P3w5m1t2(|gCpwqQ`Rc+o%s1~qdI-(&g)2(D7LG;&9Jt|{xYQWxf zF4qD6_43W1kbdrm3UJn}st?dzo23ZbR zhx%!Sd+8nA%W5wW2L@l{MB$nx7zb8BmBujbG{1@#>ZpKLFYJI&`yI7UUy>>JfVBv$ zi%NwBNj|gAD*^VkSRJ|WP|tv=D(u$fU1*r#)&!!}R?};R-MN`yhmmN);59(HGwe7d z*g1koir@ezXWTWyo}rg`?OPn|ammXA_OT1feM?3lWGA=0CLl)V-KU2Pv?#V)$!bd& zw--C&1Nd`^DKyKkaAfeU+8|~1E{0v;)S5SmS&?5sKU1tE-;h@oUaOLBvTc+CTnpo# z`w>epV80irnxk0kCNu(0w4l~~FPxlV&r1%PQEU~+hE`k~ELr*JwEJf?#dVB3uLn?u zNMY}!R}8(QU+Tu&*gV^6;cmtNU1kkP!!rA`n8J$|_7up53cIee5J|Mv;2jCX7CIY` z0-+M8`h<1Y+3?W<$`PQ4SCVS=ZxG7u_w-@LdhFc#xN`vudd9`<zASb5wR$~$IJRpxr8zK-d-)%WUz%BCGQr`0tE$G`2|ksIAv8N^^v8VdDRs|)P;JC>M-R{6EjU$}RzzATAX9g6&WBTpS13@BcAl?uBj zl>jjs_8zQZ2MZ>5KFbMvTCIW_$kWHAnJyzPh%ZTu4Homd56Kv6Rm#4 zePn!BtJ+ACsMfBN%%1e0t`(#njMOc<#bBULuy#KD7{46iKCBi3(ij zV%qO2W}(q^TC3{F@JRLhTNrL$BCEa6IE3Z^R4PNaJj$g zM~saXHcYWk_EConb1}_G|Xpr{|-?3uW zIRGHw4kfUgs@vU%2UXaL>JMeyVedN+=t%(;^n<6O?mgxbuK)<}&xw;Nu*9rBY^7+@ zEnkF{%R}=42ed$p`Z%9fN;Z!(=q14Vh-7ona~DTUU3d0?2YVdA9-sZdQPB=NiW#6g zKTS*j+%y7YTeLdC@hLc7EY3{fE+vO5Rp*`qe2AkD4}ezd{!7BWPx6Q_<5))s^3MaA z`0?>9UV_EjGO#W?*xE%6Acn&H>G)5?i+vmSG}T5u&Cq$kMjKrxij}mo;7gxc zAr(R`6~;hfN*cZBU5IeNkgJL*fm4xLg+Xu8f}agFWe)o~0(KIqUqvwX*8Eew4xb&6 zNKE12uMSbDACWXjYSW}>VbA}2p?xwfhA#bxe^z!8{WGv*Ky0dSmAJGz74}K>LZ0#Cz`-IgXk+>=?HaenoDu_!{g`!hVQU8~m68>!Hm#~3 zao=wL=DYC<(-8<&+%@Nfh~Sk=Qtty+WlKNe3RY`RyGyDpi`X&u)G%;q{t`_!Kstt{ z(%`k+1ZD{*ckKfRzDOm6dWc~cT|_l1dmS3jI}H5aF`P^t_BD5w#NUBZa|lQ#2++11 zaYnG^WR$C=vBkc3;_0#Bzi(3P_anx39PDa?e6BR!cx-scdEjJHp{xy%`30Fz7Xr5ci8$vP$H>G)>Q{~q!P4a#QxOW)&kdRg#8$?V$eA) zE!X}~%Dw|8eR4usN5me|#zVKL9}(LTe83d3#L|IsLQuA&SYTFKqEL0FR00htje;FL5o1-7v1BW_A}@oLsMJEM zA{6*Z|4?Jjr}=VRNpy0b)}raXqCj89s*QcsN;|Z_B1T-oh%4jEs_fy~wCeLRLdBLY z!@(8%Z+IPMip?2@J|aTmt#UAw{KFUVde7_iOF1$0^qpY!qJ?}%wK~Ce4Cq~T3;6~x zRs#;HTC3ImuL79OXxIvjJD<0mogX<}lh;kV%-Yjj$lxwN zl=r;h;_kb(yGDc_4%noqPwkO|%B%4mzui#u9}< z-xX=&Kpj=Cn~=^Y^~?C?qfim#NYyNiRXVSo#k&~b-WW0LKA2ei(RlGW|DFS@2~{9J zT9;R|n48?GaVMQWjSN}-^iYLXaAcrqC?b^(_^=|1Yc*T7cf{u(4Wp}3~luusjU zVF9bU(47G2#3o;vi;6N3A1w-NEg0I>`Zi8qnPR70DbOnU(}D&Cdo|^ig&o%`JT!sx(s8p=*OUtmyh8jCp;(~7fQ13`|6-4*xdwj7gllhwOXI6MPo>-O&h)BJ z4EO&`+W&`Xu_<`H1KhrLc*UL~KieKyB;(?*UeT%^P}O|fih~aUxpe>@+~HI5MjKdb zl8VresC*wSRIo@O4K5`=IMCZE8bGR~W;2NzhaE)%9MRg-ZwQXxG@abR3cqY7qpY`haS{ z0AVZMErS*4QLc(y(DJKeLnCJOk2wgf1!8#cDeTs?W_70NMGV^eTNhux&%d*9D$kqO`%aXfP1|ygH1gKEg(DO_V45*x@PwZt!MSs5$e2$enfK*G^Xe>s=yWG z;MXXoYWYO0!AfUCf`mZ?fzgx!DI6S9L-6-mxz)i#L#CgEa*qXXEfqvZZ5NT;BKWO`G@bL z>s;igO>n?^pm4%5bS-JQ?+v}M#4n^#hn1+$vqu(mTF_8Hyfbr!dBNP?z^MN*-BU;Z zYsYY1@p*xc_-K5aVmeQ1OqJ{hndZTXELi;2W-tWtME^3a#QT$w!8C&SQfW!lgfUup z+6W1p0Mxu0TFjaQgG!45VShBqz0u@G4+6kbxAV$2Kk1>WFE=`OVoPkQMcGD;(P{?= zY;U{$kf&9dZ-3hD#fvd4%b>Af>dODL1he&UOD#aV|HwBsGRk-d#E8^Ji54i9;sJRF z0;c3N)KzRy{;CXY!akbukj75cxLN1yEwml$1p~XH0NC&4WmCa5f7B4%-4$iq<=HBH zlI!&p?&x`oS#7QKQ%%Y)Y3;P`?J02!I4kYwA=}t9(dymuGbY2=js)til?@M8Z2X=m zoM?0g)ZO_L6#%WDZ}M$?b=F^(`+VATZ@H~2du2hN@YqTj#A8=RR&#Y$}m~Xq7rG)K!QIc!`41 z=cM5*PT4@K2}4*X4zO-8IiV-){iA1EszR!6LQx4cR5(P40VFaxG@or8>;HBUs(<+9 zdT>Hx72l$4x6OiULCp1K>P2YrwoGR*&xTel3%kNF;;fdeHx?MwAP)O@ubalpw#2C} zHh=OadP0VeoaS1}yMvMc;gRcJ+zo zCvNqbH8hmlR^vY1InZ!=Xf3SaWD7+D7r#O+v;fql2+eNovD@!GwYr?RG4{aK?L+l& zv%}PEjvVWL#Ga1Wj~ySs?#G?nxnwG=pGHvaM>wpzF zj$ldJCs_1cw!}}I??{hulQa|3x+fe~hk2D?mUrFwbOwD#Bp=@24=9{kQ%q%((~GjT|2-WQafh^uSN& zhLNd>W>4fA4isa#CpK{d0k65C#F=uD*25A~y(F|*>J8Ld!3FCBFRDLKV4&oB!=*hE zE#_TpG|{jjU~9L9u)f3^_V<=iyAs#qrU!g2n!X9p@?Ll1G*^)!C|SG+rko|SWC23| z3ONifOhYT~ECn~%?dofZ)QipJZef4)6PCMw4z*B_0+*_TG<^mCIOOR5X=Ct58p#$V zVTXq7_edG2Lj@sMCxjt4=^A5ZMM(G?LZ;*TVFbt>@*l=hmHT0y8=ruh4 z$3#^xH)eSFa~P>4xVn@mLi}oY#TG{C3b2MTny+{{8>#`kW@YvCx`YuCxCBZFJN%6@ z`m*}eZa6qlS6Cww=Xz*B4FU*Bs}!YvwJZHHx{JMD+D#K&pU%P8=zLD?l3WQ1SQB8q z$xpH|>}v(I`l219w(-2f>hW+56)g6f)0%4-QaChA27W!b{P5^j=R7s1(IvoI&4M`H zR|;9{2}yO#(P-{~pcv*R#N5uFl5|++N32Kb^L&thV^#&N>?>`f|5r@e|~m?KM0E zT*n5%s%Ac>6s-Ftk_QHs$PK_86Ner2{~bF2Vi)7N$*pp#o~J|INvvSb? z5$lS(Sam-jRYynUoa+F$QD0X5yp zeDF>7fU4;FrXVY-8f<62l)2v0FPqkPktXp2Ov*&DK(wtCYV2x(PB(BrA5SL5vKG`H zNEGzDoqydGdjH95=WliRPj9$p?H!2Q>sl~^u5ELxvDX^ zKm?_HTC^c2MfozalrWWgD|ahuT30rz$Nyv%&9ygUc);t;rq(|)r=-faN$-SNt+`dQ z&VySUm8yO|R;CWE#}^$64U@Wga8FwVUCj4sC)Z|Huc>9(1xU zv_=`RVnKX;B3|@=d+rNjH|iK!?(!)(n7Zd9LN^qhvVu!d zbgN~rP)X~Gx?D7ivce`>G3mhTUFbi2*#!42em=ARqe)uHcIAn0Bc@{Y$jj-0%g%% zqI<@*-(qe0&?>zi(o-k?>i}!Xs|G9fdhOkFXGkX-v7U?ZgjOS5dtyOe;Ze)oGOZq> z@g==0kGkD7HdY@;3>ADs3M@H*WPB1>Pptga1<9fkgaZXk8aY6DX7a5`tim?VZS|Ck z-v7%O5BPLR4i)J6j>U7Tcxkea|FBI$1*&yHup9W6;23c^ukN*& znynw3(mMXP4*XxoqGA*ta$t=JETsMa)xCjo>pZSBm^b@vO6NItVoS94sjo#U@3AKm z0dxbDcmY`;%(Ev9p(Hh?Zi{28dFXRiFm=5n>u({S0`j(pKcJ19MjNDmz0ON+gXUrQck^8R}!Bph3$DO<}C8(fXvr4d3M%fB2#yf&ihhD51k`6rj{uL69fdfEq zS8j8abRZZ^R{j!>>x`Ay22??5_a%eKW#O&95WJl@@G<=8NBpf%5zBp#j;E_rrQpsF zKdFOx#%Q)#7nexmYG)WB{KsBBrZex5njkYevg*j1+4um;ujQ7!d6Z>(YT1>`cBv`@ zMz5t;=JDNzYHM{mE2`69^4l*F0lui45rWlAv!S2CP2=dcEMiHvyA9SGriXXG#y*55V&>d z%q^**Co+1!CC6tnF#1V46^N{L&0>Nzh(tn$aOkxImB3JTzU#;vu`oi`I&nJ3; z$UAruDdsw_W9VE4=ncnlql^YuDsX+GOLcTY`w)i3ObKdLq%Fz)js*2=_`wi{Ci+1U ziw$EXZ3~8EpkK=(b%7j9dEQd7f@Lgd!D)2e*|n|}e+y%CYq#4=fYx^@wBDCJ5>A%p zUz%if)mCZ2o!ro)-o}@4`i~!)-RB0?Nv%w;!LZnwgcL=qIEu(~W!(T_ z?Ch}AcMgm+vj8`R{0HSb{@X%p8Ko3_GSJDlY<~O~&9XU6pkJLaAnG6E$@kDU$l*9<#HMCUQvkwFVqk{gdiSz{WoJzA{aQadqHF&CBhn@ zcQCjdv7;(vH%b|sr0UR_XTJ4zBW%(6@naT@ORzrl-0|D3UAWIz;K~c9(Q95unI3K< zHyK(68rI?afc{7<{(%D25x#EdIqpL?#O;Y}k}*?=7(;H~p?=BLS76=#4(#Wv^zSk> ziyc=&_WL#Se{sB)rK`m|5y#HnEo{*U4TPOtCRr98TuZ>Rg)RPKx4-@N~%xXk2)HuxHLiVOk-M&W`x>xKfC zCl7vL(w_$#a(B@B;{h*@SgtgPJG3m0{rQ4l14&w6e&7z4&fJ6y@6)yyTkI}QqphT! zW!E!bo%}h{SW2w&1!Xk)5tr>G$D)<`<77E5KPNF7yBUnAc7i(&7iTUaF>I->d1vg5 zVW>+dyXxoz;79yXM+BooH&{C<)zX>Z)*Ylb zvN|=!P^{9oEVN#MaF^K!uIaUgLKm*vRv|Y;hxkKhZRqyM5Ds z5(o^I{nC>?a=FaSQ;hrQf;&CTJ9Kcs-T<7s;Z*`|k>UNdYorH5Xz+FQf)Qrl{E&!r zP*CoSZd7m>VL0wB4xP;$moRa#7p%Oc?dB%CiTSkl$JKj7GFhOV?aEMLp%HAO>14ij zi{r1QT;n6`2lHUfqH~pgozVk7`X}SiY@I$}iH@5b$D?PMI4)afD@on0BX{BOKnI(Q zC}0ugM$9k4?|n8R<_r;;BUTMo))ac)w#R#sIkT#AUbUI@;jLKz18DR({^O&YYI{g}caf zhS!Jrj&wl6j-(xk#de~lGa9AmM?6VZaB0RLFWK}4r@B_(?#A-nee*&h9N)+H+y7a- z`j2P&WCt?dcENFjhu`mM^!twY_nT<9|L+ET3-&+&GGGDyK)K4b)Zk`-IF_k0?Wv;| zwqWQ~cGk)E%0IA&rW*;QA^^^j7uNXY#%0I-thokpqR(@^N#Y z^lGjsS`H8Rt#@39t!_KIeAm|R!BT(zxV&MB{cJyN4$AR5^!7W}eRPq+j&6VF2OEF- z(`l=pEbr$jcGPcY(vI^Klef>giQ=yYk`K1g81G)_&w?uxIJZ$(RNCCU`x8GR1mzib z9ARXjv8aW1J`dxXHDguquQUrEcj)YPm!1q$bY1Jd?_}9}JB(Ie#c{v#%Od)Tz^0Hp z8;1wPbzNY7?6D)S9%!9k#JSoQYhqN{6*?Q83d_^TJ)y5`c#NdLQrnL z0P8NW{RJOyR82ZT*(SLx-7BE8kF|!K8;TF(muZ`Hn&j+VmVTcSo=$09NRdRQ6ROY& z=%u3;{W&)&c7r|;BNwc`>}#Ag>`y)V@xwn%bw|H977GTRuYjW9XayT=0$YpiqQYU7McOUz&f&ppV&}on@{A!q9Q-QZ~0s2SO$Vs9o_q2W-SH z0>y@~8x*I9eamM=+4Klf)C(GbdX1}_qom4t^l)ky*v7~Wvg_0&SdDv54V@8C_<{Yt z3dW!opJQ=Vuu9Jcae9{_unilh`FJ~vgz1imG2qhFZuJfZE6gnXiq#0pt$6NWyn@*q zTRng;!K7|>o9bW{2Gwo2BcD`qE1|-|=U~Ahi*@iiCBaexaP8D#vm31ALw0!d+ZTB@ z^X7Jq90CW3?m$mlPqv?iW`-IQXXiz5ZW{Nb9|XT_&V&z@bk4E3&CSU-KPM~uqHGyl z@*9WPcsMA3*>FosBOo+`v!N&IT5{)@yW6Qji(|N{6B5?y7=n?irBmV1qM3aiRhE(K zhvr9oOR_nwk^zUwxQ(c1Q4cl=XZGc;tr?}BP#U-Nb zhLk{m&R-uhvkl(lMP}OZ|Gm^=>xnd0-Bv~CyVJW(F}9(TU19p=0@^#iUe1l}pzPSO z>(>+0!&$knyTKFg++@mGkdeGu!>XLF>godY&&ifGSi)lEtcGbXbqE{fjol4$muR!~ zsuLwi+#dt`kky_=61f32XpV0v11aq9atf|JUOOy7WL|z&7;w(Mmt#FEi0ukn*xxy- zR5~BAXZ_zvVf7sG7`D0aFdn~cPG_&YIJX(q89uexneXf~=*Zf}z74w(fc>idf{o+8 zY3m=B8-|YC)T_I~H#oL}Cw%119Few0_#{fY)Uacon~&&smTVs;<8Tt+;5Rx^uwb@|f=lck5ejsOs&j6!D|MWJ*i-Pm;=xoSy;t1rj1O+swS&Qce zsK3%YMcag7i%rm6cmAywTl;%zAYpx+RMFx9$lmsmQG)$|jJUjT;@GGz62R)X1a|_C zyrntVb%>G58Qj>bWxd$RJAA!rT@eqMjilwlyj#Kd%QX2t8a6{vKWXVJxZXJ~v$JPc z7?(GiA) z#wEI*#xSId+in)#I5)E&(f4at&smqsQ^YGX{_5&aJye!b!YcohH)$ftvduyC~ z<7@2n8L}(vQK6^UO1;7L{S{0JK2PfOG?GuCcG_DP4&sH10)VMd5_B9lxFqAx$BPO| ztD`Kg)W)rcG&r#O#J;DBaTyIHfNaGpC*HbiZg38Oyqzkp3vNnatbq1efdYSL{vQbi zCdPI*%mJ%8`2a>pZ=E5E_M+lMine*fgv`{Cic3U9S)lJW0W9oQ-3!xYV}pz%tmaDe zB$aVd7|vJFV%vG2|1 z_II}YDN{L1hy(>I&vT|dRG=LjM+;kYzMQAXbGpLbV-~Nuy3Lx0g+x0VTjh5vr!6T@ z+H0_P7C_YXvV`O>*sY`2h6Gf!wv3(O$^@%c){>uBvv0nKfO$$G@1Eh}$hut$yfWh? zXZQqRr)D05>FT_`O^zKj`mpvS3F=&w#v(4hWfZ!gPaaV=11nH}VUFqs4alS9gZ+Oz zPti4+F|k{`p@xmUy#Dk#t8iJZ%F3*jA(lPPiq00buyFwl8gPLg#?PHFSN^Rn&7Dkn z`Rc+l8!NUjf)W&6mL#z3h{muEZqtZF77G^N+84>dNvW!y?PJPQ*Clz90R7{4wuh~< z7Enn*E5K3uW7yn=#$YV8VNT?QL)e?r6?y$e9tRDeyPi#J;DR$ArPz0Lx z9J39oB6zufi-}Zc76Q@(a2EbqP*pgwnYsKuQ%`r7FVaYGlN3mf9m2xe57syf{&6~X zVhD|SV{mrCh5Z%3JM>9m^Hi8iAt&^-omBRo*zo$GQt~3!G#HO(se5MCZRtd0e-z!q z72&0Zed@5*hlMgSgN=*dmuB?E_}G?e7@u+-g8J|6fY}wSs_n|;-Qa8>AeYMK!4;ZX z&>=fe8N;@Ga-9RcE!8m_b3S_z8&8sOX)FD0)MEb}m6fnGuiwqf zu=TLj_gXV0EUZ~cRn_sg-JQU+M=)r3OPm1KL0@zm*!^7n*u~(KQH6FxbMNn1v9`J*yB1UrzoplqUDmDI0IuX_e_O{OCOs-LkVTv@XYx@j~WdGMC6f{xI)R#IKnbrTLe!Uv`%Y%W+k_>Ax7i!>BltjO4%L|e1C6Az}qto$_wD}NH&;(!Av zQqNGX9eiHZAp_$JKESRSR$+A>b&UkcnNn%4bsXE8i<4thtogFzW(d9ldRuhyu#vz5 zcQK7NiUtmk_PzL2N1RF+g3F{ews`7HW^~i|ZN|Knrbk+P^AtJ78+hP08J;PsaF{q} zYRhIjA=)GtZ2t=;*6i#0<~;Jc)fQrL8_ot6F22|hbA|gDQaNu8RS>`TORj!IeXb+Va1Ai9U#|taEpKznRxtZ@@#EhrIjy(00TWGn9N z#jf>eWNGo8x>c_1o3%%q^ze64z8Bh$&hLFyd-LtKuz_3LuEW(a%YGg?Ctsc&s=>G$&#mmbr|esAS5%ty4HORqRb%^v4l(1g;yo7?vhNVB68oh*Vuos>xv}|X6HgGjp zwtj7}LCe-Dms#&0!kZgb#$ie>hdo%A8mF(g!hxIU?0aQGA>ifABz9eeZd$LuLYQJz zCK?v?3jb(}vQNuNSsmEr3iDa2nFB2ODt7o9rKoOq8a0LpobX_mrNc{xrEhQ?ymOA{ z9xW9|$q&Jj133*)1#*<&cGp-WfO(49&1vXws6nzohUu$Bzj&|srH*bt-oo2kH0 z<*&sLIi*eZ+#ZfS!hizxAHO4r+Z;ZeR4PyT{avhhkmI@BsF=QR#d+~iisEZ;%vTuR zN9v5HBBSm-#v`9?IM~C9L5dMTC9`jB`TGukmd*9JIR5%VlZvubZ=NEVcFkb6?13nS z=Z>YIYnBn2ItPEC{W5r=vRdhbETcg=_Iq+PXGcmS>L_hvWN$_m{^Av&`$y(%oH5r`;U@yt&!YP$}um!W!e2vu*d` zpgrYK^%4Rwc7|q?;59BG!J=+~9$HiKz70HKEbJKXaIQ0`F3eM8k%i_d)|c}X`;Ch# zp2IZG8phAn=$ucPQ>Xy9ADB#ax5gZM+t#`Alym!7@Z|t+uu%twX&8F6{h_Icu}>^s z8{3$-vkPX-Ob;-}%7V=roqPw!wvNud(o+eB{;tg~I#EwOQ)D$)Ej=er4Z3ECMKYS4 zjRE(@X$;B%J8^p>ErZdkKaHa!KuV5v(0~uzK1AIvBX5y4QiaOzee5^HEWJ@zOW4vZRJ6KY|FH{lkFB3M07Tq@pTQ{BK9&kdH%@rt3d zWjHGUIfzP`r2x?6{!oYOc{i=R^3RDVi$NKbLNWl1FavYUULP=rSU%QS3C--AS)Bq9 z{EKlD%;5Ly+^K%sxy5h)5ywh>;G{1$P`LeDid^UgE*&STm4S^ID(Kst_H7Fy>wewC zg6Puf5WX}|F}ujK7#4nfDa#X${?`TJEK1LujYTVe1V}aErKW)7fIO#YUmp(F%ID zt9}?|kCg7ZI*G-OzWXP<54or^X$DDqYh8YSAjA*#>wroq6gV=L)2-HdoF3L0B=6JY@I?;Fqe2yHdk-P?qp-G@26Xa*v3#;b0sbaT(%h7gp`_qaz}>$JX9Xn_c;XAs<%o|+m)^u;@zQh`I3BF_z`uB;Jw{wg`d_J`M5 z{gbh+`vsLSHYK>}yzwj4xGT>2JVk03Z~J~(#unsB+9D4ojG2SKc4v7FE5!Qwh;JQ>DNH+{HY&7=%ypo~VRDobVTOUQnU zTIgu5y@}k;KkFwY6OnbZ^SFXP#xenFqEac1_1J-Y7$IJBebbK!dz*2Yx8Iif{rtxe z$8AxSv&hmQW0?%4$hyboZN1!muv!c4$$rW>dYaCbg>`{jTgo|=GtkxCXgCZF*%_0( z8azhu$OY4>(USq1|77e6QBciqxyNe!d{~ZPsPG;w(m@k&!+^Fi77Kbq1fquZhyN+< zu8?bI^!#~H_CG&ZU5T=1wShgby{&dT-@$WzaZ1i6k~Hw^m`NhBM(C17uWt#NCE zA#6l=vI#;6sin8m?4GudYCLv>THGLkj1lbEY9UhFWX^8W^mej+*EV+c{*3OJZSYL@ zAiKqcDsO8A84G1EU$j7J(3O4PnWq?s#xliUeCbuQg;Ba`$Lz#`jmp2dc1Ll9V6ASV zf&SkQMJC`tZ0W`@&!LzbI#r!r87~*tuE9MujJ~@CHmyi+7(Z%*-$lZCel%KFV5v%GUIw&t`&zeu`J1}b!I zv4-K!QRs%=)8Wp935OkFfZ|E~&;^sJHP6ay-^t3-8Ob>GOAh_fGqKGqstk?}2eFr} zN@3E)=!Q3B+TUUH4dG5?f#DdmO%?B_XK<^1fMxXEyY+NC@XTAj^&Wyo3rApym0~UC zlD6gcZv#!hjTWLYBO?KDSdOxrr`X{G5M`M_N%>|f{k_^_kb3n_77)yWA@FOY-8cE)rPEP@Po5(lK2*Oe%yMZhA#0u<&1c0 z9kb59FBZfd+Ddk{LH`Oh)E(gfSxavQLlJXL8GIQR{El`6D$~}Ymj}=TVZaZtXiy)L zNU*^kOF34yb2s`asgP*_2!0T!afB&%qRRXEe6<(G)o0qhyFaHe$Fx6i*4`b8$Z+5H zY8cQK(8;!A`k8lFT43Q4U;P}|FaTq8Wh9cZyy0}@$==Xd36fb3{V{;7_EPgyZcDQ-&m?N#+81}Y+j$0T}AI{~`xc7esdRWiGDxkv5yp>^7{No%#~O z{6Y%iicQBuOV~{Z9sE2K9u4r=$TakDyX|>ZD@N*YQaBI-;B`S#*SV_@j$r}AScfol zT3y+VHDJXHQqqs`kHzt@RNvpQu>2OO&$+M}WaR2shwN+TuJLi~?hux17qCTpuR~A( z#z&_EXn6Qw#o&|P%9`95F-meP;a_I&Qtq+^13Z^~3u=~ub=Fb+f4Ky0yo{Z~M9~2f zL6?=#)IiAvfZ%NS$L2dx9z7PTVF#sJ2s6(8H4r<{?d!bJG*P|poEu+UPo$yFLR&03 zXBRh~IkC5%c(gXxk1{@9HhlFHz0Hj#vc)&nxSTI0cf|qJ5&hiJ(a)*cMjn|rc6W?_ zc*q=r_K72+$84Dp?hxok4v&_V7HXTye0*~0_V^9X#v#hU=tHHRv^3~8x!>0o%cnWa z8`TVMzYvLMn4DJp6|i(d7G@T@(VErjZ$|9gNOWX=*x>DUFm=xG4RNJym_P;yvr7`) zUbZu{w;N1Ijf+giPjB-NEH+96IHzI1QxcaeM$k}sup1B8!y4d{9b}(dAX3P!au}l`Cdj*r;d=8N3>- z?*>lrA92S`-mEM80ajz!!`6wkBbGWc$K}%FyUyt9SV08QGyOGtZc4@2-0Oe=8H=_- zaCAb%bCd#Tlm$NTn?@963v^(q5Q~^vJHy0yh2 z#!bp69rzlfL<#6}fh@0vK&KHix|NID>D`TA8R(M3z3VqNfg9Q-0oP-Wck1~2J3hsc zi%*FccMSC5(c60~2NQS>(R^0uI#C0XD2oj&=Mo1`x=T9A!Dkybt|Wz28*gVWs>RZ# z6ZU1x2XC8g#2gYIi*#;72}M{`F>+ z-Js*Xdls*gvDk)u9A{fPu`POdUS3YZ1IftqJkl_O%{v~9wUm^}Vx8d2jMkpQZHO6QyuoJ~xx%aT zWklT{wE#j*8ZyT7L+arCh)zgzq6`MKOSb4ZRN6xdrq*(QBXS8pSz*L!Dmm0=LqTB# zXH$adUSl_-%4Y=#PhrQ-Vzu?5mp}^h3P0|#yJyUx=Uu`h$tv*yBXtV~S=;S`D{^D} z5TGN((J)X}D(srsp!8`e{V1gfhSKIzNw8RtREgSf3P6ij2;ULGm4evWy-r5_oL#WAtl5o!H9t3RYD@$8IasOGGYbVd-g&0X^m`{%$hd*8K&k#XaLa~EGq)ea z;l!Y5@b(@)an3+$?LKl-I^4+(0(2z!MRjMP;fS8UVj(IHy*4@ zVR26`RT9-g-7#a111&ahbdB!8OrL7x?H6#JiPFKxs2?|y-0ZfL!S~u|DaSbe9?A_! z)3`7@6x~)FHan(}FY8$MGXziuL!Mp|kD_dPv}CQ=&e<)*3q0I9MYAwO04nCZ^_3oC zH;@U1+*~>yxomx$Cl9e018g+_i5pVi8|=yMFVqAw4Op|qhl31GMAb>Plwiq2iJ#49 zU5}qCv2r|Bz5#yfw7Tqe*xQ_P=H}ti;C#Cd&dy4(DpIT$Z#d1{0Gi(rwpG#rVp= z^At02R@ub9GdJRZ&*bdZaWDhpYm1-#Lt^}NrX8~ihF8l+PelXSEK}?=@ajW_F$<=| zQ+o|W8xZ28SAFQVg;6ctFcQ{%8b3mt2$`t@MR;?OfX0S2fa=uA6sTg(`|Nz6#qID2 z46mPfQMN=n)S3QDuB|wt9k=Mrd4M%!X{Iw2cr zn~pf-;1oR4UgR0Ea}fe@l-tq4IQ;v8?9dy-;R#Ycs^3y82cF8Swx_Mfi|0b`W4aQ& z!`#}*oZA_W+`%HzeZ{*?`o|5raJyNNR441N(BNZWs%0mv}inr0OQ+jJVr)G9TOZ^N-$1&d*5f zCOFYD=^@N!WS-Z8X?S>{HA!gdol&FH()Ct>@O~VvG*~bdFY4kg9N84Fc*^LDciQFZ zXKBXrqszeZi!H9?{2BDdy+Vu2SE652m;RJ(_=Kfj(p#-?YkF2D7s6g~F2@^=O<82A zwYzT*cm~=c5Hkt<7E%Ao9R+@fS|c*urMs{9X8WwT`tSItex7*mhauAgYE=A395>PR zFXqnt7r^Gy4bU-^%ZO&^8X7dwP7wPs`CP3*#z{q9WDZ4`fGJsH6fdk?X|fTNeMQ#w z+bODmP@H#e#3n|7*wNao3KwI~cG>nGj^NCS0osk9EdXu!S%@A8N1UnbBM-Y8#MZqI z#%^1yUqd^)4!PQH%8?Xrr2adY1Q;eu$b%7=8F1n^95V0mnPc8ifE8@1OWi0|DoMN9 zkz+QH9vlFDdovv$p{?A5XGGJyeRkE+-ckj=FD&}GbXG9$uP)F!xB+Z$HmS?=S5YBO zG_3JK*V6IkAGnBs#S83S6rfntIuVCXWtv{=H0or&OQA(l${m=DLaw)UapLApT)E%p z?{cXG=!K)3aFe2rRQq6*^KP{2!^fMGi$3=Z28gmnTzz&W&4Mli?9N7)_!| z)VT-sYq0^06r(^?Vlj3u*1zchUo}|Sp1G9q1@x#SS<{sNCS93X6MG*Scj5Y z8hJ0;i$4zw7B1F_^f5_Ena0O1QRBc3}Z=J<;qG`)ev5E>V_6$KQLCjv}RXE8E{Tv7R~H| zOrn8*vcR`&4z9ujQ%e#IR3u@QWq^SLR1s5jHci^JJTWT84=B0 zC-FMI-;bS2<~BS!O#-BzLI%+7-5z5p;n7(KT)e9C3ZT2W79XqmTJy#hRXM}d zN06?fADMD2Nwnu`MYY^L5s>C{mIm>&N%NGK@{85SxKT1eI8xmSK5mj+EKwv$jR} z^IW{9J=Y+T`vl8nzEJaZQ=R-!iu6Eze&aHO-?27@LMxX0M_$~!4w@7lGyqql(Xh=L z|B!m(fpvu$$44Jb5*%^Tm(Ab{*}ppmqHc^P8QjCEWko1<3IB|@1~CcL95j{{S{uX> z9PL-5Wsb)hT~i0-H>;}28;&qB7s=45^F>bCCcqi%6Om9m<&k# zG0+uLc+wd}Ql>^-YQR}+RK@TpG#d%?;vBZakYF9Lhg#xBuPqB%o|qw#S_Zf?gpAcr z%pSW5$7^SsuZ;EF5h}$AxH1%2b@c)M3UQg{!fJ4w_0iJ~Pm5UFi9|&OE$YF|+t4Mu zkJ_==WbRLpMc->xTpbvLj5WAiJJ)`7%4Pk!&q_n1-O&2?HtpB9Lc$1Ze4@n^lcV;0 z;@C~Je$_6-vT>pMfh=8?hUXr;@|cW|z=y;Wzc+08oHlU9Gp#KXrpcvc|7;MylLfc^wrVbC# zgpH(vgC<;5BbnS}2zHjOadSytZ=fDhAX z{c?i?PK?%P{zX?u7~(3QNp1bMfu(E?8vO)mw%g;*=%u47r6j0Es4h4cKu6VjG@IUE zKl8;gOTl19(E)>U>tL#H<1N%oGXsr#1pPc?Zw)9)L}e&>Y%G=%uLAS{6$2e9D`Of3 zlae`WN^)7ha*tUR)BTXj9lT%$>@`*)wlB3h-JnF{=6?KM7TUiv{4XD==ko=fgZkk;UEU5D3n#!YN9ho^KJgBnwNjgy67=;I zlCUE>i+N_Vo8G2JzJ%Ci3jwRM!d4?~{qbjul)w+bnAVTzLHyZ?_(ElH49`^yfe5GE z7k+8^mafD^aaLdu5&Nv>SmXtoHFs2gwz8s;LjUQOpnxf1x`i5=#%>{MVFOq<)*K=d zn;L~>Ee_BES^TDEkwnx5xHv+)eK3oA>uNBw4Ch{KM8}_asi(O{Q*f{OxH#9`^}c>! z_p7xI&5|O`e9n%Cfls8ftKq1uhu2g19vS*<583HmVl$EXnI9q1JDA+u_#CQwl!OV1 z1U6IT4xGpa#_|Pc|L>9zvZP0O4#@f_sasN`ZJyXdJ5vjeIHX`*p3%nQSV~ZjwQ40* zE(pr>dr0$(58^h1S=3odTuGi7IhubsJ$~vDR7@=95!@ zA6}90{(<>BK-2y2&-&5xgB19GupsV^jC9l$jw^DO6F=*jI{>v%vpO%qwr&biCN(5$ zW)l$9q3kgCUo!^aL`tCem-f$}ZJy;YzEsS?;DTK5b006#TU4h;+C znwW*O&UOoT3X`jp^~H`euSm0=2n`58tQk=dxa=%gt7wW7 zH6F2np`>WHW|t(V{Jxt)x#?dZG(?POk$m;Gu*6Skoz0_RTS}5rRnpqAlKPn%4AAKf zlz+cs<}$*_Z`uDB2Wk~JlwycIe!aYYeEfo^x?pu`ErICVsR+b2S=T%|o^oQVo+nt! zJA({#5JlcjxHTO1xspZ*?KMfI8N5&*g?9nR&YOB}UPRw6PXIiY*=ZFxJP@%l4UfYXd81Iu7`UoP=v7kUH5R@c!>JS#9XK49qk(ACPQ!k}o%^aXm|JB_Et z7mwSy^@Xvtv<)`C>}Au!OV0XI*eZ=2&j=MYb^QTWK;II_dYWru0X4buEPk+gi)Gk$ z>Z!7YZ&I8JZFz;FX$-{g*T+^Vqpb}NZ|iaAT;Fx4yj!H)Bvk^#Z4H&Fq-F3OsKxf9bImTZtjn|8rv6j` z7$4`s3O^Wy_<52?-*!6u(yy+f2lLTPCD}BaKBWkHoY0Y-E3W!wU9d`9;d)E)LRDAF zjMi67i3A;|a^11;Sem~PG0oB*)i8Mz0=IQK{~+Cr^QAHa*=K5?XSysg&)C2U1MFy$7S_qc`9}xHH;UIVpoUn-AD1vNV%b zag-!3u_2cYIAD5xG>Ku9K=g3(z~12!W}}(5B{VC}{e>rISUsaPtGo1{*S(Bs%$#F+ z>K0lQZ1Fwv)CzQnYh!M_J0xL4zj2W~@QQ-R?Q!QLHBP3HUKDav(~$zhfixm9=z47| z3Nd;B41j$MQOd8ENE`HLvN@bY@=O*sV>>rt}8Zqbx!*zkig4Kaie&2{q>Op(B zC2l@UrYDpHs44Jll)$AO}lOq*+eY<}AUJg-6e zU|zs7MvZ+&f0WcuyJ(76p)!ZLa;X%Po8ryhGpV>~E>I}5iy>(@)?BettnWG6@}d`B zkqfVoIUE|v?I6Pni=pYK1E3bmOIFZRPf&LLnH!|JQ$FbU7x_=LQgFn81s`!lK}3zV zs6KF3>yrs396&pY)5a)X0dbFTL;(yX$*}?0*34itB_e{y2+YMQvs(B;w%~33f}9oF5UsQP4K1tQHlJeIX+6#4NkXz-U`f5r7 z8EH?@6avg8D2k4|jyQ+oPPETdz!&osP{%?7J2Ho$tZgnSh{NuBYCpX6b5;vR56B8- z9VwDpHuM$8!)69YhbWlX=_jA|5jTn9P?;$9W5B+A#Z%ZU ztXD+VHUnJvD<=L%$~%P#uM;(2X;7Vf=7cb5m8~r`EPRQGV=sP(N54^$>!F<(>b#YS z4%Asa@|jCameX8Z5UV@{0av0SO&2VZdEsqSu2#9>ix4QRIHP88Ud=`uoO4Hd&5TQ> zm`LHR|Kxm;bEGCv2JFh83$`ny%$_UYNC~x7uxs$-E(%udryC!f7Xm_!ynK_-ZRQ=p z4$0=eYFSTdVv-UcpvgcI~ltp#aQplCXB*jRcC#vW?PQ--@5V&)jV-b|T{O^PwWM@+VeUoSmdV z4W^{f-%6_bTzxNJ*Iq>++5=R2*qd#FP&d=+ocOO2=!Km4mk^Y;K1TkkZW@s-N`e-! z(Qwq3??lXX8@Tu>2iz9@WJ^E#`6_jLb(|HkCmM=;PMldeC z6FWgKaFRdJ530}s*~sE&k42J0Gf zN)kA{l@-|@79ono+zcue+)qyJ%RX02bM;VaR|OU!(L`u}l_ZN24lN2-Tk?w8#!Mf8 zQkLB*z{xO({q>w?P6HGLAM7z;{yOFYMs!6`dS=i#QB6bY2#q;ReH0`_)XXtS6lz|E zIs*C`vFe~iYGA&i%Tt1c*RoU?iZEhEhQ|(-2vvFFk)6Gbz#sP>#CEv>04=0GxiAj_ zESX(53?XYHvgm!%%Rq~7^0!(VPSkr}S#_^iV$~!GrPi@GvD0#?`J|(CKAE>P`zBXg z>ydllc~=IdR*b2j-Aj!QoHc(ZE5$%D`vL>zZi5R=0O6DgEET9nyke#nukmFHq5_-+ zi^yH9O_<%!)tzz}Qqyr&d97;ZI?db^0(XZ)781dz#ST_qFab-K za(TWzIa*J;@`~QtH5;Z_?HCPhxVjQ&mP(dqdPk5)m94ZoW$EbwOzIycIOa;;hNQA1`UrbJQ zn-TScGJsk!h^b)XAd;%l2{vhMQNTN{#5zgghu3=K#BHj!4k5R$14`K2f4r|}+93ud zA>!W;LG(iN$LwaZR75i4E}5PL70}>1Wm0j|%*t7|03Co2Bo1r$W0&}Zp^p((g1k}? zXer@kW6Ll*SS=X7ei_X@WdH&wb$A@Wsyg`P#1W2>+76)6wQHId<2+L)e7y1y0 ze31Z)wV&!%1N**YuQ%xck^qudaQ&qxQSywX)cLGTRnBcPrR$o(lZ&?2Aw0xIpF`FW zgW?4&`PW_Kd%+h!&|Wq&^BCaz054ieAgaiU@Ck4WA()}%kKU>T zZKALPoY!A&;7ZIKB3_Q3t=7m>hm-p;!AcyUfLw?k&IWJ^Du`?<2CC();T+M^l)Nb{_;T1sM<`!fVNm`E5c8bZO& zgoo=3P4NQ~l#=>%1lJUDLhvGj^|yAt9;vtSjLGekrXW-qH4%fc{l{nPc%A6#Fj(QI z8s1Qtwxq-oFPMr6*&n0$_w~TD2AQ_Htcyf0qycQgb^4SOB9hDJLYjp{f>(n&^k{&W zvHS_`q$$xYHF7JKdPLe;eks#*e^Rr7aWOQxswiDRucjmDdO;Fhu6`+>3_^>aVVo3!*8MdHRX8{U zEQn||z#7%eZ4Yyw$Wp%VgssRKXw;pJ(}+Pl$_fTeZ6Si4arl>#4a+yv0RVEsCdGrD zy-kI!&Q$qjRUN|Df^tP$o@@P*KU@!{IOO6;0>_Yd*AiGxjGdFv&1p@uBT}Y5kdd3? z5*O$_`q%x*HGE%0ls&wrb-+UKP3xa7%;dYh(Ti}kX@cJx@(bxM9Pzb|SV34hh@IUIGuZ_HJ~?KJgP6hL!^A2Yl+HMxWtS9B$%z>~ zscYncn0w_rl+7k0Kx{_<16YJlW*6RmfgO+F#X@DkQ-aCY%2>U!*hNbiBU2rM3gJx& zUTXEuJtx#_7kOw}aMo_`bos`@>DSA#7qt0Dc^jV$=J<3( z%%dZvS`tTy*fM&wM=)z4wC3>)8fPjCs7e5NkAaF-hBSzyo5s5nf-K!GvHkf^9r zxg&+8&}u+>JM3#{i))S{vQNcQvxVrh);L#W2p7FIyLjz~6xb#6RHULig z5Ycp6|Lq*56Nm$A{qad}2Fl|1l|M01 zUbR!aLe5l^m-m;?sc2zy#M)dwxe>O&z8ZAQs6h8uh592HUFxxRzeMpzGXm-9pu_ z&q*ofs-Tq+fG5)phQ4}L!y;DQd?LOcd}Zr6-QB=CZWBCw%@;qIvQRHfVy9NSJ|?oI z@QAk>BQ=T?KL9FQxjGS_cbsQE2o3K)jbsuFZCIf}ym8f22&Kk%7*_$!DUvWGJ zSqf0)cD93-?Fq_C{0-dm#p?-4S`4=?96f(Ee;1gyImglj(OCG;fcN=qw|eJnX+9x; zE)J^7&a6U5Lb)D=V|y6p5o$~~yqO${h8H9Hp8K@>p!?!yiVLFYsdk1YCTf#X*n=Jv z3F}p&w(6aM`LPS%usC))PKI2g?~cd6mYxk!57f$ym+%1$HCOXPA>8&UsS~;CZ=DT4 z2-@w_G#HQPtkH#JSERS=S&W9np3_pQ+&gjD3#9j=!Kz5?xvU=0JH;yjtzW7ROkK}W z7HGf}vIkMqDFH2z#u#iEri;ull@!LtHT|d^2a-aeNhtKMbahrPD7%!- zmG9cpKkcXw-*Kyz4A!`ii$gw8US>-)Z+bSe%O~_n)<*uV0bE~ zXRErP3@J-x7VI)yGuRS{wzyoe_T~JJP)Mv^myQ|OxiZi`@V%RCt$o?`Ri+iD5==x7 zDCM6j>ork!)u^HXrGl2mq9j{A|6=LXx8~wa-Lr2eJ;L`0>;KfEEPll4bc(}%`+ZGZ zBNzasIDUKW{I+l&w|e+IQs({PcY#RmB-ZyMdbKyvwZrlNy=>&I+Gkt6YTX-@;pjos z2L_}8chd^e+{55(6qzEmgRI3bkyFIrN_VVn$dzP^(F3PyVQma78hUcCzA9D*FJ#t3 zllnfww^zt_*`NG-t9Rb2HTSag>YNR-QpnP2(ZJ%ugqrOtG0_g<)v=A~Oq7A+-U1H! zt7kSt&;CSR)p}Sbm1kFD3sed8fpTR|e2Sy2!`Xe1v4$Ud3{EsGO%bv~Q;SQ4)vMs; zwT0Je@j9_~IE7->R6#2!T^VbLi}L$F=gaqp)+Ld+d@q9c#yQ$Uwju4GOp_Q@ajU5$ z60C!q(cvhfOjapL^J-$4Kg6ro3o+4SKHA}M?UTD8uEQy^Dz7DKagbV_RB_xgKpOoR zG~2)gYjRa%$gAY|C?zl@VX`<*AqhL>toZ~-DYbHNyBep$8qBnM!Z2CYyB|!Sa{GDw z_IF9lN3s+TIP&a{V2xjiw9UDsXqfY5*8aFAx}C&?GS!5+XIo@fJkVDIt(ZV``703F zIegy}%TtHQ=8p0jgF|~82H+c(F@!Qnx3ZObm4$9x4(H{7s~5APjR+{g)ZqXJ%3kF) z?<}?dR*COGg#-BxRNvv@+D`VqyoRbnyI$`Ab#rXbYc%e9FC<}rRxJOkt@6s}dIYih zHN8n?D@!d^IKX-}WeQjSm9&YemkY~rkf2|kDalND#z$A-qn;Hw5e{Z&37{UhJDH_w z0N$JsaVM@_1(hK6RM_h~$U4X5EXw9@Wy+@<5npe>se(3M2UF!+av`Yt0QHGNxBIx0 zL+We{5{{iN-veB2D!kdchNUFQl&vZsw;KX)!7x>W)tLc)3LOhmY+X=O?P?3RT&P|j zu#=5T9-DKgf=Sg7`hrb)ovLa3LI($KXJJ{OJCD#RZyKfp#%`>2F@s7ZYPwQkxxP@a zacS0v?<3;(utd1B>4K0?aGj00OWN`Mq$VQA;@F-s1a$#j^vUA|F5_0j-Gi8~@~H_E z-&0hkec0oqhsH2$=n?=sj*U15m{fwhUMF1iiC0}GpO6U()+<&79Q1}I``SLgW%Rx3 z6o9Urmtj6W`6@_R6@B$hj%SXCte943UTGiZZp^_*Ey4%z*YA)0xx?G%Z!%&)!He9w zzx{jXkZ&{uzt>Rxh>qA^ox0neY=Lqm@fLvrjNem%ha9G}g(<*Tb<(b8?t4&LlB5WF zy*C)%?-0tS;2%lRZwF>Ru3t;OHFIA70$EMls_kMUJoah;(tyB~z5Y6!6l3iUeqZRJ zY0{Oh)RXJ#dZi4c_m^Xd*Z0wJ&zkQC(v(52bzMo*9VyhB@OcZ_Rd3ry8ZMKV5f9)E zF=`ui6Ht^DZD<&vh%2B1D67#tSmG}q^$uTWu9%SS%hsOS+dHgRNV*501j3sS)La{v zow*u>3A=^w3Qw-qL(>D@ARod3pX7gW$zW&;OFQOQ;u0%%?T8MgdM(%%v#1}L=0;(hzbIf&h`+T*MY>_Riy7=|C~S`!%*(BW2cQ{ zy!vbo&tHRE$*YJS2q+#LbpOLUq(R(wm;7V}mJYNsCRYgiZ9yCs4eJUeGV86zz6+wT z60-Bk$Ey0vcs}dIjfEUsURELxQ^)dr6*WzRRa34XA?-Xtd5b%K$kpsb;}f6DUHo8e z1=-2s-NI`)NZWCNYC?BMVGqd1-Qg~!s0Vqy0$*(R8!s$?5DhPTr5#MdPz+MO)s%r` zia}$s@UL4C5B6^D;%pbdy(tW&4BV9^*9KkpG8o~Ll%o9!)zs9<)4jybKgw?BVdVbrLcVt1|v)m1V1~n4GCp&tIusLHz**gni}v;$K8=V3Gp& zuNa;w(^#({iCcTrbR_=LB!%DCg19PS9f*|I6LoNM5a;4jp=Il6-#6iuYyK*2&TI_Xc{mKcZHnQ``7JP z0=FEmJE7q$bz()3q8ZS1qG4r_L05Oqp`Y!t7>l7rLcb3|BxFh}?I^q>!;~t8w zvP9yF>6%Jid2LWM^_H-{Ml~>B98BhDdk8A54tEe2AX3{_gGU5Ujm4S{U}B0ryml;J zaTP1J?$g&~*>$dA_17g&YrYng!vuo4B}omfhl$4YT<_vL5m{hh=gy!DQG4ejgIOWj zs=m8Ln-A1f9B0%;B0F%cxpCH6IP3mapqaH(BA>yp;3QgM?A|5SRqP~*z+aYhpx_~C z;Le6D5e(H7p`J!DRevo43Y5d~=c)GH?_$Og%6{)YIj4*=(Ie-$5>(sR)lugxwIKW-a z8DNLGH}D?N*3~MFni#E`#tznQ3|Z~H=jjTc|2nyNU9UWk>N=A|pdfm+qrFL zT@5Xun|gp&+{B(mDG;be24$^DGp+LP*}51h+wCipL`zn7o;PR_`Ht#8B43Rv*VTpT ztjvj6Ik2=9#B)`H3)|a2(m#~I#ndzGhcfr~_*$uDz4qhUd zt4bhfdRK+g`WuC4$G^0A`1|5s&`@Os zgN$`Sc+H8p&6?szYMi5nxtCo1Z1CO=q8=KYQ3(=UHk22FF%gQcw({ad zb-j1YU{|SlUA+*?q?U_YgRe4F#kN<*g|{S|lOSef{gBwIxM5$*mF&8Nv0zgL@$-0n zG1U+NLwV#NkHt5o1M{p?N+w9Juh%#lC*5ayJ9E{p1ql%V33_k zJg3X|ku}dM8Q9{|iV$i+xXa}$8$Y){nM8JJM;z>AJJpa~Uk++q(cSF^x2YAtg80tO zj;?+sxW&wTaq$;G&0_MMp~tMB)pUOKQJ%6erpAwF#LTui&??Ww{ccX$c8)g z%7{c@MlW%D3~~yvU4g5MSeRLxnB|UV&sS?41Db{p&Zs#5BL7(?e>6*gDkg@y|06vIbFyq zR~lA3$FoPZs~NErV#&q=9H3B4&mMhM-qM)H&rcVRec)BT_3DxsGtBDB&}3Ar9nkZ$ z{rOeEk_snxtgYKG_2!O4Q|7HNa$bx@-o>23%`4QLlS?{>4l;E)w&((zW z1GXd{2CaL+#l0#2^?AW`H7Fxhq)7-FpC!_Sg5mNn}H=>tuC-0XHZJ7dchbRV3Wh3CD|E0 z25noEw`#{{6_nEiuU+%#9f(MD~jb`6LVsl$5Is(2JW?i6IE`sj_xK*ur_pGsfdRfn*lwtRO8kb}EIm>)sEW4N9`_NBo6_CxFg&jB4Nq1TA?x2-uW+#HM zWiTy#RVZ1tLX}wP9u&#`2J0OVR}ggn!*>3TvvN_n(U#HbGZH~ZLsoFhQguf(v!N9d z8^B+Y^8qE;-%b5;YfuS}|E1p-Q_-LjOocp`t;A;m?Zj98*5Z+AC*|saa7Db2C0V)i zN+mep@Hc_g=aKIOt4GAfFec_S5=l+kg*tD$bGP^#q{ypRo8)?{e9@d4EN z4(0NSomtwGYTlFDR$(%SuHLM0U*Qgbt0)7EG)n628XJW53bjX+(kcMzth_`{HSoL| zN}!dct7<_x)XU!TeXiE52YZc@tLwk)ybbrZ7dh$aE z%?X3mIuig~+v&lI84XpE)2Ru*ND?){=SSnJDb+Y-xH9Z z2{~@nbJnS7&PT-pE0Bot-!2|CCFmlH-?!Zk3Y_FMmbS?_7RFi#d_@tTJTAEx$;XQT z`ccq+Ygs>fRwQC9JNdhR(Ee4Qkfmw{P+FMox0ky-c?6;%;#1)BNj2jAdHby*goNyI zO0I_zp{qFzNKm99&Tub47z$8=gFG~p)e@yL0Yx$e9=sqA^o7q~HKvWd-KhcmssVR5 zZiiVgt)cp1@Q!jGb8HkT!{E{{|7+K1wdLxnuauxCGzCl{5WSUuuSVQoYTw|F9UbvI zEKtkXqfi2?=)>bET<%YnZHsuhj}X~kCXot2>&)&7q6n_qmi71c=?ORP@`7LwXAW^57&7NRNiQ<8zQa z-6b=#lMPjec55Ydi}>R-LvZXsUh(qy<^cC&HLv*O6YtITX`9)Jpc zGlInMd6W`>8bIQ}-#@?HehQjj$~SNQEeGp|tNaW~n{+Lntc0ay498I*a2riD4G&^S zr8_u46o?wo8o>!7@*o4Evv3y7nXhHg_ovX@r?Fdz{^OJk@HwwipSa3$KR|_D2(EAm zdZ<~&iUEp8*cQq=5Bj;&j0*VtqAcDm3XcH2BLBOaN}x3YOrDI|0u4}<{Sm$13DC2E zdlM-?u8b}&Bj%`D`Jju-MpxwfbFhAtm23RpSgT!s!xV#$BIXKEio8&+>F2eVyaR20 zUM!=3%IAM3lSSeG?hN6$9T0J;b}TFYWU!hbg0FW1%PTNcNBgcIFW_5Ij%7BeRRa3B z2CA<9s=t6w2U1`wA{5eA1&Otqb-Dc4P{ZpX=u{;$D_(i1G-lPCUdVLhno)QG`F(yYb=CRf6->R-Dm z+J(W1*BydY!i6tXpLmgRN&m0ladL^5POfoCkES(6+#ihSp9uw6LNDbKQD8Dkd z{x{H3<(t*%VXblNc=A?4urmL+W9CcGv+<5Dbih$vKCp@dU4lE5ny`EztAJdqw>I<6 z%CH(7F|ao2=ecN5-j%01pJKyKOSDbWdKw?4B^64*_Z4X_unSWL20m_AcxVLRZqYdy zJ+(W+3soODnBr;{0!?~^(7z0_w~!30BiElLn^V5{A$;plab0DF0_#G`?f&Gg6MTuK zY|3ywcZ7s4z7GcRZI%38t8*O0cd}ooR-6E|)Si<_Kwec7;I$G<-ulH^4Y(H+q9uA7 zH=tzh_DuJ+6U0-Y&RY07Er|pr%YssVmB3w#RUgd5;M$|gR(rQMlZk&lkK6B`Pq}>$ zDc=n4j|Ss+6+w;zSN3FTz1)oSSg_uu@+L(P=HF{UT%2x8wN`e#qL<# z3pyq|0gzNFA3XwBcSOS1YZRJi3<%>GE#Io7@1%4?oVos|h- zcdW1%=)b{Y!ExcW&;N``z030)tyJk(G%QkTEx4!Vva#6u*B&VUdiJU*zg)f{aP{G9 z(fi|&8{+qYXDm_;C!9TpIx zsls?wxE*LhDR4oQwC*cNo1DG!=fBu0simwZJVe=lb#}6LSx(N{*qUs5c_&oG_5pMM zoD2S=Y6^?tA9|HT5khNm)t~H}(8t>`06@!>jA}Pqf?16#8lCO-cIa64%Im$zyOmBq z&F%QxBLAz{-`-GkEGYzZqR%g%7CwK{XKt%G!>I&HQr!Of=O6$!U=jlemOkgAT9QP3XB4WLRWQ3shnzyPc@VB_c|Go2Z zmF~%=0^FpgchkugfC?41?!X7 zAg-}uVA@3+g8e%be8T|o4|wE}H9u+jnD~UduBJm|_c|OgAW1X`tK$V(o7o z4JbZnRMeGsR?ez2;YDxlW9v`gxTf<7tVXJeia`kCj`;|UjQsjxV%h8dH0V8&o{8iz z_ICGCVb-LIsoRecMCk|hgSCj+X+N~_&heJ_5zmOAl7!hpC^ZEh`xTp+VLJ;Fp>rzH^ zMPZ<;hN^UyQI^Y2W`Gj8;Px)(I~St=Guoj;*$)UKP|Lng#y5r^`}ZAp+L1L$?5WP3 zB;gxZkhT`z*hmYD5$b#c`yB_E`Ki-@5+odh<|q?7#~>HEtp~og+vyu_z30skt5OG} z*cU{`GWS<%DHkPD&cG3nvc@(2jK5;?hv2G`stZb*heqzQ)pm)xuRk`%p9T;jCH%aT z(7f|{t*kt+EsWwtEMd3D-#6x2g7*9l)=!PsR?Iz8w#!Za22RJ{enVg2%>l`C#&BY5iS z$tUJ{xj*?pJn^zVf@Z&c!m_nL{CJqskyMH$@4DhkcBS9qKvoM`<8~dL6$GqvG(GwG zt;^<}1m)~C|3)_bq4FD4Bc4r~GPAxrgaDf>KxPj+)QI zBO?!w&rptAO@!MW3(%)Rbvm-bNw~yu!A!wUMhRIlt|{UG=!oDpp9)K)We>7ryN4zt z3_xBRC4fp2h3Ty%uY=b1{9e;KGW|>Y{A$jq$CFa&F|*G>9+Id8_J5~}$a=n9_7Raa z!n360=ZyHxZ2ChE%9E}z4LIKB8SD2um_5PV@Z^Ag%1M2S)e3SBAGl8^?@{*CXuu9C z?SnnJ`ux1uM}p<4ae(LXhu7OPfsY2w2b7lHnXbBICwTH!9250A>um+yY9Cib zlD>TGmm1!$5{t9fpT6gNOZLabLa=F`dtUiOc9;YjTmC39D&HA-o?E7$f`}`<1~c@@ zdlr+?080ogmoiX%_Nc0vgIe#4ehi%CBAFK8mIP>H1r3HJh@Z;LKz@3fVq&)9r_ul{ zyMe9Kni5eY!o+L99`KgzYoN>h!<*7HEHGfp(yu{$z5QFgCjVdwrb-MZKqrCwjffY# z#P`^`C@!|^UM|X;ea~detG-e&NfY6QD6(A2!xp2TihRH+eUNFOJg;1A;HBTyk)K!i zN6Cr`6sDIWsc&eyHVUg;R&)Tl4BEpBuNVz=ZiuogT!bx%o4hq0@9?zOXcc6Foa{!$ zDzI>yo;AQk4HnO#Qh(ds54Rrz;=Le)%=aX-eg|1kC7~S=;p)7bBf-*MiL;j3-I~w2 zk?31-O5w4-B-3>^+&6xeXa<5e;>9J^V!Y;S52O6fxaU!tma?TY!_?9H!|HA&r?9PKv_8`SNwO) zF@7tQ1xt3-g7VYxS4(f6%Z%i1oagx;t*`uXy1<;dyV?l>7hpUwhArb@qSyu_h=7D8;_qR}c=Z zfP0Auil<5t0#Q>BI+h9(;wZosNJZJn=s2^G_(9Juz#+@r+h{xszH1qWL-f!EC`Uz5iReN z4lt1Dl=ueUB;;FHCkwb+jSpSx4P{FRdhpatL{FRHXew|etZsF7=!<3I3n*xIp-Q}7 zAW|<*>p03?FD09IQ1HE_`Db&(>HqbJsI^)-e^*=$Z@scocwW;q51(|x!W}!xD=g)( zj^9j5yd2e)Smn29nnJACSrL#Z!TNl56D$Zazxu1>j@6@%>~&MnU9p;lZ+n5rcpsU5`}+SB zvNl9?!Plxxbg~PqiKY%*?>$twn~HWhL(_?jM;!*MFdtWakLOpE-hdV}L z<@;Vt5C*<`vzJ`}gxs5;R&Y^>x;fm!g= zF?<{GQaTGcnLdM;9HJct>&0jc^4(`t1}?+xoP}7&)B|Nw`jrQL} zyZ18OAAjD`4jm#2`887l4y<+ab(9|MueWfK=qzYey4=ixa{27?!WBCQI76q24rI2y zpQGvh^?IXYs8O{JGN?;CX|F{#oZ0AknSvX@9_Kf!YQ8Tjre(}vH^p98W!5n`3vwvQy~R7BGQzb_iZ zP-Ql_y_;NM$sE>Nk0<}N{#Oz1Ephv|{PLS4ezuvla`CZc6+A2)j?Wi^zg>*l3pir% z$%{L(d%U_Z3eOZ!-Hgt@%Jd7+ zK%07+t0rMrkqbH+t<}mKAGqA0#B~?tRd?z6XUO!kbNfGql)kU|4q^ld{TMU|hb}Sz zN1uqSmrvFvJ^@^{4hG?sJ3Y@+)2N-$2$6vhIBfYZ3YWh`Eb8 zIBs%#Gt-I#(RN?hlJ|o(tinje1duYpBQB|3;pNhQz4f=ov^$NKJx%upQmfHvcS00i zx^jURxzI4{T3t&YM+2;0ZYSgUT>%|rg#T<7{GUSBH$TtEMOpT~t|ftigL8l|@wDia zc$K)+^%`t*aG72;vOh871C&J^RkkW23xb*1XAq%}`-g_yQd%UhEf67OF-%*ym$RMN zEeYeq>w2e@OK}vV*nDY5D4P! z`IV61wsIQ#G`@AS{$-F?G}To$hN1klo)rmP$4XtWHnyOr^D{(}Cy^GQ8hlJxpBLh_ zAbNjtEPh6AfF*!V;4-Fmhw-nW%7xEU`HCKX{#U9a|CfJ0)S7m=(Y!jf@!)a{#WB|3 zbs+c+Z=VpCD=caZt4s{8w$@uTt4M~F0K?bu*DEAgt%Y8#I=i7u$sz}tF6E+2f3hHe zDC?A0;sep#K-?hR*Rb@T3>PF&EYNNX@9?kx`TucA{ZIYvhri}vMb_xNSa}ySXtzsD zsDuUstHat}_)<|0DK&suNZ1)=QN#KS;rsc& ehX1|u^Zx<+B(U*zog@SR0000Pys?MXyIR2UiL!3ntLXINeCig2??V& z`+uI_J*Oag(T>_KC{^+E5&uFx;nG(xKkX&;e>?WXO;23eTDN2_hSk+^-`?Bj|NR5M z!E4|9mj85!e}Tlm5SQ=xPse@Ji~IL3j@$L9EMEx4V$-7Xu#~r(EMSCkaNRZZ$;Z^S zx||!@|JMn;MoUPc75w| z+4>!@iu)ll#aJpC$s`+cP*Q{nU?8zND8VoZQ8mYG7#GRgH|;;}z1#O*@{VVp{_MTn z2Z{Tj*WdAzk2!SQ7oOW||KX8UW^R~Zz|>r$1)xHu1E!{lFeU(j1E(lJ^@5Csm@9L81-USIMkHh|L4gfJORX(`q%2N(*^9US;tkw~i2H~gI~@GL_dKet?0+vq zY|WMw84Mv42w^NEn<_AenZrs5r7=nE5J1XcQ%Tf~Rl%l2V_FC2+T?c4Hb3=_*FE4f zJ9g|y?gN7RfE_y=n_lswXN=439ldy~7a$8eFrpipO~*(gfzDwDi~u`H5~V-_gv`3c z21|&JA~A*eqATm#DY0_k4<3B^fd|_b_W{9uz{bn}&r=UB-?1|%<4JB4NbV)RN*v|{ zEQG)Ugjr`p0to?#uablW0wi&m5ZGYjZj#x_iw(E`&ad72(g$)M5Znjcwe`k-x4Plb z*{!u85({jwjSV&^0tqsW4K~;y3mcq9HnvF{+c=F9Fko;32_(ou7A;3DHtv1kc+4ID zVFwP5a=}sV$JSo)WTx@I^gc|Y4LD6NfCD=afh4jUTO1|=5LgI-g#<##CJY!b;D8KB z5f-wLg%Prlf^k8eY+QQk$-AHVXpVBhQS29Q`NgwV%fX*YYs)YCbE$ifC0#5#c-$brl{BS40dLG6XU zP#Ko=#J$^YxR|3@aFqI)T|fB9akBQDvA0R-!6JfAK?cW&Q`iQCZOl3gJFtZj*kEy( z4Ysk3ZESOxIw*zsDqF}P39&9KNd=G4+R%LH(%-uCRS)GT6&!`$aP1q0Lz~wA?WE+R z%dEs&HDeg}0Xu-sS2)1tD-5==jcu?o#s<X^I ziBklP=*tMxWqM3dh^dpIgDkK?28=LrLNkeogo!&f8|o8Q54n~)dHS)t_MFdAC^*Xe z^oL$|Y#Zi3m^HVi05xo32Sy}8cOhK}3p|i+;H0TDmq{w&0x~_8=+lO4Py&=DoitBq zIe`Q@AcZ?9A-V{QVi5@UKz)KTDUrm)+oH6~|KO9aJC>tNaFp49`fV@EDgSD*n3d+F zS(pGsSI`u60wE$3a*7G;B!RBNNH9vIu-)!bD|g1Y{N*y%-4i!gIxqqaIT0pOR0<_4 z;XnyWz{XURQ$&)@^jVv#9DLgTr4M~CN15O#^4go;JzZVd_taimZAv-<3U*)zPDsEq z&`AUd-OG$BD1(v}sZh((eC5!|*UUeC;-gPmT0Z@l<%c}5fA&F-U6~#K2P;hHg^CP8 zqBODy0vSk^qRf|`xSGKx;k4$)Abj4|7E{zG>^;nNpC>^l#D%vbpHzwxKP^xU;GK60Lh z+3%~gN(b3MVhd~p1RxvR$PHnN3$`$o*;-6i20dZzgg^Q@;QKjB1V@SQ+xzMV?yviv z#mF+QkOjGb16vpa#x}NS5{W1V0ns7Dv}jH4ugJ}>zwY8QU$7r!{*wHH$G>X-F>A;D z$sqrD$F*$D|I_42lIdvQZk_U?U54P=XMmQ!T^-_Y{#QP0HGT5na1?mo1^>r$ywaXt z=P?}(*pLE&fev&aGjI+l3z5RWJSxh>1vFp2Ys1?8zxNkTe#0LAHo{lEgD)=kZI{#P zo~nW9P%M-XhCnC-^*{#8*up8Cje=2jyvQYLyXc*_eCP8y3Is>Em+yN0#;6Cszq@Z~ zeL^@eU`%#n)(MQTL=rfIk|q(Opc`_zGLBsJ?~eV6_kzs-#1${SVl1=WSCv-ZJ*gAI zLTO~9Zq!9M5J4bhLk~oyNYEh?WP|(GIcqQ5`H3AHIl=`;Fz!bUkMvDar zSV2mdbqS=9D_B610Si^a6P6nE$&}u>Yk9Wm|KacB6c#J1(_gpe_vBPqBc&Oeb(LZ$ z*~k?12|*$!^dPbz3d%xXOsj@Gw@yF)9UuJQ2bVd51xK(SfB0)oj8=c7cQ19IyAo+^ zAO#dq!5KJ(Eo_lCL?gVQMTaOJ_HO>opE}_+f56|vWxBH89%~=y`!@Wy!I8z4&`5D5 zXpkdL2tyEn!6qy)kdSF$6?)rJSpMJlZhz~^9KnJk)ElmS*UGMKw_ehhctC3@Ba{UL zb^wKR;4IjI3DSWr$iNA$Bq}0j`fMKD`g8mPy!wJT|1Km;<# zMrpzV8*E5Z5J6&hMLo22(QkY5)t|e1i6c~Sg!;s3*FLICKRp}g%UwVkC5!~=APra; zVFDu{Fo6lgG7B$}rOa0r%UAsT={xS^A3(x~%AU_Jwar(A%PK4*C$$&Iz-fv_q>w?G zghiwXgc8&T)Pr%cwhj4b4$gk<@f@LoBhXIoob2D2+OV16hP25MhWu z5PiT|ptQ}Yy)W4L!B;PH1PYEoAKLwy=S-%{&+|M7nurYKfuvxJIZPywfX&ws$V6#q z#_EQHr~Jxmp7@$I{*fMjR-I|S<^7(G4vYv$gALtaCPII~PAlLvZv*Rwdn1V@k` zyXAHFUo8i|y|;028<>|)I>ExxNj2yba6p0$P5}WHX)vOcCDsh-K0z))I`!*)MQ)&?e}%Z-F4=hF1t*fud^K&ym`L7cEVfQ zfu%n#wPHYN>=89n`aq-zCt)aAQHn?t8APurlWbWc`h!)!blHv_4vrAP5#p6!_@yVc z8qXekpV-C*+gOl*Z4NW0%OsWPm5wn%64buL^4jJ_j`j6Ff9@;pj&B- z&di0yy`l&-j_$lfL}#qm{d&ERaWVA`5zj zo`?mca0oBM&g&mM;Q;HJLC z(vZqsi`2)b8^+HZDAU<(YY$t!@R|!7U&FRuc+XG$aJID{%~{`^Wk486?BpwKBoH78 zlSsw{(=iyAW(>9BQ8$e%8=m;q%{zAU&*)v(UVdCG@A)tqPahW$(E#BT;f6gy2$WzD z4Ll$hL}GWOU^-}Zu^8U+q2ImoV**vJV8WP~C3is@oP zo6KQCt9|l4(_44H^@{VZ82M+k^And&Ru=W;FUE~poz z#9AOskqvS4DND2S&pr2=J6U(eyFER2yyvW8-k+krxNy|uZ`tzkD=$;$?@9bU_)?c$w_S0`NPnT=tcks)_P(4Uce;fTQrHoM?5+so zgeWu@@3E&h9?JQz{>HNpedf=e*IymO_`=q5Wl?|*0Z2j;DETU5C$T(ck z@gbGvOWt(SkKV;Mz|Qx-c>9LU`+v7i`eSA@Kr_M>*@yrqVDJRlI7VhYI2vf< z>RpR(de1u#yx?`Wu5CT0G(A%u&U0IAaOQ~IGU+ANBbB5YnHbX%!dW|X#Tp*2cIG>$ z58nF8Yc5pd?@0U|eddDKKjN4}_4`8oNelHY)s(=M!$e{SMGiZoQG%E#LfvC`^hD9E z95&1+dv+aj@b|CSky~y$wy%Ei z!2R}qTDSB(&CM~Or-qTfNEkVC4%Bgq8 z%WN+7kZagFILzCp-ub+>&%gJ1t4~>*aDR<19n*^mOi;n*tBfQ<0t^@na1st;IVkh` zx>)Fk-hBFw8Q(xVKX~c#hLv)~%4GI}wY51dm#~rwm_V3t$C30DgBrELYTdfHwVk?l z&Hkqzx^?v-2Zy#I6U8yJdpArQEex61&6y4a4m;^Us%Oe-kiB!qF@k7aVlKN(j&-;?Pxv5 zwXrT{3nF_K96d5~@!2zGcYOGw;mox`Cuz)*k@N~BgGm$a$zQOIZF(kYFanGtVQHYv z$B#`9ZFu7Y9>9WcuuGqC?!2(&mu9_PSB51fo-=WhYDkUZ1=Vw+cPfE$Q`=Kc+jrI8 zXWaQ;_k7>pTjytvlbVw(eV`y~$<_d*T)L!?ogoPlgA&`MQ&QTUOsMG|IW)BixHc!f z<44*32lpJf^P(5M>2pi`ErP$n)fc>e*v43-QBq}!>?kcn z&APNGne#fX6^DyeLJoS_n=J0S>Jp!J*RiYTrdUdWZ6W~+t8iFma+o9}ahPpva0)p{ zI@3P=^}XZjjXSg>`394A~T{{GDe-gNg5 z9K3G!G{}unyrK5KTwJYg%NdabT}@UavBDCP2xP2K7$;8B#u0&|M4D<%Ns#D0>{;`0 z{GoB_(wpYn&%bo1C;Sb9zlP7*IXP{0<(Ug~*-V@O(GvAgq!qRzJET#!ln&X(rn^a& zs%n-ASqDNXH|nh3_L=i^!=F8|pO~5-TSo~*vB1!3l8D110^8WeW}P_9HfiC>6fN3S zD{EWdcICM{Mvf4do^$0m?mg!nYRey48pIf)MbK3cK{Cl(+N1Wpea|cJdH=pk=KI)M zXM>j7paCXw6k%6llt_vy1t}1aWKr5_jD-wFfCW;>iPJbJX{UR1OjFIZK8%aCI<^y{ zEiSq9&f6YgTl_UDe~r&p! zBBFb;YtNS1m#=yz4_I3sPn^dPlTj$mSVTrghOn^2U$DWLhya5m6rxybLtlCAr@plR z%YZpTNcifjulaoHq${Sj%f3NH5mDwb9mn1@l_Mo1 zWDyoQhH^+Wcpb75T1ZNh$a2~#f`Bk|1jU)r$R?bTG_0bcqOR;7TPdfzOfG)nFW+@H z@LB$f;IFv;{9oPftj`J!CzXs)6gnu0-lS%$rDa=2YE86+j>C=8NhH@8Lv0?5L#0Qb ztWB@`=+pSrr_Ww}Xh&P>SR?{dNeTu^CP;v>&0&%V31@B>C=KP)g1*`vU{@lf97w34PEmhO`6wN|eoMm9>-9-(e z1)vb2FsO-CL`u*?5+Vc^N-!8>lYpJ6jEr7WK{~Q@7}B1odr67t;KuOqjN!>odgEQ2 z_$w-3!#F;>_^;najhQl*76DMHy1%ouOpbwA(v z!Kb#f*M_!j+6JYKflyElwy=V9f&uYAkc13QQ|3Oj=fA8nYF>kxg zCp_hb`9tTo=c#VP#$m~Ls(I_ZGM1vuLbwIRmK&t(3><(!I6&P6Nl0m73x#nYKyo@+ zmmtv;f-J>kbQrRvRlD6mATq;QG;-ePaufKELFQhSuW`fUf9tfRrl%BQYwI0LtrabT z7%CdlE_Mn;Iw^!~Kww38^hLp8w*ZIw5DU-my#5kzy#4q*52nivkuj$in2d#DlLS_w z%ZRTMVAdHVAsf|T)4{syan~)km3P3E9GR}X?FkI0oWP!Pg741bCzDVgdLw0ZBwTSJ z0GA%!v~WbqtSbf~jMb$I*?K6#N+V%1L1B}Skzj0$-6NHz&@lxY(#jd#Vbook$8e`> za$I!Iz2FT8K6%Yc+0DHw_wtS%aqW9Kf39+pLW{vz?m{KIO~Jwfr+A2h6!26FZV4$xfHMPv7^=bM%UqS*9@`>sYYF7-{t=)b8ri?Iu$R zaJs9hItnO>6hg8xQABfgOxPGuDl-L{hGO*=qKwt_w1pFTOK0`iiGUm-l~ovvPMbvI zoP~TQcn`>|3+{E@yB@r4d0hHdStmBzW2!fb>9HYPCrKqKtt-YJrKd{vQ156QVN6HL zrFP|FjA^4ymhV~0*@vDpY}~ay&!Xi-B*hSIptcDq7!f8g5Gh2ZG5`ZeNCjDRiQ{%J z-+j@}%{OmYojhsMdFO%0p7zV1KmRQ!0pc6Y);E80|AQ|)`@nyh4dqIlk15%Ds%R{f z7FjGJOUeYs5};TFMM{E@2s$cFJ+h<%5su!W%dATjrhtVZM6sPT+uhX;OR|MCAiDI1(~o^qK2dGho@G=T1PCDkDxkzR*ch-zl8wkSiaNC|F)Ep6 z-2RZOeDI9h^sKeok9X#_V!d$NI6msGC%ySS`)Bk2{GjVzx{q&w$KAAN^Yo^>erOiu zMaghV%h4q~PI}nc=@=nEfG`P2QNwPM=`nbvTccbSFxEa~P0O^JRjv%#dLmjB!WdI5 zvS_X>Ql#DMOzP?+N#`#aoFrux{+*eGLHWKwdpkOQbSDNEfGeQ{g+)OFAD!QER{x3y5%1uU?z3Q1rG z5TL+Oa0E>QO>?@$JSMDFk%JDN@u{U7p7ze^m!x`fkyngc=`N-9M=ZDY{U=W9&b?21 z^JV-qdi1r|4j0_K?>kG=d+f=N#~7!y>|IhOj&YDIkT8gl0ttoIp_BuqjNA*+C}oU6 zsH>`F?Vw(SN-SzdN~Lxv>8SJ}SWJ3of|E+L$*2~cw4JguQQ}SrWMq-F>`rBsEm`Sy zigG-edsWt5z2oYdzqfYk!fhg#*0BrfUEywd2s!PLj7SXRx&R^~<%lNsrTW`V?3v1o zKl*Mx@wOA&h0e01>^LflM%qY#1sEH|IvETUp$?A3*>RCK&o|!msCNzrw(nngM3%Co z%;G}M3p0z+kx?k;qkiU|^MCd6tINFY)c3yRL;O>*%TqqJ_x!o~E8498>k^aD+B`!z z47JNmLAsZSXr$#3^aLzRgbfHv0cWJvK+2(6SsZgQ6h*7!JOda#u{~y>d9=7~$olRA ztBYPvhw@~*JNnoNaAHu8v{4viL)z&Q1xR5fKCBnqmTYUCE9>sM=B}j^y?jy-C7`7u zn|h!ch&Dn&r05C?$Y4pvJ-bniQoMUO5dZhNH(qv-b3dUwR+*2s$lEPQB-*z5ix)&<|8CZ}K>!^|>d&q?<9! zd_bj(NtZ_{6gZ46AuJmsz``OFFzLP1svFCo5u&?!77SP!s7*UPR*x;8>*pQ!+1(c} zUA6PPr(Ut|k-vJ!_NA5w!dwi4?X>JJG7X7MI00oz;Q$g4NMXwxqAYKH@tc_fv&y=Y z+R89m8>{6`rX9At2oxZJyOacjG9hF`Rv;ik(*8x~BljHt=QD1E7u@)olkTp=nb|d% zq^c8Uov{rV1>gh=V~`PtRT4u^(WJ9=@8nM&^R9Z^=GEcpj$RbX6kZ6IblI@bCW?AS z^vGU9TFk=_mf}Agzjo-U2fp>c{L&wtd%q7{{7V7K z`_M&OuIAEXK5)O2HqO>2srv!@KDzP5yPtIT>IX*p1yT1;BZqmUNigOx+cGweVtPW5 zBv`2+CQW_g-MM=JW|glv2AI3MnF!LABr;^MO3;jhkc5L%?Mt~eR0U1ev!NxKfMma!;vS|Ar_urQeocrl|s>Ao24>>R0 zMIsuRl01dMnL`h^7W7GxYdXi8y@#I?-RC{|6QBRh15dl+E$`X9<)+K7yllbW!yB%> zcKEIB4|(z~ul;z5dO_v_&*zNFbd|~|YT`whL|Bd#4vWDu35iKiNR|x}U@X8QB?W^_ zb<2pVo?Q`#Vrg9J`{s|I{IQ?4{hE^=x@p(uS*UWL*GuSk5HVtaHZ>Feqi$HjF2>ZJl+Mb$45B#afk0Cp~0_DQYzpD8o6( zN@FrY2~A3sKn*JjQS9NkwcFOp^hr63QjJxtfnp0@3So4#e!jhj!@u8p-X!f6PO zUmEInJ@%2iZvTaL*IVXoei{tbZJI!0Tgd6eX=K?U%blbo>a0@|$XZ>%-jg59f_1^V zXFl~whdR@bcj^H%X+6rUYqDrA(OegcSXylwW-WB6rRHNU<;ZlAuJeT^2j&`L(R|Lq z^EYnZH6Hk$j<(r_QGql-4vZ3GnPLq@R=NjL6#-#m3umEeis)<{hy544eQ2lcI%X-$ zSgmkpmq){~yI=?_mhB|o>hbi%!o2%Jnj+qPxc_xQ7px#hGrP9EVF zH3^jJ(LE}&OLRk~=;R_Hn@oz*aa~|~bIwL{aL0vetP9p@hjJ11OU=`Ri&Q3Rqj6Ws z(bbC_`smo-U^O*KduR&}i-m{QUCE4(A6Uto-}kb+-kk8fT(F!`a1b?j5dHv)=|1=&JD$f9lY29L0U4a1Mlnv%<$rL38g%i@4B8qUN z`iK@Mu4Mk`f%%tyW7l(D`$+zZ3-8?huhzVJ)qFAe*&KbG`;4@}1qm{Y0XeWj86hER z;z>(FFqTvn6c%5hE+I04tU+Q>;D|t$DcL%?lzZ3C#FB5_JR!icEx3c4Db?x|({+$aJ9| z8r|2pSLI&Qj4!MO_k<_MD;-&KF&ACdq$Fx}=yr{ku?V$UO2sbAg~i_9{Ke}p8Q8UL z-{~V-7KP}LC0P^`7K0054(l>lfawf$RSHHnVZ3p5xas1zmYa@Q)gz+x+H>exW8u=M zElPk;A_Zgzj3p$4Kq$c`OoWhRgp)*47u0Y+W7_)9AN<$9@ZoV~eB17gEAcb0c-D(P zY5q;hE472NgN$9V%#fX=(@GF6D1yYKOch2VWh`NYfi7!EY?;wTAUPJKr*un+y)+)0 zJ*a=0$8ElG>Eh}8SMJ|Fzs$U1tpE#x1jUwF6wX__p01$apEa^7PsH}`O5G>U}BGp z9!^{xk)`xuLsI%Yyc(tS(#B|F?l$@KzEk^6fBvoaJZ1k%p6ad=1Twe}WF%q06-bgK z!(amAvYI{p-9I@_NNWA_OK0J9WVI34;`nKDDuo zEohal2`GR9(I5wK5Ezt*8Q~sVbm;h}p7=8b^m z1)CoAx!uF#KYH`04=nrcgIkxDSEtKbs7@!{^kOnh?TKlGOzBWCDG>=_xf;TvV^WYI zCy-RxQmM5@U-~l9uYGuYdi7=H%2U28erM?z?ON{RRJ9MFAXKnMh=y{CoEYKg5RE`s z1xKwbF<*)rdp@%3oIRxvE-1#xO0=v=b7CaGAa$kej7aOw7Wv_i{n+WZbFad^uDRwK zUwXe+9vo8->CuiEC14tzP$t=>F{Qap6nlxBY-p|Cz305~|6>nM;50q!GT;BM|9wC2 zTUEWLvo%Qv2+$FdKm-B-K_mzPHRHID%;z9S2l0r0&QS&xb<}ZsjvJ!l3}?hqanMmm zA&xT277&Ag0ttZt2?nwel62Ny(o0pn@AKUM>r{6|D};2C4s?TB-|x*IdhzZTcs8FN zeVMh5X;?wH5EN1(1LOjRAV2~Y!Ynb&bhM^7P3zoie)Ru(*=5^KJ^$K;Y9HEYMiXebk99kmV-^dYQdC>!i6qHAZMUvR0&2l-C!#$YE+3u z&>yU6?T3H%o!{}FU;LQ6KKS_Y-yc`H;fbC?1%z>c8IVNDF-8m#IFiCZIDipDR0cJT zi|fYOyCyg9Iq8NQ7EbIHZ6-<7!phFYV_OGd90Uq#x|UD1n11xucmLWv_XzIo(Wl?J z*yYs|jdnI>-Dl|r3X{?;430KMB%OPg367f<#@v17`I9Fv&JE{e)^$^j$Ox(`xX?$? zC^R~7hgyfS5ChOEtrd*OE>PCp$JXQC^!7(yb2m$7|Muk{+<58t{^ZUzGe0$=zN?r8 zLYlvFqdG5CN4JVF1boFAJd1KP;DN2x;RG1cHC1I8rDH*w^ zwnTkE8Y>B#&WSxg-Za|vm~VdM2ez)&PFkvuP+G+)sg*(DG{O+jLdCt*`piH}Ckt_rB{Br|!Drmc`Odh8iuSVL`YM2`LDp*#=$0v^W;lmdLq! z{kY?29=&&R!TTS-_K&umd+xwJboS-_4cm|Z)YPN5Gp-~;2Bok^G$1tvL^49|P^lnc zPl+}V&B&FJhILQcc=hS$o%E4ohTe-bwP=}+sjaEgLt_}4(tVQHv7Mpb$TlVSQn|0) z-Ay?j?Qm*p2B}#oMQiHRY5#)jq~>V>W1BSFW$y|i2L!nr(JVlZRI&?I+-Ocv{2OApkatsrm?@i z`{Vy{=keE_v*SmGE+1zml7$3T5*9XyMyMedpwTFVCI}N5SOtws8>63HsMFWK?}Q8Y z@ethlyf;35O^a98Vfyt}j$37aA2~!Y3A=QTHCZzy&$nm`SxAKz3awUqj-rLW}YZauU6(4)5=zhgABz8I;cyObE! zY{B1YcDRmwx7^+s|0od&}4E+qy858|_fZz!oio%tBfSfeJ}SDroAk3NQj!ngWk1 z)iamQwPP-N-y1$X&qMTxzy7{U*X`?HvM`DtZpBxJoRSl}c8W^rduciWOX^CsYIUor zzGc^TJG@YW=5PjCid|d52w7QLX+e=(!YCMJ$*HQdi`kQ=!*S2M{_2?*f8>(>B_Dq8 z9naeSnOjDlEV^3*(cKz3{Ny7}UH6S2*s|g6JVfh1{LI}Gt@-uoFmq!B7-J0_Aa?{t zZa7UzC6)V@iHA<4`k$4+M4s0@^wUCK?|kKlfc zdEDp8ddsx*yL-ELqvG+L+jwSgc=ru2-TSCLbBiw^%cdriuAmMm;DQ|_K{~({yCPST z09WJ@(uizjGEDm4+%e=$Y}=L`23`J&{@6>t|1H$D=MN13b#@x_vsu@QR8uadvPX8c zD`JZ5qQVgBTOAgmHGzqMu&@-?5{r9?P(_6pW;;!1C96egrPd9nF7Dj)ZJ+sQe%Gb% zot%I5$9A8(>(0N}SGupicjWu707$?L*Xs zM!{t?c9vLdeCp=s%ujE5!v6F6S{~)>O0!56(gjn%1yo52rjjnSEHnouAUm8Rnno~` zyVdgY_dWW#6CS4Z@BN+~?|R;oKK+T!Yp)!JyaeY!DT{q{yBuw?Xu`DSVqeNosa;8x zW=L#`QE?!MVi68w5r9&5mR6+6Xy_=ztZD07xb~rp!n#rMBcHnCmPh>HNB^pS<%j>^ z{g-c@xsHcx`*^+t@9YP5M+9;Oi>4{0fr=0Z7_b8gELK>Q)@e@tG0)w6>1k&ib8}f7 zW+q8cTCeKnN_V?xw_J3grreL<5QegFMfNj021;4L%B1Z*cJJcnzIA@lU*6n8!QyMc%4f}P&*g6r=3#W%k6Nw59wAN_{4 z7eDWj?bcCuW%jyWVj=}exR|b*imf8l5nU(>GFFmGn-oeBKp12Z6r-pbPbRfnq{h&q z&8p@&p;)0|tTHNhpLEvVTVJ*JwLkXO&;7>FJ%NYg!izFTbq6`_!xc9$4U^a%PGcuF z2L%TR5Gw>O2xcC&{`04wd(x#RZ!Ehqb7l}FX|0zRZyfcynL`K;;j~9Tc6++q)&in+ z-E{Ec9q0Cs-MOWG%TUKBhEtt;Ff{FMay+fBy%bJ^A#h>vs*qbdM>wx2V&q)?3r* zwB}yhCDfO!lNQQICs8Z~L9vjrE#s)s*P?}WavMd;laAJppsxgxQ2N^Bku_Vo%q?rZ z_xzI=ZhF)H*S-4Z{_b^e+{9rJ*mt=>Gd3V_Km#EJh(O{XbAXV9B<#cvQbDr7y4bVj zoD;5i($hA7biC-rJp-97ygP%>J(rDpIE3I3F1$#sRDT*`H`AEe@fdvbxsy|dxyhDp z$PpA4OJUOWs3jsm1yK)09ha;tuq2khtYwLz$O~+#<>q|~IjZK}M)>d=et5igY5==_6P+IXg z&MC3`N6%Sv*&BBK_78n8579O6_@;3;nw(WNU6%0i5oR53{ODo|!N%uKuQ+4Jd(H}D`XxNH98 zue*8sPv1GrzjIW^|EHU~(oc~GvKU%2TI{IP@tS>gcI#W8_qcEQi64K#>3{y*vu@cN zv8Uy9U(GJ3WnH#XT(hsHi68<6OC(uFDHkb=seQ>ccL%czeJ527Gcb&&HF1F!NncF{ z2Xz@thDOnJR(0{h8Snmu{*5pHnSHhpLIC#^kYlQr`)wV2H&k|~ZPatv8P4U}O1 zky+wkg~^x@Z9rM*B9A?D({*ROX!H9wjt1}U)P4Tg%)591;sN~DQ$O0>IRAtv?tA9l zb02>7ov-ZIE`F1GuOSOWl3K*B)C}ZAVI+_^$OZ{)1A*wUrqmqhqY@fZDU+_&SB`ev z`iJj6>xKKdk008xWBnDA$qTa8pH+0)gV>GO3vj1}!SX5jCqsu`ne|me$oET-qqZB`j(kHe^{mrd5Pu zpbHf*RuzI0s7zVxdPW4Wh8k0HW`R0Owtjl!Vx9X>w~kKxrTZQ^d>4_YI$eyA5}Y8A1v0_}V1pzM zvcN1ck}wcXtUy#E3MzF7>vc0_{O4P4jvcOMIVX-TeQdm35yC1c4?=4Tf>dM>B|IkP8di37?8z(a}vqX-vYigCKqFO0B zmw;NxuJ777qTf*QID%*+t1k{kQ^*hvg`qYShT5P2GAa$KL5(^ZU?!lOrPVQxq-Y;v zFKz=FKnO@E3Bi&?G72FCGFCzuvqa(m(XfpasF=YfFoem{&EL)DH(#^x#9w*lGylWi z^8hLj;xlL8c(ycimYs8ENd)NxjKmUwL^zRIA}kIPODrswh=U9gON1R9APQ|VFqm#} zR8B-f1a1Q{Byu2$CL#WT0bv_S9AJcil<7;OYk?e$2GEe~t98RwCvMnq$GRtDb| zY=8WfAG`BKSKP4sIP%0vv>75jDK4FZQLCBJ)Jp3d{fN>^gVH+DLUJTk0|*F^3}T7F zEHNlCCK*rwL%>3hr}MZQXq~V?8bL8~B7?;eAsZA(1{;ed26Jc<1oe`)Wz%5DE|A-`;S^%uVAB|1L`XhBUL-NCpK`0Ky1tM1TbdB!mC~0SFK# zFhU3;qyP#iz`{175GhJRG$;rWK#+h1fdGMofsg=kfE);@n35F)U78?h>IqMobfdYO zH*PrLwk?lXv-{YM^T+SJ>x#7=_KdO}FKJYZ!d{$As|Z90tg5KO2sTGKqL_Y3CSQM0b+?kBE%9w7$J~3C|D+OfG}W$5JAdV zAOl%p&@oPK-GAfTKK7d5{qzEdPpYu5@3uG%PbRy(NGw|w8BAFg3ZW57Ll_v zx~(fWzy1X${nV?z<5`#f-H%)pXY$!6*J!_J=1(o7>3W1=)XR1yiaakP1?P5msOYRs||hKowE2 z3h4j}wnzjLR-u>Z1EvAfB6^92IG`G8iUY(lNtk7lLB?_L<|mj=!39W-+5)HkBprCERmhylmI zw8Bt9C6N*$F-9^9Fo{V*Mrv3+8H-RCK|RQX1r3A{LVygm0r8J4Y+(!tFa~UMZ!UqO zArBNA1gQaHKaO1|&*|vR|L6%_f5lAfIIq}09wiHf+QMb3phQA3 ziXN537zJ2HVJsmT3P=JH)Ch!I5C|26%mH>mBw)-EagZdytT5t%m}Ec*u_P;m2$C}N zltGV}wDR<`kL~^%xRLu&IfOM^PB?k0JhN}C4G9Ma84w^F0f`8SWkLc3VwqTGOj95O zhERaP1_?v}rX(O!2rRITWGrYBVwt!P8zew9lD-C|AEOyFQ}?q_d0ULv{K9*Vo&7Km z;@PkLiM_ywuiEw-SDwVpSI*im>6rh{PRU{sR)^FRnjnNEz(9h8Fes5g0jY)}03iWs zz(|c$gD{CPU&uBR_acxW3@~r4T)(^{(%iPm?a9NKn}1lB5e#9VFV$N=nM1#O<;3S0+vWY zlestB9FQ2Z#2^U;%&jf-(S3TPW54g;e*U`e_^V?_ALcNevF-ofw~_H%ubVmP7xvD~ z{`553l`|vgWJ(sQJAwci%Sa*uR9IrbAdoujN{dG8rVOK=p&J;&WSFcC%Lou)ATf{} zkQfV$5lhnCKcQA=f+msCgBv)=+Q>S^g)KF53x`lSgl^CyG}25zf*3#+Hb^WHHXx9M z5ZEAL#6jX91GbTb5KMj8l`UJcbs z?PhWIJ9;ht&PjCt-=Ca3-u^Bg9&Ou}z{fAyw(V1oJ8r`j>lU`Zcs-ME)~KG?7|~cH zG$59QXbdP8iAbOlS;=Cgfw0J-K$qY|VPud4NGu~636R0UGJ%kRNQ?kMf`cUnC0Ibg z5;X?~RfaH?p3Z@XF+@j|XTuA#975#~`a(3U(kD)^#Q_d+fDASVSpu=dU=adwFA9v2 zgcEEd31bc@3b2r&OEC?R5)uTEh(3fdARNJIYMT2PIf;}R;%Fqen zPi~C*i|;&X&6_zw&e*nX3cTT_*S+dZtPsBx8(ikdTCegG^!p65;@3^N+-R87sg+7=j*bA}f)R zZ8Eub-|joE=MaKJxayQMc1Gx`7OU&St4N$ z5Lkc!0Rlly=q!qb5thg>$w1T!;}H?V$Hvj0U#|be%ied&hHH_`SIF6~ctyYdhK(N? zpK|Is`^viS?(2A0=_(E(ra&VF7FfnI5=cTaCXqlAV8GbiLx_hi35*fufB+(eqT#}g zW$gFA|Mr>Ba|q%AoN?{d=T2(*uS%be%|9?8j1Vh=1B3|f#ei92N))j92T~Abi8x3i z2u2N3&EW?p>fhaWS_;U(Ru|7m#- zElmrdFj7Jo2?(RoFhWX@k&MGQ3}GaY5(`3L3ZJdE@rDgM`6~3Xb6>WVT=_TD`~RPL z8#9v`d$z%lJ^R*;;!dQbRX46=jei%NXQZX5wBX44L>e zQ6{4p#PFT|gzpcpbDlrEUe9x$kJsZopXWT!c|6*AHxGDQ0{KT!+rKKiFQlh}E>AIx zpDTsgO40KrF$@u~l*_NSmxxbMEmkdashS@d4w^%=yt4_$LXK~nf%G~F2Sgsy2SGf z+%|3WRz~eVzLw6=WWnsFTqiYutyOeew%IJ3ncY8kygyanZP;9=DPO}iL}3_D_7Bkz zGu1=pq)B6Fc(6Kbl!mgUm1};QeXx8>pdn3YTL-`xr@*PaCnqU9*Nnuo z2M{y5^98)kmdogL-dezL@LtcU;N_fT5>+Jxd?ev>xeDX zvdHyZ5e9At3Glx1L)*b1qkExyCo?dEa${e(eI>wX;g7kfgR!y6&Yt2ax6ol#Th(Ln zQUf)&jr~{xI|f&^3W2T>u465xUhuQ`u{+OXtFmy8Kh;J`dkIAY3FV_5D^qnwdG9ya z{wVpQb>3SV1PQ2T9{|=Y&_ssW`W=R;!|Z(FqSuM*Ybt53TY77OZ98K7cT(w>40XnA z*2^a%lXevyD>GdklZ*!HAs&dwdLluZg$+0(xjedo`PIA zEDWu-Zu}slU$koCvC3PW1r95vEqBNsia=p{olYsZ%IlW`&h3g`!JaaiCilLpH14s2 zGRqJ~*gXW>h4Oap%SmdgUE5M?V#0gbYw}e@4S2qJ_)}4T+f%@y5^(OV(;sDwf?#8$x-FC|s7t*x9grlytH-oQw< zN!ue?3rsYoUP${W|1qrj=j5PK*KT=hOx*TpMaO}!Ua4hNGZYF{((*npefl=?tkRvy z_V9e0<79Tv>e0=f>XfO2ayip%=k(nDcRWtwdzV6zKSR!4epF?(T6VUhfLsn_OB*{64#1rmfI(#VRn};pjy194*V$ zgQbJC?2H>{8LP+8TCv^N|lX`}kI_i}Ypfm(156;|6bR>~~MRCJ7rbl5NKx z(^sjD3yFQ3%+Y@{Xbm@<0uO#(&mXgnxzShl?fcTywIA38PLY8)egIa3es4J*7!&o@-a3xWf#E4TV0auBh$5CgX^l`q+i5 zom<84nbdh+U2G5Dh`=$6U0`QNHgf6`#F;%;I=7mYDLwb?$owkG1f3mg^Dt8kTOGM; znE7dy%vVEeF(YTGGvZ^(O!p-;WvmHT@4IKY)z3pQkEaZ@QU;YY@2kJzX|Z}hgUul@ zFRzGIP9c0U>k!Wc0p z)_q#f68yQ+844o)D26D(tlIw4bf`RdAiRV`4<_UEjA4*?SwXJlP9cj5^(8G^yyZ2@ z?0zD3dg2#Sn1KT}cOHq2m^nctkNg*ov5r6K_z$!O+*{m&-u`XBLXf&-oF`52vM{|` z{0fsMT8}OpIj^?%gY&;YJ&lb61tP2z{e&RdgD&47`-f8=)*h{=hTU%jF$3xlOW%0NE zG%Mr5X1Yb6uHyoo&=_1n=p-z_k`q(hV1^if*n^1O)RO&5^{?hkxgP_hUYrvOdmzSj zp~08&+JO82xbwgs`WH}Xx@2NFK+;{gfrc{WfF2kF&;}KP1y5s?9weM##Ot=t? zy7+>-b4Q+f!?lfvy?KSs9i;3vBSHX8-xwf?bQL$6mQY7|bUXsz2-X#U8^}7#I#%+M zrSnt?7jkE398%N(Cw6tyIO$E&grvD_jtN<8+l7^RwsQKzNHf2L@&klb5q~gr-qSy+ z{dc_;?6-d204+7W={l&cX>~2OM>a(>-*g24ReNAd*iop#6>!iWlSRuo7swGqV##gViGeWv)Fm=ax1uL16JS%@K2g%_py(=J)w)OD<=RmAp4ZC?;{lHUNuo$>UZ zT7G(J0MbfaLJzqLW&2YQ?XoFoGAZ24xo&n}f%Vys0&ADCC^Jev#ND(NUj=0Sd6qRz zi_rqYHiDevn)#`$O&SzqZOrB}gm&?Y_&=RGDr7_@f;zT@?$X3qJ}fiZAYlwR4yrDF zRjo-ef{upH0CW;P54~+JAel%$>mW}2ga30R4Fs}T`xvEL3^^14J>pc`bi3^8T{}DT z4WXNqs2I^o6i0kRNa-S~|H#l2)HUNrI*h;Fl8=}foZ*i$2}WduFls^a&FBAeqZ9_7 zF4)@_SC}pPqP&|r45TEt%zi+`mUK>F8FE(ruJ#Q--$k!_=^BSit1Tu(h+%$Ho5If3 zB*m$R{BBmgB+Yv)-e$bIrWNlK?Hhs4&&kT0jD3{j_eMjDpUtqs2mhThXB)6${Up}Y zzKe3GA{E(r--qiIjk-JakiqbGt;q#qbhsk!Tv6-gHe`FGPUFXLr%dZz4A^Mo^QNYR8!UR$rFw&qWI#yG+bEy&FKw z^9-32mrQ`EM{TzOW=?;LJ@9~9uF@tf)!$%tZ46Y{3g+esG3}@QI^Qd zV0|_Ao`%}h2)6a*K8c?mj-tmV@5yojdU;=t$ep~f2)V3#AMD@c=Y_G+NF9U4aQnlv zI%b^-PAhiyjF@2tszZITUUY;JHC*;B$FDimu@eV-71?ilP8S#!xS)ZY&$!vYJdL^e Ee~cnk_5c6? literal 0 HcmV?d00001 diff --git a/src/assets/svg/404.svg b/src/assets/svg/404.svg new file mode 100644 index 0000000..6df5019 --- /dev/null +++ b/src/assets/svg/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/jue_se.svg b/src/assets/svg/jue_se.svg new file mode 100644 index 0000000..38d14f1 --- /dev/null +++ b/src/assets/svg/jue_se.svg @@ -0,0 +1,11 @@ + + + jiaoseguanli-2 + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/qu_dao.svg b/src/assets/svg/qu_dao.svg new file mode 100644 index 0000000..52c2f4a --- /dev/null +++ b/src/assets/svg/qu_dao.svg @@ -0,0 +1,12 @@ + + + 形状 2 + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/ren_wu.svg b/src/assets/svg/ren_wu.svg new file mode 100644 index 0000000..dc70342 --- /dev/null +++ b/src/assets/svg/ren_wu.svg @@ -0,0 +1,15 @@ + + + cheliang__02-02-01qiandaojilu + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/vue.svg b/src/assets/svg/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/src/assets/svg/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/wei_xin.svg b/src/assets/svg/wei_xin.svg new file mode 100644 index 0000000..7d348cf --- /dev/null +++ b/src/assets/svg/wei_xin.svg @@ -0,0 +1,18 @@ + + + 24gf-bubblesDots5备份 2 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/wen_sheng_tu.svg b/src/assets/svg/wen_sheng_tu.svg new file mode 100644 index 0000000..fdef16b --- /dev/null +++ b/src/assets/svg/wen_sheng_tu.svg @@ -0,0 +1,13 @@ + + + wenshengtu + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/wo_de.svg b/src/assets/svg/wo_de.svg new file mode 100644 index 0000000..55be82f --- /dev/null +++ b/src/assets/svg/wo_de.svg @@ -0,0 +1,14 @@ + + + 编组 + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/xiao_cheng_xu.svg b/src/assets/svg/xiao_cheng_xu.svg new file mode 100644 index 0000000..249cc5e --- /dev/null +++ b/src/assets/svg/xiao_cheng_xu.svg @@ -0,0 +1,22 @@ + + + 编组 7备份 2 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/AppContainerBox/index.ts b/src/components/AppContainerBox/index.ts new file mode 100644 index 0000000..e94f7df --- /dev/null +++ b/src/components/AppContainerBox/index.ts @@ -0,0 +1,3 @@ +import AppContainerBox from './index.vue' + +export { AppContainerBox } diff --git a/src/components/AppContainerBox/index.vue b/src/components/AppContainerBox/index.vue new file mode 100644 index 0000000..87adb37 --- /dev/null +++ b/src/components/AppContainerBox/index.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/src/components/AppContentBox/index.ts b/src/components/AppContentBox/index.ts new file mode 100644 index 0000000..04261f7 --- /dev/null +++ b/src/components/AppContentBox/index.ts @@ -0,0 +1,3 @@ +import AppContentBox from './index.vue' + +export { AppContentBox } diff --git a/src/components/AppContentBox/index.vue b/src/components/AppContentBox/index.vue new file mode 100644 index 0000000..43caa74 --- /dev/null +++ b/src/components/AppContentBox/index.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/src/components/AppSubMenuBox/index.ts b/src/components/AppSubMenuBox/index.ts new file mode 100644 index 0000000..1037c0a --- /dev/null +++ b/src/components/AppSubMenuBox/index.ts @@ -0,0 +1,3 @@ +import AppSubMenuBox from './index.vue' + +export { AppSubMenuBox } diff --git a/src/components/AppSubMenuBox/index.vue b/src/components/AppSubMenuBox/index.vue new file mode 100644 index 0000000..cd28458 --- /dev/null +++ b/src/components/AppSubMenuBox/index.vue @@ -0,0 +1,14 @@ + + + + + diff --git a/src/components/AppSubMenuList/index.d.ts b/src/components/AppSubMenuList/index.d.ts new file mode 100644 index 0000000..26278f0 --- /dev/null +++ b/src/components/AppSubMenuList/index.d.ts @@ -0,0 +1,5 @@ +export interface SubMenuItem { + title: string + content: string + id: string +} diff --git a/src/components/AppSubMenuList/index.ts b/src/components/AppSubMenuList/index.ts new file mode 100644 index 0000000..d06a525 --- /dev/null +++ b/src/components/AppSubMenuList/index.ts @@ -0,0 +1,3 @@ +import AppSubMenuList from './index.vue' + +export { AppSubMenuList } diff --git a/src/components/AppSubMenuList/index.vue b/src/components/AppSubMenuList/index.vue new file mode 100644 index 0000000..0bf8e0f --- /dev/null +++ b/src/components/AppSubMenuList/index.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/src/components/AppSubMenuTitle/index.ts b/src/components/AppSubMenuTitle/index.ts new file mode 100644 index 0000000..431d21b --- /dev/null +++ b/src/components/AppSubMenuTitle/index.ts @@ -0,0 +1,3 @@ +import AppSubMenuTitle from './index.vue' + +export { AppSubMenuTitle } diff --git a/src/components/AppSubMenuTitle/index.vue b/src/components/AppSubMenuTitle/index.vue new file mode 100644 index 0000000..77dbc8d --- /dev/null +++ b/src/components/AppSubMenuTitle/index.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue deleted file mode 100644 index adda173..0000000 --- a/src/components/HelloWorld.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - - - diff --git a/src/components/SvgIcon/index.ts b/src/components/SvgIcon/index.ts new file mode 100644 index 0000000..d14e817 --- /dev/null +++ b/src/components/SvgIcon/index.ts @@ -0,0 +1,3 @@ +import SvgIcon from './index.vue' + +export { SvgIcon } diff --git a/src/components/SvgIcon/index.vue b/src/components/SvgIcon/index.vue new file mode 100644 index 0000000..084d064 --- /dev/null +++ b/src/components/SvgIcon/index.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/src/design/index.scss b/src/design/index.scss new file mode 100644 index 0000000..500e4d9 --- /dev/null +++ b/src/design/index.scss @@ -0,0 +1,72 @@ +@import "./mixins/config.scss"; +@import "./mixins/mixins.scss"; +:-webkit-autofill { + transition: background-color 5000s ease-in-out 0s !important; +} + +html { + overflow: hidden; + text-size-adjust: 100%; +} + +html, +body { + width: 100%; + height: 100%; + overflow: visible; + overflow-x: hidden; + color: var(--text-color); + + &.color-weak { + filter: invert(80%); + } + + &.gray-mode { + filter: grayscale(100%); + filter: progid:dximagetransform.microsoft.basicimage(grayscale=1); + } +} + +a:focus, +a:active, +button, +div, +svg, +span { + outline: none; +} + +/** 打包后夜间模式样式有问题 在这里覆盖 */ +html[data-theme="dark"] { + /** 菜单边框 */ + ul li { + border: none; + } + + ul li:hover { + color: inherit !important; + border: none; + box-shadow: none; + } + + /** 日期输入框 */ + .ant-picker-input > input { + border: none; + } + + .ant-picker-input > input:focus { + color: inherit !important; + box-shadow: none; + } +} + +.ant-input-number { + width: 100%; +} + +// 保持 和 windi 一样的全局样式,减少升级带来的影响 +ul { + padding: 0; + margin: 0; + list-style: none; +} diff --git a/src/design/mixins/config.scss b/src/design/mixins/config.scss new file mode 100644 index 0000000..06ee5f3 --- /dev/null +++ b/src/design/mixins/config.scss @@ -0,0 +1,3 @@ +$namespace: "app"; +$menu-width: 80px; +$sub-menu-width: 180px; diff --git a/src/design/mixins/mixins.scss b/src/design/mixins/mixins.scss new file mode 100644 index 0000000..21f92a1 --- /dev/null +++ b/src/design/mixins/mixins.scss @@ -0,0 +1,6 @@ +@mixin app($block) { + $B: $namespace + "-" + $block; + .#{$B} { + @content; + } +} diff --git a/src/design/public.scss b/src/design/public.scss new file mode 100644 index 0000000..3ebdf11 --- /dev/null +++ b/src/design/public.scss @@ -0,0 +1,49 @@ +#app { + width: 100%; + height: 100%; +} + +// ================================= +// ==============scrollbar========== +// ================================= + +::-webkit-scrollbar { + width: 7px; + height: 8px; +} + +// ::-webkit-scrollbar-track { +// background: transparent; +// } + +::-webkit-scrollbar-track { + background-color: rgba($color: #000000, $alpha: 0.5); +} + +::-webkit-scrollbar-thumb { + background: rgba($color: #000000, $alpha: 0.6); + background-color: rgba($color: #9093994d, $alpha: 0.3); + border-radius: 2px; + box-shadow: inset 0 0 6px rgba($color: #000000, $alpha: 0.2); +} + +::-webkit-scrollbar-thumb:hover { + background-color: var(--border-color); +} + +// ================================= +// ==============nprogress========== +// ================================= +#nprogress { + pointer-events: none; + + .bar { + position: fixed; + top: 0; + left: 0; + z-index: 99999; + width: 100%; + height: 2px; + opacity: 0.75; + } +} diff --git a/src/enums/cacheEnum.ts b/src/enums/cacheEnum.ts new file mode 100644 index 0000000..86d7178 --- /dev/null +++ b/src/enums/cacheEnum.ts @@ -0,0 +1,12 @@ +// token key +export const ACCESS_TOKEN_KEY = 'ACCESS_TOKEN' + +// user info key +export const USER_INFO_KEY = 'USER_INFO' + +export const USET_STORE_KEY = 'USER_STORE' + +export enum CatchTypeEnum { + ACCESS_TOKEN_KEY, + USER_INFO_KEY, +} diff --git a/src/enums/commonEnum.ts b/src/enums/commonEnum.ts new file mode 100644 index 0000000..eaff220 --- /dev/null +++ b/src/enums/commonEnum.ts @@ -0,0 +1,14 @@ +export enum UserTypeEnum { + WEB = 'web', + C = 'c', +} + +export enum GrantTypeEnum { + PASSWORD = 'password', + CAPTCHA = 'captcha', + SMS = 'sms', +} + +export enum TypeEnum { + PHONE = 'phone', +} diff --git a/src/enums/httpEnum.ts b/src/enums/httpEnum.ts new file mode 100644 index 0000000..f94bdd3 --- /dev/null +++ b/src/enums/httpEnum.ts @@ -0,0 +1,55 @@ +/** + * @description: request method + */ +export enum RequestEnum { + GET = 'GET', + POST = 'POST', + PUT = 'PUT', + DELETE = 'DELETE', +} + +/** + * @description: contentType + */ +export enum ContentTypeEnum { + // json + JSON = 'application/json;charset=UTF-8', + // form-data qs + FORM_URLENCODED = 'application/x-www-form-urlencoded;charset=UTF-8', + // form-data upload + FORM_DATA = 'multipart/form-data;charset=UTF-8', +} + +export enum ResultEnum { + SUCCESS = 200, + ERROR = -1, + TIMEOUT = 400, + UNAUTHORIZED = 401, + INTERNAL_SERVER_ERROR = 500, + TYPE = 'success', +} + +export enum HttpErrorMsgEnum { + ERROR_TIP = '错误提示', + API_REQUEST_FAILED = '请求出错,请稍候重试', + API_TIMEOUT_MESSAGE = '接口请求超时,请刷新页面重试!', + + NETWORK_EXCEPTION = '网络异常,请稍候重试', + + ERROR_MESSAGE_401 = '用户没有权限(令牌、用户名、密码错误)!', + ERROR_MESSAGE_403 = '用户得到授权,但是访问是被禁止的。!', + ERROR_MESSAGE_404 = '网络请求错误,未找到该资源!', + ERROR_MESSAGE_405 = '网络请求错误,请求方法未允许!', + ERROR_MESSAGE_408 = '请求超时!', + ERROR_MESSAGE_500 = '服务器错误,请联系管理员!', + ERROR_MESSAGE_501 = '网络请求错误,未实现!', + ERROR_MESSAGE_502 = '网络请求错误,网关错误!', + ERROR_MESSAGE_503 = '服务不可用,服务器暂时过载或维护!', + ERROR_MESSAGE_504 = '网络请求错误,网关超时!', + ERROR_MESSAGE_505 = 'http版本不受支持!', +} + +export enum HttpSuccessEnum { + SUCCESS_TIP = '成功提示', + OPERATION_SUCCESS = '操作成功', +} diff --git a/src/enums/menuEnum.ts b/src/enums/menuEnum.ts new file mode 100644 index 0000000..0daccda --- /dev/null +++ b/src/enums/menuEnum.ts @@ -0,0 +1,22 @@ +export enum MenuTypeEnum { + // 会话 + CONVERSATION = 'conversation', + + // 文生图 + TEXT_TO_PICTURE = 'textToPicture', + + // 角色 + ROLE = 'role', + + // 任务 + TASK = 'task', + + // 渠道 + CHANNEL = 'channel', + + // 小程序 + APPLET = 'applet', + + // 我的 + USER = 'user', +} diff --git a/src/enums/pageEnum.ts b/src/enums/pageEnum.ts new file mode 100644 index 0000000..91d5908 --- /dev/null +++ b/src/enums/pageEnum.ts @@ -0,0 +1,11 @@ +/** + * @description: 页面枚举(使用router中name属性) + */ +export enum PageEnum { + // 登录 + BASE_LOGIN = 'Login', + + // 错误 + ERROR_PAGE_NAME_404 = '404', + +} diff --git a/src/hooks/useMessage.tsx b/src/hooks/useMessage.tsx new file mode 100644 index 0000000..546701a --- /dev/null +++ b/src/hooks/useMessage.tsx @@ -0,0 +1,111 @@ +import type { ModalFuncProps } from 'ant-design-vue/lib/modal/Modal' + +import { message as Message, Modal, notification } from 'ant-design-vue' +import { CheckCircleFilled, CloseCircleFilled, InfoCircleFilled } from '@ant-design/icons-vue' + +import type { ConfigProps, NotificationArgsProps } from 'ant-design-vue/lib/notification' +import { isString } from '@/utils/is' + +export interface NotifyApi { + info(config: NotificationArgsProps): void + success(config: NotificationArgsProps): void + error(config: NotificationArgsProps): void + warn(config: NotificationArgsProps): void + warning(config: NotificationArgsProps): void + open(args: NotificationArgsProps): void + close(key: string): void + config(options: ConfigProps): void + destroy(): void +} + +export declare type NotificationPlacement = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' +export declare type IconType = 'success' | 'info' | 'error' | 'warning' +export interface ModalOptionsEx extends Omit { + iconType: 'warning' | 'success' | 'error' | 'info' +} +export type ModalOptionsPartial = Partial & Pick + +function getIcon(iconType: string) { + if (iconType === 'warning') + return + else if (iconType === 'success') + return + else if (iconType === 'info') + return + else + return +} + +function renderContent({ content }: Pick) { + if (isString(content)) + return