From 0ce453e32d6ccb5d63e36af7acfff935e1aed7bb Mon Sep 17 00:00:00 2001 From: Maxence Date: Thu, 8 Feb 2024 10:27:25 +0100 Subject: [PATCH 001/108] Update server.js --- server/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/server.js b/server/server.js index 8a77ba5..3e1eb58 100644 --- a/server/server.js +++ b/server/server.js @@ -16,4 +16,4 @@ app.use("/api/users", userRoutes); app.listen(process.env.PORT, () => { console.log(`Server started on port ${process.env.PORT}`); -}); +}); \ No newline at end of file From 3ac0c3101651a81635ff1db87c36cc982394468e Mon Sep 17 00:00:00 2001 From: Maxence Date: Thu, 8 Feb 2024 10:56:45 +0100 Subject: [PATCH 002/108] feat: qrcode --- server/package-lock.json | 285 ++++++++++++++++++++++++++++++++++++++- server/package.json | 3 +- 2 files changed, 286 insertions(+), 2 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index 7305134..8d4a21f 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -12,7 +12,8 @@ "cors": "^2.8.5", "dotenv": "^16.4.1", "express": "^4.18.2", - "mongoose": "^8.1.1" + "mongoose": "^8.1.1", + "qrcode": "^1.5.3" }, "devDependencies": { "nodemon": "^3.0.3", @@ -715,6 +716,14 @@ "node": ">=0.4.0" } }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -865,6 +874,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, "node_modules/chai": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", @@ -922,6 +939,32 @@ "fsevents": "~2.3.2" } }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1002,6 +1045,14 @@ } } }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/deep-eql": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", @@ -1053,6 +1104,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + }, "node_modules/dotenv": { "version": "16.4.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz", @@ -1069,6 +1125,16 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -1256,6 +1322,18 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -1294,6 +1372,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-func-name": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", @@ -1480,6 +1566,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -1549,6 +1643,17 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/loupe": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", @@ -1946,6 +2051,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -1954,6 +2092,14 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -2012,6 +2158,14 @@ "pathe": "^1.1.0" } }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/postcss": { "version": "8.4.33", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", @@ -2080,6 +2234,23 @@ "node": ">=6" } }, + "node_modules/qrcode": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", + "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -2134,6 +2305,19 @@ "node": ">=8.10.0" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "node_modules/rollup": { "version": "4.9.6", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", @@ -2260,6 +2444,11 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "node_modules/set-function-length": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", @@ -2386,6 +2575,30 @@ "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", "dev": true }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-final-newline": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", @@ -2724,6 +2937,11 @@ "node": ">= 8" } }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, "node_modules/why-is-node-running": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", @@ -2740,12 +2958,77 @@ "node": ">=8" } }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", diff --git a/server/package.json b/server/package.json index 6901177..8da946a 100644 --- a/server/package.json +++ b/server/package.json @@ -19,6 +19,7 @@ "cors": "^2.8.5", "dotenv": "^16.4.1", "express": "^4.18.2", - "mongoose": "^8.1.1" + "mongoose": "^8.1.1", + "qrcode": "^1.5.3" } } From 0d8e14a2ee4e1446066ecf6706902625573e373e Mon Sep 17 00:00:00 2001 From: Maxence Date: Thu, 8 Feb 2024 11:34:48 +0100 Subject: [PATCH 003/108] routes: added endpoints --- server/controllers/auth.controller.js | 20 ++++++++++++++++++++ server/routes/auth.routes.js | 9 +++++++++ server/routes/flami.routes.js | 12 ++++++++++++ server/routes/misc.routes.js | 7 +++++++ server/routes/user.routes.js | 8 +++++--- server/routes/users.routes.js | 11 +++++++++++ server/server.js | 10 +++++++++- 7 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 server/controllers/auth.controller.js create mode 100644 server/routes/auth.routes.js create mode 100644 server/routes/flami.routes.js create mode 100644 server/routes/misc.routes.js create mode 100644 server/routes/users.routes.js diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js new file mode 100644 index 0000000..02e4cf0 --- /dev/null +++ b/server/controllers/auth.controller.js @@ -0,0 +1,20 @@ +const auth = { + signup: async (req, res) => { + try { + const formdata = req.body; + res.status(200).json(formdata); + } catch (error) { + res.status(404).json({ message: error.message }); + } + }, + signin: async (req, res) => { + const formdata = req.body; + try { + res.status(201).json(formdata); + } catch (error) { + res.status(409).json({ message: error.message }); + } + }, +}; + +export default auth; diff --git a/server/routes/auth.routes.js b/server/routes/auth.routes.js new file mode 100644 index 0000000..3e328d0 --- /dev/null +++ b/server/routes/auth.routes.js @@ -0,0 +1,9 @@ +import Router from "express"; +import auth from "../controllers/auth.controller.js"; + +const router = Router(); + +router.post("/signin", auth.signin); +router.post("/signup", auth.signup); + +export default router; \ No newline at end of file diff --git a/server/routes/flami.routes.js b/server/routes/flami.routes.js new file mode 100644 index 0000000..7ad509b --- /dev/null +++ b/server/routes/flami.routes.js @@ -0,0 +1,12 @@ +import Router from "express"; +import flami from "../controllers/flami.controller.js"; + +const router = Router(); + +router.get("/", flami.getFlami); +router.put("/ranked", flami.ranked); + +router.get("/share", flami.share); +router.get("/cosmetics", flami.getCosmetics); + +export default router; \ No newline at end of file diff --git a/server/routes/misc.routes.js b/server/routes/misc.routes.js new file mode 100644 index 0000000..8ec771c --- /dev/null +++ b/server/routes/misc.routes.js @@ -0,0 +1,7 @@ +import Router from "express"; + +const router = Router(); + +router.get("/map", user.getProfile); + +export default router; diff --git a/server/routes/user.routes.js b/server/routes/user.routes.js index 85c44ce..a5007c1 100644 --- a/server/routes/user.routes.js +++ b/server/routes/user.routes.js @@ -1,9 +1,11 @@ import Router from "express"; -import userController from "../controllers/user.controller.js"; +import user from "../controllers/user.controller.js"; const router = Router(); -router.get("/", userController.getUsers); -router.post("/add", userController.addUser); +router.get("/profile", user.getProfile); +router.get("/badges", user.getBadges); +router.get("/account", user.getAccount); +router.put("/account", user.updateAccount); export default router; diff --git a/server/routes/users.routes.js b/server/routes/users.routes.js new file mode 100644 index 0000000..8fbef04 --- /dev/null +++ b/server/routes/users.routes.js @@ -0,0 +1,11 @@ +import Router from "express"; +import user from "../controllers/user.controller.js"; +import flami from "../controllers/flami.controller.js"; + +const router = Router(); + +router.get("/flami", flami.getFlami); +router.get("/badges", user.getBadges); +router.get("/profile", user.getProfile); + +export default router; diff --git a/server/server.js b/server/server.js index 3e1eb58..141d059 100644 --- a/server/server.js +++ b/server/server.js @@ -3,7 +3,11 @@ import express from "express"; import dotenv from "dotenv"; import "./config/db.js"; +import authRoutes from "./routes/auth.routes.js"; import userRoutes from "./routes/user.routes.js"; +import usersRoutes from "./routes/users.routes.js"; +import flamiRoutes from "./routes/flami.routes.js"; +import miscRoutes from "./routes/misc.routes.js"; dotenv.config(); @@ -12,7 +16,11 @@ const app = express(); app.use(express.json()); app.use(cors()); -app.use("/api/users", userRoutes); +app.use("/api/auth", authRoutes); +app.use("/api/my/flami", flamiRoutes); +app.use("/api/my", userRoutes); +app.use("/api/:name", usersRoutes); +app.use("/api", miscRoutes); app.listen(process.env.PORT, () => { console.log(`Server started on port ${process.env.PORT}`); From ec4233a164477df977dfb60c6208271f3d8df0d6 Mon Sep 17 00:00:00 2001 From: Maxence Date: Thu, 8 Feb 2024 22:20:12 +0100 Subject: [PATCH 004/108] changed routes --- server/routes/auth.routes.js | 6 +++--- server/routes/flami.routes.js | 10 +++++----- server/routes/misc.routes.js | 3 ++- server/routes/user.routes.js | 10 +++++----- server/routes/users.routes.js | 10 +++++----- server/server.js | 2 +- 6 files changed, 21 insertions(+), 20 deletions(-) diff --git a/server/routes/auth.routes.js b/server/routes/auth.routes.js index 3e328d0..f7b7f6b 100644 --- a/server/routes/auth.routes.js +++ b/server/routes/auth.routes.js @@ -1,9 +1,9 @@ import Router from "express"; -import auth from "../controllers/auth.controller.js"; +import authController from "../controllers/auth.controller.js"; const router = Router(); -router.post("/signin", auth.signin); -router.post("/signup", auth.signup); +router.post("/signin", authController.signin); +router.post("/signup", authController.signup); export default router; \ No newline at end of file diff --git a/server/routes/flami.routes.js b/server/routes/flami.routes.js index 7ad509b..e64a639 100644 --- a/server/routes/flami.routes.js +++ b/server/routes/flami.routes.js @@ -1,12 +1,12 @@ import Router from "express"; -import flami from "../controllers/flami.controller.js"; +import flamiController from "../controllers/flami.controller.js"; const router = Router(); -router.get("/", flami.getFlami); -router.put("/ranked", flami.ranked); +router.get("/", flamiController.getFlami); +router.put("/ranked", flamiController.rankup); -router.get("/share", flami.share); -router.get("/cosmetics", flami.getCosmetics); +router.get("/share", flamiController.share); +router.get("/cosmetics", flamiController.getCosmetics); export default router; \ No newline at end of file diff --git a/server/routes/misc.routes.js b/server/routes/misc.routes.js index 8ec771c..9ea5a3a 100644 --- a/server/routes/misc.routes.js +++ b/server/routes/misc.routes.js @@ -1,7 +1,8 @@ import Router from "express"; +import userController from "../controllers/user.controller.js"; const router = Router(); -router.get("/map", user.getProfile); +router.get("/map", userController.getProfile); export default router; diff --git a/server/routes/user.routes.js b/server/routes/user.routes.js index a5007c1..bd0a342 100644 --- a/server/routes/user.routes.js +++ b/server/routes/user.routes.js @@ -1,11 +1,11 @@ import Router from "express"; -import user from "../controllers/user.controller.js"; +import userController from "../controllers/user.controller.js"; const router = Router(); -router.get("/profile", user.getProfile); -router.get("/badges", user.getBadges); -router.get("/account", user.getAccount); -router.put("/account", user.updateAccount); +router.get("/profile", userController.getProfile); +router.get("/badges", userController.getBadges); +router.get("/account", userController.getAccount); +router.put("/account", userController.updateAccount); export default router; diff --git a/server/routes/users.routes.js b/server/routes/users.routes.js index 8fbef04..fa0dd83 100644 --- a/server/routes/users.routes.js +++ b/server/routes/users.routes.js @@ -1,11 +1,11 @@ import Router from "express"; -import user from "../controllers/user.controller.js"; -import flami from "../controllers/flami.controller.js"; +import userController from "../controllers/user.controller.js"; +import flamiController from "../controllers/flami.controller.js"; const router = Router(); -router.get("/flami", flami.getFlami); -router.get("/badges", user.getBadges); -router.get("/profile", user.getProfile); +router.get("/flami", flamiController.getFlami); +router.get("/badges", userController.getBadges); +router.get("/profile", userController.getProfile); export default router; diff --git a/server/server.js b/server/server.js index 141d059..f051fed 100644 --- a/server/server.js +++ b/server/server.js @@ -19,7 +19,7 @@ app.use(cors()); app.use("/api/auth", authRoutes); app.use("/api/my/flami", flamiRoutes); app.use("/api/my", userRoutes); -app.use("/api/:name", usersRoutes); +app.use("/api/user/:name", usersRoutes); app.use("/api", miscRoutes); app.listen(process.env.PORT, () => { From 802d31d5084d5a0803e7a21b04c7736a055de1e1 Mon Sep 17 00:00:00 2001 From: Maxence Date: Thu, 8 Feb 2024 22:20:15 +0100 Subject: [PATCH 005/108] Update package.json --- server/package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/package.json b/server/package.json index 8da946a..a92acda 100644 --- a/server/package.json +++ b/server/package.json @@ -16,9 +16,11 @@ "vitest": "^1.2.2" }, "dependencies": { + "bcryptjs": "^2.4.3", "cors": "^2.8.5", "dotenv": "^16.4.1", "express": "^4.18.2", + "jsonwebtoken": "^9.0.2", "mongoose": "^8.1.1", "qrcode": "^1.5.3" } From 772305946d6836c8b1312fda099fb45778a64a60 Mon Sep 17 00:00:00 2001 From: Maxence Date: Thu, 8 Feb 2024 22:20:35 +0100 Subject: [PATCH 006/108] Update request.rest for testing --- server/request.rest | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/server/request.rest b/server/request.rest index 6a80e38..81a4d2c 100644 --- a/server/request.rest +++ b/server/request.rest @@ -1,12 +1,20 @@ -GET http://localhost:3001/api/users +GET http://localhost:3001/api/my/profile ### -POST http://localhost:3001/api/users/add +POST http://localhost:3001/api/auth/signin Content-Type: application/json { "name": "Maxence", "email": "maxence@gmail.com", - "password": "5D*t4:6am" + "password": "mdptest", + "age": 16, + "flami_id": 0, + "badges": [], + "metadata": { + "favorite_sport": "Basketball", + "origin": "Internet", + "intent": "Other" + } } \ No newline at end of file From 8691ac8901ea14eb201bd2cda29eeae0908131d4 Mon Sep 17 00:00:00 2001 From: Maxence Date: Thu, 8 Feb 2024 22:20:48 +0100 Subject: [PATCH 007/108] Update controllers --- server/controllers/auth.controller.js | 37 ++++++++++++++++++++------ server/controllers/flami.controller.js | 17 ++++++++++++ server/controllers/user.controller.js | 30 ++++++++------------- 3 files changed, 57 insertions(+), 27 deletions(-) create mode 100644 server/controllers/flami.controller.js diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 02e4cf0..ab57ae7 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -1,20 +1,41 @@ -const auth = { +import userModel from "../models/user.model.js"; +import bcrypt from "bcryptjs"; + +const authController = { + authJWT: async (req, res) => { + var jwt = require('jsonwebtoken'); + var decoded = jwt.verify(token, process.env.PRIVATE); + }, signup: async (req, res) => { + const result = bcrypt.compareSync("my password", hash); + // result == true or result == false try { - const formdata = req.body; - res.status(200).json(formdata); + var token = jwt.sign({ dbdata: true }, process.env.PRIVATE); + res.status(200).json(token); } catch (error) { - res.status(404).json({ message: error.message }); + res.status(404).json({ message: error.message, error: 404 }); } }, signin: async (req, res) => { - const formdata = req.body; + let userdata = req.body; + userdata.password = bcrypt.hashSync(userdata.password, bcrypt.genSaltSync(11)); + let new_user = new userModel(userdata); try { - res.status(201).json(formdata); + await new_user.save(); + res.status(201).json({ + message: `Inscription finalisé. Bienvenue ${userdata.name} !`, + }); } catch (error) { - res.status(409).json({ message: error.message }); + res.status(409) + if (error.keyValue && error.keyValue.email) { + res.json({ message: `Un compte avec cet email (${error.keyValue.email}) existe déjà.`, error: 409 }) + } else if (error.keyValue && error.keyValue.name) { + res.json({ message: `Un compte avec ce nom (${error.keyValue.name}) existe déjà.`, error: 409 }) + } else { + res.json({ message: error.message, error: 409 }); + } } }, }; -export default auth; +export default authController; diff --git a/server/controllers/flami.controller.js b/server/controllers/flami.controller.js new file mode 100644 index 0000000..853a890 --- /dev/null +++ b/server/controllers/flami.controller.js @@ -0,0 +1,17 @@ +const flamiController = { + getFlami: (req, res) => { + + }, + getCosmetics: (req, res) => { + + }, + share: (req, res) => { + + }, + rankup: (req, res) => { + + } +}; + +export default flamiController; + \ No newline at end of file diff --git a/server/controllers/user.controller.js b/server/controllers/user.controller.js index 5b5a36b..8a253d7 100644 --- a/server/controllers/user.controller.js +++ b/server/controllers/user.controller.js @@ -1,24 +1,16 @@ -import userModel from "../models/user.model.js"; - const userController = { - getUsers: async (req, res) => { - try { - const users = await userModel.find(); - res.status(200).json(users); - } catch (error) { - res.status(404).json({ message: error.message }); - } - }, - addUser: async (req, res) => { - const user = req.body; - const newUser = new userModel(user); - try { - await newUser.save(); - res.status(201).json(newUser); - } catch (error) { - res.status(409).json({ message: error.message }); + getProfile: (req, res) => { + + }, + getAccount: (req, res) => { + + }, + getBadges: (req, res) => { + + }, + updateAccount: (req, res) => { + } - }, }; export default userController; From 9c048f9af069c35e5ea5c2cce1e2466064a927d3 Mon Sep 17 00:00:00 2001 From: Maxence Date: Thu, 8 Feb 2024 22:20:52 +0100 Subject: [PATCH 008/108] Update user.model.js --- server/models/user.model.js | 40 +++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/server/models/user.model.js b/server/models/user.model.js index 3218ac8..beccca2 100644 --- a/server/models/user.model.js +++ b/server/models/user.model.js @@ -4,19 +4,55 @@ const userSchema = new mongoose.Schema({ name: { type: String, required: true, + unique: true }, email: { type: String, required: true, + unique: true }, password: { type: String, - required: true, + required: true }, date: { type: Date, - default: Date.now, + default: Date.now + }, + age: { + type: Number, + required: true, + min: 13 + }, + flami_id: { + type: Number, + required: true + }, + badges: { + type: Array, + required: true }, + metadata: [{ + favorite_sport: { + type: String, + required: true + }, + origin: { + type: String, + required: true + }, + intent: { + type: String, + required: true + } + }] +}, +{ + statics: { + findByEmail (email) { + return this.find({ email: new RegExp(email, 'i') }); + } + } }); export default mongoose.model("User", userSchema); From 4f89d8349469045ffbc2388e4ee6066dd0cec889 Mon Sep 17 00:00:00 2001 From: Maxence Date: Thu, 8 Feb 2024 22:20:56 +0100 Subject: [PATCH 009/108] Update package-lock.json --- server/package-lock.json | 100 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 96 insertions(+), 4 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index 8d4a21f..08569a1 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -9,9 +9,11 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "bcryptjs": "^2.4.3", "cors": "^2.8.5", "dotenv": "^16.4.1", "express": "^4.18.2", + "jsonwebtoken": "^9.0.2", "mongoose": "^8.1.1", "qrcode": "^1.5.3" }, @@ -769,6 +771,11 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -844,6 +851,11 @@ "node": ">=16.20.1" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -1120,6 +1132,14 @@ "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1619,6 +1639,46 @@ "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", "dev": true }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/kareem": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", @@ -1654,6 +1714,41 @@ "node": ">=8" } }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, "node_modules/loupe": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", @@ -1667,7 +1762,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -2378,7 +2472,6 @@ "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -2993,8 +3086,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yargs": { "version": "15.4.1", From 371810227f0ad9c2317b93767869430f547b4188 Mon Sep 17 00:00:00 2001 From: Akeko Date: Mon, 12 Feb 2024 13:43:15 +0100 Subject: [PATCH 010/108] refactor(tailwind.config) : add colors tailwind --- client/tailwind.config.js | 70 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/client/tailwind.config.js b/client/tailwind.config.js index 614c86b..52f6393 100644 --- a/client/tailwind.config.js +++ b/client/tailwind.config.js @@ -2,7 +2,75 @@ export default { content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"], theme: { - extend: {}, + extend: { + colors: { + "tree-poppy": { + 50: "#fffbea", + 100: "#fff2c5", + 200: "#ffe685", + 300: "#ffd246", + 400: "#ffbd1b", + 500: "#ff9900", + 600: "#e27200", + 700: "#bb4d02", + 800: "#983b08", + 900: "#7c310b", + 950: "#481700", + }, + mandy: { + 50: "#fef2f2", + 100: "#fde7e6", + 200: "#fbd0d1", + 300: "#f7aaac", + 400: "#f27a80", + 500: "#e84855", + 600: "#d42a40", + 700: "#b31d34", + 800: "#961b32", + 900: "#801b31", + 950: "#470a16", + }, + "midnight-moss": { + 50: "#f2f8f1", + 100: "#e0efdc", + 200: "#c1debc", + 300: "#92c68f", + 400: "#61a85f", + 500: "#3e8b3f", + 600: "#2c6f2e", + 700: "#245827", + 800: "#1e4720", + 900: "#1a3a1d", + 950: "#071108", + }, + mahogany: { + 50: "#fff0f0", + 100: "#ffdddd", + 200: "#ffc1c1", + 300: "#ff9696", + 400: "#ff5a5a", + 500: "#ff2727", + 600: "#fb0707", + 700: "#d40101", + 800: "#ae0606", + 900: "#900c0c", + 950: "#570000", + }, + alabaster: { + 50: "#fafafa", + 100: "#efefef", + 200: "#dcdcdc", + 300: "#bdbdbd", + 400: "#989898", + 500: "#7c7c7c", + 600: "#656565", + 700: "#525252", + 800: "#464646", + 900: "#3d3d3d", + 950: "#292929", + }, + }, + }, }, plugins: [], }; From 1f07d69f4a3c75cefb49e4e10b43046ff337d8dd Mon Sep 17 00:00:00 2001 From: Maxence Date: Thu, 15 Feb 2024 15:50:38 +0100 Subject: [PATCH 011/108] feat: auth, profile, account --- server/controllers/auth.controller.js | 52 ++++++++++++++++---------- server/controllers/flami.controller.js | 3 +- server/controllers/user.controller.js | 37 ++++++++++++++---- server/helpers/authMiddleware.js | 33 ++++++++++++++++ server/models/user.model.js | 5 ++- server/request.rest | 31 ++++++++++++++- server/routes/misc.routes.js | 2 +- server/routes/user.routes.js | 4 +- server/server.js | 9 +++-- 9 files changed, 136 insertions(+), 40 deletions(-) create mode 100644 server/helpers/authMiddleware.js diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index ab57ae7..27239f6 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -1,39 +1,51 @@ import userModel from "../models/user.model.js"; +import auth from "../helpers/authMiddleware.js"; import bcrypt from "bcryptjs"; const authController = { - authJWT: async (req, res) => { - var jwt = require('jsonwebtoken'); - var decoded = jwt.verify(token, process.env.PRIVATE); - }, signup: async (req, res) => { - const result = bcrypt.compareSync("my password", hash); - // result == true or result == false - try { - var token = jwt.sign({ dbdata: true }, process.env.PRIVATE); - res.status(200).json(token); - } catch (error) { - res.status(404).json({ message: error.message, error: 404 }); - } - }, - signin: async (req, res) => { let userdata = req.body; userdata.password = bcrypt.hashSync(userdata.password, bcrypt.genSaltSync(11)); let new_user = new userModel(userdata); try { await new_user.save(); - res.status(201).json({ - message: `Inscription finalisé. Bienvenue ${userdata.name} !`, + let token = auth.encode({ email: new_user.email, password: new_user.password }); + return res.status(201).json({ + message: `Inscription finalisé. Bienvenue ${new_user.name} !`, + data: { jwt: token } }); } catch (error) { - res.status(409) if (error.keyValue && error.keyValue.email) { - res.json({ message: `Un compte avec cet email (${error.keyValue.email}) existe déjà.`, error: 409 }) + return res.status(409).json({ message: `Un compte avec cet email (${error.keyValue.email}) existe déjà.`, error: 409 }) } else if (error.keyValue && error.keyValue.name) { - res.json({ message: `Un compte avec ce nom (${error.keyValue.name}) existe déjà.`, error: 409 }) + return res.status(409).json({ message: `Un compte avec ce nom (${error.keyValue.name}) existe déjà.`, error: 409 }) + } else if (error.keyValue && error.keyValue.age) { + return res.status(409).json({ message: `L'âge requis pour utiliser cette application est de 13 ans.`, error: 409 }) + } else { + return res.status(409).json({ message: error.message, error: 409 }); + } + } + }, + signin: async (req, res) => { + let userdata = req.body; + try { + let user = await userModel.findByEmail(userdata.email); + + if(!user[0]) { + return res.status(404).json({ message: "Ce compte n'existe pas.", error: 404 }); + } + + user = user[0]; + + const isValid = bcrypt.compareSync(userdata.password, user.password); + if(isValid) { + let token = auth.encode({ email: user.email, password: user.password }); + return res.status(200).json({ message: "Authentification réussie.", data: { jwt: token }}); } else { - res.json({ message: error.message, error: 409 }); + return res.status(401).json({ message: "Mot de passe incorrect.", error: 401 }); } + } catch (error) { + return res.status(404).json({ message: error.message, error: 404 }); } }, }; diff --git a/server/controllers/flami.controller.js b/server/controllers/flami.controller.js index 853a890..b699d2e 100644 --- a/server/controllers/flami.controller.js +++ b/server/controllers/flami.controller.js @@ -13,5 +13,4 @@ const flamiController = { } }; -export default flamiController; - \ No newline at end of file +export default flamiController; \ No newline at end of file diff --git a/server/controllers/user.controller.js b/server/controllers/user.controller.js index 8a253d7..d587c12 100644 --- a/server/controllers/user.controller.js +++ b/server/controllers/user.controller.js @@ -1,16 +1,39 @@ +import userModel from "../models/user.model.js"; +import auth from "../helpers/authMiddleware.js"; +import bcrypt from "bcryptjs"; + const userController = { getProfile: (req, res) => { - + let userdata = res.locals.user; + return res.status(200).json({ data: { + name: userdata.name, + email: userdata.email, + created_at: new Date(userdata.date).toDateString() + }}); }, - getAccount: (req, res) => { + // getAccount: (req, res) => { - }, + // }, getBadges: (req, res) => { - + let userdata = res.locals.user; + return res.status(200).json({ data: { + badges: userdata.badges + }}); }, - updateAccount: (req, res) => { - + updateAccount: async (req, res) => { + let userdata = res.locals.user; + let patchdata = req.body; + + // Re-encode password + if(patchdata.password) patchdata.password = bcrypt.hashSync(patchdata.password, bcrypt.genSaltSync(11)); + + await userModel.updateOne({_id: userdata._id}, patchdata); + + let token = auth.encode({ email: patchdata.email ?? userdata.email, password: patchdata.password ?? userdata.password }); + return res.status(200).json({ message: "Informations de compte misent à jour.", data: { + jwt: token + }}); } }; -export default userController; +export default userController; \ No newline at end of file diff --git a/server/helpers/authMiddleware.js b/server/helpers/authMiddleware.js new file mode 100644 index 0000000..3ecd93b --- /dev/null +++ b/server/helpers/authMiddleware.js @@ -0,0 +1,33 @@ +import jwt from "jsonwebtoken"; +import userModel from "../models/user.model.js"; + +const auth = { + encode: (data) => { + data.expiration = new Date().getTime() + (1209600 * 1000); + return jwt.sign(data, process.env.PRIVATE); + }, + require: async (req, res, next) => { + try { + if(!req.headers.authorization) throw { code: 400, message: 'Echec d\'authentification, le header authorisation est manquant.' } + + let userdata = jwt.verify(req.headers.authorization.replace('Bearer ', ''), process.env.PRIVATE); + let user = await userModel.findByEmail(userdata.email); + + let tdate = new Date(); + + if(!user[0]) throw { code: 404, message: 'Echec d\'authentification, l\'utilisateur du jeton n\'existe pas.' } + if(userdata.password !== user[0].password) throw { code: 401, message: 'Echec d\'authentification, mot de passe de jeton incorrect.' } + if(userdata.expiration < tdate.getTime()) throw { code: 401, expires: true, message: 'Echec d\'authentification, le jeton d\'authentification a expiré.' } + + tdate.setTime(userdata.expiration); + + res.set('Expires', tdate.toUTCString()); + res.locals.user = user[0]; + return next(); + } catch (error) { + return res.status(error.code ?? 401).json({ message: error.message, error: error.code ?? 401 }); + } + } +} + +export default auth; \ No newline at end of file diff --git a/server/models/user.model.js b/server/models/user.model.js index beccca2..5f4ef4b 100644 --- a/server/models/user.model.js +++ b/server/models/user.model.js @@ -24,9 +24,10 @@ const userSchema = new mongoose.Schema({ required: true, min: 13 }, - flami_id: { + flami: { type: Number, - required: true + required: true, + ref: 'Flami' }, badges: { type: Array, diff --git a/server/request.rest b/server/request.rest index 81a4d2c..61c11a0 100644 --- a/server/request.rest +++ b/server/request.rest @@ -1,8 +1,25 @@ +PATCH http://localhost:3001/api/my/account +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2VAZ21haWwuY29tIiwicGFzc3dvcmQiOiIkMmEkMTEkZUNpYXUvRmFSZnZlOVBiUDk4SW4uT2JtcTlOVVZYMzVWNHpMbTVkTlMxN0NMN1BmLkloTUsiLCJleHBpcmF0aW9uIjoxNzA5MjEzMjkyOTg1LCJpYXQiOjE3MDgwMDM2OTJ9.4daC7ULgknhNQWW_PBKvcYQoE0gBcHBMyMF0Mm2bdf4 +Content-Type: application/json + +{ + "name": "Maxence", + "password": "mdptest" +} + +### + +GET http://localhost:3001/api/my/badges +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2VAZ21haWwuY29tIiwicGFzc3dvcmQiOiIkMmEkMTEkZUNpYXUvRmFSZnZlOVBiUDk4SW4uT2JtcTlOVVZYMzVWNHpMbTVkTlMxN0NMN1BmLkloTUsiLCJleHBpcmF0aW9uIjoxNzA5MjEzMjkyOTg1LCJpYXQiOjE3MDgwMDM2OTJ9.4daC7ULgknhNQWW_PBKvcYQoE0gBcHBMyMF0Mm2bdf4 + +### + GET http://localhost:3001/api/my/profile +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2VAZ21haWwuY29tIiwicGFzc3dvcmQiOiIkMmEkMTEkZUNpYXUvRmFSZnZlOVBiUDk4SW4uT2JtcTlOVVZYMzVWNHpMbTVkTlMxN0NMN1BmLkloTUsiLCJleHBpcmF0aW9uIjoxNzA5MjEzMjkyOTg1LCJpYXQiOjE3MDgwMDM2OTJ9.4daC7ULgknhNQWW_PBKvcYQoE0gBcHBMyMF0Mm2bdf4 ### -POST http://localhost:3001/api/auth/signin +POST http://localhost:3001/api/auth/signup Content-Type: application/json { @@ -10,11 +27,21 @@ Content-Type: application/json "email": "maxence@gmail.com", "password": "mdptest", "age": 16, - "flami_id": 0, + "flami": 0, "badges": [], "metadata": { "favorite_sport": "Basketball", "origin": "Internet", "intent": "Other" } +} + +### + +POST http://localhost:3001/api/auth/signin +Content-Type: application/json + +{ + "email": "maxence@gmail.com", + "password": "mdptest" } \ No newline at end of file diff --git a/server/routes/misc.routes.js b/server/routes/misc.routes.js index 9ea5a3a..fdc48c7 100644 --- a/server/routes/misc.routes.js +++ b/server/routes/misc.routes.js @@ -5,4 +5,4 @@ const router = Router(); router.get("/map", userController.getProfile); -export default router; +export default router; \ No newline at end of file diff --git a/server/routes/user.routes.js b/server/routes/user.routes.js index bd0a342..a492bd1 100644 --- a/server/routes/user.routes.js +++ b/server/routes/user.routes.js @@ -5,7 +5,7 @@ const router = Router(); router.get("/profile", userController.getProfile); router.get("/badges", userController.getBadges); -router.get("/account", userController.getAccount); -router.put("/account", userController.updateAccount); +// router.get("/account", userController.getAccount); +router.patch("/account", userController.updateAccount); export default router; diff --git a/server/server.js b/server/server.js index f051fed..05326ae 100644 --- a/server/server.js +++ b/server/server.js @@ -8,6 +8,7 @@ import userRoutes from "./routes/user.routes.js"; import usersRoutes from "./routes/users.routes.js"; import flamiRoutes from "./routes/flami.routes.js"; import miscRoutes from "./routes/misc.routes.js"; +import auth from "./helpers/authMiddleware.js"; dotenv.config(); @@ -17,10 +18,10 @@ app.use(express.json()); app.use(cors()); app.use("/api/auth", authRoutes); -app.use("/api/my/flami", flamiRoutes); -app.use("/api/my", userRoutes); -app.use("/api/user/:name", usersRoutes); -app.use("/api", miscRoutes); +app.use("/api/my/flami", auth.require, flamiRoutes); +app.use("/api/my", auth.require, userRoutes); +app.use("/api/user/:name", auth.require, usersRoutes); +app.use("/api", auth.require, miscRoutes); app.listen(process.env.PORT, () => { console.log(`Server started on port ${process.env.PORT}`); From a2ce668f5e595063837ca32accc35a56daa37d73 Mon Sep 17 00:00:00 2001 From: Maxence Date: Thu, 15 Feb 2024 15:58:30 +0100 Subject: [PATCH 012/108] Update .gitignore --- server/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/.gitignore b/server/.gitignore index c6bba59..a24bc68 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -128,3 +128,5 @@ dist .yarn/build-state.yml .yarn/install-state.gz .pnp.* + +request.rest \ No newline at end of file From d001babb2f02948324d25947ecdc67825a29ccee Mon Sep 17 00:00:00 2001 From: Maxence Date: Fri, 16 Feb 2024 15:07:19 +0100 Subject: [PATCH 013/108] Update auth.controller.js --- server/controllers/auth.controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 27239f6..8b0cfd5 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -9,7 +9,7 @@ const authController = { let new_user = new userModel(userdata); try { await new_user.save(); - let token = auth.encode({ email: new_user.email, password: new_user.password }); + let token = auth.encode({ email: new_user.email }); return res.status(201).json({ message: `Inscription finalisé. Bienvenue ${new_user.name} !`, data: { jwt: token } From 566df1b7ccd604cbc10adbb8e136f29c1c429217 Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 19 Feb 2024 19:09:42 +0100 Subject: [PATCH 014/108] refactor: auth --- server/controllers/auth.controller.js | 2 +- server/helpers/authMiddleware.js | 12 ++++++------ server/request.rest | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 8b0cfd5..a513c48 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -39,7 +39,7 @@ const authController = { const isValid = bcrypt.compareSync(userdata.password, user.password); if(isValid) { - let token = auth.encode({ email: user.email, password: user.password }); + let token = auth.encode({ email: user.email }); return res.status(200).json({ message: "Authentification réussie.", data: { jwt: token }}); } else { return res.status(401).json({ message: "Mot de passe incorrect.", error: 401 }); diff --git a/server/helpers/authMiddleware.js b/server/helpers/authMiddleware.js index 3ecd93b..21b6bb6 100644 --- a/server/helpers/authMiddleware.js +++ b/server/helpers/authMiddleware.js @@ -3,8 +3,8 @@ import userModel from "../models/user.model.js"; const auth = { encode: (data) => { - data.expiration = new Date().getTime() + (1209600 * 1000); - return jwt.sign(data, process.env.PRIVATE); + // data.expiration = new Date().getTime() + (1209600 * 1000); + return jwt.sign(data, process.env.PRIVATE, { expiresIn: 1209600 }); }, require: async (req, res, next) => { try { @@ -13,15 +13,15 @@ const auth = { let userdata = jwt.verify(req.headers.authorization.replace('Bearer ', ''), process.env.PRIVATE); let user = await userModel.findByEmail(userdata.email); - let tdate = new Date(); + // let tdate = new Date(); if(!user[0]) throw { code: 404, message: 'Echec d\'authentification, l\'utilisateur du jeton n\'existe pas.' } if(userdata.password !== user[0].password) throw { code: 401, message: 'Echec d\'authentification, mot de passe de jeton incorrect.' } - if(userdata.expiration < tdate.getTime()) throw { code: 401, expires: true, message: 'Echec d\'authentification, le jeton d\'authentification a expiré.' } + // if(userdata.expiration < tdate.getTime()) throw { code: 401, expires: true, message: 'Echec d\'authentification, le jeton d\'authentification a expiré.' } - tdate.setTime(userdata.expiration); + // tdate.setTime(userdata.expiration); - res.set('Expires', tdate.toUTCString()); + // res.set('Expires', tdate.toUTCString()); res.locals.user = user[0]; return next(); } catch (error) { diff --git a/server/request.rest b/server/request.rest index 61c11a0..edf2e1a 100644 --- a/server/request.rest +++ b/server/request.rest @@ -1,5 +1,5 @@ PATCH http://localhost:3001/api/my/account -Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2VAZ21haWwuY29tIiwicGFzc3dvcmQiOiIkMmEkMTEkZUNpYXUvRmFSZnZlOVBiUDk4SW4uT2JtcTlOVVZYMzVWNHpMbTVkTlMxN0NMN1BmLkloTUsiLCJleHBpcmF0aW9uIjoxNzA5MjEzMjkyOTg1LCJpYXQiOjE3MDgwMDM2OTJ9.4daC7ULgknhNQWW_PBKvcYQoE0gBcHBMyMF0Mm2bdf4 +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2VAZ21haWwuY29tIiwicGFzc3dvcmQiOiIkMmEkMTEkZUNpYXUvRmFSZnZlOVBiUDk4SW4uT2JtcTlOVVZYMzVWNHpMbTVkTlMxN0NMN1BmLkloTUsiLCJleHBpcmF0aW9uIjoxNzA5MzA0NTA2NzA0LCJpYXQiOjE3MDgwOTQ5MDZ9.wKKKoYSn7cziNwa8ixJtfyoAj-2XbfXSJe1Z2JBxQKg Content-Type: application/json { @@ -10,12 +10,12 @@ Content-Type: application/json ### GET http://localhost:3001/api/my/badges -Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2VAZ21haWwuY29tIiwicGFzc3dvcmQiOiIkMmEkMTEkZUNpYXUvRmFSZnZlOVBiUDk4SW4uT2JtcTlOVVZYMzVWNHpMbTVkTlMxN0NMN1BmLkloTUsiLCJleHBpcmF0aW9uIjoxNzA5MjEzMjkyOTg1LCJpYXQiOjE3MDgwMDM2OTJ9.4daC7ULgknhNQWW_PBKvcYQoE0gBcHBMyMF0Mm2bdf4 +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2VAZ21haWwuY29tIiwicGFzc3dvcmQiOiIkMmEkMTEkZUNpYXUvRmFSZnZlOVBiUDk4SW4uT2JtcTlOVVZYMzVWNHpMbTVkTlMxN0NMN1BmLkloTUsiLCJleHBpcmF0aW9uIjoxNzA5MzA0NTA2NzA0LCJpYXQiOjE3MDgwOTQ5MDZ9.wKKKoYSn7cziNwa8ixJtfyoAj-2XbfXSJe1Z2JBxQKg ### GET http://localhost:3001/api/my/profile -Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2VAZ21haWwuY29tIiwicGFzc3dvcmQiOiIkMmEkMTEkZUNpYXUvRmFSZnZlOVBiUDk4SW4uT2JtcTlOVVZYMzVWNHpMbTVkTlMxN0NMN1BmLkloTUsiLCJleHBpcmF0aW9uIjoxNzA5MjEzMjkyOTg1LCJpYXQiOjE3MDgwMDM2OTJ9.4daC7ULgknhNQWW_PBKvcYQoE0gBcHBMyMF0Mm2bdf4 +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2VAZ21haWwuY29tIiwicGFzc3dvcmQiOiIkMmEkMTEkZUNpYXUvRmFSZnZlOVBiUDk4SW4uT2JtcTlOVVZYMzVWNHpMbTVkTlMxN0NMN1BmLkloTUsiLCJleHBpcmF0aW9uIjoxNzA5MzA0NTA2NzA0LCJpYXQiOjE3MDgwOTQ5MDZ9.wKKKoYSn7cziNwa8ixJtfyoAj-2XbfXSJe1Z2JBxQKg ### From 1600904a79f88cee697a7aa86c3cbfbfee07b836 Mon Sep 17 00:00:00 2001 From: Akeko Date: Mon, 19 Feb 2024 19:16:21 +0100 Subject: [PATCH 015/108] feat(auth): otp auth --- package-lock.json | 6 +++ package.json | 1 + server/controllers/auth.controller.js | 53 +++++++++++++++++++++------ server/controllers/otp.controller.js | 49 +++++++++++++++++++++++++ server/helpers/mailSender.js | 27 ++++++++++++++ server/models/otp.model.js | 42 +++++++++++++++++++++ server/package-lock.json | 18 +++++++++ server/package.json | 2 + server/request.rest | 18 +++++++-- server/routes/auth.routes.js | 4 +- server/server.js | 10 ++--- 11 files changed, 208 insertions(+), 22 deletions(-) create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 server/controllers/otp.controller.js create mode 100644 server/helpers/mailSender.js create mode 100644 server/models/otp.model.js diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ed0786a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "flami-app", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/package.json @@ -0,0 +1 @@ +{} diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 8b0cfd5..ebcccb3 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -1,26 +1,49 @@ -import userModel from "../models/user.model.js"; -import auth from "../helpers/authMiddleware.js"; import bcrypt from "bcryptjs"; +import auth from "../helpers/authMiddleware.js"; +import userModel from "../models/user.model.js"; const authController = { signup: async (req, res) => { let userdata = req.body; - userdata.password = bcrypt.hashSync(userdata.password, bcrypt.genSaltSync(11)); + userdata.password = bcrypt.hashSync( + userdata.password, + bcrypt.genSaltSync(11) + ); let new_user = new userModel(userdata); try { await new_user.save(); let token = auth.encode({ email: new_user.email }); + + const response = await OTPModel.find({ email: new_user.email }) + .sort({ createdAt: -1 }) + .limit(1); + if (response.length === 0 || otp !== response[0].otp) { + return res.status(400).json({ + success: false, + message: "The OTP is not valid", + }); + } + return res.status(201).json({ message: `Inscription finalisé. Bienvenue ${new_user.name} !`, - data: { jwt: token } + data: { jwt: token }, }); } catch (error) { if (error.keyValue && error.keyValue.email) { - return res.status(409).json({ message: `Un compte avec cet email (${error.keyValue.email}) existe déjà.`, error: 409 }) + return res.status(409).json({ + message: `Un compte avec cet email (${error.keyValue.email}) existe déjà.`, + error: 409, + }); } else if (error.keyValue && error.keyValue.name) { - return res.status(409).json({ message: `Un compte avec ce nom (${error.keyValue.name}) existe déjà.`, error: 409 }) + return res.status(409).json({ + message: `Un compte avec ce nom (${error.keyValue.name}) existe déjà.`, + error: 409, + }); } else if (error.keyValue && error.keyValue.age) { - return res.status(409).json({ message: `L'âge requis pour utiliser cette application est de 13 ans.`, error: 409 }) + return res.status(409).json({ + message: `L'âge requis pour utiliser cette application est de 13 ans.`, + error: 409, + }); } else { return res.status(409).json({ message: error.message, error: 409 }); } @@ -31,18 +54,24 @@ const authController = { try { let user = await userModel.findByEmail(userdata.email); - if(!user[0]) { - return res.status(404).json({ message: "Ce compte n'existe pas.", error: 404 }); + if (!user[0]) { + return res + .status(404) + .json({ message: "Ce compte n'existe pas.", error: 404 }); } user = user[0]; const isValid = bcrypt.compareSync(userdata.password, user.password); - if(isValid) { + if (isValid) { let token = auth.encode({ email: user.email, password: user.password }); - return res.status(200).json({ message: "Authentification réussie.", data: { jwt: token }}); + return res + .status(200) + .json({ message: "Authentification réussie.", data: { jwt: token } }); } else { - return res.status(401).json({ message: "Mot de passe incorrect.", error: 401 }); + return res + .status(401) + .json({ message: "Mot de passe incorrect.", error: 401 }); } } catch (error) { return res.status(404).json({ message: error.message, error: 404 }); diff --git a/server/controllers/otp.controller.js b/server/controllers/otp.controller.js new file mode 100644 index 0000000..58b31ba --- /dev/null +++ b/server/controllers/otp.controller.js @@ -0,0 +1,49 @@ +import otpGenerator from "otp-generator"; +import OTP from "../models/otp.model.js"; +import User from "../models/user.model.js"; + +const optController = { + setOTP: async (req, res) => { + try { + const { email } = req.body; + + const checkUserPresent = await User.findOne({ email }); + + if (checkUserPresent) { + return res.status(401).json({ + success: false, + message: `L'utilisateur existe déja.`, + }); + } + + const otp = otpGenerator.generate(6, { + upperCaseAlphabets: false, + lowerCaseAlphabets: false, + specialChars: false, + }); + + const result = await OTP.findOne({ otp: otp }); + console.log("Result is Generate OTP Func"); + console.log("OTP", otp); + console.log("Result", result); + while (result) { + otp = otpGenerator.generate(6, { + upperCaseAlphabets: false, + }); + } + const otpPayload = { email, otp }; + const otpBody = await OTP.create(otpPayload); + console.log("OTP Body", otpBody); + res.status(200).json({ + success: true, + message: `OTP Sent Successfully`, + otp, + }); + } catch (error) { + console.log(error.message); + return res.status(500).json({ success: false, error: error.message }); + } + }, +}; + +export default optController; diff --git a/server/helpers/mailSender.js b/server/helpers/mailSender.js new file mode 100644 index 0000000..82fa2e3 --- /dev/null +++ b/server/helpers/mailSender.js @@ -0,0 +1,27 @@ +import dotenv from "dotenv"; +import nodemailer from "nodemailer"; + +dotenv.config(); + +export const mailSender = async (email, subject, message) => { + try { + let transporter = nodemailer.createTransport({ + host: process.env.MAIL_HOST, + // secure: true, + auth: { + user: process.env.MAIL_USER, + pass: process.env.MAIL_PASS, + }, + }); + let info = await transporter.sendMail({ + from: process.env.MAIL_USER, + to: email, + subject: subject, + html: message, + }); + console.log("Email info: ", info); + return info; + } catch (error) { + console.log(error.message); + } +}; diff --git a/server/models/otp.model.js b/server/models/otp.model.js new file mode 100644 index 0000000..a843ed4 --- /dev/null +++ b/server/models/otp.model.js @@ -0,0 +1,42 @@ +import mongoose from "mongoose"; +import { mailSender } from "../helpers/mailSender.js"; + +const otpSchema = new mongoose.Schema({ + email: { + type: String, + required: true, + }, + otp: { + type: String, + required: true, + }, + createdAt: { + type: Date, + default: Date.now, + expires: 60 * 5, + }, +}); + +const sendVerificationEmail = async (email, otp) => { + try { + const mailResponse = await mailSender( + email, + "Verification Email", + `

Please confirm your OTP

+

Here is your OTP code: ${otp}

` + ); + console.log("Email sent successfully: ", mailResponse); + } catch (error) { + console.log("Error occurred while sending email: ", error); + throw error; + } +}; +otpSchema.pre("save", async function (next) { + console.log("New document saved to the database"); + if (this.isNew) { + await sendVerificationEmail(this.email, this.otp); + } + next(); +}); + +export default mongoose.model("OTP", otpSchema); diff --git a/server/package-lock.json b/server/package-lock.json index 08569a1..08dcd7f 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -15,6 +15,8 @@ "express": "^4.18.2", "jsonwebtoken": "^9.0.2", "mongoose": "^8.1.1", + "nodemailer": "^6.9.9", + "otp-generator": "^4.0.1", "qrcode": "^1.5.3" }, "devDependencies": { @@ -2009,6 +2011,14 @@ "node": ">= 0.6" } }, + "node_modules/nodemailer": { + "version": "6.9.9", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.9.tgz", + "integrity": "sha512-dexTll8zqQoVJEZPwQAKzxxtFn0qTnjdQTchoU6Re9BUUGBJiOy3YMn/0ShTW6J5M0dfQ1NeDeRTTl4oIWgQMA==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/nodemon": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.3.tgz", @@ -2130,6 +2140,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/otp-generator": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/otp-generator/-/otp-generator-4.0.1.tgz", + "integrity": "sha512-2TJ52vUftA0+J3eque4wwVtpaL4/NdIXDL0gFWFJFVUAZwAN7+9tltMhL7GCNYaHJtuONoier8Hayyj4HLbSag==", + "engines": { + "node": ">=14.10.0" + } + }, "node_modules/p-limit": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", diff --git a/server/package.json b/server/package.json index a92acda..b10b96c 100644 --- a/server/package.json +++ b/server/package.json @@ -22,6 +22,8 @@ "express": "^4.18.2", "jsonwebtoken": "^9.0.2", "mongoose": "^8.1.1", + "nodemailer": "^6.9.9", + "otp-generator": "^4.0.1", "qrcode": "^1.5.3" } } diff --git a/server/request.rest b/server/request.rest index 61c11a0..6f747f7 100644 --- a/server/request.rest +++ b/server/request.rest @@ -23,8 +23,8 @@ POST http://localhost:3001/api/auth/signup Content-Type: application/json { - "name": "Maxence", - "email": "maxence@gmail.com", + "name": "Théo", + "email": "artapp.theo@gmail.com", "password": "mdptest", "age": 16, "flami": 0, @@ -33,7 +33,8 @@ Content-Type: application/json "favorite_sport": "Basketball", "origin": "Internet", "intent": "Other" - } + }, + "otp": "613381" } ### @@ -42,6 +43,15 @@ POST http://localhost:3001/api/auth/signin Content-Type: application/json { - "email": "maxence@gmail.com", + "email": "artapp.theo@gmail.com", "password": "mdptest" +} + +### + +POST http://localhost:3001/api/auth/send-otp +Content-Type: application/json + +{ + "email": "artapp.theo@gmail.com" } \ No newline at end of file diff --git a/server/routes/auth.routes.js b/server/routes/auth.routes.js index f7b7f6b..83f6161 100644 --- a/server/routes/auth.routes.js +++ b/server/routes/auth.routes.js @@ -1,9 +1,11 @@ import Router from "express"; import authController from "../controllers/auth.controller.js"; +import otpController from "../controllers/otp.controller.js"; const router = Router(); router.post("/signin", authController.signin); router.post("/signup", authController.signup); +router.post("/send-otp", otpController.setOTP); -export default router; \ No newline at end of file +export default router; diff --git a/server/server.js b/server/server.js index 05326ae..867e319 100644 --- a/server/server.js +++ b/server/server.js @@ -1,14 +1,14 @@ import cors from "cors"; -import express from "express"; import dotenv from "dotenv"; +import express from "express"; import "./config/db.js"; +import auth from "./helpers/authMiddleware.js"; import authRoutes from "./routes/auth.routes.js"; -import userRoutes from "./routes/user.routes.js"; -import usersRoutes from "./routes/users.routes.js"; import flamiRoutes from "./routes/flami.routes.js"; import miscRoutes from "./routes/misc.routes.js"; -import auth from "./helpers/authMiddleware.js"; +import userRoutes from "./routes/user.routes.js"; +import usersRoutes from "./routes/users.routes.js"; dotenv.config(); @@ -25,4 +25,4 @@ app.use("/api", auth.require, miscRoutes); app.listen(process.env.PORT, () => { console.log(`Server started on port ${process.env.PORT}`); -}); \ No newline at end of file +}); From b1e7ef4a4f8645030327e3166c244f78473ded19 Mon Sep 17 00:00:00 2001 From: Akeko Date: Mon, 19 Feb 2024 19:45:37 +0100 Subject: [PATCH 016/108] refactor(auth): update otp verification --- server/controllers/auth.controller.js | 25 +++++++++++++++---------- server/request.rest | 9 ++++----- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 199688e..2ccfeea 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -1,29 +1,34 @@ import bcrypt from "bcryptjs"; import auth from "../helpers/authMiddleware.js"; +import OTPModel from "../models/otp.model.js"; import userModel from "../models/user.model.js"; const authController = { signup: async (req, res) => { let userdata = req.body; + + const otpResponse = await OTPModel.find({ email: userdata.email }) + .sort({ createdAt: -1 }) + .limit(1); + + if (otpResponse.length === 0 || userdata.otp !== otpResponse[0].otp) { + return res.status(400).json({ + success: false, + message: "Le code n'est pas correct.", + }); + } + userdata.password = bcrypt.hashSync( userdata.password, bcrypt.genSaltSync(11) ); + let new_user = new userModel(userdata); + try { await new_user.save(); let token = auth.encode({ email: new_user.email }); - const response = await OTPModel.find({ email: new_user.email }) - .sort({ createdAt: -1 }) - .limit(1); - if (response.length === 0 || otp !== response[0].otp) { - return res.status(400).json({ - success: false, - message: "The OTP is not valid", - }); - } - return res.status(201).json({ message: `Inscription finalisé. Bienvenue ${new_user.name} !`, data: { jwt: token }, diff --git a/server/request.rest b/server/request.rest index 02bb7e8..51b8a1e 100644 --- a/server/request.rest +++ b/server/request.rest @@ -1,5 +1,5 @@ PATCH http://localhost:3001/api/my/account -Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2VAZ21haWwuY29tIiwicGFzc3dvcmQiOiIkMmEkMTEkZUNpYXUvRmFSZnZlOVBiUDk4SW4uT2JtcTlOVVZYMzVWNHpMbTVkTlMxN0NMN1BmLkloTUsiLCJleHBpcmF0aW9uIjoxNzA5MzA0NTA2NzA0LCJpYXQiOjE3MDgwOTQ5MDZ9.wKKKoYSn7cziNwa8ixJtfyoAj-2XbfXSJe1Z2JBxQKg +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImFydGFwcC50aGVvQGdtYWlsLmNvbSIsImlhdCI6MTcwODM2Nzc1OCwiZXhwIjoxNzA5NTc3MzU4fQ.iN1ZMMADNGGy7HtUrR5ZE3GrU2nhD07LYnyU3AtxN_E Content-Type: application/json { @@ -10,13 +10,12 @@ Content-Type: application/json ### GET http://localhost:3001/api/my/badges -Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2VAZ21haWwuY29tIiwicGFzc3dvcmQiOiIkMmEkMTEkZUNpYXUvRmFSZnZlOVBiUDk4SW4uT2JtcTlOVVZYMzVWNHpMbTVkTlMxN0NMN1BmLkloTUsiLCJleHBpcmF0aW9uIjoxNzA5MzA0NTA2NzA0LCJpYXQiOjE3MDgwOTQ5MDZ9.wKKKoYSn7cziNwa8ixJtfyoAj-2XbfXSJe1Z2JBxQKg +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImFydGFwcC50aGVvQGdtYWlsLmNvbSIsImlhdCI6MTcwODM2Nzc1OCwiZXhwIjoxNzA5NTc3MzU4fQ.iN1ZMMADNGGy7HtUrR5ZE3GrU2nhD07LYnyU3AtxN_E ### GET http://localhost:3001/api/my/profile -Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2VAZ21haWwuY29tIiwicGFzc3dvcmQiOiIkMmEkMTEkZUNpYXUvRmFSZnZlOVBiUDk4SW4uT2JtcTlOVVZYMzVWNHpMbTVkTlMxN0NMN1BmLkloTUsiLCJleHBpcmF0aW9uIjoxNzA5MzA0NTA2NzA0LCJpYXQiOjE3MDgwOTQ5MDZ9.wKKKoYSn7cziNwa8ixJtfyoAj-2XbfXSJe1Z2JBxQKg - +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImFydGFwcC50aGVvQGdtYWlsLmNvbSIsImlhdCI6MTcwODM2Nzc1OCwiZXhwIjoxNzA5NTc3MzU4fQ.iN1ZMMADNGGy7HtUrR5ZE3GrU2nhD07LYnyU3AtxN_E ### POST http://localhost:3001/api/auth/signup @@ -34,7 +33,7 @@ Content-Type: application/json "origin": "Internet", "intent": "Other" }, - "otp": "613381" + "otp": "917636" } ### From c66a9c48b621f156f600ce6185e9d6bbe9de4b18 Mon Sep 17 00:00:00 2001 From: Akeko Date: Tue, 20 Feb 2024 00:23:28 +0100 Subject: [PATCH 017/108] feat(password): add reset password --- server/controllers/auth.controller.js | 1 - .../controllers/forgetPassword.controller.js | 66 +++++++++++++++++++ server/controllers/otp.controller.js | 12 ++-- server/helpers/mailSender.js | 2 - server/models/otp.model.js | 5 +- server/request.rest | 22 ++++++- server/routes/auth.routes.js | 3 + 7 files changed, 94 insertions(+), 17 deletions(-) create mode 100644 server/controllers/forgetPassword.controller.js diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 2ccfeea..39d4c79 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -13,7 +13,6 @@ const authController = { if (otpResponse.length === 0 || userdata.otp !== otpResponse[0].otp) { return res.status(400).json({ - success: false, message: "Le code n'est pas correct.", }); } diff --git a/server/controllers/forgetPassword.controller.js b/server/controllers/forgetPassword.controller.js new file mode 100644 index 0000000..2ef3f51 --- /dev/null +++ b/server/controllers/forgetPassword.controller.js @@ -0,0 +1,66 @@ +import bcrypt from "bcryptjs"; +import jwt from "jsonwebtoken"; +import { mailSender } from "../helpers/mailSender.js"; +import userModel from "../models/user.model.js"; + +const forgetPasswordController = { + forgetPassword: async (req, res) => { + try { + const user = await userModel.findByEmail(req.body.email); + + if (!user) { + return res + .status(404) + .json({ message: "Ce compte n'existe pas.", error: 404 }); + } + + console.log(user[0]._id); + + const token = jwt.sign({ email: user[0].email }, process.env.PRIVATE, { + expiresIn: "10m", + }); + + console.log(token); + + const info = await mailSender( + user[0].email, + "Reset Password", + `

Reset Your Password

+

Click on the following link to reset your password:

+ http://localhost:5173/reset-password/${token} +

The link will expire in 10 minutes.

+

If you didn't request a password reset, please ignore this email.

` + ); + + if (!info) { + return res.status(500).json({ message: "Email non envoyé." }); + } + + return res.status(200).json({ message: "Email envoyé." }); + } catch (error) { + return res.status(500).json({ message: error.message }); + } + }, + resetPassword: async (req, res) => { + try { + const decodedToken = jwt.verify(req.params.token, process.env.PRIVATE); + + if (!decodedToken) { + return res.status(401).json({ message: "Token invalide." }); + } + + const user = await userModel.findOneAndUpdate(decodedToken.email, { + password: bcrypt.hashSync(req.body.password, bcrypt.genSaltSync(11)), + }); + if (!user) { + return res.status(401).json({ message: "Ce compte n'existe pas." }); + } + + return res.status(200).json({ message: "Mot de passe mis à jour." }); + } catch (error) { + return res.status(500).json({ message: error.message }); + } + }, +}; + +export default forgetPasswordController; diff --git a/server/controllers/otp.controller.js b/server/controllers/otp.controller.js index 58b31ba..5d5707c 100644 --- a/server/controllers/otp.controller.js +++ b/server/controllers/otp.controller.js @@ -11,7 +11,6 @@ const optController = { if (checkUserPresent) { return res.status(401).json({ - success: false, message: `L'utilisateur existe déja.`, }); } @@ -23,25 +22,22 @@ const optController = { }); const result = await OTP.findOne({ otp: otp }); - console.log("Result is Generate OTP Func"); - console.log("OTP", otp); - console.log("Result", result); + while (result) { otp = otpGenerator.generate(6, { upperCaseAlphabets: false, }); } const otpPayload = { email, otp }; - const otpBody = await OTP.create(otpPayload); - console.log("OTP Body", otpBody); + await OTP.create(otpPayload); + res.status(200).json({ - success: true, message: `OTP Sent Successfully`, otp, }); } catch (error) { console.log(error.message); - return res.status(500).json({ success: false, error: error.message }); + return res.status(500).json({ error: error.message }); } }, }; diff --git a/server/helpers/mailSender.js b/server/helpers/mailSender.js index 82fa2e3..1bfac66 100644 --- a/server/helpers/mailSender.js +++ b/server/helpers/mailSender.js @@ -7,7 +7,6 @@ export const mailSender = async (email, subject, message) => { try { let transporter = nodemailer.createTransport({ host: process.env.MAIL_HOST, - // secure: true, auth: { user: process.env.MAIL_USER, pass: process.env.MAIL_PASS, @@ -19,7 +18,6 @@ export const mailSender = async (email, subject, message) => { subject: subject, html: message, }); - console.log("Email info: ", info); return info; } catch (error) { console.log(error.message); diff --git a/server/models/otp.model.js b/server/models/otp.model.js index a843ed4..47dccac 100644 --- a/server/models/otp.model.js +++ b/server/models/otp.model.js @@ -19,20 +19,17 @@ const otpSchema = new mongoose.Schema({ const sendVerificationEmail = async (email, otp) => { try { - const mailResponse = await mailSender( + await mailSender( email, "Verification Email", `

Please confirm your OTP

Here is your OTP code: ${otp}

` ); - console.log("Email sent successfully: ", mailResponse); } catch (error) { - console.log("Error occurred while sending email: ", error); throw error; } }; otpSchema.pre("save", async function (next) { - console.log("New document saved to the database"); if (this.isNew) { await sendVerificationEmail(this.email, this.otp); } diff --git a/server/request.rest b/server/request.rest index 51b8a1e..cf9015f 100644 --- a/server/request.rest +++ b/server/request.rest @@ -33,7 +33,7 @@ Content-Type: application/json "origin": "Internet", "intent": "Other" }, - "otp": "917636" + "otp": "215152" } ### @@ -43,7 +43,7 @@ Content-Type: application/json { "email": "artapp.theo@gmail.com", - "password": "mdptest" + "password": "1234" } ### @@ -53,4 +53,22 @@ Content-Type: application/json { "email": "artapp.theo@gmail.com" +} + +### + +POST http://localhost:3001/api/auth/forget-password +Content-Type: application/json + +{ + "email": "artapp.theo@gmail.com" +} + +#### + +POST http://localhost:3001/api/auth/reset-password/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NWQzYzkyZjEzMTJhNDY3YzMzMTcyMTYiLCJpYXQiOjE3MDgzODQ2OTgsImV4cCI6MTcwODM4NTI5OH0.W-92lXMFsRU3LI4hWR8snENw2E8jaDgyzFl-2H9VXfY +Content-Type: application/json + +{ + "password": "1234" } \ No newline at end of file diff --git a/server/routes/auth.routes.js b/server/routes/auth.routes.js index 83f6161..73f9daf 100644 --- a/server/routes/auth.routes.js +++ b/server/routes/auth.routes.js @@ -1,5 +1,6 @@ import Router from "express"; import authController from "../controllers/auth.controller.js"; +import forgetPasswordController from "../controllers/forgetPassword.controller.js"; import otpController from "../controllers/otp.controller.js"; const router = Router(); @@ -7,5 +8,7 @@ const router = Router(); router.post("/signin", authController.signin); router.post("/signup", authController.signup); router.post("/send-otp", otpController.setOTP); +router.post("/forget-password", forgetPasswordController.forgetPassword); +router.post("/reset-password/:token", forgetPasswordController.resetPassword); export default router; From ee7638974f82a23336b8f2d4439cf2c191b88d16 Mon Sep 17 00:00:00 2001 From: Akeko Date: Tue, 20 Feb 2024 19:05:42 +0100 Subject: [PATCH 018/108] refactor(auth): add otp signin --- client/package-lock.json | 125 ++++++++++++++++++++++++-- client/package.json | 4 +- server/controllers/auth.controller.js | 13 ++- server/controllers/otp.controller.js | 13 ++- server/request.rest | 3 +- 5 files changed, 140 insertions(+), 18 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 85e6759..5a8c472 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -8,10 +8,12 @@ "name": "client", "version": "0.0.0", "dependencies": { + "formik": "^2.4.5", "framer-motion": "^11.0.3", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router": "^6.21.3" + "react-router": "^6.21.3", + "yup": "^1.3.3" }, "devDependencies": { "@testing-library/react": "^14.1.2", @@ -1478,6 +1480,15 @@ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -1487,14 +1498,12 @@ "node_modules/@types/prop-types": { "version": "15.7.11", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", - "dev": true + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, "node_modules/@types/react": { "version": "18.2.48", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", - "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -1513,8 +1522,7 @@ "node_modules/@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", - "dev": true + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" }, "node_modules/@types/semver": { "version": "7.5.6", @@ -2339,8 +2347,7 @@ "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/data-urls": { "version": "5.0.0", @@ -2428,6 +2435,14 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/define-data-property": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", @@ -3093,6 +3108,30 @@ "node": ">= 6" } }, + "node_modules/formik": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.5.tgz", + "integrity": "sha512-Gxlht0TD3vVdzMDHwkiNZqJ7Mvg77xQNfmBRrNtvzcHZs72TJppSTDKHpImCMJZwcWPBJ8jSQQ95GJzXFf1nAQ==", + "funding": [ + { + "type": "individual", + "url": "https://opencollective.com/formik" + } + ], + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.1", + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/fraction.js": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", @@ -3394,6 +3433,19 @@ "node": ">= 0.4" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/html-encoding-sniffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", @@ -4032,6 +4084,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4758,6 +4820,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/property-expr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==" + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -4822,6 +4889,11 @@ "react": "^18.2.0" } }, + "node_modules/react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" + }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -5461,6 +5533,16 @@ "node": ">=0.8" } }, + "node_modules/tiny-case": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "node_modules/tinybench": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", @@ -5506,6 +5588,11 @@ "node": ">=8.0" } }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" + }, "node_modules/tough-cookie": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", @@ -6146,6 +6233,28 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/yup": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.3.3.tgz", + "integrity": "sha512-v8QwZSsHH2K3/G9WSkp6mZKO+hugKT1EmnMqLNUcfu51HU9MDyhlETT/JgtzprnrnQHPWsjc6MUDMBp/l9fNnw==", + "dependencies": { + "property-expr": "^2.0.5", + "tiny-case": "^1.0.3", + "toposort": "^2.0.2", + "type-fest": "^2.19.0" + } + }, + "node_modules/yup/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/client/package.json b/client/package.json index 47436f4..0c684e4 100644 --- a/client/package.json +++ b/client/package.json @@ -11,10 +11,12 @@ "test": "vitest" }, "dependencies": { + "formik": "^2.4.5", "framer-motion": "^11.0.3", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router": "^6.21.3" + "react-router": "^6.21.3", + "yup": "^1.3.3" }, "devDependencies": { "@testing-library/react": "^14.1.2", diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 39d4c79..edfee8b 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -13,7 +13,7 @@ const authController = { if (otpResponse.length === 0 || userdata.otp !== otpResponse[0].otp) { return res.status(400).json({ - message: "Le code n'est pas correct.", + message: "Le code de validation n'est pas correct.", }); } @@ -55,6 +55,17 @@ const authController = { }, signin: async (req, res) => { let userdata = req.body; + + const otpResponse = await OTPModel.find({ email: userdata.email }) + .sort({ createdAt: -1 }) + .limit(1); + + if (otpResponse.length === 0 || userdata.otp !== otpResponse[0].otp) { + return res.status(400).json({ + message: "Le code de validation n'est pas correct.", + }); + } + try { let user = await userModel.findByEmail(userdata.email); diff --git a/server/controllers/otp.controller.js b/server/controllers/otp.controller.js index 5d5707c..8f5abc7 100644 --- a/server/controllers/otp.controller.js +++ b/server/controllers/otp.controller.js @@ -1,19 +1,18 @@ import otpGenerator from "otp-generator"; import OTP from "../models/otp.model.js"; -import User from "../models/user.model.js"; const optController = { setOTP: async (req, res) => { try { const { email } = req.body; - const checkUserPresent = await User.findOne({ email }); + // const checkUserPresent = await User.findOne({ email }); - if (checkUserPresent) { - return res.status(401).json({ - message: `L'utilisateur existe déja.`, - }); - } + // if (checkUserPresent) { + // return res.status(401).json({ + // message: `L'utilisateur existe déja.`, + // }); + // } const otp = otpGenerator.generate(6, { upperCaseAlphabets: false, diff --git a/server/request.rest b/server/request.rest index cf9015f..067dc2c 100644 --- a/server/request.rest +++ b/server/request.rest @@ -43,7 +43,8 @@ Content-Type: application/json { "email": "artapp.theo@gmail.com", - "password": "1234" + "password": "1234", + "otp": "925034" } ### From 91873f1c3a270ae6cf556920d3222178dc3bf010 Mon Sep 17 00:00:00 2001 From: Akeko Date: Wed, 21 Feb 2024 12:25:47 +0100 Subject: [PATCH 019/108] refactor(auth): jwt by cookie --- client/index.html | 4 +- client/src/App.tsx | 29 +------ client/src/api/handler.ts | 56 +++++++++++++ client/src/api/services/auth.ts | 14 ++++ client/src/context/authContext.ts | 9 +++ client/src/context/authContextProvider.tsx | 21 +++++ client/src/interfaces/userInterface.ts | 6 ++ client/src/services/api.ts | 34 -------- package-lock.json | 6 -- package.json | 1 - server/controllers/auth.controller.js | 15 ++-- server/helpers/authMiddleware.js | 93 +++++++++++++++------- server/package-lock.json | 21 +++++ server/package.json | 1 + server/request.rest | 2 +- server/routes/auth.routes.js | 2 + server/server.js | 2 + 17 files changed, 212 insertions(+), 104 deletions(-) create mode 100644 client/src/api/handler.ts create mode 100644 client/src/api/services/auth.ts create mode 100644 client/src/context/authContext.ts create mode 100644 client/src/context/authContextProvider.tsx delete mode 100644 client/src/services/api.ts delete mode 100644 package-lock.json delete mode 100644 package.json diff --git a/client/index.html b/client/index.html index 09d1adc..42dd33b 100644 --- a/client/index.html +++ b/client/index.html @@ -2,9 +2,9 @@ - + - Kind-Kindle + Flami
diff --git a/client/src/App.tsx b/client/src/App.tsx index 04a1aee..8a132e5 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,34 +1,7 @@ -import { useEffect, useState } from "react"; - -import User from "./interfaces/userInterface"; - -import apiService from "./services/api"; - const App = () => { - const [users, setUsers] = useState([]); - - const getUsers = async () => { - const users = await apiService.getUsers(); - setUsers(users); - }; - - useEffect(() => { - getUsers(); - }, []); - return (
-

User page

- -
    - {users.length === 0 - ? "No users found" - : users.map((user) => ( -
  • - {user.name} - {user.email} -
  • - ))} -
+

Flami

); }; diff --git a/client/src/api/handler.ts b/client/src/api/handler.ts new file mode 100644 index 0000000..dcce6c8 --- /dev/null +++ b/client/src/api/handler.ts @@ -0,0 +1,56 @@ +const API_URL = "http://localhost:3001/api"; + +const APIHandler = { + get: async (url: string, token: string) => { + const options = { + method: "GET", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${token}`, + }, + }; + try { + const response = await fetch(`${API_URL}${url}`, options); + const data = await response.json(); + return data; + } catch (error) { + console.error(error); + } + }, + post: async (url: string, data: string = "", token?: string) => { + const options = { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${token}`, + }, + body: JSON.stringify(data), + }; + try { + const response = await fetch(`${API_URL}${url}`, options); + const data = await response.json(); + return data; + } catch (error) { + console.error(error); + } + }, + patch: async (url: string, data: string = "", token: string) => { + const options = { + method: "PATCH", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${token}`, + }, + body: JSON.stringify(data), + }; + try { + const response = await fetch(`${API_URL}${url}`, options); + const data = await response.json(); + return data; + } catch (error) { + console.error(error); + } + }, +}; + +export default APIHandler; diff --git a/client/src/api/services/auth.ts b/client/src/api/services/auth.ts new file mode 100644 index 0000000..f887a1e --- /dev/null +++ b/client/src/api/services/auth.ts @@ -0,0 +1,14 @@ +import APIHandler from "../handler"; + +const authService = { + sendOTP: async (email: string) => { + try { + const response = await APIHandler.post("/auth/send-otp", email, ""); + return response; + } catch (error) { + console.error(error); + } + }, +}; + +export default authService; diff --git a/client/src/context/authContext.ts b/client/src/context/authContext.ts new file mode 100644 index 0000000..fcf7c04 --- /dev/null +++ b/client/src/context/authContext.ts @@ -0,0 +1,9 @@ +import { createContext } from "react"; + +interface AuthContextInterface { + isAuthenticated: boolean; + login: () => void; + logout: () => void; +} + +export const AuthContext = createContext(null); diff --git a/client/src/context/authContextProvider.tsx b/client/src/context/authContextProvider.tsx new file mode 100644 index 0000000..253ee06 --- /dev/null +++ b/client/src/context/authContextProvider.tsx @@ -0,0 +1,21 @@ +import { AuthContext } from "./authContext"; + +interface AuthContextProviderInterface { + children: React.ReactNode; +} + +export const AuthContextProvider = ({ + children, +}: AuthContextProviderInterface) => { + const contextValues = {}; + + const login = async () => {}; + + const logout = async () => {}; + + return ( + + {children} + + ); +}; diff --git a/client/src/interfaces/userInterface.ts b/client/src/interfaces/userInterface.ts index 3a2438e..b990ef7 100644 --- a/client/src/interfaces/userInterface.ts +++ b/client/src/interfaces/userInterface.ts @@ -3,7 +3,13 @@ interface UserInterface { name: string; email: string; password: string; + age: number; date: Date; + metadata: { + favorite_sport: string; + origin: string; + intent: string; + }; } export default UserInterface; diff --git a/client/src/services/api.ts b/client/src/services/api.ts deleted file mode 100644 index 0316b99..0000000 --- a/client/src/services/api.ts +++ /dev/null @@ -1,34 +0,0 @@ -import User from "../interfaces/userInterface"; - -const API_URL = "http://localhost:3001/api"; - -const apiService = { - getUsers: async (): Promise => { - try { - const response = await fetch(`${API_URL}/users`); - const data = await response.json(); - return data; - } catch (error) { - console.error(error); - return []; - } - }, - createUser: async (user: User): Promise => { - try { - const response = await fetch(`${API_URL}/users/new`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(user), - }); - const data = await response.json(); - return data; - } catch (error) { - console.error(error); - throw new Error("Failed to create user"); - } - }, -}; - -export default apiService; diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index ed0786a..0000000 --- a/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "flami-app", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} diff --git a/package.json b/package.json deleted file mode 100644 index 0967ef4..0000000 --- a/package.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index edfee8b..6a7034c 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -28,10 +28,12 @@ const authController = { await new_user.save(); let token = auth.encode({ email: new_user.email }); - return res.status(201).json({ - message: `Inscription finalisé. Bienvenue ${new_user.name} !`, - data: { jwt: token }, - }); + return res + .status(201) + .cookie("jwt", token, { httpOnly: false }) + .json({ + message: `Inscription finalisé. Bienvenue ${new_user.name} !`, + }); } catch (error) { if (error.keyValue && error.keyValue.email) { return res.status(409).json({ @@ -60,6 +62,8 @@ const authController = { .sort({ createdAt: -1 }) .limit(1); + console.log(otpResponse.length); + if (otpResponse.length === 0 || userdata.otp !== otpResponse[0].otp) { return res.status(400).json({ message: "Le code de validation n'est pas correct.", @@ -82,7 +86,8 @@ const authController = { let token = auth.encode({ email: user.email }); return res .status(200) - .json({ message: "Authentification réussie.", data: { jwt: token } }); + .cookie("jwt", token, { httpOnly: false }) + .json({ message: "Authentification réussie." }); } else { return res .status(401) diff --git a/server/helpers/authMiddleware.js b/server/helpers/authMiddleware.js index 21b6bb6..c7207db 100644 --- a/server/helpers/authMiddleware.js +++ b/server/helpers/authMiddleware.js @@ -2,32 +2,71 @@ import jwt from "jsonwebtoken"; import userModel from "../models/user.model.js"; const auth = { - encode: (data) => { - // data.expiration = new Date().getTime() + (1209600 * 1000); - return jwt.sign(data, process.env.PRIVATE, { expiresIn: 1209600 }); - }, - require: async (req, res, next) => { - try { - if(!req.headers.authorization) throw { code: 400, message: 'Echec d\'authentification, le header authorisation est manquant.' } - - let userdata = jwt.verify(req.headers.authorization.replace('Bearer ', ''), process.env.PRIVATE); - let user = await userModel.findByEmail(userdata.email); - - // let tdate = new Date(); - - if(!user[0]) throw { code: 404, message: 'Echec d\'authentification, l\'utilisateur du jeton n\'existe pas.' } - if(userdata.password !== user[0].password) throw { code: 401, message: 'Echec d\'authentification, mot de passe de jeton incorrect.' } - // if(userdata.expiration < tdate.getTime()) throw { code: 401, expires: true, message: 'Echec d\'authentification, le jeton d\'authentification a expiré.' } - - // tdate.setTime(userdata.expiration); - - // res.set('Expires', tdate.toUTCString()); - res.locals.user = user[0]; - return next(); - } catch (error) { - return res.status(error.code ?? 401).json({ message: error.message, error: error.code ?? 401 }); - } + encode: (data) => { + // data.expiration = new Date().getTime() + (1209600 * 1000); + return jwt.sign(data, process.env.PRIVATE, { expiresIn: 1209600 }); + }, + require: async (req, res, next) => { + try { + if (!req.headers.authorization) + throw { + code: 400, + message: + "Echec d'authentification, le header authorisation est manquant.", + }; + + let userdata = jwt.verify( + req.headers.authorization.replace("Bearer ", ""), + process.env.PRIVATE + ); + let user = await userModel.findByEmail(userdata.email); + + // let tdate = new Date(); + + if (!user[0]) + throw { + code: 404, + message: + "Echec d'authentification, l'utilisateur du jeton n'existe pas.", + }; + if (userdata.password !== user[0].password) + throw { + code: 401, + message: "Echec d'authentification, mot de passe de jeton incorrect.", + }; + // if(userdata.expiration < tdate.getTime()) throw { code: 401, expires: true, message: 'Echec d\'authentification, le jeton d\'authentification a expiré.' } + + // tdate.setTime(userdata.expiration); + + // res.set('Expires', tdate.toUTCString()); + res.locals.user = user[0]; + return next(); + } catch (error) { + return res + .status(error.code ?? 401) + .json({ message: error.message, error: error.code ?? 401 }); } -} + }, + verify: (req, res) => { + const token = req.cookies.jwt; + + if (!token) { + return res.status(401).json({ message: "Echec d'authentification." }); + } + jwt.verify(token, process.env.PRIVATE, (err, decoded) => { + if (err) { + return res.status(401).json({ message: "Echec d'authentification." }); + } else { + const user = userModel.findByEmail(decoded.email); + + if (!user) { + return res.status(401).json({ message: "Echec d'authentification." }); + } + + return res.status(200).json({ message: "Authentification reussie." }); + } + }); + }, +}; -export default auth; \ No newline at end of file +export default auth; diff --git a/server/package-lock.json b/server/package-lock.json index 08dcd7f..3cd1f11 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -10,6 +10,7 @@ "license": "ISC", "dependencies": { "bcryptjs": "^2.4.3", + "cookie-parser": "^1.4.6", "cors": "^2.8.5", "dotenv": "^16.4.1", "express": "^4.18.2", @@ -1012,6 +1013,26 @@ "node": ">= 0.6" } }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "dependencies": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-parser/node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", diff --git a/server/package.json b/server/package.json index b10b96c..7d3e609 100644 --- a/server/package.json +++ b/server/package.json @@ -17,6 +17,7 @@ }, "dependencies": { "bcryptjs": "^2.4.3", + "cookie-parser": "^1.4.6", "cors": "^2.8.5", "dotenv": "^16.4.1", "express": "^4.18.2", diff --git a/server/request.rest b/server/request.rest index 067dc2c..1248d44 100644 --- a/server/request.rest +++ b/server/request.rest @@ -33,7 +33,7 @@ Content-Type: application/json "origin": "Internet", "intent": "Other" }, - "otp": "215152" + "otp": "354993" } ### diff --git a/server/routes/auth.routes.js b/server/routes/auth.routes.js index 73f9daf..b3e9a34 100644 --- a/server/routes/auth.routes.js +++ b/server/routes/auth.routes.js @@ -2,6 +2,7 @@ import Router from "express"; import authController from "../controllers/auth.controller.js"; import forgetPasswordController from "../controllers/forgetPassword.controller.js"; import otpController from "../controllers/otp.controller.js"; +import auth from "../helpers/authMiddleware.js"; const router = Router(); @@ -10,5 +11,6 @@ router.post("/signup", authController.signup); router.post("/send-otp", otpController.setOTP); router.post("/forget-password", forgetPasswordController.forgetPassword); router.post("/reset-password/:token", forgetPasswordController.resetPassword); +router.post("/verify", auth.verify); export default router; diff --git a/server/server.js b/server/server.js index 867e319..846ae72 100644 --- a/server/server.js +++ b/server/server.js @@ -1,3 +1,4 @@ +import cookieParser from "cookie-parser"; import cors from "cors"; import dotenv from "dotenv"; import express from "express"; @@ -15,6 +16,7 @@ dotenv.config(); const app = express(); app.use(express.json()); +app.use(cookieParser()); app.use(cors()); app.use("/api/auth", authRoutes); From 1d795e216a788b1179dddc3348d817d6fd8d7ca8 Mon Sep 17 00:00:00 2001 From: Akeko Date: Thu, 22 Feb 2024 20:36:50 +0100 Subject: [PATCH 020/108] feat(auth): init auth front --- client/package-lock.json | 67 ++++++++++++++++-- client/package.json | 2 + client/public/assets/fonts/Roboto-Black.woff | Bin 0 -> 94028 bytes client/public/assets/fonts/Roboto-Black.woff2 | Bin 0 -> 66340 bytes client/public/assets/fonts/Roboto-Bold.woff | Bin 0 -> 93712 bytes client/public/assets/fonts/Roboto-Bold.woff2 | Bin 0 -> 66060 bytes client/public/assets/fonts/Roboto-Light.woff | Bin 0 -> 93132 bytes client/public/assets/fonts/Roboto-Light.woff2 | Bin 0 -> 65588 bytes client/public/assets/fonts/Roboto-Medium.woff | Bin 0 -> 94044 bytes .../public/assets/fonts/Roboto-Medium.woff2 | Bin 0 -> 66576 bytes .../public/assets/fonts/Roboto-Regular.woff | Bin 0 -> 93400 bytes .../public/assets/fonts/Roboto-Regular.woff2 | Bin 0 -> 65932 bytes client/public/assets/fonts/Roboto-Thin.woff | Bin 0 -> 91816 bytes client/public/assets/fonts/Roboto-Thin.woff2 | Bin 0 -> 64288 bytes client/src/App.tsx | 12 +++- client/src/assets/styles/main.css | 54 ++++++++++++++ client/src/components/auth/OtpForm.tsx | 5 ++ client/src/components/auth/SigninForm.tsx | 5 ++ client/src/components/auth/SignupForm.tsx | 5 ++ .../src/components/navigation/Navigation.tsx | 5 ++ client/src/context/authContext.ts | 10 +-- client/src/context/authContextProvider.tsx | 26 +++++-- client/src/hooks/useAuth.jsx | 11 +++ client/src/main.tsx | 21 +++++- client/src/pages/WelcomePage.tsx | 5 ++ client/src/pages/auth/ResetPasswordPage.tsx | 5 ++ client/src/pages/auth/SigninPage.tsx | 5 ++ client/src/pages/auth/SignupPage.tsx | 5 ++ client/src/pages/flami/FlamiPage.tsx | 5 ++ client/src/pages/map/MapPage.tsx | 5 ++ client/src/pages/profile/ProfilePage.tsx | 5 ++ client/src/{api => }/services/auth.ts | 2 +- .../handler.ts => utils/api/api-handler.ts} | 0 client/tailwind.config.js | 3 + client/tsconfig.json | 2 +- server/routes/auth.routes.js | 3 +- 36 files changed, 243 insertions(+), 25 deletions(-) create mode 100644 client/public/assets/fonts/Roboto-Black.woff create mode 100644 client/public/assets/fonts/Roboto-Black.woff2 create mode 100644 client/public/assets/fonts/Roboto-Bold.woff create mode 100644 client/public/assets/fonts/Roboto-Bold.woff2 create mode 100644 client/public/assets/fonts/Roboto-Light.woff create mode 100644 client/public/assets/fonts/Roboto-Light.woff2 create mode 100644 client/public/assets/fonts/Roboto-Medium.woff create mode 100644 client/public/assets/fonts/Roboto-Medium.woff2 create mode 100644 client/public/assets/fonts/Roboto-Regular.woff create mode 100644 client/public/assets/fonts/Roboto-Regular.woff2 create mode 100644 client/public/assets/fonts/Roboto-Thin.woff create mode 100644 client/public/assets/fonts/Roboto-Thin.woff2 create mode 100644 client/src/components/auth/OtpForm.tsx create mode 100644 client/src/components/auth/SigninForm.tsx create mode 100644 client/src/components/auth/SignupForm.tsx create mode 100644 client/src/components/navigation/Navigation.tsx create mode 100644 client/src/hooks/useAuth.jsx create mode 100644 client/src/pages/WelcomePage.tsx create mode 100644 client/src/pages/auth/ResetPasswordPage.tsx create mode 100644 client/src/pages/auth/SigninPage.tsx create mode 100644 client/src/pages/auth/SignupPage.tsx create mode 100644 client/src/pages/flami/FlamiPage.tsx create mode 100644 client/src/pages/map/MapPage.tsx create mode 100644 client/src/pages/profile/ProfilePage.tsx rename client/src/{api => }/services/auth.ts (83%) rename client/src/{api/handler.ts => utils/api/api-handler.ts} (100%) diff --git a/client/package-lock.json b/client/package-lock.json index 5a8c472..e762a6a 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -11,8 +11,10 @@ "formik": "^2.4.5", "framer-motion": "^11.0.3", "react": "^18.2.0", + "react-cookie": "^7.0.2", "react-dom": "^18.2.0", "react-router": "^6.21.3", + "react-router-dom": "^6.22.1", "yup": "^1.3.3" }, "devDependencies": { @@ -1106,9 +1108,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.14.2.tgz", - "integrity": "sha512-ACXpdMM9hmKZww21yEqWwiLws/UPLhNKvimN8RrYSqPSvB3ov7sLvAcfvaxePeLvccTQKGdkDIhLYApZVDFuKg==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.1.tgz", + "integrity": "sha512-zcU0gM3z+3iqj8UX45AmWY810l3oUmXM7uH4dt5xtzvMhRtYVhKGOmgOd1877dOPPepfCjUv57w+syamWIYe7w==", "engines": { "node": ">=14.0.0" } @@ -1474,6 +1476,11 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -2306,6 +2313,14 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -4877,6 +4892,19 @@ "node": ">=0.10.0" } }, + "node_modules/react-cookie": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-7.0.2.tgz", + "integrity": "sha512-UnW1rZw1VibRdTvV8Ksr0BKKZoajeUxYLE89sIygDeyQgtz6ik89RHOM+3kib36G9M7HxheORggPoLk5DxAK7Q==", + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.5", + "hoist-non-react-statics": "^3.3.2", + "universal-cookie": "^7.0.0" + }, + "peerDependencies": { + "react": ">= 16.3.0" + } + }, "node_modules/react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", @@ -4910,11 +4938,11 @@ } }, "node_modules/react-router": { - "version": "6.21.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.21.3.tgz", - "integrity": "sha512-a0H638ZXULv1OdkmiK6s6itNhoy33ywxmUFT/xtSoVyf9VnC7n7+VT4LjVzdIHSaF5TIh9ylUgxMXksHTgGrKg==", + "version": "6.22.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.1.tgz", + "integrity": "sha512-0pdoRGwLtemnJqn1K0XHUbnKiX0S4X8CgvVVmHGOWmofESj31msHo/1YiqcJWK7Wxfq2a4uvvtS01KAQyWK/CQ==", "dependencies": { - "@remix-run/router": "1.14.2" + "@remix-run/router": "1.15.1" }, "engines": { "node": ">=14.0.0" @@ -4923,6 +4951,22 @@ "react": ">=16.8" } }, + "node_modules/react-router-dom": { + "version": "6.22.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.1.tgz", + "integrity": "sha512-iwMyyyrbL7zkKY7MRjOVRy+TMnS/OPusaFVxM2P11x9dzSzGmLsebkCvYirGq0DWB9K9hOspHYYtDz33gE5Duw==", + "dependencies": { + "@remix-run/router": "1.15.1", + "react-router": "6.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -5695,6 +5739,15 @@ "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", "dev": true }, + "node_modules/universal-cookie": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-7.0.2.tgz", + "integrity": "sha512-EC9PA+1nojhJtVnKW2Z7WYah01jgYJApqhX+Y8XU97TnFd7KaoxWTHiTZFtfpfV50jEF1L8V5p64ZxIx3Q67dg==", + "dependencies": { + "@types/cookie": "^0.6.0", + "cookie": "^0.6.0" + } + }, "node_modules/universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", diff --git a/client/package.json b/client/package.json index 0c684e4..09dbee1 100644 --- a/client/package.json +++ b/client/package.json @@ -14,8 +14,10 @@ "formik": "^2.4.5", "framer-motion": "^11.0.3", "react": "^18.2.0", + "react-cookie": "^7.0.2", "react-dom": "^18.2.0", "react-router": "^6.21.3", + "react-router-dom": "^6.22.1", "yup": "^1.3.3" }, "devDependencies": { diff --git a/client/public/assets/fonts/Roboto-Black.woff b/client/public/assets/fonts/Roboto-Black.woff new file mode 100644 index 0000000000000000000000000000000000000000..442aecad6abbf609386d1d9ddd0630b05cff273e GIT binary patch literal 94028 zcmZr%b8sfj*L`B!wryi$n;YB46Wi7X8)viG*tTukwv8|E@9(dx&UE#ib1rJCrn+y< z02L)903ZMW0K`EKfciay_H=(=|KA}Yp(g*$WB$I0{~v%)aaNLI;@^4(sqeMrH~c69 zh=wGU6jcErJm~-cM;ZWNR%l*sYbU9yF7nN*1_0m=002xmlcRG+MO7x&?|{hPI@NC& zW_Z+$n%EgR0ssiM005X6003Uemf8bp;_gZe0HBV4bAJ8@NCZX!b4Lq1008;h9|-R^ z+JoQ7$}Egr9KU1me{v)FrpW}9PaB&5IV6K1H|7~aWycpQx zb#ylS)}ow$>$bjqaA)+Ri~jFv1(#yYG^q1GSt`I-SV0?AtXO34=;>j+C2&d2u6l5_>Tkv06-uD z;sKZdMF7PAA^`x1-&q1cegMD#ApiL==jmDR?H=v!=8axR4-8Z$6k#(kl`=6lGz1ty zdvtf-3kCcj!5vlu+-!V&Y~bJr1o^LEf3h$a)=U|L$}mqtjnrt>*aON;AOS@;=X<9qN@Jk1TBm@MJkWkX2rf?t!L91}Z zAnTOO z^Rd9a%SM8b@M%*6FNKjB5IWS^C{LJ_$}LE!%(xldHwP;e;2>Murd2=igR=vhmp6hY zCUxnZ5!1} zJe1Hu!E4B=@e<;%fQ!lp7+E$;u`}Jc@-5CK1v8ZC$`tH0hVn+xUwlOJq%@% z>bUr~W5&;58U;$3ELRt*CHCa5BTu5c4KF!$y5~xtCe*%l=oY9~9`6@DfhaWt?pHu- z$)=Plm>ivFc^w2;Haq_hg{5pIYdeFuzo(w-d5?c|nR>a^1JwSJVV>0~pZbNeG9iWP zT7Y#C{V_LcS=PTSapgZl9CZE_4~jKRKAUZE+;mqn_yNDf_hi`N!b5rYsdu@j)qhnr zr)b!j7DVa**ChnESFzy_`26XLX`m%kAE;_Yh-Hv)MbUU%HX#WkME>J|RJKZF{YKhPi*4llL#RG9*@DpZwmL;uv0M|6g?A_1^gW2T(4d@YRm7(T-mJG) zGvmse-uvkN;+D8`E|&gH@d)3TNPEvp>z@9%by|trOr~JSoqC;T2InWi(+l*Az%Aas z=J3=klt6J`!~?{|j<1AHYMz*JKMl*BU6xYWsldEUdxSYyj?v4*bHiF>dz=YJ!M|r^ z+l=wjP5LE8W5FTDM!&yy$tzpos6uc{Qt&eP;QTC;hpLgXk+JR>EObsLF9sl299Pl$ z{T4#M?AqB5%Ln_reyq!$Q`F7D{cT0r%c`0%cu*ZyRWvI0i`>H(MzPbvwEkiI_p6Of+_;j>#)WYdU2v(lMB;g8AT0_mreP6NzAWPN;W0UL5;Ju@r6lyHi7YsQcU$% zZeE>OCx-%(4#YiiyaKQdBpRbmwKAM|)Lf*yOnPsD%|qGMk+wh{HRl7a^)=gd!#$mI z&G4O5cR8#tzBXm)>a&dn8CLJ^ z6mG|?i(GpuZXm5=>H0*v)Gf1oL}}hYBlxH0%}I(H`YBIEf?kHx5T4Txt4>%K)TOnJ zRpR8g0*9dYdU0bC*68#e3##;~eoVaL9fkEhNV&#Oj&`ioYq%_uJ@Fz^`G2! zxdKt2i(xv!x>(Coi*z+aL-#p77{)>l$U}Yrgipd0$x)@tgMzdt278T)Vx!69{jZD{ zKQs=q7JItNy-&;*@t7u%@~Ux^Pc!Vi*BOa1Z0{h6!%K|g?FT9*IOl9ftt!R?V8H{@ zF;of1*J0gHx%-?!HGhaDgFwGcgJ(OinO`jroReLUSX8&CxOb8nxl@oUuM`b&E$XM) zz?3_`aSOLY^)|!|t{kC%uSCX;z=)-aL*E5M!KXLFA|R#xJdjv?1M1+aw_;O(`hlb9 z1gMn73uQxga+Xrf`f zDcUTdHzK%aqsHv6fkKC^$`>&da21A@sYMm-w)3@AtT4MYX4RyVk)~g$VKZUWG|XSg zQJRhvtx8b%(#9hE&Lnv4H8ZuKRd`gZ`GVQt6|+);`CGExfNiKf)V3-DH(f->N7@g2 zAQ7VY_A}Dh0g8h;v<71l&RXo4Ly?iqey$ zWHXe9QTZRP-3K9_vvFlN#_l>gtvp9zGGw%vymg;5pPDhxC&1pDT?=(1&se*_!u*Y9os#iR zHsz0++ZoTyRAyCF-Em|jB&<*Cw65PlDO$nob|Hv#wsXSWf(Z3+SHIpU_=Vhsb0*S3 zoHXeMdCsrsy6yS5e-WQM?Hb62#LRHx5_3NQ`k4CU`TIBVI%KDb5=FxbPKY!OAM<2( zbm*mzoNJkfAWm%lDNBxTr!fPaXm(m8??33fk1dl%fwyb9{c;O|vfhSrgM-VTuEs*y z7YYU0=FIUIl7E*XT)W6LBp;Res&0WWcVnWD>#D;Xg=Hw^Hbm81TT&k#p~|n!cZm|@ zvxyIRaH%X@>u2)2+__{+Ha+BrGb)Fx#g(FLE;~w(PEBPr!!h(mLN(LuEQ=OvcXKQJ zk`Kn`KuN`a*l^8@Ff?s5X*G)(d+w%$b;xUCjABOQa1@srKH*EP=>i&ryk5D?TX?3Z zKorelxj}VG6FxMs$V4$tC!Co~Y&l!f!4mw%DAv2!Qs$w1mK-PC38%-Z9 z0x?xs!w;!!^Ewe;B@wOO9(v+}K`vRH>7oo`8IlsLSdte&CgQ0L#Dm7`SHC!#t)z{P z^LU|yj!dVDC5W`+CCA9svAcm>?yZaAYpg$+LYbW2X-l{IX#Q8?idRj?1(eKG`1>6L z{YI5;Y%Ujc?;p5BUP#LRR9hc-XY1&jZEJ_2Ae)T0u&cyG1n-IXd(c}aBKU(m`YAT8 zQQlv(_;;QAKKS7gUR*U6{+Uw+S&EAj9mSKw(J_a>yX7aGoGJL)NL^#}L=sM_!DdNM z4Vyv8CxXe$G2RE{urrc!fpdZ4F`QQsXAtiq+_p~mL2tDSmLb)jHOm_@DvO;G2Zq7U zgbfk7TMDpizURhU&KzAU zz0HxNk^;iEjo9N`Y&dW{oI@N=ghY2MQ~PcH7P(rspLwrZz6dj_o{N75)nc`+NO%i< zS0U`E8|~r#RcTZGCZ8h1T)WxzDg*&_j(bVzjxwPu z+gL7XJTN$(qiVE-RdDf2{6V^Ye{&q$K=gwj1&cP>rrL`eGb#mA>y`N$FmGzM)U zbqYh6if=5+NITwxUo6M+411X#iEik(iQy@Ak)xXm^DHNL;Wr^%Fsngbi>|9`_yQ}f zJ38kMKib{a&E(!1oT@i7+E5rLcsCf1!w`yAc;3`zdnQW!5R&gU%2v$6cuN0!I=-x* zjk$K1GT2z+TU6%7>>lp5k!9oCL4N&rdFVC%u{i3eHN=1%Dyk#c$EsmqO9P7GrXB0p z-s#w8L^<+CCx{0Ta*q&t@E5-((LNYXuF0A%khpn>$5w$Cn@I7N@@xhlk1GZzL(_*q zWb;d(sF!1Td02Gi3$UF0-t4hDF|VVfu8u!+bG7;fMw<=|UU2B19h+xWVnst;0Ig50 zG^(;gZET5!ApKX_ro9N#e6uKeLwPz%E+juXj3Zf9UVuFrNuJHh^HFe0o=wl3c50I$ zFw5(t<*U47v3!Lo_v_u?8%*TN1#R?PtKzW8>yo5wCabC@SnS-UsyWckx{bFuuGr)> z=2aSE(b1+<-O5cTSI0mrts+-Eau^_;XuCr7c98Bvfpw5My&2-Fv%+>E@OVWw=2ok) zfU~+7M_561I^y-4ahjs_hr?3EYs%&H(fx~~2)95Mj(cy*&drYXkTYsFI@JWu;qoN6 zMW^as`Q*#3>N7OQ z>T>8KV%y5|bg)}1VL`(rOQ$sNS8J7cE_-KP>zhHRR4&s4QK$OgzZgZFE%iOs;_W43 zOkL>Kpvi49NA_ZP+MssB5dQ`L5utOUTi}b^r%cyi{B!ijZZj5eZ|3>e^V7}MZuU*w z^1qrQEi2m~;0WH?ffvsvHPafLw`d1F(}wI_(uVA%c+-Z!MPm!Yr4!dKqvP0m0bRo- zIv36BHqyh4R6T7g^-mOr$hgQN2`D}LF-z>_1%Fk`vh(xox36Z@ib9+4Q*8n5kG7Ny z9^bmJtJ4b>v7ixWp;xv5@+2HfRJI6o$YdGZlXWS`40w|0e0Y=Q7f6Zp{do2g*u8`a zYUg1yc9Z6enwULIdozBt^kF+W?>urZr@V{t0lbGrX zrC?1Vj|u}7=Uug_)m11DYPB1sVB%%-$5T}vui@Kxy65nBnI*Z0@7fJ{ed07Hh>kG) zlx5X8@YH@q6`S$rYZMLpCbfU%&5qFIzz2yLrCi}WgmK0-cKnkUjo zas8PS-|Z!`?QuVVgRVmfqxVUj+i+bPI+2YiQe`-$q&m{Qb+Yfaj8L#Y%Ia$S?cdpx zHOV*gkqt>jQ&$4wKfO$HoiiIDg^271#l`6~E9=kk=uDhTG!)Sm8`jg`1_z_DY{f09 zLE>iYoy`p_L8)SK3cg_km~RDWgF#;jvAbJQqhudEt`@L^mN<#fWEf@W(8nrGTGcla z1a~SZa@svXSL8@|i&E38fE>1OHH+on>pxfb#2b7*a9Df=-vg2Th|4@PxRP0wjS0wU zmGkr2a0zfRIpHwWi<=dXEpVa0VV$M!T=b<4mc>VnAJv+)Icnh+<29HRh+!PH7lv#z zE1LL83)LA`DzeeojC-hm;{59Z=;lY9{nsB5h?9o{`GFs9(cX1gv=Q9EuCJn1iyE$; zBIUHL;N(`IrLc=POjR>6Fm$c#1Af@Fe|taff0%(oWzOACoFzjT%x~F{u0esyN|@tU zmZWa9`85vYV=M<9_t%nN#nH-3Se)mkU*?ddfxxs*xs%4hv`_K3GZk!|H-+AMgk@N!l=tt zP2d40_l3y`ix)a!Mp=u{hx!PLjTWBPjo|_6kQeUqfDappG(V;E-KwDl0S8orzycHi zh9EM4Ccqrv6yOVj26`8B_;=3I+b%Bl+L(Sas{QQ~MnX3NREk8N)H@kBLcFeJp)u2^-Hx zWi_>qDwXhthx=1$zjL2mAODk#|e%nee1N zS@%bYy&j=-Lv(enOR`R~X{a5m6>E9zQ@7WJW6Coar)PJ2!1vns;cf6q01*bpC~Q7l zP5{ZbbKjE#9F5o=)z%B2uZTfW!uh?V;uk_6ef(|>*i(-?j{3=K7(6fx+hVV z;#7&NCx91{;w|PqhNB2a?8Lq|UW|?|=2l~n30?Jzd`;S>@Wm#lr!VKW-6lFr8(~7q z%RhFmKgL+66UT-wg6!*qHx5I>AhPCXcemuq!VyHV=aJ*rbxsFrxh&&?h#`|=qhvw* zg)r<|k<+6_kc-cf!I4psS&&^Mwk<2!f^$NQ^=lZORdb#{qAa6qLmxBw-`w4UmA+uQ@?qAJ^@$h zwd|D(;^^^5_hWyhekdlK>et+U@!-*q<=UQjt}r1PQX0A*s*S@Sz@svR_5h7l5-TQ& zfDQ)dFv?<9bVPfPoEDQaRv~3zp;FE%md=u4r~HZ96p2h4gDtU-tS%J4h~4A-@Q{=vd{CYDr0G$wEo5n)IpTsc9+8LQbo! zL=xLD&;Y?#{kk+;B>!G{KE)|2uvTtGA^0zdRS3HbE?aE&V$PxLohn*!s2ZZW%z{b> z6`6vw!ee&*EO9;bPyC7y%D+}tE+^NnuDqNCxe5wXGE<67(p7Q}vRMDd=BQ?Y#~}9| zuH1SOSO3b6C0aA=`NV|=xEDNR9IbEX?@L}{&f(3&DAAH5$K*!GNA^u`S^s97mPgR5 zryg)D+T5)?+uAqYvA?oEvOl@rS&(g5K4;Kty>VVgFGJx%JNRn+wMec9gR z4>OYoLUs#`?P@;xciy*O4(@bpadrAR^}BTejMa?QOfkCEx&YZy*;83|iZut6t=&!z z&EIOPy4G!4PBV@(J}C5b411{zX)9yvW}i(Y4oe*!12p?;F00%h_;-9XSNFfJ7^-NW zI(6a1598Z>Jwk1Of*Zx(*d%j?B9({}PYEhxvARTXow6XW&b?cz!y z+=sP??LsnerRz*&w_*Cm0_9!h-4SdHIZJVYUt|YH9^Cq<@q=SKH6FH`%nnCh({9fX zNoS>JWJ?b|++7hu-9*-~Hc4DGne6f=@-Fg*E*f>Eo`u?5LDnS>DD@FKuRp_nO6XAj zEc!{$um&0dpoGRS1eXR4GgQk%lY@x?jqavdZb5Mkb}`u<+(mdo=t8CygJuyCPA8T_ zF^A3&X{=UQrc8l_3Nh*B$=8O4ZTboJbEjgb;(760L&L_ZtP){m(5lQ@$E)l7gF-pg za-Z_F=(?z?qkQ8XHAFT7Po3X{5& zWZ|4jnd?8OO|%Ws3!{gWN3{n>?+}3xfz_N9Lhq?cc$(}TpUHpB!tmHQzSDN z)@rUiteNPGfiHtXeQO7Irn07b&H1tuj>p%166X|rI*SoA=dX%uoqe4c9bJeYi3NEy z%TW^InFWgZ%C`Q{FG};_Cv*2Ff~6nBi%2I9pV-e@oB`Oy_|?9%H<3UkZp*f8x3+ut zJ-ZdVSkyn`O1Hn956=IcD?+JTV(6$>B^8^i$pV8e0l-3FH_47g@sv_u!Oq20pg*!8 zQO8&tpFi*^`kaaVl$%4R;tlnK;z+hFte|93ZasLNY;$iTlK=)gKTa)fxs%lY?=vj^ z-`HD;BZ;P~8!E!fHFy2<&wcXUA~&uznf(O244(->7 z{2czQ*&PapEX<#0zDGNy+EhF&dC%?hUsOC&RQwWo6Tgl&3u9H~G5P%UXme9FxH7$R zvIX5m<5xGib69#*-zDnD^tvIam~JutBoM?u>Ot-Wj!PE{OV*rFqg1cd&~1>wSd4iO zcNdRFI7X=RMf{cj+*ci;U#^qo7v!0AV|qTaj_P9N1EYJJNnB)z)*HexkP$&y8)cSRy9~L zs~N3fqrp(d=blbboqWOb$jZ0Gs12tDrx&gBrwXI$SJlm8zm2F3nhl%HB8Lz(#Ec=k z6i8ijk(Jq`?9r*P4_FWJi>IU`QRHs4!B}c`0mK{zK0fJNV~x=y*>f)+kc*Ged!HKsz!$%V0=-xuKhuNE5GA??*Khk*E>9Y(8QOy1*Zt5 zugL9Y@AD+RTsS($e9;r|e%iy@wOrLXN5VprLQ@kHQ#%vELKoU#h(jQWi4Az=6Vt-d z(vni=O`G3lXKdKI&+Wc-=1yHzHs}T7`qSz;xt*w{Q)Qk%< zI=Bfu2*LwuKR9^Gv1vyEecR@lIz;!-BPP(LO?+u%qhRKPnX75BcfuvjBXtcm;w30iGjW7d$y%0|&k`uSgW%U}zIx=4Wen#xMDti-7i^ zEU7XQ8U(~$q0C;7cCXvVk$wN?^e)$@G(rrFGdkK~wm&aO&CX!Nfx;B>s6jy|Y!G#H z0sP588C~Ql^J7;W8(sbmd9R~nh89xaA2~%;U+@_625t0{Js&NYbSKgLX&xaVFQ$w& z)F1*>6y&^?Trl8Dqq-u)*P`t%EXiXvs=1I6@ZS^Pxn(0*&cNRG3K_B^c;g<*{T1}* z6Exw_FJXX4z^nIc2x=eXJifY&JX^LY;_Z9zaDPy{s(S()R5ryCv@y21d+4H6Dsi}v zvKhoyA-9Wq%;Bt&``>vfoZBn>!_uP8tKs!q*3kF%px$>~9sXr}Ppc7W$V?9XYHb7w z9cMqveZKO<79NQ8E?kgyICQrU-pD&sNgKzwA}1>S zZFM=6S>_z`+f#BMWB*WWFmNFuD<#$8pNlQr?RoyE=EXr(j4|)Btln9!psVFaYuaSP zX!bHGR~v?pYJ+|7*>sp2lkWzJiz%Rfbi{g~<;s3%bBomWXCrV5Z6oz!^P!NWYR|;( zmeS~#DYD2U5Ty_}Adgn#&TxuINepZ<=UkV-o2?_|t z!d2cU9gTj|a5nm@WyC6`Y;6+FIxQZ@s!8#TsV!p+{7YGmkdLXp!V6DqGj48M_nWwY zc*}@$mEgqay9f~!GSYv@G2j%Wo@E`?1XeO2AfXj}dVX$GOGHntTF^CPU43JGNZkAv zHo9DXeHSDH&-R96J3l&j%{WiCZD#`S;Fr~Qd7pa1{@C2sSgfM@DBRvpjYe0Rj&>o`K#CA6g@6|XUchXg>{<_RY7WEo^9r^w zrtZz?dPk`S9PYTUgY@|h2aPAO@CSWR&Yz%Wxi*;OP1|pKWb&-r%fSWRdq(^JTrgT- zyB!TVo3}JWS8mQJblaUccqWY?92C?+qax(KI;vyz#V_M>R2L54qY+y8|*~oT5hrE zavI1V8)D0(Ea?!J(N;fHMpC|0j$%k{f@Lf3YnOzQ=8pYa9e_4rF6@K$sVA$C7sLaD zAh@C1!sov|{qY$)%axYEl%wt1j{e04HG6%K!Rqt-&%Y4p9Sn3iYQ~ee`%74MO&s== zpnv_7M#^7KLx#kH0b6}n#VFZ8&Y8zQihZ&`r+`a1}dKt?oRq3+|g9>w2T?tD6OcCoVz6` z@RT{SITY(KgNkHQLJ9;(6Qhk(qL&u_y|HIVc)!Q^ZSsyvr)BwnG&{hbQr^_W9>acPs4q=>^b=0f$p$^ z@AQ3yAzqF>;qev|Iey&myknyOphb2KLwv^WS!2jt;t$olSZ%h43!KpxQQ}Q*!BL_^ zh&df&kurtf&>pa{gdCb{lQTwPC~5Jr@PXEJfkO*vPYmcZvzh*FJB2DzRxranf{#{q z%Ro@}C|E=*v&LgQAH~JCGHhE3JMDuLGai#t!*l|;%@;1>4H0MvUdQjv?Cl0e%r9gF zbaF3ODPEyGPn#?)>WSwdj^+3T+jxUic5;>Z%qJ-}{7{PUwt-|H2hpenhXfWX0| z*8)NQcj+DinJB#Mbs8lxeOSFm1hlMjCG!SnB50tpHnXOg<>gPdfX!GIO$w_^N>lP0 zs|2Sv#a=^l{3Tj)suH=>dP~^r{zfj@H#gi^B&OE-cZY~}|J8EI8!Rr(t)GC8fA<8u zR;$As@5@WA2xoJrpQklj9jc!``pIB$n;&+kYe??69Ia3FJMfApt1(nIL~@18JxL?B z`J!wYddBi#wGe-}Y$tz!W~SFg&E?T0W_O>%mL!6v2T+98Xt>Ixn#xejj$Dsma@^)t z8N?&C2{k(F<@a|W!E;tpRQ3^xeB$^C89Z^f|LVUkN-q~hVr}GRS7#ldDn0|4Vs8^9 zN9v{@Z;~i2?wSG8kCDN$)N2Ae+l+1hpWODI5N5R z*M&+euqqIYJ^_h4mrLRPK94tNV<4}QecqQ<8FNv51A0Bco2N#x^OoAv+4qbq z0X1FyCmW^=%6qE245{nUxTF~^8d?f<^PW=tvBm(PKKu&y8>dZVmZ_Lr3KuWMjFgbo z6Wlw^O3$)pjehOCuP6M@ zE|(?yC%2PXbxU3=3wQeku&YmxlkAlR&lNr@f;Pwe%Z=GYGFhm2f<8rp)uyQkl&N2= z?I*H^)4#fjle!JHz|P5nbj6qxg-DeatI7Lo6j2`beGyjYJcmvwWw?pcriv9zn>Wl4 zLW&G&x z5(_Vp|}VnCs~RSl_oys0V|tapAs$vfX(4Sh(2fw$N5OHu(Rrv z5{46l*f<>0kUorxJAqe295&a`7wjhrzT5g-+23X;XrM6&}@}0Vd^>3di4HIm2>WMqN%Gs z7_jR-UGn>F<7-xYB!;E{90M#pU~~(3v*^Q^RY*~;S*rxOjIhmL>XlQGW{ee^{RNdd z0F#EeIG-_T+=jNmM(6b8FZHJe&E=Mi1-Of{leMQup%Hnj1_Ii@T<50UlnBv?%*u>% zD>*z`Cb6Vh3|e)kEtrx8itMPKa3L|Z&U=K^NxBjA2g$$P=LyEAXY~o-kh`CErPG3;7#fz|XKeKl_L4O4p ztN@g&P_;X$QLoT3`D;xDg}fiYqQRd{=BlC%5#i6>F?k6GyEcFFp7m?)`3tDOARnN) zPWYMEX2lM>J?Rs|jw2&XkmVsl2-v!SXMkYi7-saC;QG99?h}OgKJRg1O>8y09GTC! zVR!k~&e6PI$`YR!XTC0AT?h%uZc7fa#Kf9tfw{wAIQD=h#|6X8LZXRr6P6F@!ir?O zmLz{Zyi)m(eQ-3DP7Z$URPM7jM|vQA%DN_oeqqz>S&0s!MMQm?NJJpHT;I6LHHzcR@OC1l@XMo&AzOQL0GQ( zQNZzx#>5o`lo{HCN#6zKAd}%xO4*&mk%8e&p&eJ81V$uMJkKk?lWh`#W)eSAr{{aJ z3!)1;tp2ev?0X#I+t`2AOj8JUwyfEvJNCGq6uP6*Eyr>G%xo0e6o!2lqtco3Ln!~J zAgZJ+*EAdWLyAOkh{kib{<<*L{z_;j64+vMgIK&RM!hG|+!W3D#8Md%v%|ugFedjE z_lBg?woZU70(Vfz@}dWum_5G#2gghrd}F?0dSq3fw{#2A^lwG2o2+sxH_Rx}%fX1v zvjO(Z-$HML8Fj3V+xPY}ticoog1_A~Y5a8H4@t;%&0GQYF<6{Z6CD~JFf2(7IPEEG z!+EOEh@`YGW;WD5hoW=|)fkn#D7x<&?GfEpJvP^YZ~3iE3BZXEdRELt%bKS_Plh6I zWjw({iKT{MSm;0AQYT~A=z9>Ncz_&xl6Kiji#OUE(^fLnbRsc7IFZ^o?BSVkNnuv8 z1YjkHYv80Kq=RDbTGh6lv(Nj`+1Qg zTrZsN;_t6*oD^-Xs}cI*!5$bftwc8tnJ94)e>BfOy%ehs16#Z5&%205aD|t(WRe^T(fNUxOoz8!@R?E z`raHlCI3@@hg@=OKK8nv{mmp`h^xtIFQ`Pgh_Hpphw8B!5w|X1JIq@^-4C&At9(TnRND`ZyenVC{eTv9c}N4T zJ7+K#iSN}qdq@0OY3_}#c?xd*YSR7n^dC`I!h=s#d=M#LY^oSvT~V~)+ExcdtCBOy zXb7x!9vhk=lnsM^(78%k?Mcy4IbAI`I42adKs}8kT|7#469l0Op)RPl2hZj6MtaSj zg#VC}J$JZyV)*Y@`~W8u;l?B_#=*GE&67&bl>M+4`-AqcUk@iG-(DN z>OWC`7vWLFJTfG}ImAQR4$UfM=GNs8XVL$XGf-sHE}E*d=lqrGA*4B5w}SmR7%SSf z3BFNO1T>k9Wn*|8&DY+R+!4F%tNYY6!hTg_O7K_vTx)5~dQV>$(S7-CH{7rZYV*3P zeIYW0#oE@qPwgFH`L&rp-siCT%8__)Q&C#*;cZ);79i(~Qo&oEZ}uuSQ*8#m!8yS3 zS<{6O7#4gekTVzhj0UaB6c~S1NwT`Fwpk}2E>x5Zj4pfedZL>MV(#3+#^{MT@%Qyf z^)0DdAmh%v9T6b~KJb2N=#2>-G3><;H(Hm94nL-2qOwA=+j7mJNd5vxwOhAHAz3%a zBJXj=kHp%+)`BeyNogBkRjfwIag4iZMM)~&aci|WwzLnPjn|J&%w>$c)k$E*j36e1 zDe8-a2zPw+#Eui{Kid+B!);7QnetAT7mWbr!Hu#U zig%Ez+)$U(M+FT|b)$+9xcKfhv8C*(k-ENXM((kk?8(*OWK^;VvEtf4Xxn7RA3mDoU%7lu@UhtP+mknS%bn6o7kETM<%!+HW2p{l)Zt9RjEUNUyxU<#z&sqx z#@)qr&C5Ysh6Ks|G?G$zNm8Nmv<*&efh%eI*PO(|)8T5v{r!Nbz=GBPvP(nD)cX%54OeMdo1 zLD_|Y%wY0A{q$vQ@-V4I4pmXfE>fl17=AHt`8W^Zj&xuUYCOKPS^Rhg_LALQ8$pLv zEO}ODyotPh?)=fcz$Y;8Y8+MHaPG@upi*e7HW4)#3k@m^)?w2b^#PJ+_$z`6p+$-B z6-G!n)xykU=#sUubnI%K`=gSugxEb0KMu}&bu^>>eHwNekv@?aMK1oO=RS%2`@9smDL%5^gyJxQhsvY5@|juGyEJcTZEVJHf#D$&`HMMWvL+> z#^sq)_TFVmfS13iVyfF76+XUzawb{qs*}N`lKdOph?Q19PU^xCrf`m6enR>JsTL%` zN$0TPh_&?*#B%Rto3`__``}3M3oG|{$xQnD?~R8|y~42skg)2FhA}@rj=cMq_gXzT z>h=-tP;k&IW_0oWtYOPjC>QbHFll1oS%SzzpZ^4jZ$aQU&nrd?pc?JpQ4X)y@%iq^ zm1W&ZGlW+}hH{@a-fSdAh2BfddLNtoLz1w}P0c1f7*k{+0%Bws4;X(p;Ip1y4>)_+ zixKqwYBW9P0UzW9J+K<)YS;2t)nG5!a~9_-Lo3LhS(iKUU>{G>kQBx7Eh&eEnZ{9J zzto{w$1lLk_AJO{5oJrhWep3GED9@QHcLD zBz^%>=0!2B7a!Cu$+b8xb@usR1gaR4T^DNonZ5- zMl_WJ3N0r~;V}~8At4AOWBPpF8?K&Q>gX#O*&+c9tSrbaC0t^6dV*LLzqGiM`5-h+ zf9E>?4N}fhrq}|;-}wbAw;9U04e}TI!iSBahfo&$G20DhG@LCH&Ox*ApNwi8HGg4R z4ady{?%z*6g%;xHX3Stae)XNx_D)X`T%9iFpcq_%H*|;TaYglJz%8L=dLWt3BnNA;1me znG9@xfjykFIoTV=_Y(g07IE*+k2P*8XdpmZQx4~!5z7jflVuLM<@rqOMfn;NZv?B+ z(*6;hDOSxsY3hn;j9ePp3f?bpdE9MD8_<|W*~l(gJD&^ee!hFgdOw-o~b=1yD;p` zv21J0NztB}5ARhM_%OA}uf^Jm7@a10L*MI|r$>RQJyG#sNsAFM{*U}NI$)l`m7skf zg6xjn#&C1561(*bz*9xkyzfD5P(OE=IC?^6&wW;vMlW)hOEs=x`?Rr(1oq4M1Ivd3 zJ8CRk6Hf9e)ait8W9;T=nP7L&An+nS<)3CC15A>Q*$ZSmvR4vI#&Ej1)DC^pAO_>z znpZEv9E)4Zz;4xfBuQ<~Ksa@h!n6MXp>|23sPYD*EU&rvbmaF7&C9zFI_R+?Si)Z5 zfk5!Rw>`$(#XTac0?}U(18?BYN>>Zv>z-RY*I!=!*1f(W-|r$SaNDt)1Rq@0077t%4I)@N~p zy_pXI*W~>I*~3YxqMfOwYXo0JDN;n5<1qQjhY~cFW0MZfh|M&@6x5Ef0a?W7v%i^v_=ywIgBmm7=`eg1e^GYltoux#7kbUOs)AidOb~(j}&@qwooDJ9p=nd zmKoAW+Vpo=xQL9OQ2IVu%SFBRuql#b;R8*QDoMgKlDY16tUq`7=ybl{=XH=uV%mW> z(V=iutY~oG>{c!cIf9y25;9DaJo%4q zYASqjJt9Z1Raj%L9kUM;Y5Dq*PY0{Xez9F#=03pXEI!V&robW%Q;qXh_dp-H4fT>u z1=eI;@{iw;HH=AlEY z^Cx15J#g#E2COfnY97v|3I^RpmyMS}uw$Ecu&z0=!E9Q58>lc|6(a(lSzp%k2&9`1 z+)|#p)Va~=*An-e@(kVR`5RWQ#+$@?cw@4|vPew#tNT;4QBkz!e)xL#1f&dR=#V z<*ci{mD9%U^NeKRpGmPd5dF-A?K0(IXuTW6Qq>vt#fqQ2#znbTsW!+!yN8(SZ%!pt zH|L}ilwoS?q!DT}$PlKp+BvG zqWuCI=MUZ?!})G>`|ju$Al}nV?)W2^64ICDwN?2)Na0y zg76e}SbZj}kPN*>TugLHX?BX0lN3KTnQSI}{@R)&uqoH^6W5Es7G4a?(}GQ8xsJQm zWwC!+;i&wqI*eR_qi;n0W!sQDnze|#WAY+cN*@H10Wx`_1p5euRN~ywk192}QD0Eq zv*~X zW%QOXldKi$l@q;93-q|$Gw}0skR9oEY1T-sX!Gzxg$u=_#^j(#ALg*BB=4lKc2km( zn&41Vr1YUzM*A}3)HDluu4!;J@iM|)Avg(@)2FS+i-b3-$Lo=~NeTm3Rzm)dooeFo3n0cKh82K~UGQswdNI)rH6!9jqbYcFt+{tXo?qp}k1u8S9L28#)Z2}H zH|*#spO~t-JjQl3e^`b06ZvJa<2+1ONp$%-VXY8&(s;|AL3_n z<^SgQeooid#1A6PbtM8X$nWPdkdBjZyF0FN>3acN7k-&LXN%|!d9V}EAkTSNet;#86}kP z5cwlEQt&M%WxDoPk~of*s6oeBigYUFT${qnK56a={7Z(jp;JSoEHQ2{dU^(v$Q}7i4P?3j3rvvG%1W}U6eP*`NgA4 zLYhs^nvsG8o8nTj5tI(o7%qcsEK1$tjH2nXu{G3?&?rpnPj@AHwM7CVuP>!Q_N6Es zIMQaZ+GS@-7!aro2{QJ6XwH%s4vw4EvHQWp%a=VDgSTf4h@I4H5chU$<9-iLoc2KO z!rZK|36HE8Wl`iOixQy*$r2Jol~;M?)+(f1IJ#_;-95NhMDZY_@elJ)bNk2| z(YT>(Ki4RcCqkT6fnhqkizTdHBCU<3*@-klCCOloeE9jw8M}5=&e{Xf`JFpY>fTd0 zFnjmz*|T=+22n7l;ID|GEJx`+)s?5}=z(T$h9alUP^3D#mT`z-O!W#D zW%sEs>X2m(x}XI{7U$R6gnvzipW(2<|oPTAbaUbvYEYk$qX z3gUCJ2R6<5;lT1|_YPcJ0zJ6R>)g!-T6?u=I%mh?`8^+=)S2oV+#2p3GR_no!6rI)N)~Vzr@s-=y4A} zIALCP<0mIPvZ6B1nUgRO=o*v?C%GkFKe^%&m-PYJWlls%z9yRBW|ZtFhXfddf5U$m z5I#wN|0o_IEF^ksI2tL1Mp*SRIt|*>nQ6u1ZyeI58c~P|+T=uIsJxOE=HT->EvW$& z&O+B=i}Ilazbg)XU|ypzbiNaFh7XMuHjVL(dbvdNAzu`wBl=IEr7YN(T{aYhwILP9Bn zkRU{cMXHPf=@c{43t@K9(>+1hs9ncGjaud#A;VPmyP=CVMQN&>REN4nSjf zs-Kn`p-)TY>Zhd=_G8RX&E?|1cfmsuq+?sk^YaN!naxRj6D2=4Urz?5z*r@lqRJem z7iawFS)xAqzrdR(HTyUey!FPGt;Y_R755niWqtdU2_v_^`_A5O+ul8~OB^+A%E;o8 z)25Cie6TmVpZ|b=ityRqK>2KM*vk0hOoYV2;(l{Fztr<1w~4&>g(R}VM*e$l1Hlfn z9wb@WI3`R#9=+oraXA8A`IXVT|N}pC;pJus@ z*@z~ix1d11ze@e>a2O9S5sa39>$2Cdhj3&Kk+C(QBPO!n7c~&=*l^Ikh1n>nHR|43 z7=&+mb2wP~hF?~Rmi>ksyiwIW%S5s`BG@0~^2XM63&Zf@O?W={yG6AJI+&L*yP z?Tp(t=#GzwF8nV(LH>3_U-+594Ryg8G)ITbJ)ObiL3oqhXSpW~{*9G2ea8oXb=IL? z_}6Pc7gjgWKI~rY$@(sApuO3zy;*M0)^0glyZtnuf%Vf|9;auPuOBs}UR3*ej4b54 zn)Y*12VZ+t3Nxs9^%QCUov%F%_GCBEe}LNl8Pfg?8)tKQoSs&sJ?HsRiDfnsxqSZr zsyaZmNk|a5nbLFtW=bXjDy8=H(>4Lhq=n?N3N+>o3$37|voDG|gBsO`8hOJ_G-*i@ z$= zD?-UdW%2zCj=2gxd3DS)t%$k8oWL8d_F|D|a;L4nLuBJj*LsATu^vfnW~=V<6;1Q%s>*wwa&sct30)f~0HL~12xmysm@rdnTro@|j?>&EI&yN2oG3x9f60Yua!Or}y)f4p zX-UmX2gW*5t#*(L^7Pn>zdgEhamgo7yia5Mw=8a3^T27mIS$WiGx)L9;I4^<6>UmZ zu2QlmI z(5z!*&xfK&G*mLn`3q(mf7(DSyK3766f8%^N@n?!*{O@+0UbYJp3-=Z=5EsL1(5SM z(~{x+j}O#7ioe31kMTk1e{%fXIpYZZ$52`G_@{R`{F~@<-^DW~lvl_(3y+aG|6_@cMl>*7eP+ZOfDE>h+wVZ7ZIa+nNn%a;)}wgS_K|;piRous0rB zePZSXS2mSacp8^!*dP=W8j*uqp^M0;r|JS3V*Q*RifqY=cBbRoMOiALYN=Thyc`is zWzPXDJ?lc!JQ_7+PZO7nVR3knyYg4v7qUSaGR2vtKd*7#Wj0@JttfV4{ZMaV4b*}7@O##-DNx-0ABo1J@)Yme(2j$JawS@t$lpd zuWuM^so&b6?OXgtZcA}52AE8p?>Ns@3)eG&lRI zPQr@yN?4@tC8X^qzP^ckmDE7rKKW_|X@6WiDYs|xRa4TQV>wr&4NXxal!5w5MwWF& zZT((5G7ENf_y-k)MKLD`(YlSg8XnYxo2<j_GGEg@+r%wTzzR*Z#<=ZQqiJO!^Vh>up7^8S%rUkX5kOZ ze+8l4%5l@?3@A#ynYC!_oZ83sY#Ld#Z1%VX43;dekI{~PGVSP7N2L_r>55h1&0_2r zE$T1h&qAcrlqdval{MD4rTEhe)oOR~!Rl^3 z?uBvc|6J}(uy-vhd$O#|9WTGrG39xt3*Cfwk(FRo3LR6u=tXaEv9f>w+! z_|uh8;|rIj!W9i>WFi+>?X-f1QOrx{X&@jCYAo;HrE2_#_?PQteY#dnsDYC3i!q7& z!eFN5o5=WTfdx25Kl#Oae8i2vid^^AI%qkfEqoMMn=!B*Zesu&wPVmYD7JP({qaJz z%7rUyr*G?r7iz4OPX_brTZYUau2UnbArrm-W$OZ>hd8X1( zdoOvWo;{=#U2VXA66Pn*aH@<_+O@tslOeB($BipkZIwu}CUd1|c}=2yvF|#$maUG( zzlN2zmL^T}R&AYhKNDrv;*_G~+9y#?T@GwCyG!%<7!#*CAF>m#keNdw96Vpf#Z2zg zsZD%(TKBSPODp>+MOp%(h(_zYGTclPz4$UE4@{c^Mk}kT-bzYNwBk^Z zxyq@{3roFsUYH-8cwd^>v54S?(!>gVz?&o|jPdD(^)kj(FfN1)Z}OO;GY2yrDP7sq zZ~dnp&T_OE4d|-0Pw~+mHTF(#7tr)ibU9Z8{U_a{e?q6M_vl^iyGZSO80>`J_4-ct z>pR3dcGBKJ^m6~+)BMI>sP;buooZn0$$tHVI`$#W>W|$kyEUgZYgpeIa^IfY4d|vi znL*rb0CO7ZM&&4et}sxz{QqY=m6D5afbfz?l!#VKp$=Lo(iKYU7bCLK>+_O^YeYFC z$iz(aB{G8fHzJ)?C`1#QsT6ILi({K=Xf!^Vw!y5`kSPy}_elb=4qtNKXkef9N`L|xxSYTv_P zrf)y0ecSx{4)y9rq&<(K>h-SdM_TWM(EDMm9{P64!m?cDrjev+q^>Ter6CTW)`E_W zWOlw-r_?@{Vm^K88%s9Abo%LdEI}3WQmISkw(5&A@inwqXplXZ!k<9_kOAydWmUXJjStt?ZcRywS1P)u z>I3eLcE72o)l2;ZIqy@jwVclTK#_e8|EtRa#UIEyp!@sffeM&mZS9bFKHirS3cs;@ zP!$IYRU90GHa39Y7C#*1RQw*&_}=<9t8c}4SyP3Vz3uB;E%T6~_RaD>887Q8^Rm?X zx>!?P-!0U>OVRBH`cC%in^XHPEv?^o6J6g$YTv`)CEvbO`)=abcZkwAZEyGSNwxPZ zwS7Ogo7Vl3`=`7K?&8&IKks<^;s1t0^m@I1nrVGTqLab5nF8O>eK1h#Irw}`EWgya zjy$ci^NTe8Yk8LdvqY&FSdTq+ux_0{uv zcIJUdgQ0aH<8~GyZKkz^C}Ch3F*G4Y-tsbYpz1C86T8ixEtmTmH%>12RkxKB-L=9u zM`|z7+FwG-kuSge(tYd|n)C23nPV5i1EbL#DO9N;9qFvE+3Ir4)r=TtB;|edCE6S* zr*rFgA14GTg>^#pS*PJOR6($^vmI>yse}rzLE~o>U)itnWYc zd`Q|qB5qP`VU?ap&(HU^g?UcUF=)nF>KWI7|Inzmf0?v@MlAdTsBJXa0#MVHy@2hHRrvF8sby0B5aWtPWfM18nic0YyC6oKv4OnL8-fA!^8 z)&Ag_iFC(lR~1p2zt(?MYH#?-LX06F8iJypRq^% z8ELIMxqk+W+4vc9e*`wtJZrfhdLOl8_vPAnRo?ONbGh-tdT*qQmk-d+<+1QBnZBX) z0lx{C)jrf`65jBe`)8&7L<91+r#!~JgRDz5X+N6z)XEwt45td|AXgm$Msqll^f`0o?T|gcKsJ87P1HB_qeX*X0X&cewdzNRI@FRgY z+5ciof(PMftYq+yJ=DqW{tnjqv4_4=37SlZ5axW9EbL9LBbJ<$9znAnlyZh*%WqB& z=^d7pKihqi7Ruy8MAzM3pI)>;VDMgkW!-G0xFN%jQbPAKSWThPQYbsc;(yA|X9(n9 zt3!e)UO9lsq&H#O8cNsqjoFvCzcF;yvAz5FuihElJuD|@cH7QV+tTd)XAfQY%01}x z1q2#=IwCE~TVe`cGMeGrvdwTkUO=AJPZrRYWj z_78`j?}1bO38gdZ%cOC-SdDzO?+WNe`i`t;cXFlFuy{S%_Y8(t{pI$EZluV1o()%G z4U5$q?zw7QB%WYr4s4b{uBQlQS4>0oDRsrh8?2E@9ZcF1HxY8#@d&4MJc4iwt3LiK z@}8BGs2w3r?_y`w8OeIHC=OpqSfvn)&0>u-E~uOJ`~yeu#cf+5@s$Uk=bxm?B2^-5 z2aFv)u58)nE!L;O@*-p(gzybksxsnQyeB?{KN7n41$^d(7i6DJPr~Cb3&kiNWe~3Y zVgr0qO_n#XYFP3iX4GyUORLqm>`tkfow3Pg&gz6_&Sq3wY(}-kX23q_%L3W`V8+S< zNzt*g_HC|m=u1dwiX_tdJB=GCTjTE>CcDMJDomKY1twCdTA9~#;ni*DS3X*E;ja71 z@VTW6D|!`o{pq2vSFiZ~7yL^w6u(|AzP>+G%z03H|V)S#?zP4??E#CuBty8 zi?TmiO-we|LS?Qy8;HSas*au2VqkL}th5jC%~dVPkfFBs>!0XuPyHYIC%W{V`n`Mg z-3~Z|*7KD6W`6r!avwN>){Bt)VE2PO|EOarRL3#|?U&MrD~mTQ;=-o)Tw~fDr92E{{`twJA~9I0xvV{%7QOnvmNjF z<{Mi36ZhQCeeQ0~eSREFU?L>vhFr(+g6AstirAHC9}A^$|Fdfv3}s;fVE^(nUQs5$;LEl{Dxm$gvi(aO8=gL&B=b)gQ`E6^5}c{gZ;-?s`oK$G-mCT< zdx4z=srEg{>zjt*=qh@c#%D8VxZ-LQ9YgLnU+uR7GJP_D+HceaW`|Jvm1TgT^<@B! z&s&ZF2Q(2MU^QtI&`2p(Q;%LJbFvsKogiTM518X4kdoyXs2Y4D%vG`ay0u(Aqh}(@ z*Hp2Ej|88cGZO!S&-lvO;)^SM*3H&g5d9Bd?JaE!Xeh2=^-&VgTq#B~4`%oFZX=dx z+@LI~6KGUxaFE$0s8sRxo=;5yIhBsJ+qy{2bVWs!}RHOtdqeMc)32 zo;`_Zf`RN*A8+io+-HclPZ);kh#ahMBllCN_M_uH>Nrh);{>Ho!vB)$k5X<8v;|jX zu#p{~EAjs40XQ0{!y2eRg@fj~*o{Q`wOPu)JJV@QR960@!kX7l+wKHCT6@2@mcs91 zd+|MjLvg5FLUR52$c7FNQazv|I~0fpxrgalou9-m>O6m0*&;o+gq<#7uoR%dhOryd`pOl&cd7V zySrY;pB{k5n^q@0v`XfgXK_!imcT0>&62DMi7LEUF14efvX#2c&MZlEv&WgMP@rxe zL3*ohSPk9gHowgc$vl&!BV)S@cko(cuo`5$$wG7`e!4s<< zqX!6_#jm>58ut@MMJ!y7cNT9u!?9xo(1#Ay zE2_upwHu}ws2yyOWY^d?bi9!<3;%=pB#?Dq(5F3a17Ly?b%e z$8UaEudMqOvBmfeb?1%l&;850vl?My7hwyELX#vTtD4t9?Z10R|EO*rTLjZSZO$rQ zQ;EPJ-wn_ytnvwXvYTJS>}&+T#4anI!Y6_>jIJAl8xG98JRFM6B zQv5@;eGlBkSjB@>LqgiD~4VLkgLgdPww1}6^I4FgOn3Vc2k$S^XRDdpD z8O4Dar6+N1fiWi&q_=~J9Lkiya|KfI-@jbA%TXNA7_o4*=)5dMS% z{a~yiQ>-=_6O3G$#0yG+Gn*sb=*Wj${vf`+Z5ytGPHzjpgf3rh0h?@ZEfl`t zw-S03K&v@=pTlz7t4)vqq%S0}_(EonqLy}t4U*}>s#n)R0zP^UzY0m>gO3H{pCB$! zo{LiVfoe|VMi64>wsJR_Zcr|K!WS7h6pWg(oG=qlp2svz$z&iOc_NhiGZ7?D$J(G-g${>HmWJoYL z4Lk)qb)^K-eEO=;5PeY%ZFMNcH_hhhSBs6Gy>wL3&YZ;NuP+^$v$JVbVy0MExotqR z%%JHzy9YJPl;N8pe9rF{J*@Uq2VXS>W`L+R5mk%R)>ELu6Fb+E-eW_iBQ=sQjY_eF zWZuCib5BAfzWv8>h`M%N^w8u$OwS#97SHBlJs%N@Z$tM;IHxde$YoygFYUuN68FITE9#3Xp=sg&jfZ^H7?bE09 z?>FP&^!T`xl(_ixA9{=)y?(^V?g{DX35gjQ2pa)h33Yg%VHKg~IgBSV0CxzKk)pjpD60}R zyc$>_qZ9&4#(X-Nd~zW}dZW!99{Kn(W6c-E_X%|i3@wY+PAF^9Gl=a=uJ&``vS+?{ zjjeehlAU_$#O3AnM@PEN=;8~cp`g~)aPST{#y9X~DBxz|Yqy|(SVo7Hx*KK#noqCs2o~Si z*_#^<Y-`snjwx?2**xyiOPD8m?b|15tX1tj6 zGmYJEJ4SB5j*YJe)!FHNcwA{ejNLEu+~SRf?}>c&43p0$;D0^8)3wvtm7*`uLS)fq zSCV4C@}5~5ZlLp3eB)=?bsAg4Ddf5{JBzN_e;t4&m>W8dPU!4jhIjB^(?gcnd2g(q zfmqAVX$eHFB*ad9BjoZw&YG+;YCNQYf)d7HFU%!K%sYT{3&QJM>$^5Cr;O`>zZG4A zKo2^qE$1!XSUNVJ#y;BvyKd);*J9Vrn187|S&t&|1o>n|NocKPPEJuYBVe&nQ8f*u zKdX{C7hqNnaXwB&;~AS)hdhi&qM1C{L?gB`X0xjdE<5%Y?`aE%4OG1h8sYx zQ`uT(|Ht8Tx?E2Q@t`}TY90O+FNM$HA@~w6;qTNLX}W~`EP8HXIPF`FHDK2{Y@JHT zIuCk1i1fe^ zk?^ewdjAvgdy%Wu9!EsiCdmJEBKpUZzY_jNooNa8r`uA&KUFu4p1H&i#U6eLbuxH; z$3%Ca=dLUJOw4Cznzj7jR{5avMT5t2iurhl`xf3Ie4uPRWglE&@XKS*>rSo*u`|Hh zH2^!W%UFk*VvXO732$c$X>sHS5-HX~_G1NpkISk38+PO20=R#GJnjO{#(!_*dU1tM z6K>N@^%=3TwD8$D*>zjCw%y3uXOOX3i7t|aW=cWw9t@(pkG>|PWAS0C_7G z>duUita9LwmGMrixhh06&pj!+ZC~MJG_e9<2(3744wvSY|s%x;Z0nCe{aq!_3THHwY@FAOSnh5WMrqrXkxn) z{7!!GK|Y)fvMh9ugoMuRce z;^4mT*m>lT!6Q3&bKm)P<|D8kg7-fU!5g`;t@?k15kxiv!zaai$bY@Rz&I2C2H~S1 zctgoyusypGUpp}H%{}Ga@U?r_S@{n;dK;osFQT#ptYtiTJihgxlJXeMO zto;V1{hz+}s-vW_+P)Nz5HeW%jY|73eeKmCAD=I7lIIrpu%WpkBN$-(>%V(jtLnX3 zv8|6LV^1{PByIPwwi7JKD@~|v6E3(SSpm`vIbMa$mz~R$fEG&e@~PwTRM_{May^4W zgQrVTYQt+o7{giYg*DuJSgWW(;j4=kKvKRZXzRC zQ3iTkLUP`BRL#AD!RnoNktWwTPjgm(pY~@OJz+hqB8@VeG$J!BOj}JpSEXw5_6)M+ z8P$uz(a$(XJyTsNR+rZfrh7g+&96zDr@fcfc(L}1dn6?;)Y(AOK?(}f(;~duYkHEQ>eBn=W%tET?M>i#{VpuNzV$l( z*0n@<>5K8hhmD;wVAurV!e*B}{I9^IW*NPj55PZvZr@(F0+Rm?-f}0&Fy8&g6ED25 zW9;FG-2}dj9tgb&EnOz@8d|FJnR=r2e@| zDOUFO#8NW{eGRWc^^dky^VsdIu+&3jGet?e?1Vz)+B?~~GF`TX-#G(;eueeHOr1W_ zY0qUxd(h)^3Gp$e7eJFQy1_rFyy+F(ea6Ru8>LaqbV9Hg|VzWH9seV3_63B z7v?oectA6D`d@%k7rY!7nW5Bg57XRD4hU3CT+|m%$b%(0(PoY3?2*bA%+E{Dh2{{`URBN#dj1?f{EF}!-wh`*RNJ$c z3#faQ@Aj8$+Z~~t7e>!8BYRM;cVPFcchF#{jOv^TL_z-NX(9iz6YPL9rSwD|qF$o* zOk}Wd<9-DGhZ7si@F9q4kv-#?5E#^dtI!93g8vEo2Va=ycJt?NLww!OU4AQCyA_`z zux*Z4@bpZrMASu!ROoh$v;J@ytnD)0)+V6E=u{L|&Q|3s6l3fP(IyxJMAAoG^G|Q# z6Wu!w9#Z<}l(=leQ&SITH{<$W{z!muq0g1meJfTResErwyu|#`C1*O%Cn(b0-r?#; zjq9KZgK;*IS1HYiKyj!?1IM(gQmILQlDPg*Q2MQ&+9k&W(MgbeRx8T2<`V5u4ek{l z{->lA-~5GIUSnn)sOW0e5BeVH$}CFONY(ej%yuTcBO@!LZDhakRd3*<{J(q)oZdD& z^lsF#Bk+~X=cs-V&0yD7GFfd6*J0MBEP0hazXPSIN4g+Cjdw(b+bEkL>NQjkE14(^ zf|i+`@SQuK{m2n|Jl6HrvfB_g9J}}6EBNDY&TxC#8m8kU@h71#ie)hx7FklZ(1d;! z_jGE9?mVt&auKamAdA*TEl@XwK2bO;TTDTgyl{HntC89QSX2Ww6d=*!psF-=VA{BH z{3kwtfBEf#cHE3P!=E1VJirFRzW$;WTxQ0<+MfU&-1n6S#C3_>IWmAT-5k&TqC0js1rtFno5k!n6(&Xmmj(&wM{Ror4+%h`=pMp$c@l2Io}{XID9|Xc|j(EF@u( z+!A4nz-N%rPzCJ7)+&&Ej`W<9qt|D4{0O?CC64&E<^=zA`|G3gYs8*Khhg;olsOe6 z{9h4U4H$O_raGh1>%DA-Vk0lKSh&0adWA2Br9BJ}qG{i1;<@_+uc1h;BPnK7nh(XtQp)XXPi+(}(v9R$7{lP;= z;XAQb$>#~%R(=nD=g~9t7@bT)mEngZsDSmqCrEPE69^7xL)TqH7ff>^*T%<0&^TcC zn^^oNme8mzm*vOBQth?K5liTlqhb{o5Kn`ANSPKB*$_OXoN#8MYGC~}m$yzbHm)}d zhRmwl#BVaxTzCEI#i3bShg`e9POOCmMpW_J{QKZ@W55q+QF1vSy;!!%NJR&+K7AJ|>A9cq)Q17AZo=h@exT64a7WaG=|;Tu=x|4=k={HT6StAOdS?a0kr zU;bh~zq0<*fn%wBd6&bhRx09bTw|Hj)GE-K*gdt0gg`}G&>G83MapOm)x_#?Dwh&JbVRwl#3IZJ6}fG@HxM= zwE$eyw3&1sT#xX)UBLSw9M8jO*`LjWzsZqU65e;BZ-2K zEb>Y;k`p-^m6A%Os|YLE9cjw;$jZgS6{Mvn8t67MXD3>zC*5#ivi;_@F@-rfg`=+oO<};3x zOuj{1+$>0RtDy%3n+0p2iXtk{#7ZgEOm&Vk5{0M}CPRRP@G+?21kOg|jSQqt8in$Z z{QOpdt`vSt8Yz%*Pu)DpP=zxbo=q_ z343;-2M0I*L;FW_aB%<1bHn5?Y8CX6$`Xg)#8F>i9Ie}2lcx~}I@4Z&PMwxRBg2>_ zRhwQWC-Z6Smw{9B zne{#mEU<+K>OhO51GVTk1bI4^Wz|H85!Ay&ymbcNU`#gW)`J*uLm8(_xgT!>zokpi z)9udd=x}7{@Gtl0R~wQa5+(fe!Jz4r21*W80VZEv_|}yvfOm+^iN0IFLx>c54TAag z&KT5q@__tFJnb{yCw`SFen%{~Muu{6N*-r;krxC)sd!bDSL&j0fe&(5d^wN_je%6> z1q+EU+X8qii1cH^7(l0slPwXh6PF6D-mYcbe=)+u28LxED+2;w@&S;4Xb1Q&TY{eN zaQ@+Zj5a}UVekh9)29{)?fAZ^%9N|!E2kGb6+TUI;YJ-7n>puwuonUrqZ8<%^S*GwIq$%*$&>I@ z{_)yR3w}cXNRARG>N}x#kKx|&E$%anyeDTE?oS9>BauAB5G>i`$zj$A1^biKHV3;N zZAcdZ10=wTFmi)li)2P26NyvOnqu4`GD2ofSgr*RKIxOdOUKdak{jqqR6&RS*2==K zYfH+(ZS+M<99jc|&{}>>4j3QvBZ~8dcTP;P9(=dIShAQs7fv;Yi=k_jx5EwogOJO7eaNv5kUlfIPJ%4o|6Sd(uJ zhfr5I0u>iS-XbUmAECam54GfLI?s@Y5W~OiJk8gpk5@~s(f-wQ{VDF0KE>zk06ATA z&gv#c_5I*+*BUR=S)tx^yL>DicR}OokFnn|AKdXu{E9Kc5<~ zwQ9xPQ%~KvcB*0bUM*kg4x+?x8wg*)^XJbs^>HYwiA|-ZOjUPSrDoZm{!vyMeG*PV zZx$N@y-A>ru(D(*-X22~e=_A~HQfA6kCmYEGmnf*Vpf`xbtl}RbmOyK%Efe>xOTFr z@qOsX*M$YC6}UK^tCu(s^llHc*Fi1iV*af?mPv0)pTp|@C>2Yj#(a6l;wb&fraWOf zS1NYKjj4%sXam92^p0o2<3Ra5#R+L5a~hlw9pBdNJWs`Oo&=kFF=?xXc%hBS6seh2 z`QGvXMx%&!r)M?KF$C3W-yzEE{2RszHGqG;c=Gy%-PbeHCt zr4magDPw7uIctCtC=*MISUO_ug@L;I!{k)8&=48ThH#XlwhMwR4OpJW+rdC^!SKth zoZK7&5JtsMy4UI65DgFu9lE#QiB-&fSis)bqr)zIr6bxjbJgm_&@puKs^wA^+KcYZ z`K8U)4?l#KU|evu{jLvD700_vw)3-`leVr{Q>dJwUa>M=(I&}>$2t(dcUKqGtv6lJ zjOv5Yl|?FIp<6UN96xu3JU$Tm{2GovDE^R~d*bHep3ap(YpBh}zn?+pwz({og#n}E zx9$Zmhca;CPi=(V;(fh8B=Vav_QHA@+2bHQ}IFp-ZQH*7WqUb zpy8b4_t9p*id07Fq83H}4@q$2;glwU#Loxd!&FBLof{237sAoWXNx^F6?bxOfP6+5 z&&A+9Z&c)xzA`Ym1c=f51$u_ebBZ8BRSVD+kb9A6Vqt=_w`dZ>Kk!H<56}qy0hLU! z?hwdC6LAj$CYq3a`YNV*37yMOE|MFeF~F9F5Ec__2*%XwpZP zn)R}vrUx3)KN-H(bOQQ_pAz7q;<~ge!V$NOMV5qH&cfqALXitez0r2EACsf}%IJd{ zKkK11NKa{SS(HYBo62)KD!r&vDI;q()OANZPwfyR=@%jZVS@ zM;;LTEPliY;n&!Y7$N+K5duGHH#gBp19g2!tNkG=9z_uV zwGwEcbOm)TM-#BDrnMUTlJZVF(8FE0mw0I{3EBeDvKp|Ao`%Arg|n9^#hn&{zr%SB z>z8v*L&XhB%rY7~?8iT@p67VidwAV7q;aiQuD=|>@>BvmF=)DV=MyGLHV3$i=V<}- zBnVJIu)?%G#ImiB2m}NjuSN)uAP(*%1Apa<$7m*Ge2UMxKt9A-p~uko3y0)^3jzPy z)W;Y8#G=<%BL={ZS5+K*>Z5K-c~={}J_i^gX?^MeaxAM)9ZO)0H0w06)ZPhG_Ks}h zi0mbYhS7pL(SD>mI_H+34!4LnTJaiWF-_*|XuuK{mTa-af&b63B$;VyRCX4>>in}Q ze{Q&suJQMujA#m>ZMLr(Ki&4`=)*@o5Cw#8-w#=RYYJpRNCJ$89l25V>XT=5iH%r1 z?G04o;!MT&6N+g($~Zhn9mQH$$BN+MxhXz^#?*Xw8#^;?_5<-YyN!e|+2U>d=mYI+ zz40IUn2lgIk)V|Qwqy80VW=je$uHEVIJZptQdaT$RQ*JjcS8f`jDnT&6Fa!&`f*V7 z>z{)MOka58;+LoE=M4UCLEUO~>Q51Cty|t|d_u(3-tVjhIDDv5Dh4NVyF@Jd( zcd|3?pFU?I=0D4s5IUo-Xdho9HMc@S*_ zxDE+>!3bi9jYC_)(vmNn2cQM|kZ;Xb?~X31xWsf_zeM?NDwb6ea6clr`LdvinbCy^ zs<|qq{Ap#Yr*0FuY%=o<_Ezro-|43UQA#bD3>g!0AyNE%8rnbkFd7MsP$6vnx-WDX z@C|H5`vaf}8bEL|$%AhUPbgX@c^D<-Pq+^Bg8r<8E_$0Ot3Zpe&x5Y;*R$*F@LCK^vDyCpn zVNFlY&aBQa9yuNDe{%Yll5Xt|qes7fi4b&X(yl?{>8s|w!9N_DxBR26D_gvt((t1d z^5L}=YS+sdE1qKOTTH|AsMk+@7GEwyKQ%J_)ab3B^5?Nyun+yjFkOp3<6m>m7i&2e zdaxVQ2;L9eW_Um2xl%aS!3ur{;W6*gc(6V)r_?(BFCbM_*~!3*3Z!Z;3aJ|SB1l!p z#Hv}PfyC9{cMmwwDS)0RR|BdVgjWcuz|4uMbU$M~S!37J4Wmv^_Q-X5J=r@01?XBP zx}t!Yc&g7f%g6U+c$Wq*27r-Gd$HVJ9qFkoM$P| zV{0r4zYgU3ai!h=D%1d3K&HQ2*(GpU^wT6vSLA`^{#*R9jMms6Zz#dvf?xYioS}x| zB)kAG5?EYFhmNomjlgr)1Gf2yC3Eisea=qI|CF;MreOv6N3>t~Mq&IECz!^7;ooEV zl(aU7*p`ds+Q<>qi{K+@$!$u|*~|qaEm3a?H7Y?M5jw2<>N)9&Bxsy?$4FF*5_UzS zW%=^W+XB>aeSR0+fBpA$-#ORIr-Dd`q7lX#ipZgTV0}_UI;~{a7=%bRe#IoVRH=?nNc~q9jMt!861`hvb z5|_bEktJ4DKq3YT@|<2oA-hV2;ObTo<;7-S!GEe1(WC=&BsLI15B``&tOzvAz+J=1 z9al&54vkl8rKYiSwK6I$n_>-S59&T0>?XTbH!;8>iX>>%zRs6TD zT2`#|W*{E}0#uELuTXXr`Uc&8j()SDJa{h>5&(?op1|{+1@!IWje>JGPvbj??N^MW zS1l7d zLDPV9=b$fI_i}xI_?vU@PeTjZ_m_MySlx2a9a=B8jZh(h*+zCE=;(xw&rQlG;79Ri zgn^Mb@MFdXl*hNGn6>}K&zEHv@z?#lVh-8ugicQA@FX04`h1v&3^pN({7CZ2n$ok7 z_-Ht03kfOm0Y2kVCV~`Yg1Bk|%B&1d4xmubtLD@=o=n$^s+{xN_O7}%0X?{h4Cov` zb5GkYZMq8Peh0?y|3SzG$$1|A)4Xn-)=W1r^q_P0AJ{;2CGlcjYy$~VZ6JE`&1I3V zw}G79yYhG3f!oN4C6i@DJ}Dl)yG^&Y?rxBi6-z4aj?i%@GDrdKi{1tj;;Rq7Y#@3{ zgUh1SV*}Arsi)3E84!Jw#_2}m@zvr&>)5o4R;_2#a+D#Mo~u##Tx}fHDGHyfd=%9% zBmA`B7Fs-E*&GqhqyR-GB~iyD)|1JjxmXxYg9mfbsp8N71S`6Gx9Bm{Y2J91<=(w8 zq20i;EJ9VC;^S6pnPdt|wJSbRXon_#47NqR&{<6sS zx9Ay*vgJxuA`fGFc9^|T&}h&`f%BQ2z%(WcP5#Lh!Xs>%*~v);F$g(k97B%FeTRVG z`2`&stXr@+5*2$a9?z$pJcW{{q^Ni$Oi*87B#H&8=varS4+7_CbV-tlB7>^+ zMtoqQy97}#AJHnt}5aEejo3ZIBuXEp|N-Vd$}=+%8hih7shB7hQLZK>jg>K5*0yr zd0FzL!I)@Gi~~NwheY{OTR$w(lmxUZB~}icd}wfY4}LP0hr6-59=LO)-iU$J^(d=O zFTTDIwSx2XzP5C~VExPR1+_yEG*W+-r|R#)zAHO5)g8kw1Lx<7K?=|(1DN&JCM|0) z)0FclcMKBd-$uQ{23B`eL#2b4ApkwN;&gq36}W>#q!gmS3B7iAZPTVJR!Ke;&h2r0 z176yk^Z3)3a#@4Gr8$mtOBR19URORT2)ZXnmpw=SWRX+7oL z%Mhu(9F04PQh`oj?fX+E#}V*#z3*H=NO^Wn$Sg|_G-%X|_e8z~Hv z4t0RW$(qAGu>2l?VEV^cFyqn2o71QM{tx%wEv)-7KCpQNJBU=OzDm!##aoyhIEEj z$ufNK3&TpGw^>nyn_^zH9=s?h7#OTI)Ctn#tFE5IrO=4gT;c?ouN2f>mECBz**>a2J)^uL`FA6 zV;&jJjg_ORG)yY$3PqYTGSPeCgoXMm;*zdI>?-R}AW0x%XlFX^=kLw^NR?6dNs!Gn zJJuhpHC^6*1I*~rABbD906Jd2jAeRi7XIXU~=%$ozc()c<_ft5j5U<{2PHV0xkBNIOFxHBIFxaqWgQ% z-{|A;9cT;W2?N0fEzzwWkvK$i4!p%d7niJ9~gr^8`qAo5;_6rGQpz2z`6UiIVOt>5o zYGJYx6Ah^{Km{VVJe27cm)yF+2g4)5|2&b4I?Qhy0Kw>QW1H5B%ya=gju=kV1Af}Y zM?^g8HT>AC1BlG@>0Bkuk)cmCWGb56ojeu(Vtnf(OXdbu^@g7PP7QsdNK*tqkiPUK)U!zFqP0N;ypNx zo+~CS+5H>KypBXQa3h%EItAMc!B6M&3H6YeOi3jFW!k~WUubxwYJ0Q;=EAG+CfbRP z%Q?x(U_j5wgQ_iG?O(l`&^LkOjGL9( z{EJ|GnuE1iJw$K}R#MyKC|&_1b&t2848MgfpG*OMglZ6v2mS~k^wu0a71^`Vq9xa9 z#i->^C-W1995Mm!>0nb*@)e19!~M<2a^qB*+ZoAC^HG6MCpY>$on8>U&Y8j#%Muh7 zhWP1lnT$m&EZ$))l5Jrk>m~84kS-=`yND+c3ZGtOQ`e#4N7e95_AVr589tZJCPUy1yi(>a0u_w$grDO@%@Jx;1L0%1wl+Fv`!Xk5+>8K*SLOQkR%rk2qK% zH(3lhECbr#s2$qhsRe!^96E{q5_>wo8}c3BH~Q;CpB~Ta%A*A^u0#H3UmW@(5`IE2 z{Ymh5IL<$m*2GBS-qE0gB^7a{qs(+c!8)IeP9{_$CF)jPyU6LOI6X5XMYN4OW(0sY{KCRo@Ho0 zwwLpk#taIu8 zhhyUQgvkDZ?lFn**UFv*OoWb%92e*wka+D%z>7dXAi8CN*8~4v!ehFH+oFeJ4|MM% z&FX;WL%usYvLnLh1hT`oDBWv)@H79Ud5OQH2Eq~JT#n>zyd}p~t)^g5WfW2UuadpA z5TvqVe7b9cy;4P*9Gz+}OwxLNlTsDahbFyD4y}X*rAj7;y~ts=9|*O_+p*Z2Udc|2 zQx`eP6Liunyvs9#z#48O;$8+MS;OPOSOwCva%uw+_!5aID7ZnP`KlkIrw|N&zk&_j zd6wIMXnd!=2l-DNE&IKK(A=fR^F5%^qGi4WA^azYp7eP6*_l7Ox6ceYQSRjS6&t%Y z`5HonWo}4mo|8})VW;$nj?Y?|W8*`dWEnn`V|Vs=>0#1D9HfLYNh!r1DR)YNyuw6{ zp(r3RMH#IaE&fsl9<2-$8<_*4<>Skf(aNCsA#?=UXk{l7L7&DhWB`F)(hgPzWRsjW zb+qF5mS8cGd%EX3a$c!Ec2vhD+xZ=9>JAwB%X+y@!zP}w;_vqruM2N4bhK=|bM;=n zTlX4!DxRJ(eO~=)ZyagHzwaI@VsBzNd|?KdOLc1{Umd^SL4A*1u&miuI)$aING^^W zEC(|ybTBmo1d}38Txqpbg*DZLk;$>aA`8Gi@Jj5YSU#`Ns<)*_`3$O4!R~;F)p1}+ z60oo>wOx-cANj}w{F$-=oUfpgr<(>_t_2fm69_kFSf&91 zhwGkQl`N*D*Y`)~(M*&MBVj>}O#aNt_W|8*kWqZx9XHL98nj|N>L&$_pR_cTgSSIQ z=0by&oOM0C6(xsec^iyG(6zunmioEJmNZC-s*&C>@N+EV9)JOFK$}sJeAHobaYDVS z&PrG=nupgm9Uo&#SQ?*3b3X=(BRzGj)Nu(Th<~JxmFpUiNh0$J-&`zHAluw78-0UpcLnCIV*_l}nzguzc z?%&_8`1-EMcNi`XT`^L8Wd)yp1JbQShDM=FcS3KWOV;5dY!H7LJ+1sx+NJD%1@<4) zE@zEl*kZ&k*THDvQn?(iK6g~kZqShQD4Sy7~_Y;#t!#Y%7oXknq`>@3WH$*5+MC_AazV@Ma!#b+0$ zPW|Z-x+p;U)8hr*_e;=B+IQl_SYy|B-mOt#(2VOHpggiS6n6HhEjiG`8z|#8y7$&w z5c~)Ha0kNBgZn6F@~ErO8ST0H06xD5&*zk{Z5{!ymvP5A8%`oGWzG{)9s=Y8*b1}>0s9WTyYj-p%ax_xLoaFgwY6Lhd`rZpEfvy?vIVk%#i$!RIGq3Ywr$e?lp-uqjZ{!;#$d(ijRr2mtDP- z=wl(YNU2$$S`_8w4og#NDJO7lI0rLvvI|4d=A!%a0d``wARH@+uNI6LKJZVp0lKC@ z?%z<=0U>Xr;*xno-rJ16Ubmefw6{lVL@So#Yy^`{!I4q&m~~;-Dvkbn+b-`FD@duM zyHf+sMrg}L`;T6LuzTMh^M{PWRCo=#c<%f0#<3;;qj+_n5zb)m(w#4Px10 zu~ZMAffg0_$-NNpFG$8zA=#3eE73=$fZy}oAh8Ad*9ZHrpkJFq>KEwpOOSkc&+m}h z8vO<*_DtJ_PQaqw({{t)-7|JWGc;`X)LpcW#dLAAtFz?fj9eI*oI)W$msy#fo0x91 zI;$4~p9F-abIu9=BQY{O=^6yeGxO26v+$zpz(*-KltsQIp( zcK@2m{*kaoViD5u#(`YPnu>Q%wgkDUHVKSUda95v)^22Ic}B@cOYyeXt*m{&CXOz3TXyV0pSA!sl36*q@KN3;={gC_NB zUYk6@KGQo*&Xz1Pzti+A|2q%OnxY>{uJPzdbI5RGm3K9S8EcqmZn-I)<(8X`oJkz+ zy8MD1^OsRq$!6e9)Sr!?dyFSuZIdv@>sy}Kf4#4A+W+jUls8yN3d#Rh4okPcvJv%H zj`!iOEF0ZH&9yh1^t}q!do6?hTbHG#M`gJzAD}GevV3rC*|L(+%wehGhuoz3!?9dD zIfl(u48hWPK}iwWCMaoPx(ITt3Rz2q7tpcCycCNB7K&s;h|f*Wg|E>jzUg*=w>FQ? zn>l&M;mF~=Z~sv}WmZ1iLt&ERjcZGOnLefS(p(r)xz3=8fO-Wj>%wSO;_~tOO5}#f zaY@OFjnS{j2Og(R_9+9X)nsIONxFzKV<`}2)(aX_o@k>X=BXrrkRsiu=h||_R?~a; z%kMtq?LKHf)DGyo{_JJ6f5(LKm0qiw^je=DCfiCJ<*P#PTlYqJ$xPDP;6a{mwUf|%AgP9vMxK!=kA%1mp$)0 zk5VHTiIKmGWmAG7*jf&t(a~x?qb_1s^+R|e1_~B4qt+`19S;|loFjM&FP)P}eGWnw z)HM{6AWQmk>-wQ>dGt64?dOYyoRu!_&LV^wpKCaw)eSU&h8vMQ3bfAendHDH&RJrY z5>3YT^m-~jsh4l|mr|lO`+;K4;fql4~@n0fItFE+D>sOSvB78bdHf z&^m%MWJ)90Ddf6Xhqf~gU$@it@3QN{96DAbI8Ita=Xii@(9Ch!dZsQ_OV#beIf2!L zDKu#29Sq^D4i{0fLTOc>T;g=as*;l2M*g!%W6(Sa-a+;5rtfKqHbS44d%~_r4(C{* zO>&9F8jGOkWDIYYm+;_*2MqiJJPt z2(7%1((FuYrbWDm{)PzDc3kD{D_d_hkzn z^GOB{_vJNBUwjteE~78JiS@;ce$)R%Kgo(D^cxzWecyfy9S#XB`2A+Y_yO9|vD1$bY1|M3Q1S2^J z{IqGDZiFh~F&=W1D%A2G@ZBIezjlu|mxI^N4VvdOR0d5hXW8kBIz#9J~Z4*!OD7-p1oszM5^e7FW-?vK-Y^V@q?v$DES{gDE9Lumna19hID={ zI^@nEr4h;{C10@UWLD=5t@NvjNw;z1WU~g>mnw7dzETiX>@{^a+X&eaCS^>q+~Du8 zqfi@r9pQyn0X~jxRx@t1=HTAuE+8i~)*sy`)KZT0{Jv}Wl*Z9_mrY7OztQgT9LKyk z*2x;G#5!qXsI8?kvPvE0RMJSV1eKwl`!K&+5f3@Zp8cBNr901is4xmxZtv>4V`w3r z#@clzw?vM}%4St!9OZrKP86s0h4uGjUW`*Tr{GdRn^qkHZ(+L5q~@qtM9^HTY9~gb zM#~gpTMNr^o4#v9ZkjuXg22QWBQhb}mZKCtGa6c4J-Y48d9?TFBDA4HzcV|+!j6qR zJ9*Ks6W?jw&AD-LLCv;xs_}k}+U(C$aLiG4# z2;Beb&1okNt(`q`1{XdGn~Zk{aKt13A~$y%IkpO_6ElP)dy%8SvOL4q>T zNbw*gh3Ez;l|pc5KcfmAdD-}SbLDyty`F;BdFs8B>wG)fPBgwA zCf33-;XlgtfYNmk@qJ2ttuO;Dr*ew&Ip)XRwJcqXe*C-T!hSoW{pf}-l2!p~o2J9gf z!+xI=9!|=Hg&z|NoHh9~CGRl2IDEDZp=Vwl0?hf=4zcE-bYG12@lp{f?|m&ut;}u&{SS%i#``lp>GxFxdX)?5=jFU zm-P3*&k+m&bWD1U${TG|!gM}kmDvjVlM9b=sGbmkSS-lQ2M}*D9b*qUPd?>8-47L^ zqa2PtE%}a062;DQo>XrPf0h!;Z|*S_i08@FMG7!{TF)9 zOAgd@P=6EH&{ZjzpGRQzLc~9ASf5^m6PQN48pI45``Sj9G<8jM&XUrF45@w}rsS_X zOhvkQL6SFK0nCJ^6jp=+YxN|LJp=7)up5mvKnJ1T?gr2in)}reW*tbf(O@*sh2Ap;VG*DPk2a546gRmI zR^|S%y6&L*@Ck(*bdD!;+l}Q_VII|*#@iLTZb_sTBJqP3$X4bDwUStOA8{J$P$h(L zN@Z3pQoTrPvIbDV$p~#FP%kKViNLs5f$U7o>cdiO_??yI5nDn)AW`+%S!u#%^bvad zo$bF26t+Oz9teYKCA;@-`|?1wT2GHnS;oVY*KE)hs)onj`skf%JMqy7Xc;=NXWQ1A z=#O$4qGQXf_$l*Qt%JR;yW%C9FP+FOkYky>FP2n<_Mz6QeT)mHeT=goh>x?!@uLp> z73Yd0RUYFAW>p;Ik*CpxW?j5GF(a}8&{#5Mo7Kz$%k&mODX9viE8{>ijLQMTvbT|8 zz@w0pCWNnkxGZ?}))Uj?AoTq2;OFcYHnGp99&75~*u5eaIzyN6aX-$Dy|`ynm7+h< zb?3~UgGV0hRv_e`ita#jE?tHA%)|2=md3xT@X590Y;)~Jsboy>_2J5y_pNK5kDAdG ziqug?Mxp<|{#uEi?uS45 zSyNpcF_3fvD;yDWQ_+u)KR}lkaxQ4Qd%qJaxXx329YX(W=!7_n#%K?cLlmB9^ij7+ z7pv`w$fjDrB;3Ks1Iw*jtOVr7N^}^j1;5scTevG$raQ)gH6jFZTqaF0XQ~&ZO1__@r(d*uIBPgCc;SXfzQ_ShRK5B@BsQiIqCDMG=rYv8zxyl_> zn{j!D8KAUnVr|nJEXQe03fcy#bwt`ASOPJuZ7j?hYg5|hx$y}MZ;S2m`<;8%9(0S~NFz4wN(rNTAI{Dtm=-f_#;m~^5*6lSR+SsVL-Ri~hlNQpxH*(z(gT!`N zcj=;FX5;=DuHf@xo-!9(!05h@;5v}|$Xq0X=G-uaDfV}67@tY!j-C&+PSs6z9o}d5 zcY+B|@BdtBf4owI`>ybi-hWGJpPd^`NUdtT$78vHa*zf~ODE*38BDxa=^ciz9?KHm zV`|j?d<=I(G|K0qx!W;ewL)R{b*vdiQUaH*&`0 zsiYpo6||33!ZkqK_kV)UKVSLJOz1eMOP_IX%$g(Q zfOr8dNxOUO(_2H1PH&dqzs>BKaKeo-Z@8+~%oxo%py~^1X3%_gX|Egej~ks+?7mw~ zX$jQT<1n$d=^8jq*8pqdXVwN;14<1Wiu+FaL#FP2it|SKLnn5BQ+B@+?;mF1Q|Nmo zMjpRU^?Xj+BcIduexdEr`$&7_KGI$T)*i(nru6=*+&|6DpOiK0V)sj$`XO}eeo)44 zwP)oHYp8zX-#|f-JjWa2@O{5{n=^_lirZ! zi4#{hkM$BwMpxQtAh{G8@crC6Pn@`lGw6vEr}*lWo{P%t(uC^^N$VDPmt$j&P$OXzJ@>A+!QU6IyT-cOo5>xu zT~DwECvWh_l7D;hG!j42K8si``b=Y^u!wFSWGnGQjg7*>|IO+PFbsT>-Rq<9g-+x0 zjlXGT9KftkUl-X`Bh5DTFOq`;-Kn#XNNNyk>@Qf_7=wmAdW2qq(H)zh?XcwDJy?pi zwdNN%$HAY-!Y??+4??lAYz63E))*%^^N%4)LNn#7(n>&}_jp3xsAN zQ<&HPDcZPeJ6iv=bLX4TZ}q#7f2$vSg|eUlIu2hQgZ=17sE9f+`)5N;?>YrXx}z*I z%w3Tgl$Bc-{ra#C_FW+jSJs0+QFcXpx2%a(w+?c~9N zsZ$0CKf{mD+fTl_XyKJ9yfX`qPU+o$GN`o~%4pN(m>wp=pTOZI2FxIal# zd;#{g0+dM&c6u=HpdvY3`OHfJS1G4(1v!=+-VTWoVMd-y2Bj~V{AaiyOG!VDL+`p9 zL-~X#3A)8p zSNxS6=jC+}$!?@a+|zoHo0Fbsi!g@p$s&zj&rVh1VzDxwmfrQs={b4OAt$3lS5a&T zt!#FIpK)U;y4k)C zj~s#&RMPO>?Mvr0POU`Ge%Ce0h3C3F)*AygHE?vLCn)Fv^|e&+S9~p;KCa8CEi(ty zV3DM^Jwzw50^SxD;gycpEy-b&M4Q#%?t2{2z6+!TuH(BYBR)r)ARmGt7JUg7jSy+= z&{@Jge>pmX=NCSD7j3ja-*$X+u=LEEBY{OY|M_42vj1rxm%%TacH~08FA8=%pXCSr zo4h=b@{SDG6{$St9jRP@Ih014v%Z$Y-76R4WrNk_CK^MCR3t~FQRt%xd!be1DJ!Ql zr^v}xhF%2*O|Kx?kd{t*ot{a;+Y*IDA_^JtR?Xn+SFa(64WMP^NDyy+a_)o zeAsKK!~jv}Zm&EpLij*_+UR$-&6!s7++X6jX)QX54~3q?!60l~v$|#FUAS+x&@}M~ zp2sAvj~u7qRYclLPo=teA^AU{UUu-m97N;&vAC`CWQOajAV&KK zDLgpV(5U_e( z=skc@Xk7b=`TeaYmq{1vWo5Sn{?pCtyVu)#anwClYwC`X)Z|FSdO`xV{Q2+|>O9Nt z0*^%L(kKmH`Gds&r^)Y-BjSP;PzP<9Bg|iNwOcGHEnWBtosSBATSW4C$;C>%@KIZ|yOeKR#3-r8FW~XEhqs zsNa|;TP!?F;3xd}=C8LvsD?gwanA|f+4@~rylB;^JQ1qojhb;{?UC}9SYpPBwZxJtAhC^U z+OEE^k5>-~D{=dLq|B-n+O#L|S5(e&{@#5Y%QZdhQ_B&o_~s9Pgun*W zSFDAl$ra9*8nox9kKX@H-m$*xu1^v_|DN^Nj&-H`(rL_78p)iSr+70-)d%9QcQtcf zfx%KzijrYd-DY&>*LbGNAo54CM!RhrRQlxCx%K95n!97i+<`*{Asf1-hw~!(%DMq! z_knRg#BS)0ntZwnIai+K2lZV1>DF#te=a8U*1+^upqPuzWQzuK(I*tCPD_^pEefuG zqzr~_|(6Ssa-u|itoq6-wrjPnm>HSvkk&_ zbWuEVNCdB45T%3!IEV_wX=prDtJu0DSqI%>EAV&&EJwX<;=5o$f0o>?(-trOLzf1f z8H5+VAH2sY^>uHEe^OgHrd8uV)P?+LN)`I>#fIyWrsd#p&WqL@bq$bp3ooH3!UA*- z>erlRz@)Z{s3u6r`R$K40);GsEQ8wB?;y%=F0M7}<*y%zUlmb0JK(v0h}UWbZh#z7 zF~j#-O~-H2X)L=xt2$^W)lBlVlP(L9Hbwl_rUIs$3gdOfr?PT#DHJP>b$91v*)rXd zI6f8=Ny+Dgln!&Ij-Cv)!SW99i_xYrFTXndo6F}WOkVO@{tU=pf*x!@w~-91r|hX% z?Y#k~e;IakVw3irn(sBBlJ2jx%@3Sqc6UH2Ejq(Iw7Sk#5WfN#V+vuhon>zAmP45vu+CuxgthAf-X&QnvX(FWdYq#Ws)c7pJ?Pma@*L zs`e?;{zT(+cl*L)?o;r0+lHv(&&HhMX)5jiU}){O{R@xd&b#kcTd#P@QKhIVt@G$A zru2K-f5IL0w6F0k&9?!xll4H?WGcc$-+IazF7=rBh0 zIazeQ&~@6B=45pXBeP9cO{v+gp!3D7SNl@T-G%V4!H#Z4t&eaY01m8boG z%4$E_cl-bNZa+)czF(HwehK$0l=szsnzntH+I~r`hyR{_KdZZaF_gOr8UL34-`wqs zp^YEEn0`9fHPpGLem3v9_T_J*bIq%B-J^NgbFKK@xZ!9qtw&7#WR#y=<^qU649%wX zpcsZXxxPf>S39iw)dq<7JbXs=s|9)a)n+SxHFEzn*RxWdwTkNf-hR7$ZV6N)yw_lN zShe`#22u6Z_-H@W%@18&D9xVspG5j>KUHa;j>G$uUsX`})lA>*TRikPH7ruw ze`+n=e%vKTinjfplwVa)_*EJ7M|j$=Zg^X5|5>EZ_S4n&$-1Kas)E9=rm{6m)>o&}fcPxzG?%*yI3wQAy(^)QFy_!e|cR%UBV*x*@{s=OhpzwrjXzouaX!yc#i zFL7Pd-5;aBAI*jbbdOYKdqG&hFwN0o_(6JvueVXIkDz;}DVj}d6f3?eyl>+a{G3U& zCXs@lgL}2Y^+fe;9cK5_vpd5>zgh$`PNj$Xyy)58N!e4oJ!iM7R7R`!llG_5wVJ8y zg|nWyR@+Zxv!}H0qGxL-wijBQ*Ks$}dbvxEWcOTilzvb9PqeauwtdELUDGK2p7x(K z_St@tyL~o3C)M_!a>sqNAJ2A=LjOp5cC+@MHYnYG%q0rEqiO$hwf$#4>BsGt_q5-F zp53hdXN`TfukJOv9_U`kRQAHh3O|qYk{RQ5axPsj^z81$_Cg)T&+)1$HQTYuUTA^) z@|Ce}SQ<1{=Oex)Z zf{ym%?zZths0vx7+D`RqdzPDaybpHy*az`mwAWYL&*#2_8l~DV@72EGrXBKImy~Kf z$xS<+FrWLK@|2p&^{4dy?)Z8I;tS=vE7xP_ z^&yy+-zkr%sfA?)d%+lt*+g%_CHAyhjJa?HgV(Ho|l^SJuH*Xym@1 zTAa&B8x?6CHx^$&Xx!l1s?u`UO^aR@RB7?|qGgsEUob#?!?Pw; zYRo#FGl0s1b@j3!*2CR2vo-~_CPIF>66Fr{{6k@QK4wcl5j?wQn0{fZ^HVxctKk9v zfPWlj;LJYXFXtPHve44hOnBu1*ZS)QLHD-uLqF4qNDH_h8oJZUopLKYtL^LyR>i<-ZF5d+M>*jw8i<0 z%tcC;ss;;b!|K^Y?AZ`<}GZ34H+@xM#Q>i`tH;Lf+7C65rL06)kw+ z0fwS4+D~44<|rluxTctfC6tCB?U%qBK@ddi0@UU^t!O>W!0nsAqH=wSOfTQ8mK`>&Sm-&u0`hdvi@KdNJS zI+WH>Z|x(|=Re3W4R~RNMVdz!iatd9(Z|pPIzS7dQptIt5`@5OXg>b^0@R1%Dp=e# znsvp)%dWuY#-b@ZbxxOu5~7Q)CgaA+5*sLvs-;L@pHrp038s7>`UD!22XrL0hw-Bi zYy^?7jwJ}(2UOzx2KQqQ+~lVVce!BBCI=|BU zMlIm^;$d@U46Qh9=JdgAPfl|^68;6v@xBiWB)l?=rtpzE&jb?Fpm<&wE{E{ki(wdLk<1W8SS71H^_RGltt?Jck!5Q^sael4Lsx|S;VK8vUu7Lx0ENC`!=YRn_ z=L!>N?%FlC`HY=A=as~?6GyizscCQCt022!!x}B!FZf$o4I5;(&1}LjO*4cO5JTf~ z0_poG;d4G8pT`D*vP$?ZH{E}N)D{a{EFG%TK5U7 zx-^1|SdE~j{9++M`Uq3lMh?{A?3NwlPg#dW%hW6^do55KKWo7&B*9`%R*ESlo1F=5 z-Ufs8d%b!+Q?E;oNpsN8&SKazq;m`BuRwm}mvksL#Dv~}6*IhkOJxt?J8r$_L zK0DXTDHK`O2kyVy)h(w*lDHteRSG#?pP8?Xx2F7_qrmWK6eBr}7BUF89}EqT54VR4 zd4*Y`)Wk>0hBd;fW#Xf6e=9}@=Z%y=D3PAPdCTaA=x+!KeL1`0u0cCze0}4O z)9-GZv2zfSA}U}e@d~Z26puN?`*I|U9E+qibR!8tK62Dm8MW-1n^J@y6B|hB6tK&o z0C|PHMoN)%QVL0YqIsyKZm)@;P!aym3PJ#_Eg%sLFLFJOzD}U8lW0{H0+nG+HYcj^ z6BIdz*6_ryB|LJ{u9Ns5+Kev!iZ-3V|DZPjK7{j8uV&lPd$ana2zNH_+DNin$pgQH z)2KF_E_twP*DiYI&%iSKZd!MsJhx4bq)}I7e3Hu?A6*bdjIV@#75F3$pVj_47%@p- zS`3d%Xpx*4PHQkE>NDr!NWz_?oSpb$)Ai_M487J$*{C_$AZ942ST-8F2ku~Q!&FY&C2_=lSBd*s4q=geAr!nb zgeH84kc!RZxl+-K;_-F0`26@F2Ax3!947AR#a{}o6r%A^v$%aT!Cb=f1zB`f3S(lU z3o44fj-jv1(R?%D;dTyf=;b^o#q$ctN_0O`$M4jG3G z-9pFmRcsN?vsRmU=GLu^!#9@P;Hx@|ged&-)~#E}fB5j>={Q&Oi!PUD z=Mq=6uzT5_c4)7dpMwUX{qQLkKIb+XC_=~G=!0Wot@eAjpbJoQVz5ZS8;U>Uzd*Hw zz{&h>XTQ;hM=5r!8RBjtmy_665@!v~`7A7tHRcw(CUZ7U4vmF8c|$A-v6k%yQs&bL zc}z#?;`&p38T0>SZlMg6*ZJ7LY6@*~1P!=Lw(Arue?9+afPl$#mnPFiWw9R!wZvQa zyh2lm4vs?`Vr!wS%w%GS`1pq>e6P8arox_M)D2(M6xP1yOMD8P+H=daWc&M!|Y_M;Q@-Xv$K?>tf$eMD=7hi z?xGV)Jz6)*C!7r*ie&5Ig=R^|gO-|z85}_ctIj8(O>6K!zUjvhRr}N?fK8`sqQB36 z%cE9s5VeFpRh!+$BlzVXRR{{8VBA<^BUIb4Y-72YjWbumckwkYBmx=~z}8VZ9!x8( zBQ#AmyYYX$RDfn#ea@+PbuoBHh*>HDpMN}^rW>%Vp9ySp6ikF*r z|89Z9j)Ft^)DyzY?|O?6O8ZyAbyr+XdG<0NNwsQZzQrst#7x3JZT180ZGCKb*+&NJ z(3_crWFr}E1Z6USb}?LYkCj4C22)tgFuE3~B%lKwkCV(Sr z2Z|9c{n(7nYYn_Vx=>u3JUKv+8E(IHo>*qS;_r*N8bOV%w%BaZ@g0wYNy<}B94 zY!d-IGMMqJoG@Y^5Jvn85|8%3P5+1SzbuCiLXVng33|SJ9VCr&e$8i(LO-qD>41cz zDZetCP<>4EG>WYd&&`*kSWVj~PhA0>>aGH;;blc2L9_rz3L*p+Ob+x87!knd$)N#| zci>pSIr6%G0F2Vrx3bdvBM7QBk%+Shp--< zL7UFte|)3uAS^Upb@QrJQ(+~eE*iGFPT{3G zZCx$GF@w3!@zQ#28YR~#VWo`!@Vy1|cD%RXt@kcgE#J*vF|8`t3zxs`*!TAG_b)VH zs%+I-yz@Fy-o#3;t=zo0`J3BTPDsg`Q?GjC>M72ebKl#%wAtMEwk(pE?pim?spxok z4f(n52w&ncjpP#X$_IvX0IZHpuw9=uVr1wBMth+_)75YaT@a~5F(sQn*lSrx2`P2K zkeppT*PIo`ddwS1teT);_gMMI=ob39cgL5z|Lf%TukIZwc=i133Na0>cm5R;cqAD5 z{to=9ZE1_qrS9qD2g8%sccdg|ZNlqf1jiY7Nyo8PW5Rr^Jola)&*b!YlLIc1XOTXe zl^V!23{STrbXaEInH2O*0)CS~%Z*Td4-XBGg++TIgy=GE!$b67t{Mq6F_lDw%4rFy zO88-RBA)sL{mi>zjI5AI#V7n^9N|2~zvP^A9I{RvTeJ4W{=D|>dgirjn}=?qx6p31 z8^%Hx=nU^I=VLd0_2tg$8^8K`tD)b7*9T_zoiJfwaiQ>9$$ZICGGBNN&-Wx@sgmOq z&JFj0wx^3%bo)GHuo_qbg3S4oECX2pdO<9b{lH&YGJ%vW1iLM4kaaiG~6p zS-?tsW(;JSlUZ%X>_pMOZ>PS?4-6f*V>ya=ea8&gB3{J|uru1j$D=hc$aw{JqwcVM zET(-KKAYYW+j3T#!OJt;U@WjlT;j?$h|19cRPv9u7lul@qbv>v-6ASck-3*EcHbjo);4PT3`skd^v^7m&0ilT4K~7buohMI{jDX zg2I_AK;~&2E;&8)O0PCShn%1Zx*WRdHj=p>N^(Fl6F7@4oHwx0XbzGDYj|dLb9NeE zZSCmPP2=)wG^<;6!du`E)q`N#z4Z^!4XpeJ9uf~9X(omZa~!b7U5TuTUO{h-ID^jY zgv4hdHy{#~pyzSLkUQxWDi>@@4Jc;RA|y&|Z{>HJ+Ey z-_ptF^$bUeeIK`Xi|)T%hUc#}@e8_^NbIs6AlPA~Fs-=lY=0nW1t5Hg+VadxMZm?f^P(Vw9lFN zux*KH^yBKvg5rl!@JU{n0%_D?O%Y0!LZy6b@PC9hqMtVX30t6wIOBPHxDG~Qhst-| z^^3)OIuc9PIov4Om|H`wszRRa|F5?1fN!FTAHR1aNq3qwNq5?&gB_rYUG|1j$`WYH zD0@`)rijRf%3iWj0imQvWjSzwgIN_su!tKK1O%1Uy!_v|T<+3fXlH#&<1&)(SBPF4*Z+&tK z@vslY2R)9I)M9868pNBCx-%Mq=pZ#(Q!IXz|S9OAC^Cq2|D)g)@Z)(}yn|SW^%NPRtrUlMUPMTDrMp&3cdqgzb!L8T@(K zDtHD~y|k&UeJxAf_FJ~ho3m|8`?{9Y?b$Sj*0mXSVJ~US2GUH^W4Y3W!g#`Kjy# zHT+a1Zfav&8d{JH4EIbENu$&K?Vf7cZZZ!Pef=083)gRirQNg>z z8?`H`JA6UGp!vNAEE+a^Cb`vmL49sr!$u$?KYZ?!hK<7WBS8B``$x02vy$gN8I3Pn zHzVg@9@CYNN54rxzxhV~%^%Wl1pFKP zGEbntLF*fd&ODFKyukP|jYJ(0wXy08R6I+UPxJvKv$UuqZ+NnP_#jR)Bv2F)-U+hC5w z3H61R0+(0*s<1;~^V~LL3!*K}K`Pp7A8wCq_yg#^x<|eInJ;wi^C=pa9>M8NjR~ED zNahvMkJe)F^VFy#{FBePWL0V>Vtw;jja3dyL&pdBsgzG4s-(2EW-`v}hV>vBnHi)G zAQ3FERvg<;4{qJcEnD#Cy0i5fjhpe|rAzEyTxyl;@kin}lg2iI|AxdkjDJ))Xs%R% zXcEKkCUeVIlbOrRXBIL`nU$awgX`Mi>9$AH zZI6Yfxt+M$;>=m-W&SkuQrrZ+_&0A)xDz+|qy~0>iH3+hh^K<1hrO(bR|qFPiX@gM zmRFJ2BwneY$J&pYc1&mMRXFO|%hD9zHrJOm6O@;ZF%^yx6^@}5*jnFA?-*O*7+K*c ztiWXvo8U5nj`n)TpbE#p3P-;RN0*AS&WfM+uW;m7IEGX>I#f71=^fokzSA7lV9KT{ zE~n`o3o0Bl^^R969JBO}#TAaZddHFqN3q_qyuvYG?^sdcR*|HnQ@0G9dcaHq)=gnH zDig~JlhjZuF{g%+%g|I)swp0Aj#O-NFxgB==@_j56V^AS7}K#jiv9t`XCu)@)ds+= zMMi%~iqBl?ONGPdv2#Zbo5!|!cgVzE4bv)MN#|BAJ9lo~vJ-b=;HaMc#^sHyneq74 zgi}I|Pm3On1L>!P+aRN;YT(=vL(T%Ta{w?o2ZAux-}Cw1ys1r^Uv~@W*sgo`b}!-=kPR1h&&$ajkWr`VbI|n6gb8Qh zX^j=cOy0L|GW=;@)scO1Csn4$bLksHY;yyhm$g@P zlMsE4Mw~?=+UMC~s2=T5J{oUR3s)OUH!+o%PmZl5g{hM4VstFJpX8>v@p`HR5rY`1 z%86)=C7-O=J%JO_GBR6$bgIirB?+z3iUtFd#b!eAHQDeVAI_buYE{*i4~b3eJn+qR zukK*avQ26?Zj?8`e&)=XEbfnY zBD|W!Y*6K^AUM)zDTXL?5f!Dxkx{-P(`8vFvAVICt8OgDo;P7CyB*fWMOIWd3!|-$ z1ptWzQ^XpYDkO^aS~f@+Fr@U&rAyPtFMx-(Zmqod)tx+1WeEP`{fJkdPR7Xe#My3E zxQf8Q=DMx9s0nAfFrSHOUAxIJsE4Ld&po+xbdl}`NMm%-*!@jsbkRA=D_EUev_lu| z@I|`5j8j-bO!aW^vKVM0HsyLq{7{r3w?@{Zb+XD5JQfErh2CwfFKg2fhGasxY#!vN;r>(`-O=ZL5X zSh^&=W4{kO{S6;~vFzGR?8MQfUAz8Od;0wQX>P}Qw=ewW6vYP3@e;r?&9Y_u+Ah6% zv~N1Je^JNzP3zQclo-+L>e>^92MW5hYgD&(TB8B;d#(FWKeYRzU7vs0>kny(Kq1Tg z;g;pu<6JyrVFrjgMf^0e^G0~l?lQB&U4><^*MVp8m0(u10*kyBqzMRj8iz~uxO>?ZK2xqq*ONch6BttvZlm0XJUNN z#`O>T4i|@Lc{tNi)v4Z zuUfPJ`@B9}tpN)Jb^|O& zL@VWp81LM#tlnL>O|P=YlaifkVIf+jXjijq29G{* ze%_VhZyxc`0S_i@o!KeBdt%ErO*(-i?LK*L(x)%}^X*XhG5ml9OiG`BYR>A_c5s(h zX+7w+u6x{FX)ZOGxuTJ3-;KmNWW?Sb3a9lL?|haiI^sv0Vizx_fV}eTl!6p?f+{4Q z4afLY3{DBBLTOp7(uk@rv#F*^c?LS+j7;fBf;2fWo=Zz0AGoh}_Z#u_>NV%cey{&| z{^BioW>K`Cs`JXwNngfmWxk=N{v=b+K8KQ|9IssLYI$?qe0)uP_O|2Ch5zaPM>9RMp^? z03Pp?7Os1|Kff1orSVLTLKKhjPD9V=)x~>)-L@KwS|=2vPDz#!47BvTV%16_+S7)_ zR8HE@2(@udHm(_J7`g7P&t_a(@H>1g>;|1~{4%V5``o6z_`UG4ePr)G6-Qn?G3M@f zd8a|r9_P@eEqZr(A?qbvCkO3|9}#?_5y$M2;A4Cw(C1Vmcb83yRA6&K8%h0!REesL zCPDzBBWa%FD1dl7#dPX{%ybEtiTS~ ziP&(ZP~3`s)VKrmWyy*aFeU>jgIb)jBzRo1G>?W7E{Vqnj>omR&D9c!B6fRD@w!f} z8g+z+o__u_;71q!1aJPl$Yi~(Y`UJ6Lry={D$Tq!SwgkUv{I&7;k!}#v&w}52p{83NI>^rFyKb6V2gzH#q|t zSrli)r%8-!FhB&2`>kpaSiL-qozbK-ES-Ge<(vODp1W%txN#K>n^T~Fu}|xXC&!#} zWEanyQb_39S~OlQzZl_&R?o%}vW1l=MZgJpQ;wVyq+x{$h{SPPgrTpqeWN);lYdW; zJi_<5Kl!bQ#zkNnN1%dfoY~htRna(gAx(ABXG-HjsW_H|PY|uBoyqI@18vTmOJ|nygqVJp5%K~hhca#I!A#_H<1YnmSLb8 zm)lx}!FLHf6!zZ>-7X_sc6gBjXV@PsBKMms^g&#@EiEFFH?FTQxgJ3$G@U94pK_2=% zm#Ya1o$ou}Mnhc3c41o+*yFq)6$JK!L_q<26@NjTy;KA%##cc>**%&erC3FQ;0e)R z-rnPY^QQv z$P<08i|l*^r1JnQnP_Fue{4IB`xgv?!{Gur3KW3$#t^Q{(@Fday8m(!4Q-1qLYd|w zPoj2w5K_XAcrTAqK}C{#@t8(>YRmI&;iJ2^-~$%q_R8&@jizP3@XN2CuzxvC`8hfH z>@D*AXlzeI&(|_`g~i=_<70KH+QOhPC3c1@;6b>Nug5K^nnrm8LSK0k+TS&pnW90V z%Tq07OoXu#n z*|uy6DQC$mYQsw`n2h_`O9O9i9bSLR7sWq=U|9M>+pO-{g^$lZxwhfX zOCUFIT=TY|MS9DOX1SAl4%_*{>3td9o7b$H5t;V(wjIX{%4YTNn2GJo2#y5^j=_l2 z93(O{KWmuMKp6AfGJ$%Ya29%%B}WWkc$#CdTES!DGmQzEQF30Y4cHp5z*3g`2{1z@ zIpJF9C|mv7n_xbi%da@Pr+8NeY#78YTu@AP5g9HUzXq*O7~qxaYfR5VL2 zqo?qSMwC$ntBt$%hYd8>k33c%jXw}9@|mGJSKn$2&*^4RqU_O2#l$FR;KxGapx z76VA0OsqT!s_=14W$`SK)@Tl_R-@Tiy+$+1FRtZe#$Y!r1yyT)oC6#Z)e zOk4|TEjC|3Em`4WcJ6U8D-qOQ-wBu%EIcrIWaao53o%6Bf)7_N2Yv@?VsMr~=bL^A zoX2evIB|Y31kX7Lo_YTH7>O5f`v>uJ5W_f)WZGK-a@aSV z{Sg}K&%Pl)S2#+}%pg@gM-}c<@#QMg6;#K z5xK{mQ8>R$=v`M8ukmbf`>vVG5E>(D-K0iKD^ybIYZ}iJcxQlpa5`85CxPYTg5V{7 z1xy9!osXR}DeR*WU$zpBC4{Lj3W_?RD%iWJT3Mji^r#3cvCeEW(DR@7uHFQ>4VtCZ zL69_jaQDI|UE22;h@LYNJ?uDo4(E>Ipafp&?ObW;=33k zO(Q)UF%#ip8=T(!W&Bbfzr5;)<9?J=QU-MLa}f(Wg}`tb=mCzwjtF*kAjK17nRh(m z@vY1VBwxh)rfc%Shz;PVe=wn9%7nPF1}Up^ggQ@Yj6xq+5Q9zNNg8za89OP%*pRo7 z>KKx}Au}C&sg3Uj|JeQ%UJU??9&Nu5{7mruzun^koNXIa_(C{XK#ysEKd`1t62aqhZ;9KV2bDF!+2QA^>aP}Hze>? zou@p3kv9pG5YIhB3?s2NK6q`nGo#4H`AZ=zK^3CjpExM`=>hSA4O1`#k>o2}smoR& zrjQ?reNxaeYtRc;IoGPr5|B7=gyg-L0vt*1%@%xDw&R`i9!qR;m{v`2)+0w<_!Rj2;qk#nh?!Q6@j9*2XSAo#z96?_w{H5ZmlXbjZ-;W zVVf>PTw9`v>>d^!O7zWPXwsoxxjI3-Mhe@*7NnG9DPRxH-HODD?;Y)Y`Tq5@1G{|E*`4#BL##3r&J>A^B2TA^ zLzj^<6G)hH9dJiRaTT-CDG7H7vPY&)?+Jj$<^mmwxf4k23P%E>fSwd(z^puuWipWf z6p}_Dg{0L7mnVS16{U|ufj|5gaikA{U!e2w1u%#U0`r`%V|C0&zy0=TQp_uU5B!`hC2h@pmL)FMh=jAhv=Px{;G2u9P60`!#pTnMjqkv!XTnV16V!xPxX+w_o@D#M1F&i%_!Mkh53AsH1oireAN-NX!WP6W zOi)yvGLgL;=}R_|_i~7yME8bZd#dP1>%;rmv2xQ-ugbH}=*uFN?lBd(K4cUgFD@j& z3ka#y!Rc$0(&K>!333`CEhV%C;L3qNNQB?PzY$OS5Ppp|lmX;8FY;5zS8}>$?5n4fDoo#cQ&R+(9ueoSz9r!oUwf$;t?ELTN!QU>2&HS<> zd_?%)+hiTWnen3Foo716m$Cb~MRi3TYmrDBnrevJlPIh@*)U0ZXj?i}O`}yp66GQ8 z5qxX<=vyG*(bJvd$M@`qD9aMS!>Sz--<&@D$%EoPolVdpC~On33EizdWLoy7O=nq26;8c6V`jq^v$f{n{;!Q!d`Xrg)^&|)OXHlc^}x7z_hh3Age*Vbv@ zGG1ro7K(R3Ec^}jKh|^T(B9k<7vo~!gINFwy5R1+wt=7FuJ7T-pV$<5wO^|iJ*a*| zn@;dxB(qKg)Q=P3C`2E7R5fwgAww1S2Usc!0eg7)%U}&QuB3uC=uPCwH#l|x=#@eq zW_Ao}%2llj8=bjUV*6zXAhCBo=t<}Nz4JFX7fVv?B{F&TUGN2+El&jl=Qe55Ze1if zlO|@Ms8#rrtLCeU2!C#Jbx$C^vigJK1jZ5ELaGgVj^ETm!2K)0gCKvl^88g^MzU#} z!oKeFmje$FnjFCN5IMpp;P8e2jil<8Y{*L(-2gWsR(3KHMt6ap@Brw=ufR%HSr0at zjKP3wG?Gfpm`(=zvaQI+K%In1-h1XK?Koc$}|H<6PK(8@??JCVHMQMD+|*UuVGevE;h! zK8c*Vq(=o7di+RSyO#JQ>PcP&)zTViC681JJPw~$6FX~g2NrOfcEM6-9$G~33mEs1 z2mIjoE5PQeY0fgx1-{K@v#-p7$LT&aFpOqB*@tUIpxB2hyM#)Sr=s2}1+S_UiyUdB z_oG!V^!P;T*XZ$y)VI-lRkq+OL?gvYM&iP&m)!P=YchwmJ;qd8EEj#`Ul<4vgl2NUA^hk3!71tgnjl&dgy?!Aq9xHJLdwT{ zNwBe0%Rx(RnL}n zff}lu(WoM)M1NxaavKVy9m1L?;ekxu3+BK-Kr=WN?+7GH;=S;Va|`3P$?;1G?a6+& zJxcZ)QM=o#RTO@za%NIi1SRd{m%`H9{+L!a(8g!Cw&_BNG^QYsn&9qxMQ{#}%i_Al zZ${(NGi^mik;h4;Zy=6iG1V-B1Q=d}F~);nptYrNL{LS*nf?hF2*>miXS7Qf!tEJt zqhJ~s$?gKTs z6pHZykMWa?^QnwBjjT@x)%vKmice-p4AL>w6ILmd5^|%l#SzOP$@hVVFb$TDXp1DB z#{!ZL@@MDtM*}GdzkD4O!hMJY0;ha_G)p8JC`fRqMz8;y8meSu2_i}ws9Ey(Gcf4RlMv17i{zguW|8PG)f%owiQT?N zDuC)jsjD6$Sh`{z7JhUEIxPI?u<(O#A>l`N7vH+5!@>`~e^=*1_f^rrp{kjYI(@ia zb!a^GG|EUs!m1VMnfQdn6fm7XJs>X#-Uh~~9fQZfLt()B$1M;W0N_v1^*g+-0UP!V zo&fkS2IQXm6@L4;8~hVi{C1M=qa4>g%_2mfv4-y@QBO5|dXGLtHD|&f$2>17h!{*N z*Ud)9AiO*^xJ@u(JG9T%`|;j-KdSRfkw{AhQ%&!eu33aNewFZQ;;Y!AvpgEq{!yv- z8!?GmB_DhRJEO&|dmU($TEEiublx@4-m6P!q=^|S22h)NfM@SLTmL01g+hsg3a-+s zl=Xl=aU#=rouE{ZoSv4L8czt7G0fbQ6c4Qd*uy~g3-}zCE_lCQ_qOxrx5{DlLyqh` z^>h-B7~}$*cLH1|v?tMd=QGfFgV0Fr7EpclLv1m!PDLqZY zKp0vQm+i&j3RCyqhWA~}Zl7E(J07mb7}yt|%ed(T{{`V6=F9wp6ymN@nW$I@RV1N2 z^B_N(>nR8`??G#VF!LVNCI|x{2;`}}!5Cdo^_jb;Y2#$>jH_|v0lfd6kVQ9yx=Tj#+~~<1NUj(6p$d zQb-`7h3Tm#%1?4OlP%pwP2G*(s=F7=g};O5aO{cNZ#5=D|94leP}UOcK7St1Lz3}N z5?QcVWE3|4XA^7R{xUjNL*}5vbI`TX;W_B=9CT~YXVpf-sWFuvdO)Y-josWaH(@ej z)hDn&Om$CW3=Q7RI#_{c`nqz> z=Ic%V1QGD=-QH(*@?iCqyu$Nwi;L&I=yJLJ77@>|n&vZQ(&5M0*AShxw+K%*O7xd_ zGG&eipJ&Z2(Wpt4l+wkYBytfsVpdVDW)R~q`$5uErSd}j;zxM@U2iu;c$^$9k1HbH zm+)=P7Bc31(NE1ss?hiUfOS+E#<77mphC*W=Zl#Xjv!|8!DFi>8b8osIXpd~alR1yLT-}?0i5&@bv zd#eyj0EVkyhg>=fhCxT)-a(8DR)u0ofXcG7e8?o#eHcT$gGP8pCpi_Xycv!0p&6-h zyh1&f1A0zq0&GYOL#QQxcJ@G6ityru@GIBhHqf`QuNm@$XNX6v9PP_bz%*Flvnnslw=mW4Om)$M4bA?6mO1im}vLGcDz}Y z3jH82bvM9sA+;JAE}eLuXj57MBj$4vwqXsR0T{?_f`9LXPhcg-MH@D*IJ~B7+Fyr@ zrU$~bX?z*H3?CKlaxMdLK>P8y;dm}pZDx)%3>`=GPPh3GVuKkjhA3<>&)7Grp^Csv ze9lZ%s5RNkj0&9+YcfjVI3cR(Sbz^T65`ppn*csowHrRUeFIh@%9Yz|*}hfZK_n1e zfe*uvF536e2Yc%`n!c2+_#B&L6?S)OtDGzHbR~F_E0FitC7$W;r?STc@r0O}Fh^lp zgDoa-5Kn}C@YD@ElX5P(vb-A9H63Qkkx9pW?8eX z1=b>~W`cOv3MPmlRz$n;4L0w{Me7agT`QL-9zr+K2`r1#sw~Y`%pV`Q7^MaAW0(|Xj~Gj$mT>xNfb;)gRyfupZ<1^qZqO#9i)5cl zE>(r{cytj@Ju#%*d?dMoDt9}=21a!%_eez?Yn+WZyeE-2oWW9&n=j6tn$I09sYuON z>O92eIA1ymGCp`8p84=l|J)w^SdyD>yV5E5!5VOG{qbY3rL8}9Y>Uu$*pOaXeG7*U zs47!>>k?U9sEu&7ndI|iXg<$yWirp|euEmW_K^Zjk)~LKj;U2j$}0palY5F*KXkkb z{EGaF{kS}=GxiTus*rIa8JZ5;pQOX~ozK&gYZtq1({!Fxo5bzFg}(nr|JbeQ(}H2Hyzx^&>J3tSTrm6O%HGtD#m5Bm`p&m=O7#8`zrgy8ZB zFW&$WSb}IA+mRdKE^q-ZulyuHbbi8-KoAY;plcGt#`=h1bJ*M-Z=%5ls2p4tt7sV| zExIRy%^ksv1K6ZQ6EuD;#Rg3MhNafEWqiMX@#cd|H@~}ORoPEX(;C$smk+M>j7y4) z7(Qp#$mtDgt{nN&(upzlhSuIdiUmL~A8{teA4z4M6{eqvYT<)^a`+(Y9X^O;d0haB zxe4-fhYy;tgczR!QjyfCWhZ54{{Rn%fPp{2bxZXiTim*J6}SnToU|aAH$^ai8;v1C z6^|L=t&hO*m2Ke71(#&k>sv%#kQb0X)@oUv{3u;wF1B}#d2(YP;gH5elk%k)>UFA>$u z)%r4^7>y>7p>~@ioW`iJp%YRTrhsXn3J2iq!di`DuqjwirHF)OTld-@({9A%MQ<pMs8Z@fin5%J^3n^)~a^}>nyEinixDA`ssMR<%t43eyLxLu76v14>r22?! zm*s8&$vX_a|rvhq8;=EzV)=FbCm}Xl#2tf=djOgtM~A8i)w* z$g)H&Nur!+FSjRVC9)Hb1SUo&)=5MVQHA`Q6N!IoqFGAk7saYnmT~GJc=>#!xx=hE zT%baVvc{iM8?yV0=Dogt?Y@_ab}U)8^J3l$sWoafFm~?Pxg(o3DWh5O*qJlOzSN{i z(a4$8VW*BA6KmE4Lt3?JFU82;C%Fs45I!6&>L@pzoZJioZ*Iugu zs8xSa@$`Lfu4{euo6?A8Z^ZO$T(4dI!IZaK$}ZyyNe;#c5%7W}`<8(~uYz4%p);Ai z#x6UFS}x-YIbQQU`V@%x_l-osND{6bImDi1FQS>17qCSvirOvJh1CYIxG*a_t! ztQEbr49a4&S=^?WEnzi?+e1xg@|KoCAqc8=CX2~t3K&fu)_`yo5yWAbmy%hPXX&za zSXqVS89^=22&!QVHe*6^T1G>2m?p&?>We@HZh$0Md8u#y%sEG9%{Z2pQlozT8YyX- z@4tZq$L)IY#a-jxuhFn!jam&GdVGaHCAOR#9||iOLk92!wFgx5mG{a$rt|Ww@Ho$p zgBh%~s)U>BtORGkH9524c#hGO%@8v}%(jGriqUWrR}Z zDoNItwN`oC+c2Ag)1srjX$1s*5$TI&Kgc9*eVD0>2O2jnOHQ#RaB{w3w5fSpQ49Fj z)vhf=27d4OWUY(YeiQyYa#*d&z~fl^y$#HcaQZwxE+1R znRk2@6c(PP0lP}_4-MZkqubnC4ZDo%RDbVC^Xuoso}P!saaU# zPMsR#v)#;fiywgCtY@N_abhH~E;%Bpzluy8RTV0ts#T~^GD1usNmCL)-jt41nBP%3 z(BYiEY)ZP`fIyNN&l%%^9>F0c9Xrx-wlN=E_!HczI6fu}B#fN|zk_|=>{TGJ19JB* z-3}5SnE?wL>|Eje(fKp0fxpk6n7xq3%Z)|6n?`VuJlaFWa2o3u?y(=K${(q0`?AV7 zf(Fk;*i{7-{Fw+TiX|?fS_~a8d2Lt_ri#ZDE7|4=s5=XHvi+WbfceYk&jtal;Kt^f zfuqk{89ZWG|L@sk=QY9c{l%%<(-YrXHGXr0*!rIoj2I1q`{xcAM(b5ELOYVDwwG6( z@M=Zr{$HFXs2*{`8*nEmSOmhsKKLT|2o7djIzJE`&hu=lb5PYiJf1;Fm>8*HyvCzS zSQqu&@o05!Hb&{0<@TzqPF0AvE zY|CyzaJY%-D4M7}(S%u7AHF2AJ<-cElF_SGl|<|?;DqtKmJ5|cv6LLJ^9>NZaV>nb zGyjD-b$FV>BVPI znNT8<3!nh<;gQQ}F?M~1KW=#t=s&@SFD|_Q!hyAWXigmr$7aONX+m7@+oFX=xmrld zHH$}H_6bkX3<&3IwwE6=pOkeb7tPp7%v@kb{9lQAyZMlrn<%=_%_AXZtJ#jPw&Ql_ zR-PDw8yA_2@vm=~!9-PVEp0I25E<{Br0VQ4lC((k@n|^{!Ay3LN^-*0207r;V;~&N z8+G&V_r-QSW}Vy7tyPHL+v4b~0?kV-iuZzQ&R1ln7Mh6Gvz z?SWZ=*?|RtMS;bEI?Vbyf)QI6Olsy3Wd;&v(K;lhT5Md)&!OYOp__rmmUgMhnb!x8-}WfweH~& z+#_a%fjs4!i6OyQe!eN0=~TC=wm!+t-iBSlz9Sq9)p85bR5rS6s>(%*^cA#ra0a`P z{YW?{)n47`yY?!s3xfK4o3#6$wDVQdBMY^;Abfz@{GjYhu4o@7^<_uTJWBfdQQ4QO z4hbFqaa<3Cw2APl5@sfaOyertHSAllOWEV3{m;s0%K}7{R719n>lWgtPczYoKMPdE zTKTMDCF%n?sdk9*nW0i*G#4oGXV^bb%9awxNYVXL#zw(rhM&NDAHo~2vAaRaF<=0V zEpVrC+KgAWf;B6Di3NW?g^v$`c2_dL0o@M6dsVB)-21A*cenngXV5+FIA(|#NFt`5 zH*PB(x7ALDu8{KdR-+{4MJk+ButmpDCA#vqXU+uYDG*Y!;kARG!}s4tld1C_(1J$c z@LGS zlz-pYKJJvd+j0G32fb8RM!^2;2d zOFCvwSd7MOBKd!GR43paFJ7&jE_MwKP=|zjjTz_v(Ren3XW&%5BP^Qr;_a*OrJ1)HqH%0z^c>A4sBOdnKJZH*;b>y7bU?rc2)(z*Z9R6Q9D}6^%dByo@ z^lny}=C9O{fWM#$G1#A#Q&?g~f~2sF59Q9RSp!R*C&Sp@pr>;aFaZHRf!Bepf;+)g z%>Wk(-W(0L^F7cwqnPeuxa3m3dja5^-|+clov+4NxHtlNVZ&j)N`BpPQL zf@g1X4w4znP%4jtI-jeQDM-ra%J+8u01vW3&bE9!_svtDKS1-j=JW4ztu=q3^|3N9 z|3Armq*yAF#SB)1-H>I-HWV0&3|b=bnJOG6JFdnN;jhZcAMLL!wd1f>s97(g4;hPV zeGZnNyV(1++?Q2?R=7=Yj9<8Le8bGlhQO#0w-C(w!Pme(<_4`d<+fSK3D>ddd>?jM zhp(}1-1)pTQ;6?c$EWP z!;DO<`IfRk8!S>S)y!C6^w_q{;PI5jmKnQF|2Y5mlI@R|u`A$1$E&4T9r~`A)qU6t zJ;xPflx*t_f`2Qyw`3V~?cMe_+lQzW-;REhScR{I@Z>wX#X#oFy(9o$d|jP+VI?bzg_51NnY?Tlo9 zuB?2y_>pzjy#41|;PaA><};1oPP~dbDm()tec=oxKWJ3j3?sdK{1gQr%?8R-KD2-f`U< zyH}B%TxhR_BA!~!OIiObLAVz|33Wb3Lb|_mGWRWCB@q;s8I1N=frdeFh(Pq7aw$0O z8|&M3_UhI%-w9oXK$^*wykRJLsl6>;P(o`*k`f>&8A6lv*n1d@Abi2?b8n0cgOwmB ze_h2Nu=Kqmd+NBop={_AczNkm4deW247>&(YC&Qb*sSZXxb895;4 zl@tS(ETg1eXf33_FGdN~3c3MXLGH=V2y(Se26jJaaL|j$j(W?lun$GUj@DRrfA`1e zWyP82UR#+ZNrXvk@Obw5Os3%$FXaBfG_afGmT?TB9ji?_Zr zLDv}AgF~q9AYn0iNb4A=?F_) zMG{e9kX;NV3r&~#;^yfT5iNdU-1};w-eo&Cmr1II3s}2}w$L)s3Zw_YFCrB8OHLPR z*HqGtpEQZC82S&BApU7F%P`Ar8Q!UV6Yz+Rox{*LZ$Oj(eM@aSB`N`q3PZiy5PJ|@ z73ljKx7|x-DVw{_Rv|0z53~D>Oc886Q$Rhkb>*fI^g`_B?{Ds&zjnf3>*d&|TaY0u=U%#dAmGv^)P1v~5%NHY#bt+< zAR$ETqe5&@k*BxDAk=<+e4VC~HnZu~3aZyv9uI0zIggv=H%-WzZ}Njs=s`P$hUjx} z)ekTR7mEK7rGmiZ zJ#afMzc-k-rBob^IEg(;O7GaW{}e!5}1^N(QwR7tU;yeh09;c%WnWR+&Pxi7-X3n&mj^%v*pmz z#L?v2ImVpkiUDh)heNls{ySS$wVw{1Sb72n%umY9lE8_e3~T&U?wFX@D-i68NY(W3 zK3vX#Uwl8nu*N?svSOvszu3Kh-s-C@KycnKx?DkM#^1L3*W+>VD*_y9U%FoP-b;@% zx@#K#zihR>P7CBx0~;gyAy!|It~_W?)?N7<2acrwyuD_TQW}3dC$k&i*S=3yzUmu4 z=EhSg8lQQ@r)(^X>oxGKZ!60WUdO(Nc&*edKUgoZ{VA|`_*(ut6cJdPhsmq~nspb@ z=%fgGY@vKATcl`@`$NFePx&X7OUp}4{{|QHD4DZT9{f#OVTPz)K90AsY1}Bvf{7uu z)NFM(Eh+@6@Jkv9Jmc;IX@Nq25hg3U~NQlF8Ng2o{CeJJuRed!VLF!1ow<-4sAw=s`+s3-GX>U^dEyr17=To zk#U1y4~^igqWvI&Lc83y@?msZq3;+gRU!MZTB&z4U0ZqkYx`f8WLx&3ai|$*6&MjgVAO? z<0tO{VhzZ75rznc*i)%zB)E8RUsD+1vP-j#svJd>^gMDv?-`)zq?bguowi8p&>F`3 z=3ft&vAm)6!VnbGL_df!hot#Ai_XKr{6_UoXqmyPnn?KvBzPk{`9>*m_lx|V{#{On z*B!C0MXHTFzYjd)C;9v*Jy<4lWxU$MtFp_B57hx*aeiKye*g7@Z~vaaM5AI&gE2BE zc41c(bgwPDnNv;oPi&Ld&AKS}9(EYd1$`;fK9H@}@$8kTu1fQ`ZIbMic8U0po7Q)e zIQ~-(b5fgoeo2&s2oIANbG?A*`|ByQXuY*&cgyq!uLkRkHBRsE__i_Y^1s(fQ%@}& z1z=+DayT@H9Tp^STnE?~dCb#HH#W|TAqJjDMl}1fW=JOTo$fX!X8FZ6SqJYNBeajQ z$ZDSoqUUGXEIqPl_zs|5Gh5j%97d$ZQ63`6$};sCj;1o z0T=H*4fkTBN4iNZ%}6GAu$#3qa!(mocI~)^P5W;!2q&o1i3(Lc<>j46Rz`JSe!b6Z+{w#`Ojxo4g~WX*P4>rZJEC`7|xbA%G{o;(mt%)O5Jr;&JuJ5 zo1>X~BsXb`U!m9Vkt;ujT)>B+QV#}yzzRmhUu%Al&D)!Xlvy)yU5MP&xgStAb4t9x z-XKDMzb6k%WeTDN2$bIT2k64x4Wx{zX!aQsm7_;?o3tc zC9L+iS0Ec#h5`()nmKbu9>?fiW2(aRM1>tfS3N+2vps|2pb1;_uq<4tAU<$uphzs-gqb z#0JI9WxMF2$kb9A+aD4U`NX5BJz{3NLK&mry*bYva#hZLiDtiPTYFBkRq{t8seNI@ z$TG)ml>ax(jy1EUVMBlbGJ4BMwwkr8BQ|34eZI;5 z!FQqK-?D7cek}&W5Vv)csUUzeL3j$75zQrN zo|?KuxyI!p7wNV8*7@q)L-=p_95E%mq_b7SW4CZ)JfX!LfHf$lI3mu>PKHCEsDb%Kfx$wuMy>S<54` ziSpIDDG#-LP3&`vizmq8(){Q$mU38dG^m>8XT%Z(-d<>w9=TJCG0N;A%!=tkz1x9V zN>zgFbPEB?Pu6Zs>KneNRwzVfXR(AdYH|-lfptRs?Rn<{`4LQ-=To6d-VY;%#>}&W zi5}sDF0rB*O)+I&gX6BA^Wr$q2Avf#UHALgoeE4@4XsVo3-Y_Sig7)bzw%7t12-jb z_{$ME$9+DGNdHntdc;$$_y?u^T?o*=ZyQu*_%XM}KZ|2Ss4`hyP)W1st{v`=`V=vk zo-CM4hbk7s_-=3oGBwV~a|x zqwH34dSkw|>@_)B>#uD_qY=TJ-AG%VAH7WO@%m{+3okm9FbGCW<2VY0tZa-pakgCu zR~d@G$nU)<9`Qy1H|Lx*nJw9nMx?Caaddr*EH*`hi1T-*@|7BZ z{2H6?1s_35SrAmRAApP$dOGH}X`rI`hXCc1X;!hfx;)dE5F_=8cN!;pqb#{4TZC@- zGndD}1+)qVtRd)~g8f5o8^vNXs%eP7tX)9D$|4!ZYd7u`Y?X z9AzA~_y?&0VVE6m3QDEZ+=w8B@s zeOF|0tK_?3*RleuR?F_?NAIQh8oJaAK9tN~)A`@VCi55m21iDHa1wZnea+S?^$dU& z1V58!7#E(GqrJM#dIy2JiclYeReAHwU!u%jQN=$z3!Y@IZ<$t~krKsyD0YXssD$F* z2_@gAz_&~u(S&poPgLfw91SXq!WkHuyhr}4h|Xg4$z8M{Yaft0U{ zM;VlCBLUv{lij_K`7i$4R$Yk8+2_Zey;FB`79Vuxy1y;5C02@iRbA=KH|5*9RZetI z&1KDUU~I_Q(WuMqMOw}E(&kEE1uVF*lBN&goxv}>v)m`~hj*g8IfupNw;j@Zf`Y-N zdqgXR4&e_h`$TJXb9x!|84V*zD_X+VexXH_1q$?Vz5e7=f@B48rmKafO036FoF0z` z$T{8A56#Rf@SJxNFVD1UI6WA4sS%B^om1E|wS5>97PDQx?9J7bOUY&jH|sNRM91$B z3NNYw?ggH|kG+V)B$?^OU$SV`rrGQ_JgHi|ABBXoElj^&Tbetfk}q9%n``FZn`3B! ze_A5(OextL*m85_ZJrQi8tI?Z;Iphhm^Cao?@u&{%~XtEJ=kf>ca4oN=e z8_gxQgYNP#@GdQSTdX~2?BG*KM7-#3G}XKITj5LpuqWmUq^iVA(X2)`^}|F-cC*9_ z#OxbApd0#R=;umv%=1&&nk}+qOL>83mt!~Drpp9*8*RB}HR7M1{VU!+OzIg=8S!Zf z^)~zgOzbNU#}8!3j{vmLi_4@7(!kB>mo3s+uVf%;qe~zeiEX@|=!5RfXBmOm_v9Qe z9qI>F$#bsV7eTZ#dH0(RGoIH{Qkt&jbg>X_4XlB@u&>bTV@%Efj8 zR+`ogO79QW){X71!8@gyJI<#Uo;~++F_>QfUzjoB*$4H#7Y5oFUznT2tkiCdp&$;YCaq z9sktiPfIkk)*VQRgSB0Arq#VZ5bykl+6U&Id-l|u@QGr~VJEeKEyE3x%ya5#^_o!E zf;Z$-7wFI{W@mQhP9Xc`cO$8tpctOWNk{=Rp9sZB!JwY46c3vo#|^*;gGLC;oJk1F zjTIx!Y36?Ti+PJC`{yu?0C((Nw|KO&xTM%|^c$D35GvnCg`+*+4D;K|A zN)25j+Dg7(j>*;V@u5P!;>%*X%Blm+bB13I#cr1&xI68I)4y<5zwY~R97!9O7S7vo zGg0t|pf=L5ju#=sZ|8dRV_Sa&R{Q>vRbMU3Vuyu@pyGiuND(w(zE(?g2r5@78ttD~ z3JKD~V8N-Fj2bP)d>OD)$oU-pC!U0XqbmEy4nWQS-Rmomied>sga5}bz47OnY-0y2 zhSHFt6hG1+kKRn{6G67O&J>58v|~1P-f!3F6Er~iDcaZXZQ_%><}VP|eC!=75-wxG z3hTdafv^K&RUUr+d!kg2!K))wF*m<}lFUp4m?R;ogU)2o3A(gxbia_%K5^D74 zG*}!quafLGI|S0dk15W#g7vX1n1be5LOu=EG>w-MM=lO(KA!U>8KM_ASWF5YF;d+( z!qO5Lb|~3MiIyN(v~h-Ej<{ zOEB$YlbbZ%R#(c%?z>5Gzzr-{v)AlHyjqX$3wPZTz|#3O;K9%lVSY(0U|(d?>LKs0 zT;s3Yf$LoQCb5+NT7HG~lzhd$km1pXUBNpQV0ty|M#n#<)`d8=8+D`E62|dRb@er? zT{Zysdg+a-BcKcyfyr>v!=DoghC5g^g5-HPwLs2`^+@pws*3tYj zh2l_dsW8!pQ`S{4O4=sFG?b*dPDthZhI;4ScHe+RWf&8biyL~Kn#90f z>yTPRRc)R=K&71SWmw*-D6-OFlXu@7x>A|-&zJ-u;I%bu=oPl_h2iEx2&@?;)3z`Yw=e#+n zP6At+N3n8{ntSC#Kz3PZ%qIdOipy81hpW_WQVfq&-81TFud0_Bv0mQX+O;p4lM=H? z`Lj~iQLSu=7NE6fq^*q|@DP46Zf=qOLFp7RI#s+)w=0OOc91t|CB+*n59q0~&G-LJ zWM8GtJu`LF>)a_w5c!(JenGfePHhNV_uT8%?%)b4O+=AOQX35%3Bq&fBVAnD+;LrT zN`rP?6`valK4aJ7H9623zpnjhqxiSl`Y)^impx{4RA&9|EDPIzKe~n6 zX&+}69NnpjE~<3!aA)2hjDC!G2ifKDU*Pef@u0M}f(Y;+8s%W`roTi^LrpMa{OL8r zgEZ8qRKr*CRo3TFBVO>~&}UF1T<~?$7f>VR^g-6ASiKW7bt73^w1N)5#s6ne-nq#eDVUkCf4%=|-{;i>wuQV`CWk)4B% znITPn!H)YaGs7PA@h?F;2d?Y6q@a2TV`$r<6Cnln2-wjAQG)ww?XWT+ReJ`Gf+)77 zx#48`2#6qtdd%&(`JpZi7%~u5`=+iiU%%q^aa=+1!z}iFJqp;B^t{6=*s^!U$nr1V z#&^Z(@(H}c;74WZahgWn?1#Ui?Lev)Mg>A|_Mq3m&DP+#lR>I;lLBg}Z-0^?$OU+* zeU;pnRD+?@<2i$V>DjR3)B5t#+f^e(^hLM7*^YWaUw~7Of>WRE75QUJoG38g9_cmQ z$IzZq3m;vzSJ|FJi+Hhz!=6ElaIx3PUO$y~ewiN5jF5Oc zR+-+?rKq_r_ZA43!DDVnQv=w^zGZIM!yW!d%y+-&ZOk=jmw|OVmyBo+Jq%nuYG-`} zTm!CqJp$ZqgK<436P934JKT#laRBU_36^SH#X#3jrYgP#L_J}J&R#@@& zu`5hgsOk2yD@s=Q;r5d&giZ+V_JAwAPFV8xzALm&sOt8-E3!`b;`W^@uen}{KYE0&nO+G$dcEP{LPI2mMQzG*(Ul~flw^@X;?f`~3UjQ; zA{O=}mAu5ys6hhEH#K|lQnXP}X&N?>;oD1{K%3$UG82BNBLutk@ox__>2 zrt5Es1Z0_}!*4MJz+-E}v?O9-w$>5M&SJGwO(R0rxcq~;z9 zyKnq(!S=XX12nD)xB#v-#0PuSwFz?_sBW;qq#ctf&yZ&a^M?&&7KnFtX zMyG@8vi}9_WyhNVZ`$Kx2cH3F+HY(}lz~*-L);-m+5-#z31lYi3kK^0xk-D)!16$L z(*7Z^J&-@UhZ-yaWXOjuy{zI@EP*ArA7c2^7(d|nH8v}WCdsV^8 zKn~shMX(c4V6%q{EDdDa>}v*F1Nk<4UBKEvuFd`juqRMRs0S7N`;}R!FB)w4$}Q9@ z3s!t(7wVq^JG}CD_b`DaUs=2Rs==18yxqOFV9i&~?*2=#$E%=s4=GsemBqU+8*KW@ z^Eu(bs;?a0{hMHySAoxY2mW}Zeoyt@)_vl7&-~aDdSZG{|Je41h6)T2{YPn28jG$# z=cK@dJo`g>mY%{mAtH%|RYfH((HL7@StWkn7+GC$A+FJwSY34?{>~V3S&lO<(in4D zi8Fq}7;#ylDbBvGvEg&O(hg=f)b}4`=7}{{6sx1ob)9G5_(o+gVoUygXH5ET)FBna znffE%s7@-jbe3_>$TXFa&8Wz6m_C)k!Ki9HUfW1@S=u@IsV?}tv9IIbDn@#U`yV3ykBuMWa2lc+kmq;V>JGIm|^8NWiXl!rvj2P7!HS90a+PLxWj>fSS|YG;X**F z7NhELA|O$VVR5(-kg3JQH5>_uU!!jxt^}m7F}e(A0+QDl9)>#s*=tOw!~WnHe){O) zd~gasqwH`zIDwyGYPcSp!Oz4r91f1_psyY-2d8x~+773KlR6kKhugtf9ZaOd!QfaR zefDrMI2FjKJDdzo1Tt(6H-j^QOhUuaV4)`ouO!_))hB7MWT8FTC&~9D?>$}ImT6H& z=g_fzK)Zz&g;rw~uWDy`@BEPkfTR6S+n?4y?Sn0YZ7P7uGmU}9vUa}uj_M&r#qlCd z4UL^Lo%~oF<;rLaPf#&IRp>1h-%YEP^lS-V-M4IwH~_VEY3N>?!!l?mtzhO^&6Iaj z{Y*PWf}#A9sP5E2yY=13)RcBrcag`eZ8vkIZj6!QI_|^BJF>7R;VT2A)UtvpGS6S+ zG>)X8Sk{xKh@k|AyIta+PJDg@LVM*N!>T;?(Tn9L<=I=@?WV&?@Q874$24#D&3DCY z+B7aJNokysLY3FesgH9-{VVLV4e}Q0;>V(Qn8XpHznemPag~rc=r1OV6_%w~R}(KB zWo4XkUKB4PJ~Jtm5jeg$Sj>qfe?a)q)_ zPbF#-&kvNE+KaU3#?0N%sX8+lBF_Z|tXx=i&nCWyzeVzxjtH!O7UKd4Dka))aaL<$EB^uVaEFv2R;V)8b#GC)vhuOS*xd0jSWlX^5a)d@K%sl=z=BII3cT zndi>fW8Q>(v~@JRk{rbDWZ}-%(0Z)VcgrjVr=3w}?F`uw?(5mUM6|z_S?P=wcgZN)^sQfGm3| z;ZSkwtwCnZ9BcPGog&Y~np>_)62)2M_h_n@#kaRx;b+6}#NxEQvm4`|JgpZ1Kvk7e zk&t?Rmysw>Be>U#ud$A8(SWZpA~Ox1l_1|LHmOk3!6%dS&;xMsi-#wA4CjJrzXW(e zx4)?VtV`Pl*pITcyLWR?PC@25RHoyt*08xMYdyc>r)Y5Dw|R+C-+g6ZD1$VvE|Z2Cx5ivB=pi`y{ykl5nZmrTgTy|B`sA`U!0( zPj90Sbeq+{Zt(vELOHKKV8~I_AO8tX$hWWwq;g%8weSB!@8>YBPzg|*^zG+9Y$BIP)SmSB{|in#JB0FHL%=yW68;D1+8BE@9F3+CDtb);|0h(vwt#m> zqv?eH&#Bb{~<$~pc2Ghnj*phndd=N^&fR9*o8VD(b8+zA@Cs%KNPkUT&0<;!0wgiPXL z%6lh2nTmLbqy3K)jFNvD+5CV0A~?zj6eG(mI!rn|D*h*L{g>PRXZUZv`7bB^@8JK_ zZ9-N5cc=Y_7yrX;BoA6Q{n|F+3$y~cw*j-5e`SBHM>xy&tx3CSj{l%36`LaVpvWaO%Z_=*t^vjen`$Qwge63z>MK>uMY7eors_4D2b@qTgaiSou@XrC3 z?eKc~@N|-GDc?CuN{43}rY!eCWYU#AM#UAl*rBy3hoQZ#39&R7lZy)v) zEpSh8i;|I+kOLLU)EN>4)Odd;f-as#rjbfSK%it$Ij@}UVS3HDNQQVyXj{QG`hC5a zF7sN>qLCKWVk&;E-Fu(CcB-R`{~OTIt6Lk7#Vp|&sHMue$d`xJX$`6p-%kidFOul5bkOi5TZ#9U8WxsE=^O zOEotNiaq}0%*i?--X2@}rwA|A$|x>2^v_C!6f^6Fcwf?Ul@?VzyE;40U!f@}-c{=z z-Kx~ZvKj~i8~XLX^DF(ZF3W`O zu9usk-=P=D3=GKs3^PKMvCYbN8=~ua@pBRA0_gqEV&;_Pje-m!5ISTB;rLc2x9^M#<` z)(e1%Sb(6Y_){Xvq#Zt|I?Si{IF1z0aDO1}f>*vqY&>=mRhPT2|GBl~EXdgn&be~l_@O?iO)Y3JpoqJM5FbM%3#z7V^cxhlZ`dQ(Q8$za)$i8;AwPCPl*hJuH} z^Upnd9IfOqJNz=D(z2{#U30agtU}(2k&RG0SG?;#f|OGSw|b%@LoYV9G2627=-FB0 z{EZIFxlu1`E{7a#&wpL9cgy)qJNm~SX_=mR=QDV6pU0bWZLG~4U=|LJ{5i$GO;{(si^)^~ zmUAwpU~Sxjp4B#EPJDBL7Gq3ecg6DSYoybVQ7Bd}gUfl;{I;i%KIvva~_ZEY5(_pPzNim{btW?|!tstH9Y74#a314_oVm3b`+ zG&fRZa^k9-7S;3zwBd7f;ZLImV#c*<@><4Q>uSoghIu!cwwluGe)=an{UE2e<|-ON zU9QlgC1rUcHhnxMfsaZ;p3>(P`l=|8S>`MpR7Ebgl(unZC&i%BQ{p0<6K1F7kA=z& zLGLRD7bnKKGP>uo_;f*}??O`R5&9K+QD%Gm^!1B zw&i{h!{;+Ln4Rd}H5d7BS$qWSBLH5odI#ga(GZSLQ#|4M8QIV&X;Bui6TeB}jyfYc z2WoJ`k9wTlw_YF>1#ENLUMc-bX&okx?-wBsRILBb9D#Ov4B|*K;>4sbXNob{;@w;N zd-2fcBA;T^abL}*Dr8izJ7e}I(JE_)nQw2 zz>|CUM;XjNGCG8{dX&SIy8GdL2SBUmaL_gP+Mm1QViYP|*a%yr`Ou!cj zab~@vP6|JSuU{qLphN~>pya+MAd1TIqnGABY}IQPXXC3!Mf<{U*C+u~rNB@}0yX3u7VUqMJ-}rRLA*oIXbG+83k?}f z>fg-{_n9b4s~5AQhYGjk9=j`FQP#8tOJZM+n3AIr z-uHzvB_X8Ae@mi%eIVBCH{CSDP4Ah^i17AesY{0+ezK(E^hG;N}`nOPZt7J@|0V-$i_x$mJ9-D&R>PAWlS=2V4Uf8P>dgqah3 zxpD|PP?5JC%pi$#5pVr`nK7vPq}1R(ljm9auG`_s^oq8?KZt~;D^AIajS+%KaGPD5 zXKYT_7~5aklU?lAEcr~1-vf6A<|xEY$0j+0{V&tUmR0PU?lNDiCYyrmrR|#DGS9_L z`IeV2T$)UYDs@}xt+%WWc~_N&5T1F?ucr>J%6)p3#0!tLB4B2}oXEbFFx}-sok(|< zP!~=!v`KIseU;8HWe=p9`<^C_X~rL!U&|i!XYL1q1cezla(*s*0L1l|4ftuV>EX+*uTL<5c7X_EHVRsAel$*1-bUdg97|G7Se z{P_DlWDGp?3hzCN+=|Y1pk~u2-HM-lF!ktQGpTEb=rwM?7N==%Y199)vqLmx-AbIi zeZS`0Z6tItocT!ip2l~>^=kVb)qZ8Ume_r0vzF;$Cwno_$>aNCr+YDEtFD)8{HVDx zxatObxu@Nc{&1zUAy#k3d3gv4j5)X>6O?jzf+H<-14bM;urh4z0{w8n63@O~dy2rc zscCXS$xvX_)D08R7w0pydKC8wgJE~9A*1?A`8l+D20=rj{E@e^DEkR!b5Ap)uN!Rr z9=UKu(e>NXoVc_|Ner$1;q@LUCIu<(Xc&bI4WX3`buSPYLy92$ z^9NMmegXr+Kn{0;Pn;aWUrDUQK)@A2LhxelSEYm$3##i|0Z0FfX-N0KQg=a6N06Sm zq_@Ek82bKt%t*eu%t%4~aG}le%rJv}+<2&%-|wk<-Iw6f_35nqiE9w=djz?^1aH9+ z`S03c$n>joqvCF1X!%;&LE7|IUlFbazFd7Fk%%BLa{S44D{MO+;FW@3ug8hhcZL^M zttSJ-b}-Z#kA|*g#u?aA!;myo2O{eZAw0r#1#+-pSn69x^d2mI-L0W)>RVWX*{x-0 z>c3xt=>8YA1pm2^S0M%q&MFc zDgK%}t0&$SK{oyGf%Q#PsXn<>LaE_N8tQoPf#TfozqF#FR&#xgw1uK(e50Tgc@w{7 zi>6fKg!mH$$mawC&8nn!5g@Bptm_A1?L_r^{;H)4hKY>LV8q7^s0t`WvN%LZ?Sr;WvL(zcRMwGy*HJV?3N|DQ-fw2uAbm!pA^y*o>5)&^u39E{Oy=gdULsvf_LGFLi6p|qk3z(QHFM*{<|*5jaLY{UA@E65yf>ywb6(5ify}V>k50hBhV3D`p75P6Z{BADw*mZ zghV*jf~UG`vKAS9&8{=J`iQ5yYf76=Thvx+PA<)WX?T(fb3idS&CV$;#dZ@I%2p{w z7_SGDo@>&OY8E%{Tptfmw@C_Cl8jmzs>+lrr*3}^t)ru}3Xm=gp|u{BXuLJhs!aY@ z*g-Ve()oRIm(sp;YCA$ti#x)>PG)kTT5UrEdL=7^{Pcv3V!ANEDA)CRi(YP<)6A88@aK{!5)wYZA(1tnecvOpd2aBC|9Y#FtMaPkx5wF&wHQEt65j zpTKpkFH`%gf?S2CybjxZzPU}UzVdB>A{m&sDMmNUJQ5Y?+Mu=uIzwOicZRVd1Vee8;OfPuZ2`1kRbkM_y|ilfSBN*TPV0quP_qbaQU-M zonECiz45cQ)0(a`2W-HNLL$4u189OIkTDFutWCR+N;N|XcOVCe3ARtoY8-QZA(;1Y zQ+Zc>fbW2Z-dfaq)+H%^Qk6CtO{a8)YBirlywONKv?XRG>JlX8Q(N{s!++5}DGZVL*U zVgst8di(N|iW~ua7w3qo1s(0m^)`(;H z^MvR4_KW;-0}Q7@{PXOBdm)7}(vmFWFpWG4oZ{u~9egH@Lf)bhTuxu;30`A#zbORJg2rK+y@+l?^v9Y=>YXhK&-iJ<7`&mr)6v2!MDXd+=Ar1zYOUxx=s=ZHGYd<*{kGq zTfqZ(t57}B&8o%}(6KU4{4VBG9gwx* ze4;$XN+67+@q`QOH+dfWGJ)mBIisL6h_%c2-@?u@}kC( zL;{OP?rm8_J09bVR<(5P_9T;IPuxPdTYg&N-E&J^V}5{W`tu4!iVWpabP{`g#y(L{ z6#-iBQ(<$6$Zxb@04K^;MMj`MPt0#_zL%QzJsa731KZG6wEIK5w@IvTTxwfu8HD^T zKX9RCFQ)oMntsnRAD>P^x_(35>GdNZSKo~96b%a&M+(-v$5p?0o){&g@%eqOesZKY z^9qU+t|b=-QobRtbP2(7cXI^tH_91>d*(59I%_^K7aP5t(=c(N&Q}}ylJm5WB4CfG zW1W-R_U;UjHIatEgi^$wquN-Mwwu8RkGI)kJ8rUCCSu3kpCgHs$s_*0J0+B77nP)0 zh;$Eu&B}483;M(EDxL_^c9)%&;1w-CM#{w2d5+~gAae}5pY|o0F-$THK%P?^_x{p& zyEOIX%V*rwdM3Q9l5*4K!-gsBS9~&`5XJC_6%_6UR{sqcLMu-_Ns3?jmG@2-1+@dG z4rWS91&NCms|g67l{u*bx_;DurM$tyKq&bVlpFU~nX*(#nF_Qp>DBE}hJg_gvhmV+ z>B)8YlHF;U?Qp;B@wTYpQOR2@EKVk($)Y2L{k$2p4yK#g-=Hq$CwG5)Nq8Z}5%So} z5|Y9ApkhCSGYrU!5!#Axa{(L1i$3>1$fkbhZFKOLU*R0b0<- ziE!DoHF}2`2|A$>i&EQ19nnu>YyWfG0owZ>F}jCj+N4%)G@9Z@>MEt;@#`|j50L z{9ZnwE`yvj-a8?BtP~9YL<*L8>fTobn?FSWRo*3J;-^Lq_YnbYK>4okx=Cz%bbzAQ z`d7887`lDhR*kAy%YELb&{w6ZWWoYXFDkB)2|)N7ZS%-EAb5?&Wn>)?Js$62+(jSr zQXqDb47>O9I5F`56*Z@fWBF;LM|Qyhx23r!R2*7wzao{omGVL7Co)dSX(bo(4`na& z{wMl(9(N_~qMcP6O19-zjf&?gZVLko=L_7Hd3UP?3li1=MBHNwU2@Qo=Ib&EWX;nYW~OaZ~*5iIvQhOf@F~=kqHV^rw5$w9k2B1%frajP%8rk3rK8wyDU&J$<* zxngn4GHe6l8+N!G)#8&l@PiJPs~<4K^cR?8vzfOyQTXmwLN=wg3I zMqAcVGf`{xH?_y@I7#!0%juJ`LUaOga#a20{I@Yq!@H5DQ}?3;;_IZbs^{Zcqp5v9 z#_BGEi9`y8?he4QvhD5h!eLm0CEJj0Wp!7d$?1xbSkZ2^_wKV_*RiLzx%RV7P2ond zX1C_E^m#LN{o+2~a~pe|tQ$vta^yR0rDVJ0i=(BB`DoPm^_oDJ+nL8up>gwSoKqAZ zg}L6CKIQVorr?2iI?L^JYA1o-!&-5=CrEJ91lHQna_~t#hf>?D3b*N>Osy9$tI6OY z0HMa)>m!@jdB+M;1^LlYZ`Icj_T6L)5|Ub8CNIKv4n`)-@_VHrY{icFoVC^N!qpSR zbBL|suIkcF)D*ekXv7C-yMfU;I%;xZu#&Z^lk>7^emM!>6t2>VBO;`oFQ2gHZ$Sv* zILVGsK#0lUeg}Uz#1Rs^eg}OHcJfPqj-QmrLAYI7uCovG>&v zSM*nPM+E^9*m*>$0x#4h8uya*Z?d;Fj5wJUlEN<2ijK4CqOhIVR>itBbyBPkt^Zzs zM{vm7C-X1{r-uMX5=QY&vVp1%@!{hrt0|9PLJ(G;;Y94kteyy4{C6O1x~n zim6ibPp}m$Rnqn?8kY+>)4J)Jm-Rc1!4;xKQ5=`R*k6`kqLT-`N=mUGQhqEdhb`=2 zUp!MQQs^?XJXO&ouRa3DGqzqa`!Fb^0_+p#R3n_I>jlYI{4Y#GTKcpGRu+H0t`TAO zO9!^#zkZE?YWC;r!MkuSror8n5|{eIWVh~kMeYjUfn?$ncv}nCfhzcg)Neo!-gD2V z@Ea~YBwa6U4M7EjWpDACp}^7?&aYe#D^Q$s4>-@ue_JB~eETS)+FJFnXVB0+kR4lS z++V|bSnR%HK?=e7FpVp-&M6Jw=Rh7owS}Y9Q9shuwSU!uu7X+g%l7r6`W|e*F#!@w zAp;cfP>DIb`-6&ohI;3=lqa7M4?AR@s20bemqDA5h`ldFV-Ul?4iu_#qMag41@@_` zgoM?lHh)G92_u)}N5>caqS5nJ`8F4zWXdMuRJ;-IZfl2sN7u`thn2=31>jE+ezS?% zlzk#v8*`IZ$LQo04Kds>A#X*KN;41wfb_Ev-NXd5l8MK|5omz zm|xf}W>!*N+${vmypKLQMHBubT7e{=U&hUER%|3g8NM*PE`e1Te@AEk8xr{!w-O6E zL@PHSK^V{)oM@!m5~cZN4NqxOhsW zwKh=wJ$5z!S}F^3R$82drb&^$K=yuP#zTT|@nP9o+#+TZ>9&kIZY}!7^u?~a78?0s zCGug(;Fmk$(nKqXoXr|JzR-+3jEES}pLA0$%=T&*^Y0b>fLgt-k^V^bwszBwvdS=q zVu+Y}xEPJ1`T>Pg>vf5s3G9ZkpsMXa{^LAty;voLO}(b4N!|hW$76i0$XYcBcSlkS;JX|pWX=R>(x71j4o$OV9ugHAoZSo<5Oz=+=MuXf z8~U{UJ1Y7YaH|mB#Gx3CE|fP6-DAh+{2Nk6{j-1=ktYZt_3vXH@}jtFE@0j!#{1EEaxQ~7-MhtT_m2Lm3<*LH;=fU7Uv;^K8obvNI#0iIm*P2 zJux4fNLtoRKPKO}qK7FJa@Lp@vwR=k1m7sBaGcdow81pUc)Tn|9*4E>En<2M&iW0d zERkHg5~nm`G#yV_-Eaywq$y&MM4dN{FX7c5if#tXT~YL&W=?h-544spY=R43CC{f{`y5k4bhtph z5gPYxPw|a#XO7Vbja9;%@WPVGKG$dqp~+{^;&CjG!)P=GCA3E@A;ct4qUPkbhaDc; z5*gybdWCB7577PP(T~yiC9o1gSlkG5&<1+|7{fIw4R0g1sgp+>X`m$pb&?T=42o5L zk08?iP55=o;f99_RbI$ZN~kSa?tu#18r?^ba^lM8QTkj1 z`y|kF+&aHEhB69OjE^9R#FeU1bHD*S5@+~-R4M?&1OCrbJuWb|);w#P&4f}|Df>-V zbwLSrbzDK3{+=nev61}`2K(FaVNa|qF^H+A^Owo=W{C{W2Dn4*zX7)z{tr~Zqsrk? zW$>s{xLOIEvjmR&?!SS4H(ctK-8Wv9DOJnCQ)Rq)6F#cw=PK=({D!tBA(?#3+27}x z-GI~&B4*ihx0*X6>J|i$w4coT7oDj639W0a4n*VrH{zhS61N_&ZjS_H;b9M<7)i|q zru8$?Iw)ZsH2!7wfWPQ~x9EW9UvLo}u>L2wL9V?ALdTU)wD zPDi%YPy5Jf?5nTB2@nen^EQH;IEGH2PXqzA^EP$!jds;-F-`0YG7hDDHGo2V4I?MX z`gsD&>ZhvwjL_;U>^x}-ZCOJ>cIh?~-kQWh{=j1>nUT|S{XA=d6e@-r5Yvm{8#UG= zirW24_7VH;fgL8558X$6uh2DSz;@VH503hi$FNDX!zYw`xIsiN*eN|Jmb5-pxxJ;M z7`04GEjYtwW_Uq(AJ7b5SN7&^@byTLTkFKhSL0ZO1*2nXlNvHVY<%$Y37#5e+z?dS z7&E~s;fD>{Pd{F3#=Zm0aoL{#UkcH3R=~(qV-CT>_@5@5^0jCQ9BP33au7^M4pf#; zkI*LC=fF8n3A>J7N2c&!k5JrhM+ZS$ZwK6dk1XA6I|gmG-flYu{SuYC%F2hkbO$W? zMEyXL{h&+c%`VBH1xohWVszs_f4l)&ZtM1o_v70z-&P3v#ViL(%D)-X zKHB2=d6IH^IpTe@EgAHSUJjIyfAdM(xix>$O|I^15VZex8!u=E-$I1ILL@G8N3dVo z4n9P13b$eu9=DG09p_72`X<;RZI?Dw^$QMW6dtu!@m+KgZ5Xyb^NkZpOx_XflU9Kb z;hs`kF#^Y}-}uG}B$E8Q*v~}tFQ7Uo6q0<0^8PR<`6rU8l~+Y*S6x1C8l-wpdvW;o zN^JG7Tp5zZ{#Oj(O`42cRrWa6KB&UZhpqY5qB~=`d|1cwa-U$Vr6NZI9EU1y;BsON z^*q!exM8-8v2m&|5o5+K4t=&+@MmT?aFYKv!xa4khC!H9@6;2yE$c&GmMyu_YZF#` z_d|=aZmnC*1S@}-*h`y<%L$>6E!vYnt}(C80cIyp5)^_O-&EamcD>^7Iz#I^^T_Pq zEy>ByFj8ldpX4sBLbD=92NQ4QaE&_Z^n*NCw^+Yr1l)04(ju~_Qqe}qNpQ%^S@)|s zGb`0`Xqaa&4aGaFIAtN^OzsLKe<7K+=fnia@H?HQhH zW9>(_W*7Az{EZemtA3boCbRsFc^`hkrzDxTV4>edHb~WxgT%K>Ol%Eu>UP1YbDxJC zzgst*)fr!(t?URx;VhdN{4`f!XeJ8^oiRvJOZ;7D#q~V93E94^K&+RE1&4x-G7-%~ z(?`_H49Xp`(?=|gQW0K%*A+Xg9o)%z6AA~xjS?}GR0V^|4(-*L(`ko z#`KD@s80VbX3;9@6*)MPYsMFrgGEGR-mAaK89bOJFM!y|S{g=ep@ zkk$fB;aAk-LzW+LKgABXZO%NefA^dk(C0(^DNKOz%?UFPjui-ZOx}>F4@N8&R!j3{ zg4y|jl`w9${31c0-Tx|~@+*hdlD}H?O@uwd4W)H^I}Sm|Z^X!W{l^obrv})CWQGJK zc@aOvNp}0cplMoG-D%g;mu->a7uCu4ns(8FcL@>wfn9- z9<-O;*y(h~va4(7k(bLWvR&f!sWw$iN-iF}402=`(w@>Ad4JOIt%AeWbz1j}pZKAs zhXK{@%GD2g^`r7Hn6W*8ar=|ZZ!xbFT=rl)#6H7=ag{X&%7Ds9$hnVYp!bLRE=>J?#OH1(L_*J=(Xc$ zfXjD~qkF+bDdx)q zFOS5454;=nfOG3qSsg9Zsbs99DrW({(<=r+be_Eu`SLtw9j*={CU`Ke8i6Lp(%s|e z@*oZ@^T6)4t!a0x)92RuEbhv-|D=kn%8IuCLdLIbDJnca_fYu6!aE=Rkc?*Lqs}qYMn{fR)s~@N`{Z->x>&x zj2^&k$t{`^Gan4AXy^kxLTGTF^N)T>4Se=cuuJB58Lcvp+_G;Bb>h{}9UtkVmJ(9^ zi`l!MO5%Xf$Bi;7E3*iTBH36!G3U3{W!R`lXTD-nr7PLpZAsF&inP^*I~5yIMxUZK zz&>ccI}FFX>e3IPyeoso&9P0+8D4aWUz~|h zDQH|vRwJBCd$1VER-bgOPdP_MQ$O1#F7=O^l^NJ$gb$N6i%KUzCT;KpW$xDM0W;B=rKOlkY$?Bh&;?SBsAsyw~Kr!Q{HsGWbM`gEf&uej&k1=xOn?M^q`)=! zGl`x4i(2}2Ab&p1afs5jKo&1LLCl4EB622xIv1xX*6NjD9E8IeW?rQE$*9`v;Mdd1 zV7x`-702iTeIjM}QUH7+a!Fu3!bXlW~t>LQ2E!xI&bO-4!ihM(Wm_v>RcZItr1wib<&@~NRA?h%ID?qFZV z#uR?A`Q>R}KGog9Pt1?UyW!m!JXLsie=ND*phT*_E&dzduT!z%*mbqcIlg3+5NvPr zR{Wkd^VZY8T&g1sLqlSGe0J3P7%@?Y#>Z!?s>IXkblV?nS2*6+G&G>N@%y?E>#1D( z0e7CFw_U;QAl#at-k)quS||8Z~JsMb(Yftl>yrld-ucUDMw>XX;(BXdyn~)bHr~u$SnlfDyOom zoL;rPXt3uQGyMGU&|8tS1B`rEP1Txut=&tp!G(J6i}LT>RPWah5gbsQi;&;tE3)V4 z>MJ#}N}y;MSD-AqbN)5KOH@eMW4PQ=*h7NZd z@MtP|(Lj{}wSWU09Qj8Q1hP1)|M*4$nsWCT5dEk66R2Wo? z5}Y*OOkHK2dJ6fd+U#GYI-%#`5K6s{$R%EgK0QVkw>%w~iB=Pfh#0VJ!%MHU1U(oN zgja{oP#+AE&Nvc0s3a8xQ+SzgDOH@n%kWHU+zaQd7t!2B4iJ(gdz`Y`Xk^jcN9bM% zU%C84wb=x{15V);gr$M#qJBIX_=8ebrM&cAS+h03j^6r{;NPS_Sml_hU+qKPF{0+v z7DD}`St#ij_VW8Ms$Pu^TLDbsF(`m$QSkvXX=Y$-sm>2=ZPHD8Ei5%rSF0d^UYgK+ z`*e(j;RP0b;>APHp&!Yjt|)g;Y?WyFSI8Fn3;trpL~_hu5~O$=v)rH-%AZ#hk`{?W zY9us!UJu?jSYL+F@_i;V=Yb!adyO;dTzp1tRVdkWACA6eENonVpV?PezVYz7uBgl2 zAvi%2rc*PMr-|%D;c&154C?;49*`_+)}rOkn*^Brd0)o5~WmR@HLue>LqnQfL{)8dTyGYmDp z4JC-So>*cQhMEl%=|f;VwpxEe0xT2ECp>Da(x#+JhZ@gG8D6qVE~~w2Ox|+<&djLT zWlcQu7Mjg1M)n~%IqR(@E|DNh+> z^Hr6SZMZk6ert$PBRQPODAh8tWVi^+H3l63dHuf(bj6+PR#gYNf1$E_s=fa;i2h?r{KtU=dy$;;e)wh)TfVXZbkk=Aj?Fn6KbU=V-H4!7Anbu z3z?ibY#LbbjQfyq+5QLMITFPM5{|#I;_l8M_@7w2kiMz`%6=fj1Ia!iptsVb z8w?V;q%eHFZT$D7&B#)W6C0f+;XmgT%U6`Gq~)r|<7sNLq1(V;bkNU!P+9c1Xn`!Z zxStc5&v8i;1zOZu8Ra)gq&?Wo+eo8TlYFqWO`{P&HR;d+pwAceVn+FW5)?g1`%C$Y z3VBIu6gN@n&!QK9ip@PrmSok9RN7BcV<0Uj)9XHG-SvVw|9+vRq3s5NIsffSZ4AkF zj)<(-`cI=TYQqjnMUi@03%R@DD|Gq8JS8r2ucN`s+E!Y@7_)26-gzHQk3N21x%sX! z%fZh#*^u8gUU2hT+YBLYs^{8lg2DMto;!&kOE%d`Yf>-MyY>QPnf$l`#(6>rL6jv6Nl{`>b}8uY~se>3fNFQL-{s6VIXa1O88;Cw)3wSl^9JM+`kW9X4H$L z$&Wo)Wmj9RmI%jOes?m#y`)@e*5sFtx6xn3DsKcHqhAv9c!~7Jv$xJ*iDzx7kgf7| z<{~bYp!f^Um{L7_lWUmBP>c<9b2nUibma|d3G|rPOjvOpOW9hvm-NAsU(+4R=z*W7 z$;Goaz4CMh^0mmvuxC#Ni~W%fj~RL0}hHB9b{A%_&#vJB>+3XFuE z_8C+0tRE^KYYrdiCOnJUTx_R)K64Fg5_J(-h~H_?74Kix3;O*~ElU*T*(vtugxnbd zd+)b7n14dS9`P$ddPMjh)>cPMx8$t-M&bv~h#X^fQv3zEAf^sB+g=?nkuy;xMDQDsH99bSSGQSP9)B}q1DQ@O}NdJ zz4I)K#{VWp)ow*=SyKB@d?fmUiJv?7LB@;BYWw?QTxWZlr7&_I(pS+Off@S0YO|g+FGj8D8f z*YzfDtsy@-ckA*;M+1^$yfwA(q z?^r@>1FcB$Nu-@eU*<_*DgdrIInGpcM{sV0+V{#=;@6RwcTmb0nLTodzUA)c z6Y&dk`i#pT5gyl`1f~+&S5PqrtOH!iI#2TJkO`|Nd{6Mop_cQjB)l8zwbB5t;o`m^He?dWF5# zBe1Lj?oz*!9NzhO!ATWbf(T0$9Hkvi`4leGUaLxl+|#Yrw4bjZSuDoSer1)ycQEs( zL5>Q!+jnPLrJqtKPvtac<2)Ts*j_77CAQaxG+oTYU-7W==X0J4KWwX&$*BK%LAZd( z9;xC_F|uH9=z3-sm^pqeMAPxgDueIf^B~Gxd1b^8pIj`(@0O&Y^Rz1B>m)JK@Mj}2 znx|VlwlLE8BBVd>T!>8UbxZ;v-JRvY(#iFCDj>}KTRhL3s88!J0B@;*jr8?6- zn^1J>Pn*zmrp^3KkN;SI5yhWYl=Tlnby)_A=quD&OsG?B34`;d1HR;4=IV%Y8#UFE zZY3^mk?BJ4HCgStZ;zU+VBsf}rKY6k`K;b-Gogm4mc(>6eGXn=KR2 z*hQ}9=tJnxi|+Z07zKAVdP>!S-9j~biXkPPH(594_XyW>laYBLqvqt7wlUArXoU2d zQx0v@QAsSu_mFP`9D^FM z+}1yTV51XZlSwcJuS&OR_*HzP5cIe^eSO&PMXHXv5!cfu-N#(|wiQGbMSbe}fH}Q$ z-Of2t$0*tgmsfWbA=$aX*c)QI>*%c-nmS~2Ym?nrZux#nxAL0c#Pa*GS5S8p^T@ghG>AU>Rj)36}w{p2?h8li6X^Jw67P z1w~olXc4j!bN}713I$I!28b$Rw?d6Ue+c33sc`kYjtd;5UxC3@rcm)LtrCv{lEzh7 z$o0PBc~b?rsX{CFxkXtGVqu@|oL|2tj*aKVGhfTk#%k-<8TuMxS z{5U6UuQ@9H{R7?a9b+-hk4JvRUCQ^m>lLoE-g|=A3w|H(I`fK|=2Fg?&bIt2f)uo8 z`EHwoRJ$v8_k8`j%->P%1J0qh-nm5{=R&uDPSfBjgMEF!Ci9|&ea~yMPVO-Z|ZZFN1 zIHttYYPlOtMcyHLk+f((5T_F?ed^;t*QCq67vOylVl(57$0u_#QQ>jL$%5yl)p+A* zkrR}#-(Dv(*@?N&3X^7F!x9#mect?P9!eJu`hF zr+^=-rA_gW_c(A0n^0Cbx8Wz|@5x2~k;E*sR(a^XEoksoFS&u=rJYaY_n0$m@X)@| z(!|@i+-LBvd6-9l|{-wSGbdxRu1+G+0Un@vO10d&~oMXTUo=S#v|?itMi}V z%pcxO2Hi~?uKen};1QMTzQ~#Wp0`f#Cejn;YBX}^hN)pU=#8A|sPp=nd0=$Ya+{gP z+bnx!b|KLapXHq5-#(ek2WkKwNd@gm?@#qf!KKFij->)lMeSJfe-_kb@w&-+Apb@w#~L#7ZY-{)&~A& zXN^7+AFerQuZ07%2i~dQ;n28pyYm^j;`u`)-Rov&2bDgpg|jFeJ(}boLp?=mZ;*W? z${*Oky}10A!eYeJpw5$BxGSP)q27~4stY~)$Jl(jbX$IFh-q85L}Gw1S|GqigUyw3 zAm-Sk8DcZlpLFBa>@i#v{OIjSvFjuC7LOO2Vu2mC!)3vPAnQfRw+4x1FNdp!$V9a) zoq$38=}*&T!UU&m##n~(1|`;QQnu$^8}fnmG*bc1&xH;KSG^yufNU1WTDS1TG!r`0 z{o9t7ldOY3F^JbSJzDtkY|3QOIN8Isq$|FfqV2+KUkX(X`?=lKu{imNZe24Fumalt z=8L$f&sB`b)9ws8q=%gc#yQGmv)aoIJ9IjaY#)Uq0Cj9B{Y>wJ-tcCc-g)dRqtr9i zawcmH_6C69FMiZdu@sCAT(9+{Ja^7L3=U1|d>a$!v}Ej1e=Bw{a#rTKMVh z@`x8=WekaEu%SFBs>eK^tZ&%k>=@=dn9A5~_{rB1`)WxKX|ryEvBtIR0bAt>-UEkr5&S<9gFvs5g(<|0pIktS#$EYY`5!KR>7md>V z`Bb^vuRysSA5n{1Eg9d&3Oi9@#KPxBFv`#VdR-$tc4JG3-O)BggRK~;2{TpHJgnSQ z{T6s7cwzk50CwRCV}M;M1#tzjhz}F4&hV}kcC50ByRY-Y@V8L$#;_f)w%kguVTM)r z#MS;x?D`O}Z*e5}Fyps!x->IDpgHUpvkdvD!X(dI<+FfijMf%BvB|pSJQQX&IuDfV z2}Y9kn5~6Al~ve^qOJ*|oAgE;Kd7&s`o2x)-=@krjlWSbW&L3*;}48?co|H^@>c(? zI;q*gPsIUcEk0t)+guBWk97F`^udy`BnYh^CQE!hZ7L}caH!p?T1H6F>bWXEDPaQE|Wo8avB_*+iVm|L@bzT}cm zl_#6@qVk%=-yI9HICbaN_FeqCRM!-5%{}>VS4)qI@>LN)h04c{c)W?_LkGcf>M}#P z`36(5kbUfPjPvh~lIIz7V=PZ6bcEqs-1`)d=AMbBTvzVvBWubR_N>yglmQKM&I#?Q zv7kw?$KsUUDIDB9O1U-{Aex`dqk~`8UHYY{ONY0(OO3biuHZT;lMfP`d9K@(8u($f zWY^Y_M#fd&hoVXIt3HCLDJ=QtbE!dJ$Cl*@S?zCiQwCQ#dhhTg?DLmZ*NUVO7nQdN zKp7?iP!Wdc9M$O5q0p5pCIZV<5$VYlCg|Lo25NPxQGn$t5_IL>CxGQXBO*krvzc;rBE*NUEcPuBKlEihi{g?f6O0Yh z8{OQ~>&ZRu%A7RxwCmrNwbUDfU0*i6&vRzen`%7vgrujjEgLgbCmirM^HG*V3@R%f ztj(Zi3Z2<=@qXTwQs;~iz`jg%9>U+Kv+SbTZ*~RE>7B#^tqmb5l}T820m8M>rC4^H zb~5OV=-c$Ad1v=%(V;Bh=PGAzlUEHpCZ~hp^Q2DE!?my~`sEB`jdIsovFSYfZw-mY z;N{9{$K--5G9#q7gTnH9VYJAa!39OeUXUNIs_OpAL21SH0%GXL2_m>An4b@ka>k@2 ze%l%pn*PF%cDK8Fozl3wXq`m8yKZ8U~P1m9>GgqqJ@40@Z4yE4T%~()# zosLX{uF01CFOGn7#cSdQsft9Qq9h_P|H8LMgYR6E<+Glfr0E@y)Y2|ZN&O!zd>Hnp z3!@3~v`|+2;HO)HX(6|+fF`#3?@Ht;eq7$LJ7bQ!LyM(Le)OSx=QL&UTrn6axXK(f}G&{ zOLDEJib446vKQmQ839x7l_U`8Wc$PI7nuQm!o}0+Zzb&RxhHrFQc#)j=^}r}sfY|4 zNWw@G$d!sd6^kR6zgC^s77QWSd6BY}$!m}ak*2S7n_lsrnMq1-^_*svWC?@4vR!Vd zDz|{Hml~UDx((nGk+uak8$!bR{blC?&2DkImXS+xdv8tp+mRN#)pmDh(vGMG`(%)a zVL}=_ED*t>@xpS!@gtY4$@j&KTW|9s%0|!xqj6v);w52QNW;s4Ca?&%$>+xOu9N-C z>aE8UpSWl}WlF#qn+qip^=+2~oq1y)Y5ijIU$8Y+%Wq{Z&zINbv1T=Kb63z@p@U0?k%nL`;36}^;(fCr~Uiajk8%VM|cz3t(@`~CtpZQbv3<0 zUOe4IfT-A;C4h(7&TFl+p!Eioyn2zDy@y%X_p?CwEb4|Ag~*^0FP*eKhkg90gALCT zjm9#~nQo)NawDb4?A=AhlAJBDGT=9lG5JYsR z`$i0EJc&mcW{kdp}D8R$$=B1c4ncnKA>J-9&ow*DF=>8`2Li0=(^+o0dSI&LjV8( literal 0 HcmV?d00001 diff --git a/client/public/assets/fonts/Roboto-Black.woff2 b/client/public/assets/fonts/Roboto-Black.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..01acfe9aec6793e6597469f8b6920b2ec6b97da9 GIT binary patch literal 66340 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

)n_xdEnrs+aWmg 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.pm2CI;C+ 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∈cG$dm&Ev>2$GSOiCR~q; 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 CBDCxP literal 0 HcmV?d00001 diff --git a/client/public/assets/fonts/Roboto-Light.woff2 b/client/public/assets/fonts/Roboto-Light.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..580df9f7be7de9723f741315cfde6ee5f40bc3eb GIT binary patch literal 65588 zcmV))K#IS2Pew8T0RR910RS`r5&!@I0=+;00RPJX0RR9100000000000000000000 z0000#Mn+Uk92$NbfxJu{tV{-A0EsRLSP6qX5ey24&@6`WQVWzG00A}vBm<~81Rw>8 zcn9Qp41zjaj)Ia5(d6#F*0$OVrXcj(wrT@MQH8pKPFcseJb%9sB80DKv0diYV}cF6Xz@*1#tHiLshD zXH~Cjmr^PsH7|CQ-T5#fE<_lk9pdJ*ZJ9BKKEzn)$V9~2 zYV2CgsFK=ZFohTmQ8=i6p}mzo#ak{JL6o3ReY^QpxSv3XB5opa8) zJkU07oV4_WX~*~YoQD|6bYTi2Y%$Z}Nat~gU?dXzuy!FPg39n{@e{;Ayn79w`e${k zbSvVRdK5b&)bO|Vw4waQV4ciYto2i;>M6n`67gLv}yajM_t9}P!OsJNnvkxJdi+K#6P~Y$OWY5gG@4p2C z2OMOTbpZlTL>jRC>V$3BG2OqnRpt8#nLhz5vnsQ=dux^;w(msL0*l*}ypE73t8L*3 z?Xd-H5rjV%KG|YRu6B@gE7$hQXep&FQ$Y5TH56rvj9G@r5Jf~c_=qAXOHjrxh1wQ` zGK5`Z%Ge6qg@}lNfQpE?crbBl(#dOeCY|nMAOc+c6ci$)t18oz)xmyQ93Z!K;BKP0 z(2a^|ZqO7rporqc1ulkwW1%3Y;2b!{Ofy5%-m+|IZ5vkKoZmOp)|dx3?Z?b}=B!J@ zo%eRe=v>H&Qn`-npu+!5jLvD-xl%oCM^}F>B^|{pNK##p5CRl}hKT`{oxMx{Q)u#t zB^U#iCB^%EDLh!P-mu?~vl6;`z%V0M8vT~19gH&u-Q{&e7 zJo3ERHD45|Awyiax{fGOGQ<JK%Gw6Jha&Dv>sZ&LVXRLe06nGa zv){}}2c+Hlm)gAl%8{J|0mPUQRt^*cv3i-a|G_8;BmoftOTBxgkAE3HtZX5$6W>%x z@psf_{a2%*s-eT?oBBx%iOfzWqO6Yus0&PP$UMbF{};fa6v`o9mdy6aZIKeqFX z4aj(GLKe{w1}LJj2qnk2y&n~^yC%U%AuHAIP;S;lFllxRv~1G}G*Ft*ptiS!ilt2@ zX?@LD5oP^(V$bs-XZrXpualqX>-?qV`TpGz8p>7S95x1a zT7!_-b9Ff(L_L9!4R@96|(@)^0ESDPBSTzdA{Mdy|v5 z9~E%};tzoX;DA~lFCNA&6Y>NsS+cbl0&{BuaKEYXP4l=kxyDwM#A$8yOR0DGI1Ydd z-~xDh+)M}CG1VerYmmmBmJv?BQt7L*WT2F&ZpQ7S(V8N61&oe(Vxogn6chjfJzpn& zj)rb3k`$;6Rd}<;1wW|=p8j>dJ%K@z?JpUK6k<8a0=rwN`fZDud**n6>~{B0A!ApX z8cRcIp}|hHmCURk<{R(-_-DWI!+N~6|MAA-jWOfNEHX1oQriDFEv56V`F^8Y&3mhJ zYbzrkvjN*@bl52GP-p-fjb>IeyPA8_7Pq}~>AJM)R!~Yqr4BPJXPgZ}3}G}}$ThyJ z8yEs0hDWaD`PqqNj3eiax1n6Fy-e1G&SZLul&vn3Nkb`Bnkb8vB?kfN)b(E_sX!A= z^r5NAFm|2ndqE^Spp=#3yF_vbrG(clE+9=jEamyKumKZ=wKXHD z@3tg&JCEBbedlp5=S*#e+zuhYwUGhBrpO4Jp6~bB?2L=d8MX%DkY5=TPUN~rMNJ&+ zHnWAQbz}wRXbIT|V?h z<`J-Jet^K*1EG*^)-50)Doz|vH0ZbZ$bkrzyl4Gdd;hBHiqHG^A_8uou8f%i>%oP~ zlx!I_W*X(gKeoGbAw)Hpf-R=BMx`N{w8m3jrpy_p{Qsu<*4{gVp+taVaz>7wU8TxJ z`36wnrd)5+K^HT+;Jg8(4}e;m6#c)F1DzA!djpDd2l!tYO14FZ5V{TN?^fG|Sd`n8 z-lE$rtADmy7u}W%Rjy{?7Y1pl#;W_~_=P;BcTveifshWOVq?>}jTd71ha@H)imEsj zkOplO*rHI8cMtvuq$~@{3jfZJPxoBG41_G?A&jyJ)fGnd$5(wPy^;59F1fawvP%fV z63k$x#;8UZVT2II4AcJyvZ+|7L#8=|A3`ui7$XkxGz?%)CG3E-^r7QYJRK%{9F{e! z31R@-mI$r`2mx{Kp0)Y#Kj)hRWD$6?g&o<;h2Q|x`hRadWNP(zuVm|0=XyTgG~*Hj zMu3n6Y9nb>HpiIeGWqXXX?LayDl+CB9P0NHr!_7eVS7(uC+rwyOT3^>o+`U?(xY$i zWR+b3XogRR4=&wS?*6gw{x8=jg1!R6%mj7;91Fozqy|80C=N(9HwNUa)`d8Gt^=ie zgdo!+A`t15LQn=)0+Au_c0>UNgn{Y6axhjyu>s!0`Y=Rs#bU&X5D1vc$*w~ke&i$u zB4_>k6;L?uA(lY*Vl*wVgaYUoP;zCTb-C^U?xJ)07LfWckRmfMQwEqj7HnsQ*3JLQ zxnY_6U*skkre!;>=Lbbu)s1GW-RbuFgW+gAna<{mzms?-{aW>~FG4>{PUJdDL~JX^@u4B$Wl4J-&CfkI=jI6Q$! zB2%a|v~=_gj7-cdtgLPA*|O&#AjQOKmKSB!v|T@p)4Z(Pew-Hw!3c`s1WD2JvTplv zI$y50`}5@V>|9F8=}b14FBD7VO0`yRKtMwltkzUOyPcX;xNE+x6o#FKy8%I}+4@qG%<3KsV@p#;FT1jJz%_l2)de2R6|( zP1%-UkC;SLYI^M~+hd#Tt`l)K4(l^C*RPl1#iA94LQNz%BhKOXg%Yj%SiHmJB$*wuQI;)!RdcMijF6K;z7C?tMBeA(v!2MtBi!_^YLH1H!=_Z>a{G( zvCB_4IoXzqC0%j|%jUB1hoy%SDN>V1Y}(t)wEu*(@B&I1PL~_|BAM|s(`4F!5v`{c z3J-l`LIa&52|swx5BKiP)9SlzSAOrRzM z3Y;}nq^AD=q1p&Q5Pc6pq*dW5gg3h@1TEtB2(#DXO9h>ph_O*iGX%Mn05_pMj?6JWBnn$~JzQ?qH0_+ zmTi+sWXD;WEuCe$QQe9eoiSL6t-@Bxs%#AAEF z&>=V!hvqmrZVt=gI6Oz-NOl5tLUtl{qITkT5_VGVWZcQQQ*dYMh4b?EB6_Lz*(a4g z*@7XAUAZ$g&Ba|2xD$!MPu6~VR5^L0Ig;P!ZA>%IsL_+TJ5jAkt z1W$>8fVU2dsI5@1OTV<1UUa9ASxTh~B1=eJ38F?_HR}pytV8Io@>~V-!o0wEtGElk zyQ?BsA#!0cjCkfra?A7LUSqSATaCXY8LH(%8+}m>B``98i5N7P08|j_*8;L(a$rJG zMKGl>kHM^ms(^|>OF_g!#D&I#mH{gZ79W~kAfrIt0>^}1GVB1@fw220-2E5sqS-e$ z+&JNu7H;#xZGN~d2)Bj#eV^YC`Tdw544n!wHDX$U8NVn!nFf(TfDju z5@eFL>a$mzr?tbbgo zIm^^7SH7cKufW_f{l{%u0FAe9;}6qs5&o9KN52dMDMVGIxPCR2sZys&+o5{ej#&KD zx_>Dg+BS%2n5J>gq3IW~#dTQ&7E{mV$-O7wkU(=oK$PDm&P2d*(BQFvAKGmK1A4J` zHte{q(&Xhxg;c6iZP=(6#!Z^_${Ta$Em*Wv%S{2thCBGAkaW;7toTtoEd(SqW$Lt% z`AC#3MS(i?8gy8-X2VyTwrtl$pnlNL|f^FH&8dZ0!s=Si!;p5xpSQ)?? zHte`zsZgm(wPB-P7&mFwD{su1w_wpyEjI-mlOi1*!-^lZ(?UQ(Q>IQEnU6%tQWU6D zuR(`ZYc_nfY0Gx)wBv?_D?%F;Ywhg?E_K=dMP5XMG!1jsU(>rP?Mk9wj>HyTJkeqS zK0L^eMopTrtK}r#5s(zCT$zxSmqP4j4 z5@IAKlw^7@O6p^2rTVXhUT$$_z5bIBVLw@w(A4rRs9=#wz|}5Pqtu#Z)Mj$Z;9#HC z0mTe?V*sHn+73yUEk~|A`6z~rcy7#lAAGD&O!c*~WKqTN6L*M2()5{v^E3?972*M8ZJD4M{jWTVAB+Hf~SDt(nLq|)DBAt=f9Hds~oc0A|N7&ZHt6R z>nLXNSd43M@9xoQ-_NaHL$tz125VWKY(-2CbU8#$WU7gp^uo*v)o;)+jGdFK+_Ph{ zUNWG-0NOns_y{o&|9B_zQFEcAtzd^$= zc22Hx&u+eVZn5RH;yBt`0Y4H*6mTHKl&-rCPqFeI)?&l1I~l`yxY&nl#Lc!|Vvu#> ztFUS+P^n6F8YXF+rb(Kywe&VE+I8scU3Td1!p5-hxF-wLFt!Kb8vy zw&R5okRoszDq5;RgBBgS!_bb$V4al6gS(_D>6y&_dKc`rxyJk(EVX-gk%7f~;f*7G z7KRU|JxlH`ms+&Uy5$;H)KpGV6|0uAqO4)vhOfS5^PKP4$`8g*JMKh&CDwU=#Y|?w)_p`%I&|L@9tqfz$h8?$EFGG;M zhi_P>LS?E@-P`1}>(JS|H0jQ;8TBILm^AB^H|ES+uxP24n*v=$t{M$mbm$I4O^*@l z?CuVkA}#5W%zm3Ekpi!%8Z{)krWlBqCJ?F_5YpB|#No0CCC8=;#{ijlR@)Y@_p%-&@B*PORM1&}D z5|KJZ267a-u`gr7j5!OoWp}KS>9pQy{TnQ>(t|Z@*m1*Bp;DD0o%Fp-X$G?EmSc3_Mj&Inn$C`0$E4#CcBgYyf;_F}3lGAujlQd&%>0Myx{;C-C z!0Sl>DFVFC5Q|Yij!ou1vZPWY#gou@#?a>ZEKtbdDJaZ4eA`B@kkr6ox-56_3m@#L; zmR-+)C)ppG3odyImKlZ8W5!^4l!{CxsXwJbX;#KCo{1Y%dChiHc3U2mp)+F4gef!T z-9l=1>>cOe#BhbD+{B$nJok7BnYRFef&{zfx`-ZSd^bhAwHpJjlHjT26)Fyoh?%>n z_kyYZG2&5;-DUio$;^D@1J?4r%eIf7;OdXgf8qH7_G+E*IpSwc6J{)|?r!^8zoc0U za>awHo;G}f=SoymBoa+@Arci86^TAHLW+6m5#KoYS+hj4csDWDj72hQsH~UeXVkAL z{3&@+TrZEmKJSLmYUp0f^|s?l>2xw8R|;*t`Y#O|lLESD!T68Ur`>45Py}OX7a2~> zIKy>IM&cucZ>&cec3t~!n>it2c9JQkc7R22b(G9Kt)3F7o_}B%*KYDKos-kUxgB!} zH&Q=|!Uv2}cMg(J{o6rKZ4lkF;T3Wu;#UF)3W5k^Kmh93HSwfm38qiS>|y&^ zx^l714uBLO)<|Qxd2WG)7Fk_uX1l_?M$MODmZ>1?L{3d<{>5-GK(T zjD)2mjy~4YLRgF8t*`k>mxX*47^;?{w%H$}j1M#PB{9^4u~CY4*GGgGZV4a-J?spJ zKoF7kVo{H!evd)}7F0(NgX$lHyxQt7_lig}`9P!;o>+ERp_WBwF7g$^i)3`k@?`fm z;g1~N1Vp^s5=lDYz;TC5_>W)*>dE{laCVGjUIglGNg>ib7S87;A4Gi&XD9q zFL!`Lu(R3aWEo?1G3z5x7eOkBsE?Rz!>&lk{)n{8F-!d{jnW!L=B|b&Qo181i&a6m z7Sp0mMhsPtrl!2KypXQ%h1p5j!}5GUKEfwH^Leih9!x-aCFv%3t%#hTX?3WBEaJI1t@5Y&6;5$W}MSxEgpTE$hw85Ub9>8=o{{)6q8LZk1{al`YTAzap~ z^YCp|_<6gyvd1m4N?rM?;?W>l6KNsJDAlcF3SY7S1^yL-MW#Yejb?9qc%@Nf1Ggw~ zd+wTh;w4B7t=FTk20m9R$VFMbgCa1Zh$Gt+36a)Oj2JlGXBEwBTfxcZO<>f0>irNi z_}b^-#4~|u;2uWX_a-hw$d}oEn+yKY4Fh;Bvb*Q5VcS1HOtyJ zkz*n*89;$Qb}$z*=!;`q9KHZL6qke}9>qBkh)3}yL#k8!O*yP+Gr$*;ZTJyKwv!zv zC%!;I#99vVi~WP)2%)bZ6JxyKGXZ|VurnM2K}4Ekq`pQ$AuTRm&k!qXm(PDpu}cON zcpSWMFu)1jD1>cOe z1W#VbyafmpB-l0AMXVtCF_qN zs@>G1Yhtx_$l|jSRwCx_jy34+v;hDB0^bO7762^Xo4}Zz4jaAxaK9PPq)eOj${Ta$ zEm*X4Se{$}00000z8w%o0N_#Z%>ak7v9aO7gXg~&p3jF;3`P}1pRgj8{#7Bd`#5c{ z7PB_5KFL1@K>%wran79abEu?!Bw8s|b*&b$VGJv?)C=P#&3fgH zIrA1QTB_wH0mr0BN5@$DJBC^5Ul7WVzHQH)?H`9B0Ms|KXq0tGtf^brm20)bd?l)nsRM2=yDE%uzi31?hz z#T`$`c;kaFC-;Kg@lO#A224sQwGr-`QP|PY` zDc&gN6!Rx*HM%9tpdk*yWfcQqTi|_lgb+iDP(&hnU_a;?D)0)we(|t`SLY|LfluFq zq$e|3$w_YVLkTrSDbAzN!w54aDNR|*Q<=J*A#4o0fWt}VS6mkJF-!TB<*Z~ipRoqyTQUiL4NV;BS$4jBbQH|(OU>c(gfLQ6&KuSheht}K5wd0E}G%W;7a zjNk-GF)XJWj^_tq6eoGnwB7rZoL)J8DMG1Ssn+TZsHmE5m{zmZ?sR*7WIHbQd_oxy z;(5QnkGVE>ktGVz#yXGTA^}{6>B`8; z$tx%-DXZ{9<}W~?FySIZOO+;F1|ETILWK+_i_PH)gkrfusn+WBMzhsscQ`q_xOqBr zPLd+a$SJ8(SzMk_gZc?##oM3&OQsV)LJpSqvMEp1_4-^g!3_jq#ILs`t~|6X^$ z#-n#J;=R6tN#}d)8_&g8r{cc!iyS^{@$vVUWoqdSMZ^)`+}h8d3?K6c0so%TzZ-WZ zM%f#AkA}kbS@OqjD|*;5PPku}bmtx=$%+|u z-QVDq6-mDJt|)$aE_8)%hY^jQwfKCJuk-LjBzZ-7o?0hhdF5e6*?Ui2?~wLh_pP3L zY$7gOwY-|L&~c-&Zxnt9_?l z%WDSofcN%0{yMEvtAlqOe_}u5OL==A1>Uyz8h`{a^F;;?t+@!pz)bak`q^t6Z%zJ3 z0)8tzwC1k0+ouAQheZ2v0%x*ciVI{J-b}pvuFiDewapUsQdDT*#BbJfmr2bFF|gfD z>^rRi$@U`g-RZx!8?4{;Zyc-hf)QmC0#TJWd3&DWqh3OlB zwSrQr`#SP^4*KMN^Z*>&S8c#`zSp0K;46EMloO@G|)9X#9>a$m7L z;x(+o;DGL$`ueeVhaR@_i=I!uCM4X4+NCB_q4D9-`~0f8cNJjKc;_QJ>LE|wACBes z{&0L=`V?=@`af&l{Pz)n80dfl0DMKx^N0}kn6uw*Gp>%^m`~8u5A31;E;J3Erv9~F zqnC>3dsm-=dzJ6Z@tuiZx0JszeEC$rDp^0zBNMA0(4T~bNm%%!B*}A0$-0IR$R#TI zh*AhbF&MSDQ4fPgLedUGCjse)!ys-96O&N~WE?>zVKI$QM?-Tg4y+QCO`O;tQ7-)q z^&S)w*En#GU*x#(i6q~+@Y~`Qr$ix0-V$|R4+N8WhR9a_x-3+&xS_Gd!cdveu(pD# zP_;N|*rI4ui;#51#j`l*j*FfU^oFJ{1pT2I2*F@zh9YV>L5)PzXo7kkQ7;nISVWB{ zsEHt^f|vWC#UxQ9uqe z!~wq~Ajl$=$y90@EuFq>RC34i`Kv%)HPp~pEu?jZdU_2E8W}Y)Su@mI$XZHS$yzJ3 zQM8?GXV;#22NvsuJjLOFP-&o52{=`Qu+9RZ)_~OxklF*QPC%$LM0FKXx(0;00akbL z=>{P621b2=&;TF}LO^%HX((6?hoJjlH4c;}!=>p%bJx4(15yj&(3%q@UhKdJkkZo= zZo=4+H~>ZmkX1Jb9YIumNNE6ACm?7Pj4lA_5(1insA+JzimYBj&>Rw)M?#CB^%N1U zz^NCIv=+Qo zVzfMz<0n(J;wk_*To6(|3=tn0mK7k_8YJ5Rx#419YA;xXb%SAA)q}R*dyTdNFa}b(_`TDSO|Uq$+c25`5W;&NfJ_WX_<^3xmgtyRtcdjR~f6ST1~CG zdJT;rm_kXVrqR;r8H`M37OSRaEv?$xb#&_L*3+x6AA+*k%R$yvz(XD{pC3V@Xbg+v z1%g6hk*HW)B1sSp4AvBxY3D-=i~SNjgzzv*RE8LdNT!%+(OJZjRjk>>w%h@U7j%4} z69Jn@s6-7#N2Zv_78|+ZB42zIRstswfW4!QDHm*G77OceaPNLBK+>#NgoWJ z%tt0P#KVF&tKrESc(ZT1=g;e1>zhW=SO1isZT;#pkI%a3EO7791}tS*=J3h}Zab=0 zM22-LTBwnVc!d|pw5u+JM=;VNhY~r2$e{%TiyS0!NRi_gIZ;vI`1hUwZP31~A>VhX zAA82ik+F8xXuP4eAE=!t$nLXB>kHxFO$mNXojzrqJ+tY2jz}dN%@iV+E%Y;bhFO7e zj#pYDs;fM;YKOHvc)NBZJzh8n(MTdg-1C2WYK1etcXX30gRXxP9E3gCyd`hri$x=O zRoQPbFh0ixg??0Yx8VtdFtA5{BNGvn>s&h{G927~w%-|rzZwt4BA#WP+3toX1~prF)fiOu@U)q)ZeK4*<26K|90~ zuFS1gj*T{)|C0?ogl`yj}rTj1xB57^}uhJ(&{w zXiHRC@@3cH@~GeN^g!o@tRq%~%*#4&2^ZR)gcc#fEEj7pUhyyhU>1Ol4bD?fM#jNw z<9tB3u^;bs-(C@WuqVW`hi?f1;)CiGSxi%I-5n?}`8m4tV))1a6rvN|*qmWE*#8^) z{AznE^|11UyxC~^%mOnN?y)NkjYe)3*h7c#h8k$RW7DMjh~y3q$&<~d2lQvZ`*Fv> zn8Q96>OzJ@bpCVm*xf`njNTlXwZ5{@OHAg03vlm`wONvXu*m0{r(H9=!Zh?MU*IvM z(ob zUbq|M?&>e&??Ed=g^9wD;(oPA=!StrqPqUeYd>3vzlV*KBlr!#xXfj@U@IDGMp^GBS@>KRwo zkMhgP#P}-{=kH8HAd?h2lM;3*Ey9@>d!jkf3hmz4fjcIlQRO+Ng96je!RS}Yhm}owMB$QhS~j796^OFH0{sY1E1X%tpFQYP=qA#(VK` ze4l>8=d6SK;}eVixq#ODj7w$iD*SW3B|zve@|X8{;UOM}#h_701l)h20Oxoo5sQQZ zK99>`vzQDzjY=Vth;lkAeC+o-W-}Z-0x#Z(e2_RAcDGlLAqf_OA{5%|{-Q^sqKOi1 zk0r6<&@nKv#AD;Iw@ZRVNs|3#oblGSj>y92;E|tiWvArGB_ft5UlG7dSHKV`430pe z&={;&1yuK4lvhyXf3mWQs#-p!@Mz~gs;b{sbUyC+ z^kUWb$7<-M{?yC8QjOJA&Ar;6i`{G0((AoZPy0)?R$I0A*XpRw{??oQy|?;DZ}-pY z>b>5nXVqOj)mwelUjsE*Lp5A~Yotc|*BtqOneE>--hcXUP1Iyf)pX6&Z2zm5^{RL4 zb^jlvHnr9kxm9oLUCjlfo&TyFKi(1Qj`h~C^}W~9w_Q!f*Ll%9Lf3XqxHB)bL4|&Qfjel`J(PvX{xj*$2)u>i=s-IA| zY*m}u)uGNYm1Cvfpy9^2I%yh=51TV@!J;M0_32!*;j2xs1-8Ks_znJo|G|FJ1q=wF zfB_Cfkg0U$^ZtZlsa&bn)YjEEG&VK=iA~{m&dzZsIB}7}a=a)-?MhV`3QO(SAEVuU6%gFJfBd;gBU`QNIjets%u0P?%P9UG6X~rCY@Tg5A14Lhbk8}Lc$C1@`!vVhJUnxmLy0k#5#xJ00Jmdd<{fj)v z`N$SCcBOxz;07-NiPF|6(O;TA;Vjr^o;$9eW9t)(1G(&6%;&5-Gp~#Px`;PV8FjyK z5Tm09*WJ@^8Uxbgk?(J)Y)7DP%VS)!v{`ywlE?creolt*u3)GrF)5UBrI;6tj}_W0 z9k!+#3)O}-t13S#DAV-ZXlAY>|2BSo_dCyZ*Io15UoB~{U;4jol?SoqA{2b?Jx`T^R{?6En)sIQ+`6wR&e9ePhf~C^f5C1SHY>xD3nz z-)OMqX%B+RnnxXOKOu8{?A{YbjX+JzSzCmzo{<}bysnLP1nN4m`}%L|YbY-4rKZsD z>$91$E#C^Q*h;P3DyFc%Wnf)d+B&qNYP*G0Ao|TnGo{s9jnl6+8`+@y2Y18#3WI^O5y1YQrnfhS{+8^-XV}28IZZJ(?|O_-{8)F7rY<-pV9aKZH?Xg3beQh#?bg_=!x)OEQItU1FQfk zP4a*+$ONNN__Z4#zA=4?rhRz;5(C@--SCeji)ajH`5CY@#}?SeypVB*1R)HBf$aYr z22l7^S+7osJYFOjJNCC%V7h6>dft8Rbu9ZN9XL)L*cj#xwRay;vdwqsH(eiiaPR8k z*4D;kuED>FTkzYeu`tki$IB$}mAQy^{^C_UP!Qqc@PiDG{ZUu#oQxp#%1aRlXbpA% z2vNon7S0wEL>oKxII1cSR{0-%f?e$m6O5$h?^syV?XK(}_!Ey z@#z*PCqfH3{sEH{0{`Wf!y$1`s=FSzZ;Y0HXo%JZJY@V0iYNBA$0?S}qbW+!L@iD+ zibRQDLgvpMje~G0265o;m|g($|34v_0^h^^{|F(Hn94;_sb=a<9ReHm9?-7;3=Dh$ zL<0$Q{43x90DyoWK_*FQV%UB4J#77|s$ESJv9cUS7!RSir;4!EFv59+^)X>Y@UVsm zwl<~sRoH-yq3sP=gS*$ZBa)R#Sq3{AssIs?l|9z|w8Ef@>eZa?P}N)*kx>vycoGU# zxHm9yFG(iz-%mPzr1OY?q)aO4Qq_wpRn^NdP(+^{70_qsj#1Sx(&vw~>73u=$tf@> z==-FMF*GJ4R*@z^Z8S^yG zQN4^>4I>jjA}eAwU}IDZGmrX20W1hN%B*}dh~0t>S$V$#0Jgnn1h)d^eb7hz-2LoD zepx~A)_YE{ik8s8#-qyU5rTQ8$$_eu1svuedHYY%2>4e@96GO-c_3cWyJmv^9vA$( z9q&S4KLuYss&qkRutNIP>kV0ke)et$Q71`&?JFzf$g5AK-Blt6i3jvAL}&zbt^{5W6Fha4^E zyCG9+jAn-3`{;`up5^kM;n#BCR4I%F_T{zc& zC3?6r40+9=_ItoRgW!>8K$9>vA&D+TevjZCOq-uY+*UDv9D-a(cL$&w;R5f$Rm=+~Ah7~h3O-0+|C)O9ukm-KlR!R3x2$vgbQ$92a{mua`ZBv|jHs zCCaSiP5!ho&O{tJC@}%kSyX8gPuTe`zgg*pamUrUUjgM`3a@9SfmXimM2TKrxZyT6 zsoi0P7r5b*J}44}&h#;-lzsyJ40Pd*^PDhto#+SO_>h-r3oL@G@{*!O)lx>tz2AR_ zY5LSR@qG%l#+^2-HRp`$8l%HX2Y-INoR4eWu5+5c00{3l9lHu`UamW>N}_z2oTr=e`H4=|2LzY zr81i=yMvF(s9NHIBEESV)R9-~I|;y-{XT04EqEoHv1o3MmwFZ&D6^37^1GFO;DG~^ zqcf?J&i&|Lv=23Im~rul?@v&*h29)&gP3YLF#tRMQXQm{2n*ZI6JkRG1+h_;37bbPaR5^>1fMOIxbFqm}?xn_t_ z#REolu0vDi&v@U6TjmAD|MK15XVb-pfre#_5?0m*Rg@(KhpL(sAz;*SMJR(gj_cur zGvj#Fr|u*?=>`36v~fXds7vAM)Qjd-DkjltT>gCJN8P-R5SjQg=v_6^w^4-UFc@wT zwW93s@@f_GiI`BQEs{o%QwmEzecUiPRh)Q|=nJR(EnIy&kqJ;k-4jfyvV-AJf!A$j z?HWvV1B16Q;Qi%*87gzNjcX9w&4HtQ0oWBy+Ap_-&x7SvNEAGmyJ@kuupiu}=8vwj z8}NavgzYbuz~!=sG5vqDKR+X)P5Yj^kP8OJ(qMj*dm@8WESir@G!Nz6RH<(HJvp1e zURBH`e+{I$p+-m5sE5eI>)x&op=^TctKr|PXSCJ$;n?+$Xv%5r%aHAFBp9!YOc~}X zCw7%tUmLD+%42sDAAsbl*1Mu&QAVHb8^VWryO2Op4hB8n{-#t=gj(k7D()Z!-%)^_YbFsIXg(45Sas2%K0K3#be?-5{(-E5Ge{wVaG{n2nj>wB7c^a= zr>%vJ&#u0@Lr$oQuoO-)c9_5!N|ai$^btwNWJgtrjN?LOBq26CaNejyX;c4@Iq4*C zbS|FO&DShARQ-BQBS3?LAO85%CKCneth!fel5v?`iA^n>c-e82iI==+B3Vq#r)VPH zbnP8_Ci?i^OPo`zpe@)FKHN2B`&Ns6DjFNUBMB5(D|nD*$kc1bqLhnOj%#N1GJ{N$#bVKNyGcSz7bN5`A?SXrsb`aAqe-Ceuqwo;KrKPDK!0Zs zm{HxGu70U-j9KPVp=VMwgoRxMgv>ia!!nMa7tk#`ymi{KUIzp(fLBOM^~sm6i{k10 zxYBYmb$4^8nhdzdA9iyV@;gaUHaXAMJ`HWy&&js;+!lpjdUhk(wlK0Ml(nGPaQ0U7 zsM%}q9-!s?jVBi9Ot^iQ&jv0NX0wJhyn)8)k~01zep!yHSScy9g+kR#HjLtcUewu* zrg!5wK{F5&;&+`$lyb7Tsh;b%SoP>p353y)2fUZ7d{ui-!(h~r2srRA*~*{_fP6_XYpCZHYpZ}j9(AO zph}gotvUn<)}qF8`jY6P_XJl8_mo~Ren6^Y@)2!oJ9A=AGT*IM-7bqa(*7LyPGHnb zh7Wk3c{P-W7~y-Ls+_-uRk3}d*wuyA8jLMuQX=h=SU-<|Qk){RC4N$_SH5(V!}jB6 z+ZH6J0Top(IwPGV`~@e?*D3Wyo28aT;A&G4xVTkapk^ISz1y@rN1nimp`dLBA~uO* z2rT@qGgKqa&PY$0L$1-&uBmdz5+S#%LeA0^&FCiJ8GgDK$5nxlgL%0(Whnr^*!(6I zn0KruT4+nSS&9xwjq;GxU?P%>CRm3rK3kMFMq_;e6&mQPe^8Xc6a|e-RN)y~!LM*kgU!5@D_?@vKf>{Ay*4mbXG|0_{`xBGdX7r83u zBF(#Tf_GlTRp)e<@4GPtfcUE@z>{MW36JzLWS_H~Q$No-14hP(FWv)As}~tBF_si~ z`Q~)MX(vnE*(}YH*jxyCvlZ8k`@q&jLbfuBZhRe@)%XvKY2nDO>;-?cm}C@7)KEXH z`L}RvJKb)gh;qPNDkw?w+9ne5qFQH{Gbc>1L8*jS5MD9li9YjAeRukdCF<9<( zxaLSFt*P?^13V#rn_|}irrGe&p zYPB1pzgZVAo8v*_4c6LZY;Pba_~^jxAx40j@r;xQ3tn1yF~@*KZ1UQ`I)Vakec?go5-O%Im7IUG8*#ihSF^uDo<~kxPKL<-8cseb7h|kO5T1a6GxYrdHXV{& zOY$6Fby1S??d)#7Z1GLG#Dv;k?Phu5tZ&LB83nl1mSQLr2@c-(4xr@NpE+w*SIjl{ z|IPd5S?H)ZZpH&;k%oF(!vQHfWxTbT92`orAxPA`RTNr0|DGQqxHzn*oJ!8fvJc3=!6U z$--z*-pc+}`=44ZlBH|{V;9>#L>(j5v=LjbP4|sf?)+vq=Hi08IJuUVww!6U_L371 zbx13oV~~8(W&N?K_Suy?$em7cp}*NG@mVTmzzT-9wosQ-Twph^T1lqmaI1Pl zzttUT0W|-Bi?)#`fqqSI1ng8%SD7re$jh@YOyiGVNLvtgW~tpTxZ4c~_ax0;s$%kj z2{lnIJ(=1RJ2s6Hx=wulg?oJZXZt<39|ei~OZQLJ22wkXTVBG#O&-9y(DwGEH$J0v zX9>}hj86;9XKXHRU`jj^)#}`z;)4LigEZ8ekkFt8>#T1J^+x1!GIfU@_okakxhf69 z+T5SA$|rAybjS_7EfVVfRk|vCjd1tPVT#R;I6RpBW^>>%(%`R^Ff2;RyKC&9Y;Oz!2V3lPsfVu&c3-9dlU$Q%S12p;faze*S&f93VUBPt>i+5@=}*kRnFs9jk~C;%FAAgkSb0jou$CR zi8NKo#prYtjJr4($D=PL>c(LXxPc(@HoA$2p9%h#Bxg2+pUgiUN0p%Td{Y0`{#LWO z@xR7;IoZEFow~#CW4iZEI~;%gZ!ITJ@8TeT#(=tapE-hY`n0ha@iQmkN&2jlXmb3D ze%#Am-V6HaWz5ig;j&a?N}4($SZXV(^yCYaUXv*1%O#y5-UN$n0wctGq0-4o=Qf~K z2yoNpgJ-y>S~M4p>*^=hT=opQS|z@xk4CCk_Ot*DQkc+7v#jPQCQ69mA;AZ6@5d5W zbI*#}Y=C_H#b#S(Isvb^)`rf`F}YUl@bLN zX<7WiTxph~=CZun7BIg+Wudrk!)Z5ENN6?q$bhGZYehikf;&x31YJ4lK2`xEOewAJ zz6e(_bToGX5`&p0b+azE_$_nFm{Q8{nM9v3rx+cBM(|o5Cw$xk(#MdTw&WIg522`w zT6bCZQUCWK=(PDI5tE-TGvtQhhj7Itloaie!kF5R!3p$6w;7IjBw%q!5A{FUSQ}Syf|%L<6X3 zXDk&R?(2P6=+o|lkDg6{LnwF%^lm+f=>JgemoW)3t6=T;FF7^|+~l_kC;RI_HA#pE zun(6j@_Ndu*aKX5t8P6p(mkWFpiB!(l?qVOLf{ypS6-~o+)-ITM8Wl2 zF-P$Qdc8KD=zwQcO%K)mL4*&|sH)^%(~RB%r@{T~{gzxx^`p;*HZ?yxxdSqJ#CI|SKT>@#o(BXUr<8|4|ST&iNWM>FPZ zEs@QyZ#cubSP;)(ii>%iP!4uE(NOoV&$mxyNcW+L{4$ZQ#n1%_PhbLshJkZeA_P3# zq?P-dk-Cw*=?Xcfex@Unq~IMYv}u7OXW^w8B}~L40(!&|9!qxeYM*-iN=mW3Da1+I z){QX?Z+~*~XdwzXL|u~>IvH{S#t*`iJuE@>#(E?wIlJ8qAHqm3CkEQfmAI@nz%Q!X zd;bmh7UfkQs4t&Z2bSj^xB%B9hyq+)0bWD{tLDWj{5=)>3@jC}213v?>ZHXGz)g*P z91E^ji2}WGKCp#$6%?S@ZbXn3&Nm?wJsgza3MME%&BBtNg2Nnsm8B$a?y#lOVlQU6 z2)-!nRX=XxHZsA0)de@2NbB{ac^J7-ix$_EKwu20*U3CO)t)biV9coHH z^oe>19P^|1S{gC@&jp{p1-g70-ArYMxU@WzTC{I+(Si0kFQz8ek*Gn1i*S?g&&LRM zm9&88^mD`jZW(Vq=vnaWJung`^fH}MmYmGD9$|d z!yx1A^}0-}C9ad@DjA|qGs=&DF14U)CX>nHTgp@M4#EqnazvlqS%%peal3*!`5vtf zI#iAw!8|f1I&2UVG}1K%YvK>%te%J4lz=E`I1GlH{s*Z}K)}J-1})cJK!2F4p-6%D zP;y@Z?^kd3AbG>`uNqTDmR7GBkJr!AJS#tbZ}!zBef_`GKfqDlI7FZ$0?aAkK~ncq z64dnBLjhVO#VtYlPb;ol&F6}zBdHW1+SZ?8x!!WEo#u1&K-Py#Z(t#ZP<*@VlHq-) zjjELAO`FjLSsGiKo6z2`*!V=58$U{&j2s9DMU}4q$uuJk$J&A zi+z{@M!K-nI|-%T4gwiuwovXtE!1zSp)*n7IV6FabjX0HCQfW8fr$<}2!TPUbQSTh zu~G~=;)Q%PhybZy${F`G)&^ZmUA>8Q*MEC*4^0P?W0^uX5$M44!vMt_Vy}gc>Re+A zq99eyV(73LBo)w)D}Gz}{YEj^Y8`YAQS&#`v)^{6be5DJen2Gr^!BI5lOv}qs($RrnZg<(H<(-Qn{#KFM0v2z=DmB+_Qg3OwZNg$HJ3DIRBPt8J{%+LZNYhZN( zP3OP2<$% zCH7F5HZ~RXc~OKs5%vpMb(J8Lyx?G=MSub3G8Sg{BN3azU>nTG&iBM*w0FJKkjmS7 zDB>4S>vmxweyg1lbf+&P^Y#e+O@qO}z(JCyAL6-JG29>6*G%bU?2a2umY7JPHqiH+ z`?mj@8jvR}vq$Pe8J_TgQ7Qg^q};o!jmyo6Csf{s3JQ9}niT)|VSqed%XpfCwz>CE z5C*v=v~2zx$b0fY)I7PVD1r3ufMfQjP~}lTb*??2qw9FDAi1HS*duMr^&u1lPy%;_ zZUXypFb`ZB1@VSRmImj@CQ>m^19R&_I?=}LeH;O4uTu<#*bjN4#5+#VO^MFxm_p3w z4t#a^OmrhZZB@Td@@qND@sX$hz{}i(PSB+X2;=L&K`FPXAT06X13l;m^$9HH_n|X! zk>+_t^d71Fl+F?eGF7@Sy&es@`WhGucHInz1Ur;^8iyzoH_9i){PgC45gI`%rvd#L zFYU?YU{?#F6wSt;c5Hm~bAR`UZJ*#YCqbtmU@F-YTOsCe>h`T7Q-h(O5@S17%slp? z`#{X8J4D=b5NXY`ccL_MWa`PUQ|ZJW51#w(+sE-;BK}Zo4>)1po`;14P^E@tF}axK z{U{c=h%!&ebtW`w%0{!4B2MYNGWT!=L)aYunCBO8oeevxeEk$a4f~}Gi;VM7sNhP+ zlKHPd0o^tElX;)PsLRRVvXTt!+q1nm`<3|n3EX|gYKZtwDu>V1=RtJ?mE(F=_>+_F zRk|p1#h9?yi^_c|D#m_m>K-!z`MpI1Mr*@Lva!_59NHNc*EO3KLR!sF0a{+TYx5FH zWv#wY2`?KM%q2m+I+E3fNA9t%j^Cg?(|w25rHpmJ$0D3WR|dgve0X>FRN*t!QwFTX zxk|Po$stLkqxDt4SLU~WNoPl3+Ww^D+ zUOgdyiClMQr~Os9V-R%NYK^k71;`PivK?zDML=s#}=S=diE3+T7G0aakDv1s|@ zIRF3WO~{?L_r4oBFQ_&;26NNvsoZ-{ytyq&S)DxvB0b2SVzH*>PJBvc6)ik9h6pwW zTV(e+2DG3@`npO*8W6|2gx}7!L&@Bdtng9>LH3S8sl;@1P&=mn*|dP~hY94dTg}4^JDq-L&boGITKzJgaqCob#M3 zb(tOZJXE|>2TjX?7AJY+U6m9Ie1w>hj3gSJ2zskC{j~2eS)7WJw+w^3XU1WkxJ}<) zybUvl(I1_sZqF;icSXqk82VpH&-w|*^#1JKn~|Ok0^h6;K>%!Uzsco8r8E}N5WR6D zs_xC<*VP&6;q>y_IJ_wBe4krj*X$4%nZKS^9^3QR5rIaCxt$M!@+q|`DKXU2>=1~@ zJJO9HoS7f1vnwre-(6u+v*1^|JwF;Sj=~)wf;G)W@k#7dMs!U=1yppi=;l0P-UZ6o zuVrrZtK_`VJuNj%l<%Dto%V5ztKD1vliv1~|LF4k-?5H0o_IqRtYthtB006aGM&?% z_%hGj%QX=*zi78ZPFZUw%qZlrN!E!uf!T1oXYD?|*Z9>o!3vux9htibx8>mDT+UL< z=VU7TeIA=Vh)^4KK)p!zMveNqaE>XtVVrm+r4D9!=IzIQ7XMC8@cz7RBQ`esTu3%6 zn01~1H0rlH#xH%YvbpH;@qMy~N79mNvtTw}c~iN;p{(>kKUPv$NPcqQE!@!km}AIv z@iAZSli*0_w;cfiQ`=f1Db-JEjMaeEZ4rWm{CGnWaNYq?gKYa*hZuo?7lu3u@n{Zx;7M?<|cV&{V&A*W4I5&cC5b#}@xbqM6ku=>Fcc4OqQ;Zeya z8>nGh5~DllxIYcyPX1ZuWDh$hrL2I02vNrufo{ndYR8+k=fkc3`@i=1xLm$x#!;Bn z3oPrshW>$iT$;O24x=_V<@?{xe%AYW30lE_xwEM$zK4zeTtwn*qSA*-^c@Oa20LP7 z8U7~(QV*m+>Zizr_^99!p$h;kEn3~`YIDsUvp34u?mFq)y!&e2q1KSsSCt+SQj(nP z#R=+!vB)H9Q4mKd!*9JqXi=3R)@y~f1Ca8G#GoLKrkyx0eH4>#WoiDL}CHaC6eo3&1Uv( z$O}y6y8IcwAC~57OEPc*L`cW4>FD3pR`?@nUJ^#Lw zkeZXqpcGYtDT;ruk9G@Q?rUYMVdZW{#d-LyHZq!f1+5RjQlgpKyi~qbPQFntdxxK^ zR3-mH_N3wR-%0y@dU!GZM8JeT{6K6swlMLJX1ojnPK9-ouRwldMonn} z=p7hP9QHQ)dPRWZOGEu#fRjMj7%Yo+5$GLenLaZg%%WaBmkV&dy#O}(uCARo`q!Lk zA|Aov_7cU+vz|${#ni;sJdP>L9m2_(ptky;e4Fj2n37j-MJ-^w z&k~5Oz2$6XdkmC5LkY1z?}q4inv%ToBoR1&x80A>wa97A?~g^2yoj4Xi6{bK;)WgF z+SgwC6v*(s^9jpXlKv%&t$9sU4fUYk_Et>Zbw21*cX;Gii2MsFj=o$5UtO-e_{3oh z-e!w|m)hFjv7U!vP4hLvq&U@)EaQ5kdNt#$Yz;4|57iXy(}`;S*#G527LzbRXxjR? z*iV1KY(2E56>jjX_LRujV68U#>U(Y=S~JE$_CFoFhp%Lb24*`yahsH8; zH6AE=%WH4|U8oOmEa-FA0QCR7vvOf7&m6Jlw`k{Y@fG$Muz75rj&}TOr;qz1^@%F7 zEVtlOubq0D3Q4JZD%U0m*t(!F?_pn>5V-TXu9*9_9F_r4kNa=?8U`M9H>baUR|zaJ^oKXqsF(Om#EAPnS5XPZ8p;uk`1<$Pke_q*&$d2QUg5RP%B^?#ll)rlo&=dyiVW#M@ixu8=>La$g$;E4I%#c|9MSaPUa|8(8F!hf($z>{hF55UF?iIt$u_0`^q=4 zwQUh8)SE~M^XTQ-%hjq?rb~olXHokJ)A~KfD@#%!01bdIT|9f^7(Ja|FV#Oo9-V8& zU@cgg1FDRJR%w9cgtF~PM~`TE(RHXBNb{oIMNq*XQwg*&VYRRcbryi;F%T zx88Hj<&So0bOxOfbdELX?+ev+)@Iz;n;J_{xB=Y^jjv}!u5w0^aM z3dtu7VavTcol@1%mRNu}9&`SuoB7WnkjM2jHt|LvFzekO?{SX0@*T$aL%;5dBm>zQb-@oy??wgV+~Vx^L~`>|vHNE*z*S+fVk-i9 zjC|QMj}C+&(O$BEYnDQFUn^Z~0a~n*UDI7L{&4+7wfcQ=VOU=}VSH*nD4&^c7(SMlO<`x#^4KpUCX4*@X2(2PnOQHxJ&Fm{exE;*{rqPr zzVFGDfX(+I!261TO?A<`jw9soO=V-wCFE-kK}29iGA~&hJ4xPCT>C`ekuv9??~ta~ zda-S8wW9&enqK2P^1E@usp*!cV;S!f9_$$?;-uG-UHu6${f`)N`;n1#hixr*k2~sbC3OcDjoG!iR;M9xOixdYcgFqav^6R-sbVRz3(8+wA_2h zF)1Z68~r%9BvZ-c;9jQu%-FSqvpI@L>3G5E`Ti@R`+I7Peb4ymovAUt&|YTbd$pte z;Q-gDGqh>-`K#m#j}mNr+L-4M`Cd^t6472S&KIICD9g5=AR`{yu!kL5+T#6SG?Sl8OaFK_zP$n z&6ZssJ`fe%5gtuN;v*wUUq;})!l*b;D%A}Icdg)5RA3IJBKs;Z>c*RRHr}%0X6ru5SO&*(vP!$$LOgIV7z{NH@v;>x);a|xl=zb&%$gv}_gEX@2ve;& zIJ%U^vfGpJt!p9Dlp)Z4IBwD!irkrisq1qb~gA*)Pz5{mzl0 z<8$n4vWHc8L!erNZPXFdD;I&J0#C&R8AdV2(Ws-etW}aJ((f85?UIs$D=87R<~81Z zhc7wzWBzof_!RTJ2v0*7H$?_)*#=mg*^hDNEcu$xW#3S{%Nl1m>$+oRfIOtkrHfmjb|RoptdnFQL?9hmZoZO75(r)>Q!30 z>aXK+v){74$7$FBjA^<&h^0%}H(2b&2Ee{eI=5$=9wH2ut4x(id~Qu9l}QoRI`t$> zJm2YKqgj@;LCS%gWb+ zVK*E)xHRlr==%s|kxS9tFxr>^neEG!_8oe9+s>F^>zNcg;l3lkr+u}fCvK*Fd0b3ZE+~3hhgneKc&1l@B&Vy$w}PZnCct!( z*yp8VYcIXW@Si29u*pQO<5ZO%AL}n$JLc1-Et;xT^xPg&OjFf!;2)=o@nboerF1o- z%FZ~QJ-==Q7 z{>jZZDY^Yk(?H4GW^QK&x(rxBw(T5qE|C428XR1sMpW6syrgE$&E=JU!v@;H|4?DV zv#A$>p5YG4Rp=Ni4A-U?yJ;^7nwfG#U`!p84ijtmM61I zP|fI0JLP~evYHT5|C7Ds;9zDLHJ$%OhphF-@1ebP4KKhcPqIIgQIor;bn(4x zUOj3_$_|L2@LBUAl?wA#MwHWY{Dw?2aa&YIu+0-`rQyoVZOj9=J$TM;R@5&IC>;;+ z`V@1!4g4~6-}}ts?(0*3kFb}&72-P8z3oEE$l^x73#&RM(+ZC?jaQ*9<~|9D#w&6w zoVLIFXK$y)w%T{nLHI47`&)j@Ia7<3>+Z?4pny~=mP27iNUfs+EtR}D$R(8N64LOP zDe9PtLReN%Mru$Xk2F$~$KqXA@*h+K->#xuV(Rl1wV<5rZ00Xpy6{8D z4Ngwh?;MSx(J8`k8@%D+ljkpccsjb7w*EaWV3lKURrT_+lSj|uUE^R6_lOV|=ZL_3 zT7ZwU{wu=RvEz3LE1E}CHv-OxC?l9h046P0`bBD-72CX{EFCLWJ+c*X+6uPOzEM zzfxxln^x&*w)BM!Aa_rCXvJsxDE1#kmyqELY;(PQHw$7DNQSk!gm?z^W~els$NbV^ z{vyeHN%4kZQqt8dZYR2Pj}+f(;sC#kA}^6Ac)Nik>p1RTMVFmUyj=1zO!#01c7dib zhwaoJIN!6K`;-S0OrU?emi9@gqyW}LY$|{WBt(5nh>zM4D#?S@5lt9(;9LLQ-C5Dx znr_)%eF^u!0pEFZ^Uvl}(eZVlO@JV?p(*!ehm=^pF3K+neJxH<6f;k9FoG>7iRS;~ z;;-+shr9{+{P9TLu@A?$GX7`Z@3$9TK_4%nx9Og9uL(Z>sV60MCzW(;fqy<;uOP-S z;i82U91hoUHO5*24Yq1$VP@sZ0nxPWiK)wr+-W|pB~h;TijB`4`b5})Dwl@m7*l3n z(iQUhLLFL}KYUG0mKSD6@)4X73yTU=%L=Xi+v0NsS99?<1i*(}(w3T?qP%kYlLEZ= zamd##h;xQ1gPi=Bh~g3kkb$J`PQmc8V$Dz59pKVIS?!zfgMMm}8j-f!M+FJzocI$ApvWqPF^z4G zsPVS}+y0cbcWzfkDc_VnuK(lRWAhw(laXF?a>g!J*E@tjj2}@$;T^N-$<_gA9b%0h z&ygtnzHJvc--^5syMg83=X(58RZ%A}L4o}HeY&XMbbqZys)TwBq3vFg#zt1OVY|ND zd?t>*`=kk)YZL}Hy!^oyxXn`fTVD~W{kcH8x1)d$_OnUyIrd_tM>yFUAyruO-0D^H^A_os*2+y* z82g1Wt>fFcVD-v+R(jiJ<71cR8}t@StynVB1BQsKGcCw!NUV3^i2al?*nI$nFov6gEeEr*>^=MzjsbmhW3R@u1M;%3jxV3kb z+CjFK<0rSpVKbES9{2^s+Wsr~UQ!PdunpSKZ7-->KBDqguuU=1r{o{1(QM ze!PU-srsi57($f^#|fr|{=atTI?w)ZF_k4rOqGc1KtNd?H=&@pqB1*M;|vjiiBdZz4^CEo0R^cO{5{MB zqE>O1Kgq*CTb)dZv;8kh{FSWJPlJ8}sU@!-c$wgO+~+iWX>JyPi8h8*I4;Dvqc{M( zekOw>%N06q+bJYHYzIB(hu+&*98Ik*N{8X$6lKSLkszsg!p8lu_Yye!9$22ZJwa#3 zq_f=vE_$MY86H}bn+3+`35eFZi*^e?R$js0vWP=KRen}uWu4Lq5dahav17!+;YwSx zONapM<48dCgq4n15gCv4)IaNPhzVLJtlbuTPJ(j_9|2hEygnO(o~X}_B3EYSfEEE) z(MiCd$jX-?I&bBiRaqw@Ak1T8#P)H1gpnH92ER3L?%l-A<`U-fHp-LbK78qn?T#vm zCN#0Tqhh`{9QxQDdKZJKT1lx)?PvNE_<4uskiqNwCYmv{LcE!_AN-ikll6?x&Ynk! zqS}daX8mX`Ew(H|0fD72O3sN>)YqA z{5SSbq#OT!qu9y0lqphsqWtsKKaJDq=~JN>zYS!r%Iv6rEOX3!!A)C#+cf{`?iHS- zUj5J88*yvPv#h&8Wv?=86`NNg2KZJtY5-WO1pm=cUYuqn(U@&w+nC5~tnN>>$W7n?Uu}h(Rz#tgv_`uM6P7hX=BQ1VNr!Ab`q|n^ z9;ni7Q5=sUo25*1#jw( zLZi+Cqt2dIE`8ux`i+Wzo9p16r|^1^uAtDgNO;(l9Uw`089Vyq6!xAhR6^*0;Q_=W zPbH^8Dxl{PLxBN?_E3!B)vDXz+^gtLWbeDW%7PK&!O*3f{!RX_DRn^v2t!|brEnGD zho(NS`+`_7{p$D+G@!gD=7hWQnJL5dZ<5dc7T|gU*cZBg8;lPtU3gc3Ey_;vX{(so z)3JhB5oju(A|E5$%Qk!eKjs@eCanHfvx;2mgMva_Pi`y=RfLn5YRSW>NL3Y!1?QeB z91Id`aXy?o>e@V9TrR2=2j(P0s7J2l)!|uiCR9V`{MHY-J;RaN!x`Vxv4Py!)5RGJyE9aEdl3lr zWk%FS^GeHrIvz)Q31(dVHU@SpG}zhB+qz{>IQTaaxvWOK7>GVlL!5?Yw5Q+$1@stR zaWTj}OEd+s;F8P<2j6C|L{5u`xa>6Hk-FLHPzEz>*5+&6XHk}k)`i6{!1|98HGrJRBCnD-4v-~Vpblh3bNqZ-N`P!xMl1$< z8p3WJ&O;BHna5eg4Vxv6G!24J+wcuQu6~d^jwPthq}D=zat{ZYWXmMTNsLt_Q%T0|tE$~#^rHF)T^q64Gd z6QpMQf>1>dluK0E0DiEie5W7ds$^>i8eMFufGG(c#^-6~rV!0-V!29H?VeqgguQq1P%6 z)}0YOow%!V+4W>n65Zcb4HhdxQg&s)jk4$(%UB{&T|EF-RZBoUpNJLl2J>D@?dPCc zk9wQFo@59^V9v|^Vr=6a#rIuj$}|LE_Cc9ThOjsJUk4P*;UN%Ab>~dKMMPRWcy+#B zjVI)tlv&!fs5SHEd;>g7$Ui3Y3bm+HS0g*JQ7$(zvO|&05$06NjDF_GNyk2i$OweA zfUxQEp$%ZdV{~|<9Cr|D4HgQ($o)@;o&GXz5JV3Vjn(=d>)7Drs6-pPrHP(Ln0>b{wH{ZlH#6Rm<;n?Nl>y&M+x78B=S`4H=B4v$ zlHj;ixoQFl+JtTNFL5cMe0C(zo=S-Ekln|_uKXU)SP}cDU?=XAwlr5Xt>669`+LEp znf$8UNf>=h{3&Y1Xc_+S3N4)<&vzFOru!#Xe;JT$ncYf&zX8$OaB zsqBGe>k4kD7UqP|z34I{nf0E*Z_SOz@&QnNLBAz<8*TRn0p5vZ+zBr6{%aYQyRVkDY)`eGs zg2loFZ-ArSLxGt5x`+7cBn)~$<8-)TqwMVfO02{31CZI}`uIQ(q{{ZZR;O|UTym+I zYqq?mC+Oa`sTGfKoPyx&>n<8KgDgw}9mU5Iny z=234y)@Qvh(3dRa@P{Onk&xtv$9A)D&*2MZ%H3(-`V*+YsiLyaJ@XqIvx7q*?Kp}> z53ilFuKFz&y>r^;B-0~FML(+QXyX(t6l4uoHBt6L*q&IDKw8qc@j1Do*i4tB+aM*T zX5AVo$I)VlTb(^_s2D5NTI&=%UZeZ|8EH!zqfPjC9{IEAlVe9Fw z*4=hV-7hct&nEsE%I{=melTx}14IW*UbKRC-Gz#g?k*@h#U>0PI#zY}e~ln1*@XD<8zG(aw! z1|sXGp6^Q%pgs`#lHj=^=e&hPj~=e2Pikw+$GiT=@1m?dw!*1AHy!D@NJIX zl@2&V@1>)G@KvP!shqE&r2PLDe?P;24fLtn>D#XcV$L8{+Y3R9Hssl7FBx-*k;*u& zPg+r0pE)Ov1llxdH)~}Yc7txS&2gIDfb92fsQWwe{(hU=V6Wo{jR-i)PaLl9d-FqT zq&j3BNQ6uxCqKsHop60aps6=U8Crb@dz1G3EYyiO#oji78tvt0H}^|J2q4$1HWGe1#2{^Zw80KAWGu+A zYVW(<@HNrLQtxEc1#1!$w}goOs7CU{={2^ArEucVTvj1^hhb%{+_#?Ce@EP`*o$#1 zKREFDESyPHSHR`dfoi*7KN5OYvvBBBS{-S-0j8;Eb`sg+0cW%>{C(Vs2#uYk;MP|$ z9_x$c>sn6K?*tVUU_BY%`x9tDP(j6N|Ln@<>`hziu9U2mML|_i~d10jKzkMu#hr%rd5GD0x z^i*yxjZ;v-0iuI59MEgmQ3y!%A@O?(U*`L~-H!5XL;QG1{BeKJn!1X(^orbYLx!T5 z%i=tJ2w<^?7kWl2<*RV>(1&cQj-n@^Ua)5H(coxT^ljAdhdeF;v#;H!+a65OP973i zop3Vfrc5EnH)U5Ze1I>tHvf0d1EC*@=&>f&i6hfl;B%{GPFlc)X&|i3(DM}nksv+^ z9sy_Fmu4eEb{&Acl35s-EZsm66Gxj^QIS!au@E32SQu6b=5NEbunMi0Ua}F^N1(nkUpFi}THuM< z{8{>SG4a93vm*~RTuDV>XgMquo~qYR&Q?881&v;f9CMH>*83uzt35@IM6NIfHZ1nQg)VQi9^#;X@X{cH= z(q46EZ**jiY#tE`#-jKDOnB}gy946EM9!ET0n#zSa_MYh$&n*I$R zZ?_lmsF-BEsk3XzmVIYHV2{IQiKtILY`%xWZU|m|)HAyZkH36$7D~Ra#8R{c_SC-(S@0~}a!(`a zMPJ-0@<#vUMv?Uw&y5u$e10^gmuU_)Z;7w{`S@M@*)UkifoH%HuCL}EYk}7RmdMpT zU-cdZeuIsD?X{oB*KP&ekR7e8!r?vYfAn%QzV|1Ss$aSp#>Vcc>nQu)D{f>nw#`!P zjWi)b5)18Q-UBiArDn}w_8NQ)e4_aT0z^X0C!l_C;D6(eHh5(`$Qo#?0Z-W~| z)CLk=L`@lSQGcN}f%Vbr^n~il;nlgad9FKNO6uBC1<(pVd`7hIgp^{apEsHcLQ4a2 z>}yh(mpV!zX$sjuKAwH`polyufdv(kA);#v2NB>y0+G4Usw{l*gt;Fi6OjY0&Vr@} z1r7K$=@2wjVRr}zW=joh7Y95C@(>fw6Q~JXPWB>d(RtCQ@$(Y|ixR@7L&&>=*>RLm zHX~SrR(xVV%Jdi#xr};9ATUqZ0qJ>!P%uE>6X_`mpoj)pWZk0Fd}63L0O_IcAw1UQ z5G(WwT72J^!414~jFykQr^`tgJDYi1k6mkF@!2e220JS}l*4C{Pp#Y^<|K!?W9}g7 z-Y>X%Jo@T_R7oN#7mkh-VcQOtoGI9`q@yjo3RVHS9}Sh@JZe?&N)s<}V6dvg_w?U< z=2}B8O`T+(fecmrbl(S_vZQvY%cL$DFY>V}Ob+fDy{@*6{G%w7c)7h6gD+&7ct~Cc zF$8XU{QUx=zyxQggZ7=Hgk;^jdISJXK(fCVxbNPe_LDbOU>&U`h({mvug7n<9z9{c zJ-%G}l`2c9>eJ8w{5weqz*6J$U%QCqqcWh{W8W>x9J7p_mRZKmS;$pcTUNAr>tp{m z89969{!_%RyS6A@+b}~rSD^ig{qV~4G_u3~tq+(>b_Fxbiu{@^4fD> zROY(7TIKwUi14vP!Zkoe4H?n;Da2%Z0k7E2h5(rkX~iN7 zb715vE9V?@ZCO*^2Ry%MXGD}A>oG`m;!WdzEYG+B!shPuRsP@8|nAqa# zWCxi{ULlH^Rgj&S!7J`_3369i=K3pO9zKKsSn973`e+81eP3-)d;j(JF{U0Os=qL; z&;;T0hgUqJHd&qS$YCAa?$c%`9{pbrK&5;AY!cN@-tgokbwH0`3$e8Em zc$F9H#1qPah?XUyewfs9!?zRpLB(f7@I3T$ER~eJJL1&y zyzl#DL7$NBHX^=jan@`Qf*lcUb*Z>iP;w8uY=k zn5AOFR?KskAGZDJgU1C!NXY)+Uk^)=)iCd$o_Jh?(Z3vlpMXIiB<@SxjeF>C0vNQwMBrI0-0<$x7+n z;|cF9lizh4>W2D;`Gh&%>ap&%-ucf2u{b`jgC;Pb>GUl3=1afCs&nH5EWZMHV zM*J0?`^Wmvc*J=Bco>8QXS_Qn1N4Hz1n(&IAplNO8*VKVtZOoq7&ol_pmikix8h-?<$~PE0=PJt^byeeyxT^BDo^CV81)24_#MrD`Ui#&l&->x}*7c`rra^xC zFATKh2j(s2C*}{hsQkI}<`wShqxFi~mo4n;J$k69@`r`Faj}tUWYFiLBz?D20VXcm zndV^?MLuuRli%~OjE@fm%!_3CP{-76G?DHWsx4uNzx8+wh$xB(@ihu5d1~c#x*zEl zPhK^UINo91p(i0k*s_xHcqiKH!Z;LoY!n$BT&p{OAl ztIPO*JHsYIEx3A>cp`F{=#4BzJ>}Y9tw-9>S`VP$#rCON+M^Gm_xFyni^o5d)GmD) z2)ykXvisVvlcQF8{yy!@@<6ZlT;Iaj6vTliUM}4!d#rc~u66U{{p`x&-sa4yQsF4< zHck^HYzmDJCHBXVNd~q{8MchlE@anHNRI(n%QmBmj5n3~v5FzFiN*MK@G)uOIkyH| z=-uT>7uI~_vdahA@h>xLtqn!`nawsGGv!saYZY;L_C!E%CCQ>w8%M` z*`BRFNaRaDz)U${YOnf@TX;3${B{FrxWA#_9Uvi=^YGw?B1M2 z_p}Uy&<1|bBE6kLrnlEm)Wr6X!{{B&59V#ZB5DjRS=XCUX2IS&VV6Z!O^Zxus(v=? zs@6o<)5zp|Q~vdc4>q5}^B?uytEWhg>9re6V4K2p*ufkli9y$nlVKoyS%OtQJuV%p z8meM6o&~=l@uVu;IADYbSKmDBfB2KcL+6tu;HrnLMDoywk-pxI0a(3Uwo3JM5+klK z9!QdLbq_^NqJ*dk?u9Ei1`Vkt4jkHqX-IBp#ado{!&X}X#M>7_qvT*{lty$&*pzuh z@$1?zIn6<1hF*QnpzvsLW_Z2}Cu7Ze1W!xpo~zAvugQ1QM?c>Z6Rhk~+)c6<43HuK z#Zdfp;WFYT#^XWhQ=dQmN5n}FMCJaZe->fAyDKaLzsE^jI=57q-?cQ1>FfN&E^c2Q zdLX`f1y3vPoNvs^e$VX!jDj7T`+WG>gCP;hf%pyK`%1vVBVqYJX@mIBv++?AQ4l={ z1xb6mSJ*`kbcDN~T^lkK$+0$^FF9=V>J{rx`s{&_xM;~Q6CKuPp;zAtX_m0~c=kOS z-fR&)*%#Y9WVxfPwt5DDHow>MV)t{2r)%HEW@gPmX(p6Yk1KMmB)i#|ff7j9Q@HK0 zFrN9^hqZ-)xB-fdze%~r;{5*8U-LKizWZT$werBYP))p_P|I%r*b~q(v|fsuRJ^3C z$2@_*fmHKU6H0_ptp)11>R)z+ylkf6IAVe=*3(RGgO(Q!Wfuz0AZF_KE!HtUr+}>Q zG8Cw$;wDYFfK1?Qxvo3Np9s@jGFpUtDO_k+VHcLR*F)N`g`VU5*>JBu>{W3UQ2|8) z8d*U?tirASg4(X3SVhQ&NCGf>o}-*lLdk-X0(?E%nJ~D4c%>PkniYKV?#)wb2RNG7 z(;7gRoEXp%jr?Ud7h;&I9m#SWIr6d{GLhWEkCIC;2T_A4p(Ikx#VK)Z6&YYI_}^pE zT%S9GI{WDIh{^wQV*l1sd~bdEuanP7n7Xm|6?p8>&vzVWgw1!R*Qy)&*XsF4+m&Yz z6!Y2}3~xpw_5Nk_Lh-4W?RW6*zjg5IexDJ87Kj@t z0ymFa9h0It{&u#ut@v$CJK~spa}w#!n3p-2=Gll*UD#+J8rdWEuP_z2F%cWtwb3PA z1u9nzMyIiw=f;84fH<(Un3IuBk(5+8uUig`*4KhfXSS6;z|+Rafms=W@@g!VoeNYh03&!g{B(#&s2&E)US^EmNMLPJ<;mXD5u`B2)8sjqq z^|0>8kT*~mPR&c@HfOYXZ8#WSOT(KEnu0-lmUlTMM`ll(lZ-Kq=F#wY-KqqE_9!eA zk5l<~^(<)~3aotq0#y?^O$%Z%vITUP5JVmVMC3Ie=sNW{>TYY|Hqmx)yEtiEbM)ZBAvq zu0zQlzR+Nr#TlhWSwi5CD)}&nEdBY~LzI=fKDB0C+#Ml*Z+8!xt9g+2vuTrdD1B)w)S4VQa-V(kv*=Qo`t>qf{K%(}(N z|9{A(fI~Ij|!bA;H7G zeBI7^w*j8#q&`Jy2(oDMJ-^n?}4*1 ztT*6=IZU8;|EU`r^0<+e&WJaNBfcr)EEqcj{RqBYtT2ik>Dc?U9$x=U=nJX$s)-WV zb6T!J1j6hFgOo;S(9bl@(Y1lR@yvY0Jpf@-SLEyN#|lMdDdM>^?-GC8*E5YPU8s|#y_*M)e#z@2e40xNUlZWo&P=j9 z=@YNP5oYW&(zgU}+j{A4D@6>dhHD6oE{p61m$~uTKkK@^dY-#&E6Y<5HMuCr^W9Uo zg!Dd9*ZV)gHNbR5bya??XeZftB;BZ&kD%0H)G1V=P3tWz^o}&`vBRc6DTsu}DTnX`)q%{x&vGH}TBMyu`?)(Kv}|G$A&=y3%3ptEa?a>!AV6CgP$jGP0cJsu&7KIWxRiX z?Y)4!eD)LgsSPO{WV_eYO?72wjkR-O1{_n=MO<(~1Xj=#=?{BUB2<0T?dz_agGxbU z!J^$_1YEs#e|i-tAM@meZ>?g*swrOgndj+Pabu`QZbNv8d#9H?D?y$Rhx0m6_9!lf zM$wCUtOa%au?0IYdbLX3wY6~JLt=|vSd(n`b_ilmZg>6H?1F6S|1Dq^ymA6 zJ|3e%T{O4V(e&8Y@ulWEiK?Yt$e!{1X2mn7>_b~|$=o_z9>gndOBEf-y>x_6=@!Ow zkG;r2tUDrc*NvADDv}qz_)~U{o%ge`XF$TM@WrYQrMi~((zpTFlAv_gI4&WcIBV_a z!9U|f?tgq2uEy|=rr`}92j9?AGi924?jS@(5o~xQgsQ2~yhaf>JNcR+JGz1uUazfT z*RW~xv@q@x($aeQ0?mw3ImdjQFMDn&hi=rBQYPX(wPswWbG07y zQaA&gBPW8Md@Q8g56rQywx2kBZgJ!>FlIW`ZUA4HUOV(rr&n}j=uQTQJelmNGmD%r zkzXHT1PndIg5_vP+%W)_#y2P(*slf*IQ354!_1rn`DTbS(iy+$RAG>He}9$OkCr6x z0mW|Va>7H^BNI&N!@YXI0Jg8&K<&slOM0PO4;apYPkSQn_l5;eCJ{7&@;lSHi2MDa zA>#~!I%FzbU);-o(QKspIMe|BJyauTuhc^CLtp^Y-}?+6{@>^$Jx?!t0yPBPyS-tg z@kDO~WKwlHNAtme_?=EK4WRl#1^ydm(CKXVF(m^*u==eKy@0}(ycWNpxSE16e1>po z$ie3*uQI;8qm&!iVtOqewaT@O9IPDJ_j_}NPTl&yzqDrvDNma*J~H%Uv8!UVwimSb zjCPgAuOQm>Ad(5u7DKF7EH!KBz7#;IOEG%~zc`}y!5MuWywirYyBCqZ|}GtS;K7AB*yZMcHMI9x0TALScHiSorW zzv#wNaqI2sX77%cV}cJMNiGa%d$Y4I)Ox=2?5?b(9M9zh^%J5P?tT%>_~;RpKe|1% zZGhZv>ReE4-%0#jaBQ_LiKV2_{}RBX&8=7eGwn zWp2OwU0Xc^hd;G^br ztSf**xl7!yNiR)z(RK)x)=}{dc~$V@{tGJX8Wv`KeV0Icks4dN)snuWtB)*D-`1^q zAAOWS5@(b9*lg3b&hMMpg^F*9gx0Axxng@L&;s>i-J<8ID_1xJq4a$D_n33-CEP9} zTD8GIN>*K!b=JVNPbby!JHD^CYCB=ttmC`;&Do@?uS2(uExJVCKcrB|??b&mgBLG$ zi+;=`ktx$5rq<%N{2rVVBuIT|amBKiIG4tUjcPxC9NwBV@2EPa@ zNBGh_lag?`9=twEfNu{4U7m>xc8-jT$QyULjE9twRBQeTz`Y3S1w_PWE#b42DD) zJAabd*R+EfUp9XP8x&rQ6fICA_`a2FSY5#(#D<7C_CwQ6rdWfLt#5)GIJ_19TKzNw ziUJi^asuMaUT@9REb45Dr>H1))Mb2sHMPv__Q`{$%&s)$yP6rTjFG zsgu)`Fnzw4Cf6IvQgS3-B7Kv(tGJRE_Sshbqs!{g3t#+mlpdcT3m@CWWY3ojbIc=K zGsTQ3DZ%7lrLjRNi%K*+WF;=|?=2smP!3K83v!uFo<2(*QT-P@0Ckydv4{Bdc-b}b z*yX|*&`^PBe;M_&c3r;LY#>(hS*RV0N=l=8BSvL%t(7gD3iZ`XJ<*vf8G3X{l9Cdw z7(avh0sI0$FgVH(%*+i0S?B>C(2K=>#XGnxLXi6JL_YrGQ^5Fmf&s&P?kUPM{1Z{f zIA;O!eR&2**;peV0h`nb-K`L3#*)0RIsmWpsF(a{05(YrSVlcY*+t~Ic*uhnliQ{r zqp>9Be>|7Zec~Sv2QF=EefAlfVMzBzhBhP8F*ICr+A3U%z#(GCbVM*T#xaY5 z#d{0H5HYSF14H-02>)Pz zAE|IL-C92P$qoS9fXonqL(5@6Bxn{G8jA>q{e|ToX-s-_?RWgpIoSwKY>Ht>g45)- zForUKC_{qDQSa46aNbk`m_QYBQPm{G$cZh%+_2pz{oYRKxxUPR7EFvyB3vOS^D?F; zBIJRzAX#`8cN@S_Bq09+H;EYr)q*$(iX9$da);RkbFcEu8uH1|O~3h$J~g3ts3(0I~YLqQ(GxUS%zA8{9P zwjf6q@}fo%kDQ*bV1S=;oxG7pV=sRP@<+TeR6bNuXK15s8?BhzyY}<9p6##XDAjp> z051C@qxBJnAhJ0jFb>lkf;7>Ge7`kx?7jCIlz+h+t}mm zA50Wr36w+S(E9)wZ}RjkbbQ_j;6kywSFx)6(NQhs}- z$uY#hX>py1;%H1pk~YrYIvG}o^-0!YDUQ;^*w1FX#1wG+Y+v^$d@6(OW|MyQ+s)Es zB5kB|=q8-=1IUBUsB<~$gB`V=b%vNUVLq<7<;iGlgXif5GhqPWm5L2m2FI;29P+V` z!06g7>xHtdR#2yY+~dj*z-7L1(u&0pL}s6{F{8-cn}&z0HZh=TAWFI_+oi& z%Ny82A|z-L6*ZGgm!#_K1VuZSy6o`rQhv6KZbSLW1PdCZtOL7!(q| zNWtu2ZVhwAEAR4?{^8%sM@ruFGwZU2e-H^|b?J#4P8UPP%zZ865@>7J9EV69(5w_0$|4wQNPmYB8voD%70rd3g5 zuhF8aORw=?yN$wZe)(FxesWwt+tfWsdb#pnyxi73TfI8o9iDUwPLfN>ura^zy?MfoTDg(q$uQp|bNR1nh6Mc^SJ!%bmQN2>zb_Jb zSbbXckv(?3ea#SCiM6yQme%2mwQ*cFt9J-RY-#|mNEAjo8iM>24KgMfofe(;@{h)B zGPG8goB^;bwh^b(n7sG-n)h~f_;IY?Nhh&bx}rOuyBxKbuO1gvu&LjGek7MwJx zpz+7;{L8nCUB+{S!cjV$=%RShjsPhlZ(!$G)hDAD}WFNbC(ez+CX z#E9PVqcOJTcW$we@G=tU^DMJTnzTF57vI&_(aEs)mp_^xnky)@V{z-JhLY|5{QE~1 zJ2aQYxChSkVgsE*`fF@PDpy_ehmW>P`lZMlyT#yySLAeu+M7DmEjV`oK4qe zPntvJE&kY>6$j+ET9)4yOT8I_ngsvI+-s6DMp5sP-Z9dHOCvRkXakq6faW`M8; zpchz~0l9429lbhn_jH*gOAc(-Npt7?{8q~{x@xIcM6mqw{6Miu#(|=q?~pB_esB{+ zR`tp~LyUUkRLA7{8yqz|&qa@_z@WGa;Q|pG*R1D^7#k~MDC(&$)5$RZomN2ixsUAs zBhw7vd;Q;M3HwjkfBzWxFMs~SZ5KHAtNZp{FUIdUk6rLcO{SOE-vHs=3xH5h@MCf+ z>rIpnCI#pecm-fZ{k_m&{vJ>slfLlwC!hYGb%s>!(SnNI;O+DIlt;zrQ{V{Y{&~$_ zqvEgKJC8xh3O1U9#?1w=&cQM$++0MpXU? z#|AwLqso)=aHZJ!lzTJ9Np)pjIs_vByi>xjsi=Pic-<}n8WCNwftkC2&8 zsTu6-fH&E$gr)c3{P{6}ykj2OCCAkR5O5+9e1T9RoD8YR9Ehf3RHV7zrooi@|8MW$ zMABff*{w+z?~L};8K4MmV4NrkPA)MN7;(oTv4DnARR!o@=$HFOK7OrDPCXx^r4-<;Qd4g;Lfr1Z4M$f~uEX5A7_!Wzav%chVNj~CYb zXWLBRy~Ltfo_B0I30)2>RReo%wsAmV_vxLs^xG3S3Imowm;!hutKTf!IIP6Oa;A}< zQ;VBV`uRrdS+1{7!Ht-Jqt9pEb6fzTFJ3@w0|(WyAic8r#SS17j2E zLKN*3F0O$uF+;WmtINNWIo_KN`P~KNyA|me=xB;i6{5(Mkur;BXx|44=kb2I2d)QX zUTr11bs>u$fs@lhgvS)RW>Oq`t6Z%V>vj)I^>OCejNWSg)~21yddZody>4q1xKK4Bn@>7!<9!Hqni-v9G!sn|c~ z9T%T(_HX?e`t{G>CSLrVfWQ9P{H33pzFlx>7}HN*wcfvhfL-@m?p z>~?Iy?ffROTzt^q=r3R6u^0Z;iYnHa-!T96(C-^hKH&ZTc|rgGLvZ)KjL(?)H(h*j zcLliSJ}i~iW4xP@Y&}uRvUyQyw&REY8eI|HN2V?D1 zD^M~&Hhq%(hLnG5Znj61VS056sLA{`b%DG}jci%a8LPShaVvQ#6%FgN*n5GM(>E>L z6J8tuUJ)p<`lAWx!zO)&9FS4S8kH2hBXP$p0aqKyRlwAjHR_=^pcb}Cq12p?RBeB@ z&RmiqG(VV4tz=~>Us0UKV-MYDUZ8fj@Vyw`gx1J!%{mhrVK<3m-dONd6t-4^p-=^C z!m`8GhNYLS)u0`Y&`{{HI(wX~)DVn49hDQt1lTGG9qjC}vZNE#ayA$FEV=R{#Jd^L zOMG-a!)xzkA6J3l`)V>1Xa`MO-6>l`$G!6xIU1eTh{u7f8h~K7f;970>--q`G)kYc z5>1+QPT&)mgsla)FMs~~Ay?gM{_bsFcPj_8Pvojd<0(z+tfmy9X50KwQ|un!0B~E( zzU|Qd|A)<6lPL>dOb4T*-tm$+Qwy0xz0~?I9^La6P`S|t`U^m3Ic=bMjt(rK&eVr8 z?w}9PIf`CtwBx#MP$=n5r|_Okah1!Shry5;@FmfZ_HsK($q3^BAy@}`WPQuCQ;C21 zh3n_P;pE&6cy%}^+APluCrx+IlKFvR^^rN(5UB7j>6_^(i{u2dG12Vab~xj7v0Q3| zv}ZcbwEjcVTMe)NIAcOIEjA9_TguH^-MHpZK3@!Nz=yA@ch`Bo0+K0;Go;g{Vgl`t z_eHAa_s|ZnwPeamMW>}pqta4qw#1QOf2Kfgr>plA%4UKl>1?6%5%4n>B)oRmM0{)K(^jv-1Zco=JB&krfS2s);}qz{YgC~fE;Hhr z!3QgiY=*Mr@->oka2PURHc+DrODT}6)L@6HykP}eJDBTnLH-&}&&gpf(IfQnJ};LLTQt>59V6xl`QcazaazZ2)(_ZON^(wwOVIc)U`E{Aa{$DRjKV)LK^_A$7@uW zf{?}XP`PiZqBel~<2rJz6K>4naxu3X8qLuM8U%G8v+|`|2B+=v3^lbw<^=S=( zC3YXi0(kk3dR^h>b7fxyhpoQlJs7?Be6z>y$XLCBQRjb6sU|E?`D)pC$=RR`+x@Yz zlk1;#YN2Fc?HKJAzJpDVioR<~u)JBPe zOrwM6(D4b9v+Dm8Ka!^7PZKjYd?SK=}%> zW%oNZ#8YCMd#cls5ZT%dnu-!ndA0s;XpJPP=b$8ZKQ}x^Kh@Bck49R8X$iDns8Q&! zTt8yBI@d-l$h7313rMbRdvCzoW{=30R#|ol0)m`KG_7v6#m+c8Z`@vPQz~GFk7sx9 z{xfG>o?Tvkl`qm}iC6tfHts7x7wY#81Avxh!P~v|_Nj9BtQzF6b2{0g_x9uk9Oui= z#%f=U&P<{e{?nB00BIq0?VDjc>?!1+rXZLU25}sp5s33=AFVm|y?XY~?iDI!Re&T9 z`=yg6X91fN!@KQpG`UTc&bVy;OweD8)qb!3rf~wTQTz^c=CtSbpB=FmhrMCd>xq*N z3e?3FJ2TnTSTJGaA~{1D6N>p|#*8A*Dk1w^CLYWzZN)0SOBTqpkgk}c`-X580&3dX zU0IuG7z0(pCqLCW_!?~icPGHAL_0dzf+Dp8C8SwiY;CnH5_GEeEcZp*XL-9-3gVG^ zlh&+irQ>8j%WQ3GNK36zH>uY;o(v`KhBeO1eX?H<8n*1@EUwK3Wq?G@S$US|bWCH~ zLy7tKM~<8nW!BF@dV`*2QSA-Fw+{zsvvlTy+m2aJBdeyZ`#56TnRk0=ofh9fstSS9 z=UhJZ^Mb8lEs?dixw1(LcEh`=zQY$5vaI=DEC|Rqk9+E-PA2&CFPKM)*I)ko1AsxX z7i#FCKI}k+C+`wHv;R;x7Y6b3b;FCkC;SP4F<7uaLwWE^_kS1v>#v3+#Lu2PAuQN8 zFpH3VAW}}GU0VGiX7LZr84Kvz-L%6ov#syAr&^N zX+pHiR0VpW1_C55K1Z{ui0}!TA%Q&si%DOx4+>=^+6=L^_j~png(Fa%A=_+r)+i4O z3tC0*8#7SFYjIUMH~9Lw!w!b_Fqu(A>CuRJLZ#f+zip2Qua`tn$#7_3+)6Obm$15d zeYPxw-QR4hx~jnuVn}m(AEVd+QZU7~hwhR-r>9wL=JB#_JwvpH(4ixtR1yhY-&X{a z<@ySoQha9uw7bE;jXUTNjR|#1Xj-?-THt)YJ_W!I}a} zJRP?%jm*Gk)(qxe9+5gBJgDaS<}l%ey{Z%Q2*PkwGdTk8dT4EtO)3(&I^R>U5Q&^o z0Yn$d0S{Vc7&D!rBnE|}HH}NRs`+-+%byzV?l-Ebntb*zP0o zc{n8=_9U`xHb1kJ)`#yW+eS0IYITLEJP^2rX$dIOdWy!#J>Hg%p!OtaYF#_>$rx{! zfFT1MOo(KZ{NhH-uz~ZpVMRmqtd~2*loA_5{t=Va)RC_ln!$F-t8MS7?0Y}3lpt74 z8dkA1sfy#_%BGyyI>!HW!`xC;Zv?7f%AE;W)+D!3t}H@jVP|vK$n4jy@I>N~POzd; zlL-vbE-eSLWA(dd?LbKc1dBRi=0o_94j$Q$UhpgT0t#PU{1) zTsYBzld-nIxDwH?t)|~2(cl{wP=#2n8AZ)<{E5%2qZcEvp13HM zR?)(|C6HY|W4wvA!h^1{TlB#p*j*jzc?!m|Vw%o4JE4i)^JxLJwQpS5tm=s|5Ke9005(7a_^6XkilC-f|Vk0}g<&-b-!{;r#O|&8jWEyRyiTSyZJB zf$8*JUBVi>e1O)fT2=QdftP@-q-Syi0*?A|H7uip9(GIDMsA$s-8V+V+k^DeKX9|SLBW^K1{+1*G zzzrvRFNk^k2)mfupzvQGfxL4OBJHRQVsCF!LW?=D`GP9`+ zRoD~Lm?_Z29_Oe_vw>nHbk7IVGGVz$RAXxc#~!k0Zj@Tsa**}dX_+-)P*yy55uUOg z9Gplng>glCYe=iHgYI~{z`@ZqanT&hM!=P-`@V*|w9eE*E(6PVxSUM~akhxEIR4Ix%}Q;ec&b2+Qj3&+ z$(pZr5mbbda(V7hvGK0$uUa@8Lw@R&Yw@BQEU7*#TX)3U*Y5T^DmB5+;TC8kUu) zzLIBLooPK$xwtzjDqbIM6z-%Pljzqx!g;8l)XI=wF;O1;Hfh?XxJRKHhx}d4=RLOA z-UW?~WE9XLbXR58{19Dvk)TpYby<8k0~HR#+FBdmHKYe7xUSHWJ{{)$A`Cw;(* zupn6Jo`4>`L2m4`k)z&-(Ki6eDprNyK^rM5w;3nI=kbu)4mOzV@7Y3C1cZOY!>YlZ zU7$Amrfdqb^E5etuL_T7Jg)PMX_wkUWrWMIlufCtc|REPlC+Q1*b`d0N}k27zx_(o zVZ#IQnhGX`WOZSyj?linWe5xrAriHpw;WTLx!KO`(d_0edW0VSPBGW|3~}DHAxF*~ zI0t6m${sai%HkgFsj0sgw?vgPF~|9Z+>3E;u9rFA!=H`4Y^{9hz%JK%XC%p{ZlVe?>%h#ivq6bf$f!k54 zL8i%4WwdXBl`Rz8F)$-CbxK5#Ayhj+%7C8-Q6*@;pdi$wzpy;7r!ZE0EWI)c!DU4U zz`os;fc3aAKH7Yp=X>1sc&Eqxo%iQH>AINw@)Zc&fCQgov(g}D;znqh&7G2U5jnq8 znjrN>;j<*bf6h+E!HZKmy6?xzHbbsiauUEBwUk93mx%;5*YkXjxyQE0g1Z@Fu!ER@ zyw0NJHLZmyXh<`C3BT+7{aX-7D8@xWQ$Bpl{W-YsNliFxZ*+@?_~;gJgbh%2h7nGX zEqaN-bzYdjM{}CD5Xy(FFmW?C=KtW)GPlLOTeDpL0y_2!ct4}_HtITA5LYY!L?SXJ zRF!SQj!=wshgNwnD=lB@RJVeNnDD!gJzwE@V54VRQ#&uCv!ORU zGpnn0aq3OBfG_E|fOj|;&z+YCr|b|75Oke3zMZ3MK(6LsXC zizuOrdPcQt(L2ohby3VA=1RfpTv{~qKDX8*;rD)R)_o^15as1l!W&&mUJnJ*pj~=p zE)z73RErbSG!6^6*tT3N@jNA)UPlL$DR8@1AeE_8jQT}*L;A6w*z#Mjw4{0vHnpYU zCbU^m;U~{)PgEA}8h3pcckbe4?|7|!S_O#+yJ#NNqNiqE%W77??A#H_31aWZW-tR8 zUl!Kx{8vDPs}VdB*bWmPG+7^5B@lNhq8TD~mx=A)9~;>M%u=7zo2baDZTVb=fdrr_ zg47JOjzAlP0djqT(xj|-L;Vs6Y|&)J^2Bdwi1 zQ4wXp!$ETf-qEYCP#A{SYLE)VhHHdN$Y`7buTp18c&t_*z^rOHwLA%WAKj$`_l*{Z z0aYWTq_MTRHI>ow1JIhL?ejvDy^MEVgnAI8pzGqwa;kTD<#dNmZv^hMv9vKO2mxd_ zG8l!1oEN__r#xCLBhAYcLzcJ|Ikzqpr*HHh~E zqFgn|H~H#Y?NP)Fuwa$d3sxA}@bK$*lcT)WzUO^1f5GXDod=FZvg`NX2=3hUni3c_ zZIns6-Mzgy|1Hq;1hjI?nseL*AvGD2G9FiBvY~1_b~M0>4dJ zC=$ai{o&cWawO<%9GsI96DI1nZOqO9IIbC4$_;7JUeH%lyVIa{LsT4|W9cx@X8h)u zuUkiXjsn+RLV#1uU1%=h3O9^M^Xdyo3r5v@^xb`j6;sBYCTg<4YS4fwtxZ|53aiP? z7sIJKQS=Cn6VRTj&VgAYDi125&q4_=2V8klm`L3~!W!mvvo;O6FCxu&DhmD#irQWu zv#LkjooRBfI#US!k(0YGmBW!eo`JY_K!UvdYI(#UvU781aJa?R`;<)!L8*`#zM?8^ zpJ8yE5fn7|T{iTz<}NU)yc*72ICHtmXZIlp5Qr0k6)I(oda$6Kt+)9{9N>9(d2pm(OIFfgR+IFV^VO2S60Cr^k*0YoZ zG-4)9jUH^!Rc!Mf$o9hT!ZJu!Bb!r0Xa239=pEzqoPJ6}RxWi|cL<&h&3f0QM*YUTJ6G^pM|oxz=>ShV?4NK;PMB4%q8inucqNtUNku;6UKSV7G)g?&?yD8Q0s+qP}nwr$(CZQHhO-L`G_ZQJ(V+1YqAfBRD(6(_1HGx8&&^5n?^ zwe>>Kd^1?2gckTdmMWmdr~XK5iYc=J(=LI!o!CD!u%F28pPd2`B?H(GG z>k-&Y_SPOe3E9|vNJ^@d6|W8aNp^WRl>D zH}fTg0*^;j9{9n7H* z7IoAHFtAaB3Vs;&Pv`oexoY73XrG6XA2+H&EP!!yi%2E#LV`d@+q0{f(P!#@Fnc7@ z7XiW=znf0O)kpgE$Dta3{9-0HiUzCMSkqETr^)s6@~ZB8`NeWB^oG}ihH3_;xGgFF z2EU+IsSbO;k9X*%hYFA+P!$t?Ivmj%(EcQK9^C~pSE-5tOGIL(PeZ%C00*TUq9eGn z5Bit2Gl#`LN)P?&mmCmkhs|d5aN_cF+`k1op3kdR?*(_qyXPe=Z?*S+B-|Qd#v)MN zs!FDa{*s%GqIcs^OTjnjbdT>`12tpxZ4X_b5$}`=bwK&X^vH8W+CdUsZe5+e<&*E7 z=L56aitC9xM3AwydvuN8$#+f=`fXd5OY*1y=!~lkqBw2}xtEg38Q%obp?+(lW?OBt zB%jCw!qR}b?fYK5aZF^R{ETV}gvN~zdZfWDfKUOWdlW2^7Jy38OpM-kG^`rVZbCY~ z#mIQ0CK+bt#_4I2=wnZK_{YRrTzeOI!XljpCdQ48#)z%<76rTJb2@=k6SSfdY>Opk z84A@{aNv+|LqFj7jgd$G_Qub~i6Qd@EMd*B@X%6RN|Gf7ML~mRzZ_dU_9mk7eH`k< zCYPb^cX%lVnVUxLM5AuU&f%I@?U_ii^l!ox@fA)I0ug$Er|Qz zqBE80)bLYZ)1mn8Z^%x%aVmkz)oLbL6ol~7g;cNB#pa62e0_)B3deGkGB)*O!_ZVp zB?aY-!51($Ne6@+txD-2F`IPG%-U&m!8U1{&}C{Fi#n?r;O+Jj z*Vn3|R!(y#Q%S28JtWwe*>G*54X&WC^NYj_W@;tX*mNHlos8GYK?d}sqnbc89%O2; zuwkB1Iijx-87mE9GnohGAY98fMHO5Jt=8ewTA3(QVHS;(R>c_Dmf&RU7#Rq*Ck5Rk z9rf@DX?CQka6{?1_T(&0gzB7-nR3wR%*E2@z8bn zZs$R^M(bieYO%1%ovGVH-(vuD+c~kO8@sxlR15@U) zI^_fWO-yw!Mza_$T`8^3Y${yiYVllnabpJ`&p{bR1QG;$7YC#cJq20=rsT04vBDF` zG}>BMj1pA2WIEg$R_I8Y$R5WDK*LLr+;;klUb3a`YC6tzHA@UNqJA7fk>V{7a?&kBbKNrs{Bp=oPSh`FZD_gb~ay%KH z(#8??tO;RXTD7z6nv5H+iAJs3DjQWZQIqW5KvmEskue0OLpNdpJQtmw748&BtQaB0 z8`|+{R_!Vjw~fD$^jeaq=c;1W^uS$vy814^Dbzfw61KOR`D(b&MIPGWw(HWQGBu0l z_}D<2EY#lVy!i)?44j?066|$*3S6}5d3e?12Cb)!!^^-p#3Hh&78ki9f~?8Ojpm_T zt)`zSEr7*R;TzCOz+G!%whpFAZ67MKPOHV7b$b*)xtF=)oBIh*1;b|^@&&&m)RQ&7 zwhx=r?~rgc)%HTS4%M2$hytQ{vUOw@+(!^7uUewdJuScnw#6{|a~{0Y^97{O9 z;&#AxMHfQK{4FKke7~gBw`@IvMfZJ5!@}1CN>UR2t!x)aK?Ho5L7d5o@|ABtb6CH$kRl) zChWDuSkTs2SntneKg*pnE^0*noiO@fdJ%qUM0~Bom7^jp&=bOjvTE3 zGUwV5{F`~o+Usj^c>8*ZJCY(JT4fcK@sy>$CV?cJ8n z*DL9LvsaN^WXj0(yUstv|C|-Q`*aJ-1(4ikpI(FI5YGhT2jQhvL$zsTfmR?Y0@+WE zFo;+{Kv*{hgqg*Kyn2$Ae|9>L^3Y5tCu@*2LQl~ldFN;ql=hu7P%%t;)G|vv#w*Uy zOADGNivRXhTxoWuW&$WTv$`^5bHfsTzbmWphNSTxtmR=07`47Rd7hb%Ng9z&qMMD} zUou_?v^YGKPAA$#^E80PvRX5E@EI({}KS zFkCh+*v1%GSOK3xHP3p=cM&pAGt=uYh#q7NU=~2N#92NYw5xzZPce$C?-eF?0h&!( zbpy@(MBL+Hz;djRVv3t}zkbV|h6!8!6zHGfF_&4sj2@KefR+k@3PdUd1^{WhgAcC| zE{=PNwm8Sv(VFQ*F*$9)u-=o~6-cXb5vwTLm$t(Ocp^A!;Mr$qeTI5IG$%yRlg9y+ ze`;SaAaOCuiw1#YvuxM**N^HB!KpOCQCr?TU|L7p?Yo}sdYH1q+eIZF2p&(PqW^5f^{qi?QsKoLqIQK zMyHqD_Hno3ToGfvr^Ua2FA2A+?Bs2%;MXL^c>#a?ZUcI#d#B>>&aXUwcnD70PwQK{ zX6Vhe=3N8Jez*kC^Lyd7&KVfxC*mmO@G0e54h-}49=~Pl#*NcZ>OzM(X zeUIlkd*b)N)@nhrfE2VqX$?W#mlbdBOdf`hK1h}W4dkpxmM}o0rrlwjATA2Dt4irU z3S6apRRchXkrHccl`n6n{YtTBo|bEYAeXDXX=UHm=8|7cv_BKRLM(geu4)H*r6K-_ z0ij4Oj9~2FZ?C$~8+!995iK+m-pdFHd>?dwhMHmEv#<<*VzNR*R=`l#63B_{>kJhd z^5==3M-WtO zpKlYF6cmzndQ&)EN!8E*g;P`2O~5uyBAA(*Mgh4=DC=st(NyM>)@+zD^9QcjIaZsx z_%q*7FhfKCq;*!-JwElm5%Mrl)9ZX0x3ZI_p_N1>P^J|m#0mAR==8_!!eh#xDZQs_*P{fMZ*7_&3# ziw?tWAp3+Fo_o4ZSxKS(yI+{2d|xe96405l3$ZH3OlPjIKV>@dq_AwKM-S!>aA$x0 z9pwGCCkiLY_s=E%5NGPJ1){^2wyVP8%*)|xgWFbqdZ_4v(LjmArydw3U0RR)rMg4m~h;AJ*WDr$-HPany&Ar*^)NhHW|03~4y z_3Cg<{|bHSJ3`vRrf<5LMn57kb6o(s;givDW9zg6Rph<11#^=>i#`Nr_}ybs;9cX! z9v;ScC=Ec{ps$slIVsQ$M?F=Su6c3lEW^TLRaab?ZZxw!0mol@)uPcNYuFlgNFZnb zS{efpQ{Pg=@J(+eSIxZSV($5%OxPhP)(g_VOWWH=lABB+85-_iB&>GMq3$9V z*gR|69(MrT6L*Nh{m#?$n?spHb?@x7kdm-WFSOFWmv3Q8doC}GmltfAuat-MA7k6w z=9^<7r(+6i5$y9)68}lE0{D3jXC_+oAuV(8hr>7Ui{sn)u`D44qu}`J6Y={1(c{54 z@RHI;;gJ@k5N)T+xSnmgOcI%|Ca{F;4POrX|m(O9xgfbhap+aZZ&H{Lc?6S)DlK&B4 zz9o-PGB@&(0-BYBE1+fj-6*H8>R=h0NJaHDM<5Y~@aO&J(@D(J20}L}kFAF}+=}%v z@pVf$C0eIEg%2NpcBXqBO$#b}3i&UHImaL*oP#ZAc+$$%O79Uz%@S9vd$HZ@leG5| zKOol84W&9VLOJoXLL|@md=ka+m<$OAoYR z_fIJkzNX`FInC1>@WV+?07}}ij&chcBBZ*Wj58!%E;Fs!3(*M&`8P^jSZEeYg-(0H zQ9IKbCAkA^U`L3`KB%$i=GV|^>_(3F($5GMT$t|m&F3$ z{N(i29T%-N0ipTrtx}^V$^eq7CWwmHmYa_4(zY9I${wM-FVA*M^)!wh^eJLxkniK^ zQy%%oS=uoG=x5b%+0_fF1s`c~|x4 z0{;tH$H{k8xqdeA2lTd;4E&vip0_M5CZ|6e~$=i_I;7SPWP+K-=@BIF+k+4P0{Ufpf}`uTXW5{=DO zJ=||Z&kCz)3-|NnwWBqKFh{)gRitR&YiX|>{CwQ*0D*BW)B?gIBN$VYz>uGMV(bjT zC5qC^Io*pay!mBJnM&X&$Ts;<*9|bTvSE>CzYE3DjDz9#I)?UfmgdsU3MmuFm&diQ z0MX6tS0F26{VYX=io&90Vqo4Jt*bO3pP&+F8{E78l$(CCh<026W%2eA0<4XYz^H1M z@D+mXs0*H2!OVUs`E+0Cm4?JjSqQ?>>UT65JFiRY(@c+`VFWw^OXFx-EdiAU%f`a& z0GoS(U~c?3s~vGDKAk90&7^xEbRC-SMnWzd+7VZ+>U2sACWh`?CpbORm(6`Y*-h60 zQZ1T9Jzi3hX8far&KDL9<`)6ub!(PI=PuKipzw?R)-G6^j@0(3K}_(k>lAW7rNotr z8nl=4aBt{w-97p~yw90cq|sf_80s%G1@+mzq3Bn_4>&@>7T2fwza`Ty{>x-KJ_3P; zp@4LxU~^{$CH@`8v1*e3B`qAfO;VZBde0FEoOxWuDu=?HSQ7&-W4q(@um>lSh!n2P zb)#&}g{-8I;0O(YcbkIA;8VoH=`?iEkuqfM5TH)@wzeonf*6v6`B1%b+o|x}RL!0E zm%{8?5K+_J!-3BghYihH10Uos&eTV?Mc{UvNg;8Vj_wBTW5h?=R0)eBuS zD)dMxn=zV#?B^bGxiT_^Zf#MZKlCnW6b)ma&ABC#$Vq705JL)z#1at5#6qL*6ROre)YAg0Y{eSbX}q##gpazotBE)hj|Mk3nu~Zs zDt!?c@^oq01Befn*nu8*3@Y>N7Pg+EC@IS@$1T>b=nnkSpFss! z?|zejp94+Q6jPc-=uOY}-sJ6k3HCinvHUIh6a7s@SDU?q>XtKFUjjxqs=J}8V^|rQ zD!?%Nfef4sP7V(j3xGE^Bk9R!k)(v8FHd-}W)+NyohxkzHM{;e;1_chPfBahy%%KKFZ2=&1C=l0LxUdBKUaZ}GWF^~8d zgC|3y3Tb3TN~d`!R4=szH6SEa2!K+N16o15X2M#^q*>(|P5JGE!tmh7Oww_0&j(P9 zFK0h=)#Z*SAd&{}hsy613iz9}GW*3jBD_mt0Y7+!4^7>Je>kF8{lX<-9ziH&T@(9} z|0DO0L2?KZ#Lz<_-k}ozq2)VBZv*i}n4<)>DAvN3^^PV7h<7D|H<}KrDwS*Unxk3H znBQ26X(gQj1XdfIJF)-P zH1G+ez$pREcmST!skbrv9Yd)DVT6g#0ETRYQuz0G;bS$E`R|BwY_|yr$Sa2tlrrC* zAl=IR7t=^WY4zp1=~6=5!CDKcHNV8-=ShoMFf#v~pGpSL=8(%;te;LBbw|x`^)}94 zZYo|nmbHBm+Rq6oW1owp)e`5G!9S7)-&>1B*ZOSP$P6i$gF1ijjLc(^)j(~- zVaR~mmC4%dTiJ3~uP@PFM*Lc)4jPH|L%GwxS z*M@4WRleB+ELpj|Fw~7qM%}hH@Z-CjnQ4kb2-zZbjD=X_mRu z(X~z%_0{U28>3Nm>+|kUj;o!@(|C^_+}s!Wh@X z{2=`nZ3?V2D8|PiI~>&u3!KmeosBx7i%!xXYD2~_VKPp}#T;LJML0szEXk5CO%p<; zF4AetjPx=Lw2^Iu{}JZiuWhJNi3sW{S{Zg}2hv)SnX!wT`G_*cKE|E$a0m7MKnadT!)XA;?-nh6&B#r zzkD8RFyIiaGRoI_TDuE4t2r3N{?qHR-l5Krfyb-(Fa-DLj`5hX=xYtdqqK|A z4m(W{B9vz%oFKEmjjZ&Zz!NAxX2?ZGyRvP;!^{PvadxM>3Zg;YZ|%u=-36{T*+D<) zA~?l;fqE#*E12ICE3wuNQbfX(y;Hck*oCxA4IPWNTw)*7(0Sg2y1^;hVK7O*I8O+9 zA*bh+>g>;+kFy1rsaHxhNb)E8+YuU%{YC7k%2i2SN2uSbi|QgpzuVfW%Y(-z)bAe=t7Khv#08?+X3ONu_`b^D}XY4 z0INKQM!aqv+WplGsU}PTM6z~E*XLXy`fhE2nJUq#HfmiVsxW^kq|xZtpm{6GxbvEw zt}>PuEJ`AujTKJiV+#(wFNievRXds*yT^UKO!TK`s?~VOWZ1d`;B|Y#gNtMR)}*%R zv(teFn7itXv5nE+JwVWVC)Z6SvGF6?rSBCxd2YI|Zl% zAZ_t4vr;mLMz1Mn)(}hWjbNTGxX(2YXV(3Xh8OnFBfh3%i1c!Ou1x(V_D~yu1i^Tu zQc*k9L#8W3zZ3(fweO-RsS${d5kV?n$b?3>c^bI#1Wqfo-c5cmzqhx;a7wRJ=v#?v z>0fI5jl_xLItOd^f6TPmV=OsSpCyc@-Kd?$4K{m5V_kUbA4%$8gn#0ctqDI%Y z?eHT87V!3y8h9>FwB!xYGEmB!I!cHI8yt)59#CwfwrKhH!{*e_uLYF+{Ydn|natF6 zU`q0=1p%FlB2H!nah2f77JF^F_3LzLN;f-V27GrS8xN|OAXFIzBB=T8Ju(36ulOyL ze*Db-ddX*P+7@J*t*oo*?L7xTK2srWvU%SA<(lKvCL1}jMzVOI%H0TvZF_>i@A3B> z!>$vgybu2TM@m>8BHhspp@>NQ@vTLVpi!<)`bBfI&g&Y{F0&6{FqmP8a@=MH+|8Tqq~-|(zOu6&@94#*O6_X8;9NvO zl{vEWRtnxm+$+dC-HK8~&lQNADP*jkf4NSA`hu-W5s*T~8jJaMGq4jNJqQSd$1HsN zsTrrH75+_NZMN8=TbEi9La*I?C*SmCIi`0E$H8Hp_YpKD+;)GhRTPSFp2Dr7UxRrH z*)5lt+NV|%`tdXIWUF&&vk&(DFi~hK|0Be4i#$K7YZc~M87h2N<#U$&%RU7syVf`B z=~cZ8-TCp-iCFH<_hp56u9xVX3aP{2^K?Y^suJih?vATv4=Y61_jNszP0P%V<#eYd zApwU}CxKtq;P}g37Mh#H`sN5+eJpNTr)Uk1b7t+s<}XY1o2k6FMqC+7StCv4p|I*; z--UZ3G`EhDeFl%X@vT9Ia$S+AEtdVxDnnLh((R$8|;QtLYzIKeMI@IA$)HXeX~N##*ER=4nQA4dq~m=ySf# z){mI4`jKGWrzLFO?6c_`N5H{m$wEbP6w@o8fi28G<|8~$c*QY>i3B~iG6Y*~&+lix z7Col7|mxU zg>A&5Hi~S}?2rRgrzB6)TQ2pH`(!UrMxj!qn8)nY(}ognufrwI`xJ|*2gqLrj;7oV zyAUn;U1MSKB!(LiD$H*_&Q|B>W3Nrn(O5c*3mttRpiX`t+3ArDEaFCUVd6D(AAF$d zK_e=Us}9z_Og9OqQbnQV^QlI0EG~++*HfyXV9eMX9EQ#Z2wBl0|2lX!NwU4B?g}6f zR@kl>H=T6YBIqYa-KuY?`%86;*M#Gf8PiSgq{$dyWx1cAh2h)U%0K@=X0wS_p7OBq zoeK|1`Oc7{BEOSPs+vrDr+HlB8Vu{XxILna?>X0wBNDrORD#!bQF5aBO5kw-o1Q-ksd+)?lx&L;3#I%L+YcryQk3< z2uwm!+fMF7XoYCUy{hbxeV-QK6!%gY!{F}Q^cS;WTkh?`-J?6TCsKQNP~GtXV(;Dh z9pca?0UqdKtqlBy<{*p1dZoY7YFIDN6CP^3&<_BXQ3MDmQcpzFX*8?pyBC_*6iB) zwywUJxld*VD-Uyn?9&GJXa2RhT5|7AtEp{mCxV?U$%L0;XY?!VxLc}q)B@?0v$XKy zreyDE+Xsir;r*Ne8IOuTchOoB+Ydn1iOlTb<4xCPs(TDXA&d+ZLHe`ee$=AQq7^YE z<)1AieBIuRL-nuZ0frhoFE?VzxL1P<#o|O^*!s)@tH6DAU)qt+vSNcDw+!0lJRaok zN%zLcUlz_?rLLY8ZNeXDV=-tNlb50)P3WwtTckB^DvgO4lF5k;j^GSF)E+0zXvcRT zDgE7htTu`Xzb7SPYvu0=^2%7CzKP(jS_x9{g_#!hE6=2KPB!nAC$(R)W6^@>ZbyFO zAnv+4;~l(-9o}nOtw4U)mVK7_PwUIrN2%fCp5E0V$@8CJQ;K~)YV?% z0dWT#_}TUJleObud_;ofCr6y&&6;TPTG2gN>@AtnYq-r0YKLHYGaL6Lf%sPm(c`+7 zP9j_9Brom~LFuz2%A3~X9Tu2ZQayHXa9wy?~op9#8d|G$>2g zHUPQe2b_|IC#c}**^;jc8HwpftV~HJK8|SUv(F~p>TTnrrXbZ1A=e9$1 z=_0{9JFBcjWJ$K6Hu26MOp33Dy=TYYM z)~Z*$D7q^?y0?y_KAxr%bd!XTr56IP_9YrZ+U;$TuA<%9Z@SwIz?Ga$_ii#H(#7bR z^znr0oYLI*hqm*^(EFsZ^j198X6c&0(aoObsm7C^BV@%n@D{}4bC1qMlVCF zgxXBJ)+ak$GnQi;Vlh@{w7I@ikf7_u1azGfMoiV@AX73R$wMQ+F2y`G@b##vM zZ2R9F#d9OP^reEMn5a*AyU_yf8|H9B`5_k$2}efeuRt|nKbUB$kP$@q8~X^>q3UsDc_Tkp43 z9#>zqjCzEwo8!YruRB4-f!!1!6|ONvLX@8*3Xd&s`9+5^4seKAybr&R9+s#4FlsA@ zF?g|`fCsDvogLDHgSAWjl!DBaw zaD|H;l_GoZIEKrXoQfAU=UKOZarxnQ2@334qU2cUEA^{GfHYMG@0PV3tq?KK6s!wB zu-*Eo>Y>ea^ZvXuL&*=%ea%=SOBfY&JPl)=5v=!U{*7OPx4_#mL~Kd^$QSJJnAF-}+KjxR)7HulP7r7m#2~tNDRk%`>+fSruDx}9A9#Qb z{U6bwD@t6{g?Xt$Eh7NB%r%P0{&GbS=#ys3twFC5eTC>Gm-)@X3!ZlI&V_6Q=+Px-gL_ zS9EP>aEsgzJ9{>iz#9%Khm&!M+DRyvSl0rsx-0_IQtHn5M+bEQ=hvQC?QY}z5ENHb z4rKd`6+C`xw^hp#*c;1(Is4$08=^mB@{x16JUfR5pkiqHjHA>Z>L&gwvE9uBpr7%< z#51EuXm_p6UoMX#|Gf>JU;xhY3qt|RQwxVsBuIpWl6W``z%vDUR7cQ;XG+N2Z<397 zG`WyC<|0<>q^c6xQo$J{_P~?)k9A>j9PP1;+S6`CCCKS-qv&v2t$$>er56#w|m57abhKJEKFG=9%FbWH5@;W8D<$yatzis zx-?x)ylG@}N|#2m8xV9%X%0p85Jm@OgWMg@x7Yo+H5f;BII7F8F~Qe6n?ItT^uB|N z3j1@g-ndJx2j)tEMw z?5EACT9u z;x_0YS1Eu=9s#c@{gY3^{ReNU9L?WtH>nBIhq?UdvHZ>NYr;9wU$hzb zyYC9|52B`YoI>i`KvkMshD{Gra*2wJ*63+jw5r;>YMJ9%Yh|T2l(r(xX@Wlry@57WKCG zXM&YM05hrKND1kGsYMx^!vp<<%gEK#-c%18X&?Nl14Bz;z<~|BQ1i8;T_<%}BV1W< zG!`^v6DsUjL0dj5$_8vZs?HI%gk}V4FIQwzYU<6PX>sv+#T#G(L71)qr4?*S34*WX=%0wKc(sRpFtbn($ z5r8jXr4T!;qpj6aP*QA*Kr2L60bebKdM>o=T7F!4ZOG8lJkIvT5}7{bW{RE%0RqbzJ;rZq zGM4+BX8!Eg=v=^v0npwCE`1CgLewa-g=JT&PN8ZUD@$vWtIO*HEDROYz{beROit=o zy}*taVK{Kd85WV)7+D!_5}w5gDQY-FgesXjE9*SG0*}}8=a@7*6kMl!KL}=l& zD&qoLHMafd)LN_U(8~`&%rVJ~)9t%?!={ycN6()DCzgC^!>3WFmVFC1(D(ZLoobyQ zmm$cALr{rj$f<`ws!7ObZ8W9XeGPt)LT-_UesXf`=X2+Ih+}4|>w1jRR9}FRy1VRk z)I%`EM092Til29>2^W19uM9KSx3|WM_f!AK52M^uv;CVRmws*Q`<{oB_wy<@ds9>` z@pVtzkqEc%WlcAQL^Ddoa?w)JX371vwYE-OM07RwLq4kb!c26n zwu@FCbaIWIbW))Z@3OEdr8ce&7$B%0fdVE@plBY022P$JX&i+rcGjS29fvOdzg~e< zDO0C#u(zjDy@VY@)-2lBJFuqxasgErd4=irwh!@Nl_2X-BPF>=4{^pD!(y{bd@) z{-g#)RAh97l%(+S1wz@4Mw|5a%uq5<&z6s&IrIEHJ(cK;1m5>}PQI^X%Jp5qAEy zUu_aJ*Kak>fU;Z6;wPJCoCAvX#aYad{*HIJSoy;f&$scy4Zf;Mc6DXY9ODc zp8xmby{{)6<%4oJrqnx_sZPki6Q)MK&W|iqt$fP~Ji6`sXL+!ExSs+^5 zjv%UBv{^Mv>vB=qOm`gqC*^MDz^gR1a%O0y*=u?fpVn1~n!Z^gzx1uD;)+Z)b(B-C z9L_xJajN5COa_azcJ>C_49%soSe`Cl>+j844awLBlzD8$wN`%ai{0}TkF~y;=y}Z= zZ_`;Yn6N8ROFtT*(CvxqB{a-Lw4|*?nct|aE?ZVNBm(_VXt69RWl#6h=c;HkmgDK@kjv zFwvDP=S-r}1wtTAbtFo8lWBDU5Xn*;2~%HW+I#^21D^aJaP|LyYyTJ6@4vuwC5w3z zY;*w-$derjQr=`+Jpe>96o*1o*O@k#KoJauG0>GQ=1teo1cM<={}=r7zm9PJpZjk9 zb05xUnlK+>2!asAe=mvfGP_}rDJSjZxD5VtYF$goLB^jxlH#Is>9t;AnYO;B|1rR= z0pLF-fSGBTx-APzU?%XE++k!GE^q68PfKNtcog}+0s>qnK zYBsX9lWUIGnKlU)a)-9FZ^X^QcQ(_Ixfe%5x5j}hBNuIqseH|*BzTsd)W`T-i{4ix z+lhmVWNW3$FOdirraBrc5S@Lj_J(d3pJST&JU>Fl_EZI1DFM3`%!roc=WKb_bbP=A zmqT?Z-W`8;qfTe1Zw7JXjdjF36A+H>4t|_A@GYj5+3u^ik0YYK_OUB^Q0AV)8T~ll zMRSCX7R6BdAz%4UgSL^wp7EZjk_<>J&**xQ^nMW`SfXa^R;Euxz@FN)iU zZXDYH-lWFL!Ln&~{soJ+NC4TC`x|A@L|X;#YH})Fz?tZsKA3VVt8zQ!o)BJ~FfCYl z3Ry+WehB%btb~LPxejzfAG1L;516KoDq^n7VmonBJ7&#xyJZ0}(%$FjK zA?5&yfC7L${tB2EQe{ zAk=@SS*ct<3SdjDGUZ-8z(1J3{c`30%u3*!_yy#5Ev8QT3X(cmGn=l}OW#aY5M>p< zzb8@_+l?KMy~Ym4Yw<8mCy(=da@CdEqQ$ckSeUX|qqV0js&>g$yQKf{6XCgdTAk%e z;6(H3r!ym*;%+4-Praa^M!Y^UpbIPr=ayuY7U3!#@(rmz+Dr>!^A|f7{H2IHcYqRV zEC(W|&j8L@E6=#!uY^QAQvumG2Zk8bt5wV-i~pK62lEa^Zdx}Kvtz)NrU?W|n4Ge& zxA2gLg$-{?$a{%mOk>r=1E_ZL_s%d(E%k#SgkX)rETqcNgN^qDlj(B&0U%Fi0OppF zFE(M#rXpxpw}Tnq*{DYf0)J)?~#AzpunT<`0+>yYXiI1aEMm61th*aEw z!1P8qFxT{q!}`$9eoIkij?=;j!gWkf}}G^aA+sQWI1g9!1GtO61=;e(4o0e!eIj1(V%CC6v? zb(+ekS>B`5>sUz>xLymVzde_P3;>1+A-^?K?XfVecf6l30DuZ90H5Aczh22hpMvUH zz8%a|t6hx2sWAIv$|HmmbGlOh!2o8_r#5=6qNa!|j5KvlS4Zp06a}!sJ9#f+0@bnwTma0G!oufK#@?@CkFf>6C~d3wVgyLk(A9RCBp|sQWcYM>%v&Bv%tx;+Cl1 z9)B8l2Ih1si2Plg9L?z;PN;)?c!UhOx-*=D>cy3dYsQb8)`6v|-_vHDfe*?uXZII@ zKrHx@Rm4!7)pEy2rkeyVm#Z$7d&vTHRg}<%uS{0M^)m1|td*{-)&8=B1I`HCm$YuF j+m-Pn6>%p!-jaG1__DDTFZG)P20^t7u35tK2 literal 0 HcmV?d00001 diff --git a/client/public/assets/fonts/Roboto-Medium.woff b/client/public/assets/fonts/Roboto-Medium.woff new file mode 100644 index 0000000000000000000000000000000000000000..e682260d2eccd3c8f3a76316e1c3d2bf14f04234 GIT binary patch literal 94044 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%0AvP1&+wK*yPNnpYt> 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%0AymNwoanJyYd` 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 z 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 ZEWw*#^y{9b^eHlqYBs3gnu7xY{XbDr96SI3 literal 0 HcmV?d00001 diff --git a/client/public/assets/fonts/Roboto-Thin.woff b/client/public/assets/fonts/Roboto-Thin.woff new file mode 100644 index 0000000000000000000000000000000000000000..5f3e7d28da0b7759cbf50ca5cf4fca7a237872a2 GIT binary patch literal 91816 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 literal 0 HcmV?d00001 diff --git a/client/public/assets/fonts/Roboto-Thin.woff2 b/client/public/assets/fonts/Roboto-Thin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ee5ef6cd3ac5a12705eb5798a4679d7160f049e6 GIT binary patch literal 64288 zcmagELzFH&6E6C;ZQHhO_io#^ZQHhO+ctLF+-=*u-+#{NjP5f?)~c03QYk#Cio3ix zGXMziA3g~I$p1~iLjwT7NBjSk{ZIb?LO@(xMHUy^4=1ok3AaWD+yD?s4=D*1%!>pI z9lnhj_6dMV!3O}b1CxSOaDozoMOs1}dBO%7YtMuw!H*vO&>L$r304(tAr{PU%QRoe zze%!=-(*Uvm6m6GUfmSrfXdmkkwba5Z$ByxP4J*mu&cg1?H9rIDp7$M-CBy@&G zyEtmZH^2I>jm2unpbS4_7;gj|kPA-4(_<=%hUOwx=fhw}unFZ$@)g!%AMi6Zytp zm&nSV+{xXdjz2s)Z1wcWQ~t~Sd(wC089Yf%J(hn5UOlxh)*q>Q|KeJIYW0u~B|>T$ zRA3j9xKAeT>SXza%sS5JLiZ~Eai{BS{AOj_IGaa)i*!nSYVNW3X74|uSr;B6W~W{n z@WD~%jS?q2AV+th%#X#(SRviC&=eZ&EU(O2j+1Lt=rd?9LhaA({BNPnEa@+%SWJ`n zw*S=+?T{nyyNC<%*!A8V(Mgujb`GXTcyu2kRmw&qSn9%v_5KeqzdTyWCVW1;z>v#W@tg|Ln^dk0HKY@*Y=Ms z2&hnDYQ?&(&9cFOcszD15)O%Y43kl@ND4HSC7Kp!qhKQvBQjD0a-$!tyz^%_7$ah7 z3~3GVo&h16nlDo0TS1WM*u?IcB2Fiq*GPpT9nnG%bnSzW3+8jxh5Bnv?OhNa1xzBm zG3dMqX8{)Com(PJ{(d}g9OLmOIzV)VI&EjgxpCZ>PPkBE&fJkQ@@`*_GDR@6|J3zy zI&+3&@2p92qI@u@6t%A`LAb%7(%1KM5byDk<69dpL{zfE9CG7)l_c*df`aQnN`A6P z$2PV)0r%JW#Xrm_ldHwUnvRfqgDujntsHVDex#lzJAQA?3#_yDil$yH7GCD$YhX8K3XElGyeVF`ZMi} z1YOx(^$z5#15oG=JT;Q&42i`jQ=d>|R(P(q-(X>==1}lggams?lZt`tuBvvU~8fn%*O&rl}ksLxpDinr!8dTgDzFP1Z{-)H^Ivu z3(7+MRck8?2n(pU=RV!AEdBWtK$pZovSK7&29E+phzJtFX(kMzFXpkEW~-+Amx!T~ zg^O?S5R&DO?XPmTf;KN!G2%mQF>7SP5$cp6T8>9ieiSI6icz=15~pldd0#pz71WSC zrcdwUC<&`sR`XcoV2f{{>=#L!nrzEz6Cel#iaIdxn`xEmR@hA?NbCk?8Pk$?**eyr zW4xAqwo9(~PaO?fbp>n*E+M2CNGeuPnk29YwsL{CTS%I4Vj*#H=1SVSC$uH*lB{+K zyZ(`$c`R&KEPYn@XwkubxY^J{(?`?E(2Mu?ciOAeoo3beL-I+WEDS7zl6EC#wZ1s* z$TDRo#W4gw$R}*0b~kC<6isFiuWZFF$yQHyf7l`~xvQ0%A_< zG}h<3iArCpfPQ&XS8LWTE#@qG7IyzNsSbGxsoDY^wy|9&v-0xts)qfAM1pI86~ZDO z_75>S&dt@~OTE>b^C&1;BZ z5*ETJqS%%tNJxo@U*k~cSB0^kO&mh93ub;f1Jt>osWC&;9 zn9I&%WGl`J;Ccv|R`HJ{xdQjMEiI15tB8_>*F13D&pRIzF^0NadS8nT& z7BK|5s_tIyz6ZZY3VlO<&7l1NSWN1GKSDY%xWoy-1E?CXkk^(lgxdCFgk}d4gI^kp zgkK)a1K%!ALViSf2K_!AK%meA07%RMasW?oAeu%ZA|p^gm*^g< zfp{D5UH^2X!Pz?O7;g}wp_cH9l2w|fU1;jh(9qamsWloO?*}X4r;R2QndiG&;RpHklr#{*CPnAQ%}e-n z^=0-}_i*uH@=~)iBPjIJIh=U%hEeMVo}9a;r~4D zjxQ#V;5a@M^t=Ew7j_}iRYc~#W@cva_Jxo3j&hIB;8Fi5&0;zz>L;JI zyY)4RZ)oMi`Ic9y_U#IUjGpp93R|ghnH0ymH<{Ij@sMw{+LYW`wSun^In3peO7Ii4 zzCj__R0iKZH1E8~$*LzPvHW|F`-X?7#BUG&e&yo`M=^`i_|_{zqsDH1e%j618}1LS z-}!E%`>&AfINJ?P5GWs-ShcwdV+w8-e0=1A&9255t)i^S_w!Mc&W!<&B<9juxDgb5pw?@3b1TgrbSCjT zhL8t}cq|t=jEkB|WJMa(6LYpPkRdV6Pr(Lb_SW~Li-CX8?%c)bphXe)rp73jB#fEX zum72`3t~+An9^oFdfsuu(r{HtaGfIdmL56GE!uK}EEx zUKaoN0?oX-fh?vEL>c48NDnA101y-(0G7|j^oJI>d!N8DGlH}z!h$%A(ttjb<|M1r z&@R(^0019hj7UlY8EFL6QFw|plAT<(g$43R2q{GfO|k%ty8r^* z0F>MS9DTq4Hv;@T0ZNsKrfidmEdg6Hw#2&RvSdujxsY$0)|FIOQ%J^Gl08${EGhM_ ziWRF2GIU5M0|CY$u|=3VEOl{nz1dsh)tDjivi2kCIvm9TS`Nk>F$OV2gf$VnG?J58 zHxZv%)H>06CMW^nAyzYklGMyoh2K4r`p8HDS6UE@66TmNky2lUvMbg~fzB&HtCD7$ z#wyfXq}Iv4(zPzSYp%B(--)1deB1nj>NVBtuWzxQ1K;wW8;I7~XQlcMAl4A^dCV-q zWXUkIdElhOfS_PUO8D^M!w631xTxZPXPjlcs-9L4Y17(N^169pymXG-2kQqN2Q_Go z>LXG}=3?l$;q@cG$dkCu1GG#uGuVg5?CSyw z!`ux-r1Y+RZ2GNgF?#qty`dKEH0`w zUeEZ}PZ=X3@lW*Hmr<fw_36MZgW5Q z;$)7k5|HngxA_kkbf_8YC;M{54dOyd4}+wpNrNE;d!>yk1UZ#9Ec-<7Sq4nIpns^+ zm~5kO+_RYPK@YCS-4tr(Kk|w%h^-(oM0Sgy{59|nx~6`VEB_d7VaK^_liih|Xap_K0(&p1ZD;iDd|}D9a$N@cwE@HfQW9QB5yzlV6!W>LdNe!UPRx z8!cN3s^v9~R~Rs&uq29{g>7fqCI#U8hN)>=`|enpFDF%==trtyMGm%WNitUdn#Nv{ z?kZ?cY^Xn?f`vMqxQZiv)AP~nyK-7c&Wm-+jtha403vj2rQUJ>?n8-6>M3fbmXsEo z8<-fWMVC>3{)3kll4L%jnYXVp+cbd0moV>e| zA?wfl0j3*QY8)t?{Y(GI{7(b>tKaSOG2Nw@re&4%-nz<6ZPk+CkXj9kqEQ^}uHSYW z3R{-78%BT1hjOYH+s@bQG5q7O|p9h6sxj+b3w5aJC}HE0IMG#?>PJvl0cpk!*wdxS z(-Ej-S~8-|=(W#pX=WO95yj2%Aw)W&a>*0?MNDJnCdoE^OLf`mSpvJW7@jApJ&bWedqVZUI=n1-v4FLPEXBOc>0#sa5;0j39@vtC}cYE z=vA+6mlpXB$nsOqh}odZ&iy2{`ks5W^jH3mt7?0%uZrE^=GC8+%Ji|>=+klFOgtzX zqHTAco2R7Wpg<(R%PTO!n8ZkV$n!4kP*JpQ=k31%ln6(ggY7XgJN#XIL?l$?8zfyL zJf~EudyD1L>$b9A=pX-P>dsm!k+T;xX>}8F0@{C*hcoW5iGmyL)Yr#?lhpgKcuQif6*>_W!xIDR8oh*$sWc@TY+b20-qnGhaOM!oO}+wt)tSnBq()`_qGZW!Z7kN_ z@HIqDKPe+1A~#!A1M{kr1D*iL2%!QJ8tN5Ngm&T~imF(8adCl#k(sGlOu6+@1)H&H zjC*W2XCcpqf5%sVyd&#~)O6R}pt%^;DuVN|9MuAqyWOJsLzOydO8Pg2in$kug%lG~ zr=00qJwz zbfz`q+Thq-ny>wTotK`Jv|duxllY`ArP6i`tAj3>uKEu;OZ+I98!{&pF=@_(FUN`S zt`rESrZL`O#vHr*E1fqR)pt&z%_^xS{Sdm9NlB5)izP7w)0|j+!_Joe!rS zm*XWpQtE3Zeq^eY_FkZHPrO!MEI*oF@{-z>EPl+kTXGov*T+bp?u$Vp69Xo#M&q#g zyi;y{XfCq3R>ua%4(pb{@f2x}hi5dpT{j362I*gg@psA)&vi`m<6|NN`@v|fg5wN{ z*+mh3?9=8L3)$^TdyilFVF}Oqpn{)l;z~x`$B9c``~#p(H2t-ElO?`grTt*aJUa!S=+ZJ%ZdPtV z&Qa8zj}Pdh2!{A#vYuLpp__{?S59Jm)KS^gAlG-43AT5{b#=%d{OJgLdCJmM zC#ho+sp=*_h8$>GxDOa~yx1iq0)}ha_>(5Lj&1c2D}k}$T6f^=jE`F%O7;gaw9h*Ay7z^jbfxjW$)9z zunHRlt|9$NVw7G1tGfVzjgca5%vcHWDUryFzC!L3R@CG_TkPS zk}0fCna5H>QRJyr{GISsK=5}MNf9~ZE}KKtfB)O(zICSFr5N*OIJh~rmxi@3M{dCT zwiR!BQ75fZiUkv2+?1>3qUl5m-U0@l7T;f#n@QbXsVNVY5ItPZk7<%8T!-HT(pD!DASEThdt7cTo$xw_Goiq}zxR=09V zhLQBT{3sa1y?<(INcgarnkZ|Na=Z6@!vy*T$V1c#SFye?FnAKp&Ck?{Ih~)OXS}aJ zEsK?=(l6ApsQoXlZ`emxUgc4|SKmlVf3T&C<#xQDaae7ZJD`;Nvadgv(f=&K2MtgX z5f&$L?mT71Mu2GIaxw8V z5(0-r_S~e0F7F=J1-&|_Iq;A%bjj)N5_IRI#=DPCv-PcfZ-CWt%SWh(=EqZ0dLKDW z(|}b+N#H4gSP~;B)3wVb`~FYKdv~NcYeU|(yf5x#Q;U@A1@u#;Jn3}*(=O7iR?F%k zLke^UWgLgli>Ag(PJ$`QIvVqauI*URsa1} z^v#7`vg06^6=^|^R;X-8&n%I$Fak-#{&XfVH_bKPpDTS4|DjXdT1VRIrDT>)2PY}1 zdpZAZXrj=Qf- zMMvO%z$R>ETe4~1V^KyJ1QW#5kywp{LC&zo>H$p&n>_B5-&bU;TascYo^zO` z5>=fbWa>_RI|P)BLdZ#XM-@&sB#uXmQzAmt-dPjFwQ0R6epv&S!Kyj=Z=@zJjJYAE zj*Gy9OkJc<9vZ~J1H+3>i{<=N5iTz4W`uO46T--OxMbsc$o-;126PZ#PKQ#G6^7g( z)twO+g6JZ0Gjg;M07GIFc`NT5c6we+dMN4rbGc-+u^cw zfBxf)CQ^&fbzwblHd!KJv6w7z*B{d+CicyK*{|hC(&<~DgpHo$h< zC_bkS$Dndt6jYUIWvs`dS1PikD}K}{&ns`iSLB@1RK6NiY$Y(5oGwtHh?D9XNp4y$ z4UYX$xDvlAVutzI=QK>~YgK+UImUej9D`BUt$SFbWS$t{tod;o3(vsPRHe&fOsVz? zlkBhPs0B71p6&_`%ofpdP~yPCRVMKAr~8y65YJ1oZL7dBL80@_^YV!F9|noG6`4+i zijMSKM!2{e6N-OKBs7X6dNY>)#mckoHXV;_sL{9Gw$9u9LQ-R7>!i`F*~PUh0|0lnNJcjcD#%GmP@81> zQBzfaE2s$c^m-Yo7#vbAX<6P+gJl3 zZ24sK%9XohiHE@FL9G4u=k;-&qw~Lp_uUR*41hPr9s*uO=zn;>4So1nws{Ca^i|4> zxV#iLl2F>J9{noW8{t9*b;zDvO73;t?H}Pks6nkJtrojl&k`}g1R!4Ghf^RD{jYGE zlopp4m>8)^msNE|CYe@mka?S9(HGxVsjpjhJLC7)pK(AW0Ee`}at%eK1~2IOM9gPm zcc<-ldN8ig?61*?lq5P;-;P@GYOrKmiRM5;VvHeia>B~Yc|_=cFTt0PDWI@7YoJ`_ zZex#4t9}$4t6y|Ac`FqPrm;|>dqtwtL8W{v+sYVdnYSR)B;p?1LYi>Smmt;QxzIb5 zdsZ4|QdvB1VMwA7#7z_l&ho*wrf+5UjFadSe`v?Nj*(gAU2-_Q=4$IIp=kKEBRM2x z6b|JBR<$G|E_CVL|4|)}mg_|~>RUBcTQDp!?b&Z&C!{Nld&uMZ->ap!X$AdSHm}?` z&&!#oZLL!YSl>np#}}>kJQ?rowG}BNy}wPgG-ji;4Cv9LMypbzn4Y<`QG2rOd9n!@ zPAYi1Xcsip#=P-OU9{CemI&672s(c=#~D@V5D_6|Snjt1?NKO1>9;+I?@xx)`vF2h zp#_k&^qd@DQlv@+3W-K!(yEBnDy3?<|9kx<7P9SMgSf!=SSkZE%K$6yf3)S**DE#rt`crb3=LCp~&2meL>ul8=@*umQ; zNSQX#x&m7m^$&MoZ~=4goD_=^u~KW7zBc~5BmeeR7?dOu^?|Y=$y2Je<|=2qYpty^ zM^%OO6q?2DO9jYx=2m*H|Mz%p5BQePp(~inwz}p0Wb+1 zu=MuCr7eWn&3}B#1Tan`SR3zqs&(LK$CrWamleAFNi`v>q)fxm9DJ6!H} zY58JEIy3I;2eyIxGuQ&~u8Qz5=%DGzwcQt@CE1tJ*`L7L9Od_mKA-|z92n`^g7pg^ zC%3>koVL(J@>DINIh1VYr*&$~o=|+HM|sz;U(>fxf97BPR)M#F0GahnUY z14+D%uCAQt=0=3ylQ)M0b=UN_%RjrOKf47cx_#C}tnW^)3GehN0e9tA;2Ag)=q3GaOw#K952$=1r z-yIWmSyIpQcukkzeOm7tsO@T*Kt3xgO#Yn!^T%AB=yCEPNMQcC?ZH`gT@d;6}o*{QK^^Em&4Eug_anZj5bA*|qKR?;=SeUYe&+*wsO-TXeow}$KYRv1CrH_RZBB29 z&Mo7|r(*yawyz2-D27QabfgL%APPd9%C#UCPb4nGqz*@0d3>m5b=(9{%^}h~ufr#l z_McD)t6jZVwX(fz^^+ZlVg}JXA)Ej<(G)JN5u~}~x*we@yK17_wgY6~22Mi(L2**L zn^+S#e8cn$2U5Wzg@UXZqFz8+p#kYg{99uhxddg*71k&ZyyQ)wFVadcq(*KkDpcn+ zAq%7i3t9{hNp0y2phO^x%t!3$7=X7}$)zAR)Um)Nlmf2K3M4Z%Z7oubA6$m-%@bL) zCUh;(vNu$rP;nisdY!+7!Cr|K|3;AOrLFh7!w%3yA!ME8mvyWtLt2FWWQ|s#E6{OD z`Eze#lmIdC`!y!mE+DWs!is{^Ll?L*K;|_XEV4Z#)qXQ(V2^ukffME$(2{v2>XExg zd(+!a!1&(qL99Q|@dompc=w(2h5yE_zUQ|kG9Ynhd^q@hv zf=b|+tfV81(sDtX*SrO2EO|jku+>cw>Z>L))UrhwCfyerRfq+i{#MJiaRafu!lbf= zXP8sZM=FAQfRm3PpZ>z%fpt9KsrzUUCRt4hyb;J@^SnG(XC(`YOlN@^F-E`4T><+; z6fqH;Dbl@x)8QatKCqU;XhKTR?+72hVgRa_YH*PV)A`BXI}0LS#+87FMv+|F?}el|E^k6Y~b4Dx^y!-Q~@ z3N{v2f+}n@@peiNxMyZN#F5y^8`X3SyCifqh}1-ZrzxB;7``Q#7`z6Mcktp&%5(={ z{SDlG0x$XTU3^R4U`#GI5la;jO#}7lv%@;ehHiP1ywRahlLt%%KfN3JE_GJJ-MA+j zdzq$s1ia^3BV?xM>7d5aMK6q-Ae(#2Xr6b+6RBs>h1e1?sph!mdK8HP5KselmWy`N zV$>4Z z^P8OkkM~RL-5}JfJ=1h8dM!V!zsD9lmGsVDpEPu&_DRS1XQIrZ&w|IQbN-`+*| zp7+-uqp6IsnS{}q%y>=6k%XbqfC&-Ggsjf*ze`#e5 znUk|)GqW-yWsJ3!GIwFkSW!6XzD^+LGuXU=hD42}(rLz2u|%a+tw|SdS`qqi7zY`E zEOzWU^XYpNe$v|oRzvma)W6wW%Ii7&-GYCgx9&STe}9@)?RdufXe#(}d+MGyy)vFD z;~z=q?wR){=DJ$iFFl8U1SAc>3F#(XXrl&7)bRI@G=INyVbkh|#D1X5;NWRBdMXhUl*k^yIi`3Xw9}jR)Kg zioHgZ^1nGC!2v;mA|3sNhO+rM2gpfpYqWGEH0i9FJwZlJWXGt~Ra7fVmF27RGR3Lv zxovTFUcIm%;9=reET-)2lSWx9Gle|nFlOo{oaE_?HBBcgK}6T2zhACX;|zq9q_o7; zC+hINc^E9-nD6?TxqF^0&Mf(HJ+kIq5A?UE^881Kv`0&{_@E+8u){?8k7PUVUXqxd z)^Tet8v3x~lr;qYBtatB<^*TwnW?$XoE(HZXt>MsxzBe02t(LlPNx`+WJ)2WdmN7W zb{Ze=o}wB;2<#~!K%pNbl)Deh%%Jr9rE3>1j4Hlu-NKj9WDToS*FI+4(-lJg8AYm) zQ%C};ymnju;EX^27zhP}As{ic5-O@4ma!NU3dAh+)NJ|XsH2zvdy>KN9`pxA4jrtz zjuI3y6Ec-O^D1BU9dHz$vte!$q40>n?EE6Kd zh*dVAl3_-zwqM!%r@K|cyWJkb6*3Z%nvr|ehZ}14;sO44BJOtC?)vnbSu1ip0>E{B z9;5(5WjAoHJJIPnF0d>ge2t{_@$vc5pYTRe*X^^oPV0u zwMYk)IVK%S|4N`-ng@6lqN8k7Yu4o+JgsNwhyFNJg9Mj!d5jf-sX{@zhj> z4Cs3;VmjHM;)fD$*U#|pXfhq*b$x^tiqLa9sd&R>5kt0e#KYC(r`C~@Z5!DKo5kb? zuwZgOtkFgjlyoB4{Xc-*0(sDpBX2Kb17=E*7K6^6qM6U6)@A?&tQlduASzp5ag3 z#+Zsbe#(;{Hn_?4#rQqYb|L*j$Yhka*ET+t?<>1%YcHkT?OxREB}Vyu(CE4W!Dqva zE%5lp=oQUpz)R#=)WeZHo?C<|9=?pRL3!)mF%&#y^|WUDb~6cA^s-jUNEvFa=HD4z zMMRJqS&P`lpQXrQc*sGXF*5m3y1L^gm&&j_^ziO{i5CXmO zoLS{Ydc(S{x;0ZViHfC(-s=no2?#EePc00>CW$&P=jz?_qn7%%d3i}(&1#t0vXKM) zIf=H6VQqN$F04!WHC@)+I4ROoRK-E~xVbsHIy=Ise&z;SE79#VRepU5&`0hk9nQCU zOYZICd1Qui50%f-nZk97=Pk%lR#p|I@LnGq+QX1=AOXHM=N@+nk^T~xq{KfAe4YN` zL1BTd*Z%uEWpSI1OCwr5-i0x-tu$Wf?;){rVB|6qYp%cDWVGD*ENssgI$5;SwvmPl zpo)Yn9<6*BIQ6OAiMGLdNEOQc)l?tf^oo=hfJBe`xFqS&cEN=|W?E{P30@0Nmbja{ zfy_L{up{lGC`a)z3={pO7|=6LqVaL^;1tUJmRB7SE|)OJP!u=1dyGJHr5g# zFD8JakyPa1`GSXOJ^x z2rjn9zkT)4{*I~0@SYTw;pM5z1l?Fa^mw)|s!}Bk}0i`8GcoMVTk3$L)7T z5!VTfEB(*`WCHRV;Ihc#`CiyY`YcN(b$$1A9puhHwBhZ9C4lq}4Sl+ikf_Onl z1*gAUuol17w?+_KTdQdt{gbh`>%ZlB6f%?uW58f{Cw9XEH+J?vw@>BD(tqC|ni%u5 zkLz@~-7nVrRE>RAo`2;d6Zy3XCs`ve&MYdwD*I#j^7#jupn&MH?KS58zS-j=Wc1pS zQ+W|7;Yo%NmD~l?2hvA`r48H#;VqBhlz(yDo3)i*+r=M}){11ymv#tl-);8Sode|6 z*9BBE9FPifwqNrIRm*fjp;4(6bCkRFYKl~@&9p>n)O>4%lppwk`~+j7OcF7T#*x(9 zMGnHq;hd9FCh<{n3@J2Qo+6=G8dtEC@0+S*GP~)a(>U)#5vr9)C-BW#!HP_l6)U?c zvyZos8lP--uxQe!hT6#}?HuL3ItCA8W4A&pB#Wk#Moz`6X}A{123TTI*L^lpCW|Z9 z(NqS}h>L}zm4KcwSq_M0h$B``y-T=pu1&=&>*pmPBn4tL7?v_Jtow-;*-psb5iXmByBgP_ld9b zwz8LCfDd?C9I#>97NAD%O!z0tHl<`+^&GvKGkFIwt9_erFF8d2k==?0C zU$Sao5TJDN!LGT@NeDEJ2Z!iNhng*UYjU0~N zWYb-j>UMP`k22<*67&bm5Y5G2{?@mW&k2}vjFOzV7weV}7N64DNy7rQVQRzjx*eDp zSiD-pow9{vt(V0=ICb4$dExS{iD&i1FU{bd zOT>?^{knk;0=sQ>bG3(X+AiS@1$~gLVv(3#*YKyYa%no7xTQA zF+R`0DE(?yj=~Kz3?bGP@xz@HATjr^imRB}smb@UKtHN~A?F=sfUe=HRB^=C^xYex*!EZwDV(hk2z`J93*RIYK)hjQPv8!E zscaxF+N^;xTPmElZIjduYyYL#{fqp@rtP{3!QLJHKBbP}X;LlChWqTh%!xq1yccC$ zpNJ`8cIHW5z=Y>FO@Xu?W>AJY2^19Z?FF_@X9J@ci9Ue-6~8kVVJ9K_BU)gy9?!Io zOTwRfAbN(!3DZzK!lyWD`UguvVLwSiHiuI$-9{qICsYd%A8u;{_@y>d-Y7zvg%kyS z24^vBp~YFw$F3w~?(t;gf&sI?`*{l<}@%k;MtF#_2J{q|W#Nw{w zb7dcI*xyA~KYe%_~n&uJX9R_%kS4zwwdydh*bV(o|nLSZm1xZNKNpH^Zq=)~C` zm^)I%cR?r$_s9&gf+q7}XqUTNW9_!}DGSf0w%t!ZS%*|<*6CqqX;utMcp4aKoKp|9 z6?XgWi!N@T9MiBo({{jCl5DE>m%AQY+rj5}E4WrW-Tee9_xX;UrO zx>VqXHkZ9Iw(UI4V;D$o^NOv-AKH)P212upwL<;fE}Ub}855d=`xf*%ZDq(=z$I!a zfoXrvugN=`-9H||ydXg%ZFX$rn7R?@3e&(49S+er&Jscgtu$RtVQf%IRK0&wg_`JA zH@=sXLp_3lcZq_Ngf{3p*fu9CYH(MM&9wg}A8`TSMu#t(W4=BNzsN1#<6K?I$QIOI z>m{IrlOh#UPoX+zt3GmmTo*Dq(fkS=vQl<4#-dF1)Ln+EYvZSiCuPj(fi1U(+0j3b z2W@tHuoWxauEpPi<*s`(h)P1LL4`@~`c(XpUrn;_@E`NMCI{aZX{~A)lV++f%SB_e zMrBv(w-lBzo*-V!4MenPojnQ};Kvf<@X91}18O5ioU%G1w^S_5P$~*+fmBUZcJ0s#Qb_!D+6&p6e!`m4kC@(AOYKUewf8*n_ zr-M`Or?f|Z8Xy?T({Qi@hU)kD|>gB_%Kii=gocc;(bT@;^ zG?J+aS$8n=tino5(SA$TzDmyFFw*~mY6S7V}rJs_`TAIE~^|E3*PM_^%>{`>(X$&P)iKv7rwZB$XiX>6lq zdt^I6y;Dw?0zvd2?31U{Z0g&2=j0TiGBU$5(M>VP{RxxlBA4X!M5h_*!|Z8Q`JA5? zx(Kyahg?O*0UD}iCja0u{bzsbQw2%Vm5{?!lj7P?v|P*nOH4ekej<_-(J4nl)ut(Bozm+a&P@IvaEyQwv?i?B89U_y6@%o zU&8MY*5^xGu)fJwzoUm&yQGfS&cUQe5$Vk2Y!8lo%N3*}r*dySno5^VJ+Nw*0D1P$(n)MiQ2?Gidg^(MgO3 zH+^GU{z2UeuhX0xy|PmjLD7wHeAj3VOW6!g+t+ah z$&APXAkA9YopVfme==?|5=F%VP5QnbjCa|{oTTr4tQPqf;$&rbmTcd z4pdAO1h^cn>NtbhT#ePeX0ONTWZ}FYk)T0c)mUI3$lpXo2{)A(!X^#6G%%hvi7{dp zCNWP3domay-rGo|Ii$9G|8k_yfkxwd0e2}6JTk?|AN=_8?VoYCJwZON#*`En1kK^Jk}XgBkK*6D*pwuEuStK15pCAPsUr z7bz+aEZ-n@W#n6*rV|L=OZ$8W(OV{oN&}07O+dl<@yyPcG+?|Qm9;tzLsoHa%MCc2 zK1lv5*&{T2-*~-ufPZ583nWaKGAz9|t>(|%A*9@#U+(gFfY#Z2c3T_zdWNtf)Veibx^I3Xb8!bzW;vBFU$}8 zQ8zi?a(_qY1yJIStf79<+4?yb4n7){1R1hR4 zJEk1sBLpd1*}Oyo{o*>HdC7_Kjz^wC(_gsn?*Y=kxOv&Agf{Tu^J`cS3jfQI1rOz; zrg)It1^V&mE7!% zv(4{)6t`S=td&WpOem}UVIqdNsgsL}>ilLlmEc#v5I3z)QCahJ++7hC;`0}ZdlXnX zM}1o9S63bXOe#_G)WsuJ83T(C@_zPpY^fu1e+X+dvh0XOhhc<$4VAYw*xfH_>5xN6xYqj?}(ItZNVoiRVP??ehR^+hRdNU%U zhC1%xY>#$HCyi#bvx}VK3boJhqio(3pfpQ%fbYhaAZ^CBnIbnX>(DMU6&!zWg8~6p zT}@L`F9f92KGSF=k&&tp)pa86mK=bR31L!3^rU1lZSx8LU`OJ3Nn%;x`sOa*y&h@6 zJQ|jHK>^e?Fu{WVx=H>EdX{iBh_KR3wMq)bXKKJ=hWg2lF2@+2g#!g6PUv+Qx?C16 z8<}nVm?K2n*F=0d6k-uG(?kSI4r$7aSxS>h76G74v;4=)?SWO(U)nvr)vC(Yo5L%| zvGTxxRACkz>_8FRzsXPB+8S1mQKt&COV)gk*&67IbdR5sO)A~6gSxrNTB^r3ZWit2 zX|hfhOA?%9LzPrgWU3-$8fFDmkEC7(G56}~>GCQ*x>&iJlbU zP%2ob2}Dn>p(^`0%E~AE1x1sC3+?6#A6`{ulDn}{VSm9A=E&RY8>n7O(R093Nq;(E zsgvci7W&kR1Z|RaPqCVQif>WG=3ntgTjOF8u%CZf!g2su)lL28{pFx&dVKq&8Bn6J zCcvhSc~sXZ%>s!O3jWk;o|epjbS06Eu1%XR;|igGX6-4Xqr#-7?i?k8IUd7t)sYcG zDMEyFh~fChCAAEerj0RXOP-A|^QI|mPi~}}xpbXC5N9;zq?%0E+1eP{l7H+VvzL3PX0r&74a>YJjpH;8Vw#IXlBF?o*+h z%_STF44t3cAn#p{9C+x7?T6qLW#8-0>XuybnWNceSnQ%d?aR243!ca^AuYQ{7av^t zH5(ZbUYB@($iuml22r?`W6Ul%mAUNARs^q1*CG4BQF-nzHz?;JJ(hrO{G8%Aluy~g zG*~gZN{d>6Z8LB-^nT-uutP(>Q0}=3FgB>;0*a;PQAz!zNZ`cH#SG@=V6_CSOXXK{ zakN}=`7z?;pCZm^R{84wXz9;RoiFfl&=Xfg+nerI3xh3xbDO1BTuKCHBScciL=R(7 z#|b%*@a{?O^Y?jasL1%M_=g&3#(!DWj=Kwt=bbpifAPHji}{DD`hCO3nJo;GvjS?J zJbP1YMQ3cmCZFB&HllMjn!UqUb^LaGW!vpwPKTzsyd$EEH8e>((#%cob-YlN=EHF@ zl*~4#jw`0!@0FSn%&;-15^cLGt>utJ5F|EI#xLzvOPGqmwnhhI_78~()9Pff5_G<2 zQ=x-aos$=MQ5mEx4MAruZq*(P5ne((elpxRcY@RPbyC!b&>5(fg;b)vkOI0)6cnd;(^&F ztZGox3# z$OEw7a-P4*fnkOjTohgm2w9OG!>kluw0NQ~l{kpeVbviJGgFX|6JC%?#3bWo+*!)L z9Ga8vxHW-Q8tp-L)N!POH>h+TJ?WTKrsXSj=@G_S1FJi7D%8&?EW9du>!$P>vQF}1 zr!O}rtAiP4WhvE4$e?OYPqi{>tEQ{zs$+R$S{`Qv;f3~MAucVP6-CC$0^?waK;76R zq%rNR8TM~$NP`jele%$aW?4?8(#WzW>t|tPrLPsNvTwt@FwH}JMQ}@P-)pliKl1C*67Zh-GJSgFWtSJI z3y$pCF#V&gqPUa99G|wJ@S?B@LglSkUT$Pc9KOZx1K_6u1ITJ^?nNh7fD~QElJ!Y# zZz^<}(t~90K`#h-pms`K_)fEkKU&+j7a4i;(R6I;mgRH539`lM0HvfEN+|3|>SdM7 zwf5BV#yg7LS%M>^X3<8oPSmBZ>oHtggME7W0XZ#Hm>7g$*x}LP&;3X z$d^Y=--gjFjrr(#$6qFsaiHlk^ntaDu}<_#^O!g3_ zk@sk>aEYzmRhPD5vvps9U<6X9-0a?#A>>brX)?xXIG%)ERH==IV>3)YE~87HTXm&H z%FNhrLJ!z9&=*<2@(q=nWTRP-?qpH4;4wuWi%ZnjMKuxp<8m{ErG6$waf01h`WqsZ z1PKNLQWDh=C>RU{Arh29$_$1u*Uj-x@{Q4-3`P(wDyE7`5ESA4()#%_+{PTf%5^uSQa}yd#CIge9*w&yuy0vd-yjZg zW?ItK$;JfOW(7x#ZoE09v4ZN9W;@Eg&7T6u==Zw!zcO* zHg8>*9@KE4ya~PNWdnhG`w>^bauZL}(IY)Ehw0#pmYS_c-^F~^iNmwnz@%n4QFVx) zU29YKEn(Ivbd~m^=8u%3Ae3MhjAn`?H0v(^rUnzZJ_@n~?2zzVeU31h4?rMPcY(H9 z??*06?=AX={04d1yz)1a{C?~46Nrpy`CK|b{G8aZncSwkF7PCSFEU z?nE~%CBxS*i9-CA@!x5~VLm!Y~@ zBbVx(TfcTkZ~NiG3>2UQC`)qp&OLQ&H8E9tT_;}qpo}d&()TOq1!5UGnL3~yEtyaE zZt#}X2Ec>>RpMLz6rVKDKuA==iV8{t$DR&XQg*AMF2|fJC+U(KNicLdQSb;jwWb&D zmZta2qq=OCm`UxeO2Ho!$qh%lZIF$S`@*#Rv4&R{5DY~L0zxwk1(|)xbYV7T?n{@n zX!f8K9@p~%!P7~`h{19Ly0jSo>#1tKjF=qYOG+@}S+-yz-c(-AlAQKLoYxP=U(v-r zgpmo@mve1X=MzU48HNu+JkvSI#HrC+Z(An0lo(7V8;G}0i`2U`0A{hLL@UQypSZSk z+q?wcDOrx5xK}(*qF;|A&kJd6sBREQzm{M2qNFIkat~*YfF}~+X7#_Iv0!##PXh#3zRE&W$3T4Fk zrVOA@0h8KDsD3dM?WJ^=JijsAzi58cAMnC`h40TP46aoQ2q`n`o}}@kz$Yh>kj<( zMg-3Sd5Kg__k^mRF3(b$80}-pKe)p`b zhXgN1D%ElhJZOMD3sAL(r6)?Ez7io7GG?FeSk!x_4I8!tUA(>n@K^oA9F}G7=E6#3 z80PU3vTx|r-M}jOWqN+y!X2f>`11$SSU;N^>_}~{id}`NSy8Vpe=@$gURpNK4-;E80NPj?p5+FJ^?N$=C-?FO0Vowmn$vm|lUQvDX}p^w`j|-= zgGuSc1+yaTg;V7#J35 zR^X=?YbWs0R`f%wA1FeNg+9U~H~9GpucE48B=?`<3o^q3&W7=xGI3F75kj+w)DMC9 zTjCySsh_!Qw+Kj>QVP>WBs~oU%7E`g&Y>?xkb$z%KdS?p=0XR}P{PMh%fUNNO7n=fW=<0ty0$@I{pi#RdRR(XA|WodEIgE3maM;a!#$p4 zl|p%u@Y8^VC8t9Cf98jGG+G3wJdv2hDWKCh#q7OjtQ%JB+xSy7H8Rs}*sp3J+t0b- zn04t~LW1MtQx?bXV^_V3ss>fsPBR$aTNaqPA6X04c4H4rm*2XQUy4YlM6$<%t8W*g zP>CJ&xPZbp&27*`(Jn zCQrB5OC~H>#rBHbl$tW^U64yA=tVh>IfNbAXw`2R#nEtjET>ENV!Ff**Y3tn&}xgQ(qC4S8%kTMcP>9Tw<$HXjorR2#oED&#!lv;@^=RBw0AsA~BLUAbINZMeeCFL>>0X<6e{ zZbB`9u!pWT*_%0BN>CK|Vr5^Q`b@WTmYieIA5I;K1u4v{HRfrT20Lh^>Xp|CGmwyn zoFtq#1n(*IOQ1wR@2?sjp###5u^BSgY)vGTK zHoMUd?)41p_0!zbn}RQ?^&W57sVgb{UKGu|g@@jNKV?tHG%rf-Pxr$%49&E*Raqr}`f-v(iFR9_u#tb4pT z@_YW}Bl7>Qa59WeW`#YpPorGVFpq9&-VeZ9kTT3HNIVSA+Q-!%*xynH_NE{|aWfkM z#~Zh}3@pC<2yALsJ&~mmsS@vgv^m2!G(8vg0kE!HjW}9kwq@XWo^=7^@&oEvn9svP zyMD%&uQ)tEO2OrzIoTJFBZjyye;- zJn6p+&6f*>8{OoRCaw{RWYwfcmF0C#7MZt5IEpCtU53!)ykD=L_VUiRKUBs$)9OiI zzdxAFip!w&lo12kibx0=l5({rmH?ViFY;W%7o=Wrt-nfGOY{_inl|a~7rq>Co8kT; zFaeG&FLrhHp%l39=UECqj0oyp>JaF7ybPhK&EY+sAOssfR~CC-yeAtv#^OQzfzte^ zu8I>P&ZPxlb{ZOBP3!!gkwit13h|Q)?AVV@Z1UTe+5v=747^g`X}NW_0ar;{U-zH( zYC+i4pNX>5zgyaddB%^{0J)RPG{zXW3^Y*TBK#^mDty=PLv|JRd+2@8L+k+%1{fe_ z1AndWA=Cg%WU#k3yH|a4aJUT=l~tCfw)P{+OxTqwhf^fNHUVzwImEw(IuTyLlOV4HH@9!h zbHyURJ9@T^b#+%Oea`>s=uQ(fB^TzN2nyTGOmWHa-Yc-%zY!8WgSo>`_?Hn?PjIhJ zY)vwo)(6Mo8068$ktz~-q@gkFQL|>anJiJOwVy9SUMx^Cv_8$R3BMCJ522MiD0 z^;__%LX(4**h?90*{rq%(hQ?H`m+O!Lh;W%`;i+pA49I79~W*I4Epw!yXXXZe)QGU zu8`b4J5q)n;=L*uClfLTwsfjH_M@{edVvY9#=)BHQ;9@ro&Fpy_Tf)cSKdeB*uF;2rfU1+oHJsa^!D#y@H=9LA#GXyZN~^)j%MrZen5t9<5b zFu)!zBHxjzs}^q-Z9cYGedlmJSx#cxAWX|#{9dx^&t=XzmA944l}h_xd2dvM!UC1I zUfQeql;{H85laHPU+NM#WPp?QpHk1)PqYf24 zhq*dRNl_`0jWK4V!q?^5g&hTmWd5S_n0=Ml5nsTA{dwaMOmkt;+RLKl*^>W0x?1UQ zo(=+s0faLkUOM({e8$2f5%%P_RJP30%D`)7>v|URndSYZ7y~)g+Uf)jf3UA@vpTD7 z?c#yP)~Aatc@rIMBp`5ffgDrXj#@bXorQS7)kZuLsdhLUZy8qwAe;e}Aox6;H~;7= zD)m(GuiGXnp zN+BKxoK(_vg6(5cg2?$xu{XruSX1WE%%2uRJ&Y97+ihoqk<5*v}=P zW3ON@-ydDCil3y|l6`DE>wP2pXIl}}K5Xzp1h*a7GTxMPWR}&qXtUq{clc007438I zyu3x$tuW_P0}W79GiZSFD>7q)+MCWNmg->J@iV{y5(zGc$X1jOQxP4NA{zqN4`4Qf8M!-UOo;UK*Y-A_#(45dx~_@2nvIO zj4!o?IF*jr%9Y&aJP7b9BsD^f&7is{m=p^)AS{}30sP+S?VC&(;2UV#YP0vy-`{W0 z+wKPxXVPZ<XG#_XG;qk`T>o7FDd*|#SL)J6fG<9QmAOvn-& zgF39ixp*#)=66 zW1TvFNB;8JqBEV100%a&o1HH3zI|Q8B1vfJk<+znNj^4d%W;Il-ppWZ{LInF;0#9! z(b~JhUf4R}nIqdL_ih5I>|44A*q3xByW?nykG+H+Rbvme1zEbp2N=BZ;Ch@InGXf+ zV`7;XKIEOg9XJzRHAZH^jWjR^=QfhV6Y9cFR_>y3q_-~)`)uP*`C^cAcnk&|kH);= z?_I+3Pb|qTa5G>9{z)7Vo49Fq5!CTm8Uo2)oK4sp?SKu{jDtt?91{M<|8+Q`mvImu zwC6)RL|c_Rhu_O^pP$49!GGz#NQ}@)#Er}CTFAN{N5a891B2uT+1Rfp5Ax2Wh;>ZS zHsto~{~X?is2x+uVjqsb_S)v@5$%yYw4g|J1ZO)FvM?9(^b9Q{ z6N`CH<1>6+*4B3BdR>3FGM;@JJ6(;L5Z=^S-w=BB&M?{VyN%>I`>CNRFcPv0Wfz{^az4qqYx{ep= z^n}g$R7m0KR@_)+tZEG+*^^87;@ScAIKKcAJiI z#W#m??6s);ZK>f%OgY*QKjpps8V&{RE#QKFGj`7eHXFz?eM^aCk-E12kXmV z3y9#uPsj9B1@c!(r5s~*ew)2BjhJLTnS9;UT;7}P`HB$RLu$}IXgg38Y}{Ps$)78p zSR2>Ad+yHQ+9V5P4R@DO`{Vp{oSD5o9R_zKN^}GAe}2k?g89<&jVSKSdH+B7Hds}z zz8@)ZHn4dAEZ&~7^Q~{3kax0=ZfYaoLkkDU_fC%W2Zto2M@kmB=6(t*Pq~=|-b_dD9uL9*h`M z_1cR)poaxm6=049PT+SPfP+VQqo9GRmWLZL+1x!mD4dZLG#_3i9LBnNHe;Ziil{}DCJ3AxbvpKbYn_6;RH z$^ob+quhXt{E4a;qyZ8+D}-uw z_(46Vl+I+(m`_NATrZwe+>1G~L8^=Z)0jT{yqo!jDl77h=K1JElhgJUPuz1M_Gy!+ zXCjlY7ityMjj=gI>lOA@!v=l4eFkGn(2=6mSp9D1z-m}2^#$1cmF7XPAsyX>IFnAh}a>of`#FE)0 zE1Y-I?U6-WGp~r{~#>9fuie^(Dy*2DZ zG^BW0H5JGf>@?q*=BpeLDxi1I*?1N+(^N>$O!3}%e4O#mxoX?I73Y)<-}x!1_0aWK zSRcuL%dY`}?>uTo9m>+*yfFP6TwmH^b_Y^X5HS3F%erWcG2Ld#xLR(S+IEo>dH-`i zxKjRh>Xqc&+2{Q(`u(d6*`36Fv5Nve!?qFE-#W&=jlM?ZDE!UBjeSOJ!>Z62&Gs${_kk-;7M?cpQujB3)>X=5mzI&?tu%!_#`xVLbR}T)iz1!1UJ>7U@($5 zAXL1@cE=r4V4V;;lbT`&Md*sGP5~*`KuaplM?-!ph6rIA5(x83i*1>1!br(h=vR*M zT(!1QPNo-k(wo8f!hc!5l8!XSw}oWYWnCsgsudLw+Cx=$fzlcES%~+9% zyMHbn=qFqKTJz1*nGL7TnJZPddT(~l)0DgKPtpT}RnbUa+(EB~pQ(>jo9Hs0P~2IcwawdlattUpNd*8E*egJpk_DO6=@;SK3rBX5_l~C~7moK~=9#5uQ!lab_ zExH@Rr3FrQOEoSgcnLw(+JugR{ht-lno6$bhuxl$MsNzF40XhyoGlVu0jn_$O*YXg9hx3YG+<`&{y@pZCHMcmMWjV|Ax{Tt6-rZN-{ z?yOyrJ-mde81{Db`F*(FIt3~ zM?(e%*gIqGbQzGBvM~`dcK&9pMwovrdf(X+EqErT9`*o5xkheGaZFBrTydPJ)SEj{ zl0GcMm&V~yP5KSJh<$;kX!9IQTv%qOkE;`n6ea)^H0j$~x;!1#%~jMdL~R$monHDtXM3Ov$@w4r6&pZ9@%hUe zZXJkJROb)0;7QmABzE^68nuod#_IlZr;o$>oqAIE*TQ@||7`#X55G=%On`(F)Cm&e zNig00?ECmz9}+yyp0U|3&>4fhEYrBrX#Ki# zgRL?2wNaMU>T64PQ!vXbwqX-}nPN1{s+cK^3$E!QUeuW-9= z61Tvw;!$cN_4jZAh+7RxFQB@cZ<=?6a*2b{l}FND*XAUfL(LwR|Gn@KLV6uk*EV9! z6oeG#wZOfPfiGZjTN=>Pip7M95oWJ<@AxQU6egtClLm>aR2%vPnKvo z^&!jfXi;;p*WYru2b%ry-^=n(Ue#Uty+)a;(Tbif*0z3JoEp?@A8D>jL>_SVQB~(0 zZlm<2pEitIX~h2>Tlt-lE+!18Uc}(8FJo^|HTgW|A7A4V{rgb33Sl%2 zDFZdw+RQc=Leyu@rxy2@LCdsd+TqNB`gy3+U48xGsmC2;&`2l8mi4jEiPTPS4&1Vm z4fPJh1ea~yp4E&);v6iQhdxWLaw2X@C7b-X<@?fc9jTpRQ?}8m+m7PPY*J_QvER!Z zlCXlC0Xm*b%!3*S-fJvZ*F$VCvgCsknH#QWCz#i!k&{#bi~L!PN^(80jbp%>HTmB8 zO!jYrrV{p;zRTb1er{fF&LDL*m*1)6|0SrT$~9CW$n&U(wabxg`Sl)}AiVLRM-!80 zOFr*4x4XkDVacdAAoYJ0_jy{s33h+8NpSmU=ICM_Eoh;f>DjDLK0o-S*0!>1VqLM= zoQl=H?>;OFTx@koAmL7jUyJOiTK4|2iw~cxp@2bJ0XNFP0(1Bc>c?r!KaF1~Nq&Q2gkW8h&${^O8`dg^| z-w>?FBv07vWNmtBS`o5B@u#55&LiHy=whqdu95af5ePShS?5dZJ<}YopwWz}{5PrP zFe|zPa!%&PXGbH)AhKbYL`)1S@t~(!Jca6L>=^wQ^@TrNy9PUYAP=V(=4s?2pwRm-Q^eo>1+T9D=vZ8 zNkU6DEjtu~LfvJX61*0`85x44PHr#q_k9|5=kX{+g3v{{e(P~3SJ^^)HrxQ1(BQG@ zwn~z+MvE=gmFAbfRS^?LUru1#U+;+xz~?-tbn5QY$&4~$nFwZ^b$(@y`Nheq^u&?M zQlu}Ti04uAMxMOAGXQ^c0=bA<7Jaa8P`*lQaKBTbLXsE}B$=Qrz0n1fFJ4sn_+(_Q zBQ|eS%eGcWp|Z`oKPOYNj&8oeKdbg;MP({cMqF9pHDu>zqgOiwy$fk>lhOVY;gaW zNmxttI0u{Asq{GirK5G8b31ee!3B;Vr@KoD4a$!#P|2r0?$l1l;)vB4Xx2i2O&bxQVqf7&&?4ky3&?timIFE6m9=;yRKavEf!dOce-U3mQ`(m33m(a&eLd$HcO(qOx*8jsNA|JG8c7_1 zVo=?(e2J)C3>JfWe6@E3;K1YiLj7V_!t8;sJNzhF$hA;s9Se9~Kpy25`ns zIbgrD+T;zJ?yUPBrneE$`4%9b)YPC{^y7HwPsFb*peiZyv4p_k+_M(j5-7we{ zY&Fb{A1+D`>qBNlDBP2JI}yF{pr=fbn9~k8;5` zo0khc%X}}SYoyPVxaYSn!YnSp2^$~n3JWjng^C4&Bx9$#BaY1v;dPikh;eTw%YGzN zBUwBBR9fjwsX%Y58%Zf9RFqgA4gBtUNKPM#+9R=!e0FLxhKt)9<$8J0S?0NOVJv07y zE5{lEv|=bNn`~YCVE^C`7NQiGexuBe0Su_djUAXDfCKHSeN6)(%@*@<@o1@?bGnKY zx=B~yWFV+m%nguLSeHgvoLR@=>S{a55p0)LBMZ|Nf$uKfWf%4%fSuI*KhL6~GT}0@ zRxVr{&21A<_GCb4F8c#qD*y)Ev+HpwEGra|w^Ya?4Aoy7uFq_5%tsW|fC?zNGq4P5 zZvZp(RYW||SANMMtUeYej7v8$BO2bSINiwq2-XnM?Eyvb#~49?2?&_$4nV|y!mc9n z7V}#n$wObbG2n#KDHoaGbkz^7VLQRrAbKO7>drjAafAv+j$8wQt#pII-{Ehl&HV7BOGL@KymCx4$eopsT*{OM9ZiDa&Y$ z8&f3{?`O{o;FhdcJjb6F!c`mNFVPQzuQOB-`>fjK+qtaR=V`Ha=Q1K`$m`6^<`g4` zQVfvZ#a_zwv&lTzoh@ozeq#5!l422A)_H+|YF(}pq=vZQO(kx2-N0gTvW}8H(UP!3 z=`t8+85y^4%)|1*A2H4#>pkY|8|Bp|#~eY%2h5o_N&)}xH-i`tkUxakwMO5A_pJsn zZXj*_%{RG(5@hdZNK%Fe=n0b#(4UKU1?7# z?&bnzpe&Dbl&?q7O68H-#IF;J$Kx_2o!m>zeTw;!k5VID$pJGTfU0FPIiy} z{c(5_99!<|ZXQ4KL62a-7yt0u{WvOcS%SB;_B7afvJWpHaRZeS|F{|LU@PF0zpvXZ zGKSMuVZbX`)pMh(vL7^d4-%xvJEcio(Z5CEU{h}k*Hmf4MTIAO6@4oD) zh2$t-mXVf;k%q}LffpPGC6vSPOEPsZGSo03>>csmglJ8OmJw2*Q_1LQ-w>_nBjtRP zBP*S13ujSiqfsE4ROpi z@L?js4Z~`?^Rq@BkRtDo6RAkN0L~>34X0^0bOnjV(roVG@;$$NEG+ zisR)7H)q48_QbQlk134Qpkw(ezTH^PxC$`kZyoQE``d-5HN;m8@F@K3-6DeSA({lr zJauZ&z={v^UcB?NcY#>sA=IG}BAnYJBG^NT*54Ulu1qw8Cm+G;RiLW_bo@SjnQ$(+ zM;X@0DbuOD3cl2X`VlbV26Dq(-;Zeg_;BjJQwqp${=zPV6+giB$-5=v1}pdt@fCsj zzQZ`tT0!E#d!V;dNSo7T^rm|IcLnSYvO3@9Xg5ixyKi6V9bOT2+ZbUZs2$%xCh;me z@Q`K(ipeacD_7x89d^%ic%5Ya-%6OL)TtTa$ptF@>VI9`{w8`SUY<2OcjA4w5Gily z{EwqeF_+4o7Z{EVnx35#8Ms^J(jgB!qj|R!8CPG39*$G@5^2emV%n5+a>(rX-=cCy z09N;BL>BYK9Djwrw??*e#rLkb<J;y(a(4m19Wk+-|R z+6&C#t-l)-`6By1&<6u}9rQuy8LHir02wJhXRrt~ZnGkEQAO)V|A#KLR zGUNzg>-S?9HW3A*;CINeUSz+S*EHClh0Q(ECf%G#wb-jMM(Z^T(9Kxx@nvxUFSn+Y z&&|n=3X>ACz=~f9=1gb{!6x(a(}h5;ufT3g@tBf0!^8@Bo!uBFtpUeuBaalJ_ zR$XJ0g&L6%AltE+wX)dVG09)Hz2TY`Rx+`3o(FZkfY^PELDOw#CsSc0~p;s|lNQfg@lc9Hm z0lu7|cZ#_$#=SGvnVT3uILmnu5!wkB#J>AysXa)^N%2qD ztP0dQh@xUTy2Z3W{|p*8tjc+US5&)QNw?1W_d2#F>~Zarh#trUq`pD?8XFGJY7IJm zPl`<_Dm$|-DjL?C75*0XhUw{DKdWacLpDB(aD}%r|6ah`6(WMW(3zfYb}<9%dO=>{ zRj|}WBppE{wc_NwbUWaOh#L*dskVreBt)h^tvtREKFK%fNpy&aovBJdJUKjyU?%xL zizucjpSaCGM0-gBV~y}cer#G--heRB+kk&vu5~%SVCz#^- zoc*ENqL{YyiuX5GkM4BC;@I5Gj^tkG86eIrMn!z07l+E9zX4l{k_@m5xpv*mS7QzS z?`UjYYIPVvnped`w7L0T7q>AQ`lLG@!SS=1PSdHA&^-iVU6>vaTwbaVq!1sO;jv8K zB$zf*p+;El8nOX?tFv&18fMsgtR7NEJZbq&$tj$KD3MOcQC+Auxjivzgk-00ESUhK zX@tiQV`aGyGH3=(3(=ec5C&Mf*!TrV?5o}faNxh{|GJDL9-v%3P z>xCJJ{An~jZbGVgv$gCbR3%I}?78X(q_jMr4;b9i{ zar`0jW3V=?B=uU45z$qp877v(ZuzHUQ1bQA3q;f9?ELm!@lEAe!@Z>-H`+Z6D;Rk+ zkHtNA#z*f(sjHJlBu^XU0##L5U2=EQy9hua1isbTqcot$O@^+yhQ8P zga%mNI=B+VdNr5pdkqiIFAKv0vi!9)xujfDDZ3xVp zhETmFMaTnqOv;C0E3zl?$d3unN(ZTk4#|BQu25Jg11Vw7XR5Qd8&tE$lNIWNAP7w4 zJtN~xr70peD#pi6IIoY}g*pHLpUp>YKD@jr-$w^WeF`}6v zshQ-Y!P6+>kI$c-0C@QK7macx=(v>zglM3DB6;~gEdF1`k&RYCY5Ly#{)MmB5E#ZQ z_%5~!&1{usvi;NthF5cJG>d=P@NA)$y9}6H;^H`9$zTtm4(%WKSZp!SL;)Lhn#|y4 zoZk=sz5n?KXQ#)whE1x;i#JjT<8DsVV2r)VK?r>aAPmcEdyPDW6&Fw%dv36PMC}AK zC##1^LmkVMb(l&`{DU?9a~jNnAK$>=d~fUWr$H4u@PeoRfOW7r3r?E;v1-NB)9{o! zS9|%B%x37*%~h~Twf|vn`Qvtlpyl^_Qa??`rdGtJ`=n;T(rKhw>G@{xN^1TebP0u_ z5bKfcFM%(7vLGwTg&*MLIG9&};@nY?g(w*S$KmeO=0eEwfT;-Ks`w8G{bv)YY8kDR z{9EzTKI0B-M@@%x$2Ax_sr5T7O9_*xmaww}gB9Io>E@c|u#1c+K>j@Q$aZtynCA_4 z11KC;wtM6S>UBTAJJGHzue_(iVb1e?zwd>MzM|dd_n$4kd{b)Hp@e3Va!SDQEV7Ry z_w_)<;>&}UyL8~)0&gng40l4B33Y7HiV!(SHMT_$hlj2K^(X1aGy!YK!!2_yplIO@ z7Ubb3SMGo3l;eDYi2-qUsI{mUcyE9INY;r+Q}RsA*hPMhMD@8AJ}ws)=)=XC9&Y z#sxa6)VOJe`E~gkMG@#AEsd$?VVk8|U2T2Fl5QCICk!^6xn6J36B@Zt)9JxyRQ9Tm zct)=HQI2i*eM-9ck}AN5YVT6u#WR6vqzlBqU^4~Z!1-Y}3wjkD-FhY^d+Hh3la8ma z7q+U&q69ZclhTtUnMyY$G3s>E+|gfc#ZbhN5X5#zq4#uv=TG<*8)$QCe9L04{UL;2 zj6GLcL5aUk3m>K*hf=E(Rc6QWXHcSHJN$Zm4J^ zE9?W$^fevKH61JrG$jz z{&Oe5BZGb0>(%r3h@ZVzATgOnq~-710Uqg?UC-@DTbz3*mi~(W49=r(7Q3dj|AN_X zU6XZuy7i}JeEj&Z`RD#mQLX8rqpEvuRK0-GD)WaprQ=TtsvfY)i8rn{LBRa%8AkNE&5*)4T zXF$7*l})Iu*Zs#SCM$w1SIWa{HpALQ?`@mm7Q$*DZ4_LPM}Yc1FQ& z*Ir*IwcefJL-9e^ZlF+nP7=LgG16G+jvE$_lrRYh4jtQ+^?>K8W9&DA(@fq^GK=H` z%_=~EV{22r0{m4QT!;1mBJXRYEANFS#E06-2D>-!KYzv^sg(ClOt(X0K3eP2{gRJX zTNngj_E1|Nw$cpVgc`d(K%e-xjAb^Rog+S;Sx`>8jC<_E@$f^VJiIYjPm;ElDM4II zM}lCM7w8}%HfD?PRalx+PicXt8@?dTH!ZNh-6NnNO|>MkE;@=;TOQ(PQOAf*s4Ler zXQNC5=jh4tr=w_7v8>4RlV1}SR@T2+YpB>rA@q-G{DP6h-m-HS`~+i6FO$16-Zh8% z^-+&ZF+QVcG-}RKrV>x7KH+oiW`1?;bZ(Tvkv13QSf%Wv)apCAd88f^?`5l7(MhST z(N^5$kn~h$$oWx|`J(~h#dwRjiSo$Ml0Yl;qM`b3ELy$y<$ja~#u(oM__a=o{IGa5 z8xS{gyC*llXNpifJ6~yMh7ZQCSuZ-uhJ&$JQ*%{JH-#$%C6aNv#=S6!L<}p-NO@DNfk(1_#%*G!002ByZ3Ix%{H}6!TQiBw ziHmE4={g4Cqj~*hkrDJr8&EM;mQ}#W3xAzoW2BU$P!VQYyH-?Ox-r)PGFAwwDHOb$ zB4It2ClfQx*3X_gY|X{bdk z^T>BgOQ~(Vtn@nWN*;gm8H_Yv6;^cZYuH}tVJ}%P*=>~US$vg^BEHHBZOf@T3^lxI zXEe^UXh)IKb+nQcj;`$XVmMab+GhRb;!EJagsqXWRF#eD$nK9JTc&%I<q(8uq=U4nOt)lA>wNt8WD!x3k&EKH-Rqi~%htj^&Q*AoNY@~^A zIb}8!+=Iyp_W5%uMEC>Ep0qbu@+%$lg86*+zLt#N8qAB@BF9;M9CWQ*Me?Gyb=Ri% z>T9NVMv{6a{xIsN_J%b#=H>xDsCuZBkkVb){0#W_&4zjVmc^z)I-d5VJ)f1hREA=B z4|VFNb0<`-X7AL2SI2<`Fx{4r096xfMMZ&|sBe|>x~$-~?1L%*G3`|N?Ddtm?ds~`me>U!`3-}cg+>9piSeuTz+SH=@LINmH3rq0MNcR_o z0X)#q2U^lvk)QX{robQfC2x4``LRb_=T>qft+xl9OV2JB@wWo$qUNy7ikU4|ZujcH zX1i6zP9hha{vUZvii-qQ?AY!ld#{hb@-o&_$ml^Zn9n{~6ZQ){&f7>ULVg3^n%L(` z#%OE6CTS1;TWF+-1M*)osQP3lZ0Uo% z1u_jGMsFQIAKF%wLEI#@UtGt)Nr-r}79ciNfubW`z=B*b z9-SGU#)~IM^iZ&~jLt`TG+Y<3liG^~1}JpooOZqirtqIb94JZVup(2>^r2469Nk$={4e{7(UA)X)S+I~5uG7k?9UlBYGr;&hmA1n+VCOVWk)=ERS@ORT@Vg z*maq@bHHo=WEBATGut>LA!ZNfvERYRVTB#B*o?}eKp4@M{{6nE*VJEB?}t3v%JM<$ zc%apzC^sH@#_Sd+a_yeU^=~r{YQ0I*m=hZXJ$Anz`1ssurzm=@!LqcU(U~m{xjb- zJuzpWtny6I!I?xVnB|%t-KqBPFhw7p?d9xl0?mod1dAjq2_WIR!J=pXTDa@Aa`)aZ z(2<5MWZmU}+%jNV5c5ak8RV|o^t8_UVq>D%o&rOU-jCid~|Pr3%u3fLkKP|K5NO zJ0UirR)(cYQ#2c?rLZUc%dvJ(uB=)KjWNw^J?{44_TUOocgl8gvx>{krIV90FPJ4q z=I-X~qMcu&#T76KM4UI(LE2q9ECx?+PR%Wdv!N5hBHg7OWJnZTcqQjuu%+VDd%0oP zT|=9Al(-lkWydIp9q2+x_Mc7)s7#@7kjdZE?A()&w3wzf9=9&6%!s^qv#q}xI<727 zfb#~&b-cLV(m1VrtK3LRdSPfVJ3D%M+u#=?N`zGYfo?=G(JkM>L(yp8xNp#ocwy{jyG^1#N#6Ue-E%aQrZloq%%T5xg ztyPy?`&CurQpzlNlM7_Th-Vph3!FS(zo zI$oU$haU@7x06LW`9Za%5%rnXbg7#5+5C87cm6=U-qR*&Z$*HfBqc>PYzE;B$Wsby z`|Q8M?d5c1>CndF6BF-y65>yu_zYF))PM5wSdQ?HbX!>V3WfP*UaDvm_F1K`dHFJt z$orb5yp7_~-^li|0-kGLLsbu#yW%4BV#_0?+2Zx7pBnFysBba+^wx<$m&B9h;gC5} z*ZbRtM*{kulB)g@rG8jN-zr;K^fC7Wv3ymb(ssTgeTUEAqAJvY3iz>zf&M6^ft_Cv zZ9xGZDLx5tDgLfUCY4UCWB-@f(Xb(t98~V!w^WcZT)nkp{mRW=W$P~5P{!b`XaGO% z^g7n-A5%#hK)4RLC2;tYmYRUIIDsOCJn{JF^XE5cZM5enVu;;06ioFst{lRg`eP|O z+bd2h_4f0dwALZ{7E1}_@75uob&4rTVT)SW-9LxJ#_V*E2=O%2%c|KAfHu#(~O^5|e52($|ML4o!`qG88XDgSOky;{ieG{jL zPcXpQ(XHugk-z%OB+gyD5G5x(Ht6@$f4+7ozazZz=Z3Og*ZJ!~yDSC6^b(Q-VqQNM zI)@iL+xP&wzT<*F_(Y02#mMy$H*Y=XDf;!KQ3owFymedom~+;6jHIwE%gj+Q9wEt-{>j)=~o3{+%tk-fbYV5Pa!3-@ki|t)98N zihkCkQcIvw3lO6;kW#U37L%`}wQYkbjaQy6{sc{TNzOhO<*hHw|9criHWp|$e@ zCL+p8ZL03P?dngpNa`C+4)ZAYp}==7Y+cOojYRVCngY1$KjbzvdaI?xcsS6F?&x-V zJR>f*hfep>w@kTpDQGCcR({G5neyB((DssZ(vA<_;@h&1-SZV8gs4u7m*m&}Ha~wQ zcv*nP@S%F%Kn)A-a@8A-WJEl2Obx!4Wfko7O)t+0@hUhhcs9WOAC%!Vk{z9Eq4*hJ z_rLH$-)8o!4u{;F>-Nc;a9C(l(oUyK?$WNnvZm!y@MZoglvcgH4q#wx$N7K1zg6vY zJ`w~Aj2QmqDcg%nmr$ISOm31nee3hQ;(_zFHZWDGt4iYV0|G6Zb=j^id9{@23*Z=aDs`@Lqb!nl{Uu4xmWP7Vor7;o0N+l+sa?^k@2MLN9C`1; zKZfH(I%aGll{e_+{00%|*_i%o#oy`7%k_>&`tCUi59%C~Da}?cPS?Cc4)@(m8Cm2j z`>C4MH1svyD4@{y?+mv=B?qM+UA_XZA)VJ{(D*snN8@(=M>4lL(f6ruDT@^15EDbp zwu>t-w&zr4(X)ng0&ul57)eV;e-p?#n$`ISqmL$*P* zdUV=kZ3vuzk2K7?Bt_JsQO8=oIp%2iFcPCqH4!D<&`kXd4Rv}nsa4=(#gLF36%r*% zfwKh=@&&9*i)SI2B%HLcG+r!eDvg$+P5e1~MT(;67#j=zAA~wlbB7YzC!051NJt%3 zrRZA)x4R#muJnFbo|Z)!a9Nt;3Q3{0Bnh;TXx$KwFIglSe*vbNc7?>eJ0d&i{cwud zT2;xEIhFWGRvIA!$6qG>emJ%z_3$ghz<7D)7VqMaR&S9u>~U0ax$?(Lhth>?KKj= z1hffA^pH0{_DkcmK(;HF4BgE-P+LfDQ#%l zDL2z-v`NepTg!1HbCHt~c11^sX)`9M#pHjn6ku2HeLKw<&Q&>li^;55r?PiuUGC^E z@DV_~uViBo^5ACAk7}ro4ZwWxqw6C!kT{!+|7l`}SFIqTBs&i&!bq%k&z4<_&+P9( zw?4oJ?cpIdtOwIb?u`z&AaD631^FSL=thWeF;wg|KTSNo`cq~0mwtlLCAyTthe4~ zy|umXsb#aX>q#20)_I9X+Bhr1d*%r_=Gi8Qu3~b$gMq~ON_I$CptqsiKR71OuCn~6A&+0Bb^qLAbYCU z)Wx8pT@w5L*kwxz^562QOTd#k&(+BapUC(97%zhRaD?$!RC z?r19w3~#_+jq$t)N{l-atmV%E=OAw- z1>|~&_T(GkOg(YeY_YCqZ|YB|*}Xh!JV(dwWu`ktmle*E&Ii%4x+JoV7J{Zzcm)1?b?9$e802IJAkg5E>tF{ z<9ULmWVqbj3$rm_?exZ080%Z4#hWUYSDr(YD)RtnZ@uloF$TD(;4Ti#U3_dt6T-c=D@x7=1zI&a`1Q;nTZJ(sv>pX}XVE&j!H3<95! zQwJ~`3Be7(Jk#|FFNvm7L?)QxnU|qvd%p3)884MaM{Jtz!C1_4bVMUD4mnjz{{eX_ zmK>j|tIZzqSsQIP&=Jse;iG_5>;H%h8^6NfkI)7CQJc_iLq{e`$xuRjzQ@pqeSs7R z`GzZCyyi{Sn+=0%K{B}SbFnK2@JJ*hfn`Jwr1gRuEycCAKk0RYv?&ymLZzv(?}0+X zjz5v+ocI6RS=GR6043c3xewCV<4jtb_gi1ebj3oi12{Cw)xnrz+#dBTs*H8Y08v!6 zte6lG6)HO6uY8l^SN`3gN z<}Ysh+k4{TedgMLb%2yvIQ3%wb8#UmtTN-F zFg9<7@kR-&evxkN#E!fRk#k_vuwKl{Zb0rQgLR{gRX%2;(tE)++XODE%x2 z3L)?(jQ-a_0WxQwCx(XH6vjG>l2XuQlGeK^6ISn*DaJx)W`tzBp8^bdEW$iD#{ju{QyWnjc60P#~ZEL*S36`1eos7bwz}R~86?P(!JQTx%$GQ$?5W6Z^vV zi?2g;&9x;Eg-GlnP|*dKSxv-w1RTEa$0xbC83a?{yq)2|!IL=?fc7lC4%HO&e={Pt z{%iEnK_iVRnK*2$0yhWRA{%y#Nq{cnkpv`x62#e6>=fyw!5CL>;eqKi)Cq%$BnvW)M zKVH%r9LR&_6WVm2Ra@$^SE9&g@e0l0>3$s)oXiOixx!@+KP%kwMAwfx$ZL%Z6Aqs6 zMf=1OwjV%&Xf2lFJX#rAxAA;&0^|2`N3@w#oPLXk zTxhec>EGmlk7=_UxXXEQ`3+Abm-j(?B8YJQLJ|}-_{8On@rC#EP3WTM$181EADG;0 z>(vj=?I7o>Xg+}W_J26n4}2HrFP>h9cAg*TeSlltY9AhJy5*nqmQ3?z4{w< znr9L!c6G7+)KvJ=p^^xvKp=(xK)??t0#+vEJ75aVdUD;q*417H=OsCukrPJPfg`$% zo+scyO$X1{%L((DxARmrmp^Y@$c=9}TdI>H4(pEfK(ic*!lYwAu&^7X0k)sK6&eJc zj?Gy~_du5|jM`dIPCs7U&G8xbK_j0*1Qj~7anW457{wxNFAMHV1XJ$n<5b;SnY+;d zi>2?>L;uqc`kD0J^B5?}07@xnN`99TM^cqn6P<4sPvri$r`k`Du)?BlLJ6RPGzPgr zeFW^HeSur+`%X|_0McJU*vI5jDUN-%LkP++M)nJ9^{cRkUd~?dVHSj0!l|~ti)8#YAVaC0lm0{~rhW{iez}N|baG{05V6)mZyP_$w^lB~CmbUnF)28^jOzVnjz%O>~M{cu}{Q7qb0KSoPY64f5b!(QCv zpYm38oX&3OLJDKBD=)Cjv^y5uVYee}_p(=8rsC@L_-83(6Y^fs`9|TAm&R(Iqx z*-J$1QSGjAq-k>0!aTPOUHedeZzen)`JkNFz~_%Ya-mj3xd@?hqA&efgk;HK5M=?w zxls|42S{cJoCxkY$b-bt5aq%C1Fr(FNrsqJ>nfeW4`xGz^#(|Kjbf{$YsV%^hl+qf z$VV0}f05<7-4YAuPk7vSZvy58axD+o9iGoY-ZG2o$^m4$k{=g%7-WY?AQpa6mJE+khna2M{FQ~bUB_UqV;HnHZ;!DyQTf=J7@^X zrHC;g*TBSC?O*tPo-FaB1cHO_Tv9!IRC=q}(z-YRaqTLEmq~}?cp^NV3>YI*R#-;_ z>))%y;8MZ(7;<~$afs8mDV}8GBs}ke$_hf^iM1nKOa!np_kwY{HZ@s6BDGy z*?4{J%3@%`#X<+hiLbYLl?jN!Eb&il5g@5iMbz3wWNX<4LZe6moP4}YdT*DU+Dw7csb%Qn(0G!(Wf9&&xx6RfCw&@0vmd^5nWfC`X2rkXjp~^FB}=%F4%S`Uh)x z2r^+T#*SFXcir3vLckFDqrs%^w2yi$=l)=M(8H7@DqmSxy{R9^DI?^vYUTaZtvuDY z#C(s0mmz%zuph9my5;N#&LjErJT8qj_kc9JS9t{MzBZaAvjxjl)#;&*Z{k%GNH)zP zT1@T4lqQ~nF#E{*D&S#XzOI;Ode&E4o4#5)^p{U*Y@9UqR{1N~Dd(F%2>Yo3E9iL7MQlU>y>j<_)km7$7 z?fQA4{HJwVF930$o@XWWAT{J;=y8;5{?{Fgm7O!jRmXWMoQjA^2IQN($w@$(1x~-T zU?Z9z7a7a1P&Ut|+UQC@$ZrG4=3xv>R??H$7W!^TW{m3PNE zd*t0ot6;+-7bycMJCT0q>hfJ5yzM2c5CfdJ?Q%+aOyb#RqUqIlg1tcaD9ZEFwPkX>P0sGnAJl`I=xxiY}QeEL>* zib{0p`c2OsvBfsK&`YWA`svzoqTHsQvdyty+mKNaF8@xYUW}#61IyF2?dtU%z+OyL zMQgfF*;rZo>*;F~KA~h-|rE9uN)iJ_EuVmvU2+OG( z!HO-Hm#Uz-O})06_DaOl*U5_OjW-2A9|8E%0_aTujYxTHO#p)s zf+DW@Xh`|pNO}x0cK*2ZY5*|F70_ST#fLqEM~4LwTjYKD zX=4UeOv+!2n15U1zdy2bd>H_GMDDS>=KOt{I0Z2!9zKyS6Ba*O*L*+sP(iN&K?BCg zK3xii!rO=+(X9ZGXu_C;qvi^&=-=8IA0<4i(b4*hGH;GEZS;$*+m647&T}3C7RNu z59B!n*jY1svu{4ryt0t+sbj-W)A@9K`(U4fpinPgvz(Frk{I|C_Sl*LS*h|MNa8)!P z*_LTZE^+fAHHx=Dzc^yAJSYlRm30rbp;v)ZLcmKJ6Vfh^UW4NGhFh0alvUKEu@*peGs=>rz)$jtdkk!_cuxdRhZSQx^^&(@7Q5Q}ZE*X@$ zthG_6H8MJ_K76=jCXO0LAep0)G|am;uXI)$ecuHH_i*@6%ZTq$&#)QEeEKYPu9oPc z>8c%x?G_wS;h{1Sb!j`J*obu#T@&tdc!;(w@kTyZskch!Y%rGO{M3`&A32Z2EWy?e#ONwtLifry^#Re2)Tl2)hwda` zoDmJ=s%f-Ndm6ZLuu`HQ_nhcaoy*(c2(1w?WbToq6wBi2?_URT9m1i|X1ajd7z)n4VL7x^Qom z_o%rjq~2gXJ4f$rE##f}>VKg}a*0n*K3?xK$KIUiTM5M9tHl$;;_8%!zN18RZQ^@- z-m=+8kvMsmF|mvG0ib6EYs${kUq30tYHTgzx@G0)JnW;TN2VtpC)=JW5~(}`C| z4hKWdS`x=mZ*gY2KTK(4c^C>9lcj~yT~vxFh$UMCTCAV2tAKTEuh zXXD76>4}qn$0h5qn_RFx(VO97oUZAwlF!LmJ<~dbCffHDePBgji96zEzJz&&NXznjf0c!&s|SutJYY9J zlRE^APLwc%i2u=8`IsVcD=d5z8?wGfafZ`<@t*dwCk5QyyEMkU!d*YN9U06*E%eMiiJ&afTm_s)NNOJk_fv0GW8SUZcVXDQ-anQgk-U8TRIkb;}DZEb+ ztxcsptyPUgHxavj(N43}%AbQYCL?diZ*r6GvC+eTgK930?qPVVVQqA>ZDwmM&R8EH z*eSk6N~jpI8{S!OnJ63ha1ruHNV~(psQhOX5z?Alsm6M#+V$32blk>tSpW?bwSw`+ zoMihs?OD-j`?SCy1rQMG4Eehj075;hsTV*fRS+g|9IbW*^@wCDzq9dlx7}LGPh6H= zmj19~G-rvWzn7y80;s(2S8kA;@_n>hcEi{Rb*E}fzcLXb8olfEX+42sg+cLWT+Jld zy>~9JKJO1GsN@zW>$5l5Z%`=hp@F10usiY-!4OBBR$gx3(|>gb!c}t0C$q>2(?*7X zkvBX-kBd~t6wf&4{YijDcl#k_FgB>5E56~rQVFP6r=$Je9yiD7s^w<1KZ2ttld#8) zGLm{BCsfj!>;yZx1DP2is4rxQJP?t3aV4B$0^rjU6z2i)$;Nt}?uY_S#BCdtOh_vN zBFgU)yTd%7TNq^$bQp{4GM?oHx6TF1=N&?l#1kyCQXOdXXs4~Q!J~;GOGmMqvh_^Q z5i-9joTik>==kQ9SL$J(&b8T7wkt3aIQwSpejOO`vYBaQ;fWPq_zE>=9BTYN-!MoakVycv7+eDbm@hXXvL`n! zcrcLWQj44h${bMCwb7_pxXN=+eVN>%?r3x!hx`7%#?9LfN&L2Fl*A?I`CNETLbLnS z4YAYC=a3FILKY6Jggtwh}ilUp+yqmW<5H% zf4AF{*Lk^X%crpUDoJ$v^bOp=%-vQEd52@x&m2~x${Eql)yr!c!QmR&=S}GvqR_i# zL4;}3JSQXfYb`@R7?++wmfmq7t!Eetih;@d$*NFRjQ+K+p_pqdtEV>&QB zFHO_$#u}x%-ZVu~p@Z=nD^gXyKs?_tbOLtRof37I(*yc;1Qb!xp)R3%K<0T`JeELb z?vLl=xv|1ef(bm9rcI*iD5O5E0*IXxTm_+whpr|~?!*Nb%nRhULexR%(UXcMiDcH^ zErrZ~%YDfxmPypOS~|>|x-d>zSRQxpMTx*&K+vH<02B2Dfauclyp)gNZ^AHP5FuIt z)}b+smAnvY;#~!z(@)h=K`c52DpaSu8-n45JK5ogO!qLn&S@^1OJ0P{V@t#7dYWJw znz{L`OATS_r6Hl{qd|mV^YmOWN6XxV&8dkBEJE|dF#BMksG-It`pa3O@Us*Aco0-O z5I`(=@ktG*+@LS(|g(CExH9iwT=P!xb=hxO;As9a-ld9o#<0Gk_DRku`1&)A|0V;ug*TT7QT<#^&cPc;SZW`_xIX(2ghIUc5+N3 z5S$VM#^BfkNgZ*^qYV>>2ki zBYdw6;bpH1^LvV^4%EQp?+3{Bm}~Z^eF(Wu+w^}%_P8_U%V`Vc&fedIoycSn>8}wG zEVepQkl+uMftgj*Wc+ma1q>5}4j@CeLhMYrjiy->WxI42G@kL{0rDC048Zw;u}PtM z)GR_1PPLArvz$p7l9bp)VA9X1lD1TMqHx#UdLbZK`u-3X>h^*tR7qz)(AGR?VFeZI zJ%AcL)zRk+tzEn$Dv-nUEbN{KKr^i>lBYdLtnJ|wN>3`$i-C;KC4&NBH&)^$I?t`e z0rAKHO`WTr>j-Evd1BR+}nnP+*k9F-|p!@a?RVkswvkq)QJT=3G&ee?VVZ4 zF@hX1X5VV&5RX1N;54NNn0rD((oW7qhU|cdCvn)q%DFGWs6^Hzc^=Kmu8Af4>|2g! zTu6_4aqViyglvBK*%1NfWCu>w`cgx3n~E!RE6iBPNF_t zK!2QUqTDWH8C+^jRsrA~bp^f--vVmmTuct~?$AT!yO9vGZ>yLBHxiv-;hx&hQRqHG zF8GOEuxtg3r8H#>kA6Kw#H|bZ~dN`9Py4yFthNX?}DmgIY|yl z*<_nyE8s+1+u)sZq4d5J=qXW$3;xTJYZ(En7DIho2y9+8*R=`u_Peu zi=I$=_x`@WJ;l!~ckj@<_CT5eaHGh(C6|1Frn_-v*6BTsoCPsNt!TnGl*l79A$ljp@~8?+X;5UmW=Za%IEeFzIrIPrbOq>k{rw`kL>W&j`NgaYc3uPVa( znOh8{*eh2B)L^1yj36=7kWs=B(?}(*J|lD>BI7WZxSQC=9~gzig}-<}RJz<|?;*td zxXtRTA|1yfBk_f|kTM9E-(F6kvt2ZG;~do-LK5$a4u9v=j8sz+?Z~?+^aF2^F(Zw$ zO!01_ReiVfY}0HjzZ7?rygn45WiktErrA76#F)m8S{lE+puU?UAXu^nQw};#xQL#w z4~x*u)9!_orxiq?5CKC9@a|lz;>?h_TmZHSrmHN|KRLJlZ$IPPIVDSpyH^r--ux>{ zksl04H+?PL9z}`u^06d;+;4u2hA*Dc@fc`(qZ}&46W> z%#L^CJKN!#_jW=)yJycM{rcuF)uJI%2$7FCXI+Rgs-qff_~u)l^FDW>aiEZ=e?7%U zvQ@;clZq|8*#n(X7vVfDx$HwH{j2^=AL*FR>6(RTXTaFLTXh5$fwL2kGn)8>aQDsU z33f>gnvY-Zr>&n2K4{Qb4ID;$+Enr5v2bxy{FRGn*vD(r^}IDpEkBFP^yIL4X#x4| zxv2%^i}GugKxNDF&@Tt!U{xYXMGO;Q=unB{8I{X*N?F6x(~Z_uiuKx!90+$qJTH~Y zqr^gImm+Dn=G7-63xq}LT)gLcLLc~4HouNF=h;B7o&$^Cj1S83D&CSug(|m8o#?ms7TvrD110${js`}n%*p(i0PI_WL<3V{%~@;>zCpw=D`?`7@40L1Ve`Js6n+QsQ2$|EUYP%!A!i$ZjV4h?z)Tee6#`le zeQB`SX8S|2WMEr%#hrD?{_1h|*t<$I1F;hwLMbDkFg@bBI$R|!;yFaoq}s_7ikzkt zR5z41lk(PsGlEGcY|)-_e+CdVpcxf)+DLmV6PqZYDEm#B^yo;C{v~YL*;D!4(`q&k zA|N!G=8QP;+r}y+uA%#oRQDiR&}Axeik_Ta?gD~i17YsvQ_W)2}R%r;C6a{%gz?DsG>Nu8%Ve(H9 zPSP%eXOsZ770n&K4Q?%@hJKK=;^fY_gIr?cr%3VqyRpPLmz4`}(LL7r*)`fqhHQxd$$x>?GlQ#9n&=$KdG2qRE)h5=3%`OrS8MR5X&rLDN7 zewug2Ujbt=n;YbjHz%Hj-66fLo$U|vvDxO0>;BIhf67|0K8IS*fY1aLL~T)B656R4 zA-+Ir@P|cV1%^s1;il8-0@^?OUwv%7w_D-q#ZPVa9~^PKB;9qF&Ymd~kplFsG_qk0 zuHal11+zgpe-iv+cZVP5zI=lGICc&A%BSmqWo$Y@09C3PgWMFO z3RzE^v#?hEY$2Vir2@ANnIWf>hjDA*7S~-`fXfl`{t!BVUA#jdqWqHDl)-dtcR8TSa{K{h z3ANhsQ>id|Xj9Ef|9n7X+um;Mrd2A@0&h^j)`x8J(CZ|;el)S~aC*ULf*zJD=Zc<25)h%iC_Auh0#vk}pX$}2)> zm#%FxBey{2)5VLZiO5wd3w7Pb*Wy!R4U)`WNf6L`;?qtd=@gZ6oHtsu;|kzsApHtp z96tzh*XIw4`Nbgf#`_}xq~p8@O02&Q7Kbe@z^2on@B0=DEZ#~wDCxpfYO#Q;3>nQL zx?AQ)-PD|jT~PpSG5`n=PU23v{1)vk4=sg&(2^N*R=QapO2 zVkLPxgwD`u5a=1k!<$_lhh~r3-3=0RqIWqXJ69h_i@q1BMFUlr?4!n_c-U= zm~K0HkqMZ#+2H1IW94F17 z2VB-q-oEhXwvM#iG&*~a)ftg&+@BN=4+=;73%Ko(3yMK|Cpt9Ths+-vl)-X|*VLcm zhc-grE@Y5YBP}j36hIiE97WeXydf^__t^%8XD@i_iHMX&j08m)1^UeWyI|N1CW{vX zhwq)QskL|{6d;GrKHU%DAG)Zn=I+*j zg;M7#vDh!yLQU=XgKmS^@8My19g0AlTq3)rk8kM28_jj~q=C7>`xm3)gRuNX-l-k|qH+{BR<@|W{I!zUUbD7id9uBfVH z24hD2etq4D?IS$8{-l}rx0=XBrGj%asIv_n%;(L1s?PBvvVwUsnq?W z!Y?*B7W3u15T`5yG;={@has%ya5AT5e=;Fk3j@xAp64uIc!<_&q$8Y^Qug$?hrHCA zL=g2u{BSBY2M2nRX})NmSc25@LJtxIlI+Y(3tAHQYd3dj3vV9>#AZX}b!+Mw0Veif zCBW101=CxN*WjAc6>Q5Z1LiPn|9M%;(1-JQU4hwrbg%`Ob>z~-0kp+9Fp|n)fJ-?> zPf+!g4~t;EQXB4?%TvAMrBFsw>Do~tSZE%kdxQYe#;a}8jgU@i1%SCi*YqX&(>^BO zc%C=ACR|Cn4{AVFOu|c_QdUoG!?^uO?ld-@I*Cutm18NE4Hbt5`}r2qJB#OlH0#kW zEiqqeB5kU*Nk_`yQdX2J8-168gpQSksXzs@&NGE+!KC?^;-gme1g*Fv6HR?nbSBXf zZfx7OZ9AFRwl%TsF0q3*o1-QsRk&|F9WbF zDFn^9tD``sLra~;X8eQGcMda9kRZ~3d^n2$a&xfMB<%q88fwKh?UZ?#d6*fUDaDxtg+>1WQZ0vHXtim(gu6jT@~U>dxn&ys&Atzb|MeqW{!KVpb|;gUE{mZxl}wv z+bfD2LFAWT$u2O8@x=CHB!W2GOFu{~+*XUpPX?KM;4^HBtTvgEWv?rwE7v5T>@Gc39G!M5BjU_*_+X+o|mlAr739$cl=tR0haH(&IvCA9%m;y#)*rKHHU2SC-8 zMeWnoNAU%Dr)%(4_i6%YTel`~wSO=rQp)v7)e0*1IAmyxZH(HJZZv0_Kbglj=$RV~ zuu<*a-$Uu@R4*%=<8V`jspTcdD%E)K;>PQ~sYgFn5*L-;IL2tVt&ZzBY-FH@c{s%I zRQlJ*BG!?QIy`BPh?;|igE2t@L`wPWPlj5Mz^S$|+_F3{SvIFc-|m7|{DB>6=+Nxp zoiq!3FW9^VGLAj0^VUyvoHj^rQa^1k%WlG?ug};ZXZH_~8!43|eJ}<%wJ>S7knXvD zO(Udg!iiA~2HD85!p|O>A9IZk^K?<)_!-TRrWe2K=lk46*cdCmIo6~BH%nhhq7`2=T|ALml#ukOP;!P%D zIu}9tWp*15;Y-_OZd7VkY}4k9UIC9K3!Smh1Gt?sw$GoltGR)ah|Kt1R7x&fsLq+C z+V$@iLR|q3?V!YeZEG-W0o{eWwaQ9 z;)PiTbH@-6yzU(UHNPAS?gsgETAo0GH0~9SrIW&9;(>-(*!M=jR06V;fpr`hl5~9*V%s?rzNm+_L%dtUy zVr2SU--A_zWtRoV_xN1vjX^4C`LvCMS7bLQUy8NiX&g~%qPcDaHW>0%`(zPzW0N2| z*#_2Wj<3^BlP*JZ0tBsIeC^`FWHYglDEs+0WL&oOu+T?KXvgKzV0XqlJ;*U=i7cU> zG$5nHw{PoP4>E*}>jPnZMsUhfqs#m&YiMW4S!3U_YxfMP=Fa{WqKa&z7MMNSdlOUo z!6Nr(o%%ARRPIsH{1YkAnK&ZDz`$(b4XxRH0er8DzY>gJQqup?^}(o&;-jxzQ@VuhY9dPnGn`8o0AEpexmd#LtB;umBdaK=|Em6zMye(#nrMUfj&Z(09bND+vZpG+bimf;@Mi(JQ46*%!l` z)f6fji$;^12!Ky;rw-H{Qj}c)$tt0p&XAy%+}nSF^r;V`QWps@p1PB_zfO3_{|bn_ z#s=LfAi*BlTD@pne0VmN6ZHA>x7?%x%X6)dW>Ich0fvm&_{65g^44GS`M}=_i=FnR18Z%@CO3~%vC9@ce;-q?QHRi=a@B{or3@#$h` z#nS`^Jf#uN@@|gdBDsB~-VC`2)uy*^@E1Z?l?AWtJM0N%tu+jmX{Fk`gLwz=AKtsn z;mKvgO9qhR8rWO(g{zFfyT+b?M1qYv;A4vlqI6<($W9@WTc~FI(lA7X<@J?hRq$#GX(- z8e~sNLsOn`gaKCK%U($4fTC`h6v)?PFgp;iDld6lr#ayzy?UDF{uuJ@QgHU`s7Ub* zkrbDcw3;ae=pw{HJW1H8+&x{n;vXMjg(kpIYzXCJC9Wp9kbOAi)WL;|GI_voxIoAA5ej;NEmL zzijxjC&#vJ8Iza!=`ZK3R`eaW6T3Yf>T;%tm6%I2;2iM*Y+JN368j_z)HUdm48rG7 z$pNc(GQ<7(ik6wfO7r*9h9~+__uvxZSVZLz&dzG4xrc`aK zsvLP{*g#0aP+9JgkWk@}KVl?*sR?h8a?ih)<%NKJ0`iXAKa=~$Ul=we&qw$tZ!i+u z3E%&4MDL=!VShJr_FkP#_YFYYI)u7E?(T8_q+p%_O9WhSXtR`TTCEZf!}QW|Hr-OWjg1 z65mh~)A32VH#_<<0xzvMaX~rv)S+!?{f3t`99pj0e|2eCsl+YnST?kp+#JhD(;!Qm z5W&+6cHN*of;G{}jEXQmwaFxidq}O;8v%_az0ipR1LB-CuYjq^*N&K2ts)+%;bk)h zVVPENjGN&%5^!R&m$7fyugY%QTf$>v8s2fmu9B~~(b;{u5 zK)G$>L?g@+Zyvc$>aZ&a&c?b2mM^*1e7PQoTJG9yTLNsV zI0SMCC>@xFe6#N(uMbw9>p&CtoTQ^n`g__Xniv8HO^bG#)bJPvLOBJZt3k9{{2-yWneF$l$Xb*{MHn4fYM-Wu;(t2Jn;X=F zt_B5Ae^#W}?gt4#%AWHo%5aS)@G1GPZO(ZqM_pN#?A&gW*i%oPQrw>bgn5o=1kH&{ zzQx2m2K+MU!|PsW*4N+pGms zR&WVUSGmfVWxp!V;S4z-1N)OQ;D0iv@^r|Kqz>h#N`8Qh z7DyPhA-_xki~R)_5Lep(om`l3v%LKXoSZ0@sZ8TEp1l`U(64+q-3tfVV(eF2k z%WEc@Tv{McqcO3uPG^fshbt~Zy41;l8e=aN$rvonZ>HNX4DEw%^^-TSY9v_U@gyuQ zJOnCq6#2m;yfOdLt8VE7P zE_4!lFgi3@ZLw9WBe!~up((}nt@@6lLKU1$gU^_e{m1oOr(#ryFBR+bqU{U1j z2s!zPF#An*yFTM;_Wa}mQkA0^2;imWVaP*hglX_4%`5T~)f>%*>bo!*FkVIStrlHq z04-&&n#(NT%rIB?0_P})W*p;+#LEcOF>@)>SK%S~soWtImDgOFW*%8Y!&FLqFw!JN zl(hL26T)<)2J0X?eL?Y#%nUw{+sZN|YVo5;*a5oA?v)-%weyy-N5fEh{H6yf@^Z2? z!hOfWaaFhiozW_Xr=4p%KscHZT?km5lkAygi{L}=wld!CUlf7z<3FA;FXZ@LGZ;Om zKcx%AlY{)d8w{Y{tl972D)!$60I$ninx@{LE%J;$`NLDxcRoO@-3mtk>euG{z-{sF z<0*0H^7DBk*wOmu!8D=nK`WrG)N)bawZcsUnA1DEX{DrNnlig-FFi-0cW-0c_uy5a zg=t+@Tupe;d!h0@$~^ri$^!x&z5{Vt(q;V&8$kVsEmuNfya7{2Ct&bbf??$~Ky zO|@C}l(8Vq{M4mUj;7GRy%NFNpnFB$o{|;XL+u&r@VA?qTlHrK?+`My(rRLOnp)mT z*!9(nARJ7szBZ6IxnZ#dHyyL1?iMY)sHQ7mbNBoHF zm->UPrsSoh#`s8~6`#^kYPetpWhmjvW$Qb@2P$~i;(8VZQl0MRV8pr~D1d0ct`DMt zrp@=)@>0O;UQg^k(eS?vhzR0I?;w{{tR~6~LPiMVt~5UnryN21Y_Xra{k)`g0k&Ll z5gN3zysAYZfvr%Lir4FElM^FGD+;7*oqw$**eH~(7TQ_s^OiC{gZs8Gs$b{&UtTss z#7gOmCm`KkImI)9oQwMm!aN4(`yD1u8+hwUWF86`9zKo#uI3qWifre(l{-!zX2@h@ zH~;<`n=+PG*is~)e&*|4eHpW%&${R5E3xmw3U~Vr<#{Q0JN1VXHS`bD;Hh!ir{vGU zF1x|pz%%k*0b3}wp>=9S)4jeStHmxKB{Yc%M%;MQuNXp-0gU)B;PHOKp{=t-w6vVhL7s6sNee?t zNy0qLc}IwSN?UTi=%Nfz=w6{nG|_DQ8BVss{PR+g&y~b?!I!ncWLUqwkvwG@_7+%x+qaYntD-w`>#DU&m=jxp&#i@Mixopg>e*Yus=Z*84waJ zvTh=8FR)6`Ka)y}8{Pm=xkqq!wetKue0Rhw$e{io6ox+76x$8E&NZlDomCjuN+3wD9~A z+tZ8O#WWd8EIOqx&25AK2+&9bsmG0z@D5mEvWi~(}i zw|WSkZVXdRQ=ybMCbW;`y=QW9Pzlc!$$v|JoW{gd-ikA$$Up+wmcGOdU*el#8uiG;&Owp}AsE@#Pk$S^Ul~(0S zCp(Ri%CxXbEl)8x2k*;Q2Cw3F-w4*W=Vn0ib){p*E5_{U6&{VNxUZW0%-;v*Dnw^A9FM19 z_9-Z0inZF41gj|i;QSdReF9{+f6X!cK8x~n-ckDPUz+nkwm%Xxo$-BU=cVXkJ#^JS z{1}IvqrOY)IKmA!5*)Y`cM!X^*Z}b;f8nY#9eB49PV3s$$##(kh3e7)lad&J3 zG=Vo!@(b7j%`6H^5w>l+r3}v5sAXFNuR3w2X+Q>=Oz$MxlVVDgEK~dWuD`9qd#RX* zVDC?C9#7t##&sVF?m%9wUncc$u#*H|9je!e=lS<<;8V?noq{J;%SVNRcW^)J@BBCA z#$drO2af% zl_{K*Bw8`Jw!Ky%n&QTxHEJQ^uv~A1HKS6p6&Ruz?KC^_hA>dsX})6@ZkYAYz=Ns} zk}p4?_esBi-!Q*mqVN1b+Y@YffQxM0vmtLQ_4Viw8C)m1{staZefaz%X&8uvY5`_5 znxF0=;vKBvO}SYB zx1_lyS8i>N5#@?FP`1NBadxA4uR~89Z3aTYr$Ex1nMKM#ngwV4i9>j-Ybqd@ zdh);%Z)t`d!Brd?lX8Z@so@G-%^T2{mh=rUruaa0)A9vv^e7^!@MqrPZkq|MnZs z8>WNf9rBJx<&IxH$_qjJBHVYw+DF%-{+E1$Q5If3bZvdzdeWQnHrFH~$gA`NaeB|* znq9d!cE2=RQ7Ydcxde>9xs%|M7TBAR@367j$5r$lWJ;NYzEJe%YRJ6Lq0tU!TnYVr zgm!vVW>xNE`HfH)W?oJ{>h#)iSOg@jT|aQv6txa%-sj~t3wpt4zY>|B{H1s$0^WhW z)=m^h;xw#-RzU;nLcOmRb?&c~j2?J0#9?nlo?`hDZHEB;UD1#dLdQvB#*`QT+M`FZ zui`=sfZEt)NGcqd4JzUUirmuqt}+lp>x99g(XdP_Ue;{Q^H^w97#oi3{EFn&BrbKL z!WO}+VYzCqVm(Mz>z|CuwF6XQvX**62?qaPZ^EfK}P&`r`u?v6pV}xsBcZY z#6~QeGH|k-HGmzt&u%dIH z%_mawa)Z5JZA()Xa?Q(O>~Yb|qwHu?WXE;A!r6EKylHSD0%BsP)K}>iMer6kuE|tI z-y+GTt?C0=_}Em{wL`sUmiu>RbQwQSpSyM>yt@{7sTDbf&c*rP8xQ_UQ*|)#VfVH z>LQ$0f7aIB;lAKMdQ3UBDhz@pEEsL2;x(@+DLa>f4hN~j(8*jSbel-sKsuH~5-cU< z*QlPPc7^!#%B_TOpf^eMv^gO6^b&@gB8nU$Dg*n>_n5wA_og~%G@M66g;(UC4eUNN z!#$8QabtbYgnma4Hv-LPo}z#R!Ru8SBwEQUvTqFA6BViAjN7>7lPfs_fA%DrPr#6r zWE$vwAg&1W(4<#hM6(%Yg}m= z!zB!BVuyVo-jZ9EdA4Q2gq2wPn^>=JhRXli%8P^8?pz)sLz4kXC2-HS9>YZb%i;Ew z3%9>AA;Yu5s6NBu%p^`$I%w;fEXVa z>nWP9c-0LlnfMI*bo!b!>=nvU>Ta8Zs2flKOx?#X9?L|#9C?(^2+t9MK^2&KUyW3= z#B5U@p$WQzetp!jz{mdt(2cUpIm%?@i|*)+an;xSt|3>4=S0M*=s1Wd0{ za;Sg`WAS>m%^c{4VnIrmlU*w~7e8AT)xNt8C;$PIa|W~MY0+z4Qr5`+=k)s-A<~Rk zV`0Y#Cpkn(P*nqulq}pNlX8nLdf_j#jgvBOTl=k2IPG9FEB-Gf7j80Z`90QYW>PD7 zA5N~79;Q6Ohkw9}GYAQeUp@w?xW~DrVN;OXmUj2RJJe*IkdnOYh`uPUfthPvVANqV zc18D)=-%-SoY7UUO=sjf6SFxB<({5NSx5S9pr$w@C^iezCWiA8(Vcv@507*lDHXWN z{zN@4L;if_TbxB@eYvCTE1^#;cHG2#Mo;Mv=LB^!Cx*5;`qZ^(_*{g(yMCrPe!}v= zuLA#!-f>GJ|AvudP^NCXakX_$ZA!p2=nx>j+rwHtSz=8F;Mm0UgQmp3g^-FJvSLBM z&*}P2y4#x*v70C0_s?_HZ$KkQPdV(Xs18Aq4fgtI)PbvnF%87hs2s=D0Isk?SGa(W z1b}M*-LdNW;$VXfCeGFbj1%Ez*i{mO`L|tBIsxl$0B;+A2_Y$nq|KeCBv_?Pd+jl%)0@nT_6OSb7aMP{%~$ zvU#K-uM@>V?{!?A%iiQ~o<1LKu>gTcAMkN3Fy|_FuMh|#0pM9;r>TG8I(=~PMP&$> zjwTe^0bEn>^*nTOhdoE=0aejYQ%-vxrA%mjOp_oQmZ5e|&aoYRdt$R7wen2=EJT`K z06{sg0q$A{EI`CB`@_jNQJj38;xEIrSrf|eLE*24p*t&s+b}wLRjquE9*fM(sD89_W76jOUz{2*ze(qw4?rf+k);!CVAiNKw}zye&2#Y?rwuVTGgkOPHn)h~oT|XcTf)#h$9Pe^H1ASu zm5EO9^;&FpZsV-07&@NNffT-Q3&L3*Olb$)Sth^&W#A{ivjo>9A5RFBgasIq`pXb+ zeS@H~UJg1G1QoLY(4_{huX5haOiLr?A}B#b>gdPw2lribiK(Njw2CP{5ogkRs|I{ z^c(ZSDn&{>ocVHUAfPx)+!7UK;vvd+`Awq9aD*VQozJaTgzdBbmMdTqKYhK?k(YP4 zTT}cwGlE21t7aEwUL0~VLl-KVu8Jj`G{VCPQka^T;8W zr>4Uj_z+$!ONz7V+~#N4;iW%O&KU~e>esMd;Y&^TJpBIK}jNy3ICQXPpCmx7O5Wd%krcMZ1Kwx*p5ch)Z|u5N<`9{7&7f zqXbynE7&WKx9yBmN)}_=BslMX8}``4cU-IEh^fEbr^bSF)O7}^UOn3aTRwaaETFRs z$$_LQp5mA%a@1C^TytYXk6!n5iNs!@-2J|rYy2C+v;g-v)q1cs^+84eKFa>e$9Ui6 z3QG3gO40Ne`Vu~HhmuG5Z;yIATDHkM<4NtpXc5j<7Rl;(z3GUWw!_{<`3lUgAIGkk zsKfTCJV)HT1LE8R@^9QC!si2=Te7cMGnR4!#u0d)A23tftP*h7&pmZuclY7txgM+? z@=oeA&w`H3PAZegR@WgsO(Ms_fz5^h0@Gk!HM zW2Bb31fV~kn&5{!9G5ThNhfK(_X;Vk)TFY9>YJ__2X9R4GSzKqACCsH0$D;pwspq} z-#Ihu5)l@G=osp7Vf0G36T!y1?Lp=9cu&8+FHD8=|rh(PF@?sq|Ig; zRAds%5(-gP=U%EtGo5X;P_;t?`C4*!aMO&5ZxfE0W=2BV;^CkmvULXAhFWqlIAR@&A5c*buaDkS84m6xWrUpz6& zwJ$lk`_Yo!MkkF$FRB~{P{hbQS2m177z0~~4B|a48eXk9Uyek9RAjPVRT>7zLCgK) zHS30EavoiDOr{Nh5dJO?QwvEEe;Im#lva`sRHbSF7cSidY9S+VhB^sw6o#`II$LMn z)5;#v!MBCfGi>En6T)`LLopNz7Rr8%W)v+k>Ep20{gpkTAxS_eC%*%4n4U1&Z$ z13+56O8O)U69CI@O2kG%kyaS1311f+a@zjNoExFl2dm>g(Ba^ScYwb&obsO{rWIc8 z=ebU-w;ncS=R@p;t-T8_}>9*f&0H$B01JQdU8F^mJ~=l+PTXfktm5L^Ddffp!G9E74IKnrC3QSnX0ZR4Z)mja|ByM zQTY@riT&Mpb0OayoqC~jJK$P=_mKl}tDS3q#j3?xvw+i5DWIEx$I4AUz?fYg*M1Bk&DxF&)LSfMlC$h%^X z@lHy;wEXU6^3S!s{(E`=_jrx#EBG02{jF3)(rEs%bcQ`as~J*?Pp=*VhHwFjDB5J= z(X?V%!grG2SY0_wu4`BIxg~ww2%WC*%!3RW{3b=Z)8z14(kZ1<=Kf-8x)&HFMIZY6 zw~G=qtkpPogxYv#L6clnaXTVwzm)mwEa@wR947K{o`RdK_nkFMr-}7oF*?5s0~i{z zhx;^@mdO_)JR!qHB;`al_75=x2dV<`tKRKG?(e6Il(Zfr)c5#-Dd#w6HA@~VCyCtY z%qs4I3Azd36+f_Q{`oVb(aWu$>o13rrv^OM;YT?gD85N{M2+0c5zwIF$=*|PcVlNNiB!Wqg?})$neytdR z+bPw@RG2G$1rCjrY_3z>=FfE%zE2&eiV!m}Gij%|kKubqN=M~GP0xvh83%Ri5UuQKHbA2N?19xP>n3b8-mAT!sCDxt*QknKfsvtEdOt{cWMZ z4^jM#>-g<65{pND_@|Yy5kG2rX?|L(`AhCp%=5*;;axM=3xq0;Hn;Z^MIHS{wISQw z+-COvYJR##XQg33PA z=O4MyZWuNx_@0~#%(T)HM&W&ospOALwP(m7}Q)G3M*Y=~1p`!q%eUn3C`gaSD z@4;xqDu$Z2GV$vV1`#42P$5tAH8zx-oIG0)d%h@DgNa~yMT~AcL?k+g;X+2a(t=6y^0Wu{vg#9 zk8vGzOl2EEwwGOqWxX7eSI-QVOC)_YPA>MW=*}-iK^R~(Fraqi2%+*$m@pYTlHo_O zNNB7pV|%=sR+Yh0E~xlt0%-FXq9J=27y&u4k(%2g;;u0RbPvIPVG<06RxG7L$8yb~ z@eBWO2*^kP0j1Lp32;mT5A-JNNC`NnsuL-R3Sc-@TT*JSYJuqC3@BCy4bG`(IOGX6 z0`lI?dMjw|8L3^l5K1^3wZZ|FUIGN_ud7u9bL`@4JmM}QcCCc8@T<%mK%PyF%!G%{*6iJfjFjfV zy4T4OVlwYy?7*JefU>g>MtXt+8@9jA_Yxuj!u_Kd6Ji7~z6t;%;kG)B9uFi%6v$+e z#gc6xVyIB%vOsZEmB)Mi`}U462oU&4<7`lsBSI=iET$L0LgIfb=>D0Xr3V@(0uuoy zX~1XjQ#6bfeEeL1i%2BPRm>PP26YtZAS+oT=96l+ipJO$=fXWMT{nxfPs#PDo@8KS z586gDURSBhz7G}d`Z?%*8I|+)*)MnJab3UcQEGSr44^T}2gw^H)_-5xmh4HToa7vO zw6mB_xJcwWHy(Ey4yW_pz0s-=(GBj!xAq4DUxVfz8PkAORy3+M+}=7IdkG`_+gR( z7xetNdIvmN^GwyA0(?AIDv;4JnyCky6a-ptkw^Je`3b1 zO;A@~Z+9!|5>o!p^fS(iw`c*gCSI=4@M@nC8cobB&{`UpNYEEYq-tsXPffM5O*2o= zfF+AgHAmObxs!LdK;MkMSY*4u?ZmLry++@r5j*|ny@zitkxXNub*GVb>yU2wwO|I@ z6riy(tMxM6k>#7fW}EwFObuT7=9hCw2jt~#-wYlGvb*=!08sJh!V&DGm>HB8XiL&BU02bN(G63p>oNJ z<&@+Tgox*;@~i}XIQ}}QWt>9ztJS2DN02!tydVDK@2-7IzKq!uz_In0jgt%qKkKKr z{r8{2Fwc@{v67$e@WoV~yzk=|Bue2#G%FSaZrN14b5Gp_6f?qh^+n!K^m#D&FIKDR z5Ng&FIwIf^KTxMmf1kjur_sY^kKMDgpfD$f6(b^)4=dyZs=q?8_C0h$iRCd4_BFS5L2( zFCM<%eLD1si(g`wO=eYgtvXI@+!;A~y7UD;o?n8am#FLVX^iz9I67!@hIZvpjh<|| zR5PWE=SR&Tlh%*A9zv|T@gzHa(V-MmN--$A!{&UNLFbNzimYFSxO5JSR_fsNCGXkQ z!^mz$PY3Z?Gjx`Xy8i?OuZl-btbJm~b z?xzKHnr?S49MLF#&2;WGuzWdPSRiCWZ*O)}$!iBvm}d>+BM}>Vtbbyqz;6ziC!T6@ z>S(T^1q(3jnE6~icekbNFd86n--Wsn@+{jIJHMU82OFkyGmP|eVDg;AIAln2Eo4lm z>>q?s05lgUTAL%N^(2T$Pgvd?w&sk;E4@++5m=g^q*~m58ZQaf-dO6{0Dgch9UVX z9#8A*%jyzLPnSnlsJK5G$mF$rsiuewlxHx0#7`nMH{?U^-w3{Wk(gW~dk5j;6b+YU zd5-9?!$MTR3!+XpUT9CoytURO&|S(-u1AFjgVYnG4X)AN=B+Rb> z<_wpBSgy!(mrbbwnemwN>LgoOTyP8wfJ?1_viZUxQT^G9o9X(3Q*q0Y?wh1x$JPt% z42XcOY53C&`gzkf39YJhC-L!pGd5!a3s133d{27-Da?y5nWxJ#G@ezG=6bq7L(DlptRo?ure8M z-nUfkn$ZB!W^zm*<`^1R=GSSPs};zOSs)bZq%1>mqb;Q#SOinS^pOb7l-mM%z<*(g z|HA111B3q;X8$j|4UJ?Zk}(mgntEM)34~0M>`0tq#(NGS6asBVfvK$3nq&_mmab^- z^nYQD|H3yQ|E;(EpAR#1rOejlJ0Xb%Ls*hvE9f?*+ki=AsaQMWCmVBW()?!2l9gqs zOaAYJ&FfI$P`GFO65-<`?&IQULLPs{sA~DlVA+)Bk_Q z^tNNc#&2R(SHaWRpDNDdp9fAL^Tm}sYU2hp;9|eU&BJTIgr2%0ff2^<+ z&X``@;!E7`oLyl|$@3{TNwP_9&}he*RXgmYuZuQDD+526+@-wbzqfVrt;I31%cb8v z^SK+$%z{(Hw}L(pc(U44m?XSc&1oHfgy*Q7>hz2lIepNt-Sbl){kkDzsd#rj^19f6 z47NedV~?4%vi)iQ1 zyv!S`o)5kh2T_h-))sAq0;qzj@W@UX(HM)sp+R?@8%%Uc15bFi_?(b*U60=QzPT#K zczvTPYhNX3?+IPUf~2^q3AN{l9`b`Qgb0<8$UGI;r_@A>-_^E^7v{%D^fg&*9ZbF^ z5TJyWuZ6{!DCAqiuuKlXq#M?aB7e|9tAjr>`=jEErOF_^uS zQju{Ho&fGN=4uogu_&%&#(&)PTeRfy#%AMyS@L-y`3rsA(?tFw*Bs82W;f zsmH{v9sib)IFP{UWzF(-^g8IdwP7@jDdTN56TRH<%$oLbLQh1l@iCy7u- zraWvYlw}ek7#4TEd(^-$t{=F`TMt5&>5%@EuIeIU{m)h>erD9?DY=;RNwFis1Y;{m zkuDPL0vtB*^8<}P(8)$bOa?&Y^Se9%ul3EkvXj(C{R5RxOcNy(jKm!zrYM308M@rz z!aIVCcLeM+zBvJpkYu0ADv<}OI3h`W!Z4K4v>zZ;fk9UxE@kk{>O63Ch7eg#UDA=7gZ7(G&a#32qO6Y`=Or}v z)L7qH@O%c%<8*JxEGFBcEWOc+t^K2^&Xd?xkx%Y3`=9`2{X*{p3HWm2 zdNc7SzhW*OFUzHn?t#iffI`vd?@uu1?g}K}dg~aTE#YaTNm$W`1ETN=Sm9P$0Xt{- z66xzAh6mLmQ0hU?8wowZwWakIC+cdcjW3E}Rx!6_u>j;kLPcY-nhjuVUa7)Epa&_H z(qjnY+V8IS&vtWBu!B=p z@5%l(NSZtHY&GDoQlH*t+xd<0w8g+yEh*~i|1VaD=&$f?>oH+lEAxqwf&6zxT#-_PiUU@KIj-{2%@0;pR;k3z;k-!xZK=WptyplSiV>S&ja6X w{7JF~Okm`YPk_npmO>pyoTNX(iAu7| { return ( -

+
+
+ +
+ +
); }; diff --git a/client/src/assets/styles/main.css b/client/src/assets/styles/main.css index b5c61c9..81115d7 100644 --- a/client/src/assets/styles/main.css +++ b/client/src/assets/styles/main.css @@ -1,3 +1,57 @@ @tailwind base; @tailwind components; @tailwind utilities; + +@font-face { + font-family: "Roboto"; + src: url("../../../public/assets/fonts/Roboto-Light.woff2") format("woff2"), + url("../../../public/assets/fonts/Roboto-Light.woff") format("woff"); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: "Roboto"; + src: url("../../../public/assets/fonts/Roboto-Regular.woff2") format("woff2"), + url("../../../public/assets/fonts/Roboto-Regular.woff") format("woff"); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: "Roboto"; + src: url("../../../public/assets/fonts/Roboto-Medium.woff2") format("woff2"), + url("../../../public/assets/fonts/Roboto-Medium.woff") format("woff"); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: "Roboto"; + src: url("../../../public/assets/fonts/Roboto-Bold.woff2") format("woff2"), + url("../../../public/assets/fonts/Roboto-Bold.woff") format("woff"); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: "Roboto"; + src: url("../../../public/assets/fonts/Roboto-Thin.woff2") format("woff2"), + url("../../../public/assets/fonts/Roboto-Thin.woff") format("woff"); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: "Roboto"; + src: url("../../../public/assets/fonts/Roboto-Black.woff2") format("woff2"), + url("../../../public/assets/fonts/Roboto-Black.woff") format("woff"); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/client/src/components/auth/OtpForm.tsx b/client/src/components/auth/OtpForm.tsx new file mode 100644 index 0000000..25d9403 --- /dev/null +++ b/client/src/components/auth/OtpForm.tsx @@ -0,0 +1,5 @@ +const OtpForm = () => { + return
OtpForm
; +}; + +export default OtpForm; diff --git a/client/src/components/auth/SigninForm.tsx b/client/src/components/auth/SigninForm.tsx new file mode 100644 index 0000000..387848b --- /dev/null +++ b/client/src/components/auth/SigninForm.tsx @@ -0,0 +1,5 @@ +const SigninForm = () => { + return
SigninForm
; +}; + +export default SigninForm; diff --git a/client/src/components/auth/SignupForm.tsx b/client/src/components/auth/SignupForm.tsx new file mode 100644 index 0000000..1beb42a --- /dev/null +++ b/client/src/components/auth/SignupForm.tsx @@ -0,0 +1,5 @@ +const SignupForm = () => { + return
SignupForm
; +}; + +export default SignupForm; diff --git a/client/src/components/navigation/Navigation.tsx b/client/src/components/navigation/Navigation.tsx new file mode 100644 index 0000000..3252523 --- /dev/null +++ b/client/src/components/navigation/Navigation.tsx @@ -0,0 +1,5 @@ +const Navigation = () => { + return
Navigation
; +}; + +export default Navigation; diff --git a/client/src/context/authContext.ts b/client/src/context/authContext.ts index fcf7c04..96d3c6a 100644 --- a/client/src/context/authContext.ts +++ b/client/src/context/authContext.ts @@ -1,9 +1,9 @@ import { createContext } from "react"; -interface AuthContextInterface { - isAuthenticated: boolean; - login: () => void; - logout: () => void; +export interface AuthContextType { + signin: () => void; + signup: () => void; + signout: () => void; } -export const AuthContext = createContext(null); +export const AuthContext = createContext(null); diff --git a/client/src/context/authContextProvider.tsx b/client/src/context/authContextProvider.tsx index 253ee06..feab42b 100644 --- a/client/src/context/authContextProvider.tsx +++ b/client/src/context/authContextProvider.tsx @@ -1,4 +1,7 @@ -import { AuthContext } from "./authContext"; +import { useCallback, useEffect, useState } from "react"; +import { useCookies } from "react-cookie"; +// import authService from "../../services/auth"; +import { AuthContext, AuthContextType } from "./authContext"; interface AuthContextProviderInterface { children: React.ReactNode; @@ -7,14 +10,27 @@ interface AuthContextProviderInterface { export const AuthContextProvider = ({ children, }: AuthContextProviderInterface) => { - const contextValues = {}; + const [cookies, removeCookie] = useCookies(["jwt"]); + const [isAuthenticated, setIsAuthenticated] = useState(false); - const login = async () => {}; + const signin = useCallback(() => {}); - const logout = async () => {}; + const signout = async () => {}; + + const signup = async () => {}; + + const verifyTokenValidity = useCallback(() => {}); + + useEffect(() => {}); + + const authContextValue: AuthContextType = { + signin, + signout, + signup, + }; return ( - + {children} ); diff --git a/client/src/hooks/useAuth.jsx b/client/src/hooks/useAuth.jsx new file mode 100644 index 0000000..856f8a7 --- /dev/null +++ b/client/src/hooks/useAuth.jsx @@ -0,0 +1,11 @@ +import { useContext } from "react"; + +import { AuthContext } from "../context/authContext"; + +export const useAuth = () => { + const context = useContext(AuthContext); + if (!context) { + throw new Error("useAuth must be used within an AuthProvider"); + } + return context; +}; diff --git a/client/src/main.tsx b/client/src/main.tsx index 8fc6ec3..8df070f 100644 --- a/client/src/main.tsx +++ b/client/src/main.tsx @@ -1,10 +1,29 @@ import React from "react"; import ReactDOM from "react-dom/client"; +import { BrowserRouter, Route, Routes } from "react-router-dom"; import App from "./App.tsx"; import "./assets/styles/main.css"; +import { AuthContextProvider } from "./context/authContextProvider.tsx"; +import SigninPage from "./pages/auth/SigninPage.tsx"; +import SignupPage from "./pages/auth/SignupPage.tsx"; +import FlamiPage from "./pages/flami/FlamiPage.tsx"; +import MapPage from "./pages/map/MapPage.tsx"; +import ProfilePage from "./pages/profile/ProfilePage.tsx"; ReactDOM.createRoot(document.getElementById("root")!).render( - + + + + }> + }> + }> + } /> + } /> + } /> + + + + ); diff --git a/client/src/pages/WelcomePage.tsx b/client/src/pages/WelcomePage.tsx new file mode 100644 index 0000000..c4c46bb --- /dev/null +++ b/client/src/pages/WelcomePage.tsx @@ -0,0 +1,5 @@ +const WelcomePage = () => { + return
WelcomePage
; +}; + +export default WelcomePage; diff --git a/client/src/pages/auth/ResetPasswordPage.tsx b/client/src/pages/auth/ResetPasswordPage.tsx new file mode 100644 index 0000000..8acb0b2 --- /dev/null +++ b/client/src/pages/auth/ResetPasswordPage.tsx @@ -0,0 +1,5 @@ +const ResetPasswordPage = () => { + return
ResetPasswordPage
; +}; + +export default ResetPasswordPage; diff --git a/client/src/pages/auth/SigninPage.tsx b/client/src/pages/auth/SigninPage.tsx new file mode 100644 index 0000000..32afc0e --- /dev/null +++ b/client/src/pages/auth/SigninPage.tsx @@ -0,0 +1,5 @@ +const SigninPage = () => { + return
SigninPage
; +}; + +export default SigninPage; diff --git a/client/src/pages/auth/SignupPage.tsx b/client/src/pages/auth/SignupPage.tsx new file mode 100644 index 0000000..8c7109b --- /dev/null +++ b/client/src/pages/auth/SignupPage.tsx @@ -0,0 +1,5 @@ +const SignupPage = () => { + return
SignupPage
; +}; + +export default SignupPage; diff --git a/client/src/pages/flami/FlamiPage.tsx b/client/src/pages/flami/FlamiPage.tsx new file mode 100644 index 0000000..16a4b39 --- /dev/null +++ b/client/src/pages/flami/FlamiPage.tsx @@ -0,0 +1,5 @@ +const FlamiPage = () => { + return
FlamiPage
; +}; + +export default FlamiPage; diff --git a/client/src/pages/map/MapPage.tsx b/client/src/pages/map/MapPage.tsx new file mode 100644 index 0000000..c264b95 --- /dev/null +++ b/client/src/pages/map/MapPage.tsx @@ -0,0 +1,5 @@ +const MapPage = () => { + return
MapPage
; +}; + +export default MapPage; diff --git a/client/src/pages/profile/ProfilePage.tsx b/client/src/pages/profile/ProfilePage.tsx new file mode 100644 index 0000000..1017f59 --- /dev/null +++ b/client/src/pages/profile/ProfilePage.tsx @@ -0,0 +1,5 @@ +const ProfilePage = () => { + return
ProfilePage
; +}; + +export default ProfilePage; diff --git a/client/src/api/services/auth.ts b/client/src/services/auth.ts similarity index 83% rename from client/src/api/services/auth.ts rename to client/src/services/auth.ts index f887a1e..490ec78 100644 --- a/client/src/api/services/auth.ts +++ b/client/src/services/auth.ts @@ -1,4 +1,4 @@ -import APIHandler from "../handler"; +import APIHandler from "../utils/api/api-handler"; const authService = { sendOTP: async (email: string) => { diff --git a/client/src/api/handler.ts b/client/src/utils/api/api-handler.ts similarity index 100% rename from client/src/api/handler.ts rename to client/src/utils/api/api-handler.ts diff --git a/client/tailwind.config.js b/client/tailwind.config.js index 52f6393..26a690c 100644 --- a/client/tailwind.config.js +++ b/client/tailwind.config.js @@ -71,6 +71,9 @@ export default { }, }, }, + fontFamily: { + roboto: ["Roboto", "sans-serif"], + }, }, plugins: [], }; diff --git a/client/tsconfig.json b/client/tsconfig.json index a7fc6fb..6f4387f 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -20,6 +20,6 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, - "include": ["src"], + "include": ["src", "src/services"], "references": [{ "path": "./tsconfig.node.json" }] } diff --git a/server/routes/auth.routes.js b/server/routes/auth.routes.js index b3e9a34..d4f30f8 100644 --- a/server/routes/auth.routes.js +++ b/server/routes/auth.routes.js @@ -2,7 +2,6 @@ import Router from "express"; import authController from "../controllers/auth.controller.js"; import forgetPasswordController from "../controllers/forgetPassword.controller.js"; import otpController from "../controllers/otp.controller.js"; -import auth from "../helpers/authMiddleware.js"; const router = Router(); @@ -11,6 +10,6 @@ router.post("/signup", authController.signup); router.post("/send-otp", otpController.setOTP); router.post("/forget-password", forgetPasswordController.forgetPassword); router.post("/reset-password/:token", forgetPasswordController.resetPassword); -router.post("/verify", auth.verify); +// router.post("/verify", auth.verify); export default router; From f062998ec0de94a17a87c9944aeeaca53d856fca Mon Sep 17 00:00:00 2001 From: Maxence Date: Thu, 22 Feb 2024 21:24:13 +0100 Subject: [PATCH 021/108] Create .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cf64b79 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +server/request.rest From 6fc10b371d65b533a289df4747a76c36f81b36b3 Mon Sep 17 00:00:00 2001 From: Maxence Date: Thu, 22 Feb 2024 22:44:48 +0100 Subject: [PATCH 022/108] feat: auth & mailing --- server/config/db.js | 4 +- .../controllers/forgetPassword.controller.js | 11 ++--- server/controllers/otp.controller.js | 12 +----- server/controllers/user.controller.js | 2 +- server/helpers/authMiddleware.js | 40 ++----------------- server/mail/base.html | 1 + server/{helpers => mail}/mailSender.js | 0 server/mail/templateForgotPassword.mjs | 4 ++ server/mail/templateOTP.mjs | 4 ++ server/models/otp.model.js | 8 ++-- server/models/user.model.js | 2 - server/request.rest | 33 ++++++++------- server/routes/auth.routes.js | 2 +- server/routes/user.routes.js | 1 - 14 files changed, 43 insertions(+), 81 deletions(-) create mode 100644 server/mail/base.html rename server/{helpers => mail}/mailSender.js (100%) create mode 100644 server/mail/templateForgotPassword.mjs create mode 100644 server/mail/templateOTP.mjs diff --git a/server/config/db.js b/server/config/db.js index 34c3f48..95ec81b 100644 --- a/server/config/db.js +++ b/server/config/db.js @@ -7,8 +7,8 @@ console.log(process.env.MONGO_URI); mongoose .connect(process.env.MONGO_URI) .then(() => { - console.log("Connected to MongoDB"); + console.log("La \"BDD\" est connecté gars 🤓☝️"); }) .catch((err) => { - console.error("Failed to connect to MongoDB:", err); + console.error("Ah mec ça craint là.. la \"BDD\" veut pas se connecter 🙂:", err); }); diff --git a/server/controllers/forgetPassword.controller.js b/server/controllers/forgetPassword.controller.js index 2ef3f51..25c79bc 100644 --- a/server/controllers/forgetPassword.controller.js +++ b/server/controllers/forgetPassword.controller.js @@ -1,7 +1,8 @@ import bcrypt from "bcryptjs"; import jwt from "jsonwebtoken"; -import { mailSender } from "../helpers/mailSender.js"; +import { mailSender } from "../mail/mailSender.js"; import userModel from "../models/user.model.js"; +import templateForgotPassword from "../mail/templateForgotPassword.mjs"; const forgetPasswordController = { forgetPassword: async (req, res) => { @@ -24,12 +25,8 @@ const forgetPasswordController = { const info = await mailSender( user[0].email, - "Reset Password", - `

Reset Your Password

-

Click on the following link to reset your password:

-
http://localhost:5173/reset-password/${token} -

The link will expire in 10 minutes.

-

If you didn't request a password reset, please ignore this email.

` + "Mot de passe oublié ? - Flami vient à votre aide ! 🔥", + templateForgotPassword(`${res.domain}/reset-password/${token}`) ); if (!info) { diff --git a/server/controllers/otp.controller.js b/server/controllers/otp.controller.js index 8f5abc7..8c2022b 100644 --- a/server/controllers/otp.controller.js +++ b/server/controllers/otp.controller.js @@ -6,14 +6,6 @@ const optController = { try { const { email } = req.body; - // const checkUserPresent = await User.findOne({ email }); - - // if (checkUserPresent) { - // return res.status(401).json({ - // message: `L'utilisateur existe déja.`, - // }); - // } - const otp = otpGenerator.generate(6, { upperCaseAlphabets: false, lowerCaseAlphabets: false, @@ -31,9 +23,9 @@ const optController = { await OTP.create(otpPayload); res.status(200).json({ - message: `OTP Sent Successfully`, - otp, + message: `OTP envoyé.`, }); + } catch (error) { console.log(error.message); return res.status(500).json({ error: error.message }); diff --git a/server/controllers/user.controller.js b/server/controllers/user.controller.js index d587c12..6b73b50 100644 --- a/server/controllers/user.controller.js +++ b/server/controllers/user.controller.js @@ -29,7 +29,7 @@ const userController = { await userModel.updateOne({_id: userdata._id}, patchdata); - let token = auth.encode({ email: patchdata.email ?? userdata.email, password: patchdata.password ?? userdata.password }); + let token = auth.encode({ email: patchdata.email ?? userdata.email }); return res.status(200).json({ message: "Informations de compte misent à jour.", data: { jwt: token }}); diff --git a/server/helpers/authMiddleware.js b/server/helpers/authMiddleware.js index c7207db..4cddfb1 100644 --- a/server/helpers/authMiddleware.js +++ b/server/helpers/authMiddleware.js @@ -3,7 +3,6 @@ import userModel from "../models/user.model.js"; const auth = { encode: (data) => { - // data.expiration = new Date().getTime() + (1209600 * 1000); return jwt.sign(data, process.env.PRIVATE, { expiresIn: 1209600 }); }, require: async (req, res, next) => { @@ -12,33 +11,22 @@ const auth = { throw { code: 400, message: - "Echec d'authentification, le header authorisation est manquant.", + "Echec d'authentification, le header d'authorisation est manquant.", }; let userdata = jwt.verify( req.headers.authorization.replace("Bearer ", ""), process.env.PRIVATE ); - let user = await userModel.findByEmail(userdata.email); - - // let tdate = new Date(); + let user = await userModel.findByEmail(userdata.email); + if (!user[0]) throw { code: 404, message: "Echec d'authentification, l'utilisateur du jeton n'existe pas.", }; - if (userdata.password !== user[0].password) - throw { - code: 401, - message: "Echec d'authentification, mot de passe de jeton incorrect.", - }; - // if(userdata.expiration < tdate.getTime()) throw { code: 401, expires: true, message: 'Echec d\'authentification, le jeton d\'authentification a expiré.' } - - // tdate.setTime(userdata.expiration); - - // res.set('Expires', tdate.toUTCString()); res.locals.user = user[0]; return next(); } catch (error) { @@ -46,27 +34,7 @@ const auth = { .status(error.code ?? 401) .json({ message: error.message, error: error.code ?? 401 }); } - }, - verify: (req, res) => { - const token = req.cookies.jwt; - - if (!token) { - return res.status(401).json({ message: "Echec d'authentification." }); - } - jwt.verify(token, process.env.PRIVATE, (err, decoded) => { - if (err) { - return res.status(401).json({ message: "Echec d'authentification." }); - } else { - const user = userModel.findByEmail(decoded.email); - - if (!user) { - return res.status(401).json({ message: "Echec d'authentification." }); - } - - return res.status(200).json({ message: "Authentification reussie." }); - } - }); - }, + } }; export default auth; diff --git a/server/mail/base.html b/server/mail/base.html new file mode 100644 index 0000000..0e599af --- /dev/null +++ b/server/mail/base.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/server/helpers/mailSender.js b/server/mail/mailSender.js similarity index 100% rename from server/helpers/mailSender.js rename to server/mail/mailSender.js diff --git a/server/mail/templateForgotPassword.mjs b/server/mail/templateForgotPassword.mjs new file mode 100644 index 0000000..31e5416 --- /dev/null +++ b/server/mail/templateForgotPassword.mjs @@ -0,0 +1,4 @@ +export default function templateForgotPassword (link) { + return `
`; +} \ No newline at end of file diff --git a/server/mail/templateOTP.mjs b/server/mail/templateOTP.mjs new file mode 100644 index 0000000..9f50266 --- /dev/null +++ b/server/mail/templateOTP.mjs @@ -0,0 +1,4 @@ +export default function templateOTP (otp) { + return `
`; +} \ No newline at end of file diff --git a/server/models/otp.model.js b/server/models/otp.model.js index 47dccac..384c5b8 100644 --- a/server/models/otp.model.js +++ b/server/models/otp.model.js @@ -1,5 +1,6 @@ import mongoose from "mongoose"; -import { mailSender } from "../helpers/mailSender.js"; +import { mailSender } from "../mail/mailSender.js"; +import templateOTP from "../mail/templateOTP.mjs"; const otpSchema = new mongoose.Schema({ email: { @@ -21,9 +22,8 @@ const sendVerificationEmail = async (email, otp) => { try { await mailSender( email, - "Verification Email", - `

Please confirm your OTP

-

Here is your OTP code: ${otp}

` + "Code de confirmation pour Flami 🔥", + templateOTP(otp) ); } catch (error) { throw error; diff --git a/server/models/user.model.js b/server/models/user.model.js index 5f4ef4b..169f533 100644 --- a/server/models/user.model.js +++ b/server/models/user.model.js @@ -26,12 +26,10 @@ const userSchema = new mongoose.Schema({ }, flami: { type: Number, - required: true, ref: 'Flami' }, badges: { type: Array, - required: true }, metadata: [{ favorite_sport: { diff --git a/server/request.rest b/server/request.rest index 1248d44..85032a4 100644 --- a/server/request.rest +++ b/server/request.rest @@ -1,39 +1,38 @@ PATCH http://localhost:3001/api/my/account -Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImFydGFwcC50aGVvQGdtYWlsLmNvbSIsImlhdCI6MTcwODM2Nzc1OCwiZXhwIjoxNzA5NTc3MzU4fQ.iN1ZMMADNGGy7HtUrR5ZE3GrU2nhD07LYnyU3AtxN_E +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2UuZ3ZyQGdtYWlsLmNvbSIsImlhdCI6MTcwODYzNzkzMSwiZXhwIjoxNzA5ODQ3NTMxfQ.vPoHeKkEF7Outp3-BgE3TrcDbEfPvkCfTsBFxGJ68oU Content-Type: application/json { "name": "Maxence", - "password": "mdptest" + "password": "0123" } ### GET http://localhost:3001/api/my/badges -Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImFydGFwcC50aGVvQGdtYWlsLmNvbSIsImlhdCI6MTcwODM2Nzc1OCwiZXhwIjoxNzA5NTc3MzU4fQ.iN1ZMMADNGGy7HtUrR5ZE3GrU2nhD07LYnyU3AtxN_E +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2UuZ3ZyQGdtYWlsLmNvbSIsImlhdCI6MTcwODYzNzkzMSwiZXhwIjoxNzA5ODQ3NTMxfQ.vPoHeKkEF7Outp3-BgE3TrcDbEfPvkCfTsBFxGJ68oU ### GET http://localhost:3001/api/my/profile -Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImFydGFwcC50aGVvQGdtYWlsLmNvbSIsImlhdCI6MTcwODM2Nzc1OCwiZXhwIjoxNzA5NTc3MzU4fQ.iN1ZMMADNGGy7HtUrR5ZE3GrU2nhD07LYnyU3AtxN_E +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2UuZ3ZyQGdtYWlsLmNvbSIsImlhdCI6MTcwODYzNzkzMSwiZXhwIjoxNzA5ODQ3NTMxfQ.vPoHeKkEF7Outp3-BgE3TrcDbEfPvkCfTsBFxGJ68oU + ### POST http://localhost:3001/api/auth/signup Content-Type: application/json { - "name": "Théo", - "email": "artapp.theo@gmail.com", - "password": "mdptest", - "age": 16, - "flami": 0, - "badges": [], + "name": "Maxence", + "email": "maxence.gvr@gmail.com", + "password": "1234", + "age": 20, "metadata": { "favorite_sport": "Basketball", "origin": "Internet", "intent": "Other" }, - "otp": "354993" + "otp": "570777" } ### @@ -42,9 +41,9 @@ POST http://localhost:3001/api/auth/signin Content-Type: application/json { - "email": "artapp.theo@gmail.com", - "password": "1234", - "otp": "925034" + "email": "maxence.gvr@gmail.com", + "password": "0123", + "otp": "286014" } ### @@ -53,7 +52,7 @@ POST http://localhost:3001/api/auth/send-otp Content-Type: application/json { - "email": "artapp.theo@gmail.com" + "email": "maxence.gvr@gmail.com" } ### @@ -62,12 +61,12 @@ POST http://localhost:3001/api/auth/forget-password Content-Type: application/json { - "email": "artapp.theo@gmail.com" + "email": "maxence.gvr@gmail.com" } #### -POST http://localhost:3001/api/auth/reset-password/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NWQzYzkyZjEzMTJhNDY3YzMzMTcyMTYiLCJpYXQiOjE3MDgzODQ2OTgsImV4cCI6MTcwODM4NTI5OH0.W-92lXMFsRU3LI4hWR8snENw2E8jaDgyzFl-2H9VXfY +POST http://localhost:3001/api/auth/reset-password/ Content-Type: application/json { diff --git a/server/routes/auth.routes.js b/server/routes/auth.routes.js index d4f30f8..84b17b0 100644 --- a/server/routes/auth.routes.js +++ b/server/routes/auth.routes.js @@ -7,9 +7,9 @@ const router = Router(); router.post("/signin", authController.signin); router.post("/signup", authController.signup); + router.post("/send-otp", otpController.setOTP); router.post("/forget-password", forgetPasswordController.forgetPassword); router.post("/reset-password/:token", forgetPasswordController.resetPassword); -// router.post("/verify", auth.verify); export default router; diff --git a/server/routes/user.routes.js b/server/routes/user.routes.js index a492bd1..36ca23c 100644 --- a/server/routes/user.routes.js +++ b/server/routes/user.routes.js @@ -5,7 +5,6 @@ const router = Router(); router.get("/profile", userController.getProfile); router.get("/badges", userController.getBadges); -// router.get("/account", userController.getAccount); router.patch("/account", userController.updateAccount); export default router; From b42cdc93d0be612a47c7e0b2c2209985e073a327 Mon Sep 17 00:00:00 2001 From: Akeko Date: Fri, 23 Feb 2024 13:55:47 +0100 Subject: [PATCH 023/108] refactor(auth): change name controller otp --- server/controllers/otp.controller.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/server/controllers/otp.controller.js b/server/controllers/otp.controller.js index 8c2022b..639bb83 100644 --- a/server/controllers/otp.controller.js +++ b/server/controllers/otp.controller.js @@ -1,7 +1,7 @@ import otpGenerator from "otp-generator"; import OTP from "../models/otp.model.js"; -const optController = { +const otpController = { setOTP: async (req, res) => { try { const { email } = req.body; @@ -14,18 +14,20 @@ const optController = { const result = await OTP.findOne({ otp: otp }); + // try catch email check while (result) { + console.log(result); otp = otpGenerator.generate(6, { upperCaseAlphabets: false, }); } + const otpPayload = { email, otp }; await OTP.create(otpPayload); res.status(200).json({ message: `OTP envoyé.`, }); - } catch (error) { console.log(error.message); return res.status(500).json({ error: error.message }); @@ -33,4 +35,4 @@ const optController = { }, }; -export default optController; +export default otpController; From 737545569c106385f7ae9b12f85db3b479357549 Mon Sep 17 00:00:00 2001 From: Maxence Date: Fri, 23 Feb 2024 15:51:44 +0100 Subject: [PATCH 024/108] feat: auth controls --- server/controllers/auth.controller.js | 10 +++++++++- server/controllers/forgetPassword.controller.js | 2 +- server/models/otp.model.js | 4 ++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 6a7034c..ce7959f 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -58,6 +58,14 @@ const authController = { signin: async (req, res) => { let userdata = req.body; + const user = await userModel.findByEmail(req.body.email); + + if (!user) { + return res + .status(404) + .json({ message: "Ce compte n'existe pas.", error: 404 }); + } + const otpResponse = await OTPModel.find({ email: userdata.email }) .sort({ createdAt: -1 }) .limit(1); @@ -99,4 +107,4 @@ const authController = { }, }; -export default authController; +export default authController; \ No newline at end of file diff --git a/server/controllers/forgetPassword.controller.js b/server/controllers/forgetPassword.controller.js index 25c79bc..6e0371b 100644 --- a/server/controllers/forgetPassword.controller.js +++ b/server/controllers/forgetPassword.controller.js @@ -25,7 +25,7 @@ const forgetPasswordController = { const info = await mailSender( user[0].email, - "Mot de passe oublié ? - Flami vient à votre aide ! 🔥", + "Mot de passe oublié ? - Flami vient à votre aide !", templateForgotPassword(`${res.domain}/reset-password/${token}`) ); diff --git a/server/models/otp.model.js b/server/models/otp.model.js index 384c5b8..7277dc3 100644 --- a/server/models/otp.model.js +++ b/server/models/otp.model.js @@ -22,7 +22,7 @@ const sendVerificationEmail = async (email, otp) => { try { await mailSender( email, - "Code de confirmation pour Flami 🔥", + "Code de confirmation pour Flami", templateOTP(otp) ); } catch (error) { @@ -36,4 +36,4 @@ otpSchema.pre("save", async function (next) { next(); }); -export default mongoose.model("OTP", otpSchema); +export default mongoose.model("OTP", otpSchema); \ No newline at end of file From 2cf6d0b0e2e228e9c63a52f07f1a6ec734bd6f72 Mon Sep 17 00:00:00 2001 From: Akeko Date: Sun, 25 Feb 2024 21:48:43 +0100 Subject: [PATCH 025/108] refactor(auth): change verify and send otp --- server/controllers/auth.controller.js | 37 ++++++++-------- server/controllers/otp.controller.js | 61 ++++++++++++++++++++------- server/routes/auth.routes.js | 2 +- 3 files changed, 64 insertions(+), 36 deletions(-) diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index ce7959f..01e9cc7 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -1,21 +1,20 @@ import bcrypt from "bcryptjs"; import auth from "../helpers/authMiddleware.js"; -import OTPModel from "../models/otp.model.js"; import userModel from "../models/user.model.js"; const authController = { signup: async (req, res) => { let userdata = req.body; - const otpResponse = await OTPModel.find({ email: userdata.email }) - .sort({ createdAt: -1 }) - .limit(1); + // const otpResponse = await OTPModel.find({ email: userdata.email }) + // .sort({ createdAt: -1 }) + // .limit(1); - if (otpResponse.length === 0 || userdata.otp !== otpResponse[0].otp) { - return res.status(400).json({ - message: "Le code de validation n'est pas correct.", - }); - } + // if (otpResponse.length === 0 || userdata.otp !== otpResponse[0].otp) { + // return res.status(400).json({ + // message: "Le code de validation n'est pas correct.", + // }); + // } userdata.password = bcrypt.hashSync( userdata.password, @@ -66,17 +65,15 @@ const authController = { .json({ message: "Ce compte n'existe pas.", error: 404 }); } - const otpResponse = await OTPModel.find({ email: userdata.email }) - .sort({ createdAt: -1 }) - .limit(1); - - console.log(otpResponse.length); + // const otpResponse = await OTPModel.find({ email: userdata.email }) + // .sort({ createdAt: -1 }) + // .limit(1); - if (otpResponse.length === 0 || userdata.otp !== otpResponse[0].otp) { - return res.status(400).json({ - message: "Le code de validation n'est pas correct.", - }); - } + // if (otpResponse.length === 0 || userdata.otp !== otpResponse[0].otp) { + // return res.status(400).json({ + // message: "Le code de validation n'est pas correct.", + // }); + // } try { let user = await userModel.findByEmail(userdata.email); @@ -107,4 +104,4 @@ const authController = { }, }; -export default authController; \ No newline at end of file +export default authController; diff --git a/server/controllers/otp.controller.js b/server/controllers/otp.controller.js index 639bb83..8ff6bbc 100644 --- a/server/controllers/otp.controller.js +++ b/server/controllers/otp.controller.js @@ -1,36 +1,67 @@ import otpGenerator from "otp-generator"; -import OTP from "../models/otp.model.js"; +import otpModel from "../models/otp.model.js"; +import userModel from "../models/user.model.js"; const otpController = { - setOTP: async (req, res) => { + sendOTP: async (req, res) => { try { const { email } = req.body; + const existingUser = await userModel.findOne({ email }); + console.log(existingUser); + if (!existingUser) { + return res.status(404).json({ message: "Ce compte n'existe pas." }); + } + + const existingOTP = await otpModel.findOne({ email }); + if (existingOTP) { + return res.status(400).json({ + message: + "Un OTP est déjà en cours d'utilisation. Veuillez attendre de recevoir votre code.", + }); + } + const otp = otpGenerator.generate(6, { upperCaseAlphabets: false, lowerCaseAlphabets: false, specialChars: false, }); - const result = await OTP.findOne({ otp: otp }); + const otpPayload = { email, otp }; + await otpModel.create(otpPayload); + + res.status(200).json({ message: "OTP envoyé avec succès." }); + } catch (error) { + console.error(error.message); + res.status(500).json({ error: error.message }); + } + }, + + verifyOTP: async (req, res) => { + try { + const { email, otp } = req.body; + + const otpRecord = await otpModel.findOne({ email, otp }); + if (!otpRecord) { + return res + .status(400) + .json({ message: "Le code de vérification est incorrect." }); + } - // try catch email check - while (result) { - console.log(result); - otp = otpGenerator.generate(6, { - upperCaseAlphabets: false, + const otpExpiration = otpRecord.createdAt.getTime() + 5 * 60 * 1000; + if (Date.now() > otpExpiration) { + return res.status(400).json({ + message: + "Le code de vérification a expiré. Veuillez en demander un nouveau.", }); } - const otpPayload = { email, otp }; - await OTP.create(otpPayload); + await otpRecord.remove(); - res.status(200).json({ - message: `OTP envoyé.`, - }); + res.status(200).json({ message: "Le code de vérification est valide." }); } catch (error) { - console.log(error.message); - return res.status(500).json({ error: error.message }); + console.error(error.message); + res.status(500).json({ error: error.message }); } }, }; diff --git a/server/routes/auth.routes.js b/server/routes/auth.routes.js index 84b17b0..2c89d0b 100644 --- a/server/routes/auth.routes.js +++ b/server/routes/auth.routes.js @@ -8,7 +8,7 @@ const router = Router(); router.post("/signin", authController.signin); router.post("/signup", authController.signup); -router.post("/send-otp", otpController.setOTP); +router.post("/send-otp", otpController.sendOTP); router.post("/forget-password", forgetPasswordController.forgetPassword); router.post("/reset-password/:token", forgetPasswordController.resetPassword); From b97b8d54c058ff87954f2ec665f73715016ec6c9 Mon Sep 17 00:00:00 2001 From: Akeko Date: Mon, 26 Feb 2024 23:29:13 +0100 Subject: [PATCH 026/108] feat(auth): start auth integration --- client/index.html | 6 +- client/package-lock.json | 30 +++++++ client/package.json | 2 + client/src/App.tsx | 37 ++++++-- client/src/components/auth/SigninForm.tsx | 101 +++++++++++++++++++++- client/src/components/ui/button.tsx | 32 +++++++ client/src/components/ui/index.ts | 2 + client/src/components/ui/link.tsx | 33 +++++++ client/src/main.tsx | 17 +--- client/src/pages/AuthLayout.tsx | 9 ++ client/src/pages/RootLayout.tsx | 11 +++ client/src/pages/WelcomePage.tsx | 5 -- client/src/pages/auth/SigninPage.tsx | 14 ++- client/src/pages/auth/WelcomePage.tsx | 34 ++++++++ client/tailwind.config.js | 9 ++ server/controllers/auth.controller.js | 2 +- 16 files changed, 313 insertions(+), 31 deletions(-) create mode 100644 client/src/components/ui/button.tsx create mode 100644 client/src/components/ui/index.ts create mode 100644 client/src/components/ui/link.tsx create mode 100644 client/src/pages/AuthLayout.tsx create mode 100644 client/src/pages/RootLayout.tsx delete mode 100644 client/src/pages/WelcomePage.tsx create mode 100644 client/src/pages/auth/WelcomePage.tsx diff --git a/client/index.html b/client/index.html index 42dd33b..36dfac8 100644 --- a/client/index.html +++ b/client/index.html @@ -3,10 +3,14 @@ + Flami - +
diff --git a/client/package-lock.json b/client/package-lock.json index e762a6a..79af3ee 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -8,11 +8,13 @@ "name": "client", "version": "0.0.0", "dependencies": { + "class-variance-authority": "^0.7.0", "formik": "^2.4.5", "framer-motion": "^11.0.3", "react": "^18.2.0", "react-cookie": "^7.0.2", "react-dom": "^18.2.0", + "react-line-awesome": "^1.4.1", "react-router": "^6.21.3", "react-router-dom": "^6.22.1", "yup": "^1.3.3" @@ -2265,6 +2267,25 @@ "node": ">= 6" } }, + "node_modules/class-variance-authority": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", + "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "dependencies": { + "clsx": "2.0.0" + }, + "funding": { + "url": "https://joebell.co.uk" + } + }, + "node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -4928,6 +4949,15 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "node_modules/react-line-awesome": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/react-line-awesome/-/react-line-awesome-1.4.1.tgz", + "integrity": "sha512-Ux8WDaoK+El5aNlGIzgw9ioWcVb6v3frcTHHMfUzb1exbYy9SW6md45+87UDP3jDQMFMK2VO/kyyCbjqr6cHxQ==", + "peerDependencies": { + "react": ">=16.8.6", + "react-dom": ">=16.8.6" + } + }, "node_modules/react-refresh": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", diff --git a/client/package.json b/client/package.json index 09dbee1..bb216d4 100644 --- a/client/package.json +++ b/client/package.json @@ -11,11 +11,13 @@ "test": "vitest" }, "dependencies": { + "class-variance-authority": "^0.7.0", "formik": "^2.4.5", "framer-motion": "^11.0.3", "react": "^18.2.0", "react-cookie": "^7.0.2", "react-dom": "^18.2.0", + "react-line-awesome": "^1.4.1", "react-router": "^6.21.3", "react-router-dom": "^6.22.1", "yup": "^1.3.3" diff --git a/client/src/App.tsx b/client/src/App.tsx index ab6c855..7f9c359 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,13 +1,36 @@ -import { Outlet } from "react-router"; -import Navigation from "./components/navigation/Navigation"; +import { Route, Routes } from "react-router"; +import AuthLayout from "./pages/AuthLayout"; +import RootLayout from "./pages/RootLayout"; +import ResetPasswordPage from "./pages/auth/ResetPasswordPage"; +import SigninPage from "./pages/auth/SigninPage"; +import SignupPage from "./pages/auth/SignupPage"; +import WelcomePage from "./pages/auth/WelcomePage"; +import FlamiPage from "./pages/flami/FlamiPage"; +import MapPage from "./pages/map/MapPage"; +import ProfilePage from "./pages/profile/ProfilePage"; const App = () => { return ( -
-
- -
- +
+ + {/* public routes */} + }> + } /> + } /> + } /> + } /> + + + {/* private routes */} + }> + } /> + } /> + } /> + + + {/* catch all */} + Not Found} /> +
); }; diff --git a/client/src/components/auth/SigninForm.tsx b/client/src/components/auth/SigninForm.tsx index 387848b..bafc4e1 100644 --- a/client/src/components/auth/SigninForm.tsx +++ b/client/src/components/auth/SigninForm.tsx @@ -1,5 +1,104 @@ +import { Field, Form, Formik } from "formik"; +import { useState } from "react"; +import { EyeIcon, EyeSlashIcon } from "react-line-awesome"; +import { Link } from "react-router-dom"; +import * as Yup from "yup"; +import { Button, LinkComponent } from "../ui"; + const SigninForm = () => { - return
SigninForm
; + const [showPassword, setShowPassword] = useState(false); + + return ( + { + console.log(values); + }} + > + {({ errors, touched }) => ( +
+
+
+ + {errors.email && touched.email && ( +

+ {errors.email} +

+ )} +
+
+
+ + {!showPassword ? ( + setShowPassword(true)} + className="absolute right-4 top-1/3 -translate-y-1/4 inline-block text-2xl text-alabaster-400" + component="span" + /> + ) : ( + setShowPassword(false)} + className="absolute right-4 top-1/3 -translate-y-1/4 inline-block text-2xl text-alabaster-400" + component="span" + /> + )} +
+ {errors.password && touched.password && ( +

+ {errors.password} +

+ )} +
+
+
+ + + Se créer un compte + +

+ Tu as oublié ton mot de passe ?{" "} + + Réinitialise le ici ! + +

+
+
+ )} +
+ ); }; export default SigninForm; diff --git a/client/src/components/ui/button.tsx b/client/src/components/ui/button.tsx new file mode 100644 index 0000000..3d9f69b --- /dev/null +++ b/client/src/components/ui/button.tsx @@ -0,0 +1,32 @@ +import { cva, VariantProps } from "class-variance-authority"; +import React from "react"; + +const baseButton = + "text-center w-full px-8 py-4 font-roboto font-bold uppercase w-full"; + +const buttonVariants = { + primary: + "bg-tree-poppy-500 text-alabaster-950 rounded-xl shadow-primary active:shadow-none active:translate-y-1 hover:brightness-90", + secondary: + "bg-alabaster-950 text-alabaster-50 rounded-xl shadow-secondary border-3 border-alabaster-400 active:shadow-none active:translate-y-1 hover:brightness-90", + tertiary: "text-mandy-500 hover:text-mandy-600", +}; + +const button = cva(baseButton, { + variants: { + variant: buttonVariants, + }, +}); + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps {} + +export const Button: React.FC = ({ + className, + variant, + type, + ...props +}) => ( + +

+ Tu as deja un compte ?{" "} + + Connecte-toi ici ! + +

+ + + ); +}; + +export default WelcomePage; diff --git a/client/tailwind.config.js b/client/tailwind.config.js index 26a690c..f4c95cc 100644 --- a/client/tailwind.config.js +++ b/client/tailwind.config.js @@ -74,6 +74,15 @@ export default { fontFamily: { roboto: ["Roboto", "sans-serif"], }, + + boxShadow: { + primary: "0px 6px 0px #ffbd1b", + secondary: "0px 6px 0px #989898", + none: "none", + }, + borderWidth: { + 3: "3px", + }, }, plugins: [], }; diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 01e9cc7..99acacd 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -31,7 +31,7 @@ const authController = { .status(201) .cookie("jwt", token, { httpOnly: false }) .json({ - message: `Inscription finalisé. Bienvenue ${new_user.name} !`, + message: `Inscription finalisée. Bienvenue ${new_user.name} !`, }); } catch (error) { if (error.keyValue && error.keyValue.email) { From 62eea81e4f3f03e84af824539f9fc8ad867f5f9f Mon Sep 17 00:00:00 2001 From: Maxence Date: Tue, 27 Feb 2024 17:35:08 +0100 Subject: [PATCH 027/108] Update auth.controller.js --- server/controllers/auth.controller.js | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 99acacd..286cb83 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -16,6 +16,17 @@ const authController = { // }); // } + if(!userdata.email || !String(userdata.email).toLowerCase().match( + /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + )) { + return res + .status(401) + .json({ + message: `E-mail invalide.`, + error: 401 + }); + } + userdata.password = bcrypt.hashSync( userdata.password, bcrypt.genSaltSync(11) @@ -57,14 +68,6 @@ const authController = { signin: async (req, res) => { let userdata = req.body; - const user = await userModel.findByEmail(req.body.email); - - if (!user) { - return res - .status(404) - .json({ message: "Ce compte n'existe pas.", error: 404 }); - } - // const otpResponse = await OTPModel.find({ email: userdata.email }) // .sort({ createdAt: -1 }) // .limit(1); @@ -81,12 +84,12 @@ const authController = { if (!user[0]) { return res .status(404) - .json({ message: "Ce compte n'existe pas.", error: 404 }); + .json({ message: "E-mail ou mot de passe incorrect.", error: 404 }); } user = user[0]; - const isValid = bcrypt.compareSync(userdata.password, user.password); + if (isValid) { let token = auth.encode({ email: user.email }); return res @@ -96,7 +99,7 @@ const authController = { } else { return res .status(401) - .json({ message: "Mot de passe incorrect.", error: 401 }); + .json({ message: "E-mail ou mot de passe incorrect.", error: 401 }); } } catch (error) { return res.status(404).json({ message: error.message, error: 404 }); From ac7e3d78006dc966749117418a5ec86875514ee5 Mon Sep 17 00:00:00 2001 From: Maxence Date: Tue, 27 Feb 2024 17:39:00 +0100 Subject: [PATCH 028/108] Update auth.controller.js --- server/controllers/auth.controller.js | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 286cb83..ce82fc4 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -40,7 +40,7 @@ const authController = { return res .status(201) - .cookie("jwt", token, { httpOnly: false }) + // .cookie("jwt", token, { httpOnly: false }) .json({ message: `Inscription finalisée. Bienvenue ${new_user.name} !`, }); @@ -68,16 +68,6 @@ const authController = { signin: async (req, res) => { let userdata = req.body; - // const otpResponse = await OTPModel.find({ email: userdata.email }) - // .sort({ createdAt: -1 }) - // .limit(1); - - // if (otpResponse.length === 0 || userdata.otp !== otpResponse[0].otp) { - // return res.status(400).json({ - // message: "Le code de validation n'est pas correct.", - // }); - // } - try { let user = await userModel.findByEmail(userdata.email); @@ -94,7 +84,7 @@ const authController = { let token = auth.encode({ email: user.email }); return res .status(200) - .cookie("jwt", token, { httpOnly: false }) + // .cookie("jwt", token, { httpOnly: false }) .json({ message: "Authentification réussie." }); } else { return res From 530dcfc0418f871a5cf2e7118980fd8a2a064457 Mon Sep 17 00:00:00 2001 From: Akeko Date: Wed, 28 Feb 2024 19:54:25 +0100 Subject: [PATCH 029/108] feat(auth): end multi step form --- client/src/App.tsx | 7 +- .../components/auth/ForgetPasswordForm.tsx | 56 ++ .../src/components/auth/ResetPasswordForm.tsx | 121 ++++ client/src/components/auth/SigninForm.tsx | 21 +- client/src/components/auth/SignupForm.tsx | 547 +++++++++++++++++- client/src/components/ui/button.tsx | 14 +- client/src/pages/auth/ForgetPasswordPage.tsx | 19 + client/src/pages/auth/ResetPasswordPage.tsx | 13 +- client/src/pages/auth/SignupPage.tsx | 4 +- client/tailwind.config.js | 6 + 10 files changed, 791 insertions(+), 17 deletions(-) create mode 100644 client/src/components/auth/ForgetPasswordForm.tsx create mode 100644 client/src/components/auth/ResetPasswordForm.tsx create mode 100644 client/src/pages/auth/ForgetPasswordPage.tsx diff --git a/client/src/App.tsx b/client/src/App.tsx index 7f9c359..1b399be 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,6 +1,7 @@ import { Route, Routes } from "react-router"; import AuthLayout from "./pages/AuthLayout"; import RootLayout from "./pages/RootLayout"; +import ForgetPasswordPage from "./pages/auth/ForgetPasswordPage"; import ResetPasswordPage from "./pages/auth/ResetPasswordPage"; import SigninPage from "./pages/auth/SigninPage"; import SignupPage from "./pages/auth/SignupPage"; @@ -18,7 +19,11 @@ const App = () => { } /> } /> } /> - } /> + } + /> + } /> {/* private routes */} diff --git a/client/src/components/auth/ForgetPasswordForm.tsx b/client/src/components/auth/ForgetPasswordForm.tsx new file mode 100644 index 0000000..46ad858 --- /dev/null +++ b/client/src/components/auth/ForgetPasswordForm.tsx @@ -0,0 +1,56 @@ +import { Field, Form, Formik, FormikHelpers } from "formik"; +import * as Yup from "yup"; +import { Button } from "../ui"; + +interface FormValues { + email: string; +} + +const ForgetPasswordForm = () => { + const handleSubmit = ( + values: FormValues, + actions: FormikHelpers + ) => { + console.log(values); + actions.setSubmitting(false); + }; + + return ( + + {({ errors, touched }) => ( +
+
+ + {errors.email && touched.email && ( +

{errors.email}

+ )} +
+ + +
+ )} +
+ ); +}; + +export default ForgetPasswordForm; diff --git a/client/src/components/auth/ResetPasswordForm.tsx b/client/src/components/auth/ResetPasswordForm.tsx new file mode 100644 index 0000000..569c971 --- /dev/null +++ b/client/src/components/auth/ResetPasswordForm.tsx @@ -0,0 +1,121 @@ +import { Field, Form, Formik, FormikHelpers } from "formik"; +import { useState } from "react"; +import { EyeIcon, EyeSlashIcon } from "react-line-awesome"; +import * as Yup from "yup"; +import { Button } from "../ui"; + +interface FormValues { + password: string; + confirmPassword: string; +} + +const ResetPasswordForm = () => { + const [showPassword, setShowPassword] = useState(false); + const [showConfirmPassword, setShowConfirmPassword] = + useState(false); + + const handleSubmit = ( + values: FormValues, + actions: FormikHelpers + ) => { + console.log(values); + actions.setSubmitting(false); + }; + + return ( + + {({ errors, touched }) => ( +
+
+
+
+ + {!showPassword ? ( + setShowPassword(true)} + className="absolute right-4 top-1/2 -translate-y-1/2 inline-block text-2xl text-alabaster-400 cursor-pointer" + component="span" + /> + ) : ( + setShowPassword(false)} + className="absolute right-4 top-1/2 -translate-y-1/2 inline-block text-2xl text-alabaster-400 cursor-pointer" + component="span" + /> + )} +
+ {errors.password && touched.password && ( +

+ {errors.password} +

+ )} +
+
+
+ + {!showConfirmPassword ? ( + setShowConfirmPassword(true)} + className="absolute right-4 top-1/2 -translate-y-1/2 inline-block text-2xl text-alabaster-400 cursor-pointer" + component="span" + /> + ) : ( + setShowConfirmPassword(false)} + className="absolute right-4 top-1/2 -translate-y-1/2 inline-block text-2xl text-alabaster-400 cursor-pointer" + component="span" + /> + )} +
+ {errors.confirmPassword && touched.confirmPassword && ( +

+ {errors.confirmPassword} +

+ )} +
+
+ +
+ )} +
+ ); +}; + +export default ResetPasswordForm; diff --git a/client/src/components/auth/SigninForm.tsx b/client/src/components/auth/SigninForm.tsx index bafc4e1..e5978df 100644 --- a/client/src/components/auth/SigninForm.tsx +++ b/client/src/components/auth/SigninForm.tsx @@ -5,6 +5,11 @@ import { Link } from "react-router-dom"; import * as Yup from "yup"; import { Button, LinkComponent } from "../ui"; +interface FormValues { + email: string; + password: string; +} + const SigninForm = () => { const [showPassword, setShowPassword] = useState(false); @@ -21,19 +26,19 @@ const SigninForm = () => { .required("Le mot de passe est obligatoire.") .trim(), })} - onSubmit={(values) => { + onSubmit={(values: FormValues) => { console.log(values); }} > {({ errors, touched }) => (
-
+
{

)}
-
+
{ {!showPassword ? ( setShowPassword(true)} - className="absolute right-4 top-1/3 -translate-y-1/4 inline-block text-2xl text-alabaster-400" + className="absolute right-4 top-2/4 -translate-y-2/4 inline-block text-2xl text-alabaster-400 cursor-pointer" component="span" /> ) : ( setShowPassword(false)} - className="absolute right-4 top-1/3 -translate-y-1/4 inline-block text-2xl text-alabaster-400" + className="absolute right-4 top-2/4 -translate-y-2/4 inline-block text-2xl text-alabaster-400 cursor-pointer" component="span" /> )} @@ -88,7 +93,7 @@ const SigninForm = () => {

Tu as oublié ton mot de passe ?{" "} Réinitialise le ici ! diff --git a/client/src/components/auth/SignupForm.tsx b/client/src/components/auth/SignupForm.tsx index 1beb42a..e686857 100644 --- a/client/src/components/auth/SignupForm.tsx +++ b/client/src/components/auth/SignupForm.tsx @@ -1,5 +1,548 @@ -const SignupForm = () => { - return

SignupForm
; +import { Field, Form, Formik } from "formik"; +import { useEffect, useState } from "react"; +import { ArrowLeftIcon, EyeIcon, EyeSlashIcon } from "react-line-awesome"; +import { useNavigate } from "react-router"; +import * as Yup from "yup"; +import { Button } from "../ui"; + +interface User { + email: string; + name: string; + password: string; + age: number; + metadata: { + favorite_sport: string; + origin: string; + intent: string; + }; +} + +interface FormValues extends User { + confirmPassword: string; +} + +const choices = { + fav_sport: [ + "Sport de combat", + "Sport de course", + "Sport aquatique", + "Sport collectif", + "Sport de plage", + "Sport de force", + ], + origin: ["Internet", "Famille/amis", "Autre"], + intent: ["Participer", "Me divertir", "Apprendre", "Autre"], }; +const lastStepValidationSchema = Yup.object().shape({ + name: Yup.string().required("Le nom est obligatoire.").trim(), + email: Yup.string() + .email("Le format de l'e-mail est incorrect.") + .required("L'e-mail est obligatoire.") + .trim(), + password: Yup.string() + .required("Le mot de passe est obligatoire.") + .min(8, "Le mot de passe doit contenir 8 caractères minimum.") + .matches( + /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/, + "Le mot de passe doit contenir au moins une lettre majuscule, une lettre minuscule, un chiffre et un caractère special." + ) + .trim(), + confirmPassword: Yup.string() + .oneOf([Yup.ref("password")], "Le mot de passe ne correspond pas.") + .required("La confirmation du mot de passe est obligatoire.") + .trim(), + age: Yup.number() + .moreThan(12, "L'âge requis pour s'inscrire est 13 ans.") + .required("L'âge est obligatoire.") + .truncate(), +}); + +const StepOne = ({ + nextStep, + data, +}: { + nextStep: (newData: User) => void; + data: User; +}) => { + const [clickedIndex, setClickedIndex] = useState(-1); + + const navigate = useNavigate(); + + const handleChoiceClick = (index: number) => { + setClickedIndex(index); + }; + + const handlePrevPage = () => { + navigate("/"); + }; + + const handleSubmit = () => { + if (clickedIndex !== null) { + const selectedSport = choices.fav_sport[clickedIndex]; + console.log(selectedSport); + nextStep({ + ...data, + metadata: { ...data.metadata, favorite_sport: selectedSport }, + }); + } + }; + + useEffect(() => { + if (data.metadata.favorite_sport) { + setClickedIndex(choices.fav_sport.indexOf(data.metadata.favorite_sport)); + } + }, [data.metadata.favorite_sport]); + + return ( + + +
+ +
+
+
+
+
+
+

+ Quel est ton sport préféré ? +

+
+
    + {choices.fav_sport.map((choice, index) => ( +
  • +
    handleChoiceClick(index)} + className={`flex gap-2 items-center flex-col p-6 border-3 rounded-xl border-alabaster-400 cursor-pointer hover:brightness-90 active:translate-y-1 active:shadow-tree-poppy-500-press ${ + index === clickedIndex ? "border-tree-poppy-500" : "" + } ${ + index === clickedIndex + ? "shadow-tree-poppy-500" + : "shadow-secondary" + }`} + > + {choice} +
    +
  • + ))} +
+ +
+ +
+ ); +}; + +const StepTwo = ({ + nextStep, + prevStep, + data, +}: { + nextStep: (newData: User) => void; + prevStep: (newData: User) => void; + data: User; +}) => { + const [clickedIndex, setClickedIndex] = useState(-1); + + const handleChoiceClick = (index: number) => { + setClickedIndex(index); + }; + + const handleSubmit = () => { + if (clickedIndex !== null) { + const selectedOrigin = choices.origin[clickedIndex]; + console.log(selectedOrigin); + nextStep({ + ...data, + metadata: { ...data.metadata, origin: selectedOrigin }, + }); + } + }; + + useEffect(() => { + if (data.metadata.origin) { + setClickedIndex(choices.origin.indexOf(data.metadata.origin)); + } + }, [data.metadata.origin]); + + return ( + +
+
+ prevStep(data)} + /> +
+
+
+
+
+
+

+ Quel est ton sport préféré ? +

+
+
    + {choices.origin.map((choice, index) => ( +
  • +
    handleChoiceClick(index)} + className={`flex gap-2 items-center flex-col p-6 border-3 rounded-xl border-alabaster-400 cursor-pointer hover:brightness-90 active:translate-y-1 active:shadow-tree-poppy-500-press font-bold uppercase ${ + index === clickedIndex ? "border-tree-poppy-500" : "" + } ${ + index === clickedIndex + ? "shadow-tree-poppy-500" + : "shadow-secondary" + }`} + > + {choice} +
    +
  • + ))} +
+ +
+
+
+ ); +}; + +const StepThree = ({ + nextStep, + prevStep, + data, +}: { + nextStep: (newData: User, final?: boolean) => void; + prevStep: (newData: User) => void; + data: User; +}) => { + const [clickedIndex, setClickedIndex] = useState(-1); + + const handleChoiceClick = (index: number) => { + setClickedIndex(index); + }; + + const handleSubmit = () => { + if (clickedIndex !== null) { + const selectedIntent = choices.intent[clickedIndex]; + console.log(selectedIntent); + nextStep({ + ...data, + metadata: { ...data.metadata, intent: selectedIntent }, + }); + } + }; + + useEffect(() => { + if (data.metadata.intent) { + setClickedIndex(choices.intent.indexOf(data.metadata.intent)); + } + }, [data.metadata.intent]); + + return ( + +
+
+ prevStep(data)} + /> +
+
+
+
+
+
+

+ Que veux-tu faire sur l'application ? +

+
+
    + {choices.intent.map((choice, index) => ( +
  • +
    handleChoiceClick(index)} + className={`flex gap-2 items-center flex-col p-6 border-3 rounded-xl border-alabaster-400 cursor-pointer hover:brightness-90 active:translate-y-1 active:shadow-tree-poppy-500-press font-bold uppercase ${ + index === clickedIndex ? "border-tree-poppy-500" : "" + } ${ + index === clickedIndex + ? "shadow-tree-poppy-500" + : "shadow-secondary" + }`} + > + {choice} +
    +
  • + ))} +
+ +
+
+
+ ); +}; + +const StepFour = ({ + nextStep, + prevStep, + data, +}: { + nextStep: (newData: User, final?: boolean) => void; + prevStep: (newData: User) => void; + data: User; +}) => { + const [showPassword, setShowPassword] = useState(false); + const [showConfirmPassword, setShowConfirmPassword] = + useState(false); + + const handleSubmit = (values: FormValues) => { + const { confirmPassword, ...userData } = values; + + nextStep(userData, true); + }; + + return ( + + {({ errors, touched }) => ( +
+
+ prevStep(data)} + /> +
+
+
+
+
+
+

+ Finalise ton inscription pour commencer à utiliser l'application ! +

+
+
+
+ + {errors.name && touched.name && ( +

+ {errors.name} +

+ )} +
+
+ + {errors.email && touched.email && ( +

+ {errors.email} +

+ )} +
+
+ + {errors.age && touched.age && ( +

+ {errors.age} +

+ )} +
+
+
+ + {!showPassword ? ( + setShowPassword(true)} + className="absolute right-4 top-1/3 -translate-y-1/4 inline-block text-2xl text-alabaster-400 cursor-pointer" + component="span" + /> + ) : ( + setShowPassword(false)} + className="absolute right-4 top-1/3 -translate-y-1/4 inline-block text-2xl text-alabaster-400 cursor-pointer" + component="span" + /> + )} +
+ {errors.password && touched.password && ( +

+ {errors.password} +

+ )} +
+
+
+ + {!showConfirmPassword ? ( + setShowConfirmPassword(true)} + className="absolute right-4 top-2/4 -translate-y-2/4 inline-block text-2xl text-alabaster-400 cursor-pointer" + component="span" + /> + ) : ( + setShowConfirmPassword(false)} + className="absolute right-4 top-2/4 -translate-y-2/4 inline-block text-2xl text-alabaster-400 cursor-pointer" + component="span" + /> + )} +
+ {errors.confirmPassword && touched.confirmPassword && ( +

+ {errors.confirmPassword} +

+ )} +
+
+
+ +
+
+
+ )} +
+ ); +}; + +const SignupForm = () => { + const [data, setData] = useState({ + email: "", + name: "", + password: "", + age: 0, + metadata: { + favorite_sport: "", + origin: "", + intent: "", + }, + }); + + const [currentStep, setCurrentStep] = useState(0); + + const sendRequest = (formData: User) => { + console.log("Form Submitted", formData); + }; + + const handleNextStep = (newData: User, final = false) => { + setData((prev) => ({ ...prev, ...newData })); + + if (final) { + sendRequest(newData); + } + + setCurrentStep((prev) => prev + 1); + }; + + const handlePrevStep = (newData: User) => { + setData((prev) => ({ ...prev, ...newData })); + setCurrentStep((prev) => prev - 1); + }; + + const steps = [ + , + , + , + , + ]; + + console.log(data); + + return steps[currentStep]; +}; export default SignupForm; diff --git a/client/src/components/ui/button.tsx b/client/src/components/ui/button.tsx index 3d9f69b..4a5352f 100644 --- a/client/src/components/ui/button.tsx +++ b/client/src/components/ui/button.tsx @@ -2,13 +2,13 @@ import { cva, VariantProps } from "class-variance-authority"; import React from "react"; const baseButton = - "text-center w-full px-8 py-4 font-roboto font-bold uppercase w-full"; + "text-center w-full px-8 py-4 font-roboto font-bold uppercase w-full cursor-pointer"; const buttonVariants = { primary: - "bg-tree-poppy-500 text-alabaster-950 rounded-xl shadow-primary active:shadow-none active:translate-y-1 hover:brightness-90", + "bg-tree-poppy-500 text-alabaster-950 rounded-xl shadow-primary active:shadow-none active:translate-y-1 hover:brightness-90 disabled:cursor-not-allowed disabled:bg-alabaster-600 disabled:text-alabaster-300 disabled:shadow-none disabled:hover:brightness-100 disabled:active:translate-y-0", secondary: - "bg-alabaster-950 text-alabaster-50 rounded-xl shadow-secondary border-3 border-alabaster-400 active:shadow-none active:translate-y-1 hover:brightness-90", + "bg-alabaster-950 text-alabaster-50 rounded-xl shadow-secondary border-3 border-alabaster-400 active:shadow-none active:translate-y-1 hover:brightness-90 disabled:cursor-not-allowed disabled:bg-alabaster-600 disabled:text-alabaster-300 disabled:shadow-none disabled:hover:brightness-100 disabled:active:translate-y-0", tertiary: "text-mandy-500 hover:text-mandy-600", }; @@ -26,7 +26,13 @@ export const Button: React.FC = ({ className, variant, type, + disabled, ...props }) => ( - -
- - - ); -}; - -const StepTwo = ({ - nextStep, - prevStep, - data, -}: { - nextStep: (newData: User) => void; - prevStep: (newData: User) => void; - data: User; -}) => { - const [clickedIndex, setClickedIndex] = useState(-1); - - const handleChoiceClick = (index: number) => { - setClickedIndex(index); - }; - - const handleSubmit = () => { - if (clickedIndex !== null) { - const selectedOrigin = choices.origin[clickedIndex]; - console.log(selectedOrigin); - nextStep({ - ...data, - metadata: { ...data.metadata, origin: selectedOrigin }, - }); - } - }; - - useEffect(() => { - if (data.metadata.origin) { - setClickedIndex(choices.origin.indexOf(data.metadata.origin)); - } - }, [data.metadata.origin]); - - return ( - -
-
- prevStep(data)} - /> -
-
-
-
-
-
-

- Quel est ton sport préféré ? -

-
-
    - {choices.origin.map((choice, index) => ( -
  • -
    handleChoiceClick(index)} - className={`flex gap-2 items-center flex-col p-6 border-3 rounded-xl border-alabaster-400 cursor-pointer hover:brightness-90 active:translate-y-1 active:shadow-tree-poppy-500-press font-bold uppercase ${ - index === clickedIndex ? "border-tree-poppy-500" : "" - } ${ - index === clickedIndex - ? "shadow-tree-poppy-500" - : "shadow-secondary" - }`} - > - {choice} -
    -
  • - ))} -
- -
-
-
- ); -}; - -const StepThree = ({ - nextStep, - prevStep, - data, -}: { - nextStep: (newData: User, final?: boolean) => void; - prevStep: (newData: User) => void; - data: User; -}) => { - const [clickedIndex, setClickedIndex] = useState(-1); - - const handleChoiceClick = (index: number) => { - setClickedIndex(index); - }; - - const handleSubmit = () => { - if (clickedIndex !== null) { - const selectedIntent = choices.intent[clickedIndex]; - console.log(selectedIntent); - nextStep({ - ...data, - metadata: { ...data.metadata, intent: selectedIntent }, - }); - } - }; - - useEffect(() => { - if (data.metadata.intent) { - setClickedIndex(choices.intent.indexOf(data.metadata.intent)); - } - }, [data.metadata.intent]); - - return ( - -
-
- prevStep(data)} - /> -
-
-
-
-
-
-

- Que veux-tu faire sur l'application ? -

-
-
    - {choices.intent.map((choice, index) => ( -
  • -
    handleChoiceClick(index)} - className={`flex gap-2 items-center flex-col p-6 border-3 rounded-xl border-alabaster-400 cursor-pointer hover:brightness-90 active:translate-y-1 active:shadow-tree-poppy-500-press font-bold uppercase ${ - index === clickedIndex ? "border-tree-poppy-500" : "" - } ${ - index === clickedIndex - ? "shadow-tree-poppy-500" - : "shadow-secondary" - }`} - > - {choice} -
    -
  • - ))} -
- -
-
-
- ); -}; - -const StepFour = ({ - nextStep, - prevStep, - data, -}: { - nextStep: (newData: User, final?: boolean) => void; - prevStep: (newData: User) => void; - data: User; -}) => { - const [showPassword, setShowPassword] = useState(false); - const [showConfirmPassword, setShowConfirmPassword] = - useState(false); - - const handleSubmit = (values: FormValues) => { - const { confirmPassword, ...userData } = values; - - nextStep(userData, true); - }; - - return ( - - {({ errors, touched }) => ( -
-
- prevStep(data)} - /> -
-
-
-
-
-
-

- Finalise ton inscription pour commencer à utiliser l'application ! -

-
-
-
- - {errors.name && touched.name && ( -

- {errors.name} -

- )} -
-
- - {errors.email && touched.email && ( -

- {errors.email} -

- )} -
-
- - {errors.age && touched.age && ( -

- {errors.age} -

- )} -
-
-
- - {!showPassword ? ( - setShowPassword(true)} - className="absolute right-4 top-1/3 -translate-y-1/4 inline-block text-2xl text-alabaster-400 cursor-pointer" - component="span" - /> - ) : ( - setShowPassword(false)} - className="absolute right-4 top-1/3 -translate-y-1/4 inline-block text-2xl text-alabaster-400 cursor-pointer" - component="span" - /> - )} -
- {errors.password && touched.password && ( -

- {errors.password} -

- )} -
-
-
- - {!showConfirmPassword ? ( - setShowConfirmPassword(true)} - className="absolute right-4 top-2/4 -translate-y-2/4 inline-block text-2xl text-alabaster-400 cursor-pointer" - component="span" - /> - ) : ( - setShowConfirmPassword(false)} - className="absolute right-4 top-2/4 -translate-y-2/4 inline-block text-2xl text-alabaster-400 cursor-pointer" - component="span" - /> - )} -
- {errors.confirmPassword && touched.confirmPassword && ( -

- {errors.confirmPassword} -

- )} -
-
-
- -
-
-
- )} -
- ); -}; - -const SignupForm = () => { - const [data, setData] = useState({ - email: "", - name: "", - password: "", - age: 0, - metadata: { - favorite_sport: "", - origin: "", - intent: "", - }, - }); - - const [currentStep, setCurrentStep] = useState(0); - - const sendRequest = (formData: User) => { - console.log("Form Submitted", formData); - }; - - const handleNextStep = (newData: User, final = false) => { - setData((prev) => ({ ...prev, ...newData })); - - if (final) { - sendRequest(newData); - } - - setCurrentStep((prev) => prev + 1); - }; - - const handlePrevStep = (newData: User) => { - setData((prev) => ({ ...prev, ...newData })); - setCurrentStep((prev) => prev - 1); - }; - - const steps = [ - , - , - , - , - ]; - - console.log(data); - - return steps[currentStep]; -}; -export default SignupForm; diff --git a/client/src/components/auth/otp/OtpForm.tsx b/client/src/components/auth/otp/OtpForm.tsx new file mode 100644 index 0000000..f8af81c --- /dev/null +++ b/client/src/components/auth/otp/OtpForm.tsx @@ -0,0 +1,56 @@ +import { useFormik } from "formik"; +import { useState } from "react"; +import { Button } from "../../ui"; +import OtpInput from "./OtpInput"; + +const OtpForm = () => { + const formik = useFormik({ + initialValues: { + otp: "", + }, + onSubmit: (values) => { + console.log(values); + }, + validate: (values) => { + const errors: Partial = {}; + + if (values.otp.length !== 6) { + errors.otp = "Le code de sécurité doit contenir 6 chiffres"; + } + if (!values.otp) { + errors.otp = "Le code de sécurité est obligatoire"; + } + + return errors; + }, + }); + + const [otp, setOtp] = useState(""); + + const onChange = (value: string) => { + formik.setValues({ otp: value }); + setOtp(value); + }; + + console.log(formik.errors); + return ( +
+
+
+ + + {formik.errors.otp && ( +
+ {formik.errors.otp} +
+ )} +
+ +
+
+ ); +}; + +export default OtpForm; diff --git a/client/src/components/auth/otp/OtpInput.tsx b/client/src/components/auth/otp/OtpInput.tsx new file mode 100644 index 0000000..ae5d20b --- /dev/null +++ b/client/src/components/auth/otp/OtpInput.tsx @@ -0,0 +1,130 @@ +import { useMemo } from "react"; +import { RE_DIGIT } from "../../../utils/constants"; + +interface OtpInputProps { + value: string; + valueLength: number; + onChange: (value: string) => void; +} + +const OtpInput = ({ value, valueLength, onChange }: OtpInputProps) => { + const valueItems = useMemo(() => { + const valueArray = value.split(""); + const items: string[] = []; + + for (let i = 0; i < valueLength; i++) { + const char = valueArray[i]; + + if (RE_DIGIT.test(char)) { + items.push(char); + } else { + items.push(""); + } + } + return items; + }, [value, valueLength]); + + const handleChange = ( + event: React.ChangeEvent, + index: number + ) => { + const target = event.target; + let targetValue = target.value.trim(); + const isTargetValueDigit = RE_DIGIT.test(targetValue); + + console.log(targetValue); + + if (!isTargetValueDigit && targetValue !== "") { + return; + } + + targetValue = isTargetValueDigit ? targetValue : " "; + + const targetValueLength = targetValue.length; + + if (targetValueLength === 1) { + const newValue = + value.substring(0, index) + targetValue + value.substring(index + 1); + + onChange(newValue.replace(/\s/g, "")); + + if (!isTargetValueDigit) { + return; + } + + handleFocusNext(target); + } else if (targetValueLength === valueLength) { + onChange(targetValue); + + target.blur(); + } + }; + + const handleKeyDown = (event: React.KeyboardEvent) => { + const { key } = event; + const target = event.target as HTMLInputElement; + const targetValue = target.value; + + if (key === "ArrowDown" || key === "ArrowRight") { + event.preventDefault(); + return handleFocusNext(target); + } + + if (key === "ArrowUp" || key === "ArrowLeft") { + event.preventDefault(); + return handleFocusPrev(target); + } + + target.setSelectionRange(0, target.value.length); + + if (key !== "Backspace" || targetValue !== "") { + return; + } + + handleFocusPrev(target); + }; + + const handleFocus = (event: React.FocusEvent) => { + const { target } = event; + + target.setSelectionRange(0, target.value.length); + }; + + const handleFocusNext = (target: HTMLInputElement) => { + const nextElement = target.nextElementSibling as HTMLInputElement | null; + + if (nextElement) { + nextElement.focus(); + } + }; + + const handleFocusPrev = (target: HTMLInputElement) => { + const previousElement = + target.previousElementSibling as HTMLInputElement | null; + + if (previousElement) { + previousElement.focus(); + } + }; + return ( +
+ {valueItems.map((digit, index) => ( + handleChange(e, index)} + onKeyDown={handleKeyDown} + onFocus={handleFocus} + /> + ))} +
+ ); +}; + +export default OtpInput; diff --git a/client/src/components/auth/ForgetPasswordForm.tsx b/client/src/components/auth/reset-password/ForgetPasswordForm.tsx similarity index 86% rename from client/src/components/auth/ForgetPasswordForm.tsx rename to client/src/components/auth/reset-password/ForgetPasswordForm.tsx index 46ad858..54f4918 100644 --- a/client/src/components/auth/ForgetPasswordForm.tsx +++ b/client/src/components/auth/reset-password/ForgetPasswordForm.tsx @@ -1,6 +1,6 @@ import { Field, Form, Formik, FormikHelpers } from "formik"; import * as Yup from "yup"; -import { Button } from "../ui"; +import { Button } from "../../ui"; interface FormValues { email: string; @@ -33,7 +33,8 @@ const ForgetPasswordForm = () => { type="email" name="email" placeholder="E-mail" - className={`w-full bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ + autoComplete="off" + className={`w-100 bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ errors.email && touched.email ? "border-mandy-500" : "border-alabaster-400" diff --git a/client/src/components/auth/ResetPasswordForm.tsx b/client/src/components/auth/reset-password/ResetPasswordForm.tsx similarity index 91% rename from client/src/components/auth/ResetPasswordForm.tsx rename to client/src/components/auth/reset-password/ResetPasswordForm.tsx index 569c971..e4112ff 100644 --- a/client/src/components/auth/ResetPasswordForm.tsx +++ b/client/src/components/auth/reset-password/ResetPasswordForm.tsx @@ -2,7 +2,7 @@ import { Field, Form, Formik, FormikHelpers } from "formik"; import { useState } from "react"; import { EyeIcon, EyeSlashIcon } from "react-line-awesome"; import * as Yup from "yup"; -import { Button } from "../ui"; +import { Button } from "../../ui"; interface FormValues { password: string; @@ -50,7 +50,8 @@ const ResetPasswordForm = () => { type={showPassword ? "text" : "password"} name="password" placeholder="Mot de passe" - className={`w-full bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ + autoComplete="off" + className={`w-100 bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ errors.password && touched.password ? "border-mandy-500" : "border-alabaster-400" @@ -82,7 +83,8 @@ const ResetPasswordForm = () => { type={showConfirmPassword ? "text" : "password"} name="confirmPassword" placeholder="Confirmation mot de passe" - className={`w-full bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ + autoComplete="off" + className={`w-100 bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ errors.confirmPassword && touched.confirmPassword ? "border-mandy-500" : "border-alabaster-400" diff --git a/client/src/components/auth/SigninForm.tsx b/client/src/components/auth/signin/SigninForm.tsx similarity index 83% rename from client/src/components/auth/SigninForm.tsx rename to client/src/components/auth/signin/SigninForm.tsx index e5978df..088f745 100644 --- a/client/src/components/auth/SigninForm.tsx +++ b/client/src/components/auth/signin/SigninForm.tsx @@ -1,9 +1,9 @@ -import { Field, Form, Formik } from "formik"; +import { Field, Form, Formik, FormikHelpers } from "formik"; import { useState } from "react"; import { EyeIcon, EyeSlashIcon } from "react-line-awesome"; import { Link } from "react-router-dom"; import * as Yup from "yup"; -import { Button, LinkComponent } from "../ui"; +import { Button, LinkComponent } from "../../ui"; interface FormValues { email: string; @@ -26,8 +26,11 @@ const SigninForm = () => { .required("Le mot de passe est obligatoire.") .trim(), })} - onSubmit={(values: FormValues) => { + onSubmit={(values: FormValues, actions: FormikHelpers) => { console.log(values); + actions.setSubmitting(false); + actions.resetForm(); + // actions.setFieldError("email", "Le format de l'e-mail est incorrect."); }} > {({ errors, touched }) => ( @@ -38,7 +41,8 @@ const SigninForm = () => { type="email" name="email" placeholder="E-mail" - className={`w-full bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ + autoComplete="off" + className={`w-100 bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ errors.email && touched.email ? "border-mandy-500" : "border-alabaster-400" @@ -56,7 +60,8 @@ const SigninForm = () => { type={showPassword ? "text" : "password"} name="password" placeholder="Mot de passe" - className={`w-full bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ + autoComplete="off" + className={`w-100 bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ errors.password && touched.password ? "border-mandy-500" : "border-alabaster-400" diff --git a/client/src/components/auth/signup/SignupForm.tsx b/client/src/components/auth/signup/SignupForm.tsx new file mode 100644 index 0000000..32a5a09 --- /dev/null +++ b/client/src/components/auth/signup/SignupForm.tsx @@ -0,0 +1,88 @@ +import { useState } from "react"; +import StepFour from "./signup-steps/StepFour"; +import StepOne from "./signup-steps/StepOne"; +import StepThree from "./signup-steps/StepThree"; +import StepTwo from "./signup-steps/StepTwo"; + +export interface UserSignupInterface { + email: string; + name: string; + password: string; + confirmPassword?: string; + age: number; + metadata: { + favorite_sport: string; + origin: string; + intent: string; + }; +} + +const SignupForm = () => { + const [data, setData] = useState({ + email: "", + name: "", + password: "", + confirmPassword: "", + age: 0, + metadata: { + favorite_sport: "", + origin: "", + intent: "", + }, + }); + + const [currentStep, setCurrentStep] = useState(0); + const [animationDirection, setAnimationDirection] = useState<"next" | "prev">( + "next" + ); + + const sendRequest = (formData: UserSignupInterface) => { + console.log("Form Submitted", formData); + }; + + const handleNextStep = (newData: UserSignupInterface, final = false) => { + setData((prev) => ({ ...prev, ...newData })); + setAnimationDirection("next"); + + if (final) { + sendRequest(newData); + } + + setCurrentStep((prev) => prev + 1); + }; + + const handlePrevStep = (newData: UserSignupInterface) => { + setData((prev) => ({ ...prev, ...newData })); + setAnimationDirection("prev"); + setCurrentStep((prev) => prev - 1); + }; + + const steps = [ + , + , + , + , + ]; + + return steps[currentStep]; +}; +export default SignupForm; diff --git a/client/src/components/auth/signup/signup-steps/StepFour.tsx b/client/src/components/auth/signup/signup-steps/StepFour.tsx new file mode 100644 index 0000000..7f35e20 --- /dev/null +++ b/client/src/components/auth/signup/signup-steps/StepFour.tsx @@ -0,0 +1,230 @@ +import { Field, Form, Formik, FormikHelpers } from "formik"; +import { motion } from "framer-motion"; +import { useState } from "react"; +import { ArrowLeftIcon, EyeIcon, EyeSlashIcon } from "react-line-awesome"; +import { useNavigate } from "react-router"; +import * as Yup from "yup"; +import { Button, Reveal } from "../../../ui"; +import { UserSignupInterface } from "../SignupForm"; + +const lastStepValidationSchema = Yup.object().shape({ + name: Yup.string().required("Le nom est obligatoire.").trim(), + email: Yup.string() + .email("Le format de l'e-mail est incorrect.") + .required("L'e-mail est obligatoire.") + .trim(), + password: Yup.string() + .required("Le mot de passe est obligatoire.") + .min(8, "Le mot de passe doit contenir 8 caractères minimum.") + .matches( + /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/, + "Le mot de passe doit contenir au moins une lettre majuscule, une lettre minuscule, un chiffre et un caractère special." + ) + .trim(), + confirmPassword: Yup.string() + .oneOf([Yup.ref("password")], "Le mot de passe ne correspond pas.") + .required("La confirmation du mot de passe est obligatoire.") + .trim(), + age: Yup.number() + .min(13, "Vous devez avoir au moins 13 ans.") + .required("L'âge est obligatoire.") + .truncate(), +}); + +const StepFour = ({ + nextStep, + prevStep, + data, + animDir, +}: { + nextStep: (newData: UserSignupInterface, final?: boolean) => void; + prevStep: (newData: UserSignupInterface) => void; + data: UserSignupInterface; + animDir: "next" | "prev"; +}) => { + const [showPassword, setShowPassword] = useState(false); + const [showConfirmPassword, setShowConfirmPassword] = + useState(false); + + const navigate = useNavigate(); + + const handleSubmit = ( + values: UserSignupInterface, + actions: FormikHelpers + ) => { + const { confirmPassword, ...userData } = values; + + nextStep(userData, true); + + navigate("/otp"); + actions.setSubmitting(false); + }; + + return ( + ) => + handleSubmit(values, actions) + } + > + {({ errors, touched }) => ( +
+
+ prevStep(data)} + /> +
+ +
+
+
+
+ +

+ Finalise ton inscription pour commencer à utiliser l'application ! +

+
+
+
+ + {errors.name && touched.name && ( +

+ {errors.name} +

+ )} +
+
+ + {errors.email && touched.email && ( +

+ {errors.email} +

+ )} +
+
+ + {errors.age && touched.age && ( +

+ {errors.age} +

+ )} +
+
+
+ + {!showPassword ? ( + setShowPassword(true)} + className="absolute right-4 top-1/3 -translate-y-1/4 inline-block text-2xl text-alabaster-400 cursor-pointer" + component="span" + /> + ) : ( + setShowPassword(false)} + className="absolute right-4 top-1/3 -translate-y-1/4 inline-block text-2xl text-alabaster-400 cursor-pointer" + component="span" + /> + )} +
+ {errors.password && touched.password && ( +

+ {errors.password} +

+ )} +
+
+
+ + {!showConfirmPassword ? ( + setShowConfirmPassword(true)} + className="absolute right-4 top-2/4 -translate-y-2/4 inline-block text-2xl text-alabaster-400 cursor-pointer" + component="span" + /> + ) : ( + setShowConfirmPassword(false)} + className="absolute right-4 top-2/4 -translate-y-2/4 inline-block text-2xl text-alabaster-400 cursor-pointer" + component="span" + /> + )} +
+ {errors.confirmPassword && touched.confirmPassword && ( +

+ {errors.confirmPassword} +

+ )} +
+
+
+ +
+
+
+
+ )} +
+ ); +}; + +export default StepFour; diff --git a/client/src/components/auth/signup/signup-steps/StepOne.tsx b/client/src/components/auth/signup/signup-steps/StepOne.tsx new file mode 100644 index 0000000..4ac29ef --- /dev/null +++ b/client/src/components/auth/signup/signup-steps/StepOne.tsx @@ -0,0 +1,116 @@ +import { Form, Formik } from "formik"; +import { motion } from "framer-motion"; +import { useEffect, useState } from "react"; +import { ArrowLeftIcon } from "react-line-awesome"; +import { useNavigate } from "react-router"; +import { Button, Reveal } from "../../../ui"; +import { UserSignupInterface } from "../SignupForm"; + +const choices = { + fav_sport: [ + "Sport de combat", + "Sport de course", + "Sport aquatique", + "Sport collectif", + "Sport de plage", + "Sport de force", + ], + origin: ["Internet", "Famille/amis", "Autre"], + intent: ["Participer", "Me divertir", "Apprendre", "Autre"], +}; + +const StepOne = ({ + nextStep, + data, + animDir, +}: { + nextStep: (newData: UserSignupInterface) => void; + data: UserSignupInterface; + animDir: "next" | "prev"; +}) => { + const [clickedIndex, setClickedIndex] = useState(-1); + + const navigate = useNavigate(); + + const handleChoiceClick = (index: number) => { + setClickedIndex(index); + }; + + const handlePrevPage = () => { + navigate("/"); + }; + + const handleSubmit = () => { + if (clickedIndex !== null) { + const selectedSport = choices.fav_sport[clickedIndex]; + console.log(selectedSport); + nextStep({ + ...data, + metadata: { ...data.metadata, favorite_sport: selectedSport }, + }); + } + }; + + useEffect(() => { + if (data.metadata.favorite_sport) { + setClickedIndex(choices.fav_sport.indexOf(data.metadata.favorite_sport)); + } + }, [data.metadata.favorite_sport]); + + return ( + +
+
+ +
+ +
+
+
+
+ +

+ Quel est ton sport préféré ? +

+
+
    + {choices.fav_sport.map((choice, index) => ( +
  • +
    handleChoiceClick(index)} + className={`flex gap-2 items-center flex-col p-6 border-3 rounded-xl border-alabaster-400 cursor-pointer hover:brightness-90 active:translate-y-1 active:shadow-tree-poppy-500-press active:border-tree-poppy-500 ${ + index === clickedIndex ? "border-tree-poppy-500" : "" + } ${ + index === clickedIndex + ? "shadow-tree-poppy-500" + : "shadow-secondary" + }`} + > + {choice} +
    +
  • + ))} +
+ +
+
+
+
+ ); +}; + +export default StepOne; diff --git a/client/src/components/auth/signup/signup-steps/StepThree.tsx b/client/src/components/auth/signup/signup-steps/StepThree.tsx new file mode 100644 index 0000000..c1d19bd --- /dev/null +++ b/client/src/components/auth/signup/signup-steps/StepThree.tsx @@ -0,0 +1,111 @@ +import { Form, Formik } from "formik"; +import { motion } from "framer-motion"; +import { useEffect, useState } from "react"; +import { ArrowLeftIcon } from "react-line-awesome"; +import { Button, Reveal } from "../../../ui"; +import { UserSignupInterface } from "../SignupForm"; + +const choices = { + fav_sport: [ + "Sport de combat", + "Sport de course", + "Sport aquatique", + "Sport collectif", + "Sport de plage", + "Sport de force", + ], + origin: ["Internet", "Famille/amis", "Autre"], + intent: ["Participer", "Me divertir", "Apprendre", "Autre"], +}; + +const StepThree = ({ + nextStep, + prevStep, + data, + animDir, +}: { + nextStep: (newData: UserSignupInterface, final?: boolean) => void; + prevStep: (newData: UserSignupInterface) => void; + data: UserSignupInterface; + animDir: "next" | "prev"; +}) => { + const [clickedIndex, setClickedIndex] = useState(-1); + + const handleChoiceClick = (index: number) => { + setClickedIndex(index); + }; + + const handleSubmit = () => { + if (clickedIndex !== null) { + const selectedIntent = choices.intent[clickedIndex]; + console.log(selectedIntent); + nextStep({ + ...data, + metadata: { ...data.metadata, intent: selectedIntent }, + }); + } + }; + + useEffect(() => { + if (data.metadata.intent) { + setClickedIndex(choices.intent.indexOf(data.metadata.intent)); + } + }, [data.metadata.intent]); + + return ( + +
+
+ prevStep(data)} + /> +
+ +
+
+
+
+ +

+ Que veux-tu faire sur l'application ? +

+
+
    + {choices.intent.map((choice, index) => ( +
  • +
    handleChoiceClick(index)} + className={`flex gap-2 items-center flex-col p-6 border-3 rounded-xl border-alabaster-400 cursor-pointer hover:brightness-90 active:translate-y-1 active:shadow-tree-poppy-500-press font-bold uppercase active:border-tree-poppy-500 ${ + index === clickedIndex ? "border-tree-poppy-500" : "" + } ${ + index === clickedIndex + ? "shadow-tree-poppy-500" + : "shadow-secondary" + }`} + > + {choice} +
    +
  • + ))} +
+ +
+
+
+
+ ); +}; + +export default StepThree; diff --git a/client/src/components/auth/signup/signup-steps/StepTwo.tsx b/client/src/components/auth/signup/signup-steps/StepTwo.tsx new file mode 100644 index 0000000..f024a63 --- /dev/null +++ b/client/src/components/auth/signup/signup-steps/StepTwo.tsx @@ -0,0 +1,111 @@ +import { Form, Formik } from "formik"; +import { motion } from "framer-motion"; +import { useEffect, useState } from "react"; +import { ArrowLeftIcon } from "react-line-awesome"; +import { Button, Reveal } from "../../../ui"; +import { UserSignupInterface } from "../SignupForm"; + +const choices = { + fav_sport: [ + "Sport de combat", + "Sport de course", + "Sport aquatique", + "Sport collectif", + "Sport de plage", + "Sport de force", + ], + origin: ["Internet", "Famille/amis", "Autre"], + intent: ["Participer", "Me divertir", "Apprendre", "Autre"], +}; + +const StepTwo = ({ + nextStep, + prevStep, + data, + animDir, +}: { + nextStep: (newData: UserSignupInterface) => void; + prevStep: (newData: UserSignupInterface) => void; + data: UserSignupInterface; + animDir: "next" | "prev"; +}) => { + const [clickedIndex, setClickedIndex] = useState(-1); + + const handleChoiceClick = (index: number) => { + setClickedIndex(index); + }; + + const handleSubmit = () => { + if (clickedIndex !== null) { + const selectedOrigin = choices.origin[clickedIndex]; + console.log(selectedOrigin); + nextStep({ + ...data, + metadata: { ...data.metadata, origin: selectedOrigin }, + }); + } + }; + + useEffect(() => { + if (data.metadata.origin) { + setClickedIndex(choices.origin.indexOf(data.metadata.origin)); + } + }, [data.metadata.origin]); + + return ( + +
+
+ prevStep(data)} + /> +
+ +
+
+
+
+ +

+ Quel est ton sport préféré ? +

+
+
    + {choices.origin.map((choice, index) => ( +
  • +
    handleChoiceClick(index)} + className={`flex gap-2 items-center flex-col p-6 border-3 rounded-xl border-alabaster-400 cursor-pointer hover:brightness-90 active:translate-y-1 active:shadow-tree-poppy-500-press font-bold uppercase active:border-tree-poppy-500 ${ + index === clickedIndex ? "border-tree-poppy-500" : "" + } ${ + index === clickedIndex + ? "shadow-tree-poppy-500" + : "shadow-secondary" + }`} + > + {choice} +
    +
  • + ))} +
+ +
+
+
+
+ ); +}; + +export default StepTwo; diff --git a/client/src/components/ui/index.ts b/client/src/components/ui/index.ts index 0c8b52a..23f9ebb 100644 --- a/client/src/components/ui/index.ts +++ b/client/src/components/ui/index.ts @@ -1,2 +1,3 @@ export * from "./button"; export * from "./link"; +export * from "./reveal"; diff --git a/client/src/components/ui/reveal.tsx b/client/src/components/ui/reveal.tsx new file mode 100644 index 0000000..6dde896 --- /dev/null +++ b/client/src/components/ui/reveal.tsx @@ -0,0 +1,23 @@ +import { motion } from "framer-motion"; + +interface RevealProps { + children: React.ReactNode; + className?: string; +} + +export const Reveal = ({ children, className }: RevealProps) => { + return ( + + {children} + + ); +}; diff --git a/client/src/pages/auth/ForgetPasswordPage.tsx b/client/src/pages/auth/ForgetPasswordPage.tsx index 89b3b6d..dac6d7f 100644 --- a/client/src/pages/auth/ForgetPasswordPage.tsx +++ b/client/src/pages/auth/ForgetPasswordPage.tsx @@ -1,4 +1,4 @@ -import ForgetPasswordForm from "../../components/auth/ForgetPasswordForm"; +import ForgetPasswordForm from "../../components/auth/reset-password/ForgetPasswordForm"; const ForgetPasswordPage = () => { return ( diff --git a/client/src/pages/auth/OtpPage.tsx b/client/src/pages/auth/OtpPage.tsx new file mode 100644 index 0000000..eafb041 --- /dev/null +++ b/client/src/pages/auth/OtpPage.tsx @@ -0,0 +1,19 @@ +import OtpForm from "../../components/auth/otp/OtpForm"; + +const OtpPage = () => { + return ( +
+
+

+ Saisis le code de sécurité pour finaliser ton inscription ! +

+

+ Un code de sécurité a été envoyé à ton e-mail. +

+
+ +
+ ); +}; + +export default OtpPage; diff --git a/client/src/pages/auth/ResetPasswordPage.tsx b/client/src/pages/auth/ResetPasswordPage.tsx index db91837..a56ce0a 100644 --- a/client/src/pages/auth/ResetPasswordPage.tsx +++ b/client/src/pages/auth/ResetPasswordPage.tsx @@ -1,4 +1,4 @@ -import ResetPasswordForm from "../../components/auth/ResetPasswordForm"; +import ResetPasswordForm from "../../components/auth/reset-password/ResetPasswordForm"; const ResetPasswordPage = () => { return ( diff --git a/client/src/pages/auth/SigninPage.tsx b/client/src/pages/auth/SigninPage.tsx index 6ac6c85..6d25da3 100644 --- a/client/src/pages/auth/SigninPage.tsx +++ b/client/src/pages/auth/SigninPage.tsx @@ -1,4 +1,4 @@ -import SigninForm from "../../components/auth/SigninForm"; +import SigninForm from "../../components/auth/signin/SigninForm"; const SigninPage = () => { return ( diff --git a/client/src/pages/auth/SignupPage.tsx b/client/src/pages/auth/SignupPage.tsx index e7b8643..0befb74 100644 --- a/client/src/pages/auth/SignupPage.tsx +++ b/client/src/pages/auth/SignupPage.tsx @@ -1,4 +1,4 @@ -import SignupForm from "../../components/auth/SignupForm"; +import SignupForm from "../../components/auth/signup/SignupForm"; const SignupPage = () => { return ; diff --git a/client/src/utils/constants.ts b/client/src/utils/constants.ts new file mode 100644 index 0000000..4f03a76 --- /dev/null +++ b/client/src/utils/constants.ts @@ -0,0 +1 @@ +export const RE_DIGIT = new RegExp(/^\d+$/); From 2d0bc0bd4873a92d867b552399dcc199d5dc77ca Mon Sep 17 00:00:00 2001 From: Akeko Date: Sat, 2 Mar 2024 17:57:02 +0100 Subject: [PATCH 031/108] test(auth): multisteps form + accessibility --- client/package-lock.json | 14 ++ client/package.json | 1 + client/src/__tests__/App.test.tsx | 149 +++++++++++++++++- .../src/__tests__/mock/mockedUsedNavigate.tsx | 9 ++ client/src/components/auth/otp/OtpForm.tsx | 22 ++- .../reset-password/ForgetPasswordForm.tsx | 15 +- .../auth/reset-password/ResetPasswordForm.tsx | 54 ++++++- .../src/components/auth/signin/SigninForm.tsx | 40 ++++- .../src/components/auth/signup/SignupForm.tsx | 4 +- .../auth/signup/signup-steps/StepFour.tsx | 98 +++++++++++- .../auth/signup/signup-steps/StepOne.tsx | 21 ++- .../auth/signup/signup-steps/StepThree.tsx | 19 ++- .../auth/signup/signup-steps/StepTwo.tsx | 17 ++ 13 files changed, 427 insertions(+), 36 deletions(-) create mode 100644 client/src/__tests__/mock/mockedUsedNavigate.tsx diff --git a/client/package-lock.json b/client/package-lock.json index 79af3ee..5ca9be1 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -21,6 +21,7 @@ }, "devDependencies": { "@testing-library/react": "^14.1.2", + "@testing-library/user-event": "^14.5.2", "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17", "@typescript-eslint/eslint-plugin": "^6.14.0", @@ -1431,6 +1432,19 @@ "react-dom": "^18.0.0" } }, + "node_modules/@testing-library/user-event": { + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", + "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, "node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", diff --git a/client/package.json b/client/package.json index bb216d4..1d6563d 100644 --- a/client/package.json +++ b/client/package.json @@ -24,6 +24,7 @@ }, "devDependencies": { "@testing-library/react": "^14.1.2", + "@testing-library/user-event": "^14.5.2", "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17", "@typescript-eslint/eslint-plugin": "^6.14.0", diff --git a/client/src/__tests__/App.test.tsx b/client/src/__tests__/App.test.tsx index 9284d68..de68454 100644 --- a/client/src/__tests__/App.test.tsx +++ b/client/src/__tests__/App.test.tsx @@ -1,18 +1,151 @@ // Imports -import { describe, it, expect } from "vitest"; -import { render, screen } from "@testing-library/react"; - +import { render, screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { describe, expect, it } from "vitest"; // To Test -import App from "../App"; +import { BrowserRouter } from "react-router-dom"; +import SignupForm from "../components/auth/signup/SignupForm"; +import mockedUsedNavigate from "./mock/mockedUsedNavigate"; // Tests -describe("Renders main page correctly", async () => { - it("Should render the page correctly", async () => { +describe("Rend le formulaire d'inscription correctement", async () => { + it("Le formulaire devrait s'afficher correctement", async () => { // Setup - render(); - const h1 = await screen.queryByText("User page"); + render( + + + + ); + const h1 = screen.queryByText("Quel est ton sport préféré ?"); // Expectations expect(h1).not.toBeNull(); }); + + it("Les boutons fonctionnent correctement", async () => { + const user = userEvent.setup(); + render( + + + + ); + const nextButtons = await screen.findAllByText("Continuer"); + const prevButtons = await screen.findAllByLabelText("Retour"); + + expect(nextButtons).not.toBeNull(); + expect(prevButtons).not.toBeNull(); + + nextButtons.forEach((button) => { + user.click(button); + }); + + prevButtons.forEach((button) => { + user.click(button); + }); + }); + + it("Les champs du formulaire de la étape fonctionnent correctement", async () => { + render( + + + + ); + + const nextButtons = await screen.findAllByText("Continuer"); + nextButtons.slice(0, -1).forEach((button) => { + userEvent.click(button); + + waitFor(() => { + const nameInput = screen.getByLabelText("name"); + const emailInput = screen.getByLabelText("email"); + const ageInput = screen.getByLabelText("age"); + const passwordInput = screen.getByLabelText("password"); + const confirmPasswordInput = screen.getByLabelText("confirmPassword"); + + userEvent.clear(nameInput); + userEvent.type(nameInput, "John"); + + userEvent.clear(emailInput); + userEvent.type(emailInput, "yfDz6@example.com"); + + userEvent.clear(ageInput); + userEvent.type(ageInput, "20"); + + userEvent.clear(passwordInput); + userEvent.type(passwordInput, "password"); + + userEvent.clear(confirmPasswordInput); + userEvent.type(confirmPasswordInput, "password"); + + expect(nameInput).toBe("John"); + expect(emailInput).toBe("yfDz6@example.com"); + expect(ageInput).toBe("20"); + expect(passwordInput).toBe("password"); + expect(confirmPasswordInput).toBe("password"); + }); + }); + }); + + it("Le formulaire fonctionne correctement", async () => { + render( + + + + ); + const nextButtons = await screen.findAllByText("Continuer"); + + nextButtons.forEach((button) => { + userEvent.click(button); + + waitFor(() => { + const endButton = screen.getByText("Terminer l'inscription"); + const nameInput = screen.getByLabelText("name"); + const emailInput = screen.getByLabelText("email"); + const ageInput = screen.getByLabelText("age"); + const passwordInput = screen.getByLabelText("password"); + const confirmPasswordInput = screen.getByLabelText("confirmPassword"); + + userEvent.clear(nameInput); + userEvent.type(nameInput, "John"); + + userEvent.clear(emailInput); + userEvent.type(emailInput, "yfDz6@example.com"); + + userEvent.clear(ageInput); + userEvent.type(ageInput, "20"); + + userEvent.clear(passwordInput); + userEvent.type(passwordInput, "passwordM6*"); + + userEvent.clear(confirmPasswordInput); + userEvent.type(confirmPasswordInput, "passwordM6*"); + + userEvent.click(endButton); + + expect(mockedUsedNavigate).toBeCalled(); + }); + }); + }); + + it("La persistance du formulaire fonctionne correctement", async () => { + render( + + + + ); + + const nextButtons = screen.getAllByText("Continuer"); + + userEvent.click(nextButtons[0]); + + waitFor(() => { + const choice = screen.getByText("Sport de combat"); + const returnButton = screen.getByLabelText("Retour"); + + userEvent.click(choice); + userEvent.click(returnButton); + + expect(screen.getByLabelText("true")).not.toBeNull(); + }); + }); }); diff --git a/client/src/__tests__/mock/mockedUsedNavigate.tsx b/client/src/__tests__/mock/mockedUsedNavigate.tsx new file mode 100644 index 0000000..5b5a2ec --- /dev/null +++ b/client/src/__tests__/mock/mockedUsedNavigate.tsx @@ -0,0 +1,9 @@ +import { vi } from "vitest"; + +const mockedUsedNavigate = vi.fn(); +vi.mock("react-router-dom", () => ({ + ...vi.importActual("react-router-dom"), + useNavigate: () => mockedUsedNavigate, +})); + +export default mockedUsedNavigate; diff --git a/client/src/components/auth/otp/OtpForm.tsx b/client/src/components/auth/otp/OtpForm.tsx index f8af81c..254bbd8 100644 --- a/client/src/components/auth/otp/OtpForm.tsx +++ b/client/src/components/auth/otp/OtpForm.tsx @@ -32,20 +32,34 @@ const OtpForm = () => { setOtp(value); }; - console.log(formik.errors); return (
- + {formik.errors.otp && ( -
+
{formik.errors.otp}
)}
-
diff --git a/client/src/components/auth/reset-password/ForgetPasswordForm.tsx b/client/src/components/auth/reset-password/ForgetPasswordForm.tsx index 54f4918..5c9e025 100644 --- a/client/src/components/auth/reset-password/ForgetPasswordForm.tsx +++ b/client/src/components/auth/reset-password/ForgetPasswordForm.tsx @@ -26,7 +26,7 @@ const ForgetPasswordForm = () => { })} onSubmit={handleSubmit} > - {({ errors, touched }) => ( + {({ errors, touched, isValid, dirty }) => (
{ name="email" placeholder="E-mail" autoComplete="off" + aria-required="true" + aria-invalid={errors.email && touched.email ? "true" : "false"} + aria-describedby="email-help" className={`w-100 bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ errors.email && touched.email ? "border-mandy-500" @@ -41,11 +44,17 @@ const ForgetPasswordForm = () => { }`} /> {errors.email && touched.email && ( -

{errors.email}

+

+ {errors.email} +

)}
- diff --git a/client/src/components/auth/reset-password/ResetPasswordForm.tsx b/client/src/components/auth/reset-password/ResetPasswordForm.tsx index e4112ff..111d213 100644 --- a/client/src/components/auth/reset-password/ResetPasswordForm.tsx +++ b/client/src/components/auth/reset-password/ResetPasswordForm.tsx @@ -41,7 +41,7 @@ const ResetPasswordForm = () => { })} onSubmit={handleSubmit} > - {({ errors, touched }) => ( + {({ errors, touched, isValid, dirty }) => (
@@ -51,6 +51,11 @@ const ResetPasswordForm = () => { name="password" placeholder="Mot de passe" autoComplete="off" + aria-required="true" + aria-invalid={ + errors.password && touched.password ? "true" : "false" + } + aria-describedby="password-help" className={`w-100 bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ errors.password && touched.password ? "border-mandy-500" @@ -60,19 +65,35 @@ const ResetPasswordForm = () => { {!showPassword ? ( setShowPassword(true)} + onKeyDown={(e) => + e.key === "Enter" && setShowPassword(true) + } className="absolute right-4 top-1/2 -translate-y-1/2 inline-block text-2xl text-alabaster-400 cursor-pointer" component="span" + aria-hidden="false" + aria-label="Voir le mot de passe" + tabIndex={0} /> ) : ( setShowPassword(false)} + onKeyDown={(e) => + e.key === "Enter" && setShowPassword(false) + } className="absolute right-4 top-1/2 -translate-y-1/2 inline-block text-2xl text-alabaster-400 cursor-pointer" component="span" + aria-hidden="false" + aria-label="Cacher le mot de passe" + tabIndex={0} /> )}
{errors.password && touched.password && ( -

+

{errors.password}

)} @@ -84,6 +105,11 @@ const ResetPasswordForm = () => { name="confirmPassword" placeholder="Confirmation mot de passe" autoComplete="off" + aria-required="true" + aria-invalid={ + errors.confirmPassword && touched.confirmPassword + } + aria-describedby="confirm-password-help" className={`w-100 bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ errors.confirmPassword && touched.confirmPassword ? "border-mandy-500" @@ -93,25 +119,45 @@ const ResetPasswordForm = () => { {!showConfirmPassword ? ( setShowConfirmPassword(true)} + onKeyDown={(e) => + e.key === "Enter" && setShowConfirmPassword(true) + } className="absolute right-4 top-1/2 -translate-y-1/2 inline-block text-2xl text-alabaster-400 cursor-pointer" component="span" + aria-hidden="false" + aria-label="Voir le mot de passe" + tabIndex={0} /> ) : ( setShowConfirmPassword(false)} + onKeyDown={(e) => + e.key === "Enter" && setShowConfirmPassword(false) + } className="absolute right-4 top-1/2 -translate-y-1/2 inline-block text-2xl text-alabaster-400 cursor-pointer" component="span" + aria-hidden="false" + aria-label="Cacher le mot de passe" + tabIndex={0} /> )}
{errors.confirmPassword && touched.confirmPassword && ( -

+

{errors.confirmPassword}

)}
- diff --git a/client/src/components/auth/signin/SigninForm.tsx b/client/src/components/auth/signin/SigninForm.tsx index 088f745..4eef0d5 100644 --- a/client/src/components/auth/signin/SigninForm.tsx +++ b/client/src/components/auth/signin/SigninForm.tsx @@ -33,7 +33,7 @@ const SigninForm = () => { // actions.setFieldError("email", "Le format de l'e-mail est incorrect."); }} > - {({ errors, touched }) => ( + {({ errors, touched, isValid, dirty }) => (
@@ -42,6 +42,9 @@ const SigninForm = () => { name="email" placeholder="E-mail" autoComplete="off" + aria-required="true" + aria-invalid={errors.email && touched.email ? "true" : "false"} + aria-describedby="email-help" className={`w-100 bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ errors.email && touched.email ? "border-mandy-500" @@ -49,7 +52,11 @@ const SigninForm = () => { }`} /> {errors.email && touched.email && ( -

+

{errors.email}

)} @@ -61,6 +68,11 @@ const SigninForm = () => { name="password" placeholder="Mot de passe" autoComplete="off" + aria-required="true" + aria-invalid={ + errors.password && touched.password ? "true" : "false" + } + aria-describedby="password-help" className={`w-100 bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ errors.password && touched.password ? "border-mandy-500" @@ -70,26 +82,46 @@ const SigninForm = () => { {!showPassword ? ( setShowPassword(true)} + onKeyDown={(e) => + e.key === "Enter" && setShowPassword(true) + } + aria-hidden="false" + aria-label="Voir le mot de passe" + tabIndex={0} className="absolute right-4 top-2/4 -translate-y-2/4 inline-block text-2xl text-alabaster-400 cursor-pointer" component="span" /> ) : ( setShowPassword(false)} + onKeyDown={(e) => + e.key === "Enter" && setShowPassword(false) + } + aria-hidden="false" + aria-label="Voir le mot de passe" + tabIndex={0} className="absolute right-4 top-2/4 -translate-y-2/4 inline-block text-2xl text-alabaster-400 cursor-pointer" component="span" /> )}
{errors.password && touched.password && ( -

+

{errors.password}

)}
- diff --git a/client/src/components/auth/signup/SignupForm.tsx b/client/src/components/auth/signup/SignupForm.tsx index 32a5a09..639fa32 100644 --- a/client/src/components/auth/signup/SignupForm.tsx +++ b/client/src/components/auth/signup/SignupForm.tsx @@ -9,7 +9,7 @@ export interface UserSignupInterface { name: string; password: string; confirmPassword?: string; - age: number; + age: string; metadata: { favorite_sport: string; origin: string; @@ -23,7 +23,7 @@ const SignupForm = () => { name: "", password: "", confirmPassword: "", - age: 0, + age: "", metadata: { favorite_sport: "", origin: "", diff --git a/client/src/components/auth/signup/signup-steps/StepFour.tsx b/client/src/components/auth/signup/signup-steps/StepFour.tsx index 7f35e20..175476d 100644 --- a/client/src/components/auth/signup/signup-steps/StepFour.tsx +++ b/client/src/components/auth/signup/signup-steps/StepFour.tsx @@ -68,12 +68,21 @@ const StepFour = ({ handleSubmit(values, actions) } > - {({ errors, touched }) => ( + {({ errors, touched, isValid, dirty }) => (
{ + if (e.key === "Enter") { + prevStep(data); + } + }} + aria-label="Retour" + aria-hidden="false" onClick={() => prevStep(data)} />
@@ -98,6 +107,11 @@ const StepFour = ({ name="name" placeholder="Nom d'utilisateur" autoComplete="off" + aria-required="true" + aria-invalid={ + errors.name && touched.name ? "true" : "false" + } + aria-describedby="name-help" className={`w-100 bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ errors.name && touched.name ? "border-mandy-500" @@ -105,7 +119,11 @@ const StepFour = ({ }`} /> {errors.name && touched.name && ( -

+

{errors.name}

)} @@ -116,6 +134,11 @@ const StepFour = ({ name="email" placeholder="E-mail" autoComplete="off" + aria-required="true" + aria-invalid={ + errors.email && touched.email ? "true" : "false" + } + aria-describedby="email-help" className={`w-100 bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ errors.email && touched.email ? "border-mandy-500" @@ -123,7 +146,11 @@ const StepFour = ({ }`} /> {errors.email && touched.email && ( -

+

{errors.email}

)} @@ -135,6 +162,9 @@ const StepFour = ({ min={0} placeholder="Age" autoComplete="off" + aria-required="true" + aria-invalid={errors.age && touched.age ? "true" : "false"} + aria-describedby="age-help" className={`w-100 bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ errors.age && touched.age ? "border-mandy-500" @@ -142,7 +172,11 @@ const StepFour = ({ }`} /> {errors.age && touched.age && ( -

+

{errors.age}

)} @@ -154,6 +188,11 @@ const StepFour = ({ name="password" placeholder="Mot de passe" autoComplete="off" + aria-required="true" + aria-invalid={ + errors.password && touched.password ? "true" : "false" + } + aria-describedby="password-help" className={`w-100 bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ errors.password && touched.password ? "border-mandy-500" @@ -163,19 +202,35 @@ const StepFour = ({ {!showPassword ? ( setShowPassword(true)} + onKeyDown={(e) => + e.key === "Enter" && setShowPassword(true) + } className="absolute right-4 top-1/3 -translate-y-1/4 inline-block text-2xl text-alabaster-400 cursor-pointer" component="span" + aria-hidden="false" + aria-label="Voir le mot de passe" + tabIndex={0} /> ) : ( setShowPassword(false)} + onKeyDown={(e) => + e.key === "Enter" && setShowPassword(false) + } className="absolute right-4 top-1/3 -translate-y-1/4 inline-block text-2xl text-alabaster-400 cursor-pointer" component="span" + aria-hidden="false" + aria-label="Cacher le mot de passe" + tabIndex={0} /> )}
{errors.password && touched.password && ( -

+

{errors.password}

)} @@ -187,6 +242,13 @@ const StepFour = ({ name="confirmPassword" placeholder="Confirmation mot de passe" autoComplete="off" + aria-required="true" + aria-invalid={ + errors.confirmPassword && touched.confirmPassword + ? "true" + : "false" + } + aria-describedby="confirm-password-help" className={`w-100 bg-alabaster-600 border-3 rounded-xl p-4 placeholder:text-alabaster-50 focus:border-tree-poppy-500 outline-none ${ errors.confirmPassword && touched.confirmPassword ? "border-mandy-500" @@ -196,27 +258,47 @@ const StepFour = ({ {!showConfirmPassword ? ( setShowConfirmPassword(true)} + onKeyDown={(e) => + e.key === "Enter" && setShowConfirmPassword(true) + } className="absolute right-4 top-2/4 -translate-y-2/4 inline-block text-2xl text-alabaster-400 cursor-pointer" component="span" + aria-hidden="false" + aria-label="Voir le mot de passe" + tabIndex={0} /> ) : ( setShowConfirmPassword(false)} + onKeyDown={(e) => + e.key === "Enter" && setShowConfirmPassword(false) + } className="absolute right-4 top-2/4 -translate-y-2/4 inline-block text-2xl text-alabaster-400 cursor-pointer" component="span" + aria-hidden="false" + aria-label="Cacher le mot de passe" + tabIndex={0} /> )}
{errors.confirmPassword && touched.confirmPassword && ( -

+

{errors.confirmPassword}

)}
-
diff --git a/client/src/components/auth/signup/signup-steps/StepOne.tsx b/client/src/components/auth/signup/signup-steps/StepOne.tsx index 4ac29ef..e9a6f27 100644 --- a/client/src/components/auth/signup/signup-steps/StepOne.tsx +++ b/client/src/components/auth/signup/signup-steps/StepOne.tsx @@ -37,7 +37,7 @@ const StepOne = ({ }; const handlePrevPage = () => { - navigate("/"); + navigate("/", { replace: true }); }; const handleSubmit = () => { @@ -64,6 +64,15 @@ const StepOne = ({ { + if (e.key === "Enter") { + handlePrevPage(); + } + }} + aria-label="Retour" + aria-hidden="false" onClick={handlePrevPage} />
@@ -72,7 +81,7 @@ const StepOne = ({ animate={{ width: animDir === "next" ? "25%" : "25%" }} className="bg-tree-poppy-500 h-4 rounded-xl relative" > -
+
@@ -86,6 +95,14 @@ const StepOne = ({
  • handleChoiceClick(index)} + role="button" + tabIndex={0} + aria-selected={clickedIndex === index ? "true" : "false"} + onKeyDown={(e: React.KeyboardEvent) => { + if (e.key === "Enter") { + handleChoiceClick(index); + } + }} className={`flex gap-2 items-center flex-col p-6 border-3 rounded-xl border-alabaster-400 cursor-pointer hover:brightness-90 active:translate-y-1 active:shadow-tree-poppy-500-press active:border-tree-poppy-500 ${ index === clickedIndex ? "border-tree-poppy-500" : "" } ${ diff --git a/client/src/components/auth/signup/signup-steps/StepThree.tsx b/client/src/components/auth/signup/signup-steps/StepThree.tsx index c1d19bd..74b9a74 100644 --- a/client/src/components/auth/signup/signup-steps/StepThree.tsx +++ b/client/src/components/auth/signup/signup-steps/StepThree.tsx @@ -59,6 +59,15 @@ const StepThree = ({ { + if (e.key === "Enter") { + prevStep(data); + } + }} + aria-label="Retour" + aria-hidden="false" onClick={() => prevStep(data)} />
    @@ -67,7 +76,7 @@ const StepThree = ({ animate={{ width: animDir === "next" ? "75%" : "75%" }} className="bg-tree-poppy-500 h-4 rounded-xl relative" > -
    +
    @@ -81,6 +90,14 @@ const StepThree = ({
  • handleChoiceClick(index)} + role="button" + tabIndex={0} + aria-selected={clickedIndex === index ? "true" : "false"} + onKeyDown={(e: React.KeyboardEvent) => { + if (e.key === "Enter") { + handleChoiceClick(index); + } + }} className={`flex gap-2 items-center flex-col p-6 border-3 rounded-xl border-alabaster-400 cursor-pointer hover:brightness-90 active:translate-y-1 active:shadow-tree-poppy-500-press font-bold uppercase active:border-tree-poppy-500 ${ index === clickedIndex ? "border-tree-poppy-500" : "" } ${ diff --git a/client/src/components/auth/signup/signup-steps/StepTwo.tsx b/client/src/components/auth/signup/signup-steps/StepTwo.tsx index f024a63..6e72892 100644 --- a/client/src/components/auth/signup/signup-steps/StepTwo.tsx +++ b/client/src/components/auth/signup/signup-steps/StepTwo.tsx @@ -59,6 +59,15 @@ const StepTwo = ({ { + if (e.key === "Enter") { + prevStep(data); + } + }} + aria-label="Retour" + aria-hidden="false" onClick={() => prevStep(data)} />
    @@ -81,6 +90,14 @@ const StepTwo = ({
  • handleChoiceClick(index)} + role="button" + tabIndex={0} + onKeyDown={(e: React.KeyboardEvent) => { + if (e.key === "Enter") { + handleChoiceClick(index); + } + }} + aria-selected={clickedIndex === index ? "true" : "false"} className={`flex gap-2 items-center flex-col p-6 border-3 rounded-xl border-alabaster-400 cursor-pointer hover:brightness-90 active:translate-y-1 active:shadow-tree-poppy-500-press font-bold uppercase active:border-tree-poppy-500 ${ index === clickedIndex ? "border-tree-poppy-500" : "" } ${ From 2cf975bec49bdd3a561607fb6309506df7a4d87a Mon Sep 17 00:00:00 2001 From: Akeko Date: Sat, 2 Mar 2024 23:12:39 +0100 Subject: [PATCH 032/108] refactor(server): remove request.rest --- server/request.rest | 74 --------------------------------------------- 1 file changed, 74 deletions(-) delete mode 100644 server/request.rest diff --git a/server/request.rest b/server/request.rest deleted file mode 100644 index 85032a4..0000000 --- a/server/request.rest +++ /dev/null @@ -1,74 +0,0 @@ -PATCH http://localhost:3001/api/my/account -Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2UuZ3ZyQGdtYWlsLmNvbSIsImlhdCI6MTcwODYzNzkzMSwiZXhwIjoxNzA5ODQ3NTMxfQ.vPoHeKkEF7Outp3-BgE3TrcDbEfPvkCfTsBFxGJ68oU -Content-Type: application/json - -{ - "name": "Maxence", - "password": "0123" -} - -### - -GET http://localhost:3001/api/my/badges -Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2UuZ3ZyQGdtYWlsLmNvbSIsImlhdCI6MTcwODYzNzkzMSwiZXhwIjoxNzA5ODQ3NTMxfQ.vPoHeKkEF7Outp3-BgE3TrcDbEfPvkCfTsBFxGJ68oU - -### - -GET http://localhost:3001/api/my/profile -Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGVuY2UuZ3ZyQGdtYWlsLmNvbSIsImlhdCI6MTcwODYzNzkzMSwiZXhwIjoxNzA5ODQ3NTMxfQ.vPoHeKkEF7Outp3-BgE3TrcDbEfPvkCfTsBFxGJ68oU - -### - -POST http://localhost:3001/api/auth/signup -Content-Type: application/json - -{ - "name": "Maxence", - "email": "maxence.gvr@gmail.com", - "password": "1234", - "age": 20, - "metadata": { - "favorite_sport": "Basketball", - "origin": "Internet", - "intent": "Other" - }, - "otp": "570777" -} - -### - -POST http://localhost:3001/api/auth/signin -Content-Type: application/json - -{ - "email": "maxence.gvr@gmail.com", - "password": "0123", - "otp": "286014" -} - -### - -POST http://localhost:3001/api/auth/send-otp -Content-Type: application/json - -{ - "email": "maxence.gvr@gmail.com" -} - -### - -POST http://localhost:3001/api/auth/forget-password -Content-Type: application/json - -{ - "email": "maxence.gvr@gmail.com" -} - -#### - -POST http://localhost:3001/api/auth/reset-password/ -Content-Type: application/json - -{ - "password": "1234" -} \ No newline at end of file From e28903ed579864aba59055782b28d9f91bce6602 Mon Sep 17 00:00:00 2001 From: DemoTheMann Date: Mon, 4 Mar 2024 09:29:35 +0100 Subject: [PATCH 033/108] added react leaflet packages + clusters --- client/package-lock.json | 53 ++++++++++++++++++++++++++++++++++++++++ client/package.json | 3 +++ package-lock.json | 6 +++++ 3 files changed, 62 insertions(+) create mode 100644 package-lock.json diff --git a/client/package-lock.json b/client/package-lock.json index 5ca9be1..3e69cf3 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -11,9 +11,12 @@ "class-variance-authority": "^0.7.0", "formik": "^2.4.5", "framer-motion": "^11.0.3", + "leaflet": "^1.9.4", "react": "^18.2.0", "react-cookie": "^7.0.2", "react-dom": "^18.2.0", + "react-leaflet": "^4.2.1", + "react-leaflet-cluster": "^2.1.0", "react-line-awesome": "^1.4.1", "react-router": "^6.21.3", "react-router-dom": "^6.22.1", @@ -1110,6 +1113,16 @@ "node": ">=14" } }, + "node_modules/@react-leaflet/core": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-2.1.0.tgz", + "integrity": "sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==", + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, "node_modules/@remix-run/router": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.1.tgz", @@ -4075,6 +4088,19 @@ "json-buffer": "3.0.1" } }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==" + }, + "node_modules/leaflet.markercluster": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz", + "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==", + "peerDependencies": { + "leaflet": "^1.3.1" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -4963,6 +4989,33 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "node_modules/react-leaflet": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.2.1.tgz", + "integrity": "sha512-p9chkvhcKrWn/H/1FFeVSqLdReGwn2qmiobOQGO3BifX+/vV/39qhY8dGqbdcPh1e6jxh/QHriLXr7a4eLFK4Q==", + "dependencies": { + "@react-leaflet/core": "^2.1.0" + }, + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/react-leaflet-cluster": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-leaflet-cluster/-/react-leaflet-cluster-2.1.0.tgz", + "integrity": "sha512-16X7XQpRThQFC4PH4OpXHimGg19ouWmjxjtpxOeBKpvERSvIRqTx7fvhTwkEPNMFTQ8zTfddz6fRTUmUEQul7g==", + "dependencies": { + "leaflet.markercluster": "^1.5.3" + }, + "peerDependencies": { + "leaflet": "^1.8.0", + "react": "^18.0.0", + "react-dom": "^18.0.0", + "react-leaflet": "^4.0.0" + } + }, "node_modules/react-line-awesome": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/react-line-awesome/-/react-line-awesome-1.4.1.tgz", diff --git a/client/package.json b/client/package.json index 1d6563d..ff7508a 100644 --- a/client/package.json +++ b/client/package.json @@ -14,9 +14,12 @@ "class-variance-authority": "^0.7.0", "formik": "^2.4.5", "framer-motion": "^11.0.3", + "leaflet": "^1.9.4", "react": "^18.2.0", "react-cookie": "^7.0.2", "react-dom": "^18.2.0", + "react-leaflet": "^4.2.1", + "react-leaflet-cluster": "^2.1.0", "react-line-awesome": "^1.4.1", "react-router": "^6.21.3", "react-router-dom": "^6.22.1", diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ed0786a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "flami-app", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} From 19ae5001c61790ad39766d0a4405b48e78c5e9f1 Mon Sep 17 00:00:00 2001 From: Akeko Date: Mon, 4 Mar 2024 10:03:09 +0100 Subject: [PATCH 034/108] refactor(router): change version of router --- client/src/App.tsx | 78 +++++++++++++++------- client/src/context/authContext.ts | 1 + client/src/context/authContextProvider.tsx | 12 ++-- client/src/main.tsx | 8 +-- client/src/pages/AuthLayout.tsx | 9 --- client/src/utils/ProtectedRoute.tsx | 12 ++++ 6 files changed, 76 insertions(+), 44 deletions(-) delete mode 100644 client/src/pages/AuthLayout.tsx create mode 100644 client/src/utils/ProtectedRoute.tsx diff --git a/client/src/App.tsx b/client/src/App.tsx index 49badb3..78c0e90 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,4 +1,4 @@ -import { Route, Routes } from "react-router"; +import { Route, RouterProvider, Routes } from "react-router"; import AuthLayout from "./pages/AuthLayout"; import RootLayout from "./pages/RootLayout"; import ForgetPasswordPage from "./pages/auth/ForgetPasswordPage"; @@ -10,34 +10,62 @@ import WelcomePage from "./pages/auth/WelcomePage"; import FlamiPage from "./pages/flami/FlamiPage"; import MapPage from "./pages/map/MapPage"; import ProfilePage from "./pages/profile/ProfilePage"; +import { createBrowserRouter } from "react-router-dom"; +import ProtectedRoute from "./utils/ProtectedRoute"; const App = () => { + const router = createBrowserRouter([ + { + path: "/", + element: ( + + + + ), + children: [ + { + path: "/", + element: , + }, + { + path: "/map", + element: , + }, + { + path: "/profile", + element: , + }, + ], + }, + { + path: "/welcome", + element: , + }, + { + path: "/sign-in", + element: , + }, + { + path: "/sign-up", + element: , + }, + { + path: "/reset-password/:token", + element: , + }, + { + path: "/forget-password", + element: , + }, + { + path: "/otp", + element: , + }, + ]); + return (
    - - {/* public routes */} - }> - } /> - } /> - } /> - } - /> - } /> - } /> - - - {/* private routes */} - }> - } /> - } /> - } /> - - - {/* catch all */} - Not Found
    } /> - +
  • ); }; diff --git a/client/src/context/authContext.ts b/client/src/context/authContext.ts index 96d3c6a..6d13e19 100644 --- a/client/src/context/authContext.ts +++ b/client/src/context/authContext.ts @@ -4,6 +4,7 @@ export interface AuthContextType { signin: () => void; signup: () => void; signout: () => void; + currentUser: string | null; } export const AuthContext = createContext(null); diff --git a/client/src/context/authContextProvider.tsx b/client/src/context/authContextProvider.tsx index feab42b..9cedcc4 100644 --- a/client/src/context/authContextProvider.tsx +++ b/client/src/context/authContextProvider.tsx @@ -1,5 +1,4 @@ import { useCallback, useEffect, useState } from "react"; -import { useCookies } from "react-cookie"; // import authService from "../../services/auth"; import { AuthContext, AuthContextType } from "./authContext"; @@ -10,9 +9,9 @@ interface AuthContextProviderInterface { export const AuthContextProvider = ({ children, }: AuthContextProviderInterface) => { - const [cookies, removeCookie] = useCookies(["jwt"]); - const [isAuthenticated, setIsAuthenticated] = useState(false); - + const [currentUser, setCurrentUser] = useState( + JSON.parse(localStorage.getItem("user") || "null") + ); const signin = useCallback(() => {}); const signout = async () => {}; @@ -21,12 +20,15 @@ export const AuthContextProvider = ({ const verifyTokenValidity = useCallback(() => {}); - useEffect(() => {}); + useEffect(() => { + localStorage.setItem("user", JSON.stringify(currentUser)); + }); const authContextValue: AuthContextType = { signin, signout, signup, + currentUser, }; return ( diff --git a/client/src/main.tsx b/client/src/main.tsx index 8c44ea2..557c069 100644 --- a/client/src/main.tsx +++ b/client/src/main.tsx @@ -7,10 +7,8 @@ import { AuthContextProvider } from "./context/authContextProvider.tsx"; ReactDOM.createRoot(document.getElementById("root")!).render( - - - - - + + + ); diff --git a/client/src/pages/AuthLayout.tsx b/client/src/pages/AuthLayout.tsx deleted file mode 100644 index 457876f..0000000 --- a/client/src/pages/AuthLayout.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { Navigate, Outlet } from "react-router"; - -const AuthLayout = () => { - const isAuthenticated = false; - - return <>{isAuthenticated ? : }; -}; - -export default AuthLayout; diff --git a/client/src/utils/ProtectedRoute.tsx b/client/src/utils/ProtectedRoute.tsx new file mode 100644 index 0000000..c0393f3 --- /dev/null +++ b/client/src/utils/ProtectedRoute.tsx @@ -0,0 +1,12 @@ +import React from "react"; +import { Navigate } from "react-router"; + +const ProtectedRoute = ({ children }: { children: React.ReactNode }) => { + const currentUser = false; + if (!currentUser) { + return ; + } + return children; +}; + +export default ProtectedRoute; From 0a3f4553a0452850352c9447a02bba02a61af4f2 Mon Sep 17 00:00:00 2001 From: DemoTheMann Date: Mon, 4 Mar 2024 10:09:06 +0100 Subject: [PATCH 035/108] created map api handler and service --- client/src/context/authContextProvider.tsx | 2 +- client/src/pages/map/MapPage.tsx | 17 ++++++++++++++++- client/src/services/map.ts | 14 ++++++++++++++ client/src/utils/api/api-handler.ts | 13 +++++++++++++ 4 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 client/src/services/map.ts diff --git a/client/src/context/authContextProvider.tsx b/client/src/context/authContextProvider.tsx index feab42b..5aa7fc0 100644 --- a/client/src/context/authContextProvider.tsx +++ b/client/src/context/authContextProvider.tsx @@ -11,7 +11,7 @@ export const AuthContextProvider = ({ children, }: AuthContextProviderInterface) => { const [cookies, removeCookie] = useCookies(["jwt"]); - const [isAuthenticated, setIsAuthenticated] = useState(false); + const [isAuthenticated, setIsAuthenticated] = useState(true); const signin = useCallback(() => {}); diff --git a/client/src/pages/map/MapPage.tsx b/client/src/pages/map/MapPage.tsx index c264b95..6bd8f4f 100644 --- a/client/src/pages/map/MapPage.tsx +++ b/client/src/pages/map/MapPage.tsx @@ -1,5 +1,20 @@ +import { Icon, divIcon, point } from 'leaflet'; +import { MapContainer, TileLayer, Marker, Popup } from "react-leaflet"; +import MarkerClusterGroup from "react-leaflet-cluster"; + + const MapPage = () => { - return
    MapPage
    ; + + + + return ( +
    +
    MapPage
    +
    + ) + + + }; export default MapPage; diff --git a/client/src/services/map.ts b/client/src/services/map.ts new file mode 100644 index 0000000..bf3d78b --- /dev/null +++ b/client/src/services/map.ts @@ -0,0 +1,14 @@ +import APIHandler from "../utils/api/api-handler"; + +const mapServices = { + getMapInfo: async () => { + try { + const response = await APIHandler.getMap(""); + return response; + } catch (error) { + console.error(error); + } + }, +}; + +export default mapServices; \ No newline at end of file diff --git a/client/src/utils/api/api-handler.ts b/client/src/utils/api/api-handler.ts index dcce6c8..ae9aeda 100644 --- a/client/src/utils/api/api-handler.ts +++ b/client/src/utils/api/api-handler.ts @@ -1,4 +1,5 @@ const API_URL = "http://localhost:3001/api"; +const API_MAP = "https://maksance.alwaysdata.net/jo2024/"; const APIHandler = { get: async (url: string, token: string) => { @@ -51,6 +52,18 @@ const APIHandler = { console.error(error); } }, + getMap: async (url: string) => { + const options = { + method: "GET", + }; + try { + const response = await fetch(`${API_MAP}${url}`, options); + const data = await response.json(); + return data; + } catch (error) { + console.error(error); + } + } }; export default APIHandler; From 3f20fb3895a9b95125927266aeb55587d645d118 Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 4 Mar 2024 11:04:08 +0100 Subject: [PATCH 036/108] refactor: otp mail template --- server/mail/templateOTP.mjs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/server/mail/templateOTP.mjs b/server/mail/templateOTP.mjs index 9f50266..73cd20f 100644 --- a/server/mail/templateOTP.mjs +++ b/server/mail/templateOTP.mjs @@ -1,4 +1,5 @@ -export default function templateOTP (otp) { +export default function templateOTP(otp) { return `
    `; -} \ No newline at end of file + ${otp.split('').map(e => `${e}`).join("")} + `; +} From d676465811d945d96a5da1ecf73ded3955df9a22 Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 4 Mar 2024 11:04:20 +0100 Subject: [PATCH 037/108] refactor: models --- server/models/otp.model.js | 1 + server/models/user.model.js | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/server/models/otp.model.js b/server/models/otp.model.js index 7277dc3..01d50e8 100644 --- a/server/models/otp.model.js +++ b/server/models/otp.model.js @@ -29,6 +29,7 @@ const sendVerificationEmail = async (email, otp) => { throw error; } }; + otpSchema.pre("save", async function (next) { if (this.isNew) { await sendVerificationEmail(this.email, this.otp); diff --git a/server/models/user.model.js b/server/models/user.model.js index 169f533..c20cb30 100644 --- a/server/models/user.model.js +++ b/server/models/user.model.js @@ -11,6 +11,10 @@ const userSchema = new mongoose.Schema({ required: true, unique: true }, + isVerified: { + type: Boolean, + default: false + }, password: { type: String, required: true @@ -49,7 +53,7 @@ const userSchema = new mongoose.Schema({ { statics: { findByEmail (email) { - return this.find({ email: new RegExp(email, 'i') }); + return this.findOne({ email: new RegExp(email, 'i') }); } } }); From c1e0519b543623881dafb8480506c5ed1696fb39 Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 4 Mar 2024 11:04:24 +0100 Subject: [PATCH 038/108] Update package-lock.json --- server/package-lock.json | 92 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/server/package-lock.json b/server/package-lock.json index 3cd1f11..d99bee8 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -14,6 +14,8 @@ "cors": "^2.8.5", "dotenv": "^16.4.1", "express": "^4.18.2", + "express-brute": "^1.0.1", + "express-brute-memcached": "^0.0.1", "jsonwebtoken": "^9.0.2", "mongoose": "^8.1.1", "nodemailer": "^6.9.9", @@ -788,6 +790,11 @@ "node": ">=8" } }, + "node_modules/bisection": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/bisection/-/bisection-0.0.3.tgz", + "integrity": "sha512-7cFxLNWPJ0jkjs1gytOkEAa32hiMm97RMg0lDgsnSBIuY6ewSxLYcyh9+yeaw3785g+fK4xrM7nqOcInRW/YTA==" + }, "node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -1310,6 +1317,42 @@ "node": ">= 0.10.0" } }, + "node_modules/express-brute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/express-brute/-/express-brute-1.0.1.tgz", + "integrity": "sha512-ieZmwox3oIZdQCVjvvnwQvrKQumWdb/JjmC9mWplF42AuHCBXr6Yk/I+nLTRQx+9F+2aapOW9kYLwA6xIlwA9g==", + "dependencies": { + "long-timeout": "~0.1.1", + "underscore": "~1.8.3" + }, + "peerDependencies": { + "express": "4.x" + } + }, + "node_modules/express-brute-memcached": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/express-brute-memcached/-/express-brute-memcached-0.0.1.tgz", + "integrity": "sha512-HhaUHzgKOozyC5x/MeKCCxm2a62gPfS/GvikFShdy+VSHTiva/KrVjyHwXuhPUA0GJ+Ay2UPBsX1qihqwNlHeQ==", + "dependencies": { + "express-brute": "~0.4.2", + "memcached": "~0.2.4", + "underscore": "~1.5.1" + } + }, + "node_modules/express-brute-memcached/node_modules/express-brute": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/express-brute/-/express-brute-0.4.2.tgz", + "integrity": "sha512-ol5cI4kmCRI9tPDd+eWyzh71ntTSpkrWWysxDNpOKoz7fPJy4C7cS4AQ3EiDPzSeLnD4Vj0RzI2Lo9p1pUZaSQ==", + "dependencies": { + "memcached": "~0.2.4", + "underscore": "~1.5.1" + } + }, + "node_modules/express-brute-memcached/node_modules/underscore": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.5.2.tgz", + "integrity": "sha512-yejOFsRnTJs0N9CK5Apzf6maDO2djxGoLLrlZlvGs2o9ZQuhIhDL18rtFyy4FBIbOkzA6+4hDgXbgz5EvDQCXQ==" + }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1523,6 +1566,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hashring": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/hashring/-/hashring-0.0.8.tgz", + "integrity": "sha512-XtpGGkNnsKoWTjFtzDBjxfb6tGnwKCibjCOgOSF/egTE6hLotGoumamaWN9HWK1EnKtvaybEX6lj4/qqmfhLwA==", + "dependencies": { + "bisection": "", + "simple-lru-cache": "0.0.x" + } + }, "node_modules/hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", @@ -1656,6 +1708,14 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/jackpot": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/jackpot/-/jackpot-0.0.6.tgz", + "integrity": "sha512-rbWXX+A9ooq03/dfavLg9OXQ8YB57Wa7PY5c4LfU3CgFpwEhhl3WyXTQVurkaT7zBM5I9SSOaiLyJ4I0DQmC0g==", + "dependencies": { + "retry": "0.6.0" + } + }, "node_modules/jsonc-parser": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", @@ -1772,6 +1832,11 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, + "node_modules/long-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", + "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==" + }, "node_modules/loupe": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", @@ -1812,6 +1877,15 @@ "node": ">= 0.6" } }, + "node_modules/memcached": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/memcached/-/memcached-0.2.8.tgz", + "integrity": "sha512-zXGR8SXcitf0h4I7oeK4qAqtIbFKncDGjL9zIUV4hC7Y8Nb64cf/4McZ5hjcL+7LvZcTdFKQ1yA2BpSeiUyFNg==", + "dependencies": { + "hashring": "0.0.x", + "jackpot": ">=0.0.6" + } + }, "node_modules/memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", @@ -2451,6 +2525,14 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, + "node_modules/retry": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.6.0.tgz", + "integrity": "sha512-RgncoxLF1GqwAzTZs/K2YpZkWrdIYbXsmesdomi+iPilSzjUyr/wzNIuteoTVaWokzdwZIJ9NHRNQa/RUiOB2g==", + "engines": { + "node": "*" + } + }, "node_modules/rollup": { "version": "4.9.6", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", @@ -2658,6 +2740,11 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/simple-lru-cache": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/simple-lru-cache/-/simple-lru-cache-0.0.2.tgz", + "integrity": "sha512-uEv/AFO0ADI7d99OHDmh1QfYzQk/izT1vCmu/riQfh7qjBVUUgRT87E5s5h7CxWCA/+YoZerykpEthzVrW3LIw==" + }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -2867,6 +2954,11 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, + "node_modules/underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==" + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", From 6fa46458bb45ff7a2ef6f6e500471e70ae5eb1af Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 4 Mar 2024 11:04:26 +0100 Subject: [PATCH 039/108] Update package.json --- server/package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/package.json b/server/package.json index 7d3e609..0e40327 100644 --- a/server/package.json +++ b/server/package.json @@ -21,6 +21,8 @@ "cors": "^2.8.5", "dotenv": "^16.4.1", "express": "^4.18.2", + "express-brute": "^1.0.1", + "express-brute-memcached": "^0.0.1", "jsonwebtoken": "^9.0.2", "mongoose": "^8.1.1", "nodemailer": "^6.9.9", From 93aef1193e8509c326580b290aeeb0f2df23ab19 Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 4 Mar 2024 11:04:46 +0100 Subject: [PATCH 040/108] features: brute force protection --- server/routes/auth.routes.js | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/server/routes/auth.routes.js b/server/routes/auth.routes.js index 2c89d0b..5c0de33 100644 --- a/server/routes/auth.routes.js +++ b/server/routes/auth.routes.js @@ -1,15 +1,38 @@ import Router from "express"; import authController from "../controllers/auth.controller.js"; import forgetPasswordController from "../controllers/forgetPassword.controller.js"; +import auth from "../helpers/authMiddleware.js"; import otpController from "../controllers/otp.controller.js"; +import ExpressBrute from "express-brute"; +import MemcachedStore from "express-brute-memcached"; const router = Router(); -router.post("/signin", authController.signin); -router.post("/signup", authController.signup); +var store; -router.post("/send-otp", otpController.sendOTP); -router.post("/forget-password", forgetPasswordController.forgetPassword); -router.post("/reset-password/:token", forgetPasswordController.resetPassword); +if (process.env.ENVIRONMENT == 'dev'){ + store = new ExpressBrute.MemoryStore(); // stores state locally, don't use this in production +} else { + // stores state with memcached + store = new MemcachedStore(['127.0.0.1'], { + prefix: 'NoConflicts' + }); +} -export default router; +var bruteforce = new ExpressBrute(store, { + freeRetries: 5, + minWait: 5*60*1000, // 5 minutes + maxWait: 60*60*1000, // 1 hour, +}); + +router.post("/signin", bruteforce.prevent, authController.signin); +router.post("/signup", bruteforce.prevent, authController.signup); + +router.post("/token", auth.require, authController.token); + +router.post("/send-otp", bruteforce.prevent, otpController.sendOTP); +router.post("/verify-otp", bruteforce.prevent, otpController.verifyOTP); +router.post("/forget-password", bruteforce.prevent, forgetPasswordController.forgetPassword); +router.post("/reset-password/:token", bruteforce.prevent, forgetPasswordController.resetPassword); + +export default router; \ No newline at end of file From f7f3dede418457643f189f7dc943593a49f16162 Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 4 Mar 2024 11:05:07 +0100 Subject: [PATCH 041/108] refactor: otp functions --- server/controllers/otp.controller.js | 4 ++-- server/helpers/authMiddleware.js | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/server/controllers/otp.controller.js b/server/controllers/otp.controller.js index 8ff6bbc..4236340 100644 --- a/server/controllers/otp.controller.js +++ b/server/controllers/otp.controller.js @@ -41,7 +41,7 @@ const otpController = { try { const { email, otp } = req.body; - const otpRecord = await otpModel.findOne({ email, otp }); + const otpRecord = await otpModel.findOneAndDelete({ email, otp }); if (!otpRecord) { return res .status(400) @@ -56,7 +56,7 @@ const otpController = { }); } - await otpRecord.remove(); + const existingUser = await userModel.findOneAndUpdate({ email }, { isVerified: true }); res.status(200).json({ message: "Le code de vérification est valide." }); } catch (error) { diff --git a/server/helpers/authMiddleware.js b/server/helpers/authMiddleware.js index 4cddfb1..c68d093 100644 --- a/server/helpers/authMiddleware.js +++ b/server/helpers/authMiddleware.js @@ -3,7 +3,7 @@ import userModel from "../models/user.model.js"; const auth = { encode: (data) => { - return jwt.sign(data, process.env.PRIVATE, { expiresIn: 1209600 }); + return jwt.sign(data, process.env.PRIVATE, { expiresIn: 60 * 60 * 12 }); }, require: async (req, res, next) => { try { @@ -21,13 +21,22 @@ const auth = { let user = await userModel.findByEmail(userdata.email); - if (!user[0]) + if (!user) { throw { code: 404, message: "Echec d'authentification, l'utilisateur du jeton n'existe pas.", }; - res.locals.user = user[0]; + } + + if (!user.isVerified) { + throw { + code: 403, + message: "OTP not verified", + }; + } + + res.locals.user = user; return next(); } catch (error) { return res From 5e3d34212266a94510d0d88ff1521bf678d4aa5b Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 4 Mar 2024 11:05:42 +0100 Subject: [PATCH 042/108] feature: formdata control --- server/controllers/user.controller.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/server/controllers/user.controller.js b/server/controllers/user.controller.js index 6b73b50..c0612f1 100644 --- a/server/controllers/user.controller.js +++ b/server/controllers/user.controller.js @@ -24,8 +24,12 @@ const userController = { let userdata = res.locals.user; let patchdata = req.body; + let patch = {}; + // Re-encode password - if(patchdata.password) patchdata.password = bcrypt.hashSync(patchdata.password, bcrypt.genSaltSync(11)); + if(patchdata.password && String(patchdata.password).match(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/)) patch.password = bcrypt.hashSync(patchdata.password, bcrypt.genSaltSync(11)); + if(patchdata.name) patch.name = patchdata.name; + if(patchdata.email) patch.email = patchdata.email; await userModel.updateOne({_id: userdata._id}, patchdata); From 3efa310922cfc6a29b6a50197bb60bebea83545f Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 4 Mar 2024 11:06:06 +0100 Subject: [PATCH 043/108] feature: token regen & expire --- server/controllers/auth.controller.js | 53 +++++++++++++++++++-------- 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index ce82fc4..641222f 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -3,18 +3,20 @@ import auth from "../helpers/authMiddleware.js"; import userModel from "../models/user.model.js"; const authController = { - signup: async (req, res) => { + token: async (req, res) => { let userdata = req.body; + let token = auth.encode({ email: userdata.email }); - // const otpResponse = await OTPModel.find({ email: userdata.email }) - // .sort({ createdAt: -1 }) - // .limit(1); - - // if (otpResponse.length === 0 || userdata.otp !== otpResponse[0].otp) { - // return res.status(400).json({ - // message: "Le code de validation n'est pas correct.", - // }); - // } + return res + .status(201) + .json({ + data: { + token: token + }, + }); + }, + signup: async (req, res) => { + let userdata = req.body; if(!userdata.email || !String(userdata.email).toLowerCase().match( /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ @@ -27,6 +29,15 @@ const authController = { }); } + if(!userdata.password || !String(userdata.password).match(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/)) { + return res + .status(401) + .json({ + message: "Le mot de passe doit contenir 8 caractères, au moins une lettre majuscule, une lettre minuscule, un chiffre et un caractère spécial.", + error: 401 + }); + } + userdata.password = bcrypt.hashSync( userdata.password, bcrypt.genSaltSync(11) @@ -40,9 +51,11 @@ const authController = { return res .status(201) - // .cookie("jwt", token, { httpOnly: false }) .json({ message: `Inscription finalisée. Bienvenue ${new_user.name} !`, + data: { + token: token + }, }); } catch (error) { if (error.keyValue && error.keyValue.email) { @@ -71,21 +84,29 @@ const authController = { try { let user = await userModel.findByEmail(userdata.email); - if (!user[0]) { + if (!user) { return res .status(404) .json({ message: "E-mail ou mot de passe incorrect.", error: 404 }); } - user = user[0]; + if (!user.isVerified) { + return res + .status(403) + .json({ message: "OTP not verified.", error: 403 }); + } + const isValid = bcrypt.compareSync(userdata.password, user.password); if (isValid) { let token = auth.encode({ email: user.email }); + req.brute.reset(); // reset brute counter return res .status(200) - // .cookie("jwt", token, { httpOnly: false }) - .json({ message: "Authentification réussie." }); + .json({ message: "Authentification réussie.", + data: { + token: token + } }); } else { return res .status(401) @@ -97,4 +118,4 @@ const authController = { }, }; -export default authController; +export default authController; \ No newline at end of file From 1cf667d17387e62cea26a977119467b8821b32cd Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 4 Mar 2024 11:06:19 +0100 Subject: [PATCH 044/108] refactor: model findByEmail --- server/controllers/forgetPassword.controller.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/controllers/forgetPassword.controller.js b/server/controllers/forgetPassword.controller.js index 6e0371b..d7f2b45 100644 --- a/server/controllers/forgetPassword.controller.js +++ b/server/controllers/forgetPassword.controller.js @@ -15,16 +15,16 @@ const forgetPasswordController = { .json({ message: "Ce compte n'existe pas.", error: 404 }); } - console.log(user[0]._id); + console.log(user._id); - const token = jwt.sign({ email: user[0].email }, process.env.PRIVATE, { + const token = jwt.sign({ email: user.email }, process.env.PRIVATE, { expiresIn: "10m", }); console.log(token); const info = await mailSender( - user[0].email, + user.email, "Mot de passe oublié ? - Flami vient à votre aide !", templateForgotPassword(`${res.domain}/reset-password/${token}`) ); From b3c25b10a8c6baa14beb3b514856ef6a61f47b96 Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 4 Mar 2024 13:59:58 +0100 Subject: [PATCH 045/108] Create flami.model.js --- server/models/flami.model.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 server/models/flami.model.js diff --git a/server/models/flami.model.js b/server/models/flami.model.js new file mode 100644 index 0000000..45efc2f --- /dev/null +++ b/server/models/flami.model.js @@ -0,0 +1,7 @@ +import mongoose from "mongoose"; + +const flamiShema = new mongoose.Schema({ + +}); + +export default mongoose.model("Flami", flamiShema); \ No newline at end of file From 2385a1988f23355be6f1b382dc2231ad640fb1f3 Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 4 Mar 2024 14:00:18 +0100 Subject: [PATCH 046/108] chore: auto create flami linked to user --- server/models/user.model.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/server/models/user.model.js b/server/models/user.model.js index c20cb30..da2a275 100644 --- a/server/models/user.model.js +++ b/server/models/user.model.js @@ -1,4 +1,5 @@ import mongoose from "mongoose"; +import flamiModel from "./flami.model.js"; const userSchema = new mongoose.Schema({ name: { @@ -30,7 +31,7 @@ const userSchema = new mongoose.Schema({ }, flami: { type: Number, - ref: 'Flami' + ref: flamiModel }, badges: { type: Array, @@ -58,4 +59,11 @@ const userSchema = new mongoose.Schema({ } }); +userSchema.pre('save', async function () { + let flami = await flamiModel.create({ + + }); + this.flami = flami._id; +}); + export default mongoose.model("User", userSchema); From 032b27128ab7f8a66db820bb12218fc28b10a491 Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 4 Mar 2024 14:00:22 +0100 Subject: [PATCH 047/108] Update user.controller.js --- server/controllers/user.controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/controllers/user.controller.js b/server/controllers/user.controller.js index c0612f1..ad2add2 100644 --- a/server/controllers/user.controller.js +++ b/server/controllers/user.controller.js @@ -31,7 +31,7 @@ const userController = { if(patchdata.name) patch.name = patchdata.name; if(patchdata.email) patch.email = patchdata.email; - await userModel.updateOne({_id: userdata._id}, patchdata); + await userModel.updateOne({_id: userdata._id}, patch); let token = auth.encode({ email: patchdata.email ?? userdata.email }); return res.status(200).json({ message: "Informations de compte misent à jour.", data: { From 4e356baad25c6dbdb401f9f13e77cdd0e80580de Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 4 Mar 2024 14:00:27 +0100 Subject: [PATCH 048/108] Update otp.controller.js --- server/controllers/otp.controller.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/server/controllers/otp.controller.js b/server/controllers/otp.controller.js index 4236340..fdbb1c0 100644 --- a/server/controllers/otp.controller.js +++ b/server/controllers/otp.controller.js @@ -8,7 +8,7 @@ const otpController = { const { email } = req.body; const existingUser = await userModel.findOne({ email }); - console.log(existingUser); + // console.log(existingUser); if (!existingUser) { return res.status(404).json({ message: "Ce compte n'existe pas." }); } @@ -57,8 +57,11 @@ const otpController = { } const existingUser = await userModel.findOneAndUpdate({ email }, { isVerified: true }); + let token = auth.encode({ email: email }); - res.status(200).json({ message: "Le code de vérification est valide." }); + res.status(200).json({ message: "Le code de vérification est valide.", data: { + token: token + }}); } catch (error) { console.error(error.message); res.status(500).json({ error: error.message }); From f85c3b10657e2d918b1bcde0540759f236143254 Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 4 Mar 2024 15:49:29 +0100 Subject: [PATCH 049/108] refactor --- server/controllers/forgetPassword.controller.js | 4 ++-- server/controllers/otp.controller.js | 2 +- server/controllers/user.controller.js | 11 +++++------ 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/server/controllers/forgetPassword.controller.js b/server/controllers/forgetPassword.controller.js index d7f2b45..a269511 100644 --- a/server/controllers/forgetPassword.controller.js +++ b/server/controllers/forgetPassword.controller.js @@ -15,13 +15,13 @@ const forgetPasswordController = { .json({ message: "Ce compte n'existe pas.", error: 404 }); } - console.log(user._id); + // console.log(user._id); const token = jwt.sign({ email: user.email }, process.env.PRIVATE, { expiresIn: "10m", }); - console.log(token); + // console.log(token); const info = await mailSender( user.email, diff --git a/server/controllers/otp.controller.js b/server/controllers/otp.controller.js index fdbb1c0..377b301 100644 --- a/server/controllers/otp.controller.js +++ b/server/controllers/otp.controller.js @@ -69,4 +69,4 @@ const otpController = { }, }; -export default otpController; +export default otpController; \ No newline at end of file diff --git a/server/controllers/user.controller.js b/server/controllers/user.controller.js index ad2add2..9d8ed38 100644 --- a/server/controllers/user.controller.js +++ b/server/controllers/user.controller.js @@ -22,18 +22,17 @@ const userController = { }, updateAccount: async (req, res) => { let userdata = res.locals.user; - let patchdata = req.body; + const { password, name, email } = req.body; let patch = {}; - // Re-encode password - if(patchdata.password && String(patchdata.password).match(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/)) patch.password = bcrypt.hashSync(patchdata.password, bcrypt.genSaltSync(11)); - if(patchdata.name) patch.name = patchdata.name; - if(patchdata.email) patch.email = patchdata.email; + if(password && String(password).match(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/)) patch.password = bcrypt.hashSync(password, bcrypt.genSaltSync(11)); + if(name) patch.name = name; + if(email) patch.email = email; await userModel.updateOne({_id: userdata._id}, patch); - let token = auth.encode({ email: patchdata.email ?? userdata.email }); + let token = auth.encode({ email: email ?? userdata.email }); return res.status(200).json({ message: "Informations de compte misent à jour.", data: { jwt: token }}); From a62c57ce230edaa00db6499b291437210770a3d6 Mon Sep 17 00:00:00 2001 From: DemoTheMann Date: Mon, 4 Mar 2024 16:26:06 +0100 Subject: [PATCH 050/108] updated map api and display --- client/package-lock.json | 16 ++++++ client/package.json | 1 + client/src/assets/img/pin.png | Bin 0 -> 10683 bytes client/src/assets/styles/main.css | 22 +++++++++ client/src/assets/styles/map.css | 3 ++ client/src/pages/map/MapPage.tsx | 63 ++++++++++++++++++++++-- client/src/services/map.ts | 16 ++++-- client/src/utils/ProtectedRoute.tsx | 2 +- client/src/utils/api/api-handler.ts | 13 +---- client/src/utils/api/map-api-handler.ts | 18 +++++++ client/tailwind.config.js | 4 ++ 11 files changed, 136 insertions(+), 22 deletions(-) create mode 100644 client/src/assets/img/pin.png create mode 100644 client/src/assets/styles/map.css create mode 100644 client/src/utils/api/map-api-handler.ts diff --git a/client/package-lock.json b/client/package-lock.json index 3e69cf3..703ed25 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -25,6 +25,7 @@ "devDependencies": { "@testing-library/react": "^14.1.2", "@testing-library/user-event": "^14.5.2", + "@types/leaflet": "^1.9.8", "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17", "@typescript-eslint/eslint-plugin": "^6.14.0", @@ -1516,6 +1517,12 @@ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, + "node_modules/@types/geojson": { + "version": "7946.0.14", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", + "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==", + "dev": true + }, "node_modules/@types/hoist-non-react-statics": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", @@ -1531,6 +1538,15 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, + "node_modules/@types/leaflet": { + "version": "1.9.8", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.8.tgz", + "integrity": "sha512-EXdsL4EhoUtGm2GC2ZYtXn+Fzc6pluVgagvo2VC1RHWToLGlTRwVYoDpqS/7QXa01rmDyBjJk3Catpf60VMkwg==", + "dev": true, + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/prop-types": { "version": "15.7.11", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", diff --git a/client/package.json b/client/package.json index ff7508a..1beee31 100644 --- a/client/package.json +++ b/client/package.json @@ -28,6 +28,7 @@ "devDependencies": { "@testing-library/react": "^14.1.2", "@testing-library/user-event": "^14.5.2", + "@types/leaflet": "^1.9.8", "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17", "@typescript-eslint/eslint-plugin": "^6.14.0", diff --git a/client/src/assets/img/pin.png b/client/src/assets/img/pin.png new file mode 100644 index 0000000000000000000000000000000000000000..28523586d6f85e79921a934b431a35894f44abfc GIT binary patch literal 10683 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 gjKf { - + const [mapInfo, setMapInfo] = useState([]); + + useEffect(() => { + mapService.getMapInfo().then(result => (setMapInfo(result.data))) + }, []); + + console.log(mapInfo); + + const customIcon = new Icon({ + iconUrl: '/src/assets/img/pin.png', + iconSize: [40,40] + }); + + const createCustomClusterIcon = (cluster) => { + return new divIcon({ + html: `
    ${cluster.getChildCount()}
    `, + className: "custom-marker-cluster", + iconSize: point(33,33, true) + }) + } + + return ( +
    +
    +

    Parcours de la flamme

    +
    +
    + + + + + + + {mapInfo.map(marker => ( + + +

    Étape n°{marker.step}

    +

    {marker.date}

    +
    +
    + ))} + +
    +
    +
    - return ( -
    -
    MapPage
    -
    + ) diff --git a/client/src/services/map.ts b/client/src/services/map.ts index bf3d78b..5cb622b 100644 --- a/client/src/services/map.ts +++ b/client/src/services/map.ts @@ -1,9 +1,17 @@ -import APIHandler from "../utils/api/api-handler"; +import APIMapHandler from "../utils/api/map-api-handler"; -const mapServices = { +const mapService = { getMapInfo: async () => { try { - const response = await APIHandler.getMap(""); + const response = await APIMapHandler.getMap(""); + return response; + } catch (error) { + console.error(error); + } + }, + getCurrentStep: async () => { + try { + const response = await APIMapHandler.getMap("/where"); return response; } catch (error) { console.error(error); @@ -11,4 +19,4 @@ const mapServices = { }, }; -export default mapServices; \ No newline at end of file +export default mapService; \ No newline at end of file diff --git a/client/src/utils/ProtectedRoute.tsx b/client/src/utils/ProtectedRoute.tsx index c0393f3..344f90a 100644 --- a/client/src/utils/ProtectedRoute.tsx +++ b/client/src/utils/ProtectedRoute.tsx @@ -2,7 +2,7 @@ import React from "react"; import { Navigate } from "react-router"; const ProtectedRoute = ({ children }: { children: React.ReactNode }) => { - const currentUser = false; + const currentUser = true; if (!currentUser) { return ; } diff --git a/client/src/utils/api/api-handler.ts b/client/src/utils/api/api-handler.ts index ae9aeda..38ad251 100644 --- a/client/src/utils/api/api-handler.ts +++ b/client/src/utils/api/api-handler.ts @@ -52,18 +52,7 @@ const APIHandler = { console.error(error); } }, - getMap: async (url: string) => { - const options = { - method: "GET", - }; - try { - const response = await fetch(`${API_MAP}${url}`, options); - const data = await response.json(); - return data; - } catch (error) { - console.error(error); - } - } + }; export default APIHandler; diff --git a/client/src/utils/api/map-api-handler.ts b/client/src/utils/api/map-api-handler.ts new file mode 100644 index 0000000..8a7b8ad --- /dev/null +++ b/client/src/utils/api/map-api-handler.ts @@ -0,0 +1,18 @@ +const API_MAP = "https://maksance.alwaysdata.net/jo2024/"; + +const APIMapHandler = { + getMap: async (url: string) => { + const options = { + method: "GET", + }; + try { + const response = await fetch(`${API_MAP}${url}`, options); + const data = await response.json(); + return data; + } catch (error) { + console.error(error); + } + } +} + +export default APIMapHandler; diff --git a/client/tailwind.config.js b/client/tailwind.config.js index ef18ea5..8137ca0 100644 --- a/client/tailwind.config.js +++ b/client/tailwind.config.js @@ -89,6 +89,10 @@ export default { 100: "100%", 90: "90%", }, + height: { + 100: "100%", + 50: "50%", + } }, plugins: [], }; From 5b0ace7fc71c1dc1839f5e282151798de8e9ab9e Mon Sep 17 00:00:00 2001 From: DemoTheMann Date: Mon, 4 Mar 2024 16:28:59 +0100 Subject: [PATCH 051/108] fixed last push --- client/src/pages/map/MapPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/pages/map/MapPage.tsx b/client/src/pages/map/MapPage.tsx index a2a223c..c5a9990 100644 --- a/client/src/pages/map/MapPage.tsx +++ b/client/src/pages/map/MapPage.tsx @@ -63,7 +63,7 @@ const MapPage = () => { - +
    ) From d8a4aaccccafd73e8dde695075d90a854e84c2a7 Mon Sep 17 00:00:00 2001 From: Akeko Date: Mon, 4 Mar 2024 16:51:26 +0100 Subject: [PATCH 052/108] refactor(auth): link signup back to front --- client/package-lock.json | 24 ++++ client/package.json | 1 + client/src/App.tsx | 76 ++++--------- .../src/components/auth/signup/SignupForm.tsx | 23 +--- .../auth/signup/signup-steps/StepFour.tsx | 45 ++++---- .../auth/signup/signup-steps/StepOne.tsx | 6 +- .../auth/signup/signup-steps/StepThree.tsx | 8 +- .../auth/signup/signup-steps/StepTwo.tsx | 8 +- client/src/context/authContext.ts | 3 +- client/src/context/authContextProvider.tsx | 21 +++- client/src/hooks/{useAuth.jsx => useAuth.tsx} | 0 client/src/interfaces/api-body/signin-body.ts | 4 + .../signup-body.ts} | 9 +- .../interfaces/api-response/api-response.ts | 3 + .../interfaces/api-response/error-response.ts | 4 + .../api-response/register-reponse.ts | 4 + client/src/main.tsx | 10 +- client/src/pages/RootLayout.tsx | 4 +- client/src/utils/api/api-handler.ts | 103 +++++++----------- client/src/utils/constants.ts | 1 + .../{ => protected-route}/ProtectedRoute.tsx | 0 server/controllers/auth.controller.js | 77 ++++++------- 22 files changed, 212 insertions(+), 222 deletions(-) rename client/src/hooks/{useAuth.jsx => useAuth.tsx} (100%) create mode 100644 client/src/interfaces/api-body/signin-body.ts rename client/src/interfaces/{userInterface.ts => api-body/signup-body.ts} (58%) create mode 100644 client/src/interfaces/api-response/api-response.ts create mode 100644 client/src/interfaces/api-response/error-response.ts create mode 100644 client/src/interfaces/api-response/register-reponse.ts rename client/src/utils/{ => protected-route}/ProtectedRoute.tsx (100%) diff --git a/client/package-lock.json b/client/package-lock.json index 3e69cf3..cd11f63 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -15,6 +15,7 @@ "react": "^18.2.0", "react-cookie": "^7.0.2", "react-dom": "^18.2.0", + "react-hot-toast": "^2.4.1", "react-leaflet": "^4.2.1", "react-leaflet-cluster": "^2.1.0", "react-line-awesome": "^1.4.1", @@ -3397,6 +3398,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/goober": { + "version": "2.1.14", + "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.14.tgz", + "integrity": "sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==", + "peerDependencies": { + "csstype": "^3.0.10" + } + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -4983,6 +4992,21 @@ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" }, + "node_modules/react-hot-toast": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.4.1.tgz", + "integrity": "sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==", + "dependencies": { + "goober": "^2.1.10" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", diff --git a/client/package.json b/client/package.json index ff7508a..847a4cd 100644 --- a/client/package.json +++ b/client/package.json @@ -18,6 +18,7 @@ "react": "^18.2.0", "react-cookie": "^7.0.2", "react-dom": "^18.2.0", + "react-hot-toast": "^2.4.1", "react-leaflet": "^4.2.1", "react-leaflet-cluster": "^2.1.0", "react-line-awesome": "^1.4.1", diff --git a/client/src/App.tsx b/client/src/App.tsx index 78c0e90..802ce04 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,5 +1,4 @@ -import { Route, RouterProvider, Routes } from "react-router"; -import AuthLayout from "./pages/AuthLayout"; +import { Outlet, Route, RouterProvider, Routes } from "react-router"; import RootLayout from "./pages/RootLayout"; import ForgetPasswordPage from "./pages/auth/ForgetPasswordPage"; import OtpPage from "./pages/auth/OtpPage"; @@ -11,61 +10,32 @@ import FlamiPage from "./pages/flami/FlamiPage"; import MapPage from "./pages/map/MapPage"; import ProfilePage from "./pages/profile/ProfilePage"; import { createBrowserRouter } from "react-router-dom"; -import ProtectedRoute from "./utils/ProtectedRoute"; +import ProtectedRoute from "./utils/protected-route/ProtectedRoute"; +import { AuthContextProvider } from "./context/authContextProvider"; const App = () => { - const router = createBrowserRouter([ - { - path: "/", - element: ( - - - - ), - children: [ - { - path: "/", - element: , - }, - { - path: "/map", - element: , - }, - { - path: "/profile", - element: , - }, - ], - }, - { - path: "/welcome", - element: , - }, - { - path: "/sign-in", - element: , - }, - { - path: "/sign-up", - element: , - }, - { - path: "/reset-password/:token", - element: , - }, - { - path: "/forget-password", - element: , - }, - { - path: "/otp", - element: , - }, - ]); - return (
    - + + + + + } + > + } /> + } /> + } /> + + } /> + } /> + } /> + } /> + } /> + } /> +
    ); }; diff --git a/client/src/components/auth/signup/SignupForm.tsx b/client/src/components/auth/signup/SignupForm.tsx index 639fa32..381dbcd 100644 --- a/client/src/components/auth/signup/SignupForm.tsx +++ b/client/src/components/auth/signup/SignupForm.tsx @@ -3,26 +3,13 @@ import StepFour from "./signup-steps/StepFour"; import StepOne from "./signup-steps/StepOne"; import StepThree from "./signup-steps/StepThree"; import StepTwo from "./signup-steps/StepTwo"; - -export interface UserSignupInterface { - email: string; - name: string; - password: string; - confirmPassword?: string; - age: string; - metadata: { - favorite_sport: string; - origin: string; - intent: string; - }; -} +import { SignupBody } from "../../../interfaces/api-body/signup-body"; const SignupForm = () => { - const [data, setData] = useState({ + const [data, setData] = useState({ email: "", name: "", password: "", - confirmPassword: "", age: "", metadata: { favorite_sport: "", @@ -36,11 +23,11 @@ const SignupForm = () => { "next" ); - const sendRequest = (formData: UserSignupInterface) => { + const sendRequest = (formData: SignupBody) => { console.log("Form Submitted", formData); }; - const handleNextStep = (newData: UserSignupInterface, final = false) => { + const handleNextStep = (newData: SignupBody, final = false) => { setData((prev) => ({ ...prev, ...newData })); setAnimationDirection("next"); @@ -51,7 +38,7 @@ const SignupForm = () => { setCurrentStep((prev) => prev + 1); }; - const handlePrevStep = (newData: UserSignupInterface) => { + const handlePrevStep = (newData: SignupBody) => { setData((prev) => ({ ...prev, ...newData })); setAnimationDirection("prev"); setCurrentStep((prev) => prev - 1); diff --git a/client/src/components/auth/signup/signup-steps/StepFour.tsx b/client/src/components/auth/signup/signup-steps/StepFour.tsx index 175476d..59998d5 100644 --- a/client/src/components/auth/signup/signup-steps/StepFour.tsx +++ b/client/src/components/auth/signup/signup-steps/StepFour.tsx @@ -1,11 +1,11 @@ -import { Field, Form, Formik, FormikHelpers } from "formik"; +import { Field, Form, Formik } from "formik"; import { motion } from "framer-motion"; import { useState } from "react"; import { ArrowLeftIcon, EyeIcon, EyeSlashIcon } from "react-line-awesome"; -import { useNavigate } from "react-router"; import * as Yup from "yup"; import { Button, Reveal } from "../../../ui"; -import { UserSignupInterface } from "../SignupForm"; +import { SignupBody } from "../../../../interfaces/api-body/signup-body"; +import { useAuth } from "../../../../hooks/useAuth"; const lastStepValidationSchema = Yup.object().shape({ name: Yup.string().required("Le nom est obligatoire.").trim(), @@ -37,36 +37,37 @@ const StepFour = ({ data, animDir, }: { - nextStep: (newData: UserSignupInterface, final?: boolean) => void; - prevStep: (newData: UserSignupInterface) => void; - data: UserSignupInterface; + nextStep: (newData: SignupBody, final?: boolean) => void; + prevStep: (newData: SignupBody) => void; + data: SignupBody; animDir: "next" | "prev"; }) => { const [showPassword, setShowPassword] = useState(false); const [showConfirmPassword, setShowConfirmPassword] = useState(false); - const navigate = useNavigate(); - - const handleSubmit = ( - values: UserSignupInterface, - actions: FormikHelpers - ) => { - const { confirmPassword, ...userData } = values; - - nextStep(userData, true); - - navigate("/otp"); - actions.setSubmitting(false); - }; + const auth = useAuth(); return ( ) => - handleSubmit(values, actions) - } + onSubmit={(values, actions) => { + const { name, email, password, age, metadata } = values; + + const SignupBody: SignupBody = { + name, + email, + password, + age, + metadata, + }; + + nextStep(SignupBody, true); + + auth.signup(SignupBody); + actions.setSubmitting(false); + }} > {({ errors, touched, isValid, dirty }) => ( diff --git a/client/src/components/auth/signup/signup-steps/StepOne.tsx b/client/src/components/auth/signup/signup-steps/StepOne.tsx index e9a6f27..1e731b8 100644 --- a/client/src/components/auth/signup/signup-steps/StepOne.tsx +++ b/client/src/components/auth/signup/signup-steps/StepOne.tsx @@ -4,7 +4,7 @@ import { useEffect, useState } from "react"; import { ArrowLeftIcon } from "react-line-awesome"; import { useNavigate } from "react-router"; import { Button, Reveal } from "../../../ui"; -import { UserSignupInterface } from "../SignupForm"; +import { SignupBody } from "../../../../interfaces/api-body/signup-body"; const choices = { fav_sport: [ @@ -24,8 +24,8 @@ const StepOne = ({ data, animDir, }: { - nextStep: (newData: UserSignupInterface) => void; - data: UserSignupInterface; + nextStep: (newData: SignupBody) => void; + data: SignupBody; animDir: "next" | "prev"; }) => { const [clickedIndex, setClickedIndex] = useState(-1); diff --git a/client/src/components/auth/signup/signup-steps/StepThree.tsx b/client/src/components/auth/signup/signup-steps/StepThree.tsx index 74b9a74..7cc701f 100644 --- a/client/src/components/auth/signup/signup-steps/StepThree.tsx +++ b/client/src/components/auth/signup/signup-steps/StepThree.tsx @@ -3,7 +3,7 @@ import { motion } from "framer-motion"; import { useEffect, useState } from "react"; import { ArrowLeftIcon } from "react-line-awesome"; import { Button, Reveal } from "../../../ui"; -import { UserSignupInterface } from "../SignupForm"; +import { SignupBody } from "../../../../interfaces/api-body/signup-body"; const choices = { fav_sport: [ @@ -24,9 +24,9 @@ const StepThree = ({ data, animDir, }: { - nextStep: (newData: UserSignupInterface, final?: boolean) => void; - prevStep: (newData: UserSignupInterface) => void; - data: UserSignupInterface; + nextStep: (newData: SignupBody, final?: boolean) => void; + prevStep: (newData: SignupBody) => void; + data: SignupBody; animDir: "next" | "prev"; }) => { const [clickedIndex, setClickedIndex] = useState(-1); diff --git a/client/src/components/auth/signup/signup-steps/StepTwo.tsx b/client/src/components/auth/signup/signup-steps/StepTwo.tsx index 6e72892..2586026 100644 --- a/client/src/components/auth/signup/signup-steps/StepTwo.tsx +++ b/client/src/components/auth/signup/signup-steps/StepTwo.tsx @@ -3,7 +3,7 @@ import { motion } from "framer-motion"; import { useEffect, useState } from "react"; import { ArrowLeftIcon } from "react-line-awesome"; import { Button, Reveal } from "../../../ui"; -import { UserSignupInterface } from "../SignupForm"; +import { SignupBody } from "../../../../interfaces/api-body/signup-body"; const choices = { fav_sport: [ @@ -24,9 +24,9 @@ const StepTwo = ({ data, animDir, }: { - nextStep: (newData: UserSignupInterface) => void; - prevStep: (newData: UserSignupInterface) => void; - data: UserSignupInterface; + nextStep: (newData: SignupBody) => void; + prevStep: (newData: SignupBody) => void; + data: SignupBody; animDir: "next" | "prev"; }) => { const [clickedIndex, setClickedIndex] = useState(-1); diff --git a/client/src/context/authContext.ts b/client/src/context/authContext.ts index 6d13e19..479144c 100644 --- a/client/src/context/authContext.ts +++ b/client/src/context/authContext.ts @@ -1,8 +1,9 @@ import { createContext } from "react"; +import { SignupBody } from "../interfaces/api-body/signup-body"; export interface AuthContextType { signin: () => void; - signup: () => void; + signup: (body: SignupBody) => void; signout: () => void; currentUser: string | null; } diff --git a/client/src/context/authContextProvider.tsx b/client/src/context/authContextProvider.tsx index 9cedcc4..169b14d 100644 --- a/client/src/context/authContextProvider.tsx +++ b/client/src/context/authContextProvider.tsx @@ -1,6 +1,9 @@ import { useCallback, useEffect, useState } from "react"; -// import authService from "../../services/auth"; import { AuthContext, AuthContextType } from "./authContext"; +import { SignupBody } from "../interfaces/api-body/signup-body"; +import { APIHandler } from "../utils/api/api-handler"; +import { RegisterResponse } from "../interfaces/api-response/register-reponse"; +import { useNavigate } from "react-router"; interface AuthContextProviderInterface { children: React.ReactNode; @@ -12,11 +15,25 @@ export const AuthContextProvider = ({ const [currentUser, setCurrentUser] = useState( JSON.parse(localStorage.getItem("user") || "null") ); + + const navigate = useNavigate(); + const signin = useCallback(() => {}); const signout = async () => {}; - const signup = async () => {}; + const signup = async (body: SignupBody) => { + APIHandler( + "/auth/signup", + currentUser, + "post", + body + ).then((response) => { + navigate("/otp"); + + console.log(response); + }); + }; const verifyTokenValidity = useCallback(() => {}); diff --git a/client/src/hooks/useAuth.jsx b/client/src/hooks/useAuth.tsx similarity index 100% rename from client/src/hooks/useAuth.jsx rename to client/src/hooks/useAuth.tsx diff --git a/client/src/interfaces/api-body/signin-body.ts b/client/src/interfaces/api-body/signin-body.ts new file mode 100644 index 0000000..9314743 --- /dev/null +++ b/client/src/interfaces/api-body/signin-body.ts @@ -0,0 +1,4 @@ +export interface SigninBody { + email: string; + password: string; +} diff --git a/client/src/interfaces/userInterface.ts b/client/src/interfaces/api-body/signup-body.ts similarity index 58% rename from client/src/interfaces/userInterface.ts rename to client/src/interfaces/api-body/signup-body.ts index b990ef7..06ab954 100644 --- a/client/src/interfaces/userInterface.ts +++ b/client/src/interfaces/api-body/signup-body.ts @@ -1,15 +1,12 @@ -interface UserInterface { - _id: string; +export interface SignupBody { name: string; email: string; password: string; - age: number; - date: Date; + confirmPassword?: string; + age: string; metadata: { favorite_sport: string; origin: string; intent: string; }; } - -export default UserInterface; diff --git a/client/src/interfaces/api-response/api-response.ts b/client/src/interfaces/api-response/api-response.ts new file mode 100644 index 0000000..3db5cbb --- /dev/null +++ b/client/src/interfaces/api-response/api-response.ts @@ -0,0 +1,3 @@ +export interface ApiResponse { + data: T; +} diff --git a/client/src/interfaces/api-response/error-response.ts b/client/src/interfaces/api-response/error-response.ts new file mode 100644 index 0000000..67159f1 --- /dev/null +++ b/client/src/interfaces/api-response/error-response.ts @@ -0,0 +1,4 @@ +export interface ErrorResponse { + message: string; + error: number; +} diff --git a/client/src/interfaces/api-response/register-reponse.ts b/client/src/interfaces/api-response/register-reponse.ts new file mode 100644 index 0000000..5911702 --- /dev/null +++ b/client/src/interfaces/api-response/register-reponse.ts @@ -0,0 +1,4 @@ +export interface RegisterResponse { + message: string; + success: string; +} diff --git a/client/src/main.tsx b/client/src/main.tsx index 557c069..b6282c9 100644 --- a/client/src/main.tsx +++ b/client/src/main.tsx @@ -1,14 +1,16 @@ import React from "react"; import ReactDOM from "react-dom/client"; -import { BrowserRouter } from "react-router-dom"; import App from "./App.tsx"; import "./assets/styles/main.css"; import { AuthContextProvider } from "./context/authContextProvider.tsx"; +import { BrowserRouter } from "react-router-dom"; ReactDOM.createRoot(document.getElementById("root")!).render( - - - + + + + + ); diff --git a/client/src/pages/RootLayout.tsx b/client/src/pages/RootLayout.tsx index 96fc5b0..96ed0da 100644 --- a/client/src/pages/RootLayout.tsx +++ b/client/src/pages/RootLayout.tsx @@ -1,6 +1,6 @@ import { Outlet } from "react-router"; -const RootLayout = () => { +const AuthLayout = () => { return (
    @@ -8,4 +8,4 @@ const RootLayout = () => { ); }; -export default RootLayout; +export default AuthLayout; diff --git a/client/src/utils/api/api-handler.ts b/client/src/utils/api/api-handler.ts index ae9aeda..569f13b 100644 --- a/client/src/utils/api/api-handler.ts +++ b/client/src/utils/api/api-handler.ts @@ -1,69 +1,40 @@ -const API_URL = "http://localhost:3001/api"; -const API_MAP = "https://maksance.alwaysdata.net/jo2024/"; +import { url } from "../constants"; +import { ApiResponse } from "../../interfaces/api-response/api-response"; +import { ErrorResponse } from "../../interfaces/api-response/error-response"; +import toast from "react-hot-toast"; -const APIHandler = { - get: async (url: string, token: string) => { - const options = { - method: "GET", - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${token}`, - }, - }; - try { - const response = await fetch(`${API_URL}${url}`, options); - const data = await response.json(); - return data; - } catch (error) { - console.error(error); - } - }, - post: async (url: string, data: string = "", token?: string) => { - const options = { - method: "POST", - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${token}`, - }, - body: JSON.stringify(data), - }; - try { - const response = await fetch(`${API_URL}${url}`, options); - const data = await response.json(); - return data; - } catch (error) { - console.error(error); - } - }, - patch: async (url: string, data: string = "", token: string) => { - const options = { - method: "PATCH", - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${token}`, - }, - body: JSON.stringify(data), - }; - try { - const response = await fetch(`${API_URL}${url}`, options); - const data = await response.json(); - return data; - } catch (error) { - console.error(error); - } - }, - getMap: async (url: string) => { - const options = { - method: "GET", - }; - try { - const response = await fetch(`${API_MAP}${url}`, options); - const data = await response.json(); - return data; - } catch (error) { - console.error(error); - } +type HTTPMethod = "get" | "post" | "patch"; + +export const APIHandler = ( + endpoint: string, + token: string | null, + method: HTTPMethod = "get", + body: unknown = undefined +): Promise> => { + const headers = new Headers(); + headers.append("Content-Type", "application/json"); + if (token) { + headers.append("Authorization", `Bearer ${token}`); + } + const options: RequestInit = { + method, + headers, + }; + if (body) { + options.body = JSON.stringify(body); } + return new Promise((resolve) => { + fetch(`${url}${endpoint}`, options).then((res) => { + if (res.ok) { + return res.json().then((data) => { + resolve(data); + }); + } else { + res.json().then((data: ErrorResponse) => { + toast.error(data.message); + throw new Error(data.message); + }); + } + }); + }); }; - -export default APIHandler; diff --git a/client/src/utils/constants.ts b/client/src/utils/constants.ts index 4f03a76..56f6b1e 100644 --- a/client/src/utils/constants.ts +++ b/client/src/utils/constants.ts @@ -1 +1,2 @@ export const RE_DIGIT = new RegExp(/^\d+$/); +export const url = "http://localhost:3001/api"; diff --git a/client/src/utils/ProtectedRoute.tsx b/client/src/utils/protected-route/ProtectedRoute.tsx similarity index 100% rename from client/src/utils/ProtectedRoute.tsx rename to client/src/utils/protected-route/ProtectedRoute.tsx diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 641222f..80f5fb5 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -7,34 +7,39 @@ const authController = { let userdata = req.body; let token = auth.encode({ email: userdata.email }); - return res - .status(201) - .json({ - data: { - token: token - }, - }); + return res.status(201).json({ + data: { + token: token, + }, + }); }, signup: async (req, res) => { let userdata = req.body; - if(!userdata.email || !String(userdata.email).toLowerCase().match( - /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ - )) { - return res - .status(401) - .json({ + if ( + !userdata.email || + !String(userdata.email) + .toLowerCase() + .match( + /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + ) + ) { + return res.status(401).json({ message: `E-mail invalide.`, - error: 401 + error: 401, }); } - if(!userdata.password || !String(userdata.password).match(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/)) { - return res - .status(401) - .json({ - message: "Le mot de passe doit contenir 8 caractères, au moins une lettre majuscule, une lettre minuscule, un chiffre et un caractère spécial.", - error: 401 + if ( + !userdata.password || + !String(userdata.password).match( + /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/ + ) + ) { + return res.status(401).json({ + message: + "Le mot de passe doit contenir 8 caractères, au moins une lettre majuscule, une lettre minuscule, un chiffre et un caractère spécial.", + error: 401, }); } @@ -49,14 +54,12 @@ const authController = { await new_user.save(); let token = auth.encode({ email: new_user.email }); - return res - .status(201) - .json({ - message: `Inscription finalisée. Bienvenue ${new_user.name} !`, - data: { - token: token - }, - }); + return res.status(201).json({ + message: `Inscription finalisée. Bienvenue ${new_user.name} !`, + data: { + token: token, + }, + }); } catch (error) { if (error.keyValue && error.keyValue.email) { return res.status(409).json({ @@ -92,8 +95,8 @@ const authController = { if (!user.isVerified) { return res - .status(403) - .json({ message: "OTP not verified.", error: 403 }); + .status(403) + .json({ message: "OTP not verified.", error: 403 }); } const isValid = bcrypt.compareSync(userdata.password, user.password); @@ -101,12 +104,12 @@ const authController = { if (isValid) { let token = auth.encode({ email: user.email }); req.brute.reset(); // reset brute counter - return res - .status(200) - .json({ message: "Authentification réussie.", - data: { - token: token - } }); + return res.status(200).json({ + message: "Authentification réussie.", + data: { + token: token, + }, + }); } else { return res .status(401) @@ -118,4 +121,4 @@ const authController = { }, }; -export default authController; \ No newline at end of file +export default authController; From ffcbf1a2967bc0b9fa260e0622dbfc5e56921456 Mon Sep 17 00:00:00 2001 From: Akeko Date: Tue, 5 Mar 2024 13:53:31 +0100 Subject: [PATCH 053/108] style(map): change style map --- client/src/App.tsx | 6 +- client/src/assets/styles/main.css | 12 +-- client/src/assets/styles/map.css | 4 +- client/src/context/authContext.ts | 2 +- client/src/context/authContextProvider.tsx | 23 +++-- client/src/pages/map/MapPage.tsx | 86 +++++++++---------- .../utils/protected-route/ProtectedRoute.tsx | 4 +- client/tailwind.config.js | 38 ++++---- 8 files changed, 79 insertions(+), 96 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index 802ce04..64ff383 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,4 +1,4 @@ -import { Outlet, Route, RouterProvider, Routes } from "react-router"; +import { Route, Routes } from "react-router"; import RootLayout from "./pages/RootLayout"; import ForgetPasswordPage from "./pages/auth/ForgetPasswordPage"; import OtpPage from "./pages/auth/OtpPage"; @@ -9,9 +9,8 @@ import WelcomePage from "./pages/auth/WelcomePage"; import FlamiPage from "./pages/flami/FlamiPage"; import MapPage from "./pages/map/MapPage"; import ProfilePage from "./pages/profile/ProfilePage"; -import { createBrowserRouter } from "react-router-dom"; import ProtectedRoute from "./utils/protected-route/ProtectedRoute"; -import { AuthContextProvider } from "./context/authContextProvider"; +import { Toaster } from "react-hot-toast"; const App = () => { return ( @@ -36,6 +35,7 @@ const App = () => { } /> } /> + ); }; diff --git a/client/src/assets/styles/main.css b/client/src/assets/styles/main.css index 6a6b23a..ec0f7dc 100644 --- a/client/src/assets/styles/main.css +++ b/client/src/assets/styles/main.css @@ -56,11 +56,7 @@ font-display: swap; } -/* main { - min-height: 100dvh !important; -} */ - -section { +.map-page { height: 100dvh !important; } @@ -69,11 +65,11 @@ section { width: 3rem; border-radius: 50%; background-color: orange; - /* background-image: url(./img/fire.png); */ - transform: translate(-25%,-25%); + background-image: url(./img/fire.png); + transform: translate(-25%, -25%); display: flex; align-items: center; justify-content: center; font-weight: 900; font-size: 1.2rem; -} \ No newline at end of file +} diff --git a/client/src/assets/styles/map.css b/client/src/assets/styles/map.css index c82c440..9c13b29 100644 --- a/client/src/assets/styles/map.css +++ b/client/src/assets/styles/map.css @@ -1,3 +1,3 @@ .leaflet-container { - height: 100% !important; -} \ No newline at end of file + height: 100% !important; +} diff --git a/client/src/context/authContext.ts b/client/src/context/authContext.ts index 479144c..cd599b7 100644 --- a/client/src/context/authContext.ts +++ b/client/src/context/authContext.ts @@ -5,7 +5,7 @@ export interface AuthContextType { signin: () => void; signup: (body: SignupBody) => void; signout: () => void; - currentUser: string | null; + token: string | null; } export const AuthContext = createContext(null); diff --git a/client/src/context/authContextProvider.tsx b/client/src/context/authContextProvider.tsx index 169b14d..ed1763a 100644 --- a/client/src/context/authContextProvider.tsx +++ b/client/src/context/authContextProvider.tsx @@ -12,7 +12,7 @@ interface AuthContextProviderInterface { export const AuthContextProvider = ({ children, }: AuthContextProviderInterface) => { - const [currentUser, setCurrentUser] = useState( + const [token, setToken] = useState( JSON.parse(localStorage.getItem("user") || "null") ); @@ -23,29 +23,26 @@ export const AuthContextProvider = ({ const signout = async () => {}; const signup = async (body: SignupBody) => { - APIHandler( - "/auth/signup", - currentUser, - "post", - body - ).then((response) => { - navigate("/otp"); - - console.log(response); - }); + APIHandler("/auth/signup", token, "post", body).then( + (response) => { + navigate("/otp"); + + console.log(response); + } + ); }; const verifyTokenValidity = useCallback(() => {}); useEffect(() => { - localStorage.setItem("user", JSON.stringify(currentUser)); + localStorage.setItem("user", JSON.stringify(token)); }); const authContextValue: AuthContextType = { signin, signout, signup, - currentUser, + token, }; return ( diff --git a/client/src/pages/map/MapPage.tsx b/client/src/pages/map/MapPage.tsx index c5a9990..52b4539 100644 --- a/client/src/pages/map/MapPage.tsx +++ b/client/src/pages/map/MapPage.tsx @@ -1,73 +1,67 @@ -import { useEffect, useState } from 'react' +import { useEffect, useState } from "react"; -import mapService from '../../services/map'; -import '../../assets/styles/map.css'; +import mapService from "../../services/map"; +import "../../assets/styles/map.css"; -import { Icon, divIcon, point } from 'leaflet'; +import { Icon, divIcon, point } from "leaflet"; import { MapContainer, TileLayer, Marker, Popup } from "react-leaflet"; import MarkerClusterGroup from "react-leaflet-cluster"; import "leaflet/dist/leaflet.css"; - const MapPage = () => { const [mapInfo, setMapInfo] = useState([]); useEffect(() => { - mapService.getMapInfo().then(result => (setMapInfo(result.data))) + mapService.getMapInfo().then((result) => setMapInfo(result.data)); }, []); console.log(mapInfo); const customIcon = new Icon({ - iconUrl: '/src/assets/img/pin.png', - iconSize: [40,40] + iconUrl: "/src/assets/img/pin.png", + iconSize: [40, 40], }); const createCustomClusterIcon = (cluster) => { return new divIcon({ html: `
    ${cluster.getChildCount()}
    `, className: "custom-marker-cluster", - iconSize: point(33,33, true) - }) - } - - return ( -
    -
    -

    Parcours de la flamme

    -
    -
    - - - - - +

    Parcours de la flamme

    + +
    + + + + - - {mapInfo.map(marker => ( - - -

    Étape n°{marker.step}

    -

    {marker.date}

    -
    -
    - ))} - -
    - -
    + {mapInfo.map((marker, index) => ( + + +

    Étape n°{marker.step}

    +

    {marker.date}

    +
    +
    + ))} + + +
    - -
    - ) - - - + ); }; export default MapPage; diff --git a/client/src/utils/protected-route/ProtectedRoute.tsx b/client/src/utils/protected-route/ProtectedRoute.tsx index 344f90a..feee09e 100644 --- a/client/src/utils/protected-route/ProtectedRoute.tsx +++ b/client/src/utils/protected-route/ProtectedRoute.tsx @@ -2,8 +2,8 @@ import React from "react"; import { Navigate } from "react-router"; const ProtectedRoute = ({ children }: { children: React.ReactNode }) => { - const currentUser = true; - if (!currentUser) { + const token = true; + if (!token) { return ; } return children; diff --git a/client/tailwind.config.js b/client/tailwind.config.js index 8137ca0..9f74cea 100644 --- a/client/tailwind.config.js +++ b/client/tailwind.config.js @@ -70,29 +70,25 @@ export default { 950: "#292929", }, }, - }, - fontFamily: { - roboto: ["Roboto", "sans-serif"], - }, + fontFamily: { + roboto: ["Roboto", "sans-serif"], + }, - boxShadow: { - primary: "0px 6px 0px #ffbd1b", - secondary: "0px 6px 0px #989898", - none: "none", - "tree-poppy-500": "0px 6px 0px #ff9900", - "tree-poppy-500-press": "0px 2px 0px #ff9900", - }, - borderWidth: { - 3: "3px", - }, - width: { - 100: "100%", - 90: "90%", + boxShadow: { + primary: "0px 6px 0px #ffbd1b", + secondary: "0px 6px 0px #989898", + none: "none", + "tree-poppy-500": "0px 6px 0px #ff9900", + "tree-poppy-500-press": "0px 2px 0px #ff9900", + }, + borderWidth: { + 3: "3px", + }, + width: { + 100: "100%", + 90: "90%", + }, }, - height: { - 100: "100%", - 50: "50%", - } }, plugins: [], }; From e9854e397aa37b16980f65dae28e97f56e08ecbc Mon Sep 17 00:00:00 2001 From: Akeko Date: Tue, 5 Mar 2024 15:21:43 +0100 Subject: [PATCH 054/108] refactor(api): change caller api --- .../src/components/auth/signup/SignupForm.tsx | 1 + .../auth/signup/signup-steps/StepFour.tsx | 1 + client/src/context/authContext.ts | 3 ++- client/src/context/authContextProvider.tsx | 17 +++++++++-------- client/src/utils/api/api-handler.ts | 5 +++-- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/client/src/components/auth/signup/SignupForm.tsx b/client/src/components/auth/signup/SignupForm.tsx index 381dbcd..e4c9032 100644 --- a/client/src/components/auth/signup/SignupForm.tsx +++ b/client/src/components/auth/signup/SignupForm.tsx @@ -33,6 +33,7 @@ const SignupForm = () => { if (final) { sendRequest(newData); + return; } setCurrentStep((prev) => prev + 1); diff --git a/client/src/components/auth/signup/signup-steps/StepFour.tsx b/client/src/components/auth/signup/signup-steps/StepFour.tsx index 59998d5..e13546a 100644 --- a/client/src/components/auth/signup/signup-steps/StepFour.tsx +++ b/client/src/components/auth/signup/signup-steps/StepFour.tsx @@ -66,6 +66,7 @@ const StepFour = ({ nextStep(SignupBody, true); auth.signup(SignupBody); + actions.setSubmitting(false); }} > diff --git a/client/src/context/authContext.ts b/client/src/context/authContext.ts index cd599b7..a0cc71b 100644 --- a/client/src/context/authContext.ts +++ b/client/src/context/authContext.ts @@ -1,9 +1,10 @@ import { createContext } from "react"; import { SignupBody } from "../interfaces/api-body/signup-body"; +import { ErrorResponse } from "../interfaces/api-response/error-response"; export interface AuthContextType { signin: () => void; - signup: (body: SignupBody) => void; + signup: (body: SignupBody) => Promise; signout: () => void; token: string | null; } diff --git a/client/src/context/authContextProvider.tsx b/client/src/context/authContextProvider.tsx index ed1763a..e9642b5 100644 --- a/client/src/context/authContextProvider.tsx +++ b/client/src/context/authContextProvider.tsx @@ -3,7 +3,7 @@ import { AuthContext, AuthContextType } from "./authContext"; import { SignupBody } from "../interfaces/api-body/signup-body"; import { APIHandler } from "../utils/api/api-handler"; import { RegisterResponse } from "../interfaces/api-response/register-reponse"; -import { useNavigate } from "react-router"; +import { ErrorResponse, useNavigate } from "react-router"; interface AuthContextProviderInterface { children: React.ReactNode; @@ -22,14 +22,15 @@ export const AuthContextProvider = ({ const signout = async () => {}; - const signup = async (body: SignupBody) => { - APIHandler("/auth/signup", token, "post", body).then( - (response) => { - navigate("/otp"); - + const signup = async (body: SignupBody): Promise => { + APIHandler("/auth/signup", token, "post", body) + .then((response) => { console.log(response); - } - ); + navigate("/otp"); + }) + .catch((error) => { + console.error(error); + }); }; const verifyTokenValidity = useCallback(() => {}); diff --git a/client/src/utils/api/api-handler.ts b/client/src/utils/api/api-handler.ts index 569f13b..28c018f 100644 --- a/client/src/utils/api/api-handler.ts +++ b/client/src/utils/api/api-handler.ts @@ -23,7 +23,7 @@ export const APIHandler = ( if (body) { options.body = JSON.stringify(body); } - return new Promise((resolve) => { + return new Promise((resolve, reject) => { fetch(`${url}${endpoint}`, options).then((res) => { if (res.ok) { return res.json().then((data) => { @@ -31,8 +31,9 @@ export const APIHandler = ( }); } else { res.json().then((data: ErrorResponse) => { + reject(data); toast.error(data.message); - throw new Error(data.message); + // throw new Error(data.message); }); } }); From 7648d8257ec5b2ab6ddce3cfa57da90fe50be0fa Mon Sep 17 00:00:00 2001 From: Akeko Date: Tue, 5 Mar 2024 15:44:55 +0100 Subject: [PATCH 055/108] refactor(api): caller api for map --- client/package-lock.json | 33 ++++++++++++++++++++++++++--- client/package.json | 1 + client/src/utils/api/api-handler.ts | 7 ++++-- client/src/utils/constants.ts | 4 +++- 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index e521df5..fe0b4b9 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -8,6 +8,7 @@ "name": "client", "version": "0.0.0", "dependencies": { + "@types/react-leaflet-markercluster": "^3.0.4", "class-variance-authority": "^0.7.0", "formik": "^2.4.5", "framer-motion": "^11.0.3", @@ -1521,8 +1522,7 @@ "node_modules/@types/geojson": { "version": "7946.0.14", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", - "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==", - "dev": true + "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==" }, "node_modules/@types/hoist-non-react-statics": { "version": "3.3.5", @@ -1543,11 +1543,18 @@ "version": "1.9.8", "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.8.tgz", "integrity": "sha512-EXdsL4EhoUtGm2GC2ZYtXn+Fzc6pluVgagvo2VC1RHWToLGlTRwVYoDpqS/7QXa01rmDyBjJk3Catpf60VMkwg==", - "dev": true, "dependencies": { "@types/geojson": "*" } }, + "node_modules/@types/leaflet.markercluster": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/leaflet.markercluster/-/leaflet.markercluster-1.5.4.tgz", + "integrity": "sha512-tfMP8J62+wfsVLDLGh5Zh1JZxijCaBmVsMAX78MkLPwvPitmZZtSin5aWOVRhZrCS+pEOZwNzexbfWXlY+7yjg==", + "dependencies": { + "@types/leaflet": "*" + } + }, "node_modules/@types/prop-types": { "version": "15.7.11", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", @@ -1572,6 +1579,26 @@ "@types/react": "*" } }, + "node_modules/@types/react-leaflet": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@types/react-leaflet/-/react-leaflet-2.8.3.tgz", + "integrity": "sha512-MeBQnVQe6ikw8dkuZE4F96PvMdQeilZG6/ekk5XxhkSzU3lofedULn3UR/6G0uIHjbRazi4DA8LnLACX0bPhBg==", + "dependencies": { + "@types/leaflet": "*", + "@types/react": "*" + } + }, + "node_modules/@types/react-leaflet-markercluster": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/react-leaflet-markercluster/-/react-leaflet-markercluster-3.0.4.tgz", + "integrity": "sha512-YhN2Jts1CI31LXv+defPHvHrbIbp88ZcMwZwUUf4iRnZ/FJ1jDgb41yOuqXrnyAdwfGkm5BU4q6eBUFnh0J4Vw==", + "dependencies": { + "@types/leaflet": "*", + "@types/leaflet.markercluster": "*", + "@types/react": "*", + "@types/react-leaflet": "^2.8.3" + } + }, "node_modules/@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", diff --git a/client/package.json b/client/package.json index 3980da5..b5696a3 100644 --- a/client/package.json +++ b/client/package.json @@ -11,6 +11,7 @@ "test": "vitest" }, "dependencies": { + "@types/react-leaflet-markercluster": "^3.0.4", "class-variance-authority": "^0.7.0", "formik": "^2.4.5", "framer-motion": "^11.0.3", diff --git a/client/src/utils/api/api-handler.ts b/client/src/utils/api/api-handler.ts index 28c018f..c07e584 100644 --- a/client/src/utils/api/api-handler.ts +++ b/client/src/utils/api/api-handler.ts @@ -1,4 +1,5 @@ -import { url } from "../constants"; +import { URL_API_FLAMI, URL_API_MAP } from "../constants"; + import { ApiResponse } from "../../interfaces/api-response/api-response"; import { ErrorResponse } from "../../interfaces/api-response/error-response"; import toast from "react-hot-toast"; @@ -9,9 +10,11 @@ export const APIHandler = ( endpoint: string, token: string | null, method: HTTPMethod = "get", - body: unknown = undefined + body: unknown = undefined, + isMap: boolean ): Promise> => { const headers = new Headers(); + const url = isMap ? URL_API_MAP : URL_API_FLAMI; headers.append("Content-Type", "application/json"); if (token) { headers.append("Authorization", `Bearer ${token}`); diff --git a/client/src/utils/constants.ts b/client/src/utils/constants.ts index 56f6b1e..9d44ea1 100644 --- a/client/src/utils/constants.ts +++ b/client/src/utils/constants.ts @@ -1,2 +1,4 @@ export const RE_DIGIT = new RegExp(/^\d+$/); -export const url = "http://localhost:3001/api"; + +export const URL_API_FLAMI = "http://localhost:3001/api"; +export const URL_API_MAP = "https://maksance.alwaysdata.net/jo2024/"; From 7538644553880f1ea0c3c53f2910a73ae69b051b Mon Sep 17 00:00:00 2001 From: Akeko Date: Tue, 5 Mar 2024 15:45:35 +0100 Subject: [PATCH 056/108] refactor(map): type cluster --- client/src/pages/map/MapPage.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/src/pages/map/MapPage.tsx b/client/src/pages/map/MapPage.tsx index 52b4539..215186e 100644 --- a/client/src/pages/map/MapPage.tsx +++ b/client/src/pages/map/MapPage.tsx @@ -3,7 +3,7 @@ import { useEffect, useState } from "react"; import mapService from "../../services/map"; import "../../assets/styles/map.css"; -import { Icon, divIcon, point } from "leaflet"; +import L, { Icon, divIcon, point } from "leaflet"; import { MapContainer, TileLayer, Marker, Popup } from "react-leaflet"; import MarkerClusterGroup from "react-leaflet-cluster"; import "leaflet/dist/leaflet.css"; @@ -22,8 +22,8 @@ const MapPage = () => { iconSize: [40, 40], }); - const createCustomClusterIcon = (cluster) => { - return new divIcon({ + const createCustomClusterIcon = (cluster: L.MarkerCluster) => { + return L.divIcon({ html: `
    ${cluster.getChildCount()}
    `, className: "custom-marker-cluster", iconSize: point(33, 33, true), @@ -34,7 +34,7 @@ const MapPage = () => {

    Parcours de la flamme

    -
    +
    Date: Tue, 5 Mar 2024 16:40:16 +0100 Subject: [PATCH 057/108] updated map page --- client/src/pages/map/MapPage.tsx | 98 +++++++++++++++++-------- client/src/utils/api/map-api-handler.ts | 2 +- 2 files changed, 69 insertions(+), 31 deletions(-) diff --git a/client/src/pages/map/MapPage.tsx b/client/src/pages/map/MapPage.tsx index 52b4539..7fd2852 100644 --- a/client/src/pages/map/MapPage.tsx +++ b/client/src/pages/map/MapPage.tsx @@ -10,19 +10,25 @@ import "leaflet/dist/leaflet.css"; const MapPage = () => { const [mapInfo, setMapInfo] = useState([]); + const [flameInfo, setFlameInfo] = useState([]); + useEffect(() => { mapService.getMapInfo().then((result) => setMapInfo(result.data)); }, []); - console.log(mapInfo); + useEffect(() => { + mapService.getCurrentStep().then((result) => setFlameInfo(result.data)); + }, []); + + console.log(flameInfo); const customIcon = new Icon({ iconUrl: "/src/assets/img/pin.png", iconSize: [40, 40], }); - const createCustomClusterIcon = (cluster) => { + const createCustomClusterIcon = (cluster: MarkerCluster ) => { return new divIcon({ html: `
    ${cluster.getChildCount()}
    `, className: "custom-marker-cluster", @@ -31,35 +37,67 @@ const MapPage = () => { }; return ( -
    -

    Parcours de la flamme

    - -
    - - - - - {mapInfo.map((marker, index) => ( - - -

    Étape n°{marker.step}

    -

    {marker.date}

    -
    -
    - ))} -
    -
    +
    +

    Parcours de la flamme

    +
    +
    + + + + + {mapInfo.map((marker, index) => ( + + +

    Étape n°{marker.step}

    +

    {marker.date}

    +
    +
    + ))} +
    +
    +
    + +
    +

    Où est la flamme

    + +
    +
    +

    Étape actuelle

    +
    +
    +

    Département
    de l'étape

    +
    +
    +

    Prochaine étape

    +
    +
    + +

    Où est mon Flami

    + +
    +
    +

    Étape actuelle

    +
    +
    +

    Département
    de l'étape

    +
    +
    +

    Prochaine étape

    +
    +
    +
    +
    +
    ); }; diff --git a/client/src/utils/api/map-api-handler.ts b/client/src/utils/api/map-api-handler.ts index 8a7b8ad..b71bee0 100644 --- a/client/src/utils/api/map-api-handler.ts +++ b/client/src/utils/api/map-api-handler.ts @@ -1,4 +1,4 @@ -const API_MAP = "https://maksance.alwaysdata.net/jo2024/"; +const API_MAP = "https://maksance.alwaysdata.net/api-jo2024/"; const APIMapHandler = { getMap: async (url: string) => { From 2834a307573912d8b70f9623c15300d09252e8dc Mon Sep 17 00:00:00 2001 From: Akeko Date: Wed, 6 Mar 2024 09:47:56 +0100 Subject: [PATCH 058/108] style(map): remove useless style --- client/src/App.tsx | 2 +- client/src/assets/styles/main.css | 8 ++++---- client/src/assets/styles/map.css | 3 --- .../src/components/auth/signup/signup-steps/StepOne.tsx | 2 +- 4 files changed, 6 insertions(+), 9 deletions(-) delete mode 100644 client/src/assets/styles/map.css diff --git a/client/src/App.tsx b/client/src/App.tsx index 64ff383..62c17f1 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -14,7 +14,7 @@ import { Toaster } from "react-hot-toast"; const App = () => { return ( -
    +
    Date: Wed, 6 Mar 2024 09:48:43 +0100 Subject: [PATCH 059/108] refactor(api): integrate map api --- client/src/context/authContextProvider.tsx | 7 +- client/src/interfaces/step.interface.ts | 18 ++++ client/src/pages/map/MapPage.tsx | 100 ++++++++++++--------- client/src/services/auth.ts | 14 --- client/src/services/map.ts | 22 ----- client/src/utils/api/api-handler.ts | 25 +++++- client/src/utils/api/map-api-handler.ts | 18 ---- client/src/utils/constants.ts | 2 +- 8 files changed, 102 insertions(+), 104 deletions(-) create mode 100644 client/src/interfaces/step.interface.ts delete mode 100644 client/src/services/auth.ts delete mode 100644 client/src/services/map.ts delete mode 100644 client/src/utils/api/map-api-handler.ts diff --git a/client/src/context/authContextProvider.tsx b/client/src/context/authContextProvider.tsx index e9642b5..0d720aa 100644 --- a/client/src/context/authContextProvider.tsx +++ b/client/src/context/authContextProvider.tsx @@ -3,7 +3,8 @@ import { AuthContext, AuthContextType } from "./authContext"; import { SignupBody } from "../interfaces/api-body/signup-body"; import { APIHandler } from "../utils/api/api-handler"; import { RegisterResponse } from "../interfaces/api-response/register-reponse"; -import { ErrorResponse, useNavigate } from "react-router"; +import { useNavigate } from "react-router"; +import { ErrorResponse } from "../interfaces/api-response/error-response"; interface AuthContextProviderInterface { children: React.ReactNode; @@ -22,8 +23,8 @@ export const AuthContextProvider = ({ const signout = async () => {}; - const signup = async (body: SignupBody): Promise => { - APIHandler("/auth/signup", token, "post", body) + const signup = async (body: SignupBody) => { + APIHandler("/auth/signup", token, "post", body, false) .then((response) => { console.log(response); navigate("/otp"); diff --git a/client/src/interfaces/step.interface.ts b/client/src/interfaces/step.interface.ts new file mode 100644 index 0000000..4071f9e --- /dev/null +++ b/client/src/interfaces/step.interface.ts @@ -0,0 +1,18 @@ +export interface Step { + etape: string; + etape_numero: number; + date: string; + timestamp: number; + territoire: string; + numero_departement: string; + ville: string; + plan: string | null; + geolocalisation: { + latitude: number; + longitude: number; + }; + position: { + x: number; + y: number; + }; +} diff --git a/client/src/pages/map/MapPage.tsx b/client/src/pages/map/MapPage.tsx index dc362f4..573e8aa 100644 --- a/client/src/pages/map/MapPage.tsx +++ b/client/src/pages/map/MapPage.tsx @@ -1,28 +1,29 @@ import { useEffect, useState } from "react"; - -import mapService from "../../services/map"; -import "../../assets/styles/map.css"; - -import L, { Icon, divIcon, point } from "leaflet"; +import L, { Icon, point } from "leaflet"; import { MapContainer, TileLayer, Marker, Popup } from "react-leaflet"; import MarkerClusterGroup from "react-leaflet-cluster"; import "leaflet/dist/leaflet.css"; +import { APIHandler } from "../../utils/api/api-handler"; +import { Step } from "../../interfaces/step.interface"; const MapPage = () => { - const [mapInfo, setMapInfo] = useState([]); + const [steps, setSteps] = useState([]); const [flameInfo, setFlameInfo] = useState([]); + const handleSteps = () => { + APIHandler("/etapes", true) + .then((res) => { + setSteps(res.data); + }) + .catch((error) => { + console.error(error); + }); + }; useEffect(() => { - mapService.getMapInfo().then((result) => setMapInfo(result.data)); - }, []); - - useEffect(() => { - mapService.getCurrentStep().then((result) => setFlameInfo(result.data)); + handleSteps(); }, []); - console.log(flameInfo); - const customIcon = new Icon({ iconUrl: "/src/assets/img/pin.png", iconSize: [40, 40], @@ -37,27 +38,33 @@ const MapPage = () => { }; return ( -
    +

    Parcours de la flamme

    -
    -
    - - +
    +
    + + - {mapInfo.map((marker, index) => ( + {steps.map((marker, index) => ( -

    Étape n°{marker.step}

    +

    Étape n°{marker.etape}

    {marker.date}

    @@ -66,38 +73,47 @@ const MapPage = () => {
    -
    -

    Où est la flamme

    +
    +
    +

    Où est la flamme

    -
    -
    +
    +

    Étape actuelle

    +

    Marseille

    -
    -

    Département
    de l'étape

    +
    +

    + Département +
    de l'étape +

    +

    Bouches-du-Rhônes

    -
    +

    Prochaine étape

    +

    Toulon

    +
    - -

    Où est mon Flami

    - -
    -
    -

    Étape actuelle

    +
    +

    Où est mon Flami

    +
    +
    +

    Position actuelle

    +

    Lyon

    -
    -

    Département
    de l'étape

    +
    +

    Département

    +

    Rhônes-Alpes

    -
    -

    Prochaine étape

    +
    +

    Ancienne Position

    +

    Lyon

    +
    -
    -
    ); }; diff --git a/client/src/services/auth.ts b/client/src/services/auth.ts deleted file mode 100644 index 490ec78..0000000 --- a/client/src/services/auth.ts +++ /dev/null @@ -1,14 +0,0 @@ -import APIHandler from "../utils/api/api-handler"; - -const authService = { - sendOTP: async (email: string) => { - try { - const response = await APIHandler.post("/auth/send-otp", email, ""); - return response; - } catch (error) { - console.error(error); - } - }, -}; - -export default authService; diff --git a/client/src/services/map.ts b/client/src/services/map.ts deleted file mode 100644 index 5cb622b..0000000 --- a/client/src/services/map.ts +++ /dev/null @@ -1,22 +0,0 @@ -import APIMapHandler from "../utils/api/map-api-handler"; - -const mapService = { - getMapInfo: async () => { - try { - const response = await APIMapHandler.getMap(""); - return response; - } catch (error) { - console.error(error); - } - }, - getCurrentStep: async () => { - try { - const response = await APIMapHandler.getMap("/where"); - return response; - } catch (error) { - console.error(error); - } - }, -}; - -export default mapService; \ No newline at end of file diff --git a/client/src/utils/api/api-handler.ts b/client/src/utils/api/api-handler.ts index c07e584..c9d4c00 100644 --- a/client/src/utils/api/api-handler.ts +++ b/client/src/utils/api/api-handler.ts @@ -8,14 +8,14 @@ type HTTPMethod = "get" | "post" | "patch"; export const APIHandler = ( endpoint: string, - token: string | null, + isMap: boolean = false, method: HTTPMethod = "get", body: unknown = undefined, - isMap: boolean + token: string | null = null ): Promise> => { const headers = new Headers(); const url = isMap ? URL_API_MAP : URL_API_FLAMI; - headers.append("Content-Type", "application/json"); + headers.append("Accept", "application/json"); if (token) { headers.append("Authorization", `Bearer ${token}`); } @@ -26,7 +26,25 @@ export const APIHandler = ( if (body) { options.body = JSON.stringify(body); } + + // const fetchData = async () => { + // console.log(endpoint); + // console.log(options); + // try { + // const response = await fetch(`${url}${endpoint}`, { + // method: "get", + // headers, + // }); + // response.json().then((res) => console.log(res)); + // } catch (error) { + // console.error(error); + // } + // }; + + // fetchData(); + return new Promise((resolve, reject) => { + console.log("start fetch"); fetch(`${url}${endpoint}`, options).then((res) => { if (res.ok) { return res.json().then((data) => { @@ -36,7 +54,6 @@ export const APIHandler = ( res.json().then((data: ErrorResponse) => { reject(data); toast.error(data.message); - // throw new Error(data.message); }); } }); diff --git a/client/src/utils/api/map-api-handler.ts b/client/src/utils/api/map-api-handler.ts deleted file mode 100644 index b71bee0..0000000 --- a/client/src/utils/api/map-api-handler.ts +++ /dev/null @@ -1,18 +0,0 @@ -const API_MAP = "https://maksance.alwaysdata.net/api-jo2024/"; - -const APIMapHandler = { - getMap: async (url: string) => { - const options = { - method: "GET", - }; - try { - const response = await fetch(`${API_MAP}${url}`, options); - const data = await response.json(); - return data; - } catch (error) { - console.error(error); - } - } -} - -export default APIMapHandler; diff --git a/client/src/utils/constants.ts b/client/src/utils/constants.ts index 9d44ea1..d891b30 100644 --- a/client/src/utils/constants.ts +++ b/client/src/utils/constants.ts @@ -1,4 +1,4 @@ export const RE_DIGIT = new RegExp(/^\d+$/); export const URL_API_FLAMI = "http://localhost:3001/api"; -export const URL_API_MAP = "https://maksance.alwaysdata.net/jo2024/"; +export const URL_API_MAP = "https://maksance.alwaysdata.net/api-jo"; From d771ac5abef996d056149525926d362a8e904934 Mon Sep 17 00:00:00 2001 From: Maxence Date: Wed, 6 Mar 2024 10:16:12 +0100 Subject: [PATCH 060/108] refactor: mail regex --- server/controllers/auth.controller.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 80f5fb5..19e7940 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -20,9 +20,7 @@ const authController = { !userdata.email || !String(userdata.email) .toLowerCase() - .match( - /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ - ) + .match(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/) ) { return res.status(401).json({ message: `E-mail invalide.`, From 06f2001d035a1a657fdd3b9b290432999bdddd08 Mon Sep 17 00:00:00 2001 From: Maxence Date: Wed, 6 Mar 2024 10:16:31 +0100 Subject: [PATCH 061/108] feature: bruteforce error response --- server/routes/auth.routes.js | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/server/routes/auth.routes.js b/server/routes/auth.routes.js index 5c0de33..81a3220 100644 --- a/server/routes/auth.routes.js +++ b/server/routes/auth.routes.js @@ -8,7 +8,7 @@ import MemcachedStore from "express-brute-memcached"; const router = Router(); -var store; +let store; if (process.env.ENVIRONMENT == 'dev'){ store = new ExpressBrute.MemoryStore(); // stores state locally, don't use this in production @@ -19,10 +19,28 @@ if (process.env.ENVIRONMENT == 'dev'){ }); } -var bruteforce = new ExpressBrute(store, { +let failCallback = function (req, res, next, nextValidRequestDate) { + let timestamp = new Date().getTime(); + let diff = nextValidRequestDate - timestamp; + return res.status(429).json({ + message: `Trop de tentative invalide dans un temps imparti. Réessayez dans ${diff/1000/60} minute(s).`, + error: 429, + }); +}; + +let handleStoreError = function (error) { + throw { + message: error.message, + parent: error.parent + }; +} + +let bruteforce = new ExpressBrute(store, { freeRetries: 5, minWait: 5*60*1000, // 5 minutes - maxWait: 60*60*1000, // 1 hour, + maxWait: 10*60*1000, // 1 hour, + failCallback: failCallback, + handleStoreError: handleStoreError }); router.post("/signin", bruteforce.prevent, authController.signin); From 7851170a1c9871a834cb08b4287a72f451f3f3e0 Mon Sep 17 00:00:00 2001 From: Maxence Date: Wed, 6 Mar 2024 10:19:42 +0100 Subject: [PATCH 062/108] Update auth.controller.js --- server/controllers/auth.controller.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 19e7940..2215097 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -16,14 +16,9 @@ const authController = { signup: async (req, res) => { let userdata = req.body; - if ( - !userdata.email || - !String(userdata.email) - .toLowerCase() - .match(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/) - ) { + if (!userdata.email) { return res.status(401).json({ - message: `E-mail invalide.`, + message: `E-mail non-renseigné.`, error: 401, }); } From d28c90398dfa8933f21a5c85b7e657fbdbdd0928 Mon Sep 17 00:00:00 2001 From: Maxence Date: Wed, 6 Mar 2024 10:25:08 +0100 Subject: [PATCH 063/108] Update auth.controller.js --- server/controllers/auth.controller.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 2215097..80f5fb5 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -16,9 +16,16 @@ const authController = { signup: async (req, res) => { let userdata = req.body; - if (!userdata.email) { + if ( + !userdata.email || + !String(userdata.email) + .toLowerCase() + .match( + /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + ) + ) { return res.status(401).json({ - message: `E-mail non-renseigné.`, + message: `E-mail invalide.`, error: 401, }); } From 27f9fea91f665afe1ddab0d410474ada1c59d907 Mon Sep 17 00:00:00 2001 From: Maxence Date: Wed, 6 Mar 2024 14:56:28 +0100 Subject: [PATCH 064/108] Update auth.controller.js --- server/controllers/auth.controller.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 80f5fb5..43af23c 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -20,9 +20,7 @@ const authController = { !userdata.email || !String(userdata.email) .toLowerCase() - .match( - /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ - ) + .match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/) ) { return res.status(401).json({ message: `E-mail invalide.`, From 340ac7c5628d1c9c4696cd8b6d2de31cbd47eb6b Mon Sep 17 00:00:00 2001 From: Akeko Date: Wed, 6 Mar 2024 16:11:59 +0100 Subject: [PATCH 065/108] refactor(auth): change sth --- client/src/components/auth/otp/OtpForm.tsx | 55 ++++++++++++-- .../src/components/auth/signup/SignupForm.tsx | 5 -- .../auth/signup/signup-steps/StepFour.tsx | 3 +- client/src/components/ui/button.tsx | 3 +- client/src/context/authContextProvider.tsx | 35 ++++++--- client/src/interfaces/api-body/otp-body.ts | 4 + .../api-response/generic-response.ts | 3 + .../api-response/register-reponse.ts | 2 +- client/src/utils/api/api-handler.ts | 30 +++----- server/controllers/auth.controller.js | 6 +- .../controllers/forgetPassword.controller.js | 24 +++--- server/controllers/otp.controller.js | 43 +++++++---- server/controllers/user.controller.js | 75 +++++++++++-------- server/routes/auth.routes.js | 60 ++++++++------- 14 files changed, 216 insertions(+), 132 deletions(-) create mode 100644 client/src/interfaces/api-body/otp-body.ts create mode 100644 client/src/interfaces/api-response/generic-response.ts diff --git a/client/src/components/auth/otp/OtpForm.tsx b/client/src/components/auth/otp/OtpForm.tsx index 254bbd8..9cec7fd 100644 --- a/client/src/components/auth/otp/OtpForm.tsx +++ b/client/src/components/auth/otp/OtpForm.tsx @@ -2,14 +2,50 @@ import { useFormik } from "formik"; import { useState } from "react"; import { Button } from "../../ui"; import OtpInput from "./OtpInput"; +import { APIHandler } from "../../../utils/api/api-handler"; +import { RegisterResponse } from "../../../interfaces/api-response/register-reponse"; +import { OtpBody } from "../../../interfaces/api-body/otp-body"; +import { GenericResponse } from "../../../interfaces/api-response/generic-response"; +import toast from "react-hot-toast"; const OtpForm = () => { + const handleResendOtp = () => { + const body = { + email: localStorage.getItem("email"), + }; + APIHandler("/auth/send-otp", false, "post", body).then( + (res) => { + toast.success(res.data.message, { + style: { + background: "#3D3D3D", + color: "#FAFAFA", + borderRadius: "12px", + }, + }); + } + ); + }; + const formik = useFormik({ initialValues: { otp: "", }, onSubmit: (values) => { console.log(values); + + const body: OtpBody = { + email: localStorage.getItem("email"), + otp: values.otp, + }; + + APIHandler( + "/auth/verify-otp", + false, + "post", + body + ).then((res) => { + console.log(res); + }); }, validate: (values) => { const errors: Partial = {}; @@ -55,13 +91,18 @@ const OtpForm = () => {
    )}
    - +
    + + +
    ); diff --git a/client/src/components/auth/signup/SignupForm.tsx b/client/src/components/auth/signup/SignupForm.tsx index e4c9032..7a2478b 100644 --- a/client/src/components/auth/signup/SignupForm.tsx +++ b/client/src/components/auth/signup/SignupForm.tsx @@ -23,16 +23,11 @@ const SignupForm = () => { "next" ); - const sendRequest = (formData: SignupBody) => { - console.log("Form Submitted", formData); - }; - const handleNextStep = (newData: SignupBody, final = false) => { setData((prev) => ({ ...prev, ...newData })); setAnimationDirection("next"); if (final) { - sendRequest(newData); return; } diff --git a/client/src/components/auth/signup/signup-steps/StepFour.tsx b/client/src/components/auth/signup/signup-steps/StepFour.tsx index e13546a..bb3de46 100644 --- a/client/src/components/auth/signup/signup-steps/StepFour.tsx +++ b/client/src/components/auth/signup/signup-steps/StepFour.tsx @@ -15,10 +15,9 @@ const lastStepValidationSchema = Yup.object().shape({ .trim(), password: Yup.string() .required("Le mot de passe est obligatoire.") - .min(8, "Le mot de passe doit contenir 8 caractères minimum.") .matches( /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/, - "Le mot de passe doit contenir au moins une lettre majuscule, une lettre minuscule, un chiffre et un caractère special." + "Le mot de passe doit contenir au moins 8 caractères, une lettre majuscule, une lettre minuscule, un chiffre et un caractère special." ) .trim(), confirmPassword: Yup.string() diff --git a/client/src/components/ui/button.tsx b/client/src/components/ui/button.tsx index 4a5352f..588a4f8 100644 --- a/client/src/components/ui/button.tsx +++ b/client/src/components/ui/button.tsx @@ -9,7 +9,8 @@ const buttonVariants = { "bg-tree-poppy-500 text-alabaster-950 rounded-xl shadow-primary active:shadow-none active:translate-y-1 hover:brightness-90 disabled:cursor-not-allowed disabled:bg-alabaster-600 disabled:text-alabaster-300 disabled:shadow-none disabled:hover:brightness-100 disabled:active:translate-y-0", secondary: "bg-alabaster-950 text-alabaster-50 rounded-xl shadow-secondary border-3 border-alabaster-400 active:shadow-none active:translate-y-1 hover:brightness-90 disabled:cursor-not-allowed disabled:bg-alabaster-600 disabled:text-alabaster-300 disabled:shadow-none disabled:hover:brightness-100 disabled:active:translate-y-0", - tertiary: "text-mandy-500 hover:text-mandy-600", + tertiary: + "text-mandy-500 hover:text-mandy-600 disabled:cursor-not-allowed disabled:text-alabaster-300 disabled:hover:text-alabaster-300", }; const button = cva(baseButton, { diff --git a/client/src/context/authContextProvider.tsx b/client/src/context/authContextProvider.tsx index 0d720aa..b5a3593 100644 --- a/client/src/context/authContextProvider.tsx +++ b/client/src/context/authContextProvider.tsx @@ -5,6 +5,8 @@ import { APIHandler } from "../utils/api/api-handler"; import { RegisterResponse } from "../interfaces/api-response/register-reponse"; import { useNavigate } from "react-router"; import { ErrorResponse } from "../interfaces/api-response/error-response"; +import { GenericResponse } from "../interfaces/api-response/generic-response"; +import toast from "react-hot-toast"; interface AuthContextProviderInterface { children: React.ReactNode; @@ -14,7 +16,7 @@ export const AuthContextProvider = ({ children, }: AuthContextProviderInterface) => { const [token, setToken] = useState( - JSON.parse(localStorage.getItem("user") || "null") + localStorage.getItem("token") ); const navigate = useNavigate(); @@ -24,21 +26,30 @@ export const AuthContextProvider = ({ const signout = async () => {}; const signup = async (body: SignupBody) => { - APIHandler("/auth/signup", token, "post", body, false) - .then((response) => { - console.log(response); - navigate("/otp"); - }) - .catch((error) => { - console.error(error); - }); + APIHandler("/auth/signup", false, "post", body).then( + (res) => { + setToken(res.data.token); + localStorage.setItem("token", res.data.token); + APIHandler("/auth/send-otp", false, "post", body).then( + (res) => { + localStorage.setItem("email", body.email); + toast.success(res.data.message, { + style: { + background: "#3D3D3D", + color: "#FAFAFA", + borderRadius: "12px", + }, + }); + navigate("/otp"); + } + ); + } + ); }; const verifyTokenValidity = useCallback(() => {}); - useEffect(() => { - localStorage.setItem("user", JSON.stringify(token)); - }); + useEffect(() => {}); const authContextValue: AuthContextType = { signin, diff --git a/client/src/interfaces/api-body/otp-body.ts b/client/src/interfaces/api-body/otp-body.ts new file mode 100644 index 0000000..3ee4ac8 --- /dev/null +++ b/client/src/interfaces/api-body/otp-body.ts @@ -0,0 +1,4 @@ +export interface OtpBody { + email: string | null; + otp: string; +} diff --git a/client/src/interfaces/api-response/generic-response.ts b/client/src/interfaces/api-response/generic-response.ts new file mode 100644 index 0000000..2494632 --- /dev/null +++ b/client/src/interfaces/api-response/generic-response.ts @@ -0,0 +1,3 @@ +export interface GenericResponse { + message: string; +} diff --git a/client/src/interfaces/api-response/register-reponse.ts b/client/src/interfaces/api-response/register-reponse.ts index 5911702..ab7bc4c 100644 --- a/client/src/interfaces/api-response/register-reponse.ts +++ b/client/src/interfaces/api-response/register-reponse.ts @@ -1,4 +1,4 @@ export interface RegisterResponse { message: string; - success: string; + token: string; } diff --git a/client/src/utils/api/api-handler.ts b/client/src/utils/api/api-handler.ts index c9d4c00..150718c 100644 --- a/client/src/utils/api/api-handler.ts +++ b/client/src/utils/api/api-handler.ts @@ -1,5 +1,4 @@ import { URL_API_FLAMI, URL_API_MAP } from "../constants"; - import { ApiResponse } from "../../interfaces/api-response/api-response"; import { ErrorResponse } from "../../interfaces/api-response/error-response"; import toast from "react-hot-toast"; @@ -15,7 +14,9 @@ export const APIHandler = ( ): Promise> => { const headers = new Headers(); const url = isMap ? URL_API_MAP : URL_API_FLAMI; - headers.append("Accept", "application/json"); + if (method === "post") { + headers.append("Content-Type", "application/json"); + } if (token) { headers.append("Authorization", `Bearer ${token}`); } @@ -27,24 +28,7 @@ export const APIHandler = ( options.body = JSON.stringify(body); } - // const fetchData = async () => { - // console.log(endpoint); - // console.log(options); - // try { - // const response = await fetch(`${url}${endpoint}`, { - // method: "get", - // headers, - // }); - // response.json().then((res) => console.log(res)); - // } catch (error) { - // console.error(error); - // } - // }; - - // fetchData(); - return new Promise((resolve, reject) => { - console.log("start fetch"); fetch(`${url}${endpoint}`, options).then((res) => { if (res.ok) { return res.json().then((data) => { @@ -53,7 +37,13 @@ export const APIHandler = ( } else { res.json().then((data: ErrorResponse) => { reject(data); - toast.error(data.message); + toast.error(data.message, { + style: { + background: "#3D3D3D", + color: "#FAFAFA", + borderRadius: "12px", + }, + }); }); } }); diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 80f5fb5..356e936 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -55,8 +55,8 @@ const authController = { let token = auth.encode({ email: new_user.email }); return res.status(201).json({ - message: `Inscription finalisée. Bienvenue ${new_user.name} !`, data: { + message: `Inscription finalisée. Bienvenue ${new_user.name} !`, token: token, }, }); @@ -96,7 +96,7 @@ const authController = { if (!user.isVerified) { return res .status(403) - .json({ message: "OTP not verified.", error: 403 }); + .json({ message: "Code de vérification non vérifié.", error: 403 }); } const isValid = bcrypt.compareSync(userdata.password, user.password); @@ -105,8 +105,8 @@ const authController = { let token = auth.encode({ email: user.email }); req.brute.reset(); // reset brute counter return res.status(200).json({ - message: "Authentification réussie.", data: { + message: "Authentification réussie.", token: token, }, }); diff --git a/server/controllers/forgetPassword.controller.js b/server/controllers/forgetPassword.controller.js index a269511..53030e5 100644 --- a/server/controllers/forgetPassword.controller.js +++ b/server/controllers/forgetPassword.controller.js @@ -15,14 +15,10 @@ const forgetPasswordController = { .json({ message: "Ce compte n'existe pas.", error: 404 }); } - // console.log(user._id); - const token = jwt.sign({ email: user.email }, process.env.PRIVATE, { expiresIn: "10m", }); - // console.log(token); - const info = await mailSender( user.email, "Mot de passe oublié ? - Flami vient à votre aide !", @@ -30,12 +26,14 @@ const forgetPasswordController = { ); if (!info) { - return res.status(500).json({ message: "Email non envoyé." }); + return res + .status(500) + .json({ message: "Email non envoyé.", error: 500 }); } - return res.status(200).json({ message: "Email envoyé." }); + return res.status(200).json({ message: "Email envoyé.", error: 200 }); } catch (error) { - return res.status(500).json({ message: error.message }); + return res.status(500).json({ message: error.message, error: 500 }); } }, resetPassword: async (req, res) => { @@ -43,19 +41,23 @@ const forgetPasswordController = { const decodedToken = jwt.verify(req.params.token, process.env.PRIVATE); if (!decodedToken) { - return res.status(401).json({ message: "Token invalide." }); + return res.status(401).json({ message: "Token invalide.", error: 401 }); } const user = await userModel.findOneAndUpdate(decodedToken.email, { password: bcrypt.hashSync(req.body.password, bcrypt.genSaltSync(11)), }); if (!user) { - return res.status(401).json({ message: "Ce compte n'existe pas." }); + return res + .status(401) + .json({ message: "Ce compte n'existe pas.", error: 401 }); } - return res.status(200).json({ message: "Mot de passe mis à jour." }); + return res + .status(200) + .json({ data: { message: "Mot de passe mis à jour.", error: 200 } }); } catch (error) { - return res.status(500).json({ message: error.message }); + return res.status(500).json({ message: error.message, error: 500 }); } }, }; diff --git a/server/controllers/otp.controller.js b/server/controllers/otp.controller.js index 377b301..5a325d5 100644 --- a/server/controllers/otp.controller.js +++ b/server/controllers/otp.controller.js @@ -7,10 +7,14 @@ const otpController = { try { const { email } = req.body; + console.log(email); + const existingUser = await userModel.findOne({ email }); - // console.log(existingUser); + if (!existingUser) { - return res.status(404).json({ message: "Ce compte n'existe pas." }); + return res + .status(404) + .json({ message: "Ce compte n'existe pas.", error: 404 }); } const existingOTP = await otpModel.findOne({ email }); @@ -18,6 +22,7 @@ const otpController = { return res.status(400).json({ message: "Un OTP est déjà en cours d'utilisation. Veuillez attendre de recevoir votre code.", + error: 400, }); } @@ -30,10 +35,15 @@ const otpController = { const otpPayload = { email, otp }; await otpModel.create(otpPayload); - res.status(200).json({ message: "OTP envoyé avec succès." }); + res.status(200).json({ + data: { + message: "OTP envoyé avec succès.", + error: 200, + }, + }); } catch (error) { console.error(error.message); - res.status(500).json({ error: error.message }); + res.status(500).json({ message: error.message, error: 500 }); } }, @@ -41,11 +51,13 @@ const otpController = { try { const { email, otp } = req.body; + console.log(email, otp); const otpRecord = await otpModel.findOneAndDelete({ email, otp }); if (!otpRecord) { - return res - .status(400) - .json({ message: "Le code de vérification est incorrect." }); + return res.status(400).json({ + message: "Le code de vérification est incorrect.", + error: 400, + }); } const otpExpiration = otpRecord.createdAt.getTime() + 5 * 60 * 1000; @@ -53,20 +65,23 @@ const otpController = { return res.status(400).json({ message: "Le code de vérification a expiré. Veuillez en demander un nouveau.", + error: 400, }); } - const existingUser = await userModel.findOneAndUpdate({ email }, { isVerified: true }); + await userModel.findOneAndUpdate({ email }, { isVerified: true }); let token = auth.encode({ email: email }); - res.status(200).json({ message: "Le code de vérification est valide.", data: { - token: token - }}); + res.status(200).json({ + data: { + message: "Le code de vérification est valide.", + token: token, + }, + }); } catch (error) { - console.error(error.message); - res.status(500).json({ error: error.message }); + res.status(500).json({ message: error.message, error: 500 }); } }, }; -export default otpController; \ No newline at end of file +export default otpController; diff --git a/server/controllers/user.controller.js b/server/controllers/user.controller.js index 9d8ed38..77df93c 100644 --- a/server/controllers/user.controller.js +++ b/server/controllers/user.controller.js @@ -3,40 +3,53 @@ import auth from "../helpers/authMiddleware.js"; import bcrypt from "bcryptjs"; const userController = { - getProfile: (req, res) => { - let userdata = res.locals.user; - return res.status(200).json({ data: { - name: userdata.name, - email: userdata.email, - created_at: new Date(userdata.date).toDateString() - }}); - }, - // getAccount: (req, res) => { - - // }, - getBadges: (req, res) => { - let userdata = res.locals.user; - return res.status(200).json({ data: { - badges: userdata.badges - }}); - }, - updateAccount: async (req, res) => { - let userdata = res.locals.user; - const { password, name, email } = req.body; + getProfile: (req, res) => { + let userdata = res.locals.user; + return res.status(200).json({ + data: { + name: userdata.name, + email: userdata.email, + created_at: new Date(userdata.date).toDateString(), + }, + }); + }, + // getAccount: (req, res) => { - let patch = {}; + // }, + getBadges: (req, res) => { + let userdata = res.locals.user; + return res.status(200).json({ + data: { + badges: userdata.badges, + }, + }); + }, + updateAccount: async (req, res) => { + let userdata = res.locals.user; + const { password, name, email } = req.body; - if(password && String(password).match(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/)) patch.password = bcrypt.hashSync(password, bcrypt.genSaltSync(11)); - if(name) patch.name = name; - if(email) patch.email = email; + let patch = {}; - await userModel.updateOne({_id: userdata._id}, patch); + if ( + password && + String(password).match( + /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/ + ) + ) + patch.password = bcrypt.hashSync(password, bcrypt.genSaltSync(11)); + if (name) patch.name = name; + if (email) patch.email = email; - let token = auth.encode({ email: email ?? userdata.email }); - return res.status(200).json({ message: "Informations de compte misent à jour.", data: { - jwt: token - }}); - } + await userModel.updateOne({ _id: userdata._id }, patch); + + let token = auth.encode({ email: email ?? userdata.email }); + return res.status(200).json({ + data: { + message: "Informations de compte misent à jour.", + token: token, + }, + }); + }, }; -export default userController; \ No newline at end of file +export default userController; diff --git a/server/routes/auth.routes.js b/server/routes/auth.routes.js index 81a3220..1c2f392 100644 --- a/server/routes/auth.routes.js +++ b/server/routes/auth.routes.js @@ -10,37 +10,39 @@ const router = Router(); let store; -if (process.env.ENVIRONMENT == 'dev'){ - store = new ExpressBrute.MemoryStore(); // stores state locally, don't use this in production +if (process.env.ENVIRONMENT == "dev") { + store = new ExpressBrute.MemoryStore(); // stores state locally, don't use this in production } else { - // stores state with memcached - store = new MemcachedStore(['127.0.0.1'], { - prefix: 'NoConflicts' - }); + // stores state with memcached + store = new MemcachedStore(["127.0.0.1"], { + prefix: "NoConflicts", + }); } let failCallback = function (req, res, next, nextValidRequestDate) { - let timestamp = new Date().getTime(); - let diff = nextValidRequestDate - timestamp; - return res.status(429).json({ - message: `Trop de tentative invalide dans un temps imparti. Réessayez dans ${diff/1000/60} minute(s).`, - error: 429, - }); + let timestamp = new Date().getTime(); + let diff = nextValidRequestDate - timestamp; + return res.status(429).json({ + message: `Trop de tentative invalide dans un temps imparti. Réessayez dans ${ + diff / 1000 / 60 + } minute(s).`, + error: 429, + }); }; let handleStoreError = function (error) { - throw { - message: error.message, - parent: error.parent - }; -} + throw { + message: error.message, + parent: error.parent, + }; +}; let bruteforce = new ExpressBrute(store, { - freeRetries: 5, - minWait: 5*60*1000, // 5 minutes - maxWait: 10*60*1000, // 1 hour, - failCallback: failCallback, - handleStoreError: handleStoreError + freeRetries: 1000, + minWait: 5 * 60 * 1000, // 5 minutes + maxWait: 10 * 60 * 1000, // 1 hour, + failCallback: failCallback, + handleStoreError: handleStoreError, }); router.post("/signin", bruteforce.prevent, authController.signin); @@ -50,7 +52,15 @@ router.post("/token", auth.require, authController.token); router.post("/send-otp", bruteforce.prevent, otpController.sendOTP); router.post("/verify-otp", bruteforce.prevent, otpController.verifyOTP); -router.post("/forget-password", bruteforce.prevent, forgetPasswordController.forgetPassword); -router.post("/reset-password/:token", bruteforce.prevent, forgetPasswordController.resetPassword); +router.post( + "/forget-password", + bruteforce.prevent, + forgetPasswordController.forgetPassword +); +router.post( + "/reset-password/:token", + bruteforce.prevent, + forgetPasswordController.resetPassword +); -export default router; \ No newline at end of file +export default router; From 6f7ae20acdc7d643fa5233a5b15c8a5bbc1f828e Mon Sep 17 00:00:00 2001 From: DemoTheMann Date: Fri, 8 Mar 2024 15:47:22 +0100 Subject: [PATCH 066/108] refactor(map): split mapPage into react components --- client/package-lock.json | 23 ---- client/package.json | 1 - client/src/assets/img/pin.png | Bin 10683 -> 0 bytes client/src/assets/img/pin.svg | 1 + client/src/components/map/FlameLocation.tsx | 37 ++++++ client/src/components/map/FlamiLocation.tsx | 22 ++++ client/src/components/map/Map.tsx | 58 ++++++++++ client/src/interfaces/step.interface.ts | 4 +- client/src/pages/map/MapPage.tsx | 118 +++++++------------- client/src/utils/api/api-handler.ts | 4 +- client/src/utils/constants.ts | 1 + 11 files changed, 164 insertions(+), 105 deletions(-) delete mode 100644 client/src/assets/img/pin.png create mode 100644 client/src/assets/img/pin.svg create mode 100644 client/src/components/map/FlameLocation.tsx create mode 100644 client/src/components/map/FlamiLocation.tsx create mode 100644 client/src/components/map/Map.tsx diff --git a/client/package-lock.json b/client/package-lock.json index fe0b4b9..a72b946 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -18,7 +18,6 @@ "react-dom": "^18.2.0", "react-hot-toast": "^2.4.1", "react-leaflet": "^4.2.1", - "react-leaflet-cluster": "^2.1.0", "react-line-awesome": "^1.4.1", "react-router": "^6.21.3", "react-router-dom": "^6.22.1", @@ -4145,14 +4144,6 @@ "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==" }, - "node_modules/leaflet.markercluster": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz", - "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==", - "peerDependencies": { - "leaflet": "^1.3.1" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -5069,20 +5060,6 @@ "react-dom": "^18.0.0" } }, - "node_modules/react-leaflet-cluster": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-leaflet-cluster/-/react-leaflet-cluster-2.1.0.tgz", - "integrity": "sha512-16X7XQpRThQFC4PH4OpXHimGg19ouWmjxjtpxOeBKpvERSvIRqTx7fvhTwkEPNMFTQ8zTfddz6fRTUmUEQul7g==", - "dependencies": { - "leaflet.markercluster": "^1.5.3" - }, - "peerDependencies": { - "leaflet": "^1.8.0", - "react": "^18.0.0", - "react-dom": "^18.0.0", - "react-leaflet": "^4.0.0" - } - }, "node_modules/react-line-awesome": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/react-line-awesome/-/react-line-awesome-1.4.1.tgz", diff --git a/client/package.json b/client/package.json index b5696a3..70f27e9 100644 --- a/client/package.json +++ b/client/package.json @@ -21,7 +21,6 @@ "react-dom": "^18.2.0", "react-hot-toast": "^2.4.1", "react-leaflet": "^4.2.1", - "react-leaflet-cluster": "^2.1.0", "react-line-awesome": "^1.4.1", "react-router": "^6.21.3", "react-router-dom": "^6.22.1", diff --git a/client/src/assets/img/pin.png b/client/src/assets/img/pin.png deleted file mode 100644 index 28523586d6f85e79921a934b431a35894f44abfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10683 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 gjKf \ No newline at end of file diff --git a/client/src/components/map/FlameLocation.tsx b/client/src/components/map/FlameLocation.tsx new file mode 100644 index 0000000..de36440 --- /dev/null +++ b/client/src/components/map/FlameLocation.tsx @@ -0,0 +1,37 @@ +import { Step } from "../../interfaces/step.interface"; + +const FlameLocation = ({ + currentFlameLocation, + nextFlameLocation, +}: { + currentFlameLocation: Step | undefined; + nextFlameLocation: Step | undefined; +}) => { + return ( + <> + {currentFlameLocation ? ( +
    +
    +

    Étape actuelle

    +

    {currentFlameLocation.ville}

    +
    +
    +

    + Territoire +
    de l'étape +

    +

    {currentFlameLocation?.territoire}

    +
    +
    +

    Prochaine étape

    +

    {nextFlameLocation?.ville}

    +
    +
    + ) : ( +

    Le parcours n'a pas encore débuté !

    + )} + + ); +}; + +export default FlameLocation; diff --git a/client/src/components/map/FlamiLocation.tsx b/client/src/components/map/FlamiLocation.tsx new file mode 100644 index 0000000..0b6a16c --- /dev/null +++ b/client/src/components/map/FlamiLocation.tsx @@ -0,0 +1,22 @@ +const FlamiLocation = () => { + return ( + <> +
    +
    +

    Position actuelle

    +

    Lyon

    +
    +
    +

    Département

    +

    Rhônes-Alpes

    +
    +
    +

    Ancienne Position

    +

    Lyon

    +
    +
    + + ); +}; + +export default FlamiLocation; diff --git a/client/src/components/map/Map.tsx b/client/src/components/map/Map.tsx new file mode 100644 index 0000000..52d8bc5 --- /dev/null +++ b/client/src/components/map/Map.tsx @@ -0,0 +1,58 @@ +import { + MapContainer, + Marker, + Polyline, + Popup, + TileLayer, +} from "react-leaflet"; +import { Icon } from "leaflet"; +import { Step } from "../../interfaces/step.interface"; + +const Map = ({ + steps, + polylinePath, +}: { + steps: Step[]; + polylinePath: [number, number][]; +}) => { + const polylineOptions = { color: "orange", dashArray: "10,25", weight: 3 }; + + const customIcon = new Icon({ + iconUrl: "/src/assets/img/pin.svg", + iconSize: [40, 40], + }); + + return ( +
    + + + + {steps && + steps.map((marker, index) => ( + + +

    Étape n°{marker.etape}

    +

    {marker.date}

    +

    {marker.ville}

    +
    +
    + ))} + +
    +
    + ); +}; + +export default Map; diff --git a/client/src/interfaces/step.interface.ts b/client/src/interfaces/step.interface.ts index 4071f9e..8cd773a 100644 --- a/client/src/interfaces/step.interface.ts +++ b/client/src/interfaces/step.interface.ts @@ -4,7 +4,7 @@ export interface Step { date: string; timestamp: number; territoire: string; - numero_departement: string; + departement: string; ville: string; plan: string | null; geolocalisation: { @@ -15,4 +15,6 @@ export interface Step { x: number; y: number; }; + population: number; + code_postal: "04100"; } diff --git a/client/src/pages/map/MapPage.tsx b/client/src/pages/map/MapPage.tsx index 573e8aa..8213573 100644 --- a/client/src/pages/map/MapPage.tsx +++ b/client/src/pages/map/MapPage.tsx @@ -1,14 +1,16 @@ import { useEffect, useState } from "react"; -import L, { Icon, point } from "leaflet"; -import { MapContainer, TileLayer, Marker, Popup } from "react-leaflet"; -import MarkerClusterGroup from "react-leaflet-cluster"; import "leaflet/dist/leaflet.css"; import { APIHandler } from "../../utils/api/api-handler"; import { Step } from "../../interfaces/step.interface"; +import Map from "../../components/map/Map"; +import FlameLocation from "../../components/map/FlameLocation"; +import FlamiLocation from "../../components/map/FlamiLocation"; const MapPage = () => { const [steps, setSteps] = useState([]); - const [flameInfo, setFlameInfo] = useState([]); + const [currentFlameLocation, setCurrentFlameLocation] = useState(); + const [nextFlameLocation, setNextFlameLocation] = useState(); + const polylinePath: [number, number][] = []; const handleSteps = () => { APIHandler("/etapes", true) @@ -20,97 +22,55 @@ const MapPage = () => { }); }; + const handleNextStep = (step: number) => { + APIHandler(`/etape/${step}`, true) + .then((res) => { + setNextFlameLocation(res.data); + }) + .catch((error) => { + console.error(error); + }); + }; + + const handleCurrentStep = () => { + APIHandler(`/etape/actuelle`, true) + .then((res) => { + setCurrentFlameLocation(res.data); + handleNextStep(res.data.etape_numero); + }) + .catch((error) => { + console.error(error); + }); + }; + useEffect(() => { handleSteps(); + handleCurrentStep(); }, []); - const customIcon = new Icon({ - iconUrl: "/src/assets/img/pin.png", - iconSize: [40, 40], + steps.forEach((step) => { + polylinePath.push([ + step.geolocalisation.latitude, + step.geolocalisation.longitude, + ]); }); - const createCustomClusterIcon = (cluster: L.MarkerCluster) => { - return L.divIcon({ - html: `
    ${cluster.getChildCount()}
    `, - className: "custom-marker-cluster", - iconSize: point(33, 33, true), - }); - }; - return (

    Parcours de la flamme

    -
    - - - - - {steps.map((marker, index) => ( - - -

    Étape n°{marker.etape}

    -

    {marker.date}

    -
    -
    - ))} -
    -
    -
    - +

    Où est la flamme

    - -
    -
    -

    Étape actuelle

    -

    Marseille

    -
    -
    -

    - Département -
    de l'étape -

    -

    Bouches-du-Rhônes

    -
    -
    -

    Prochaine étape

    -

    Toulon

    -
    -
    +

    Où est mon Flami

    -
    -
    -

    Position actuelle

    -

    Lyon

    -
    -
    -

    Département

    -

    Rhônes-Alpes

    -
    -
    -

    Ancienne Position

    -

    Lyon

    -
    -
    +
    diff --git a/client/src/utils/api/api-handler.ts b/client/src/utils/api/api-handler.ts index c9d4c00..35ba653 100644 --- a/client/src/utils/api/api-handler.ts +++ b/client/src/utils/api/api-handler.ts @@ -15,7 +15,9 @@ export const APIHandler = ( ): Promise> => { const headers = new Headers(); const url = isMap ? URL_API_MAP : URL_API_FLAMI; - headers.append("Accept", "application/json"); + // if(isMap) { + // headers.append("Authorization", `Bearer ${URL_API_KEY}`); + // } if (token) { headers.append("Authorization", `Bearer ${token}`); } diff --git a/client/src/utils/constants.ts b/client/src/utils/constants.ts index d891b30..4b925a8 100644 --- a/client/src/utils/constants.ts +++ b/client/src/utils/constants.ts @@ -2,3 +2,4 @@ export const RE_DIGIT = new RegExp(/^\d+$/); export const URL_API_FLAMI = "http://localhost:3001/api"; export const URL_API_MAP = "https://maksance.alwaysdata.net/api-jo"; +export const URL_API_KEY = "11f66865-de4c-42a3-9728-851fa6fcda85"; \ No newline at end of file From 4aa667fb94e79bfd7f37e59ec5b426179cfc7ff6 Mon Sep 17 00:00:00 2001 From: Akeko Date: Fri, 8 Mar 2024 16:51:39 +0100 Subject: [PATCH 067/108] feat(auth): finish signup front with otp --- client/src/App.tsx | 2 +- client/src/components/auth/otp/OtpForm.tsx | 25 +++++++++++++++---- client/src/context/authContext.ts | 2 ++ client/src/context/authContextProvider.tsx | 11 +++++--- client/src/interfaces/api-body/otp-body.ts | 2 +- client/src/interfaces/user.interface.ts | 5 ++++ .../utils/protected-route/ProtectedRoute.tsx | 4 ++- server/controllers/otp.controller.js | 7 +++--- 8 files changed, 43 insertions(+), 15 deletions(-) create mode 100644 client/src/interfaces/user.interface.ts diff --git a/client/src/App.tsx b/client/src/App.tsx index 62c17f1..f93d971 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -14,7 +14,7 @@ import { Toaster } from "react-hot-toast"; const App = () => { return ( -
    +
    { + const auth = useAuth(); + const navigate = useNavigate(); + const handleResendOtp = () => { const body = { - email: localStorage.getItem("email"), + email: auth.user?.email, }; + + console.log(body); APIHandler("/auth/send-otp", false, "post", body).then( (res) => { toast.success(res.data.message, { @@ -31,20 +38,28 @@ const OtpForm = () => { otp: "", }, onSubmit: (values) => { - console.log(values); - const body: OtpBody = { - email: localStorage.getItem("email"), + email: auth.user?.email, otp: values.otp, }; + console.log(body); + APIHandler( "/auth/verify-otp", false, "post", body ).then((res) => { - console.log(res); + localStorage.setItem("token", res.data.token); + toast.success(res.data.message, { + style: { + background: "#3D3D3D", + color: "#FAFAFA", + borderRadius: "12px", + }, + }); + navigate("/"); }); }, validate: (values) => { diff --git a/client/src/context/authContext.ts b/client/src/context/authContext.ts index a0cc71b..2b7bb52 100644 --- a/client/src/context/authContext.ts +++ b/client/src/context/authContext.ts @@ -1,12 +1,14 @@ import { createContext } from "react"; import { SignupBody } from "../interfaces/api-body/signup-body"; import { ErrorResponse } from "../interfaces/api-response/error-response"; +import { User } from "../interfaces/user.interface"; export interface AuthContextType { signin: () => void; signup: (body: SignupBody) => Promise; signout: () => void; token: string | null; + user: Omit | undefined; } export const AuthContext = createContext(null); diff --git a/client/src/context/authContextProvider.tsx b/client/src/context/authContextProvider.tsx index b5a3593..010b41b 100644 --- a/client/src/context/authContextProvider.tsx +++ b/client/src/context/authContextProvider.tsx @@ -4,9 +4,9 @@ import { SignupBody } from "../interfaces/api-body/signup-body"; import { APIHandler } from "../utils/api/api-handler"; import { RegisterResponse } from "../interfaces/api-response/register-reponse"; import { useNavigate } from "react-router"; -import { ErrorResponse } from "../interfaces/api-response/error-response"; import { GenericResponse } from "../interfaces/api-response/generic-response"; import toast from "react-hot-toast"; +import { User } from "../interfaces/user.interface"; interface AuthContextProviderInterface { children: React.ReactNode; @@ -18,6 +18,7 @@ export const AuthContextProvider = ({ const [token, setToken] = useState( localStorage.getItem("token") ); + const [user, setUser] = useState>(); const navigate = useNavigate(); @@ -29,10 +30,12 @@ export const AuthContextProvider = ({ APIHandler("/auth/signup", false, "post", body).then( (res) => { setToken(res.data.token); - localStorage.setItem("token", res.data.token); APIHandler("/auth/send-otp", false, "post", body).then( (res) => { - localStorage.setItem("email", body.email); + setUser({ + name: body.name, + email: body.email, + }); toast.success(res.data.message, { style: { background: "#3D3D3D", @@ -55,7 +58,9 @@ export const AuthContextProvider = ({ signin, signout, signup, + setToken, token, + user, }; return ( diff --git a/client/src/interfaces/api-body/otp-body.ts b/client/src/interfaces/api-body/otp-body.ts index 3ee4ac8..b96530c 100644 --- a/client/src/interfaces/api-body/otp-body.ts +++ b/client/src/interfaces/api-body/otp-body.ts @@ -1,4 +1,4 @@ export interface OtpBody { - email: string | null; + email: string | undefined; otp: string; } diff --git a/client/src/interfaces/user.interface.ts b/client/src/interfaces/user.interface.ts new file mode 100644 index 0000000..e585dbb --- /dev/null +++ b/client/src/interfaces/user.interface.ts @@ -0,0 +1,5 @@ +export interface User { + name: string; + email: string; + created_at: string; +} diff --git a/client/src/utils/protected-route/ProtectedRoute.tsx b/client/src/utils/protected-route/ProtectedRoute.tsx index feee09e..164d9b9 100644 --- a/client/src/utils/protected-route/ProtectedRoute.tsx +++ b/client/src/utils/protected-route/ProtectedRoute.tsx @@ -1,8 +1,10 @@ import React from "react"; import { Navigate } from "react-router"; +import { useAuth } from "../../hooks/useAuth"; const ProtectedRoute = ({ children }: { children: React.ReactNode }) => { - const token = true; + const auth = useAuth(); + const token = auth.token; if (!token) { return ; } diff --git a/server/controllers/otp.controller.js b/server/controllers/otp.controller.js index 5a325d5..2a6f526 100644 --- a/server/controllers/otp.controller.js +++ b/server/controllers/otp.controller.js @@ -1,14 +1,13 @@ import otpGenerator from "otp-generator"; import otpModel from "../models/otp.model.js"; import userModel from "../models/user.model.js"; +import auth from "../helpers/authMiddleware.js"; const otpController = { sendOTP: async (req, res) => { try { const { email } = req.body; - console.log(email); - const existingUser = await userModel.findOne({ email }); if (!existingUser) { @@ -21,7 +20,7 @@ const otpController = { if (existingOTP) { return res.status(400).json({ message: - "Un OTP est déjà en cours d'utilisation. Veuillez attendre de recevoir votre code.", + "Un code de vérification est déjà en cours d'utilisation. Veuillez attendre de recevoir votre code.", error: 400, }); } @@ -37,7 +36,7 @@ const otpController = { res.status(200).json({ data: { - message: "OTP envoyé avec succès.", + message: "Un code de vérification a été envoyé avec succès.", error: 200, }, }); From 9a2448a1e8c809d1d3f6920366c1553faa194a6f Mon Sep 17 00:00:00 2001 From: Akeko Date: Mon, 11 Mar 2024 09:20:31 +0100 Subject: [PATCH 068/108] refactor(auth): update auth --- client/src/App.tsx | 32 +++++++-------- client/src/components/auth/otp/OtpForm.tsx | 34 +++++++-------- client/src/components/auth/otp/OtpInput.tsx | 2 - .../reset-password/ForgetPasswordForm.tsx | 21 +++++++++- .../auth/reset-password/ResetPasswordForm.tsx | 39 ++++++++++++++++-- .../src/components/auth/signin/SigninForm.tsx | 27 +++++++----- .../auth/signup/signup-steps/StepFour.tsx | 2 +- .../auth/signup/signup-steps/StepOne.tsx | 1 - .../auth/signup/signup-steps/StepThree.tsx | 1 - .../auth/signup/signup-steps/StepTwo.tsx | 3 +- .../src/components/navigation/Navigation.tsx | 14 ++++++- client/src/components/ui/index.ts | 1 + client/src/components/ui/nav-link.tsx | 36 ++++++++++++++++ client/src/context/authContext.ts | 6 +-- client/src/context/authContextProvider.tsx | 41 ++++++++++++++----- .../api-body/reset-password-body.ts | 3 ++ .../{register-reponse.ts => auth-reponse.ts} | 2 +- .../api-response/generic-response.ts | 1 + .../api-response/reset-password-response.ts | 4 ++ client/src/pages/RootLayout.tsx | 11 ----- client/src/pages/error/ErrorPage.tsx | 5 +++ client/src/pages/profile/ProfilePage.tsx | 13 +++++- .../utils/protected-route/ProtectedRoute.tsx | 14 ------- client/src/utils/routes/AuthRoute.tsx | 20 +++++++++ client/src/utils/routes/ProtectedRoute.tsx | 24 +++++++++++ client/tailwind.config.js | 1 + server/controllers/auth.controller.js | 6 ++- .../controllers/forgetPassword.controller.js | 30 ++++++++++---- server/helpers/authMiddleware.js | 6 +-- 29 files changed, 286 insertions(+), 114 deletions(-) create mode 100644 client/src/components/ui/nav-link.tsx create mode 100644 client/src/interfaces/api-body/reset-password-body.ts rename client/src/interfaces/api-response/{register-reponse.ts => auth-reponse.ts} (51%) create mode 100644 client/src/interfaces/api-response/reset-password-response.ts delete mode 100644 client/src/pages/RootLayout.tsx create mode 100644 client/src/pages/error/ErrorPage.tsx delete mode 100644 client/src/utils/protected-route/ProtectedRoute.tsx create mode 100644 client/src/utils/routes/AuthRoute.tsx create mode 100644 client/src/utils/routes/ProtectedRoute.tsx diff --git a/client/src/App.tsx b/client/src/App.tsx index f93d971..5a341ee 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,5 +1,4 @@ import { Route, Routes } from "react-router"; -import RootLayout from "./pages/RootLayout"; import ForgetPasswordPage from "./pages/auth/ForgetPasswordPage"; import OtpPage from "./pages/auth/OtpPage"; import ResetPasswordPage from "./pages/auth/ResetPasswordPage"; @@ -9,31 +8,32 @@ import WelcomePage from "./pages/auth/WelcomePage"; import FlamiPage from "./pages/flami/FlamiPage"; import MapPage from "./pages/map/MapPage"; import ProfilePage from "./pages/profile/ProfilePage"; -import ProtectedRoute from "./utils/protected-route/ProtectedRoute"; +import ProtectedRoute from "./utils/routes/ProtectedRoute"; import { Toaster } from "react-hot-toast"; +import AuthRoute from "./utils/routes/AuthRoute"; +import ErrorPage from "./pages/error/ErrorPage"; const App = () => { return (
    - - - - } - > + }> } /> } /> } /> - } /> - } /> - } /> - } /> - } /> - } /> + }> + } /> + } /> + } /> + } + /> + } /> + } /> + + }>
    diff --git a/client/src/components/auth/otp/OtpForm.tsx b/client/src/components/auth/otp/OtpForm.tsx index 6025a8c..3a4c2bb 100644 --- a/client/src/components/auth/otp/OtpForm.tsx +++ b/client/src/components/auth/otp/OtpForm.tsx @@ -3,7 +3,7 @@ import { useState } from "react"; import { Button } from "../../ui"; import OtpInput from "./OtpInput"; import { APIHandler } from "../../../utils/api/api-handler"; -import { RegisterResponse } from "../../../interfaces/api-response/register-reponse"; +import { AuthResponse } from "../../../interfaces/api-response/auth-reponse"; import { OtpBody } from "../../../interfaces/api-body/otp-body"; import { GenericResponse } from "../../../interfaces/api-response/generic-response"; import toast from "react-hot-toast"; @@ -19,7 +19,6 @@ const OtpForm = () => { email: auth.user?.email, }; - console.log(body); APIHandler("/auth/send-otp", false, "post", body).then( (res) => { toast.success(res.data.message, { @@ -43,24 +42,19 @@ const OtpForm = () => { otp: values.otp, }; - console.log(body); - - APIHandler( - "/auth/verify-otp", - false, - "post", - body - ).then((res) => { - localStorage.setItem("token", res.data.token); - toast.success(res.data.message, { - style: { - background: "#3D3D3D", - color: "#FAFAFA", - borderRadius: "12px", - }, - }); - navigate("/"); - }); + APIHandler("/auth/verify-otp", false, "post", body).then( + (res) => { + localStorage.setItem("token", res.data.token); + toast.success(res.data.message, { + style: { + background: "#3D3D3D", + color: "#FAFAFA", + borderRadius: "12px", + }, + }); + navigate("/"); + } + ); }, validate: (values) => { const errors: Partial = {}; diff --git a/client/src/components/auth/otp/OtpInput.tsx b/client/src/components/auth/otp/OtpInput.tsx index ae5d20b..c71d10e 100644 --- a/client/src/components/auth/otp/OtpInput.tsx +++ b/client/src/components/auth/otp/OtpInput.tsx @@ -32,8 +32,6 @@ const OtpInput = ({ value, valueLength, onChange }: OtpInputProps) => { let targetValue = target.value.trim(); const isTargetValueDigit = RE_DIGIT.test(targetValue); - console.log(targetValue); - if (!isTargetValueDigit && targetValue !== "") { return; } diff --git a/client/src/components/auth/reset-password/ForgetPasswordForm.tsx b/client/src/components/auth/reset-password/ForgetPasswordForm.tsx index 5c9e025..8bd399e 100644 --- a/client/src/components/auth/reset-password/ForgetPasswordForm.tsx +++ b/client/src/components/auth/reset-password/ForgetPasswordForm.tsx @@ -1,6 +1,9 @@ import { Field, Form, Formik, FormikHelpers } from "formik"; import * as Yup from "yup"; import { Button } from "../../ui"; +import { APIHandler } from "../../../utils/api/api-handler"; +import { GenericResponse } from "../../../interfaces/api-response/generic-response"; +import toast from "react-hot-toast"; interface FormValues { email: string; @@ -11,7 +14,23 @@ const ForgetPasswordForm = () => { values: FormValues, actions: FormikHelpers ) => { - console.log(values); + const body = { + email: values.email, + }; + APIHandler( + "/auth/forget-password", + false, + "post", + body + ).then((res) => { + toast.success(res.data.message, { + style: { + background: "#3D3D3D", + color: "#FAFAFA", + borderRadius: "12px", + }, + }); + }); actions.setSubmitting(false); }; diff --git a/client/src/components/auth/reset-password/ResetPasswordForm.tsx b/client/src/components/auth/reset-password/ResetPasswordForm.tsx index 111d213..94f08e1 100644 --- a/client/src/components/auth/reset-password/ResetPasswordForm.tsx +++ b/client/src/components/auth/reset-password/ResetPasswordForm.tsx @@ -3,6 +3,13 @@ import { useState } from "react"; import { EyeIcon, EyeSlashIcon } from "react-line-awesome"; import * as Yup from "yup"; import { Button } from "../../ui"; +import { useLocation } from "react-router-dom"; +import { APIHandler } from "../../../utils/api/api-handler"; +import { ResetPasswordBody } from "../../../interfaces/api-body/reset-password-body"; +import { ResetPasswordResponse } from "../../../interfaces/api-response/reset-password-response"; +import toast from "react-hot-toast"; +import { useAuth } from "../../../hooks/useAuth"; +import { SigninBody } from "../../../interfaces/api-body/signin-body"; interface FormValues { password: string; @@ -10,6 +17,8 @@ interface FormValues { } const ResetPasswordForm = () => { + const auth = useAuth(); + const location = useLocation(); const [showPassword, setShowPassword] = useState(false); const [showConfirmPassword, setShowConfirmPassword] = useState(false); @@ -18,7 +27,32 @@ const ResetPasswordForm = () => { values: FormValues, actions: FormikHelpers ) => { - console.log(values); + const pathnameSplit = location.pathname.split("/"); + const token = pathnameSplit[2]; + const resetPasswordBody: ResetPasswordBody = { + password: values.password, + }; + + APIHandler( + `/auth/reset-password/${token}`, + false, + "post", + resetPasswordBody + ).then((res) => { + toast.success(res.data.message, { + style: { + background: "#3D3D3D", + color: "#FAFAFA", + borderRadius: "12px", + }, + }); + + const signinBody: SigninBody = { + email: res.data.email, + password: values.password, + }; + auth.signin(signinBody); + }); actions.setSubmitting(false); }; @@ -28,10 +62,9 @@ const ResetPasswordForm = () => { validationSchema={Yup.object().shape({ password: Yup.string() .required("Le mot de passe est obligatoire.") - .min(8, "Le mot de passe doit contenir 8 caractères minimum.") .matches( /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/, - "Le mot de passe doit contenir au moins une lettre majuscule, une lettre minuscule, un chiffre et un caractère special." + "Le mot de passe doit contenir au moins huit caractères, une lettre majuscule, une lettre minuscule, un chiffre et un caractère special." ) .trim(), confirmPassword: Yup.string() diff --git a/client/src/components/auth/signin/SigninForm.tsx b/client/src/components/auth/signin/SigninForm.tsx index 4eef0d5..fde6bed 100644 --- a/client/src/components/auth/signin/SigninForm.tsx +++ b/client/src/components/auth/signin/SigninForm.tsx @@ -1,18 +1,17 @@ -import { Field, Form, Formik, FormikHelpers } from "formik"; +import { Field, Form, Formik } from "formik"; import { useState } from "react"; import { EyeIcon, EyeSlashIcon } from "react-line-awesome"; import { Link } from "react-router-dom"; import * as Yup from "yup"; import { Button, LinkComponent } from "../../ui"; - -interface FormValues { - email: string; - password: string; -} +import { SigninBody } from "../../../interfaces/api-body/signin-body"; +import { useAuth } from "../../../hooks/useAuth"; const SigninForm = () => { const [showPassword, setShowPassword] = useState(false); + const auth = useAuth(); + return ( { .required("L'e-mail est obligatoire.") .trim(), password: Yup.string() - .min(8, "Le mot de passe doit faire 8 caractères minimum.") + .matches( + /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/, + "Le mot de passe doit contenir au moins huit caractères, une lettre majuscule, une lettre minuscule, un chiffre et un caractère special." + ) .required("Le mot de passe est obligatoire.") .trim(), })} - onSubmit={(values: FormValues, actions: FormikHelpers) => { - console.log(values); + onSubmit={(values, actions) => { + const body: SigninBody = { + email: values.email, + password: values.password, + }; + + auth.signin(body); actions.setSubmitting(false); - actions.resetForm(); - // actions.setFieldError("email", "Le format de l'e-mail est incorrect."); }} > {({ errors, touched, isValid, dirty }) => ( diff --git a/client/src/components/auth/signup/signup-steps/StepFour.tsx b/client/src/components/auth/signup/signup-steps/StepFour.tsx index bb3de46..4bb8c09 100644 --- a/client/src/components/auth/signup/signup-steps/StepFour.tsx +++ b/client/src/components/auth/signup/signup-steps/StepFour.tsx @@ -17,7 +17,7 @@ const lastStepValidationSchema = Yup.object().shape({ .required("Le mot de passe est obligatoire.") .matches( /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/, - "Le mot de passe doit contenir au moins 8 caractères, une lettre majuscule, une lettre minuscule, un chiffre et un caractère special." + "Le mot de passe doit contenir au moins huit caractères, une lettre majuscule, une lettre minuscule, un chiffre et un caractère special." ) .trim(), confirmPassword: Yup.string() diff --git a/client/src/components/auth/signup/signup-steps/StepOne.tsx b/client/src/components/auth/signup/signup-steps/StepOne.tsx index fecfdd0..6d972c1 100644 --- a/client/src/components/auth/signup/signup-steps/StepOne.tsx +++ b/client/src/components/auth/signup/signup-steps/StepOne.tsx @@ -43,7 +43,6 @@ const StepOne = ({ const handleSubmit = () => { if (clickedIndex !== null) { const selectedSport = choices.fav_sport[clickedIndex]; - console.log(selectedSport); nextStep({ ...data, metadata: { ...data.metadata, favorite_sport: selectedSport }, diff --git a/client/src/components/auth/signup/signup-steps/StepThree.tsx b/client/src/components/auth/signup/signup-steps/StepThree.tsx index 7cc701f..313ef7c 100644 --- a/client/src/components/auth/signup/signup-steps/StepThree.tsx +++ b/client/src/components/auth/signup/signup-steps/StepThree.tsx @@ -38,7 +38,6 @@ const StepThree = ({ const handleSubmit = () => { if (clickedIndex !== null) { const selectedIntent = choices.intent[clickedIndex]; - console.log(selectedIntent); nextStep({ ...data, metadata: { ...data.metadata, intent: selectedIntent }, diff --git a/client/src/components/auth/signup/signup-steps/StepTwo.tsx b/client/src/components/auth/signup/signup-steps/StepTwo.tsx index 2586026..33209a3 100644 --- a/client/src/components/auth/signup/signup-steps/StepTwo.tsx +++ b/client/src/components/auth/signup/signup-steps/StepTwo.tsx @@ -38,7 +38,6 @@ const StepTwo = ({ const handleSubmit = () => { if (clickedIndex !== null) { const selectedOrigin = choices.origin[clickedIndex]; - console.log(selectedOrigin); nextStep({ ...data, metadata: { ...data.metadata, origin: selectedOrigin }, @@ -82,7 +81,7 @@ const StepTwo = ({

    - Quel est ton sport préféré ? + Comment nous as-tu connu ?

      diff --git a/client/src/components/navigation/Navigation.tsx b/client/src/components/navigation/Navigation.tsx index 3252523..d7eb92c 100644 --- a/client/src/components/navigation/Navigation.tsx +++ b/client/src/components/navigation/Navigation.tsx @@ -1,5 +1,17 @@ +import { NavLink } from "../ui"; + const Navigation = () => { - return
      Navigation
      ; + return ( +
      + +
      + ); }; export default Navigation; diff --git a/client/src/components/ui/index.ts b/client/src/components/ui/index.ts index 23f9ebb..8815005 100644 --- a/client/src/components/ui/index.ts +++ b/client/src/components/ui/index.ts @@ -1,3 +1,4 @@ export * from "./button"; export * from "./link"; +export * from "./nav-link"; export * from "./reveal"; diff --git a/client/src/components/ui/nav-link.tsx b/client/src/components/ui/nav-link.tsx new file mode 100644 index 0000000..c63ac68 --- /dev/null +++ b/client/src/components/ui/nav-link.tsx @@ -0,0 +1,36 @@ +import { cva, VariantProps } from "class-variance-authority"; +import React from "react"; +import { Link } from "react-router-dom"; + +const baseNavLink = + "text-center w-full px-8 py-4 font-roboto font-bold uppercase w-full inline-block"; + +// const NavLinksVariants = { +// primary: +// "bg-tree-poppy-500 text-alabaster-950 rounded-xl shadow-primary active:shadow-none active:translate-y-1 hover:brightness-90", +// secondary: +// "bg-alabaster-950 text-alabaster-50 rounded-xl shadow-secondary border-3 border-alabaster-400 active:shadow-none active:translate-y-1 hover:brightness-90", +// tertiary: "text-mandy-500 hover:text-mandy-600", +// }; + +const navLink = cva( + baseNavLink + // { + // variants: { + // variant: NavLinksVariants, + // }, + // } +); + +export interface NavLinkProps + extends React.AnchorHTMLAttributes, + VariantProps { + to: string; +} + +export const NavLink: React.FC = ({ + className, + // variant, + to, + ...props +}) => ; diff --git a/client/src/context/authContext.ts b/client/src/context/authContext.ts index 2b7bb52..217fc36 100644 --- a/client/src/context/authContext.ts +++ b/client/src/context/authContext.ts @@ -1,11 +1,11 @@ import { createContext } from "react"; import { SignupBody } from "../interfaces/api-body/signup-body"; -import { ErrorResponse } from "../interfaces/api-response/error-response"; import { User } from "../interfaces/user.interface"; +import { SigninBody } from "../interfaces/api-body/signin-body"; export interface AuthContextType { - signin: () => void; - signup: (body: SignupBody) => Promise; + signin: (body: SigninBody) => void; + signup: (body: SignupBody) => Promise; signout: () => void; token: string | null; user: Omit | undefined; diff --git a/client/src/context/authContextProvider.tsx b/client/src/context/authContextProvider.tsx index 010b41b..c55db77 100644 --- a/client/src/context/authContextProvider.tsx +++ b/client/src/context/authContextProvider.tsx @@ -1,12 +1,13 @@ -import { useCallback, useEffect, useState } from "react"; +import { useCallback, useState } from "react"; import { AuthContext, AuthContextType } from "./authContext"; import { SignupBody } from "../interfaces/api-body/signup-body"; import { APIHandler } from "../utils/api/api-handler"; -import { RegisterResponse } from "../interfaces/api-response/register-reponse"; +import { AuthResponse } from "../interfaces/api-response/auth-reponse"; import { useNavigate } from "react-router"; import { GenericResponse } from "../interfaces/api-response/generic-response"; import toast from "react-hot-toast"; import { User } from "../interfaces/user.interface"; +import { SigninBody } from "../interfaces/api-body/signin-body"; interface AuthContextProviderInterface { children: React.ReactNode; @@ -22,14 +23,38 @@ export const AuthContextProvider = ({ const navigate = useNavigate(); - const signin = useCallback(() => {}); + const signin = useCallback( + (body: SigninBody) => { + APIHandler("/auth/signin", false, "post", body).then( + (res) => { + setToken(res.data.token); + localStorage.setItem("token", res.data.token); + toast.success(res.data.message, { + style: { + background: "#3D3D3D", + color: "#FAFAFA", + borderRadius: "12px", + }, + }); + navigate("/"); + } + ); + }, + [navigate] + ); - const signout = async () => {}; + const signout = () => { + localStorage.clear(); + setUser(undefined); + setToken(null); + navigate("/sign-in"); + }; const signup = async (body: SignupBody) => { - APIHandler("/auth/signup", false, "post", body).then( + APIHandler("/auth/signup", false, "post", body).then( (res) => { setToken(res.data.token); + navigate("/otp"); APIHandler("/auth/send-otp", false, "post", body).then( (res) => { setUser({ @@ -43,22 +68,16 @@ export const AuthContextProvider = ({ borderRadius: "12px", }, }); - navigate("/otp"); } ); } ); }; - const verifyTokenValidity = useCallback(() => {}); - - useEffect(() => {}); - const authContextValue: AuthContextType = { signin, signout, signup, - setToken, token, user, }; diff --git a/client/src/interfaces/api-body/reset-password-body.ts b/client/src/interfaces/api-body/reset-password-body.ts new file mode 100644 index 0000000..2169bd9 --- /dev/null +++ b/client/src/interfaces/api-body/reset-password-body.ts @@ -0,0 +1,3 @@ +export interface ResetPasswordBody { + password: string; +} diff --git a/client/src/interfaces/api-response/register-reponse.ts b/client/src/interfaces/api-response/auth-reponse.ts similarity index 51% rename from client/src/interfaces/api-response/register-reponse.ts rename to client/src/interfaces/api-response/auth-reponse.ts index ab7bc4c..fcf779c 100644 --- a/client/src/interfaces/api-response/register-reponse.ts +++ b/client/src/interfaces/api-response/auth-reponse.ts @@ -1,4 +1,4 @@ -export interface RegisterResponse { +export interface AuthResponse { message: string; token: string; } diff --git a/client/src/interfaces/api-response/generic-response.ts b/client/src/interfaces/api-response/generic-response.ts index 2494632..051bb5e 100644 --- a/client/src/interfaces/api-response/generic-response.ts +++ b/client/src/interfaces/api-response/generic-response.ts @@ -1,3 +1,4 @@ export interface GenericResponse { message: string; + error: number; } diff --git a/client/src/interfaces/api-response/reset-password-response.ts b/client/src/interfaces/api-response/reset-password-response.ts new file mode 100644 index 0000000..cef9a67 --- /dev/null +++ b/client/src/interfaces/api-response/reset-password-response.ts @@ -0,0 +1,4 @@ +export interface ResetPasswordResponse { + message: string; + email: string; +} diff --git a/client/src/pages/RootLayout.tsx b/client/src/pages/RootLayout.tsx deleted file mode 100644 index 96ed0da..0000000 --- a/client/src/pages/RootLayout.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { Outlet } from "react-router"; - -const AuthLayout = () => { - return ( -
      - -
      - ); -}; - -export default AuthLayout; diff --git a/client/src/pages/error/ErrorPage.tsx b/client/src/pages/error/ErrorPage.tsx new file mode 100644 index 0000000..1bcc7f3 --- /dev/null +++ b/client/src/pages/error/ErrorPage.tsx @@ -0,0 +1,5 @@ +const ErrorPage = () => { + return
      404 : Page non trouvée !
      ; +}; + +export default ErrorPage; diff --git a/client/src/pages/profile/ProfilePage.tsx b/client/src/pages/profile/ProfilePage.tsx index 1017f59..8790da2 100644 --- a/client/src/pages/profile/ProfilePage.tsx +++ b/client/src/pages/profile/ProfilePage.tsx @@ -1,5 +1,16 @@ +import { Button } from "../../components/ui"; +import { useAuth } from "../../hooks/useAuth"; + const ProfilePage = () => { - return
      ProfilePage
      ; + const auth = useAuth(); + + return ( +
      + +
      + ); }; export default ProfilePage; diff --git a/client/src/utils/protected-route/ProtectedRoute.tsx b/client/src/utils/protected-route/ProtectedRoute.tsx deleted file mode 100644 index 164d9b9..0000000 --- a/client/src/utils/protected-route/ProtectedRoute.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from "react"; -import { Navigate } from "react-router"; -import { useAuth } from "../../hooks/useAuth"; - -const ProtectedRoute = ({ children }: { children: React.ReactNode }) => { - const auth = useAuth(); - const token = auth.token; - if (!token) { - return ; - } - return children; -}; - -export default ProtectedRoute; diff --git a/client/src/utils/routes/AuthRoute.tsx b/client/src/utils/routes/AuthRoute.tsx new file mode 100644 index 0000000..2603ee1 --- /dev/null +++ b/client/src/utils/routes/AuthRoute.tsx @@ -0,0 +1,20 @@ +import { Navigate, Outlet } from "react-router"; +import { useAuth } from "../../hooks/useAuth"; + +const AuthRoute = () => { + const { token } = useAuth(); + + return ( + <> + {token ? ( + + ) : ( +
      + +
      + )} + + ); +}; + +export default AuthRoute; diff --git a/client/src/utils/routes/ProtectedRoute.tsx b/client/src/utils/routes/ProtectedRoute.tsx new file mode 100644 index 0000000..578658c --- /dev/null +++ b/client/src/utils/routes/ProtectedRoute.tsx @@ -0,0 +1,24 @@ +import { Navigate, Outlet } from "react-router"; +import { useAuth } from "../../hooks/useAuth"; +import Navigation from "../../components/navigation/Navigation"; + +const ProtectedRoute = () => { + const { token } = useAuth(); + + return ( + <> + {token ? ( + <> +
      + +
      + + + ) : ( + + )} + + ); +}; + +export default ProtectedRoute; diff --git a/client/tailwind.config.js b/client/tailwind.config.js index 9f74cea..f6b4c59 100644 --- a/client/tailwind.config.js +++ b/client/tailwind.config.js @@ -78,6 +78,7 @@ export default { primary: "0px 6px 0px #ffbd1b", secondary: "0px 6px 0px #989898", none: "none", + nav: "0px -6px 0px #656565", "tree-poppy-500": "0px 6px 0px #ff9900", "tree-poppy-500-press": "0px 2px 0px #ff9900", }, diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index abbdb5c..41e9afa 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -20,7 +20,9 @@ const authController = { !userdata.email || !String(userdata.email) .toLowerCase() - .match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/) + .match( + /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + ) ) { return res.status(401).json({ message: `E-mail invalide.`, @@ -104,7 +106,7 @@ const authController = { req.brute.reset(); // reset brute counter return res.status(200).json({ data: { - message: "Authentification réussie.", + message: "Bienvenue sur l'application Flami !", token: token, }, }); diff --git a/server/controllers/forgetPassword.controller.js b/server/controllers/forgetPassword.controller.js index 53030e5..19a6f9f 100644 --- a/server/controllers/forgetPassword.controller.js +++ b/server/controllers/forgetPassword.controller.js @@ -1,9 +1,12 @@ import bcrypt from "bcryptjs"; import jwt from "jsonwebtoken"; +import dotenv from "dotenv"; import { mailSender } from "../mail/mailSender.js"; import userModel from "../models/user.model.js"; import templateForgotPassword from "../mail/templateForgotPassword.mjs"; +dotenv.config(); + const forgetPasswordController = { forgetPassword: async (req, res) => { try { @@ -22,16 +25,18 @@ const forgetPasswordController = { const info = await mailSender( user.email, "Mot de passe oublié ? - Flami vient à votre aide !", - templateForgotPassword(`${res.domain}/reset-password/${token}`) + templateForgotPassword(`${process.env.URL_APP}/reset-password/${token}`) ); if (!info) { return res .status(500) - .json({ message: "Email non envoyé.", error: 500 }); + .json({ data: { message: "E-mail non envoyé.", error: 500 } }); } - return res.status(200).json({ message: "Email envoyé.", error: 200 }); + return res + .status(200) + .json({ data: { message: "E-mail envoyé.", error: 200 } }); } catch (error) { return res.status(500).json({ message: error.message, error: 500 }); } @@ -44,18 +49,25 @@ const forgetPasswordController = { return res.status(401).json({ message: "Token invalide.", error: 401 }); } - const user = await userModel.findOneAndUpdate(decodedToken.email, { - password: bcrypt.hashSync(req.body.password, bcrypt.genSaltSync(11)), - }); + const user = await userModel.findOneAndUpdate( + { email: decodedToken.email }, + { + password: bcrypt.hashSync(req.body.password, bcrypt.genSaltSync(11)), + } + ); if (!user) { return res .status(401) .json({ message: "Ce compte n'existe pas.", error: 401 }); } - return res - .status(200) - .json({ data: { message: "Mot de passe mis à jour.", error: 200 } }); + return res.status(200).json({ + data: { + message: "Mot de passe mis à jour.", + email: decodedToken.email, + error: 200, + }, + }); } catch (error) { return res.status(500).json({ message: error.message, error: 500 }); } diff --git a/server/helpers/authMiddleware.js b/server/helpers/authMiddleware.js index c68d093..dfa29cf 100644 --- a/server/helpers/authMiddleware.js +++ b/server/helpers/authMiddleware.js @@ -20,7 +20,7 @@ const auth = { ); let user = await userModel.findByEmail(userdata.email); - + if (!user) { throw { code: 404, @@ -32,7 +32,7 @@ const auth = { if (!user.isVerified) { throw { code: 403, - message: "OTP not verified", + message: "L'utilisateur n'est pas vérifié.", }; } @@ -43,7 +43,7 @@ const auth = { .status(error.code ?? 401) .json({ message: error.message, error: error.code ?? 401 }); } - } + }, }; export default auth; From d0582e09d88cb8a1807ef9baea219ab5092bfdc7 Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 11 Mar 2024 11:40:24 +0100 Subject: [PATCH 069/108] fix(token): fixed otp behavior --- client/src/components/auth/otp/OtpForm.tsx | 3 ++- client/src/components/auth/otp/OtpInput.tsx | 6 ++++-- client/src/context/authContext.ts | 1 + client/src/context/authContextProvider.tsx | 8 ++++---- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/client/src/components/auth/otp/OtpForm.tsx b/client/src/components/auth/otp/OtpForm.tsx index 3a4c2bb..ee6592f 100644 --- a/client/src/components/auth/otp/OtpForm.tsx +++ b/client/src/components/auth/otp/OtpForm.tsx @@ -44,7 +44,6 @@ const OtpForm = () => { APIHandler("/auth/verify-otp", false, "post", body).then( (res) => { - localStorage.setItem("token", res.data.token); toast.success(res.data.message, { style: { background: "#3D3D3D", @@ -52,6 +51,8 @@ const OtpForm = () => { borderRadius: "12px", }, }); + auth.setToken(res.data.token); + localStorage.setItem("token", res.data.token); navigate("/"); } ); diff --git a/client/src/components/auth/otp/OtpInput.tsx b/client/src/components/auth/otp/OtpInput.tsx index c71d10e..6acc863 100644 --- a/client/src/components/auth/otp/OtpInput.tsx +++ b/client/src/components/auth/otp/OtpInput.tsx @@ -9,7 +9,7 @@ interface OtpInputProps { const OtpInput = ({ value, valueLength, onChange }: OtpInputProps) => { const valueItems = useMemo(() => { - const valueArray = value.split(""); + const valueArray = value.trim().split(""); const items: string[] = []; for (let i = 0; i < valueLength; i++) { @@ -30,7 +30,9 @@ const OtpInput = ({ value, valueLength, onChange }: OtpInputProps) => { ) => { const target = event.target; let targetValue = target.value.trim(); + console.log(targetValue); const isTargetValueDigit = RE_DIGIT.test(targetValue); + console.log(isTargetValueDigit); if (!isTargetValueDigit && targetValue !== "") { return; @@ -42,7 +44,7 @@ const OtpInput = ({ value, valueLength, onChange }: OtpInputProps) => { if (targetValueLength === 1) { const newValue = - value.substring(0, index) + targetValue + value.substring(index + 1); + value.trim().substring(0, index) + targetValue + value.trim().substring(index + 1); onChange(newValue.replace(/\s/g, "")); diff --git a/client/src/context/authContext.ts b/client/src/context/authContext.ts index 217fc36..507d651 100644 --- a/client/src/context/authContext.ts +++ b/client/src/context/authContext.ts @@ -9,6 +9,7 @@ export interface AuthContextType { signout: () => void; token: string | null; user: Omit | undefined; + setToken: React.Dispatch>; } export const AuthContext = createContext(null); diff --git a/client/src/context/authContextProvider.tsx b/client/src/context/authContextProvider.tsx index c55db77..ba053bb 100644 --- a/client/src/context/authContextProvider.tsx +++ b/client/src/context/authContextProvider.tsx @@ -52,8 +52,7 @@ export const AuthContextProvider = ({ const signup = async (body: SignupBody) => { APIHandler("/auth/signup", false, "post", body).then( - (res) => { - setToken(res.data.token); + () => { navigate("/otp"); APIHandler("/auth/send-otp", false, "post", body).then( (res) => { @@ -69,8 +68,8 @@ export const AuthContextProvider = ({ }, }); } - ); - } + ); + } ); }; @@ -80,6 +79,7 @@ export const AuthContextProvider = ({ signup, token, user, + setToken }; return ( From 85f2c6931f2a0f0ad9ac054347d081dbc3f2cea7 Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 11 Mar 2024 11:41:53 +0100 Subject: [PATCH 070/108] refactor(errors): change error message sended to front --- server/controllers/auth.controller.js | 5 +++-- server/controllers/otp.controller.js | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/server/controllers/auth.controller.js b/server/controllers/auth.controller.js index 41e9afa..dfbf923 100644 --- a/server/controllers/auth.controller.js +++ b/server/controllers/auth.controller.js @@ -77,7 +77,8 @@ const authController = { error: 409, }); } else { - return res.status(409).json({ message: error.message, error: 409 }); + console.error(error); + return res.status(409).json({ message: "Une erreur s'est produite.", error: 409 }); } } }, @@ -116,7 +117,7 @@ const authController = { .json({ message: "E-mail ou mot de passe incorrect.", error: 401 }); } } catch (error) { - return res.status(404).json({ message: error.message, error: 404 }); + return res.status(404).json({ message: "Une erreur s'est produite.", error: 404 }); } }, }; diff --git a/server/controllers/otp.controller.js b/server/controllers/otp.controller.js index 2a6f526..3c0d6e6 100644 --- a/server/controllers/otp.controller.js +++ b/server/controllers/otp.controller.js @@ -42,7 +42,7 @@ const otpController = { }); } catch (error) { console.error(error.message); - res.status(500).json({ message: error.message, error: 500 }); + res.status(500).json({ message: "Une erreur s'est produite.", error: 500 }); } }, @@ -78,7 +78,7 @@ const otpController = { }, }); } catch (error) { - res.status(500).json({ message: error.message, error: 500 }); + res.status(500).json({ message: "Une erreur s'est produite.", error: 500 }); } }, }; From c1cff0f8bf16eb0f4fba6f54e39061377340eb0f Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 11 Mar 2024 11:42:41 +0100 Subject: [PATCH 071/108] feature(cosmetic): added base cosmetics integration --- server/data/cosmetics.json | 38 ++++++++++++++++++++++++++++ server/data/cosmetics_positions.png | Bin 0 -> 13201 bytes 2 files changed, 38 insertions(+) create mode 100644 server/data/cosmetics.json create mode 100644 server/data/cosmetics_positions.png diff --git a/server/data/cosmetics.json b/server/data/cosmetics.json new file mode 100644 index 0000000..b0a65f5 --- /dev/null +++ b/server/data/cosmetics.json @@ -0,0 +1,38 @@ +[ + { + "name": "Gants de boxe", + "description": "Des gants de boxe d'une grande qualité, donné aux utilisateurs aimant le sport de combat.", + "url": "", + "place": 2 + }, + { + "name": "Turbo-Chaussures", + "description": "Des baskets qui courts vite, donné aux utilisateurs aimant le sport de course.", + "url": "", + "place": 4 + }, + { + "name": "Bonnet de bain et lunettes de plongé", + "description": "Quelle allure ! Donné aux utilisateurs aimant le sport aquatique.", + "url": "", + "place": 1 + }, + { + "name": "Ballon de basket-ball", + "description": "Un ballon de basket-ball bien gonflé, donné aux utilisateurs aimant le sport collectif.", + "url": "", + "place": 3 + }, + { + "name": "Ballon de volley-ball", + "description": "Un ballon de volley-ball bien gonflé, donné aux utilisateurs aimant le sport de plage.", + "url": "", + "place": 3 + }, + { + "name": "Altère pesant son poids", + "description": "Une altère d'au moins 200kg, donné aux utilisateurs aimant le sport de force.", + "url": "", + "place": 3 + } +] \ No newline at end of file diff --git a/server/data/cosmetics_positions.png b/server/data/cosmetics_positions.png new file mode 100644 index 0000000000000000000000000000000000000000..108dfad94db59b2a6c6762c736233d95a82ff1fe GIT binary patch literal 13201 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 z z;GE*fke)bOjxh5xDLqYBZV-FhA@DX+qOVuwbGxK7cq@+h@)d@YF|+&>U1zSPgfd6O z5R!+I!_eLNWJzJkB+!ZNFk+^vY`IXjAy?Vo&uZ#UVw#kQz{X1St;HH3tH!`M(T08u z&GAmd2eY&<(^pr-=L`~y1gF<`93iFSe@}5n=Us)V}Xt%i? zQX5+H%eShJyN)FeGvO&999%#6@A-mjSQ78$c_XzFT*?Mx^IPA>d*15${{!5SPgK6{DM zIqp{pyv$+h6Tehvq69`qA;_Rw@wck6DiZqC9AY-lcEjb{HAH^+d7qOdJxMFnIcyz*f}dYz$KnySr33?~S&$*7ff)%~cu1uw?EX?4}$ z%|dB2*KPd?dlw$5(_5QUp-HJ#N!15|^LPhq%*#noEZ0=2QbTd$f{%I19`qoN-#hEs z$B_Wb#u;U_P;^km?WwCerY~0sM&P%>@m*q(YsK`R;=d`~>u~S@X4y0ZtnyqLO(m*a zSIYoqx}uW^-tW6!xShHl&6T%NN%`~7WH74oz`&8r2G3~EQ=ziQHF_RXs<-tJy)Zfn{=X*dc~wDV*+ix-kc zhT43%b=2+FJwS{K+`?*|I|2EX8UClm4J2U~??2HO-MzD0D(#nbN_TS~nQ@D0N_@yE zd1tngqLRN-qte+S4GS|4hR9D@^gEK2^au5v?i*OJhQ^o`j(r>#SMK;+udsNABkf+R zT`g1wavC$lQB6$36$y>bQ%w6GcRlt_bn*+~Mf`W-+@UtWE@nDLXf$TCfZk$|`qR9@ z%wF7b<{ISaFDRc}!rq|0g~ z8$vIEuyBgiYGsN`|j6@C_dP4TnQmT zVFSkXHm2H;K6AGfdbbb>FD2-G$Glo_e>6ify}hoS_)B81UyV-|jslRbCDIe9%GgR* z_*1c#x=Qg2ce_RT4EEJ{H9e}SaK=fxKIP|vedA{V(12&y2zqoaXV%FP&WI(u8c&}F zBnoN!2J^9lB}-)wNHS*PthcvpA03Zt`r}4S4s=N<)^lCvYV&=xig*2=7tC&21c!UA zo9zU@ki?Q-jrYlyWW0vUztbBvZcOsKwV&8qlmTDxBW-H|~Be2;* zCiy*iZlyaFo+v+EZz7Grjuu}~hYD?6TWpX0R%TR=KlNJ9yXhIcZT`!mt$oOkTVj!V zno_Df`_Ep2UI_0DBPm8u8qCCre%?Upk+5r^w5ijFAlaLA*QX)>x^BeZzWjR9u=kZF z@#A%(>FoZMJ=ePXGSH`*Rg2xF;yH=7V#}5JK0qSxxX;O9W*nUM9kae#!*Zi{Tl6ZX zWwKa^*&CYTJc>pPf5LC-8!+!ArJ^#bPpUW8popMJquzoH=yIuVt+&XJ^(cM&pl^mf zYzn;^#vfPNv9A^m!%JpVGb$Af_FvO{xHz4=FrGDHiwK|R26zN}ua<6lYZfo!CPltc ze1x4Ar%{6AM((e9C2dLho1OT%5r3s+k@P<>KYT-zc$xOQe@NrKIlmO1?wI<;P@;RH zu!=yb(x+re`x{BkOlbZ=!Dl$_&*ecQ-ba*S&wXr5SH~7)MVX?nz+yG4$drU-?D%PS z6;723xP(}vxumy$EBG7Fa;6F1*%0q*=TTvMdipdx|FCo$POI+uvxLD+h+NJ0xifwI z=pVLc5@b@|gTEDO_?j7w2LHb=+L5gd8_>m*rC}ydm=E8(3y7O^Y7p8(d zyQ*B}z*54FXne)dQuXf@4&S#LnXJ57tJgO?qJ%fYCWkW-F+NRL2Tqi)qtK^DrCGHn zs+A;YA@;1BTlO`w=wvFMuhx~uMkB4SuQ_WB<3nI3wUOgQ z=%ITr$do@DD>!QyTLVeP&*WLS9E<62qq&Q`wf=%2{x7vu^L!+=FUh z+!lVKk@~1`vEZbAL&MyffgF58o~4U;-tJ(10@nGK3O1Of0Q=b)!7n#L2`i>>-*aFf z$Ao_Nz}5Fk7=5;WlPYKx+<5f!{m5Xp(g=;#*wbag6_L;RPk6-BlR!p0X^2z=e|LM}#i<42;{31}7zEM+jJTSYV(zY0>{^c}77hI4x1V`&R%6YY&QHV`fP(~ya1NzVyh@*w0nsA@y;TDIW9cvG##mY zYAIn%u=+ri*}(pM?&8m{*+@qR2krL^5A`$sb|R!U>*sMHl(NfzOaol6;FdTz58C0? z1k7Mz)w>15`Q?&iVjCXOOdFwi2T~N4!!|xck1IHEyNh8{W%!X85l6_7Ib$@v71(}b zxKecDZp3-Nb~RfV@=Zk*bv%$B{r}=yk^lKoN-l-kd7ygJk7d)bA~)bO8Uod)nor6U HErb6Lz2(Vq literal 0 HcmV?d00001 From 524467ee06eded7474e282ab128bc6d4e90f6271 Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 11 Mar 2024 11:43:04 +0100 Subject: [PATCH 072/108] fix(token): fixed token expiration date --- server/helpers/authMiddleware.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/helpers/authMiddleware.js b/server/helpers/authMiddleware.js index dfa29cf..1d2c426 100644 --- a/server/helpers/authMiddleware.js +++ b/server/helpers/authMiddleware.js @@ -3,7 +3,7 @@ import userModel from "../models/user.model.js"; const auth = { encode: (data) => { - return jwt.sign(data, process.env.PRIVATE, { expiresIn: 60 * 60 * 12 }); + return jwt.sign(data, process.env.PRIVATE, { expiresIn: 60 * 5 }); }, require: async (req, res, next) => { try { From 0660b26f1c21232310fdb8632ecda95a23e90553 Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 11 Mar 2024 11:43:06 +0100 Subject: [PATCH 073/108] Update templateOTP.mjs --- server/mail/templateOTP.mjs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server/mail/templateOTP.mjs b/server/mail/templateOTP.mjs index 73cd20f..7bffc91 100644 --- a/server/mail/templateOTP.mjs +++ b/server/mail/templateOTP.mjs @@ -1,5 +1,4 @@ export default function templateOTP(otp) { - return `