diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..cea7250
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 Dario Weinberger & Raphael Payet
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..8b00592
--- /dev/null
+++ b/README.md
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Wikipedia article comparison tool. This tool allows you to compare the data contained in the infoboxes as well as statistics of 2 different wikipedia articles.
+
+
+## Demo
+
+
+
+
+
+
+
+
Access online demo : [radar.dariow.fr](https://radar.dariow.fr)
+
+
+
+
+## Dependencies
+
+
+We use docker containers, so it will be necessary to have Docker and Docker compose.
+
+Installation Guides:
+- [docker](https://docs.docker.com/)
+- [docker-compose](https://docs.docker.com/compose/install/)
+
+## Install
+Configure logins and passwords in the ".env" located in the root of the project (PLEASE USE STRONG PASSWORDS):
+
+```yml
+# Root password
+DATABASE_ROOT_PASSWORD=changeme # NEED TO CHANGE !
+
+# User to use
+DATABASE_USER=radar
+
+# User password
+DATABASE_PASSWORD=changeme # NEED TO CHANGE !
+
+# Database name
+DATABASE=rappaurio
+
+```
+
+And do the same for the ".env" inside the "app-rappaurio" folder :
+
+```yml
+# Root password
+DATABASE_ROOT_PASSWORD=changeme # NEED TO CHANGE !
+
+# MariaDB hostname
+DATABASE_HOST=db
+
+# User to use
+DATABASE_USER=radar
+
+# User password
+DATABASE_PASSWORD=changeme # NEED TO CHANGE !
+
+# Database name
+DATABASE=rappaurio
+
+# Token private Key
+JWT_SECRET=hsdgbniojksdgoijosidgjoisdg # NEED TO CHANGE !
+
+JWT_EXPIRES_IN=86400000
+JWT_COOKIE_EXPIRES_IN=86400000
+```
+
+Building images using docker-compose.yml:
+
+```shell
+docker-compose build
+```
+Launching containers using the docker-compose.yml file:
+
+```shell
+docker-compose up -d
+
+```
+
+The site is now available locally on https://localhost:8888
+
+Or at the ip address of your machine [https://\:8888]()
diff --git a/app-rappaurio/.env b/app-rappaurio/.env
new file mode 100644
index 0000000..4132a86
--- /dev/null
+++ b/app-rappaurio/.env
@@ -0,0 +1,20 @@
+# Root password
+DATABASE_ROOT_PASSWORD=changeme # NEED TO CHANGE !
+
+# MariaDB hostname
+DATABASE_HOST=db
+
+# User to use
+DATABASE_USER=radar
+
+# User password
+DATABASE_PASSWORD=changeme # NEED TO CHANGE !
+
+# Database name
+DATABASE=rappaurio
+
+# Token private Key
+JWT_SECRET=hsdgbniojksdgoijosidgjoisdg # NEED TO CHANGE !
+
+JWT_EXPIRES_IN=86400000
+JWT_COOKIE_EXPIRES_IN=86400000
\ No newline at end of file
diff --git a/app-rappaurio/Dockerfile b/app-rappaurio/Dockerfile
new file mode 100644
index 0000000..cf6c278
--- /dev/null
+++ b/app-rappaurio/Dockerfile
@@ -0,0 +1,20 @@
+# pull the Node.js Docker image
+FROM node:alpine
+
+# create the directory inside the container
+WORKDIR /usr/src/app
+
+# copy the package.json files from local machine to the workdir in container
+COPY package*.json ./
+
+# run npm install in our local machine
+RUN npm install
+
+# copy the generated modules and all other files to the container
+COPY . .
+
+# our app is running on port 5000 within the container, so need to expose it
+EXPOSE 5000
+
+# the command that starts our app
+CMD ["npm", "start"]
diff --git a/app-rappaurio/app.js b/app-rappaurio/app.js
new file mode 100644
index 0000000..a5aabf4
--- /dev/null
+++ b/app-rappaurio/app.js
@@ -0,0 +1,63 @@
+var createError = require('http-errors');
+var express = require('express');
+var path = require('path');
+var cookieParser = require('cookie-parser');
+var logger = require('morgan');
+const mysql = require('mysql');
+const dotenv = require('dotenv');
+
+var app = express();
+
+dotenv.config({ path : './.env'})
+
+// Create database connection
+const db = mysql.createConnection({
+ host: process.env.DATABASE_HOST,
+ user: process.env.DATABASE_USER,
+ password: process.env.DATABASE_PASSWORD,
+ database: process.env.DATABASE
+});
+
+
+// Connecting our databse and checking everything works fine
+db.connect( (error)=>{
+ if(error){
+ console.log(error)
+ }
+ else{
+ console.log("MySQL database connected...")
+ }
+})
+
+// view engine setup
+app.set('views', path.join(__dirname, 'views'));
+app.set('view engine', 'hbs');
+
+app.use(logger('dev'));
+app.use(express.json());
+app.use(express.urlencoded({ extended: false }));
+app.use(cookieParser());
+app.use(express.static(path.join(__dirname, 'public')));
+
+// Define Routes
+app.use('/', require('./server/routes/index'));
+app.use('/auth', require('./server/routes/auth'));
+
+
+// catch 404 and forward to error handler
+app.use(function(req, res, next) {
+ next(createError(404));
+});
+
+// error handler
+app.use(function(err, req, res, next) {
+ // set locals, only providing error in development
+ res.locals.message = err.message;
+ res.locals.error = req.app.get('env') === 'development' ? err : {};
+
+ // render the error page
+ res.status(err.status || 500);
+ res.render('contains/404');
+});
+
+module.exports = app;
diff --git a/app-rappaurio/bin/www b/app-rappaurio/bin/www
new file mode 100644
index 0000000..3d610e0
--- /dev/null
+++ b/app-rappaurio/bin/www
@@ -0,0 +1,91 @@
+#!/usr/bin/env node
+
+/**
+ * Module dependencies.
+ */
+
+var app = require('../app');
+var debug = require('debug')('app-rappaurio:server');
+var http = require('http');
+
+/**
+ * Get port from environment and store in Express.
+ */
+
+var port = normalizePort(process.env.PORT || '5000');
+app.set('port', port);
+console.log("Server started on port : " + port);
+
+/**
+ * Create HTTP server.
+ */
+
+var server = http.createServer(app);
+
+/**
+ * Listen on provided port, on all network interfaces.
+ */
+
+server.listen(port);
+server.on('error', onError);
+server.on('listening', onListening);
+
+/**
+ * Normalize a port into a number, string, or false.
+ */
+
+function normalizePort(val) {
+ var port = parseInt(val, 10);
+
+ if (isNaN(port)) {
+ // named pipe
+ return val;
+ }
+
+ if (port >= 0) {
+ // port number
+ return port;
+ }
+
+ return false;
+}
+
+/**
+ * Event listener for HTTP server "error" event.
+ */
+
+function onError(error) {
+ if (error.syscall !== 'listen') {
+ throw error;
+ }
+
+ var bind = typeof port === 'string'
+ ? 'Pipe ' + port
+ : 'Port ' + port;
+
+ // handle specific listen errors with friendly messages
+ switch (error.code) {
+ case 'EACCES':
+ console.error(bind + ' requires elevated privileges');
+ process.exit(1);
+ break;
+ case 'EADDRINUSE':
+ console.error(bind + ' is already in use');
+ process.exit(1);
+ break;
+ default:
+ throw error;
+ }
+}
+
+/**
+ * Event listener for HTTP server "listening" event.
+ */
+
+function onListening() {
+ var addr = server.address();
+ var bind = typeof addr === 'string'
+ ? 'pipe ' + addr
+ : 'port ' + addr.port;
+ debug('Listening on ' + bind);
+}
diff --git a/app-rappaurio/package-lock.json b/app-rappaurio/package-lock.json
new file mode 100644
index 0000000..c3ede18
--- /dev/null
+++ b/app-rappaurio/package-lock.json
@@ -0,0 +1,1292 @@
+{
+ "name": "app-rappaurio",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "app-rappaurio",
+ "version": "0.0.0",
+ "dependencies": {
+ "axios": "^1.5.1",
+ "bcryptjs": "^2.4.3",
+ "cookie-parser": "~1.4.4",
+ "debug": "~2.6.9",
+ "dotenv": "^16.3.1",
+ "express": "^4.18.2",
+ "hbs": "^4.2.0",
+ "http-errors": "~1.6.3",
+ "jsonwebtoken": "^9.0.2",
+ "morgan": "~1.9.1",
+ "mysql": "^2.18.1",
+ "wikiapi": "^1.19.4"
+ }
+ },
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "node_modules/axios": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz",
+ "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==",
+ "dependencies": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/basic-auth": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
+ "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
+ "dependencies": {
+ "safe-buffer": "5.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "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/bignumber.js": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
+ "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/body-parser": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
+ "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.11.0",
+ "raw-body": "2.5.1",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/body-parser/node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/body-parser/node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/body-parser/node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/body-parser/node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/body-parser/node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ },
+ "node_modules/body-parser/node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "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",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/cejs": {
+ "version": "4.5.5",
+ "resolved": "https://registry.npmjs.org/cejs/-/cejs-4.5.5.tgz",
+ "integrity": "sha512-226z/O8jdaPl0Byk7JZvpblvrlWxc010Uz1Ev+hHcJwvRaM9T8pL8eVyp3qlMSq4V6eVI9mBzsETcFVooLov/g==",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-disposition/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "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-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-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/dotenv": {
+ "version": "16.3.1",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz",
+ "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "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",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+ },
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express": {
+ "version": "4.18.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
+ "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
+ "dependencies": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.1",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.5.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.2.0",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.11.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.18.0",
+ "serve-static": "1.15.0",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/express/node_modules/cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express/node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/express/node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/express/node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/express/node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/express/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/express/node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ },
+ "node_modules/express/node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/finalhandler/node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/finalhandler/node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
+ "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/foreachasync": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz",
+ "integrity": "sha512-J+ler7Ta54FwwNcx6wQRDhTIbNeyDcARMkOcguEqnEdtm0jKvN3Li3PDAb2Du3ubJYEWfYL83XMROXdsXAXycw=="
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hbs": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/hbs/-/hbs-4.2.0.tgz",
+ "integrity": "sha512-dQwHnrfWlTk5PvG9+a45GYpg0VpX47ryKF8dULVd6DtwOE6TEcYQXQ5QM6nyOx/h7v3bvEQbdn19EDAcfUAgZg==",
+ "dependencies": {
+ "handlebars": "4.7.7",
+ "walk": "2.3.15"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
+ "dependencies": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw=="
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "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/jsonwebtoken/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "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/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/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+ },
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/morgan": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz",
+ "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==",
+ "dependencies": {
+ "basic-auth": "~2.0.0",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "on-headers": "~1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/mysql": {
+ "version": "2.18.1",
+ "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
+ "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
+ "dependencies": {
+ "bignumber.js": "9.0.0",
+ "readable-stream": "2.3.7",
+ "safe-buffer": "5.1.2",
+ "sqlstring": "2.3.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
+ },
+ "node_modules/object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "node_modules/qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/raw-body/node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/raw-body/node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/raw-body/node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/raw-body/node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ },
+ "node_modules/raw-body/node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/send": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/send/node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/send/node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/send/node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/send/node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/send/node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ },
+ "node_modules/send/node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/serve-static": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+ "dependencies": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.18.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sqlstring": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
+ "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/walk": {
+ "version": "2.3.15",
+ "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.15.tgz",
+ "integrity": "sha512-4eRTBZljBfIISK1Vnt69Gvr2w/wc3U6Vtrw7qiN5iqYJPH7LElcYh/iU4XWhdCy2dZqv1ToMyYlybDylfG/5Vg==",
+ "dependencies": {
+ "foreachasync": "^3.0.0"
+ }
+ },
+ "node_modules/wikiapi": {
+ "version": "1.19.4",
+ "resolved": "https://registry.npmjs.org/wikiapi/-/wikiapi-1.19.4.tgz",
+ "integrity": "sha512-gh6M026re+FxkQS6DEjTTii/zs3VGvCT8HYkIG17NsNGPW9hiZT8uWovU/uu0JUKZ3OXdy+JD94Jk4ko++AZ8Q==",
+ "dependencies": {
+ "cejs": "latest"
+ },
+ "engines": {
+ "node": ">=12.0"
+ }
+ },
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ }
+ }
+}
diff --git a/app-rappaurio/package.json b/app-rappaurio/package.json
new file mode 100644
index 0000000..818aacc
--- /dev/null
+++ b/app-rappaurio/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "app-rappaurio",
+ "version": "1.2.0",
+ "description": "Require nodejs 14 or higher",
+ "main": "app.js",
+ "private": true,
+ "scripts": {
+ "start": "node ./bin/www"
+ },
+ "author": "Dario WEINBERGER & Raphael PAYET",
+ "license": "ISC",
+ "dependencies": {
+ "axios": "^1.5.1",
+ "bcryptjs": "^2.4.3",
+ "cookie-parser": "~1.4.4",
+ "debug": "~2.6.9",
+ "dotenv": "^16.3.1",
+ "express": "^4.18.2",
+ "hbs": "^4.2.0",
+ "http-errors": "~1.6.3",
+ "jsonwebtoken": "^9.0.2",
+ "morgan": "~1.9.1",
+ "mysql": "^2.18.1",
+ "wikiapi": "^1.19.4"
+ }
+}
diff --git a/app-rappaurio/public/images/blog-details-02.jpg b/app-rappaurio/public/images/blog-details-02.jpg
new file mode 100644
index 0000000..19b8ffb
Binary files /dev/null and b/app-rappaurio/public/images/blog-details-02.jpg differ
diff --git a/app-rappaurio/public/images/icon.png b/app-rappaurio/public/images/icon.png
new file mode 100644
index 0000000..f68e072
Binary files /dev/null and b/app-rappaurio/public/images/icon.png differ
diff --git a/app-rappaurio/public/images/log-wiki-cust.png b/app-rappaurio/public/images/log-wiki-cust.png
new file mode 100644
index 0000000..3556d37
Binary files /dev/null and b/app-rappaurio/public/images/log-wiki-cust.png differ
diff --git a/app-rappaurio/public/images/log-wiki.svg b/app-rappaurio/public/images/log-wiki.svg
new file mode 100644
index 0000000..4375542
--- /dev/null
+++ b/app-rappaurio/public/images/log-wiki.svg
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app-rappaurio/public/images/logo-2.svg b/app-rappaurio/public/images/logo-2.svg
new file mode 100644
index 0000000..38be9ee
--- /dev/null
+++ b/app-rappaurio/public/images/logo-2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app-rappaurio/public/images/logo.svg b/app-rappaurio/public/images/logo.svg
new file mode 100644
index 0000000..433375d
--- /dev/null
+++ b/app-rappaurio/public/images/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app-rappaurio/public/images/wikipedia-dark.png b/app-rappaurio/public/images/wikipedia-dark.png
new file mode 100644
index 0000000..f038bcb
Binary files /dev/null and b/app-rappaurio/public/images/wikipedia-dark.png differ
diff --git a/app-rappaurio/public/images/wikipedia.png b/app-rappaurio/public/images/wikipedia.png
new file mode 100644
index 0000000..0c7f025
Binary files /dev/null and b/app-rappaurio/public/images/wikipedia.png differ
diff --git a/app-rappaurio/public/js/bundle.js b/app-rappaurio/public/js/bundle.js
new file mode 100644
index 0000000..16110aa
--- /dev/null
+++ b/app-rappaurio/public/js/bundle.js
@@ -0,0 +1,16 @@
+(()=>{var __webpack_modules__=({"./src/js/index.js":/*!*************************!*\
+!*** ./src/js/index.js ***!
+\*************************/((__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_glightbox_dist_css_glightbox_min_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/glightbox/dist/css/glightbox.min.css */ \"./node_modules/glightbox/dist/css/glightbox.min.css\");\n/* harmony import */ var _css_animate_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css/animate.css */ \"./src/css/animate.css\");\n/* harmony import */ var _css_style_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../css/style.css */ \"./src/css/style.css\");\n/* harmony import */ var glightbox__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! glightbox */ \"./node_modules/glightbox/dist/js/glightbox.min.js\");\n/* harmony import */ var glightbox__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(glightbox__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var wowjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! wowjs */ \"./node_modules/wowjs/dist/wow.js\");\n/* harmony import */ var wowjs__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(wowjs__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\nwindow.wow = new (wowjs__WEBPACK_IMPORTED_MODULE_4___default().WOW)({\n live: false\n});\nwindow.wow.init({\n offset: 50\n}); //========= glightbox\n\nvar lightbox = glightbox__WEBPACK_IMPORTED_MODULE_3___default()({\n href: 'https://www.youtube.com/watch?v=r44RKWyfcFw&fbclid=IwAR21beSJORalzmzokxDRcGfkZA1AtRTE__l5N4r09HcGS5Y6vOluyouM9EM',\n type: 'video',\n source: 'youtube',\n //vimeo, youtube or local\n width: 900,\n autoplayVideos: true\n});\n\n(function () {\n 'use strict'; // ==== darkToggler\n\n var darkTogglerCheckbox = document.querySelector('#darkToggler');\n var html = document.querySelector('html');\n\n var darkModeToggler = function darkModeToggler() {\n darkTogglerCheckbox.checked ? html.classList.remove('dark') : html.classList.add('dark');\n };\n\n darkModeToggler();\n darkTogglerCheckbox.addEventListener('click', darkModeToggler); // ======= Sticky\n\n window.onscroll = function () {\n var ud_header = document.querySelector('.header');\n var sticky = ud_header.offsetTop;\n\n if (window.pageYOffset > sticky) {\n ud_header.classList.add('sticky');\n } else {\n ud_header.classList.remove('sticky');\n } // show or hide the back-top-top button\n\n\n var backToTop = document.querySelector('.back-to-top');\n\n if (document.body.scrollTop > 50 || document.documentElement.scrollTop > 50) {\n backToTop.style.display = 'flex';\n } else {\n backToTop.style.display = 'none';\n }\n }; // ===== responsive navbar\n\n\n var navbarToggler = document.querySelector('#navbarToggler');\n var navbarCollapse = document.querySelector('#navbarCollapse');\n navbarToggler.addEventListener('click', function () {\n navbarToggler.classList.toggle('navbarTogglerActive');\n navbarCollapse.classList.toggle('hidden');\n }); //===== close navbar-collapse when a clicked\n\n document.querySelectorAll('#navbarCollapse ul li:not(.submenu-item) a').forEach(function (e) {\n return e.addEventListener('click', function () {\n navbarToggler.classList.remove('navbarTogglerActive');\n navbarCollapse.classList.add('hidden');\n });\n }); // ===== Sub-menu\n\n var submenuItems = document.querySelectorAll('.submenu-item');\n submenuItems.forEach(function (el) {\n el.querySelector('a').addEventListener('click', function () {\n el.querySelector('.submenu').classList.toggle('hidden');\n });\n }); // ===== Faq accordion\n\n var faqs = document.querySelectorAll('.single-faq');\n faqs.forEach(function (el) {\n el.querySelector('.faq-btn').addEventListener('click', function () {\n el.querySelector('.icon').classList.toggle('rotate-180');\n el.querySelector('.faq-content').classList.toggle('hidden');\n });\n }); // ====== scroll top js\n\n function scrollTo(element) {\n var to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500;\n var start = element.scrollTop;\n var change = to - start;\n var increment = 20;\n var currentTime = 0;\n\n var animateScroll = function animateScroll() {\n currentTime += increment;\n var val = Math.easeInOutQuad(currentTime, start, change, duration);\n element.scrollTop = val;\n\n if (currentTime < duration) {\n setTimeout(animateScroll, increment);\n }\n };\n\n animateScroll();\n }\n\n Math.easeInOutQuad = function (t, b, c, d) {\n t /= d / 2;\n if (t < 1) return c / 2 * t * t + b;\n t--;\n return -c / 2 * (t * (t - 2) - 1) + b;\n };\n\n document.querySelector('.back-to-top').onclick = function () {\n scrollTo(document.documentElement);\n };\n})(); // Document Loaded\n\n\ndocument.addEventListener('DOMContentLoaded', function () {});\n\n//# sourceURL=webpack://startup-tailwind/./src/js/index.js?");}),"./node_modules/glightbox/dist/js/glightbox.min.js":/*!*********************************************************!*\
+!*** ./node_modules/glightbox/dist/js/glightbox.min.js ***!
+\*********************************************************/(function(module){eval("!function(e,t){ true?module.exports=t():0}(this,(function(){\"use strict\";function e(t){return(e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=e[s]=e[s]||[],l={all:n,evt:null,found:null};return t&&i&&P(n)>0&&o(n,(function(e,n){if(e.eventName==t&&e.fn.toString()==i.toString())return l.found=!0,l.evt=n,!1})),l}function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.onElement,n=t.withCallback,s=t.avoidDuplicate,l=void 0===s||s,a=t.once,h=void 0!==a&&a,d=t.useCapture,c=void 0!==d&&d,u=arguments.length>2?arguments[2]:void 0,g=i||[];function v(e){T(n)&&n.call(u,e,this),h&&v.destroy()}return C(g)&&(g=document.querySelectorAll(g)),v.destroy=function(){o(g,(function(t){var i=r(t,e,v);i.found&&i.all.splice(i.evt,1),t.removeEventListener&&t.removeEventListener(e,v,c)}))},o(g,(function(t){var i=r(t,e,v);(t.addEventListener&&l&&!i.found||!l)&&(t.addEventListener(e,v,c),i.all.push({eventName:e,fn:v}))})),v}function h(e,t){o(t.split(\" \"),(function(t){return e.classList.add(t)}))}function d(e,t){o(t.split(\" \"),(function(t){return e.classList.remove(t)}))}function c(e,t){return e.classList.contains(t)}function u(e,t){for(;e!==document.body;){if(!(e=e.parentElement))return!1;if(\"function\"==typeof e.matches?e.matches(t):e.msMatchesSelector(t))return e}}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||\"\"===t)return!1;if(\"none\"===t)return T(i)&&i(),!1;var n=x(),s=t.split(\" \");o(s,(function(t){h(e,\"g\"+t)})),a(n,{onElement:e,avoidDuplicate:!1,once:!0,withCallback:function(e,t){o(s,(function(e){d(t,\"g\"+e)})),T(i)&&i()}})}function v(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";if(\"\"===t)return e.style.webkitTransform=\"\",e.style.MozTransform=\"\",e.style.msTransform=\"\",e.style.OTransform=\"\",e.style.transform=\"\",!1;e.style.webkitTransform=t,e.style.MozTransform=t,e.style.msTransform=t,e.style.OTransform=t,e.style.transform=t}function f(e){e.style.display=\"block\"}function p(e){e.style.display=\"none\"}function m(e){var t=document.createDocumentFragment(),i=document.createElement(\"div\");for(i.innerHTML=e;i.firstChild;)t.appendChild(i.firstChild);return t}function y(){return{width:window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,height:window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight}}function x(){var e,t=document.createElement(\"fakeelement\"),i={animation:\"animationend\",OAnimation:\"oAnimationEnd\",MozAnimation:\"animationend\",WebkitAnimation:\"webkitAnimationEnd\"};for(e in i)if(void 0!==t.style[e])return i[e]}function b(e,t,i,n){if(e())t();else{var s;i||(i=100);var l=setInterval((function(){e()&&(clearInterval(l),s&&clearTimeout(s),t())}),i);n&&(s=setTimeout((function(){clearInterval(l)}),n))}}function S(e,t,i){if(I(e))console.error(\"Inject assets error\");else if(T(t)&&(i=t,t=!1),C(t)&&t in window)T(i)&&i();else{var n;if(-1!==e.indexOf(\".css\")){if((n=document.querySelectorAll('link[href=\"'+e+'\"]'))&&n.length>0)return void(T(i)&&i());var s=document.getElementsByTagName(\"head\")[0],l=s.querySelectorAll('link[rel=\"stylesheet\"]'),o=document.createElement(\"link\");return o.rel=\"stylesheet\",o.type=\"text/css\",o.href=e,o.media=\"all\",l?s.insertBefore(o,l[0]):s.appendChild(o),void(T(i)&&i())}if((n=document.querySelectorAll('script[src=\"'+e+'\"]'))&&n.length>0){if(T(i)){if(C(t))return b((function(){return void 0!==window[t]}),(function(){i()})),!1;i()}}else{var r=document.createElement(\"script\");r.type=\"text/javascript\",r.src=e,r.onload=function(){if(T(i)){if(C(t))return b((function(){return void 0!==window[t]}),(function(){i()})),!1;i()}},document.body.appendChild(r)}}}function w(){return\"navigator\"in window&&window.navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i)}function T(e){return\"function\"==typeof e}function C(e){return\"string\"==typeof e}function k(e){return!(!e||!e.nodeType||1!=e.nodeType)}function E(e){return Array.isArray(e)}function A(e){return e&&e.length&&isFinite(e.length)}function L(t){return\"object\"===e(t)&&null!=t&&!T(t)&&!E(t)}function I(e){return null==e}function O(e,t){return null!==e&&hasOwnProperty.call(e,t)}function P(e){if(L(e)){if(e.keys)return e.keys().length;var t=0;for(var i in e)O(e,i)&&t++;return t}return e.length}function M(e){return!isNaN(parseFloat(e))&&isFinite(e)}function z(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1,t=document.querySelectorAll(\".gbtn[data-taborder]:not(.disabled)\");if(!t.length)return!1;if(1==t.length)return t[0];\"string\"==typeof e&&(e=parseInt(e));var i=[];o(t,(function(e){i.push(e.getAttribute(\"data-taborder\"))}));var n=Math.max.apply(Math,i.map((function(e){return parseInt(e)}))),s=e<0?1:e+1;s>n&&(s=\"1\");var l=i.filter((function(e){return e>=parseInt(s)})),r=l.sort()[0];return document.querySelector('.gbtn[data-taborder=\"'.concat(r,'\"]'))}function X(e){if(e.events.hasOwnProperty(\"keyboard\"))return!1;e.events.keyboard=a(\"keydown\",{onElement:window,withCallback:function(t,i){var n=(t=t||window.event).keyCode;if(9==n){var s=document.querySelector(\".gbtn.focused\");if(!s){var l=!(!document.activeElement||!document.activeElement.nodeName)&&document.activeElement.nodeName.toLocaleLowerCase();if(\"input\"==l||\"textarea\"==l||\"button\"==l)return}t.preventDefault();var o=document.querySelectorAll(\".gbtn[data-taborder]\");if(!o||o.length<=0)return;if(!s){var r=z();return void(r&&(r.focus(),h(r,\"focused\")))}var a=z(s.getAttribute(\"data-taborder\"));d(s,\"focused\"),a&&(a.focus(),h(a,\"focused\"))}39==n&&e.nextSlide(),37==n&&e.prevSlide(),27==n&&e.close()}})}function Y(e){return Math.sqrt(e.x*e.x+e.y*e.y)}function q(e,t){var i=function(e,t){var i=Y(e)*Y(t);if(0===i)return 0;var n=function(e,t){return e.x*t.x+e.y*t.y}(e,t)/i;return n>1&&(n=1),Math.acos(n)}(e,t);return function(e,t){return e.x*t.y-t.x*e.y}(e,t)>0&&(i*=-1),180*i/Math.PI}var N=function(){function e(i){t(this,e),this.handlers=[],this.el=i}return n(e,[{key:\"add\",value:function(e){this.handlers.push(e)}},{key:\"del\",value:function(e){e||(this.handlers=[]);for(var t=this.handlers.length;t>=0;t--)this.handlers[t]===e&&this.handlers.splice(t,1)}},{key:\"dispatch\",value:function(){for(var e=0,t=this.handlers.length;e=0)console.log(\"ignore drag for this touched element\",e.target.nodeName.toLowerCase());else{this.now=Date.now(),this.x1=e.touches[0].pageX,this.y1=e.touches[0].pageY,this.delta=this.now-(this.last||this.now),this.touchStart.dispatch(e,this.element),null!==this.preTapPosition.x&&(this.isDoubleTap=this.delta>0&&this.delta<=250&&Math.abs(this.preTapPosition.x-this.x1)<30&&Math.abs(this.preTapPosition.y-this.y1)<30,this.isDoubleTap&&clearTimeout(this.singleTapTimeout)),this.preTapPosition.x=this.x1,this.preTapPosition.y=this.y1,this.last=this.now;var t=this.preV;if(e.touches.length>1){this._cancelLongTap(),this._cancelSingleTap();var i={x:e.touches[1].pageX-this.x1,y:e.touches[1].pageY-this.y1};t.x=i.x,t.y=i.y,this.pinchStartLen=Y(t),this.multipointStart.dispatch(e,this.element)}this._preventTap=!1,this.longTapTimeout=setTimeout(function(){this.longTap.dispatch(e,this.element),this._preventTap=!0}.bind(this),750)}}}},{key:\"move\",value:function(e){if(e.touches){var t=this.preV,i=e.touches.length,n=e.touches[0].pageX,s=e.touches[0].pageY;if(this.isDoubleTap=!1,i>1){var l=e.touches[1].pageX,o=e.touches[1].pageY,r={x:e.touches[1].pageX-n,y:e.touches[1].pageY-s};null!==t.x&&(this.pinchStartLen>0&&(e.zoom=Y(r)/this.pinchStartLen,this.pinch.dispatch(e,this.element)),e.angle=q(r,t),this.rotate.dispatch(e,this.element)),t.x=r.x,t.y=r.y,null!==this.x2&&null!==this.sx2?(e.deltaX=(n-this.x2+l-this.sx2)/2,e.deltaY=(s-this.y2+o-this.sy2)/2):(e.deltaX=0,e.deltaY=0),this.twoFingerPressMove.dispatch(e,this.element),this.sx2=l,this.sy2=o}else{if(null!==this.x2){e.deltaX=n-this.x2,e.deltaY=s-this.y2;var a=Math.abs(this.x1-this.x2),h=Math.abs(this.y1-this.y2);(a>10||h>10)&&(this._preventTap=!0)}else e.deltaX=0,e.deltaY=0;this.pressMove.dispatch(e,this.element)}this.touchMove.dispatch(e,this.element),this._cancelLongTap(),this.x2=n,this.y2=s,i>1&&e.preventDefault()}}},{key:\"end\",value:function(e){if(e.changedTouches){this._cancelLongTap();var t=this;e.touches.length<2&&(this.multipointEnd.dispatch(e,this.element),this.sx2=this.sy2=null),this.x2&&Math.abs(this.x1-this.x2)>30||this.y2&&Math.abs(this.y1-this.y2)>30?(e.direction=this._swipeDirection(this.x1,this.x2,this.y1,this.y2),this.swipeTimeout=setTimeout((function(){t.swipe.dispatch(e,t.element)}),0)):(this.tapTimeout=setTimeout((function(){t._preventTap||t.tap.dispatch(e,t.element),t.isDoubleTap&&(t.doubleTap.dispatch(e,t.element),t.isDoubleTap=!1)}),0),t.isDoubleTap||(t.singleTapTimeout=setTimeout((function(){t.singleTap.dispatch(e,t.element)}),250))),this.touchEnd.dispatch(e,this.element),this.preV.x=0,this.preV.y=0,this.zoom=1,this.pinchStartLen=null,this.x1=this.x2=this.y1=this.y2=null}}},{key:\"cancelAll\",value:function(){this._preventTap=!0,clearTimeout(this.singleTapTimeout),clearTimeout(this.tapTimeout),clearTimeout(this.longTapTimeout),clearTimeout(this.swipeTimeout)}},{key:\"cancel\",value:function(e){this.cancelAll(),this.touchCancel.dispatch(e,this.element)}},{key:\"_cancelLongTap\",value:function(){clearTimeout(this.longTapTimeout)}},{key:\"_cancelSingleTap\",value:function(){clearTimeout(this.singleTapTimeout)}},{key:\"_swipeDirection\",value:function(e,t,i,n){return Math.abs(e-t)>=Math.abs(i-n)?e-t>0?\"Left\":\"Right\":i-n>0?\"Up\":\"Down\"}},{key:\"on\",value:function(e,t){this[e]&&this[e].add(t)}},{key:\"off\",value:function(e,t){this[e]&&this[e].del(t)}},{key:\"destroy\",value:function(){return this.singleTapTimeout&&clearTimeout(this.singleTapTimeout),this.tapTimeout&&clearTimeout(this.tapTimeout),this.longTapTimeout&&clearTimeout(this.longTapTimeout),this.swipeTimeout&&clearTimeout(this.swipeTimeout),this.element.removeEventListener(\"touchstart\",this.start),this.element.removeEventListener(\"touchmove\",this.move),this.element.removeEventListener(\"touchend\",this.end),this.element.removeEventListener(\"touchcancel\",this.cancel),this.rotate.del(),this.touchStart.del(),this.multipointStart.del(),this.multipointEnd.del(),this.pinch.del(),this.swipe.del(),this.tap.del(),this.doubleTap.del(),this.longTap.del(),this.singleTap.del(),this.pressMove.del(),this.twoFingerPressMove.del(),this.touchMove.del(),this.touchEnd.del(),this.touchCancel.del(),this.preV=this.pinchStartLen=this.zoom=this.isDoubleTap=this.delta=this.last=this.now=this.tapTimeout=this.singleTapTimeout=this.longTapTimeout=this.swipeTimeout=this.x1=this.x2=this.y1=this.y2=this.preTapPosition=this.rotate=this.touchStart=this.multipointStart=this.multipointEnd=this.pinch=this.swipe=this.tap=this.doubleTap=this.longTap=this.singleTap=this.pressMove=this.touchMove=this.touchEnd=this.touchCancel=this.twoFingerPressMove=null,window.removeEventListener(\"scroll\",this._cancelAllHandler),null}}]),e}();function W(e){var t=function(){var e,t=document.createElement(\"fakeelement\"),i={transition:\"transitionend\",OTransition:\"oTransitionEnd\",MozTransition:\"transitionend\",WebkitTransition:\"webkitTransitionEnd\"};for(e in i)if(void 0!==t.style[e])return i[e]}(),i=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,n=c(e,\"gslide-media\")?e:e.querySelector(\".gslide-media\"),s=u(n,\".ginner-container\"),l=e.querySelector(\".gslide-description\");i>769&&(n=s),h(n,\"greset\"),v(n,\"translate3d(0, 0, 0)\"),a(t,{onElement:n,once:!0,withCallback:function(e,t){d(n,\"greset\")}}),n.style.opacity=\"\",l&&(l.style.opacity=\"\")}function B(e){if(e.events.hasOwnProperty(\"touch\"))return!1;var t,i,n,s=y(),l=s.width,o=s.height,r=!1,a=null,g=null,f=null,p=!1,m=1,x=1,b=!1,S=!1,w=null,T=null,C=null,k=null,E=0,A=0,L=!1,I=!1,O={},P={},M=0,z=0,X=document.getElementById(\"glightbox-slider\"),Y=document.querySelector(\".goverlay\"),q=new _(X,{touchStart:function(t){if(r=!0,(c(t.targetTouches[0].target,\"ginner-container\")||u(t.targetTouches[0].target,\".gslide-desc\")||\"a\"==t.targetTouches[0].target.nodeName.toLowerCase())&&(r=!1),u(t.targetTouches[0].target,\".gslide-inline\")&&!c(t.targetTouches[0].target.parentNode,\"gslide-inline\")&&(r=!1),r){if(P=t.targetTouches[0],O.pageX=t.targetTouches[0].pageX,O.pageY=t.targetTouches[0].pageY,M=t.targetTouches[0].clientX,z=t.targetTouches[0].clientY,a=e.activeSlide,g=a.querySelector(\".gslide-media\"),n=a.querySelector(\".gslide-inline\"),f=null,c(g,\"gslide-image\")&&(f=g.querySelector(\"img\")),(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)>769&&(g=a.querySelector(\".ginner-container\")),d(Y,\"greset\"),t.pageX>20&&t.pageXo){var a=O.pageX-P.pageX;if(Math.abs(a)<=13)return!1}p=!0;var h,d=s.targetTouches[0].clientX,c=s.targetTouches[0].clientY,u=M-d,m=z-c;if(Math.abs(u)>Math.abs(m)?(L=!1,I=!0):(I=!1,L=!0),t=P.pageX-O.pageX,E=100*t/l,i=P.pageY-O.pageY,A=100*i/o,L&&f&&(h=1-Math.abs(i)/o,Y.style.opacity=h,e.settings.touchFollowAxis&&(E=0)),I&&(h=1-Math.abs(t)/l,g.style.opacity=h,e.settings.touchFollowAxis&&(A=0)),!f)return v(g,\"translate3d(\".concat(E,\"%, 0, 0)\"));v(g,\"translate3d(\".concat(E,\"%, \").concat(A,\"%, 0)\"))}},touchEnd:function(){if(r){if(p=!1,S||b)return C=w,void(k=T);var t=Math.abs(parseInt(A)),i=Math.abs(parseInt(E));if(!(t>29&&f))return t<29&&i<25?(h(Y,\"greset\"),Y.style.opacity=1,W(g)):void 0;e.close()}},multipointEnd:function(){setTimeout((function(){b=!1}),50)},multipointStart:function(){b=!0,m=x||1},pinch:function(e){if(!f||p)return!1;b=!0,f.scaleX=f.scaleY=m*e.zoom;var t=m*e.zoom;if(S=!0,t<=1)return S=!1,t=1,k=null,C=null,w=null,T=null,void f.setAttribute(\"style\",\"\");t>4.5&&(t=4.5),f.style.transform=\"scale3d(\".concat(t,\", \").concat(t,\", 1)\"),x=t},pressMove:function(e){if(S&&!b){var t=P.pageX-O.pageX,i=P.pageY-O.pageY;C&&(t+=C),k&&(i+=k),w=t,T=i;var n=\"translate3d(\".concat(t,\"px, \").concat(i,\"px, 0)\");x&&(n+=\" scale3d(\".concat(x,\", \").concat(x,\", 1)\")),v(f,n)}},swipe:function(t){if(!S)if(b)b=!1;else{if(\"Left\"==t.direction){if(e.index==e.elements.length-1)return W(g);e.nextSlide()}if(\"Right\"==t.direction){if(0==e.index)return W(g);e.prevSlide()}}}});e.events.touch=q}var H=function(){function e(i,n){var s=this,l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(t(this,e),this.img=i,this.slide=n,this.onclose=l,this.img.setZoomEvents)return!1;this.active=!1,this.zoomedIn=!1,this.dragging=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.img.addEventListener(\"mousedown\",(function(e){return s.dragStart(e)}),!1),this.img.addEventListener(\"mouseup\",(function(e){return s.dragEnd(e)}),!1),this.img.addEventListener(\"mousemove\",(function(e){return s.drag(e)}),!1),this.img.addEventListener(\"click\",(function(e){return s.slide.classList.contains(\"dragging-nav\")?(s.zoomOut(),!1):s.zoomedIn?void(s.zoomedIn&&!s.dragging&&s.zoomOut()):s.zoomIn()}),!1),this.img.setZoomEvents=!0}return n(e,[{key:\"zoomIn\",value:function(){var e=this.widowWidth();if(!(this.zoomedIn||e<=768)){var t=this.img;if(t.setAttribute(\"data-style\",t.getAttribute(\"style\")),t.style.maxWidth=t.naturalWidth+\"px\",t.style.maxHeight=t.naturalHeight+\"px\",t.naturalWidth>e){var i=e/2-t.naturalWidth/2;this.setTranslate(this.img.parentNode,i,0)}this.slide.classList.add(\"zoomed\"),this.zoomedIn=!0}}},{key:\"zoomOut\",value:function(){this.img.parentNode.setAttribute(\"style\",\"\"),this.img.setAttribute(\"style\",this.img.getAttribute(\"data-style\")),this.slide.classList.remove(\"zoomed\"),this.zoomedIn=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.onclose&&\"function\"==typeof this.onclose&&this.onclose()}},{key:\"dragStart\",value:function(e){e.preventDefault(),this.zoomedIn?(\"touchstart\"===e.type?(this.initialX=e.touches[0].clientX-this.xOffset,this.initialY=e.touches[0].clientY-this.yOffset):(this.initialX=e.clientX-this.xOffset,this.initialY=e.clientY-this.yOffset),e.target===this.img&&(this.active=!0,this.img.classList.add(\"dragging\"))):this.active=!1}},{key:\"dragEnd\",value:function(e){var t=this;e.preventDefault(),this.initialX=this.currentX,this.initialY=this.currentY,this.active=!1,setTimeout((function(){t.dragging=!1,t.img.isDragging=!1,t.img.classList.remove(\"dragging\")}),100)}},{key:\"drag\",value:function(e){this.active&&(e.preventDefault(),\"touchmove\"===e.type?(this.currentX=e.touches[0].clientX-this.initialX,this.currentY=e.touches[0].clientY-this.initialY):(this.currentX=e.clientX-this.initialX,this.currentY=e.clientY-this.initialY),this.xOffset=this.currentX,this.yOffset=this.currentY,this.img.isDragging=!0,this.dragging=!0,this.setTranslate(this.img,this.currentX,this.currentY))}},{key:\"onMove\",value:function(e){if(this.zoomedIn){var t=e.clientX-this.img.naturalWidth/2,i=e.clientY-this.img.naturalHeight/2;this.setTranslate(this.img,t,i)}}},{key:\"setTranslate\",value:function(e,t,i){e.style.transform=\"translate3d(\"+t+\"px, \"+i+\"px, 0)\"}},{key:\"widowWidth\",value:function(){return window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth}}]),e}(),V=function(){function e(){var i=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e);var s=n.dragEl,l=n.toleranceX,o=void 0===l?40:l,r=n.toleranceY,a=void 0===r?65:r,h=n.slide,d=void 0===h?null:h,c=n.instance,u=void 0===c?null:c;this.el=s,this.active=!1,this.dragging=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.direction=null,this.lastDirection=null,this.toleranceX=o,this.toleranceY=a,this.toleranceReached=!1,this.dragContainer=this.el,this.slide=d,this.instance=u,this.el.addEventListener(\"mousedown\",(function(e){return i.dragStart(e)}),!1),this.el.addEventListener(\"mouseup\",(function(e){return i.dragEnd(e)}),!1),this.el.addEventListener(\"mousemove\",(function(e){return i.drag(e)}),!1)}return n(e,[{key:\"dragStart\",value:function(e){if(this.slide.classList.contains(\"zoomed\"))this.active=!1;else{\"touchstart\"===e.type?(this.initialX=e.touches[0].clientX-this.xOffset,this.initialY=e.touches[0].clientY-this.yOffset):(this.initialX=e.clientX-this.xOffset,this.initialY=e.clientY-this.yOffset);var t=e.target.nodeName.toLowerCase();e.target.classList.contains(\"nodrag\")||u(e.target,\".nodrag\")||-1!==[\"input\",\"select\",\"textarea\",\"button\",\"a\"].indexOf(t)?this.active=!1:(e.preventDefault(),(e.target===this.el||\"img\"!==t&&u(e.target,\".gslide-inline\"))&&(this.active=!0,this.el.classList.add(\"dragging\"),this.dragContainer=u(e.target,\".ginner-container\")))}}},{key:\"dragEnd\",value:function(e){var t=this;e&&e.preventDefault(),this.initialX=0,this.initialY=0,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.active=!1,this.doSlideChange&&(this.instance.preventOutsideClick=!0,\"right\"==this.doSlideChange&&this.instance.prevSlide(),\"left\"==this.doSlideChange&&this.instance.nextSlide()),this.doSlideClose&&this.instance.close(),this.toleranceReached||this.setTranslate(this.dragContainer,0,0,!0),setTimeout((function(){t.instance.preventOutsideClick=!1,t.toleranceReached=!1,t.lastDirection=null,t.dragging=!1,t.el.isDragging=!1,t.el.classList.remove(\"dragging\"),t.slide.classList.remove(\"dragging-nav\"),t.dragContainer.style.transform=\"\",t.dragContainer.style.transition=\"\"}),100)}},{key:\"drag\",value:function(e){if(this.active){e.preventDefault(),this.slide.classList.add(\"dragging-nav\"),\"touchmove\"===e.type?(this.currentX=e.touches[0].clientX-this.initialX,this.currentY=e.touches[0].clientY-this.initialY):(this.currentX=e.clientX-this.initialX,this.currentY=e.clientY-this.initialY),this.xOffset=this.currentX,this.yOffset=this.currentY,this.el.isDragging=!0,this.dragging=!0,this.doSlideChange=!1,this.doSlideClose=!1;var t=Math.abs(this.currentX),i=Math.abs(this.currentY);if(t>0&&t>=Math.abs(this.currentY)&&(!this.lastDirection||\"x\"==this.lastDirection)){this.yOffset=0,this.lastDirection=\"x\",this.setTranslate(this.dragContainer,this.currentX,0);var n=this.shouldChange();if(!this.instance.settings.dragAutoSnap&&n&&(this.doSlideChange=n),this.instance.settings.dragAutoSnap&&n)return this.instance.preventOutsideClick=!0,this.toleranceReached=!0,this.active=!1,this.instance.preventOutsideClick=!0,this.dragEnd(null),\"right\"==n&&this.instance.prevSlide(),void(\"left\"==n&&this.instance.nextSlide())}if(this.toleranceY>0&&i>0&&i>=t&&(!this.lastDirection||\"y\"==this.lastDirection)){this.xOffset=0,this.lastDirection=\"y\",this.setTranslate(this.dragContainer,0,this.currentY);var s=this.shouldClose();return!this.instance.settings.dragAutoSnap&&s&&(this.doSlideClose=!0),void(this.instance.settings.dragAutoSnap&&s&&this.instance.close())}}}},{key:\"shouldChange\",value:function(){var e=!1;if(Math.abs(this.currentX)>=this.toleranceX){var t=this.currentX>0?\"right\":\"left\";(\"left\"==t&&this.slide!==this.slide.parentNode.lastChild||\"right\"==t&&this.slide!==this.slide.parentNode.firstChild)&&(e=t)}return e}},{key:\"shouldClose\",value:function(){var e=!1;return Math.abs(this.currentY)>=this.toleranceY&&(e=!0),e}},{key:\"setTranslate\",value:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e.style.transition=n?\"all .2s ease\":\"\",e.style.transform=\"translate3d(\".concat(t,\"px, \").concat(i,\"px, 0)\")}}]),e}();function j(e,t,i,n){var s=e.querySelector(\".gslide-media\"),l=new Image,o=\"gSlideTitle_\"+i,r=\"gSlideDesc_\"+i;l.addEventListener(\"load\",(function(){T(n)&&n()}),!1),l.src=t.href,\"\"!=t.sizes&&\"\"!=t.srcset&&(l.sizes=t.sizes,l.srcset=t.srcset),l.alt=\"\",I(t.alt)||\"\"===t.alt||(l.alt=t.alt),\"\"!==t.title&&l.setAttribute(\"aria-labelledby\",o),\"\"!==t.description&&l.setAttribute(\"aria-describedby\",r),t.hasOwnProperty(\"_hasCustomWidth\")&&t._hasCustomWidth&&(l.style.width=t.width),t.hasOwnProperty(\"_hasCustomHeight\")&&t._hasCustomHeight&&(l.style.height=t.height),s.insertBefore(l,s.firstChild)}function F(e,t,i,n){var s=this,l=e.querySelector(\".ginner-container\"),o=\"gvideo\"+i,r=e.querySelector(\".gslide-media\"),a=this.getAllPlayers();h(l,\"gvideo-container\"),r.insertBefore(m('
'),r.firstChild);var d=e.querySelector(\".gvideo-wrapper\");S(this.settings.plyr.css,\"Plyr\");var c=t.href,u=null==t?void 0:t.videoProvider,g=!1;r.style.maxWidth=t.width,S(this.settings.plyr.js,\"Plyr\",(function(){if(!u&&c.match(/vimeo\\.com\\/([0-9]*)/)&&(u=\"vimeo\"),!u&&(c.match(/(youtube\\.com|youtube-nocookie\\.com)\\/watch\\?v=([a-zA-Z0-9\\-_]+)/)||c.match(/youtu\\.be\\/([a-zA-Z0-9\\-_]+)/)||c.match(/(youtube\\.com|youtube-nocookie\\.com)\\/embed\\/([a-zA-Z0-9\\-_]+)/))&&(u=\"youtube\"),\"local\"===u||!u){u=\"local\";var l='',l+=''),g=m(l+=\" \")}var r=g||m('
'));h(d,\"\".concat(u,\"-video gvideo\")),d.appendChild(r),d.setAttribute(\"data-id\",o),d.setAttribute(\"data-index\",i);var v=O(s.settings.plyr,\"config\")?s.settings.plyr.config:{},f=new Plyr(\"#\"+o,v);f.on(\"ready\",(function(e){a[o]=e.detail.plyr,T(n)&&n()})),b((function(){return e.querySelector(\"iframe\")&&\"true\"==e.querySelector(\"iframe\").dataset.ready}),(function(){s.resize(e)})),f.on(\"enterfullscreen\",R),f.on(\"exitfullscreen\",R)}))}function R(e){var t=u(e.target,\".gslide-media\");\"enterfullscreen\"===e.type&&h(t,\"fullscreen\"),\"exitfullscreen\"===e.type&&d(t,\"fullscreen\")}function G(e,t,i,n){var s,l=this,o=e.querySelector(\".gslide-media\"),r=!(!O(t,\"href\")||!t.href)&&t.href.split(\"#\").pop().trim(),d=!(!O(t,\"content\")||!t.content)&&t.content;if(d&&(C(d)&&(s=m(''.concat(d,\"
\"))),k(d))){\"none\"==d.style.display&&(d.style.display=\"block\");var c=document.createElement(\"div\");c.className=\"ginlined-content\",c.appendChild(d),s=c}if(r){var u=document.getElementById(r);if(!u)return!1;var g=u.cloneNode(!0);g.style.height=t.height,g.style.maxWidth=t.width,h(g,\"ginlined-content\"),s=g}if(!s)return console.error(\"Unable to append inline slide content\",t),!1;o.style.height=t.height,o.style.width=t.width,o.appendChild(s),this.events[\"inlineclose\"+r]=a(\"click\",{onElement:o.querySelectorAll(\".gtrigger-close\"),withCallback:function(e){e.preventDefault(),l.close()}}),T(n)&&n()}function Z(e,t,i,n){var s=e.querySelector(\".gslide-media\"),l=function(e){var t=e.url,i=e.allow,n=e.callback,s=e.appendTo,l=document.createElement(\"iframe\");return l.className=\"vimeo-video gvideo\",l.src=t,l.style.width=\"100%\",l.style.height=\"100%\",i&&l.setAttribute(\"allow\",i),l.onload=function(){l.onload=null,h(l,\"node-ready\"),T(n)&&n()},s&&s.appendChild(l),l}({url:t.href,callback:n});s.parentNode.style.maxWidth=t.width,s.parentNode.style.height=t.height,s.appendChild(l)}var U=function(){function e(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.defaults={href:\"\",sizes:\"\",srcset:\"\",title:\"\",type:\"\",videoProvider:\"\",description:\"\",alt:\"\",descPosition:\"bottom\",effect:\"\",width:\"\",height:\"\",content:!1,zoomable:!0,draggable:!0},L(i)&&(this.defaults=l(this.defaults,i))}return n(e,[{key:\"sourceType\",value:function(e){var t=e;if(null!==(e=e.toLowerCase()).match(/\\.(jpeg|jpg|jpe|gif|png|apn|webp|avif|svg)/))return\"image\";if(e.match(/(youtube\\.com|youtube-nocookie\\.com)\\/watch\\?v=([a-zA-Z0-9\\-_]+)/)||e.match(/youtu\\.be\\/([a-zA-Z0-9\\-_]+)/)||e.match(/(youtube\\.com|youtube-nocookie\\.com)\\/embed\\/([a-zA-Z0-9\\-_]+)/))return\"video\";if(e.match(/vimeo\\.com\\/([0-9]*)/))return\"video\";if(null!==e.match(/\\.(mp4|ogg|webm|mov)/))return\"video\";if(null!==e.match(/\\.(mp3|wav|wma|aac|ogg)/))return\"audio\";if(e.indexOf(\"#\")>-1&&\"\"!==t.split(\"#\").pop().trim())return\"inline\";return e.indexOf(\"goajax=true\")>-1?\"ajax\":\"external\"}},{key:\"parseConfig\",value:function(e,t){var i=this,n=l({descPosition:t.descPosition},this.defaults);if(L(e)&&!k(e)){O(e,\"type\")||(O(e,\"content\")&&e.content?e.type=\"inline\":O(e,\"href\")&&(e.type=this.sourceType(e.href)));var s=l(n,e);return this.setSize(s,t),s}var r=\"\",a=e.getAttribute(\"data-glightbox\"),h=e.nodeName.toLowerCase();if(\"a\"===h&&(r=e.href),\"img\"===h&&(r=e.src,n.alt=e.alt),n.href=r,o(n,(function(s,l){O(t,l)&&\"width\"!==l&&(n[l]=t[l]);var o=e.dataset[l];I(o)||(n[l]=i.sanitizeValue(o))})),n.content&&(n.type=\"inline\"),!n.type&&r&&(n.type=this.sourceType(r)),I(a)){if(!n.title&&\"a\"==h){var d=e.title;I(d)||\"\"===d||(n.title=d)}if(!n.title&&\"img\"==h){var c=e.alt;I(c)||\"\"===c||(n.title=c)}}else{var u=[];o(n,(function(e,t){u.push(\";\\\\s?\"+t)})),u=u.join(\"\\\\s?:|\"),\"\"!==a.trim()&&o(n,(function(e,t){var s=a,l=new RegExp(\"s?\"+t+\"s?:s?(.*?)(\"+u+\"s?:|$)\"),o=s.match(l);if(o&&o.length&&o[1]){var r=o[1].trim().replace(/;\\s*$/,\"\");n[t]=i.sanitizeValue(r)}}))}if(n.description&&\".\"===n.description.substring(0,1)){var g;try{g=document.querySelector(n.description).innerHTML}catch(e){if(!(e instanceof DOMException))throw e}g&&(n.description=g)}if(!n.description){var v=e.querySelector(\".glightbox-desc\");v&&(n.description=v.innerHTML)}return this.setSize(n,t,e),this.slideConfig=n,n}},{key:\"setSize\",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=\"video\"==e.type?this.checkSize(t.videosWidth):this.checkSize(t.width),s=this.checkSize(t.height);return e.width=O(e,\"width\")&&\"\"!==e.width?this.checkSize(e.width):n,e.height=O(e,\"height\")&&\"\"!==e.height?this.checkSize(e.height):s,i&&\"image\"==e.type&&(e._hasCustomWidth=!!i.dataset.width,e._hasCustomHeight=!!i.dataset.height),e}},{key:\"checkSize\",value:function(e){return M(e)?\"\".concat(e,\"px\"):e}},{key:\"sanitizeValue\",value:function(e){return\"true\"!==e&&\"false\"!==e?e:\"true\"===e}}]),e}(),$=function(){function e(i,n,s){t(this,e),this.element=i,this.instance=n,this.index=s}return n(e,[{key:\"setContent\",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(c(t,\"loaded\"))return!1;var n=this.instance.settings,s=this.slideConfig,l=w();T(n.beforeSlideLoad)&&n.beforeSlideLoad({index:this.index,slide:t,player:!1});var o=s.type,r=s.descPosition,a=t.querySelector(\".gslide-media\"),d=t.querySelector(\".gslide-title\"),u=t.querySelector(\".gslide-desc\"),g=t.querySelector(\".gdesc-inner\"),v=i,f=\"gSlideTitle_\"+this.index,p=\"gSlideDesc_\"+this.index;if(T(n.afterSlideLoad)&&(v=function(){T(i)&&i(),n.afterSlideLoad({index:e.index,slide:t,player:e.instance.getSlidePlayerInstance(e.index)})}),\"\"==s.title&&\"\"==s.description?g&&g.parentNode.parentNode.removeChild(g.parentNode):(d&&\"\"!==s.title?(d.id=f,d.innerHTML=s.title):d.parentNode.removeChild(d),u&&\"\"!==s.description?(u.id=p,l&&n.moreLength>0?(s.smallDescription=this.slideShortDesc(s.description,n.moreLength,n.moreText),u.innerHTML=s.smallDescription,this.descriptionEvents(u,s)):u.innerHTML=s.description):u.parentNode.removeChild(u),h(a.parentNode,\"desc-\".concat(r)),h(g.parentNode,\"description-\".concat(r))),h(a,\"gslide-\".concat(o)),h(t,\"loaded\"),\"video\"!==o){if(\"external\"!==o)return\"inline\"===o?(G.apply(this.instance,[t,s,this.index,v]),void(s.draggable&&new V({dragEl:t.querySelector(\".gslide-inline\"),toleranceX:n.dragToleranceX,toleranceY:n.dragToleranceY,slide:t,instance:this.instance}))):void(\"image\"!==o?T(v)&&v():j(t,s,this.index,(function(){var i=t.querySelector(\"img\");s.draggable&&new V({dragEl:i,toleranceX:n.dragToleranceX,toleranceY:n.dragToleranceY,slide:t,instance:e.instance}),s.zoomable&&i.naturalWidth>i.offsetWidth&&(h(i,\"zoomable\"),new H(i,t,(function(){e.instance.resize()}))),T(v)&&v()})));Z.apply(this,[t,s,this.index,v])}else F.apply(this.instance,[t,s,this.index,v])}},{key:\"slideShortDesc\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement(\"div\");n.innerHTML=e;var s=n.innerText,l=i;if((e=s.trim()).length<=t)return e;var o=e.substr(0,t-1);return l?(n=null,o+'... '+i+\" \"):o}},{key:\"descriptionEvents\",value:function(e,t){var i=this,n=e.querySelector(\".desc-more\");if(!n)return!1;a(\"click\",{onElement:n,withCallback:function(e,n){e.preventDefault();var s=document.body,l=u(n,\".gslide-desc\");if(!l)return!1;l.innerHTML=t.description,h(s,\"gdesc-open\");var o=a(\"click\",{onElement:[s,u(l,\".gslide-description\")],withCallback:function(e,n){\"a\"!==e.target.nodeName.toLowerCase()&&(d(s,\"gdesc-open\"),h(s,\"gdesc-closed\"),l.innerHTML=t.smallDescription,i.descriptionEvents(l,t),setTimeout((function(){d(s,\"gdesc-closed\")}),400),o.destroy())}})}})}},{key:\"create\",value:function(){return m(this.instance.settings.slideHTML)}},{key:\"getConfig\",value:function(){k(this.element)||this.element.hasOwnProperty(\"draggable\")||(this.element.draggable=this.instance.settings.draggable);var e=new U(this.instance.settings.slideExtraAttributes);return this.slideConfig=e.parseConfig(this.element,this.instance.settings),this.slideConfig}}]),e}(),J=w(),K=null!==w()||void 0!==document.createTouch||\"ontouchstart\"in window||\"onmsgesturechange\"in window||navigator.msMaxTouchPoints,Q=document.getElementsByTagName(\"html\")[0],ee={selector:\".glightbox\",elements:null,skin:\"clean\",theme:\"clean\",closeButton:!0,startAt:null,autoplayVideos:!0,autofocusVideos:!0,descPosition:\"bottom\",width:\"900px\",height:\"506px\",videosWidth:\"960px\",beforeSlideChange:null,afterSlideChange:null,beforeSlideLoad:null,afterSlideLoad:null,slideInserted:null,slideRemoved:null,slideExtraAttributes:null,onOpen:null,onClose:null,loop:!1,zoomable:!0,draggable:!0,dragAutoSnap:!1,dragToleranceX:40,dragToleranceY:65,preload:!0,oneSlidePerOpen:!1,touchNavigation:!0,touchFollowAxis:!0,keyboardNavigation:!0,closeOnOutsideClick:!0,plugins:!1,plyr:{css:\"https://cdn.plyr.io/3.6.12/plyr.css\",js:\"https://cdn.plyr.io/3.6.12/plyr.js\",config:{ratio:\"16:9\",fullscreen:{enabled:!0,iosNative:!0},youtube:{noCookie:!0,rel:0,showinfo:0,iv_load_policy:3},vimeo:{byline:!1,portrait:!1,title:!1,transparent:!1}}},openEffect:\"zoom\",closeEffect:\"zoom\",slideEffect:\"slide\",moreText:\"See more\",moreLength:60,cssEfects:{fade:{in:\"fadeIn\",out:\"fadeOut\"},zoom:{in:\"zoomIn\",out:\"zoomOut\"},slide:{in:\"slideInRight\",out:\"slideOutLeft\"},slideBack:{in:\"slideInLeft\",out:\"slideOutRight\"},none:{in:\"none\",out:\"none\"}},svg:{close:' ',next:' ',prev:' '},slideHTML:'',lightboxHTML:'\\n
\\n
\\n
\\n
\\n
{closeSVG} \\n
{prevSVG} \\n
{nextSVG} \\n
\\n
'},te=function(){function e(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.customOptions=i,this.settings=l(ee,i),this.effectsClasses=this.getAnimationClasses(),this.videoPlayers={},this.apiEvents=[],this.fullElementsList=!1}return n(e,[{key:\"init\",value:function(){var e=this,t=this.getSelector();t&&(this.baseEvents=a(\"click\",{onElement:t,withCallback:function(t,i){t.preventDefault(),e.open(i)}})),this.elements=this.getElements()}},{key:\"open\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(0===this.elements.length)return!1;this.activeSlide=null,this.prevActiveSlideIndex=null,this.prevActiveSlide=null;var i=M(t)?t:this.settings.startAt;if(k(e)){var n=e.getAttribute(\"data-gallery\");n&&(this.fullElementsList=this.elements,this.elements=this.getGalleryElements(this.elements,n)),I(i)&&(i=this.getElementIndex(e))<0&&(i=0)}M(i)||(i=0),this.build(),g(this.overlay,\"none\"===this.settings.openEffect?\"none\":this.settings.cssEfects.fade.in);var s=document.body,l=window.innerWidth-document.documentElement.clientWidth;if(l>0){var o=document.createElement(\"style\");o.type=\"text/css\",o.className=\"gcss-styles\",o.innerText=\".gscrollbar-fixer {margin-right: \".concat(l,\"px}\"),document.head.appendChild(o),h(s,\"gscrollbar-fixer\")}h(s,\"glightbox-open\"),h(Q,\"glightbox-open\"),J&&(h(document.body,\"glightbox-mobile\"),this.settings.slideEffect=\"slide\"),this.showSlide(i,!0),1===this.elements.length?(h(this.prevButton,\"glightbox-button-hidden\"),h(this.nextButton,\"glightbox-button-hidden\")):(d(this.prevButton,\"glightbox-button-hidden\"),d(this.nextButton,\"glightbox-button-hidden\")),this.lightboxOpen=!0,this.trigger(\"open\"),T(this.settings.onOpen)&&this.settings.onOpen(),K&&this.settings.touchNavigation&&B(this),this.settings.keyboardNavigation&&X(this)}},{key:\"openAt\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.open(null,e)}},{key:\"showSlide\",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];f(this.loader),this.index=parseInt(t);var n=this.slidesContainer.querySelector(\".current\");n&&d(n,\"current\"),this.slideAnimateOut();var s=this.slidesContainer.querySelectorAll(\".gslide\")[t];if(c(s,\"loaded\"))this.slideAnimateIn(s,i),p(this.loader);else{f(this.loader);var l=this.elements[t],o={index:this.index,slide:s,slideNode:s,slideConfig:l.slideConfig,slideIndex:this.index,trigger:l.node,player:null};this.trigger(\"slide_before_load\",o),l.instance.setContent(s,(function(){p(e.loader),e.resize(),e.slideAnimateIn(s,i),e.trigger(\"slide_after_load\",o)}))}this.slideDescription=s.querySelector(\".gslide-description\"),this.slideDescriptionContained=this.slideDescription&&c(this.slideDescription.parentNode,\"gslide-media\"),this.settings.preload&&(this.preloadSlide(t+1),this.preloadSlide(t-1)),this.updateNavigationClasses(),this.activeSlide=s}},{key:\"preloadSlide\",value:function(e){var t=this;if(e<0||e>this.elements.length-1)return!1;if(I(this.elements[e]))return!1;var i=this.slidesContainer.querySelectorAll(\".gslide\")[e];if(c(i,\"loaded\"))return!1;var n=this.elements[e],s=n.type,l={index:e,slide:i,slideNode:i,slideConfig:n.slideConfig,slideIndex:e,trigger:n.node,player:null};this.trigger(\"slide_before_load\",l),\"video\"===s||\"external\"===s?setTimeout((function(){n.instance.setContent(i,(function(){t.trigger(\"slide_after_load\",l)}))}),200):n.instance.setContent(i,(function(){t.trigger(\"slide_after_load\",l)}))}},{key:\"prevSlide\",value:function(){this.goToSlide(this.index-1)}},{key:\"nextSlide\",value:function(){this.goToSlide(this.index+1)}},{key:\"goToSlide\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.prevActiveSlide=this.activeSlide,this.prevActiveSlideIndex=this.index,!this.loop()&&(e<0||e>this.elements.length-1))return!1;e<0?e=this.elements.length-1:e>=this.elements.length&&(e=0),this.showSlide(e)}},{key:\"insertSlide\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;t<0&&(t=this.elements.length);var i=new $(e,this,t),n=i.getConfig(),s=l({},n),o=i.create(),r=this.elements.length-1;s.index=t,s.node=!1,s.instance=i,s.slideConfig=n,this.elements.splice(t,0,s);var a=null,h=null;if(this.slidesContainer){if(t>r)this.slidesContainer.appendChild(o);else{var d=this.slidesContainer.querySelectorAll(\".gslide\")[t];this.slidesContainer.insertBefore(o,d)}(this.settings.preload&&0==this.index&&0==t||this.index-1==t||this.index+1==t)&&this.preloadSlide(t),0===this.index&&0===t&&(this.index=1),this.updateNavigationClasses(),a=this.slidesContainer.querySelectorAll(\".gslide\")[t],h=this.getSlidePlayerInstance(t),s.slideNode=a}this.trigger(\"slide_inserted\",{index:t,slide:a,slideNode:a,slideConfig:n,slideIndex:t,trigger:null,player:h}),T(this.settings.slideInserted)&&this.settings.slideInserted({index:t,slide:a,player:h})}},{key:\"removeSlide\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;if(e<0||e>this.elements.length-1)return!1;var t=this.slidesContainer&&this.slidesContainer.querySelectorAll(\".gslide\")[e];t&&(this.getActiveSlideIndex()==e&&(e==this.elements.length-1?this.prevSlide():this.nextSlide()),t.parentNode.removeChild(t)),this.elements.splice(e,1),this.trigger(\"slide_removed\",e),T(this.settings.slideRemoved)&&this.settings.slideRemoved(e)}},{key:\"slideAnimateIn\",value:function(e,t){var i=this,n=e.querySelector(\".gslide-media\"),s=e.querySelector(\".gslide-description\"),l={index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,slideNode:this.prevActiveSlide,slideIndex:this.prevActiveSlide,slideConfig:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].slideConfig,trigger:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].node,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},o={index:this.index,slide:this.activeSlide,slideNode:this.activeSlide,slideConfig:this.elements[this.index].slideConfig,slideIndex:this.index,trigger:this.elements[this.index].node,player:this.getSlidePlayerInstance(this.index)};if(n.offsetWidth>0&&s&&(p(s),s.style.display=\"\"),d(e,this.effectsClasses),t)g(e,this.settings.cssEfects[this.settings.openEffect].in,(function(){i.settings.autoplayVideos&&i.slidePlayerPlay(e),i.trigger(\"slide_changed\",{prev:l,current:o}),T(i.settings.afterSlideChange)&&i.settings.afterSlideChange.apply(i,[l,o])}));else{var r=this.settings.slideEffect,a=\"none\"!==r?this.settings.cssEfects[r].in:r;this.prevActiveSlideIndex>this.index&&\"slide\"==this.settings.slideEffect&&(a=this.settings.cssEfects.slideBack.in),g(e,a,(function(){i.settings.autoplayVideos&&i.slidePlayerPlay(e),i.trigger(\"slide_changed\",{prev:l,current:o}),T(i.settings.afterSlideChange)&&i.settings.afterSlideChange.apply(i,[l,o])}))}setTimeout((function(){i.resize(e)}),100),h(e,\"current\")}},{key:\"slideAnimateOut\",value:function(){if(!this.prevActiveSlide)return!1;var e=this.prevActiveSlide;d(e,this.effectsClasses),h(e,\"prev\");var t=this.settings.slideEffect,i=\"none\"!==t?this.settings.cssEfects[t].out:t;this.slidePlayerPause(e),this.trigger(\"slide_before_change\",{prev:{index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,slideNode:this.prevActiveSlide,slideIndex:this.prevActiveSlideIndex,slideConfig:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].slideConfig,trigger:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].node,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},current:{index:this.index,slide:this.activeSlide,slideNode:this.activeSlide,slideIndex:this.index,slideConfig:this.elements[this.index].slideConfig,trigger:this.elements[this.index].node,player:this.getSlidePlayerInstance(this.index)}}),T(this.settings.beforeSlideChange)&&this.settings.beforeSlideChange.apply(this,[{index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},{index:this.index,slide:this.activeSlide,player:this.getSlidePlayerInstance(this.index)}]),this.prevActiveSlideIndex>this.index&&\"slide\"==this.settings.slideEffect&&(i=this.settings.cssEfects.slideBack.out),g(e,i,(function(){var t=e.querySelector(\".ginner-container\"),i=e.querySelector(\".gslide-media\"),n=e.querySelector(\".gslide-description\");t.style.transform=\"\",i.style.transform=\"\",d(i,\"greset\"),i.style.opacity=\"\",n&&(n.style.opacity=\"\"),d(e,\"prev\")}))}},{key:\"getAllPlayers\",value:function(){return this.videoPlayers}},{key:\"getSlidePlayerInstance\",value:function(e){var t=\"gvideo\"+e,i=this.getAllPlayers();return!(!O(i,t)||!i[t])&&i[t]}},{key:\"stopSlideVideo\",value:function(e){if(k(e)){var t=e.querySelector(\".gvideo-wrapper\");t&&(e=t.getAttribute(\"data-index\"))}console.log(\"stopSlideVideo is deprecated, use slidePlayerPause\");var i=this.getSlidePlayerInstance(e);i&&i.playing&&i.pause()}},{key:\"slidePlayerPause\",value:function(e){if(k(e)){var t=e.querySelector(\".gvideo-wrapper\");t&&(e=t.getAttribute(\"data-index\"))}var i=this.getSlidePlayerInstance(e);i&&i.playing&&i.pause()}},{key:\"playSlideVideo\",value:function(e){if(k(e)){var t=e.querySelector(\".gvideo-wrapper\");t&&(e=t.getAttribute(\"data-index\"))}console.log(\"playSlideVideo is deprecated, use slidePlayerPlay\");var i=this.getSlidePlayerInstance(e);i&&!i.playing&&i.play()}},{key:\"slidePlayerPlay\",value:function(e){var t;if(!J||null!==(t=this.settings.plyr.config)&&void 0!==t&&t.muted){if(k(e)){var i=e.querySelector(\".gvideo-wrapper\");i&&(e=i.getAttribute(\"data-index\"))}var n=this.getSlidePlayerInstance(e);n&&!n.playing&&(n.play(),this.settings.autofocusVideos&&n.elements.container.focus())}}},{key:\"setElements\",value:function(e){var t=this;this.settings.elements=!1;var i=[];e&&e.length&&o(e,(function(e,n){var s=new $(e,t,n),o=s.getConfig(),r=l({},o);r.slideConfig=o,r.instance=s,r.index=n,i.push(r)})),this.elements=i,this.lightboxOpen&&(this.slidesContainer.innerHTML=\"\",this.elements.length&&(o(this.elements,(function(){var e=m(t.settings.slideHTML);t.slidesContainer.appendChild(e)})),this.showSlide(0,!0)))}},{key:\"getElementIndex\",value:function(e){var t=!1;return o(this.elements,(function(i,n){if(O(i,\"node\")&&i.node==e)return t=n,!0})),t}},{key:\"getElements\",value:function(){var e=this,t=[];this.elements=this.elements?this.elements:[],!I(this.settings.elements)&&E(this.settings.elements)&&this.settings.elements.length&&o(this.settings.elements,(function(i,n){var s=new $(i,e,n),o=s.getConfig(),r=l({},o);r.node=!1,r.index=n,r.instance=s,r.slideConfig=o,t.push(r)}));var i=!1;return this.getSelector()&&(i=document.querySelectorAll(this.getSelector())),i?(o(i,(function(i,n){var s=new $(i,e,n),o=s.getConfig(),r=l({},o);r.node=i,r.index=n,r.instance=s,r.slideConfig=o,r.gallery=i.getAttribute(\"data-gallery\"),t.push(r)})),t):t}},{key:\"getGalleryElements\",value:function(e,t){return e.filter((function(e){return e.gallery==t}))}},{key:\"getSelector\",value:function(){return!this.settings.elements&&(this.settings.selector&&\"data-\"==this.settings.selector.substring(0,5)?\"*[\".concat(this.settings.selector,\"]\"):this.settings.selector)}},{key:\"getActiveSlide\",value:function(){return this.slidesContainer.querySelectorAll(\".gslide\")[this.index]}},{key:\"getActiveSlideIndex\",value:function(){return this.index}},{key:\"getAnimationClasses\",value:function(){var e=[];for(var t in this.settings.cssEfects)if(this.settings.cssEfects.hasOwnProperty(t)){var i=this.settings.cssEfects[t];e.push(\"g\".concat(i.in)),e.push(\"g\".concat(i.out))}return e.join(\" \")}},{key:\"build\",value:function(){var e=this;if(this.built)return!1;var t=document.body.childNodes,i=[];o(t,(function(e){e.parentNode==document.body&&\"#\"!==e.nodeName.charAt(0)&&e.hasAttribute&&!e.hasAttribute(\"aria-hidden\")&&(i.push(e),e.setAttribute(\"aria-hidden\",\"true\"))}));var n=O(this.settings.svg,\"next\")?this.settings.svg.next:\"\",s=O(this.settings.svg,\"prev\")?this.settings.svg.prev:\"\",l=O(this.settings.svg,\"close\")?this.settings.svg.close:\"\",r=this.settings.lightboxHTML;r=m(r=(r=(r=r.replace(/{nextSVG}/g,n)).replace(/{prevSVG}/g,s)).replace(/{closeSVG}/g,l)),document.body.appendChild(r);var d=document.getElementById(\"glightbox-body\");this.modal=d;var g=d.querySelector(\".gclose\");this.prevButton=d.querySelector(\".gprev\"),this.nextButton=d.querySelector(\".gnext\"),this.overlay=d.querySelector(\".goverlay\"),this.loader=d.querySelector(\".gloader\"),this.slidesContainer=document.getElementById(\"glightbox-slider\"),this.bodyHiddenChildElms=i,this.events={},h(this.modal,\"glightbox-\"+this.settings.skin),this.settings.closeButton&&g&&(this.events.close=a(\"click\",{onElement:g,withCallback:function(t,i){t.preventDefault(),e.close()}})),g&&!this.settings.closeButton&&g.parentNode.removeChild(g),this.nextButton&&(this.events.next=a(\"click\",{onElement:this.nextButton,withCallback:function(t,i){t.preventDefault(),e.nextSlide()}})),this.prevButton&&(this.events.prev=a(\"click\",{onElement:this.prevButton,withCallback:function(t,i){t.preventDefault(),e.prevSlide()}})),this.settings.closeOnOutsideClick&&(this.events.outClose=a(\"click\",{onElement:d,withCallback:function(t,i){e.preventOutsideClick||c(document.body,\"glightbox-mobile\")||u(t.target,\".ginner-container\")||u(t.target,\".gbtn\")||c(t.target,\"gnext\")||c(t.target,\"gprev\")||e.close()}})),o(this.elements,(function(t,i){e.slidesContainer.appendChild(t.instance.create()),t.slideNode=e.slidesContainer.querySelectorAll(\".gslide\")[i]})),K&&h(document.body,\"glightbox-touch\"),this.events.resize=a(\"resize\",{onElement:window,withCallback:function(){e.resize()}}),this.built=!0}},{key:\"resize\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if((e=e||this.activeSlide)&&!c(e,\"zoomed\")){var t=y(),i=e.querySelector(\".gvideo-wrapper\"),n=e.querySelector(\".gslide-image\"),s=this.slideDescription,l=t.width,o=t.height;if(l<=768?h(document.body,\"glightbox-mobile\"):d(document.body,\"glightbox-mobile\"),i||n){var r=!1;if(s&&(c(s,\"description-bottom\")||c(s,\"description-top\"))&&!c(s,\"gabsolute\")&&(r=!0),n)if(l<=768)n.querySelector(\"img\");else if(r){var a=s.offsetHeight,u=n.querySelector(\"img\");u.setAttribute(\"style\",\"max-height: calc(100vh - \".concat(a,\"px)\")),s.setAttribute(\"style\",\"max-width: \".concat(u.offsetWidth,\"px;\"))}if(i){var g=O(this.settings.plyr.config,\"ratio\")?this.settings.plyr.config.ratio:\"\";if(!g){var v=i.clientWidth,f=i.clientHeight,p=v/f;g=\"\".concat(v/p,\":\").concat(f/p)}var m=g.split(\":\"),x=this.settings.videosWidth,b=this.settings.videosWidth,S=(b=M(x)||-1!==x.indexOf(\"px\")?parseInt(x):-1!==x.indexOf(\"vw\")?l*parseInt(x)/100:-1!==x.indexOf(\"vh\")?o*parseInt(x)/100:-1!==x.indexOf(\"%\")?l*parseInt(x)/100:parseInt(i.clientWidth))/(parseInt(m[0])/parseInt(m[1]));if(S=Math.floor(S),r&&(o-=s.offsetHeight),b>l||S>o||ob){var w=i.offsetWidth,T=i.offsetHeight,C=o/T,k={width:w*C,height:T*C};i.parentNode.setAttribute(\"style\",\"max-width: \".concat(k.width,\"px\")),r&&s.setAttribute(\"style\",\"max-width: \".concat(k.width,\"px;\"))}else i.parentNode.style.maxWidth=\"\".concat(x),r&&s.setAttribute(\"style\",\"max-width: \".concat(x,\";\"))}}}}},{key:\"reload\",value:function(){this.init()}},{key:\"updateNavigationClasses\",value:function(){var e=this.loop();d(this.nextButton,\"disabled\"),d(this.prevButton,\"disabled\"),0==this.index&&this.elements.length-1==0?(h(this.prevButton,\"disabled\"),h(this.nextButton,\"disabled\")):0!==this.index||e?this.index!==this.elements.length-1||e||h(this.nextButton,\"disabled\"):h(this.prevButton,\"disabled\")}},{key:\"loop\",value:function(){var e=O(this.settings,\"loopAtEnd\")?this.settings.loopAtEnd:null;return e=O(this.settings,\"loop\")?this.settings.loop:e,e}},{key:\"close\",value:function(){var e=this;if(!this.lightboxOpen){if(this.events){for(var t in this.events)this.events.hasOwnProperty(t)&&this.events[t].destroy();this.events=null}return!1}if(this.closing)return!1;this.closing=!0,this.slidePlayerPause(this.activeSlide),this.fullElementsList&&(this.elements=this.fullElementsList),this.bodyHiddenChildElms.length&&o(this.bodyHiddenChildElms,(function(e){e.removeAttribute(\"aria-hidden\")})),h(this.modal,\"glightbox-closing\"),g(this.overlay,\"none\"==this.settings.openEffect?\"none\":this.settings.cssEfects.fade.out),g(this.activeSlide,this.settings.cssEfects[this.settings.closeEffect].out,(function(){if(e.activeSlide=null,e.prevActiveSlideIndex=null,e.prevActiveSlide=null,e.built=!1,e.events){for(var t in e.events)e.events.hasOwnProperty(t)&&e.events[t].destroy();e.events=null}var i=document.body;d(Q,\"glightbox-open\"),d(i,\"glightbox-open touching gdesc-open glightbox-touch glightbox-mobile gscrollbar-fixer\"),e.modal.parentNode.removeChild(e.modal),e.trigger(\"close\"),T(e.settings.onClose)&&e.settings.onClose();var n=document.querySelector(\".gcss-styles\");n&&n.parentNode.removeChild(n),e.lightboxOpen=!1,e.closing=null}))}},{key:\"destroy\",value:function(){this.close(),this.clearAllEvents(),this.baseEvents&&this.baseEvents.destroy()}},{key:\"on\",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||!T(t))throw new TypeError(\"Event name and callback must be defined\");this.apiEvents.push({evt:e,once:i,callback:t})}},{key:\"once\",value:function(e,t){this.on(e,t,!0)}},{key:\"trigger\",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=[];o(this.apiEvents,(function(t,s){var l=t.evt,o=t.once,r=t.callback;l==e&&(r(i),o&&n.push(s))})),n.length&&o(n,(function(e){return t.apiEvents.splice(e,1)}))}},{key:\"clearAllEvents\",value:function(){this.apiEvents.splice(0,this.apiEvents.length)}},{key:\"version\",value:function(){return\"3.1.0\"}}]),e}();return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new te(e);return t.init(),t}}));\n\n//# sourceURL=webpack://startup-tailwind/./node_modules/glightbox/dist/js/glightbox.min.js?");}),"./node_modules/glightbox/dist/css/glightbox.min.css":/*!***********************************************************!*\
+!*** ./node_modules/glightbox/dist/css/glightbox.min.css ***!
+\***********************************************************/((__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://startup-tailwind/./node_modules/glightbox/dist/css/glightbox.min.css?");}),"./src/css/animate.css":/*!*****************************!*\
+!*** ./src/css/animate.css ***!
+\*****************************/((__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://startup-tailwind/./src/css/animate.css?");}),"./src/css/style.css":/*!***************************!*\
+!*** ./src/css/style.css ***!
+\***************************/((__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://startup-tailwind/./src/css/style.css?");}),"./node_modules/wowjs/dist/wow.js":/*!****************************************!*\
+!*** ./node_modules/wowjs/dist/wow.js ***!
+\****************************************/(function(){eval("(function() {\n var MutationObserver, Util, WeakMap, getComputedStyle, getComputedStyleRX,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n Util = (function() {\n function Util() {}\n\n Util.prototype.extend = function(custom, defaults) {\n var key, value;\n for (key in defaults) {\n value = defaults[key];\n if (custom[key] == null) {\n custom[key] = value;\n }\n }\n return custom;\n };\n\n Util.prototype.isMobile = function(agent) {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(agent);\n };\n\n Util.prototype.createEvent = function(event, bubble, cancel, detail) {\n var customEvent;\n if (bubble == null) {\n bubble = false;\n }\n if (cancel == null) {\n cancel = false;\n }\n if (detail == null) {\n detail = null;\n }\n if (document.createEvent != null) {\n customEvent = document.createEvent('CustomEvent');\n customEvent.initCustomEvent(event, bubble, cancel, detail);\n } else if (document.createEventObject != null) {\n customEvent = document.createEventObject();\n customEvent.eventType = event;\n } else {\n customEvent.eventName = event;\n }\n return customEvent;\n };\n\n Util.prototype.emitEvent = function(elem, event) {\n if (elem.dispatchEvent != null) {\n return elem.dispatchEvent(event);\n } else if (event in (elem != null)) {\n return elem[event]();\n } else if ((\"on\" + event) in (elem != null)) {\n return elem[\"on\" + event]();\n }\n };\n\n Util.prototype.addEvent = function(elem, event, fn) {\n if (elem.addEventListener != null) {\n return elem.addEventListener(event, fn, false);\n } else if (elem.attachEvent != null) {\n return elem.attachEvent(\"on\" + event, fn);\n } else {\n return elem[event] = fn;\n }\n };\n\n Util.prototype.removeEvent = function(elem, event, fn) {\n if (elem.removeEventListener != null) {\n return elem.removeEventListener(event, fn, false);\n } else if (elem.detachEvent != null) {\n return elem.detachEvent(\"on\" + event, fn);\n } else {\n return delete elem[event];\n }\n };\n\n Util.prototype.innerHeight = function() {\n if ('innerHeight' in window) {\n return window.innerHeight;\n } else {\n return document.documentElement.clientHeight;\n }\n };\n\n return Util;\n\n })();\n\n WeakMap = this.WeakMap || this.MozWeakMap || (WeakMap = (function() {\n function WeakMap() {\n this.keys = [];\n this.values = [];\n }\n\n WeakMap.prototype.get = function(key) {\n var i, item, j, len, ref;\n ref = this.keys;\n for (i = j = 0, len = ref.length; j < len; i = ++j) {\n item = ref[i];\n if (item === key) {\n return this.values[i];\n }\n }\n };\n\n WeakMap.prototype.set = function(key, value) {\n var i, item, j, len, ref;\n ref = this.keys;\n for (i = j = 0, len = ref.length; j < len; i = ++j) {\n item = ref[i];\n if (item === key) {\n this.values[i] = value;\n return;\n }\n }\n this.keys.push(key);\n return this.values.push(value);\n };\n\n return WeakMap;\n\n })());\n\n MutationObserver = this.MutationObserver || this.WebkitMutationObserver || this.MozMutationObserver || (MutationObserver = (function() {\n function MutationObserver() {\n if (typeof console !== \"undefined\" && console !== null) {\n console.warn('MutationObserver is not supported by your browser.');\n }\n if (typeof console !== \"undefined\" && console !== null) {\n console.warn('WOW.js cannot detect dom mutations, please call .sync() after loading new content.');\n }\n }\n\n MutationObserver.notSupported = true;\n\n MutationObserver.prototype.observe = function() {};\n\n return MutationObserver;\n\n })());\n\n getComputedStyle = this.getComputedStyle || function(el, pseudo) {\n this.getPropertyValue = function(prop) {\n var ref;\n if (prop === 'float') {\n prop = 'styleFloat';\n }\n if (getComputedStyleRX.test(prop)) {\n prop.replace(getComputedStyleRX, function(_, _char) {\n return _char.toUpperCase();\n });\n }\n return ((ref = el.currentStyle) != null ? ref[prop] : void 0) || null;\n };\n return this;\n };\n\n getComputedStyleRX = /(\\-([a-z]){1})/g;\n\n this.WOW = (function() {\n WOW.prototype.defaults = {\n boxClass: 'wow',\n animateClass: 'animated',\n offset: 0,\n mobile: true,\n live: true,\n callback: null,\n scrollContainer: null\n };\n\n function WOW(options) {\n if (options == null) {\n options = {};\n }\n this.scrollCallback = bind(this.scrollCallback, this);\n this.scrollHandler = bind(this.scrollHandler, this);\n this.resetAnimation = bind(this.resetAnimation, this);\n this.start = bind(this.start, this);\n this.scrolled = true;\n this.config = this.util().extend(options, this.defaults);\n if (options.scrollContainer != null) {\n this.config.scrollContainer = document.querySelector(options.scrollContainer);\n }\n this.animationNameCache = new WeakMap();\n this.wowEvent = this.util().createEvent(this.config.boxClass);\n }\n\n WOW.prototype.init = function() {\n var ref;\n this.element = window.document.documentElement;\n if ((ref = document.readyState) === \"interactive\" || ref === \"complete\") {\n this.start();\n } else {\n this.util().addEvent(document, 'DOMContentLoaded', this.start);\n }\n return this.finished = [];\n };\n\n WOW.prototype.start = function() {\n var box, j, len, ref;\n this.stopped = false;\n this.boxes = (function() {\n var j, len, ref, results;\n ref = this.element.querySelectorAll(\".\" + this.config.boxClass);\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n box = ref[j];\n results.push(box);\n }\n return results;\n }).call(this);\n this.all = (function() {\n var j, len, ref, results;\n ref = this.boxes;\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n box = ref[j];\n results.push(box);\n }\n return results;\n }).call(this);\n if (this.boxes.length) {\n if (this.disabled()) {\n this.resetStyle();\n } else {\n ref = this.boxes;\n for (j = 0, len = ref.length; j < len; j++) {\n box = ref[j];\n this.applyStyle(box, true);\n }\n }\n }\n if (!this.disabled()) {\n this.util().addEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);\n this.util().addEvent(window, 'resize', this.scrollHandler);\n this.interval = setInterval(this.scrollCallback, 50);\n }\n if (this.config.live) {\n return new MutationObserver((function(_this) {\n return function(records) {\n var k, len1, node, record, results;\n results = [];\n for (k = 0, len1 = records.length; k < len1; k++) {\n record = records[k];\n results.push((function() {\n var l, len2, ref1, results1;\n ref1 = record.addedNodes || [];\n results1 = [];\n for (l = 0, len2 = ref1.length; l < len2; l++) {\n node = ref1[l];\n results1.push(this.doSync(node));\n }\n return results1;\n }).call(_this));\n }\n return results;\n };\n })(this)).observe(document.body, {\n childList: true,\n subtree: true\n });\n }\n };\n\n WOW.prototype.stop = function() {\n this.stopped = true;\n this.util().removeEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);\n this.util().removeEvent(window, 'resize', this.scrollHandler);\n if (this.interval != null) {\n return clearInterval(this.interval);\n }\n };\n\n WOW.prototype.sync = function(element) {\n if (MutationObserver.notSupported) {\n return this.doSync(this.element);\n }\n };\n\n WOW.prototype.doSync = function(element) {\n var box, j, len, ref, results;\n if (element == null) {\n element = this.element;\n }\n if (element.nodeType !== 1) {\n return;\n }\n element = element.parentNode || element;\n ref = element.querySelectorAll(\".\" + this.config.boxClass);\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n box = ref[j];\n if (indexOf.call(this.all, box) < 0) {\n this.boxes.push(box);\n this.all.push(box);\n if (this.stopped || this.disabled()) {\n this.resetStyle();\n } else {\n this.applyStyle(box, true);\n }\n results.push(this.scrolled = true);\n } else {\n results.push(void 0);\n }\n }\n return results;\n };\n\n WOW.prototype.show = function(box) {\n this.applyStyle(box);\n box.className = box.className + \" \" + this.config.animateClass;\n if (this.config.callback != null) {\n this.config.callback(box);\n }\n this.util().emitEvent(box, this.wowEvent);\n this.util().addEvent(box, 'animationend', this.resetAnimation);\n this.util().addEvent(box, 'oanimationend', this.resetAnimation);\n this.util().addEvent(box, 'webkitAnimationEnd', this.resetAnimation);\n this.util().addEvent(box, 'MSAnimationEnd', this.resetAnimation);\n return box;\n };\n\n WOW.prototype.applyStyle = function(box, hidden) {\n var delay, duration, iteration;\n duration = box.getAttribute('data-wow-duration');\n delay = box.getAttribute('data-wow-delay');\n iteration = box.getAttribute('data-wow-iteration');\n return this.animate((function(_this) {\n return function() {\n return _this.customStyle(box, hidden, duration, delay, iteration);\n };\n })(this));\n };\n\n WOW.prototype.animate = (function() {\n if ('requestAnimationFrame' in window) {\n return function(callback) {\n return window.requestAnimationFrame(callback);\n };\n } else {\n return function(callback) {\n return callback();\n };\n }\n })();\n\n WOW.prototype.resetStyle = function() {\n var box, j, len, ref, results;\n ref = this.boxes;\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n box = ref[j];\n results.push(box.style.visibility = 'visible');\n }\n return results;\n };\n\n WOW.prototype.resetAnimation = function(event) {\n var target;\n if (event.type.toLowerCase().indexOf('animationend') >= 0) {\n target = event.target || event.srcElement;\n return target.className = target.className.replace(this.config.animateClass, '').trim();\n }\n };\n\n WOW.prototype.customStyle = function(box, hidden, duration, delay, iteration) {\n if (hidden) {\n this.cacheAnimationName(box);\n }\n box.style.visibility = hidden ? 'hidden' : 'visible';\n if (duration) {\n this.vendorSet(box.style, {\n animationDuration: duration\n });\n }\n if (delay) {\n this.vendorSet(box.style, {\n animationDelay: delay\n });\n }\n if (iteration) {\n this.vendorSet(box.style, {\n animationIterationCount: iteration\n });\n }\n this.vendorSet(box.style, {\n animationName: hidden ? 'none' : this.cachedAnimationName(box)\n });\n return box;\n };\n\n WOW.prototype.vendors = [\"moz\", \"webkit\"];\n\n WOW.prototype.vendorSet = function(elem, properties) {\n var name, results, value, vendor;\n results = [];\n for (name in properties) {\n value = properties[name];\n elem[\"\" + name] = value;\n results.push((function() {\n var j, len, ref, results1;\n ref = this.vendors;\n results1 = [];\n for (j = 0, len = ref.length; j < len; j++) {\n vendor = ref[j];\n results1.push(elem[\"\" + vendor + (name.charAt(0).toUpperCase()) + (name.substr(1))] = value);\n }\n return results1;\n }).call(this));\n }\n return results;\n };\n\n WOW.prototype.vendorCSS = function(elem, property) {\n var j, len, ref, result, style, vendor;\n style = getComputedStyle(elem);\n result = style.getPropertyCSSValue(property);\n ref = this.vendors;\n for (j = 0, len = ref.length; j < len; j++) {\n vendor = ref[j];\n result = result || style.getPropertyCSSValue(\"-\" + vendor + \"-\" + property);\n }\n return result;\n };\n\n WOW.prototype.animationName = function(box) {\n var animationName, error;\n try {\n animationName = this.vendorCSS(box, 'animation-name').cssText;\n } catch (error) {\n animationName = getComputedStyle(box).getPropertyValue('animation-name');\n }\n if (animationName === 'none') {\n return '';\n } else {\n return animationName;\n }\n };\n\n WOW.prototype.cacheAnimationName = function(box) {\n return this.animationNameCache.set(box, this.animationName(box));\n };\n\n WOW.prototype.cachedAnimationName = function(box) {\n return this.animationNameCache.get(box);\n };\n\n WOW.prototype.scrollHandler = function() {\n return this.scrolled = true;\n };\n\n WOW.prototype.scrollCallback = function() {\n var box;\n if (this.scrolled) {\n this.scrolled = false;\n this.boxes = (function() {\n var j, len, ref, results;\n ref = this.boxes;\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n box = ref[j];\n if (!(box)) {\n continue;\n }\n if (this.isVisible(box)) {\n this.show(box);\n continue;\n }\n results.push(box);\n }\n return results;\n }).call(this);\n if (!(this.boxes.length || this.config.live)) {\n return this.stop();\n }\n }\n };\n\n WOW.prototype.offsetTop = function(element) {\n var top;\n while (element.offsetTop === void 0) {\n element = element.parentNode;\n }\n top = element.offsetTop;\n while (element = element.offsetParent) {\n top += element.offsetTop;\n }\n return top;\n };\n\n WOW.prototype.isVisible = function(box) {\n var bottom, offset, top, viewBottom, viewTop;\n offset = box.getAttribute('data-wow-offset') || this.config.offset;\n viewTop = (this.config.scrollContainer && this.config.scrollContainer.scrollTop) || window.pageYOffset;\n viewBottom = viewTop + Math.min(this.element.clientHeight, this.util().innerHeight()) - offset;\n top = this.offsetTop(box);\n bottom = top + box.clientHeight;\n return top <= viewBottom && bottom >= viewTop;\n };\n\n WOW.prototype.util = function() {\n return this._util != null ? this._util : this._util = new Util();\n };\n\n WOW.prototype.disabled = function() {\n return !this.config.mobile && this.util().isMobile(navigator.userAgent);\n };\n\n return WOW;\n\n })();\n\n}).call(this);\n\n\n//# sourceURL=webpack://startup-tailwind/./node_modules/wowjs/dist/wow.js?");})});var __webpack_module_cache__={};function __webpack_require__(moduleId){var cachedModule=__webpack_module_cache__[moduleId];if(cachedModule!==undefined){return cachedModule.exports;}
+var module=__webpack_module_cache__[moduleId]={exports:{}};__webpack_modules__[moduleId].call(module.exports,module,module.exports,__webpack_require__);return module.exports;}
+(()=>{__webpack_require__.n=(module)=>{var getter=module&&module.__esModule?()=>(module['default']):()=>(module);__webpack_require__.d(getter,{a:getter});return getter;};})();(()=>{__webpack_require__.d=(exports,definition)=>{for(var key in definition){if(__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports,key)){Object.defineProperty(exports,key,{enumerable:true,get:definition[key]});}}};})();(()=>{__webpack_require__.o=(obj,prop)=>(Object.prototype.hasOwnProperty.call(obj,prop))})();(()=>{__webpack_require__.r=(exports)=>{if(typeof Symbol!=='undefined'&&Symbol.toStringTag){Object.defineProperty(exports,Symbol.toStringTag,{value:'Module'});}
+Object.defineProperty(exports,'__esModule',{value:true});};})();var __webpack_exports__=__webpack_require__("./src/js/index.js");})();
diff --git a/app-rappaurio/public/js/custom.js b/app-rappaurio/public/js/custom.js
new file mode 100644
index 0000000..b3aa895
--- /dev/null
+++ b/app-rappaurio/public/js/custom.js
@@ -0,0 +1,368 @@
+
+// === SCROLL MENU ===
+const pageLink = document.querySelectorAll('.menu-scroll');
+
+pageLink.forEach((elem) => {
+ elem.addEventListener('click', (e) => {
+ e.preventDefault();
+ document.querySelector(elem.getAttribute('href')).scrollIntoView({
+ behavior: 'smooth',
+ offsetTop: 1 - 60,
+ });
+ });
+});
+
+// section menu active
+function onScroll(event) {
+ const sections = document.querySelectorAll('.menu-scroll');
+ const scrollPos = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
+
+ for (let i = 0; i < sections.length; i++) {
+ const currLink = sections[i];
+ const val = currLink.getAttribute('href');
+ const refElement = document.querySelector(val);
+ const scrollTopMinus = scrollPos + 73;
+ if (refElement.offsetTop <= scrollTopMinus && refElement.offsetTop + refElement.offsetHeight > scrollTopMinus) {
+ document.querySelector('.menu-scroll').classList.remove('active');
+ currLink.classList.add('active');
+ } else {
+ currLink.classList.remove('active');
+ }
+ }
+}
+
+window.document.addEventListener('scroll', onScroll);
+
+// === FOOTER DYNAMIC ===
+
+// Sélectionnez le footer par son ID
+const footer = document.getElementById('leFooter');
+
+// Fonction pour positionner le footer en bas de la page
+function positionFooter() {
+ const windowHeight = window.innerHeight;
+ const bodyHeight = document.body.clientHeight;
+ const footerHeight = footer.clientHeight;
+
+ if (bodyHeight < windowHeight) {
+ footer.style.position = 'absolute';
+ footer.style.bottom = '0';
+ } else {
+ footer.style.position = 'static';
+ }
+}
+
+// Appelez la fonction lors du chargement de la page et lorsque la fenêtre est redimensionnée
+window.addEventListener('load', positionFooter);
+window.addEventListener('resize', positionFooter);
+
+
+// === MODE SOMBRE +> LOCAL STORAGE ===
+
+// Fonction pour lire la valeur du thème depuis localStorage
+function getThemeLocalStorage() {
+ return localStorage.getItem('theme');
+}
+
+// Fonction pour définir le thème dans localStorage
+function setThemeLocalStorage(theme) {
+ localStorage.setItem('theme', theme);
+}
+
+// Fonction pour mettre à jour la classe sur le en fonction du thème
+function updateThemeClass() {
+ const darkTogglerCheckbox = document.querySelector('#darkToggler');
+ const html = document.querySelector('html');
+ const theme = getThemeLocalStorage();
+
+ // Appliquer la classe en fonction de la valeur de localStorage
+ if (theme === 'dark') {
+ darkTogglerCheckbox.checked = true;
+ html.classList.add('dark');
+ } else {
+ darkTogglerCheckbox.checked = false;
+ html.classList.remove('dark');
+ }
+}
+
+// Appeler la fonction d'initialisation de la gestion du thème
+updateThemeClass();
+
+// Gérer le changement de thème lorsque l'utilisateur clique sur la case à cocher
+const darkTogglerCheckbox = document.querySelector('#darkToggler');
+darkTogglerCheckbox.addEventListener('click', function () {
+ if (darkTogglerCheckbox.checked) {
+ setThemeLocalStorage('dark');
+ } else {
+ setThemeLocalStorage('light');
+ }
+});
+
+// === ENVOIE FORMULAIRE AVEC AJAX ===
+
+// Attendre que le document soit prêt
+$(document).ready(function () {
+
+ // Sélectionnez le formulaire de COMPARAISON par son ID
+ $('#formulaire-comp').submit(function (e) {
+
+ // Fait scroll une fois le formulaire envoyé
+ $(document).ready(function () {
+ // Sélectionnez le lien par son ID
+
+ $('html, body').animate({
+ scrollTop: $('#resultat').offset().top
+ }, 1000); // 1000 millisecondes (1 seconde) pour l'animation
+ });
+
+ // Empêchez la soumission normale du formulaire
+ e.preventDefault();
+
+ // Affiche le chargement
+ $('#loading').removeClass('hidden');
+
+ $('#articleIntrouvable').addClass('hidden');
+ $('#articleContainer1').addClass('hidden');
+ $('#articleContainer2').addClass('hidden');
+
+ // Reste du code pour gérer la soumission du formulaire
+ //console.log('Formulaire soumis !');
+
+ // Récupérez les valeurs des champs du formulaire
+ const articleTitle1 = $('#articleTitle1').val();
+ const articleTitle2 = $('#articleTitle2').val();
+
+ // Créez un objet JavaScript avec les données à envoyer au serveur
+ const formData = {
+ articleTitle1: articleTitle1,
+ articleTitle2: articleTitle2
+ };
+
+ // Utilisez AJAX pour envoyer les données au serveur
+ $.ajax({
+ type: 'POST',
+ url: '/search',
+ data: formData,
+ dataType: 'json',
+ success: function (response) {
+ console.log(response);
+
+ $('#loading').addClass('hidden');
+ $('#articleIntrouvable').removeClass('hidden');
+
+ // Mettez à jour la section HTML avec les données reçues ici
+
+ // Vérifiez si response.articleInfo1 existe et contient les informations nécessaires
+ if (response.articleInfo1) {
+ $('#articleInfo1Title').html(response.articleInfo1.title);
+
+ // Article 1
+ $('#articleInfo1Title').html(response.articleInfo1.title);
+ $('#articleInfo1url').attr('href', response.articleInfo1.url);
+ $('#articleInfo1extract').html(response.articleInfo1.extract);
+ $('#articleInfo1lastEdit').html(response.articleInfo1.lastEdit);
+ $('#articleInfo1numRevisions').html(response.articleInfo1.numRevisions);
+ $('#articleInfo1pageSize').html(response.articleInfo1.pageSize);
+ $('#articleInfo1firstRevisionUser').html(response.articleInfo1.firstRevisionUser);
+ $('#articleInfo1latestRevisionId').html(response.articleInfo1.latestRevisionId);
+ $('#articleInfo1pageId').html(response.articleInfo1.pageId);
+ $('#articleInfo1latestVersion').html(response.articleInfo1.latestVersion);
+ $('#articleInfo1wordCount').html(response.articleInfo1.wordCount);
+ $('#articleInfo1charCount').html(response.articleInfo1.charCount);
+ $('#articleInfo1lastContributor').html(response.articleInfo1.lastContributor);
+ $('#articleInfo1image').attr('href', response.articleInfo1.image);
+ $('#articleInfo1image img').attr('src', response.articleInfo1.image);
+
+ // Récupérez la valeur de l'image
+ const articleInfo1ImageValue = response.articleInfo1.image;
+
+ // Récupérez l'élément image par son ID
+ const articleInfo1Image = document.getElementById("articleInfo1image");
+
+ if (articleInfo1ImageValue === "Non disponible") {
+ // Si la valeur est "Non disponible", masquez l'élément
+ articleInfo1Image.style.display = "none";
+ } else {
+ // Sinon, affichez l'élément
+ articleInfo1Image.style.display = "block"; // Vous pouvez utiliser "inline" si nécessaire
+ // Assurez-vous de définir la source de l'image ici en fonction de votre logique
+ articleInfo1Image.src = articleInfo1ImageValue;
+ }
+
+
+ const infoboxContainer1 = document.getElementById("infoboxcontainer1");
+ // Supprimer le contenu précédent de l'infobox
+ while (infoboxContainer1.firstChild) {
+ infoboxContainer1.removeChild(infoboxContainer1.firstChild);
+ }
+ // Ajouter les nouvelles informations pour articleInfo1
+ const infoboxData1 = response.articleInfo1.infobox;
+ Object.entries(infoboxData1).forEach(([key, value]) => {
+ const ligne = document.createElement("tr");
+ ligne.innerHTML = `${key} ${value} `;
+ infoboxContainer1.appendChild(ligne);
+ });
+ } else {
+ // Traitez le cas où response.articleInfo1 n'existe pas
+ }
+
+
+ // Vérifiez si response.articleInfo2 existe et contient les informations nécessaires
+ if (response.articleInfo2) {
+ $('#articleInfo2Title').html(response.articleInfo2.title);
+
+ // Article 2
+ $('#articleInfo2Title').html(response.articleInfo2.title);
+ $('#articleInfo2url').attr('href', response.articleInfo2.url);
+ $('#articleInfo2extract').html(response.articleInfo2.extract);
+ $('#articleInfo2lastEdit').html(response.articleInfo2.lastEdit);
+ $('#articleInfo2numRevisions').html(response.articleInfo2.numRevisions);
+ $('#articleInfo2pageSize').html(response.articleInfo2.pageSize);
+ $('#articleInfo2firstRevisionUser').html(response.articleInfo2.firstRevisionUser);
+ $('#articleInfo2latestRevisionId').html(response.articleInfo2.latestRevisionId);
+ $('#articleInfo2pageId').html(response.articleInfo2.pageId);
+ $('#articleInfo2latestVersion').html(response.articleInfo2.latestVersion);
+ $('#articleInfo2wordCount').html(response.articleInfo2.wordCount);
+ $('#articleInfo2charCount').html(response.articleInfo2.charCount);
+ $('#articleInfo2lastContributor').html(response.articleInfo2.lastContributor);
+ $('#articleInfo2image').attr('href', response.articleInfo2.image);
+ $('#articleInfo2image img').attr('src', response.articleInfo2.image);
+
+
+ // Récupérez la valeur de l'image
+ const articleInfo2ImageValue = response.articleInfo2.image;
+
+ // Récupérez l'élément image par son ID
+ const articleInfo2Image = document.getElementById("articleInfo2image");
+
+ if (articleInfo2ImageValue === "Non disponible") {
+ // Si la valeur est "Non disponible", masquez l'élément
+ articleInfo2Image.style.display = "none";
+ } else {
+ // Sinon, affichez l'élément
+ articleInfo2Image.style.display = "block"; // Vous pouvez utiliser "inline" si nécessaire
+ // Assurez-vous de définir la source de l'image ici en fonction de votre logique
+ articleInfo2Image.src = articleInfo2ImageValue;
+ }
+
+ const infoboxContainer2 = document.getElementById("infoboxcontainer2");
+ // Supprimer le contenu précédent de l'infobox
+ while (infoboxContainer2.firstChild) {
+ infoboxContainer2.removeChild(infoboxContainer2.firstChild);
+ }
+ // Ajouter les nouvelles informations pour articleInfo2
+ const infoboxData2 = response.articleInfo2.infobox;
+ Object.entries(infoboxData2).forEach(([key, value]) => {
+ const ligne = document.createElement("tr");
+ ligne.innerHTML = `${key} ${value} `;
+ infoboxContainer2.appendChild(ligne);
+ });
+ } else {
+ // Traitez le cas où response.articleInfo2 n'existe pas
+ }
+
+ // Vérifiez si toutes les informations nécessaires sont disponibles
+ const allInfoAvailable = checkIfAllInfoAvailable(response);
+
+ if (allInfoAvailable) {
+ $('#articleContainer1').removeClass('hidden');
+ $('#articleContainer2').removeClass('hidden');
+ $('#articleIntrouvable').addClass('hidden');
+
+ $(document).ready(function () {
+ // Sélectionnez le lien par son ID
+ $('html, body').animate({
+ scrollTop: $('#resultat').offset().top
+ }, 1000); // 1000 millisecondes (1 seconde) pour l'animation
+ });
+
+ } else {
+ // Traitez le cas où certaines informations ne sont pas disponibles
+ const articleIntrouvable = document.getElementById("articleIntrouvable");
+ let errorMessage = "";
+
+ if (!response.articleInfo1 && !response.articleInfo2) {
+ errorMessage += "Les articles " +
+ '' + articleTitle1 + " et " +
+ '' + articleTitle2 + " sont introuvables.";
+ }
+ else {
+
+ if (!response.articleInfo1) {
+ errorMessage += "L'article " + '' + articleTitle1 + " est introuvable.";
+ }
+
+ if (!response.articleInfo2) {
+ errorMessage += "L'article " + '' + articleTitle2 + " est introuvable.";
+ }
+ }
+
+ articleIntrouvable.innerHTML = errorMessage;
+ }
+
+ },
+
+ error: function (error) {
+ console.error('Erreur lors de la recherche d\'informations sur les articles :', error);
+
+ // Ajoutez une console.log pour vérifier si cette partie du code est exécutée
+ console.log('Erreur AJAX');
+
+ // Sélectionnez le div d'erreur par son ID
+ const articleIntrouvable = document.getElementById("articleIntrouvable");
+
+ // Mettez à jour le contenu du div avec un message d'erreur
+ articleIntrouvable.textContent = "Aucun article n'a été trouvé.";
+
+ // Assurez-vous de masquer les conteneurs d'articles
+ $('#articleContainer1').addClass('hidden');
+ $('#articleContainer2').addClass('hidden');
+ }
+
+ });
+ });
+
+});
+
+function checkIfAllInfoAvailable(response) {
+ // Vérifiez si response.articleInfo1 contient toutes les informations nécessaires
+ const articleInfo1 = response.articleInfo1;
+ if (!articleInfo1) {
+ return false; // Si articleInfo1 est absent, retournez false
+ }
+ // Ajoutez ici des vérifications spécifiques pour les propriétés nécessaires dans articleInfo1
+ if (!articleInfo1.title || !articleInfo1.url || !articleInfo1.extract || !articleInfo1.lastEdit) {
+ return false; // Si l'une des propriétés nécessaires est absente, retournez false
+ }
+
+ // Vérifiez si response.articleInfo2 contient toutes les informations nécessaires
+ const articleInfo2 = response.articleInfo2;
+ if (!articleInfo2) {
+ return false; // Si articleInfo2 est absent, retournez false
+ }
+ // Ajoutez ici des vérifications spécifiques pour les propriétés nécessaires dans articleInfo2
+ if (!articleInfo2.title || !articleInfo2.url || !articleInfo2.extract || !articleInfo2.lastEdit) {
+ return false; // Si l'une des propriétés nécessaires est absente, retournez false
+ }
+
+ // Si toutes les vérifications sont passées, cela signifie que toutes les informations nécessaires sont disponibles
+ return true;
+}
+
+// === SMOOTH SCROLL ~(^^)~
+
+// Fait scroll jusqu'au formulaire de comparaison
+$(document).ready(function () {
+ // Sélectionnez le lien par son ID
+ $('#letzgooo').click(function (e) {
+ e.preventDefault(); // Empêchez le comportement de clic par défaut
+
+ $('html, body').animate({
+ scrollTop: $('#comparaison').offset().top
+ }, 1000); // 1000 millisecondes (1 seconde) pour l'animation
+ });
+});
+
+
+
+
diff --git a/app-rappaurio/public/stylesheets/style.css b/app-rappaurio/public/stylesheets/style.css
new file mode 100644
index 0000000..f35fe85
--- /dev/null
+++ b/app-rappaurio/public/stylesheets/style.css
@@ -0,0 +1,3867 @@
+/*!***************************************************************************************************************!*\
+!*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./src/css/style.css ***!
+\***************************************************************************************************************/
+@import "https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap";
+
+/*!***********************************************************************************************************************************************!*\
+!*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./node_modules/glightbox/dist/css/glightbox.min.css ***!
+\***********************************************************************************************************************************************/
+.glightbox-container {
+ width: 100%;
+ height: 100%;
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 999999 !important;
+ overflow: hidden;
+ touch-action: none;
+ -webkit-text-size-adjust: 100%;
+ -moz-text-size-adjust: 100%;
+ text-size-adjust: 100%;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ outline: 0
+}
+
+.glightbox-container.inactive {
+ display: none
+}
+
+.glightbox-container .gcontainer {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ z-index: 9999;
+ overflow: hidden
+}
+
+.glightbox-container .gslider {
+ transition: transform .4s ease;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
+ position: relative;
+ overflow: hidden;
+ display: flex !important;
+ justify-content: center;
+ align-items: center;
+ transform: translate3d(0, 0, 0)
+}
+
+.glightbox-container .gslide {
+ width: 100%;
+ position: absolute;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ opacity: 0
+}
+
+.glightbox-container .gslide.current {
+ opacity: 1;
+ z-index: 99999;
+ position: relative
+}
+
+.glightbox-container .gslide.prev {
+ opacity: 1;
+ z-index: 9999
+}
+
+.glightbox-container .gslide-inner-content {
+ width: 100%
+}
+
+.glightbox-container .ginner-container {
+ position: relative;
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ flex-direction: column;
+ max-width: 100%;
+ margin: auto;
+ height: 100vh
+}
+
+.glightbox-container .ginner-container.gvideo-container {
+ width: 100%
+}
+
+.glightbox-container .ginner-container.desc-bottom,
+.glightbox-container .ginner-container.desc-top {
+ flex-direction: column
+}
+
+.glightbox-container .ginner-container.desc-left,
+.glightbox-container .ginner-container.desc-right {
+ max-width: 100% !important
+}
+
+.gslide iframe,
+.gslide video {
+ outline: 0 !important;
+ border: none;
+ min-height: 165px;
+ -webkit-overflow-scrolling: touch;
+ touch-action: auto
+}
+
+.gslide:not(.current) {
+ pointer-events: none
+}
+
+.gslide-image {
+ align-items: center
+}
+
+.gslide-image img {
+ max-height: 100vh;
+ display: block;
+ padding: 0;
+ float: none;
+ outline: 0;
+ border: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ max-width: 100vw;
+ width: auto;
+ height: auto;
+ -o-object-fit: cover;
+ object-fit: cover;
+ touch-action: none;
+ margin: auto;
+ min-width: 200px
+}
+
+.desc-bottom .gslide-image img,
+.desc-top .gslide-image img {
+ width: auto
+}
+
+.desc-left .gslide-image img,
+.desc-right .gslide-image img {
+ width: auto;
+ max-width: 100%
+}
+
+.gslide-image img.zoomable {
+ position: relative
+}
+
+.gslide-image img.dragging {
+ cursor: grabbing !important;
+ transition: none
+}
+
+.gslide-video {
+ position: relative;
+ max-width: 100vh;
+ width: 100% !important
+}
+
+.gslide-video .plyr__poster-enabled.plyr--loading .plyr__poster {
+ display: none
+}
+
+.gslide-video .gvideo-wrapper {
+ width: 100%;
+ margin: auto
+}
+
+.gslide-video::before {
+ content: '';
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background: rgba(255, 0, 0, .34);
+ display: none
+}
+
+.gslide-video.playing::before {
+ display: none
+}
+
+.gslide-video.fullscreen {
+ max-width: 100% !important;
+ min-width: 100%;
+ height: 75vh
+}
+
+.gslide-video.fullscreen video {
+ max-width: 100% !important;
+ width: 100% !important
+}
+
+.gslide-inline {
+ background: #fff;
+ text-align: left;
+ max-height: calc(100vh - 40px);
+ overflow: auto;
+ max-width: 100%;
+ margin: auto
+}
+
+.gslide-inline .ginlined-content {
+ padding: 20px;
+ width: 100%
+}
+
+.gslide-inline .dragging {
+ cursor: grabbing !important;
+ transition: none
+}
+
+.ginlined-content {
+ overflow: auto;
+ display: block !important;
+ opacity: 1
+}
+
+.gslide-external {
+ display: flex;
+ width: 100%;
+ min-width: 100%;
+ background: #fff;
+ padding: 0;
+ overflow: auto;
+ max-height: 75vh;
+ height: 100%
+}
+
+.gslide-media {
+ display: flex;
+ width: auto
+}
+
+.zoomed .gslide-media {
+ box-shadow: none !important
+}
+
+.desc-bottom .gslide-media,
+.desc-top .gslide-media {
+ margin: 0 auto;
+ flex-direction: column
+}
+
+.gslide-description {
+ position: relative;
+ flex: 1 0 100%
+}
+
+.gslide-description.description-left,
+.gslide-description.description-right {
+ max-width: 100%
+}
+
+.gslide-description.description-bottom,
+.gslide-description.description-top {
+ margin: 0 auto;
+ width: 100%
+}
+
+.gslide-description p {
+ margin-bottom: 12px
+}
+
+.gslide-description p:last-child {
+ margin-bottom: 0
+}
+
+.zoomed .gslide-description {
+ display: none
+}
+
+.glightbox-button-hidden {
+ display: none
+}
+
+.glightbox-mobile .glightbox-container .gslide-description {
+ height: auto !important;
+ width: 100%;
+ position: absolute;
+ bottom: 0;
+ padding: 19px 11px;
+ max-width: 100vw !important;
+ order: 2 !important;
+ max-height: 78vh;
+ overflow: auto !important;
+ background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, .75) 100%);
+ transition: opacity .3s linear;
+ padding-bottom: 50px
+}
+
+.glightbox-mobile .glightbox-container .gslide-title {
+ color: #fff;
+ font-size: 1em
+}
+
+.glightbox-mobile .glightbox-container .gslide-desc {
+ color: #a1a1a1
+}
+
+.glightbox-mobile .glightbox-container .gslide-desc a {
+ color: #fff;
+ font-weight: 700
+}
+
+.glightbox-mobile .glightbox-container .gslide-desc * {
+ color: inherit
+}
+
+.glightbox-mobile .glightbox-container .gslide-desc .desc-more {
+ color: #fff;
+ opacity: .4
+}
+
+.gdesc-open .gslide-media {
+ transition: opacity .5s ease;
+ opacity: .4
+}
+
+.gdesc-open .gdesc-inner {
+ padding-bottom: 30px
+}
+
+.gdesc-closed .gslide-media {
+ transition: opacity .5s ease;
+ opacity: 1
+}
+
+.greset {
+ transition: all .3s ease
+}
+
+.gabsolute {
+ position: absolute
+}
+
+.grelative {
+ position: relative
+}
+
+.glightbox-desc {
+ display: none !important
+}
+
+.glightbox-open {
+ overflow: hidden
+}
+
+.gloader {
+ height: 25px;
+ width: 25px;
+ animation: lightboxLoader .8s infinite linear;
+ border: 2px solid #fff;
+ border-right-color: transparent;
+ border-radius: 50%;
+ position: absolute;
+ display: block;
+ z-index: 9999;
+ left: 0;
+ right: 0;
+ margin: 0 auto;
+ top: 47%
+}
+
+.goverlay {
+ width: 100%;
+ height: calc(100vh + 1px);
+ position: fixed;
+ top: -1px;
+ left: 0;
+ background: #000;
+ will-change: opacity
+}
+
+.glightbox-mobile .goverlay {
+ background: #000
+}
+
+.gclose,
+.gnext,
+.gprev {
+ z-index: 99999;
+ cursor: pointer;
+ width: 26px;
+ height: 44px;
+ border: none;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column
+}
+
+.gclose svg,
+.gnext svg,
+.gprev svg {
+ display: block;
+ width: 25px;
+ height: auto;
+ margin: 0;
+ padding: 0
+}
+
+.gclose.disabled,
+.gnext.disabled,
+.gprev.disabled {
+ opacity: .1
+}
+
+.gclose .garrow,
+.gnext .garrow,
+.gprev .garrow {
+ stroke: #fff
+}
+
+.gbtn.focused {
+ outline: 2px solid #0f3d81
+}
+
+iframe.wait-autoplay {
+ opacity: 0
+}
+
+.glightbox-closing .gclose,
+.glightbox-closing .gnext,
+.glightbox-closing .gprev {
+ opacity: 0 !important
+}
+
+.glightbox-clean .gslide-description {
+ background: #fff
+}
+
+.glightbox-clean .gdesc-inner {
+ padding: 22px 20px
+}
+
+.glightbox-clean .gslide-title {
+ font-size: 1em;
+ font-weight: 400;
+ font-family: arial;
+ color: #000;
+ margin-bottom: 19px;
+ line-height: 1.4em
+}
+
+.glightbox-clean .gslide-desc {
+ font-size: .86em;
+ margin-bottom: 0;
+ font-family: arial;
+ line-height: 1.4em
+}
+
+.glightbox-clean .gslide-video {
+ background: #000
+}
+
+.glightbox-clean .gclose,
+.glightbox-clean .gnext,
+.glightbox-clean .gprev {
+ background-color: rgba(0, 0, 0, .75);
+ border-radius: 4px
+}
+
+.glightbox-clean .gclose path,
+.glightbox-clean .gnext path,
+.glightbox-clean .gprev path {
+ fill: #fff
+}
+
+.glightbox-clean .gprev {
+ position: absolute;
+ top: -100%;
+ left: 30px;
+ width: 40px;
+ height: 50px
+}
+
+.glightbox-clean .gnext {
+ position: absolute;
+ top: -100%;
+ right: 30px;
+ width: 40px;
+ height: 50px
+}
+
+.glightbox-clean .gclose {
+ width: 35px;
+ height: 35px;
+ top: 15px;
+ right: 10px;
+ position: absolute
+}
+
+.glightbox-clean .gclose svg {
+ width: 18px;
+ height: auto
+}
+
+.glightbox-clean .gclose:hover {
+ opacity: 1
+}
+
+.gfadeIn {
+ animation: gfadeIn .5s ease
+}
+
+.gfadeOut {
+ animation: gfadeOut .5s ease
+}
+
+.gslideOutLeft {
+ animation: gslideOutLeft .3s ease
+}
+
+.gslideInLeft {
+ animation: gslideInLeft .3s ease
+}
+
+.gslideOutRight {
+ animation: gslideOutRight .3s ease
+}
+
+.gslideInRight {
+ animation: gslideInRight .3s ease
+}
+
+.gzoomIn {
+ animation: gzoomIn .5s ease
+}
+
+.gzoomOut {
+ animation: gzoomOut .5s ease
+}
+
+@keyframes lightboxLoader {
+ 0% {
+ transform: rotate(0)
+ }
+
+ 100% {
+ transform: rotate(360deg)
+ }
+}
+
+@keyframes gfadeIn {
+ from {
+ opacity: 0
+ }
+
+ to {
+ opacity: 1
+ }
+}
+
+@keyframes gfadeOut {
+ from {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0
+ }
+}
+
+@keyframes gslideInLeft {
+ from {
+ opacity: 0;
+ transform: translate3d(-60%, 0, 0)
+ }
+
+ to {
+ visibility: visible;
+ transform: translate3d(0, 0, 0);
+ opacity: 1
+ }
+}
+
+@keyframes gslideOutLeft {
+ from {
+ opacity: 1;
+ visibility: visible;
+ transform: translate3d(0, 0, 0)
+ }
+
+ to {
+ transform: translate3d(-60%, 0, 0);
+ opacity: 0;
+ visibility: hidden
+ }
+}
+
+@keyframes gslideInRight {
+ from {
+ opacity: 0;
+ visibility: visible;
+ transform: translate3d(60%, 0, 0)
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ opacity: 1
+ }
+}
+
+@keyframes gslideOutRight {
+ from {
+ opacity: 1;
+ visibility: visible;
+ transform: translate3d(0, 0, 0)
+ }
+
+ to {
+ transform: translate3d(60%, 0, 0);
+ opacity: 0
+ }
+}
+
+@keyframes gzoomIn {
+ from {
+ opacity: 0;
+ transform: scale3d(.3, .3, .3)
+ }
+
+ to {
+ opacity: 1
+ }
+}
+
+@keyframes gzoomOut {
+ from {
+ opacity: 1
+ }
+
+ 50% {
+ opacity: 0;
+ transform: scale3d(.3, .3, .3)
+ }
+
+ to {
+ opacity: 0
+ }
+}
+
+@media(min-width:769px) {
+ .glightbox-container .ginner-container {
+ width: auto;
+ height: auto;
+ flex-direction: row
+ }
+
+ .glightbox-container .ginner-container.desc-top .gslide-description {
+ order: 0
+ }
+
+ .glightbox-container .ginner-container.desc-top .gslide-image,
+ .glightbox-container .ginner-container.desc-top .gslide-image img {
+ order: 1
+ }
+
+ .glightbox-container .ginner-container.desc-left .gslide-description {
+ order: 0
+ }
+
+ .glightbox-container .ginner-container.desc-left .gslide-image {
+ order: 1
+ }
+
+ .gslide-image img {
+ max-height: 97vh;
+ max-width: 100%
+ }
+
+ .gslide-image img.zoomable {
+ cursor: zoom-in
+ }
+
+ .zoomed .gslide-image img.zoomable {
+ cursor: grab
+ }
+
+ .gslide-inline {
+ max-height: 95vh
+ }
+
+ .gslide-external {
+ max-height: 100vh
+ }
+
+ .gslide-description.description-left,
+ .gslide-description.description-right {
+ max-width: 275px
+ }
+
+ .glightbox-open {
+ height: auto
+ }
+
+ .goverlay {
+ background: rgba(0, 0, 0, .92)
+ }
+
+ .glightbox-clean .gslide-media {
+ box-shadow: 1px 2px 9px 0 rgba(0, 0, 0, .65)
+ }
+
+ .glightbox-clean .description-left .gdesc-inner,
+ .glightbox-clean .description-right .gdesc-inner {
+ position: absolute;
+ height: 100%;
+ overflow-y: auto
+ }
+
+ .glightbox-clean .gclose,
+ .glightbox-clean .gnext,
+ .glightbox-clean .gprev {
+ background-color: rgba(0, 0, 0, .32)
+ }
+
+ .glightbox-clean .gclose:hover,
+ .glightbox-clean .gnext:hover,
+ .glightbox-clean .gprev:hover {
+ background-color: rgba(0, 0, 0, .7)
+ }
+
+ .glightbox-clean .gprev {
+ top: 45%
+ }
+
+ .glightbox-clean .gnext {
+ top: 45%
+ }
+}
+
+@media(min-width:992px) {
+ .glightbox-clean .gclose {
+ opacity: .7;
+ right: 20px
+ }
+}
+
+@media screen and (max-height:420px) {
+ .goverlay {
+ background: #000
+ }
+}
+
+/*!*****************************************************************************************************************!*\
+!*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./src/css/animate.css ***!
+\*****************************************************************************************************************/
+@charset "UTF-8";
+
+/*!* animate.css -https://daneden.github.io/animate.css/
+* Version - 3.7.2
+* Licensed under the MIT license - http://opensource.org/licenses/MIT
+*
+* Copyright (c) 2019 Daniel Eden*/
+@keyframes fadeIn {
+ from {
+ opacity: 0
+ }
+
+ to {
+ opacity: 1
+ }
+}
+
+.fadeIn {
+ animation-name: fadeIn
+}
+
+@keyframes fadeInDown {
+ from {
+ opacity: 0;
+ transform: translate3d(0, -20px, 0)
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0)
+ }
+}
+
+.fadeInDown {
+ animation-name: fadeInDown
+}
+
+@keyframes fadeInLeft {
+ from {
+ opacity: 0;
+ transform: translate3d(-20px, 0, 0)
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0)
+ }
+}
+
+.fadeInLeft {
+ animation-name: fadeInLeft
+}
+
+@keyframes fadeInRight {
+ from {
+ opacity: 0;
+ transform: translate3d(20px, 0, 0)
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0)
+ }
+}
+
+.fadeInRight {
+ animation-name: fadeInRight
+}
+
+@keyframes fadeInUp {
+ from {
+ opacity: 0;
+ transform: translate3d(0, 20px, 0)
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0)
+ }
+}
+
+.fadeInUp {
+ animation-name: fadeInUp
+}
+
+.animated {
+ animation-duration: 1s;
+ animation-fill-mode: both
+}
+
+.animated.infinite {
+ animation-iteration-count: infinite
+}
+
+.animated.delay-1s {
+ animation-delay: 1s
+}
+
+.animated.delay-2s {
+ animation-delay: 2s
+}
+
+.animated.delay-3s {
+ animation-delay: 3s
+}
+
+.animated.delay-4s {
+ animation-delay: 4s
+}
+
+.animated.delay-5s {
+ animation-delay: 5s
+}
+
+.animated.fast {
+ animation-duration: 800ms
+}
+
+.animated.faster {
+ animation-duration: 500ms
+}
+
+.animated.slow {
+ animation-duration: 2s
+}
+
+.animated.slower {
+ animation-duration: 3s
+}
+
+@media(print),
+(prefers-reduced-motion:reduce) {
+ .animated {
+ animation-duration: 1ms !important;
+ transition-duration: 1ms !important;
+ animation-iteration-count: 1 !important
+ }
+}
+
+/*!*******************************************************************************************************************!*\
+!*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./src/css/style.css (1) ***!
+\*******************************************************************************************************************/
+*,
+::before,
+::after {
+ box-sizing: border-box;
+ border-width: 0;
+ border-style: solid;
+ border-color: currentColor
+}
+
+::before,
+::after {
+ --tw-content: ''
+}
+
+html {
+ line-height: 1.5;
+ -webkit-text-size-adjust: 100%;
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, segoe ui, Roboto, helvetica neue, Arial, noto sans, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji
+}
+
+body {
+ margin: 0;
+ line-height: inherit
+}
+
+hr {
+ height: 0;
+ color: inherit;
+ border-top-width: 1px
+}
+
+abbr:where([title]) {
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-size: inherit;
+ font-weight: inherit
+}
+
+a {
+ color: inherit;
+ text-decoration: inherit
+}
+
+b,
+strong {
+ font-weight: bolder
+}
+
+code,
+kbd,
+samp,
+pre {
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, liberation mono, courier new, monospace;
+ font-size: 1em
+}
+
+small {
+ font-size: 80%
+}
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline
+}
+
+sub {
+ bottom: -.25em
+}
+
+sup {
+ top: -.5em
+}
+
+table {
+ text-indent: 0;
+ border-color: inherit;
+ border-collapse: collapse;
+ width: 100%;
+ color: #ffffffbe;
+ font-family: Arial, sans-serif;
+ font-size: 14px;
+ text-align: left;
+ border-radius: 10px;
+ border-bottom: 4px solid #1d214400;
+ overflow: hidden;
+ box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
+ margin: auto;
+ margin-top: 50px;
+ margin-bottom: 50px;
+}
+
+table th {
+ background-color: #313d46;
+ padding-left: 8px;
+ color: #ffffff;
+ font-weight: bold;
+ border-top: 1px solid #ffffff00;
+ border-bottom: 1px solid #1D2144;
+ border-width: 10%;
+ text-transform: uppercase;
+ padding: 10px;
+}
+
+
+table td {
+ background-color: #3b4857;
+ padding: 10px;
+ border-bottom: 1px solid #1D2144;
+ font-weight: bold;
+ width: 65%;
+ white-space: pre-wrap;
+ word-break: break-word;
+ overflow-wrap: break-word;
+}
+
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit;
+ font-size: 100%;
+ font-weight: inherit;
+ line-height: inherit;
+ color: inherit;
+ margin: 0;
+ padding: 0
+}
+
+button,
+select {
+ text-transform: none
+}
+
+button,
+[type=button],
+[type=reset],
+[type=submit] {
+ -webkit-appearance: button;
+ background-color: transparent;
+ background-image: none
+}
+
+:-moz-focusring {
+ outline: auto
+}
+
+:-moz-ui-invalid {
+ box-shadow: none
+}
+
+progress {
+ vertical-align: baseline
+}
+
+::-webkit-inner-spin-button,
+::-webkit-outer-spin-button {
+ height: auto
+}
+
+[type=search] {
+ -webkit-appearance: textfield;
+ outline-offset: -2px
+}
+
+::-webkit-search-decoration {
+ -webkit-appearance: none
+}
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ font: inherit
+}
+
+summary {
+ display: list-item
+}
+
+blockquote,
+dl,
+dd,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+hr,
+figure,
+p,
+pre {
+ margin: 0
+}
+
+fieldset {
+ margin: 0;
+ padding: 0
+}
+
+legend {
+ padding: 0
+}
+
+ol,
+ul,
+menu {
+ list-style: none;
+ margin: 0;
+ padding: 0
+}
+
+textarea {
+ resize: vertical
+}
+
+input::-moz-placeholder,
+textarea::-moz-placeholder {
+ opacity: 1;
+ color: #9ca3af
+}
+
+input:-ms-input-placeholder,
+textarea:-ms-input-placeholder {
+ opacity: 1;
+ color: #9ca3af
+}
+
+input::placeholder,
+textarea::placeholder {
+ opacity: 1;
+ color: #9ca3af
+}
+
+button,
+[role=button] {
+ cursor: pointer
+}
+
+:disabled {
+ cursor: default
+}
+
+img,
+svg,
+video,
+canvas,
+audio,
+iframe,
+embed,
+object {
+ display: block;
+ vertical-align: middle
+}
+
+img,
+video {
+ max-width: 100%;
+ height: auto
+}
+
+body {
+ font-family: inter, sans-serif
+}
+
+*,
+::before,
+::after {
+ --tw-border-spacing-x: 0;
+ --tw-border-spacing-y: 0;
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ --tw-pan-x: ;
+ --tw-pan-y: ;
+ --tw-pinch-zoom: ;
+ --tw-scroll-snap-strictness: proximity;
+ --tw-ordinal: ;
+ --tw-slashed-zero: ;
+ --tw-numeric-figure: ;
+ --tw-numeric-spacing: ;
+ --tw-numeric-fraction: ;
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: rgb(59 130 246 / 0.5);
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ --tw-blur: ;
+ --tw-brightness: ;
+ --tw-contrast: ;
+ --tw-grayscale: ;
+ --tw-hue-rotate: ;
+ --tw-invert: ;
+ --tw-saturate: ;
+ --tw-sepia: ;
+ --tw-drop-shadow: ;
+ --tw-backdrop-blur: ;
+ --tw-backdrop-brightness: ;
+ --tw-backdrop-contrast: ;
+ --tw-backdrop-grayscale: ;
+ --tw-backdrop-hue-rotate: ;
+ --tw-backdrop-invert: ;
+ --tw-backdrop-opacity: ;
+ --tw-backdrop-saturate: ;
+ --tw-backdrop-sepia:
+}
+
+::backdrop {
+ --tw-border-spacing-x: 0;
+ --tw-border-spacing-y: 0;
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ --tw-pan-x: ;
+ --tw-pan-y: ;
+ --tw-pinch-zoom: ;
+ --tw-scroll-snap-strictness: proximity;
+ --tw-ordinal: ;
+ --tw-slashed-zero: ;
+ --tw-numeric-figure: ;
+ --tw-numeric-spacing: ;
+ --tw-numeric-fraction: ;
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: rgb(59 130 246 / 0.5);
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ --tw-blur: ;
+ --tw-brightness: ;
+ --tw-contrast: ;
+ --tw-grayscale: ;
+ --tw-hue-rotate: ;
+ --tw-invert: ;
+ --tw-saturate: ;
+ --tw-sepia: ;
+ --tw-drop-shadow: ;
+ --tw-backdrop-blur: ;
+ --tw-backdrop-brightness: ;
+ --tw-backdrop-contrast: ;
+ --tw-backdrop-grayscale: ;
+ --tw-backdrop-hue-rotate: ;
+ --tw-backdrop-invert: ;
+ --tw-backdrop-opacity: ;
+ --tw-backdrop-saturate: ;
+ --tw-backdrop-sepia:
+}
+
+.container {
+ width: 100%;
+ margin-right: auto;
+ margin-left: auto;
+ padding-right: 1rem;
+ padding-left: 1rem
+}
+
+@media(min-width:540px) {
+ .container {
+ max-width: 540px
+ }
+}
+
+@media(min-width:720px) {
+ .container {
+ max-width: 720px
+ }
+}
+
+@media(min-width:960px) {
+ .container {
+ max-width: 960px
+ }
+}
+
+@media(min-width:1140px) {
+ .container {
+ max-width: 1140px
+ }
+}
+
+@media(min-width:1320px) {
+ .container {
+ max-width: 1320px
+ }
+}
+
+input[type=checkbox]:checked~label span svg {
+ display: inline-flex
+}
+
+.sticky {
+ position: fixed !important;
+ z-index: 9999 !important;
+ background-color: rgb(255 255 255/var(--tw-bg-opacity)) !important;
+ --tw-bg-opacity: 0.8 !important;
+ transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter !important;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter !important;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter !important;
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1) !important;
+ transition-duration: 150ms !important
+}
+
+.dark .sticky {
+ background-color: rgb(74 108 247/var(--tw-bg-opacity)) !important;
+ --tw-bg-opacity: 0.2 !important
+}
+
+.sticky {
+ -webkit-backdrop-filter: blur(5px);
+ backdrop-filter: blur(5px);
+ box-shadow: inset 0 -1px 0 0 rgba(0, 0, 0, .1)
+}
+
+.sticky .header-logo {
+ padding-top: 1.25rem;
+ padding-bottom: 1.25rem
+}
+
+@media(min-width:960px) {
+ .sticky .header-logo {
+ padding-top: .5rem;
+ padding-bottom: .5rem
+ }
+}
+
+.sticky .menu-scroll.active {
+ opacity: .7
+}
+
+.navbarTogglerActive>span:nth-child(1) {
+ top: 7px;
+ --tw-rotate: 45deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
+}
+
+.navbarTogglerActive>span:nth-child(2) {
+ opacity: 0
+}
+
+.navbarTogglerActive>span:nth-child(3) {
+ top: -8px;
+ --tw-rotate: 135deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
+}
+
+input#togglePlan:checked~.dot {
+ --tw-translate-x: 100%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
+}
+
+input#checkboxLabel:checked~.box span {
+ opacity: 1
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border-width: 0
+}
+
+.fixed {
+ position: fixed
+}
+
+.absolute {
+ position: absolute
+}
+
+.relative {
+ position: relative
+}
+
+.sticky {
+ position: sticky
+}
+
+.top-0 {
+ top: 0
+}
+
+.left-0 {
+ left: 0
+}
+
+.right-4 {
+ right: 1rem
+}
+
+.top-1\/2 {
+ top: 50%
+}
+
+.top-full {
+ top: 100%
+}
+
+.bottom-0 {
+ bottom: 0
+}
+
+.right-0 {
+ right: 0
+}
+
+.top-14 {
+ top: 3.5rem
+}
+
+.bottom-24 {
+ bottom: 6rem
+}
+
+.bottom-8 {
+ bottom: 2rem
+}
+
+.right-8 {
+ right: 2rem
+}
+
+.left-auto {
+ left: auto
+}
+
+.top-6 {
+ top: 1.5rem
+}
+
+.right-6 {
+ right: 1.5rem
+}
+
+.top-5 {
+ top: 1.25rem
+}
+
+.bottom-5 {
+ bottom: 1.25rem
+}
+
+.top-\[-4px\] {
+ top: -4px
+}
+
+.z-40 {
+ z-index: 40
+}
+
+.z-10 {
+ z-index: 10
+}
+
+.z-\[-1\] {
+ z-index: -1
+}
+
+.z-\[999\] {
+ z-index: 999
+}
+
+.m-0 {
+ margin: 0
+}
+
+.mx-\[-16px\] {
+ margin-left: -16px;
+ margin-right: -16px
+}
+
+.my-\[6px\] {
+ margin-top: 6px;
+ margin-bottom: 6px
+}
+
+.mx-8 {
+ margin-left: 2rem;
+ margin-right: 2rem
+}
+
+.mx-auto {
+ margin-left: auto;
+ margin-right: auto
+}
+
+.-mx-3 {
+ margin-left: -.75rem;
+ margin-right: -.75rem
+}
+
+.mx-1 {
+ margin-left: .25rem;
+ margin-right: .25rem
+}
+
+.mx-2 {
+ margin-left: .5rem;
+ margin-right: .5rem
+}
+
+.mx-3 {
+ margin-left: .75rem;
+ margin-right: .75rem
+}
+
+.mx-\[-12px\] {
+ margin-left: -12px;
+ margin-right: -12px
+}
+
+.mb-9 {
+ margin-bottom: 2.25rem
+}
+
+.mb-4 {
+ margin-bottom: 1rem
+}
+
+.mb-10 {
+ margin-bottom: 2.5rem
+}
+
+.mb-16 {
+ margin-bottom: 4rem
+}
+
+.mb-8 {
+ margin-bottom: 2rem
+}
+
+.mr-6 {
+ margin-right: 1.5rem
+}
+
+.mt-\[6px\] {
+ margin-top: 6px
+}
+
+.mb-12 {
+ margin-bottom: 3rem
+}
+
+.mb-5 {
+ margin-bottom: 1.25rem
+}
+
+.mr-3 {
+ margin-right: .75rem
+}
+
+.mb-6 {
+ margin-bottom: 1.5rem
+}
+
+.mb-11 {
+ margin-bottom: 2.75rem
+}
+
+.mr-4 {
+ margin-right: 1rem
+}
+
+.mb-1 {
+ margin-bottom: .25rem
+}
+
+.mr-10 {
+ margin-right: 2.5rem
+}
+
+.mr-5 {
+ margin-right: 1.25rem
+}
+
+.mb-2 {
+ margin-bottom: .5rem
+}
+
+.mb-3 {
+ margin-bottom: .75rem
+}
+
+.ml-3 {
+ margin-left: .75rem
+}
+
+.mt-12 {
+ margin-top: 3rem
+}
+
+.mb-\[6px\] {
+ margin-bottom: 6px
+}
+
+.mb-\[100px\] {
+ margin-bottom: 100px
+}
+
+.mb-\[70px\] {
+ margin-bottom: 70px
+}
+
+.mb-20 {
+ margin-bottom: 5rem
+}
+
+.mr-1 {
+ margin-right: .25rem
+}
+
+.ml-4 {
+ margin-left: 1rem
+}
+
+.mb-7 {
+ margin-bottom: 1.75rem
+}
+
+.mt-1 {
+ margin-top: .25rem
+}
+
+.block {
+ display: block
+}
+
+.inline-block {
+ display: inline-block
+}
+
+.flex {
+ display: flex
+}
+
+.inline-flex {
+ display: inline-flex
+}
+
+.hidden {
+ display: none
+}
+
+.h-\[2px\] {
+ height: 2px
+}
+
+.h-9 {
+ height: 2.25rem
+}
+
+.h-5 {
+ height: 1.25rem
+}
+
+.h-10 {
+ height: 2.5rem
+}
+
+.h-3 {
+ height: .75rem
+}
+
+.h-2 {
+ height: .5rem
+}
+
+.h-\[30px\] {
+ height: 30px
+}
+
+.h-\[40px\] {
+ height: 40px
+}
+
+.h-full {
+ height: 100%
+}
+
+.h-\[50px\] {
+ height: 50px
+}
+
+.h-\[75px\] {
+ height: 75px
+}
+
+.h-\[70px\] {
+ height: 70px
+}
+
+.h-7 {
+ height: 1.75rem
+}
+
+.h-4 {
+ height: 1rem
+}
+
+.h-\[18px\] {
+ height: 18px
+}
+
+.h-\[1px\] {
+ height: 1px
+}
+
+.w-full {
+ width: 100%
+}
+
+.w-60 {
+ width: 15rem
+}
+
+.w-\[30px\] {
+ width: 30px
+}
+
+.w-\[250px\] {
+ width: 250px
+}
+
+.w-9 {
+ width: 2.25rem
+}
+
+.w-5 {
+ width: 1.25rem
+}
+
+.w-10 {
+ width: 2.5rem
+}
+
+.w-3 {
+ width: .75rem
+}
+
+.w-2 {
+ width: .5rem
+}
+
+.w-\[70px\] {
+ width: 70px
+}
+
+.w-14 {
+ width: 3.5rem
+}
+
+.w-7 {
+ width: 1.75rem
+}
+
+.w-4 {
+ width: 1rem
+}
+
+.min-w-\[36px\] {
+ min-width: 36px
+}
+
+.max-w-full {
+ max-width: 100%
+}
+
+.max-w-\[250px\] {
+ max-width: 250px
+}
+
+.max-w-\[530px\] {
+ max-width: 530px
+}
+
+.max-w-\[360px\] {
+ max-width: 360px
+}
+
+.max-w-\[570px\] {
+ max-width: 570px
+}
+
+.max-w-\[470px\] {
+ max-width: 470px
+}
+
+.max-w-\[40px\] {
+ max-width: 40px
+}
+
+.max-w-\[50px\] {
+ max-width: 50px
+}
+
+.max-w-\[85px\] {
+ max-width: 85px
+}
+
+.max-w-\[770px\] {
+ max-width: 770px
+}
+
+.max-w-\[655px\] {
+ max-width: 655px
+}
+
+.max-w-\[18px\] {
+ max-width: 18px
+}
+
+.max-w-\[500px\] {
+ max-width: 500px
+}
+
+.max-w-\[70px\] {
+ max-width: 70px
+}
+
+.max-w-\[60px\] {
+ max-width: 60px
+}
+
+.translate-y-\[-50\%\] {
+ --tw-translate-y: -50%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
+}
+
+.rotate-45 {
+ --tw-rotate: 45deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
+}
+
+.rotate-180 {
+ --tw-rotate: 180deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
+}
+
+.transform {
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
+}
+
+.cursor-pointer {
+ cursor: pointer
+}
+
+.cursor-not-allowed {
+ cursor: not-allowed
+}
+
+.select-none {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none
+}
+
+.resize-none {
+ resize: none
+}
+
+.list-inside {
+ list-style-position: inside
+}
+
+.list-disc {
+ list-style-type: disc
+}
+
+.flex-wrap {
+ flex-wrap: wrap
+}
+
+.items-center {
+ align-items: center
+}
+
+.justify-end {
+ justify-content: flex-end
+}
+
+.justify-center {
+ justify-content: center
+}
+
+.justify-between {
+ justify-content: space-between
+}
+
+.overflow-hidden {
+ overflow: hidden
+}
+
+.rounded-lg {
+ border-radius: .5rem
+}
+
+.rounded-md {
+ border-radius: .375rem
+}
+
+.rounded {
+ border-radius: .25rem
+}
+
+.rounded-full {
+ border-radius: 9999px
+}
+
+.border {
+ border-width: 1px
+}
+
+.border-t {
+ border-top-width: 1px
+}
+
+.border-l {
+ border-left-width: 1px
+}
+
+.border-t-2 {
+ border-top-width: 2px
+}
+
+.border-r-2 {
+ border-right-width: 2px
+}
+
+.border-b {
+ border-bottom-width: 1px
+}
+
+.border-r {
+ border-right-width: 1px
+}
+
+.border-white {
+ --tw-border-opacity: 1;
+ border-color: rgb(255 255 255/var(--tw-border-opacity))
+}
+
+.border-body-color {
+ --tw-border-opacity: 1;
+ border-color: rgb(149 156 177/var(--tw-border-opacity))
+}
+
+.border-transparent {
+ border-color: transparent
+}
+
+.border-primary {
+ --tw-border-opacity: 1;
+ border-color: rgb(74 108 247/var(--tw-border-opacity))
+}
+
+.border-opacity-\[\.15\] {
+ --tw-border-opacity: .15
+}
+
+.border-opacity-10 {
+ --tw-border-opacity: 0.1
+}
+
+.border-opacity-25 {
+ --tw-border-opacity: 0.25
+}
+
+.border-opacity-20 {
+ --tw-border-opacity: 0.2
+}
+
+.bg-transparent {
+ background-color: transparent
+}
+
+.bg-dark {
+ --tw-bg-opacity: 1;
+ background-color: rgb(29 33 68/var(--tw-bg-opacity))
+}
+
+.bg-white {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255/var(--tw-bg-opacity))
+}
+
+.bg-primary {
+ --tw-bg-opacity: 1;
+ background-color: rgb(74 108 247/var(--tw-bg-opacity))
+}
+
+.bg-body-color {
+ --tw-bg-opacity: 1;
+ background-color: rgb(149 156 177/var(--tw-bg-opacity))
+}
+
+.bg-black {
+ --tw-bg-opacity: 1;
+ background-color: rgb(9 14 52/var(--tw-bg-opacity))
+}
+
+.bg-\[\#1D2144\] {
+ --tw-bg-opacity: 1;
+ background-color: rgb(29 33 68/var(--tw-bg-opacity))
+}
+
+.bg-opacity-5 {
+ --tw-bg-opacity: 0.05
+}
+
+.bg-opacity-10 {
+ --tw-bg-opacity: 0.1
+}
+
+.bg-opacity-\[15\%\] {
+ --tw-bg-opacity: 15%
+}
+
+.bg-opacity-\[3\%\] {
+ --tw-bg-opacity: 3%
+}
+
+.bg-opacity-75 {
+ --tw-bg-opacity: 0.75
+}
+
+.fill-current {
+ fill: currentColor
+}
+
+.stroke-current {
+ stroke: currentColor
+}
+
+.object-cover {
+ -o-object-fit: cover;
+ object-fit: cover
+}
+
+.object-center {
+ -o-object-position: center;
+ object-position: center
+}
+
+.p-4 {
+ padding: 1rem
+}
+
+.p-8 {
+ padding: 2rem
+}
+
+.p-6 {
+ padding: 1.5rem
+}
+
+.p-11 {
+ padding: 2.75rem
+}
+
+.p-3 {
+ padding: .75rem
+}
+
+.p-12 {
+ padding: 3rem
+}
+
+.px-4 {
+ padding-left: 1rem;
+ padding-right: 1rem
+}
+
+.py-8 {
+ padding-top: 2rem;
+ padding-bottom: 2rem
+}
+
+.px-3 {
+ padding-left: .75rem;
+ padding-right: .75rem
+}
+
+.py-\[6px\] {
+ padding-top: 6px;
+ padding-bottom: 6px
+}
+
+.py-5 {
+ padding-top: 1.25rem;
+ padding-bottom: 1.25rem
+}
+
+.py-2 {
+ padding-top: .5rem;
+ padding-bottom: .5rem
+}
+
+.py-\[10px\] {
+ padding-top: 10px;
+ padding-bottom: 10px
+}
+
+.py-3 {
+ padding-top: .75rem;
+ padding-bottom: .75rem
+}
+
+.px-7 {
+ padding-left: 1.75rem;
+ padding-right: 1.75rem
+}
+
+.px-8 {
+ padding-left: 2rem;
+ padding-right: 2rem
+}
+
+.px-5 {
+ padding-left: 1.25rem;
+ padding-right: 1.25rem
+}
+
+.py-4 {
+ padding-top: 1rem;
+ padding-bottom: 1rem
+}
+
+.py-6 {
+ padding-top: 1.5rem;
+ padding-bottom: 1.5rem
+}
+
+.px-6 {
+ padding-left: 1.5rem;
+ padding-right: 1.5rem
+}
+
+.px-9 {
+ padding-left: 2.25rem;
+ padding-right: 2.25rem
+}
+
+.py-\[120px\] {
+ padding-top: 120px;
+ padding-bottom: 120px
+}
+
+.py-\[15px\] {
+ padding-top: 15px;
+ padding-bottom: 15px
+}
+
+.py-10 {
+ padding-top: 2.5rem;
+ padding-bottom: 2.5rem
+}
+
+.pr-16 {
+ padding-right: 4rem
+}
+
+.pt-\[180px\] {
+ padding-top: 180px
+}
+
+.pb-\[120px\] {
+ padding-bottom: 120px
+}
+
+.pt-\[100px\] {
+ padding-top: 100px
+}
+
+.pt-\[150px\] {
+ padding-top: 150px
+}
+
+.pr-1 {
+ padding-right: .25rem
+}
+
+.pt-\[120px\] {
+ padding-top: 120px
+}
+
+.pb-\[100px\] {
+ padding-bottom: 100px
+}
+
+.pb-4 {
+ padding-bottom: 1rem
+}
+
+.pb-6 {
+ padding-bottom: 1.5rem
+}
+
+.pr-5 {
+ padding-right: 1.25rem
+}
+
+.pt-8 {
+ padding-top: 2rem
+}
+
+.pb-11 {
+ padding-bottom: 2.75rem
+}
+
+.pb-20 {
+ padding-bottom: 5rem
+}
+
+.pb-\[110px\] {
+ padding-bottom: 110px
+}
+
+.pb-\[50px\] {
+ padding-bottom: 50px
+}
+
+.pr-\[10px\] {
+ padding-right: 10px
+}
+
+.pt-16 {
+ padding-top: 4rem
+}
+
+.pb-8 {
+ padding-bottom: 2rem
+}
+
+.text-center {
+ text-align: center
+}
+
+.text-alert{
+ color: #ff0000;
+ background-color: #fd00001c;
+}
+
+.text-info{
+ color: #148f33;
+ background-color: #14eb0027;
+}
+
+.bienvenu-msg{
+ padding: 20px;
+ width: 40%;
+ margin-bottom: 60px;
+ font-weight: bold;
+ font-size:larger;
+ min-width: 160px;
+}
+
+.mt-6{
+ margin-top: 30px;
+}
+
+.text-end {
+ text-align: end
+}
+
+.text-base {
+ font-size: 1rem;
+ line-height: 1.5rem
+}
+
+.text-sm {
+ font-size: .875rem;
+ line-height: 1.25rem
+}
+
+.text-3xl {
+ font-size: 1.875rem;
+ line-height: 2.25rem
+}
+
+.text-xl {
+ font-size: 1.25rem;
+ line-height: 1.75rem
+}
+
+.text-2xl {
+ font-size: 1.5rem;
+ line-height: 2rem
+}
+
+.text-lg {
+ font-size: 1.125rem;
+ line-height: 1.75rem
+}
+
+.text-xs {
+ font-size: .75rem;
+ line-height: 1rem
+}
+
+.font-bold {
+ font-weight: 700
+}
+
+.font-medium {
+ font-weight: 500
+}
+
+.font-semibold {
+ font-weight: 600
+}
+
+.italic {
+ font-style: italic
+}
+
+.leading-relaxed {
+ line-height: 1.625
+}
+
+.leading-tight {
+ line-height: 1.25
+}
+
+.leading-snug {
+ line-height: 1.375
+}
+
+.text-dark {
+ --tw-text-opacity: 1;
+ color: rgb(29 33 68/var(--tw-text-opacity))
+}
+
+.text-white {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255/var(--tw-text-opacity))
+}
+
+.text-black {
+ --tw-text-opacity: 1;
+ color: rgb(9 14 52/var(--tw-text-opacity))
+}
+
+.text-body-color {
+ --tw-text-opacity: 1;
+ color: rgb(149 156 177/var(--tw-text-opacity))
+}
+
+.text-\[\#CED3F6\] {
+ --tw-text-opacity: 1;
+ color: rgb(206 211 246/var(--tw-text-opacity))
+}
+
+.text-primary {
+ --tw-text-opacity: 1;
+ color: rgb(74 108 247/var(--tw-text-opacity))
+}
+
+.text-yellow {
+ --tw-text-opacity: 1;
+ color: rgb(251 176 64/var(--tw-text-opacity))
+}
+
+.underline {
+ -webkit-text-decoration-line: underline;
+ text-decoration-line: underline
+}
+
+.placeholder-body-color::-moz-placeholder {
+ --tw-placeholder-opacity: 1;
+ color: rgb(149 156 177/var(--tw-placeholder-opacity))
+}
+
+.placeholder-body-color:-ms-input-placeholder {
+ --tw-placeholder-opacity: 1;
+ color: rgb(149 156 177/var(--tw-placeholder-opacity))
+}
+
+.placeholder-body-color::placeholder {
+ --tw-placeholder-opacity: 1;
+ color: rgb(149 156 177/var(--tw-placeholder-opacity))
+}
+
+.opacity-70 {
+ opacity: .7
+}
+
+.opacity-0 {
+ opacity: 0
+}
+
+.shadow-lg {
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
+}
+
+.shadow-signUp {
+ --tw-shadow: 0px 5px 10px rgba(4, 10, 34, 0.2);
+ --tw-shadow-colored: 0px 5px 10px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
+}
+
+.shadow-md {
+ --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
+}
+
+.shadow-one {
+ --tw-shadow: 0px 2px 3px rgba(7, 7, 77, 0.05);
+ --tw-shadow-colored: 0px 2px 3px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
+}
+
+.shadow-inner {
+ --tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
+ --tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
+}
+
+.outline-none {
+ outline: 2px solid transparent;
+ outline-offset: 2px
+}
+
+.ring-primary {
+ --tw-ring-opacity: 1;
+ --tw-ring-color: rgb(74 108 247 / var(--tw-ring-opacity))
+}
+
+.grayscale {
+ --tw-grayscale: grayscale(100%);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)
+}
+
+.filter {
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)
+}
+
+.transition-\[top\] {
+ transition-property: top;
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1);
+ transition-duration: 150ms
+}
+
+.transition {
+ transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter;
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1);
+ transition-duration: 150ms
+}
+
+.duration-300 {
+ transition-duration: 300ms
+}
+
+.ease-in-out {
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1)
+}
+
+.after\:absolute::after {
+ content: var(--tw-content);
+ position: absolute
+}
+
+.after\:right-1::after {
+ content: var(--tw-content);
+ right: .25rem
+}
+
+.after\:top-1\/2::after {
+ content: var(--tw-content);
+ top: 50%
+}
+
+.after\:mt-\[-2px\]::after {
+ content: var(--tw-content);
+ margin-top: -2px
+}
+
+.after\:h-2::after {
+ content: var(--tw-content);
+ height: .5rem
+}
+
+.after\:w-2::after {
+ content: var(--tw-content);
+ width: .5rem
+}
+
+.after\:translate-y-\[-50\%\]::after {
+ content: var(--tw-content);
+ --tw-translate-y: -50%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
+}
+
+.after\:rotate-45::after {
+ content: var(--tw-content);
+ --tw-rotate: 45deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
+}
+
+.after\:border-b-2::after {
+ content: var(--tw-content);
+ border-bottom-width: 2px
+}
+
+.after\:border-r-2::after {
+ content: var(--tw-content);
+ border-right-width: 2px
+}
+
+.after\:border-current::after {
+ content: var(--tw-content);
+ border-color: currentColor
+}
+
+.hover\:bg-white:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255/var(--tw-bg-opacity))
+}
+
+.hover\:bg-primary:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(74 108 247/var(--tw-bg-opacity))
+}
+
+.hover\:bg-opacity-90:hover {
+ --tw-bg-opacity: 0.9
+}
+
+.hover\:bg-opacity-80:hover {
+ --tw-bg-opacity: 0.8
+}
+
+.hover\:bg-opacity-100:hover {
+ --tw-bg-opacity: 1
+}
+
+.hover\:bg-opacity-20:hover {
+ --tw-bg-opacity: 0.2
+}
+
+.hover\:text-primary:hover {
+ --tw-text-opacity: 1;
+ color: rgb(74 108 247/var(--tw-text-opacity))
+}
+
+.hover\:text-white:hover {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255/var(--tw-text-opacity))
+}
+
+.hover\:underline:hover {
+ -webkit-text-decoration-line: underline;
+ text-decoration-line: underline
+}
+
+.hover\:opacity-70:hover {
+ opacity: .7
+}
+
+.hover\:opacity-100:hover {
+ opacity: 1
+}
+
+.hover\:shadow-signUp:hover {
+ --tw-shadow: 0px 5px 10px rgba(4, 10, 34, 0.2);
+ --tw-shadow-colored: 0px 5px 10px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
+}
+
+.hover\:grayscale-0:hover {
+ --tw-grayscale: grayscale(0);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)
+}
+
+.focus\:border-primary:focus {
+ --tw-border-opacity: 1;
+ border-color: rgb(74 108 247/var(--tw-border-opacity))
+}
+
+.focus\:border-opacity-100:focus {
+ --tw-border-opacity: 1
+}
+
+.focus\:ring-2:focus {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000)
+}
+
+.focus-visible\:shadow-none:focus-visible {
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
+}
+
+.group:hover .group-hover\:opacity-70 {
+ opacity: .7
+}
+
+.group:hover .group-hover\:opacity-100 {
+ opacity: 1
+}
+
+.dark .dark\:block {
+ display: block
+}
+
+.dark .dark\:hidden {
+ display: none
+}
+
+.dark .dark\:border-white {
+ --tw-border-opacity: 1;
+ border-color: rgb(255 255 255/var(--tw-border-opacity))
+}
+
+.dark .dark\:border-opacity-10 {
+ --tw-border-opacity: 0.1
+}
+
+.dark .dark\:border-opacity-25 {
+ --tw-border-opacity: 0.25
+}
+
+.dark .dark\:bg-black {
+ --tw-bg-opacity: 1;
+ background-color: rgb(9 14 52/var(--tw-bg-opacity))
+}
+
+.dark .dark\:bg-white {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255/var(--tw-bg-opacity))
+}
+
+.dark .dark\:bg-dark {
+ --tw-bg-opacity: 1;
+ background-color: rgb(29 33 68/var(--tw-bg-opacity))
+}
+
+.dark .dark\:bg-\[\#242B51\] {
+ --tw-bg-opacity: 1;
+ background-color: rgb(36 43 81/var(--tw-bg-opacity))
+}
+
+.dark .dark\:bg-primary {
+ --tw-bg-opacity: 1;
+ background-color: rgb(74 108 247/var(--tw-bg-opacity))
+}
+
+.dark .dark\:bg-\[\#1D2144\] {
+ --tw-bg-opacity: 1;
+ background-color: rgb(29 33 68/var(--tw-bg-opacity))
+}
+
+.dark .dark\:bg-opacity-5 {
+ --tw-bg-opacity: 0.05
+}
+
+.dark .dark\:bg-opacity-10 {
+ --tw-bg-opacity: 0.1
+}
+
+.dark .dark\:text-white {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255/var(--tw-text-opacity))
+}
+
+.dark .dark\:text-body-color {
+ --tw-text-opacity: 1;
+ color: rgb(149 156 177/var(--tw-text-opacity))
+}
+
+.dark .dark\:opacity-90 {
+ opacity: .9
+}
+
+.dark .dark\:opacity-60 {
+ opacity: .6
+}
+
+.dark .dark\:shadow-signUp {
+ --tw-shadow: 0px 5px 10px rgba(4, 10, 34, 0.2);
+ --tw-shadow-colored: 0px 5px 10px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
+}
+
+.dark .dark\:hover\:bg-opacity-20:hover {
+ --tw-bg-opacity: 0.2
+}
+
+.dark .dark\:hover\:text-primary:hover {
+ --tw-text-opacity: 1;
+ color: rgb(74 108 247/var(--tw-text-opacity))
+}
+
+.dark .dark\:hover\:text-white:hover {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255/var(--tw-text-opacity))
+}
+
+.dark .dark\:hover\:opacity-100:hover {
+ opacity: 1
+}
+
+@media(min-width:540px) {
+ .sm\:mx-4 {
+ margin-left: 1rem;
+ margin-right: 1rem
+ }
+
+ .sm\:ml-3 {
+ margin-left: .75rem
+ }
+
+ .sm\:block {
+ display: block
+ }
+
+ .sm\:flex {
+ display: flex
+ }
+
+ .sm\:w-1\/2 {
+ width: 50%
+ }
+
+ .sm\:justify-end {
+ justify-content: flex-end
+ }
+
+ .sm\:p-8 {
+ padding: 2rem
+ }
+
+ .sm\:p-11 {
+ padding: 2.75rem
+ }
+
+ .sm\:p-\[55px\] {
+ padding: 55px
+ }
+
+ .sm\:p-\[60px\] {
+ padding: 60px
+ }
+
+ .sm\:px-10 {
+ padding-left: 2.5rem;
+ padding-right: 2.5rem
+ }
+
+ .sm\:text-right {
+ text-align: right
+ }
+
+ .sm\:text-4xl {
+ font-size: 2.25rem;
+ line-height: 2.5rem
+ }
+
+ .sm\:text-lg {
+ font-size: 1.125rem;
+ line-height: 1.75rem
+ }
+
+ .sm\:text-3xl {
+ font-size: 1.875rem;
+ line-height: 2.25rem
+ }
+
+ .sm\:text-2xl {
+ font-size: 1.5rem;
+ line-height: 2rem
+ }
+
+ .sm\:leading-relaxed {
+ line-height: 1.625
+ }
+
+ .sm\:leading-tight {
+ line-height: 1.25
+ }
+}
+
+@media(min-width:720px) {
+ .md\:mb-0 {
+ margin-bottom: 0
+ }
+
+ .md\:block {
+ display: block
+ }
+
+ .md\:h-14 {
+ height: 3.5rem
+ }
+
+ .md\:h-6 {
+ height: 1.5rem
+ }
+
+ .md\:w-14 {
+ width: 3.5rem
+ }
+
+ .md\:w-6 {
+ width: 1.5rem
+ }
+
+ .md\:w-1\/2 {
+ width: 50%
+ }
+
+ .md\:w-8\/12 {
+ width: 66.666667%
+ }
+
+ .md\:w-4\/12 {
+ width: 33.333333%
+ }
+
+ .md\:w-2\/3 {
+ width: 66.666667%
+ }
+
+ .md\:justify-end {
+ justify-content: flex-end
+ }
+
+ .md\:p-9 {
+ padding: 2.25rem
+ }
+
+ .md\:px-9 {
+ padding-left: 2.25rem;
+ padding-right: 2.25rem
+ }
+
+ .md\:py-8 {
+ padding-top: 2rem;
+ padding-bottom: 2rem
+ }
+
+ .md\:px-6 {
+ padding-left: 1.5rem;
+ padding-right: 1.5rem
+ }
+
+ .md\:py-\[40px\] {
+ padding-top: 40px;
+ padding-bottom: 40px
+ }
+
+ .md\:px-\[50px\] {
+ padding-left: 50px;
+ padding-right: 50px
+ }
+
+ .md\:pt-\[150px\] {
+ padding-top: 150px
+ }
+
+ .md\:pb-\[120px\] {
+ padding-bottom: 120px
+ }
+
+ .md\:text-\[45px\] {
+ font-size: 45px
+ }
+
+ .md\:text-5xl {
+ font-size: 3rem;
+ line-height: 1
+ }
+
+ .md\:text-xl {
+ font-size: 1.25rem;
+ line-height: 1.75rem
+ }
+
+ .md\:text-lg {
+ font-size: 1.125rem;
+ line-height: 1.75rem
+ }
+
+ .md\:leading-tight {
+ line-height: 1.25
+ }
+
+ .md\:leading-relaxed {
+ line-height: 1.625
+ }
+}
+
+@media(min-width:960px) {
+ .lg\:invisible {
+ visibility: hidden
+ }
+
+ .lg\:static {
+ position: static
+ }
+
+ .lg\:absolute {
+ position: absolute
+ }
+
+ .lg\:top-\[110\%\] {
+ top: 110%
+ }
+
+ .lg\:mr-0 {
+ margin-right: 0
+ }
+
+ .lg\:ml-8 {
+ margin-left: 2rem
+ }
+
+ .lg\:mb-0 {
+ margin-bottom: 0
+ }
+
+ .lg\:ml-0 {
+ margin-left: 0
+ }
+
+ .lg\:mt-0 {
+ margin-top: 0
+ }
+
+ .lg\:mb-3 {
+ margin-bottom: .75rem
+ }
+
+ .lg\:mb-5 {
+ margin-bottom: 1.25rem
+ }
+
+ .lg\:block {
+ display: block
+ }
+
+ .lg\:flex {
+ display: flex
+ }
+
+ .lg\:inline-flex {
+ display: inline-flex
+ }
+
+ .lg\:hidden {
+ display: none
+ }
+
+ .lg\:w-full {
+ width: 100%
+ }
+
+ .lg\:w-4\/12 {
+ width: 33.333333%
+ }
+
+ .lg\:w-2\/12 {
+ width: 16.666667%
+ }
+
+ .lg\:w-7\/12 {
+ width: 58.333333%
+ }
+
+ .lg\:w-5\/12 {
+ width: 41.666667%
+ }
+
+ .lg\:w-1\/2 {
+ width: 50%
+ }
+
+ .lg\:w-8\/12 {
+ width: 66.666667%
+ }
+
+ .lg\:w-1\/3 {
+ width: 33.333333%
+ }
+
+ .lg\:max-w-full {
+ max-width: 100%
+ }
+
+ .lg\:max-w-\[130px\] {
+ max-width: 130px
+ }
+
+ .lg\:bg-transparent {
+ background-color: transparent
+ }
+
+ .lg\:p-8 {
+ padding: 2rem
+ }
+
+ .lg\:p-11 {
+ padding: 2.75rem
+ }
+
+ .lg\:py-0 {
+ padding-top: 0;
+ padding-bottom: 0
+ }
+
+ .lg\:px-4 {
+ padding-left: 1rem;
+ padding-right: 1rem
+ }
+
+ .lg\:py-6 {
+ padding-top: 1.5rem;
+ padding-bottom: 1.5rem
+ }
+
+ .lg\:px-0 {
+ padding-left: 0;
+ padding-right: 0
+ }
+
+ .lg\:px-6 {
+ padding-left: 1.5rem;
+ padding-right: 1.5rem
+ }
+
+ .lg\:px-8 {
+ padding-left: 2rem;
+ padding-right: 2rem
+ }
+
+ .lg\:px-5 {
+ padding-left: 1.25rem;
+ padding-right: 1.25rem
+ }
+
+ .lg\:pl-0 {
+ padding-left: 0
+ }
+
+ .lg\:pr-4 {
+ padding-right: 1rem
+ }
+
+ .lg\:pr-0 {
+ padding-right: 0
+ }
+
+ .lg\:text-left {
+ text-align: left
+ }
+
+ .lg\:text-right {
+ text-align: right
+ }
+
+ .lg\:text-4xl {
+ font-size: 2.25rem;
+ line-height: 2.5rem
+ }
+
+ .lg\:text-xl {
+ font-size: 1.25rem;
+ line-height: 1.75rem
+ }
+
+ .lg\:text-base {
+ font-size: 1rem;
+ line-height: 1.5rem
+ }
+
+ .lg\:text-2xl {
+ font-size: 1.5rem;
+ line-height: 2rem
+ }
+
+ .lg\:leading-tight {
+ line-height: 1.25
+ }
+
+ .lg\:leading-relaxed {
+ line-height: 1.625
+ }
+
+ .lg\:opacity-0 {
+ opacity: 0
+ }
+
+ .lg\:shadow-none {
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
+ }
+
+ .lg\:shadow-lg {
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
+ }
+
+ .lg\:after\:right-0::after {
+ content: var(--tw-content);
+ right: 0
+ }
+
+ .group:hover .lg\:group-hover\:visible {
+ visibility: visible
+ }
+
+ .group:hover .lg\:group-hover\:top-full {
+ top: 100%
+ }
+
+ .dark .lg\:dark\:bg-transparent {
+ background-color: transparent
+ }
+}
+
+@media(min-width:1140px) {
+ .xl\:mx-6 {
+ margin-left: 1.5rem;
+ margin-right: 1.5rem
+ }
+
+ .xl\:ml-12 {
+ margin-left: 3rem
+ }
+
+ .xl\:mr-3 {
+ margin-right: .75rem
+ }
+
+ .xl\:mb-0 {
+ margin-bottom: 0
+ }
+
+ .xl\:flex {
+ display: flex
+ }
+
+ .xl\:w-5\/12 {
+ width: 41.666667%
+ }
+
+ .xl\:w-2\/12 {
+ width: 16.666667%
+ }
+
+ .xl\:w-3\/12 {
+ width: 25%
+ }
+
+ .xl\:w-1\/2 {
+ width: 50%
+ }
+
+ .xl\:w-1\/3 {
+ width: 33.333333%
+ }
+
+ .xl\:max-w-\[150px\] {
+ max-width: 150px
+ }
+
+ .xl\:p-9 {
+ padding: 2.25rem
+ }
+
+ .xl\:p-11 {
+ padding: 2.75rem
+ }
+
+ .xl\:p-\[55px\] {
+ padding: 55px
+ }
+
+ .xl\:p-\[50px\] {
+ padding: 50px
+ }
+
+ .xl\:px-6 {
+ padding-left: 1.5rem;
+ padding-right: 1.5rem
+ }
+
+ .xl\:px-9 {
+ padding-left: 2.25rem;
+ padding-right: 2.25rem
+ }
+
+ .xl\:py-8 {
+ padding-top: 2rem;
+ padding-bottom: 2rem
+ }
+
+ .xl\:px-5 {
+ padding-left: 1.25rem;
+ padding-right: 1.25rem
+ }
+
+ .xl\:px-8 {
+ padding-left: 2rem;
+ padding-right: 2rem
+ }
+
+ .xl\:pr-3 {
+ padding-right: .75rem
+ }
+
+ .xl\:pt-\[180px\] {
+ padding-top: 180px
+ }
+
+ .xl\:pb-\[160px\] {
+ padding-bottom: 160px
+ }
+
+ .xl\:text-\[45px\] {
+ font-size: 45px
+ }
+
+ .xl\:text-2xl {
+ font-size: 1.5rem;
+ line-height: 2rem
+ }
+
+ .xl\:text-lg {
+ font-size: 1.125rem;
+ line-height: 1.75rem
+ }
+
+ .xl\:text-3xl {
+ font-size: 1.875rem;
+ line-height: 2.25rem
+ }
+
+ .xl\:leading-tight {
+ line-height: 1.25
+ }
+
+ .xl\:leading-relaxed {
+ line-height: 1.625
+ }
+}
+
+@media(min-width:1320px) {
+ .\32xl\:mx-8 {
+ margin-left: 2rem;
+ margin-right: 2rem
+ }
+
+ .\32xl\:mr-5 {
+ margin-right: 1.25rem
+ }
+
+ .\32xl\:max-w-\[160px\] {
+ max-width: 160px
+ }
+
+ .\32xl\:p-8 {
+ padding: 2rem
+ }
+
+ .\32xl\:py-\[60px\] {
+ padding-top: 60px;
+ padding-bottom: 60px
+ }
+
+ .\32xl\:px-\[70px\] {
+ padding-left: 70px;
+ padding-right: 70px
+ }
+
+ .\32xl\:pr-5 {
+ padding-right: 1.25rem
+ }
+
+ .\32xl\:pt-\[210px\] {
+ padding-top: 210px
+ }
+
+ .\32xl\:pb-\[200px\] {
+ padding-bottom: 200px
+ }
+}
+
+
+@keyframes ldio-jzq166pp4c {
+ 0% {
+ transform: rotate(0)
+ }
+
+ 100% {
+ transform: rotate(360deg)
+ }
+}
+
+.ldio-jzq166pp4c div {
+ box-sizing: border-box !important
+}
+
+.ldio-jzq166pp4c>div {
+ position: absolute;
+ width: 72px;
+ height: 72px;
+ top: 14px;
+ left: 14px;
+ border-radius: 50%;
+ border: 8px solid #000;
+ border-color: #6677e4 transparent #6677e4 transparent;
+ animation: ldio-jzq166pp4c 1.4492753623188404s linear infinite;
+}
+
+.ldio-jzq166pp4c>div:nth-child(2) {
+ border-color: transparent
+}
+
+.ldio-jzq166pp4c>div:nth-child(2) div {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ transform: rotate(45deg);
+}
+
+.ldio-jzq166pp4c>div:nth-child(2) div:before,
+.ldio-jzq166pp4c>div:nth-child(2) div:after {
+ content: "";
+ display: block;
+ position: absolute;
+ width: 8px;
+ height: 8px;
+ top: -8px;
+ left: 24px;
+ background: #6677e4;
+ border-radius: 50%;
+ box-shadow: 0 64px 0 0 #6677e4;
+}
+
+.ldio-jzq166pp4c>div:nth-child(2) div:after {
+ left: -8px;
+ top: 24px;
+ box-shadow: 64px 0 0 0 #6677e4;
+}
+
+.loadingio-spinner-dual-ring-4e7xs5jqq4d {
+ width: 84px;
+ height: 84px;
+ display: inline-block;
+ overflow: hidden;
+ background: transparent;
+}
+
+.ldio-jzq166pp4c {
+ width: 100%;
+ height: 100%;
+ position: relative;
+ transform: translateZ(0) scale(0.84);
+ backface-visibility: hidden;
+ transform-origin: 0 0;
+}
+
+.ldio-jzq166pp4c div {
+ box-sizing: content-box;
+}
+
+
+@import url(https://fonts.googleapis.com/css2?family=Poppins:wght@400;500&display=swap);
+
+:root {
+ --cookieBannerLight: #ffffff;
+ --cookieBannerDark: #393d4d
+}
+
+#cookieBanner * {
+ margin: 0;
+ padding: 0;
+ text-decoration: none;
+ list-style: none;
+ font-family: Poppins, sans-serif;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box
+}
+
+#cookieBanner a,
+#cookieBanner button {
+ cursor: pointer;
+ color: inherit;
+ font-family: inherit
+}
+
+#cookieBanner button {
+ outline: 0;
+ border: none;
+ -moz-appearance: none;
+ appearance: none;
+ -webkit-appearance: none;
+ appearance: none
+}
+
+#cookieBanner em,
+#cookieBanner strong {
+ font-weight: 700;
+ font-family: inherit
+}
+
+#cookieBanner a:hover {
+ text-decoration: none;
+ cursor: pointer
+}
+
+#cookieBanner a:focus,
+#cookieBanner input:focus {
+ outline: 0;
+ list-style: none
+}
+
+#cookieBanner.light {
+ background-color: #fff;
+ background-color: var(--cookieBannerLight);
+ color: #393d4d;
+ color: var(--cookieBannerDark)
+}
+
+#cookieBanner.light p,
+#cookieBanner.light ul {
+ color: #393d4d;
+ color: var(--cookieBannerDark)
+}
+
+#cookieBanner.light h5 {
+ color: var(--cookieBannerDark)
+}
+
+#cookieBanner.light button#cookieReject {
+ background: #fff;
+ background: var(--cookieBannerLight)
+}
+
+#cookieBanner.dark {
+ background-color: #393d4d;
+ background-color: var(--cookieBannerDark);
+ color: #fff;
+ color: var(--cookieBannerLight)
+}
+
+#cookieBanner.dark p,
+#cookieBanner.dark ul {
+ color: #fff;
+ color: var(--cookieBannerLight)
+}
+
+#cookieBanner.dark h5 {
+ color: #fff;
+ color: var(--cookieBannerLight)
+}
+
+#cookieBanner.dark button#cookieReject {
+ background: 0 0;
+ color: #fff;
+ color: var(--cookieBannerLight);
+ border: 1px solid #fff;
+ border: 1px solid var(--cookieBannerLight)
+}
+
+#cookieBanner {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ position: fixed;
+ padding: 20px;
+ border-radius: 10px;
+ -webkit-box-shadow: 0 6px 6px rgba(0, 0, 0, .25);
+ box-shadow: 0 6px 6px rgba(0, 0, 0, .25);
+ font-family: inherit;
+ z-index: 999997
+}
+
+#cookieBanner #closeIcon {
+ width: 20px;
+ height: 20px;
+ cursor: pointer;
+ color: #bfb9b9;
+ overflow: hidden;
+ opacity: .85;
+ z-index: 999999;
+ position: absolute;
+ top: 4px;
+ right: 4px
+}
+
+#cookieBanner svg {
+ display: block
+}
+
+#cookieBanner.display-left {
+ left: 30px;
+ bottom: 30px;
+ max-width: 395px
+}
+
+#cookieBanner.display-right {
+ right: 30px;
+ bottom: 30px;
+ max-width: 395px
+}
+
+#cookieBanner.display-top {
+ top: 30px;
+ width: 800px;
+ left: 50%;
+ margin-left: -400px
+}
+
+#cookieBanner.display-bottom {
+ bottom: 30px;
+ width: 800px;
+ left: 50%;
+ margin-left: -400px
+}
+
+#cookieBanner.display-bottom .content-wrap,
+#cookieBanner.display-top .content-wrap {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center
+}
+
+#cookieBanner.display-bottom .msg-wrap,
+#cookieBanner.display-top .msg-wrap {
+ max-width: 65%;
+ width: 100%
+}
+
+#cookieBanner.display-bottom .msg-wrap,
+#cookieBanner.display-top .msg-wrap {
+ margin-bottom: 0
+}
+
+#cookieBanner.display-bottom #cookieSettings,
+#cookieBanner.display-top #cookieSettings {
+ margin-bottom: 0
+}
+
+#cookieBanner.display-bottom #cookieTypes,
+#cookieBanner.display-top #cookieTypes {
+ margin-top: 20px
+}
+
+#cookieBanner .btn-wrap {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ font-weight: 700;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ margin: 0 -5px 0 -5px;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap
+}
+
+#cookieBanner .btn-wrap button {
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ padding: 0 7px;
+ margin: 0 5px 10px 5px;
+ border-radius: 20px;
+ cursor: pointer;
+ white-space: nowrap;
+ min-width: 130px;
+ line-height: 36px;
+ border: none;
+ font-family: inherit;
+ font-size: 16px;
+ -webkit-transition: -webkit-box-shadow .3s;
+ transition: -webkit-box-shadow .3s;
+ -o-transition: box-shadow .3s;
+ transition: box-shadow .3s;
+ transition: box-shadow .3s, -webkit-box-shadow .3s
+}
+
+#cookieBanner .btn-wrap button:hover {
+ -webkit-transition: -webkit-box-shadow .4s cubic-bezier(.25, .8, .25, 1), -webkit-transform .4s cubic-bezier(.25, .8, .25, 1);
+ transition: -webkit-box-shadow .4s cubic-bezier(.25, .8, .25, 1), -webkit-transform .4s cubic-bezier(.25, .8, .25, 1);
+ -o-transition: box-shadow .4s cubic-bezier(.25, .8, .25, 1), transform .4s cubic-bezier(.25, .8, .25, 1);
+ transition: box-shadow .4s cubic-bezier(.25, .8, .25, 1), transform .4s cubic-bezier(.25, .8, .25, 1);
+ transition: box-shadow .4s cubic-bezier(.25, .8, .25, 1), transform .4s cubic-bezier(.25, .8, .25, 1), -webkit-box-shadow .4s cubic-bezier(.25, .8, .25, 1), -webkit-transform .4s cubic-bezier(.25, .8, .25, 1);
+ -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .3);
+ box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .3);
+ -webkit-transform: translate3d(0, -1px, 0);
+ transform: translate3d(0, -1px, 0)
+}
+
+#cookieBanner #cookieSettings {
+ font-size: 12px;
+ font-weight: 700;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ text-transform: uppercase;
+ cursor: pointer;
+ font-weight: 400;
+ margin-bottom: 20px
+}
+
+#cookieBanner #cookieSettings svg {
+ vertical-align: middle;
+ margin-right: 8px
+}
+
+#cookieBanner h4 {
+ font-family: inherit;
+ font-weight: 700;
+ font-size: 18px
+}
+
+#cookieBanner .title-wrap {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ margin-bottom: 10px
+}
+
+#cookieBanner .title-wrap svg {
+ margin-right: 10px
+}
+
+#cookieBanner h5 {
+ font-family: inherit;
+ font-weight: 700;
+ font-size: 12px;
+ margin-bottom: 10px;
+ text-transform: uppercase
+}
+
+#cookieBanner p,
+#cookieBanner ul {
+ font-size: 14px;
+ margin-bottom: 20px
+}
+
+#cookieBanner p:last-child {
+ margin-bottom: 0;
+ text-align: left
+}
+
+#cookieBanner li {
+ width: 49%;
+ display: inline-block
+}
+
+#cookieBanner a {
+ text-decoration: none;
+ font-size: 14px;
+ padding-bottom: 2px;
+ border-bottom: 1px dotted rgba(255, 255, 255, .75);
+ -webkit-transition: all .3s ease-in;
+ -o-transition: all .3s ease-in;
+ transition: all .3s ease-in
+}
+
+#cookieTypes label {
+ text-transform: uppercase;
+ font-size: 13px
+}
+
+#cookieBanner button:disabled {
+ opacity: .3
+}
+
+#cookieBanner input[type=checkbox] {
+ -webkit-appearance: auto;
+ -moz-appearance: auto;
+ appearance: auto;
+ -webkit-font-smoothing: antialiased;
+ text-rendering: optimizeSpeed;
+ width: 14px;
+ height: 14px;
+ margin: 4px 10px 0 0;
+ display: block;
+ float: left;
+ position: relative;
+ outline: 0;
+ border: none
+}
+
+#cookieBanner input[type=checkbox]:checked:after {
+ background: #d3d3d3;
+ content: "\2714";
+ color: grey
+}
+
+#cookieBanner input[type=checkbox]:after {
+ content: "";
+ vertical-align: middle;
+ text-align: center;
+ line-height: 13px;
+ position: absolute;
+ cursor: pointer;
+ height: 14px;
+ width: 14px;
+ left: 0;
+ top: 0;
+ font-size: 10px;
+ background: #d3d3d3
+}
+
+#cookieBanner.display-bottom.full-width-true,
+#cookieBanner.display-top.full-width-true {
+ width: 100%;
+ max-width: 100%;
+ left: auto;
+ right: auto;
+ bottom: auto;
+ top: 0;
+ border-radius: 0;
+ margin: auto
+}
+
+#cookieBanner.display-bottom.full-width-true {
+ bottom: 0;
+ top: auto;
+ -webkit-box-shadow: 0 -3px 3px rgb(0 0 0 / 25%);
+ box-shadow: 0 -3px 3px rgb(0 0 0 / 25%)
+}
+
+#cookieBanner.display-bottom.full-width-true .title-wrap,
+#cookieBanner.display-top.full-width-true .title-wrap {
+ display: none
+}
+
+#cookieBanner.display-bottom.full-width-true .btn-wrap button,
+#cookieBanner.display-top.full-width-true .btn-wrap button {
+ margin-bottom: 10px
+}
+
+@media only screen and (max-width:800px) {
+
+ #cookieBanner.display-bottom,
+ #cookieBanner.display-top {
+ width: 100%;
+ max-width: 100%;
+ left: auto;
+ right: auto;
+ bottom: auto;
+ top: 0;
+ border-radius: 0;
+ margin: auto
+ }
+
+ #cookieBanner.display-bottom {
+ bottom: 0;
+ top: auto;
+ -webkit-box-shadow: 0 -3px 3px rgb(0 0 0 / 25%);
+ box-shadow: 0 -3px 3px rgb(0 0 0 / 25%)
+ }
+
+ #cookieBanner.display-bottom .btn-wrap button,
+ #cookieBanner.display-top .btn-wrap button {
+ margin-bottom: 10px
+ }
+
+ #cookieBanner.display-bottom .msg-wrap,
+ #cookieBanner.display-top .msg-wrap {
+ margin-right: 20px
+ }
+}
+
+@media only screen and (max-width:600px) {
+
+ #cookieBanner.display-left,
+ #cookieBanner.display-right {
+ width: 100%;
+ max-width: 100%;
+ left: auto;
+ right: auto;
+ bottom: 0;
+ border-radius: 0;
+ -webkit-box-shadow: 0 -3px 3px rgb(0 0 0 / 25%);
+ box-shadow: 0 -3px 3px rgb(0 0 0 / 25%)
+ }
+
+ #cookieBanner.display-bottom .content-wrap,
+ #cookieBanner.display-top .content-wrap {
+ display: block
+ }
+
+ #cookieBanner.display-bottom .msg-wrap,
+ #cookieBanner.display-top .msg-wrap {
+ max-width: 100%
+ }
+
+ #cookieBanner.display-bottom #cookieSettings,
+ #cookieBanner.display-top #cookieSettings {
+ margin-bottom: 20px
+ }
+}
+
+#cookieBlur {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.87);
+ z-index: 9999;
+ transition: opacity 0.3s ease-in-out;
+ opacity: 1;
+ pointer-events: all;
+}
\ No newline at end of file
diff --git a/app-rappaurio/server/controllers/auth.js b/app-rappaurio/server/controllers/auth.js
new file mode 100644
index 0000000..d775cea
--- /dev/null
+++ b/app-rappaurio/server/controllers/auth.js
@@ -0,0 +1,162 @@
+const mysql = require('mysql');
+const jwt = require('jsonwebtoken');
+const bcrypt = require('bcryptjs');
+const { promisify } = require('util');
+
+const db = mysql.createConnection({
+ host: process.env.DATABASE_HOST,
+ user: process.env.DATABASE_USER,
+ password: process.env.DATABASE_PASSWORD,
+ database: process.env.DATABASE
+});
+
+exports.login = async (req, res) => {
+ try {
+ const { email, password } = req.body;
+ if (!email || !password) {
+ return res.status(400).render('contains/connexion', {
+ message: 'Veuillez entrer un email et un mot de passe'
+ })
+ }
+
+ db.query('SELECT * FROM users WHERE email = ?', [email], async (error, result) => {
+ console.log(result)
+ if (!result || result.length == 0 || !(await bcrypt.compare(password, result[0].password))) {
+ res.status(401).render('contains/connexion', {
+ message: 'Email ou Mot de passe incorrect'
+ })
+ }
+ else {
+ const id = result[0].id;
+ // creating a token
+ const token = jwt.sign({ id: id }, process.env.JWT_SECRET, {
+ expiresIn: process.env.JWT_EXPIRES_IN
+ });
+
+ console.log("The token is : " + token);
+
+ // when does our token expires
+ const cookieOptions = {
+ expires: new Date(
+ Date.now() + process.env.JWT_COOKIE_EXPIRES_IN * 24 * 60 * 60 * 1000
+ ),
+ // just to prevent if someone is not messing with our cookies
+ httpOnly: true
+ }
+ // we can use any name here in res.cookie(name , token , cookieoptions ) ;
+ // after a user is loged in we put cookie in browser
+ res.cookie('jwt', token, cookieOptions);
+ res.status(200).redirect('/');
+ }
+ })
+ } catch (error) {
+ console.log(error);
+ }
+
+}
+
+exports.register = (req, res) => {
+ console.log(req.body);
+
+ // de-structuring in javaScript....
+ const { name, email, password } = req.body;
+
+ db.query('SELECT email FROM users WHERE email = ?', [email], async (error, result) => {
+ if (error) {
+ console.log(error);
+ }
+ if (result.length > 0) {
+ return res.render('contains/inscription', {
+ message: 'Cet email est déjà utilisé'
+ })
+ }
+
+ let hashedPassword = await bcrypt.hash(password, 8);
+
+ console.log(hashedPassword);
+
+ db.query('INSERT INTO users SET ?', { name: name, email: email, password: hashedPassword }, (error, result) => {
+ if (error) {
+ console.log(error);
+ }
+ else {
+ console.log(result);
+
+ db.query('SELECT * FROM users WHERE email = ?', [email], async (error, result) => {
+ console.log(result)
+
+ const id = result[0].id;
+ // creating a token
+ const token = jwt.sign({ id: id }, process.env.JWT_SECRET, {
+ expiresIn: process.env.JWT_EXPIRES_IN
+ });
+
+ console.log("The token is : " + token);
+
+ // when does our token expires
+ const cookieOptions = {
+ expires: new Date(
+ Date.now() + process.env.JWT_COOKIE_EXPIRES_IN * 24 * 60 * 60 * 1000
+ ),
+ // just to prevent if someone is not messing with our cookies
+ httpOnly: true
+ }
+ // we can use any name here in res.cookie(name , token , cookieoptions ) ;
+ // after a user is loged in we put cookie in browser
+ res.cookie('jwt', token, cookieOptions);
+ res.status(200).redirect('/');
+
+ })
+
+
+ }
+ });
+ })
+
+}
+
+exports.isLoggedIn = async (req, res, next) => {
+
+ console.log(req.cookies);
+ if (req.cookies.jwt) {
+ try {
+ // step 1 : Verify the token
+ const decoded = await promisify(jwt.verify)(
+ req.cookies.jwt,
+ process.env.JWT_SECRET
+ )
+
+ //console.log(decoded);
+
+ const userId = decoded.id;
+ req.userId = userId;
+
+ // step 2: check if the user still exists
+ db.query('SELECT * FROM users WHERE id = ?', [decoded.id], (error, result) => {
+ console.log(result);
+
+ if (!result) {
+ return next();
+ }
+ req.user = result[0];
+ return next();
+ });
+
+ } catch (error) {
+ console.log(error);
+ return next();
+ }
+ }
+ else {
+ next();
+ }
+}
+
+
+exports.logout = async (req, res) => {
+ res.cookie('jwt', 'déconnecté', {
+ expires: new Date(Date.now() + 2 * 1000),
+ httpOnly: true
+ });
+ res.status(200).redirect('/');
+}
\ No newline at end of file
diff --git a/app-rappaurio/server/controllers/historiqueController.js b/app-rappaurio/server/controllers/historiqueController.js
new file mode 100644
index 0000000..a0a2088
--- /dev/null
+++ b/app-rappaurio/server/controllers/historiqueController.js
@@ -0,0 +1,21 @@
+const mysql = require('mysql');
+
+// Créez une connexion à la base de données
+const db = mysql.createConnection({
+ host: process.env.DATABASE_HOST,
+ user: process.env.DATABASE_USER,
+ password: process.env.DATABASE_PASSWORD,
+ database: process.env.DATABASE
+});
+
+// Fonction pour récupérer les données depuis la base de données
+exports.getHistoriqueData = (userId, callback) => {
+ db.query('SELECT * FROM search WHERE id = ? LIMIT 50', [userId], (error, results) => {
+ if (error) {
+ console.error('Erreur lors de la récupération des données depuis la base de données :', error);
+ callback(error, null);
+ } else {
+ callback(null, results);
+ }
+ });
+};
diff --git a/app-rappaurio/server/controllers/searchController.js b/app-rappaurio/server/controllers/searchController.js
new file mode 100644
index 0000000..efae80e
--- /dev/null
+++ b/app-rappaurio/server/controllers/searchController.js
@@ -0,0 +1,27 @@
+// searchController.js
+
+const mysql = require('mysql');
+
+// Créez une connexion à la base de données
+const db = mysql.createConnection({
+ host: process.env.DATABASE_HOST,
+ user: process.env.DATABASE_USER,
+ password: process.env.DATABASE_PASSWORD,
+ database: process.env.DATABASE
+});
+
+// Fonction pour insérer les données de recherche dans la base de données
+exports.insertSearchData = (userId, articleTitle1, articleTitle2, callback) => {
+ db.query('INSERT INTO search (id, article1, article2) VALUES (?, ?, ?)', [userId, articleTitle1, articleTitle2], (error, result) => {
+ if (error) {
+ console.error('Erreur lors de l\'insertion des données dans la base de données :', error);
+ // Vous pouvez gérer l'erreur en appelant le callback avec l'erreur
+ callback(error, null);
+ } else {
+ // Les données ont été insérées avec succès
+ console.log('Données insérées avec succès dans la base de données.');
+ // Appelez le callback avec succès
+ callback(null, result);
+ }
+ });
+};
diff --git a/app-rappaurio/server/functions/compare.js b/app-rappaurio/server/functions/compare.js
new file mode 100644
index 0000000..122e70f
--- /dev/null
+++ b/app-rappaurio/server/functions/compare.js
@@ -0,0 +1,165 @@
+const Wikiapi = require('wikiapi');
+const wiki = new Wikiapi('fr');
+const axios = require('axios');
+
+
+// == Functions
+
+// Fonction de nettoyage personnalisée (pour infobox)
+function cleanInfoboxText(text) {
+ // Supprimer les balises HTML
+ const cleanedText = text.replace(/<\/?[^>]+(>|$)/g, "");
+
+ // Supprimer les caractères '{' et '}'
+ const cleanedTextWithoutBraces = cleanedText.replace(/[{}]/g, "");
+
+ // Supprimer le caractère '|'
+ const cleanedTextWithoutPipe = cleanedTextWithoutBraces.replace(/\|/g, "");
+
+ // Supprimer les caractères '[' et ']'
+ const finalText = cleanedTextWithoutPipe.replace(/[\[\]]/g, "");
+
+ return finalText.trim();
+}
+
+// Fonction pour récupérer les informations d'un article depuis l'API MediaWiki
+async function fetchArticleInfoFromAPI(articleTitle) {
+ try {
+ // Définir les paramètres de la requête pour obtenir les suggestions de titre
+ const suggestionParams = new URLSearchParams({
+ action: 'opensearch',
+ search: articleTitle,
+ format: 'json',
+ });
+
+ // Effectuer la requête GET pour obtenir les suggestions de titre
+ const suggestionResponse = await axios.get(`https://fr.wikipedia.org/w/api.php?${suggestionParams.toString()}`);
+ const suggestionData = suggestionResponse.data;
+
+ // Vérifier s'il y a des suggestions de titre
+ if (Array.isArray(suggestionData[1]) && suggestionData[1].length > 0) {
+ // Utiliser le premier titre suggéré comme titre de l'article
+ articleTitle = suggestionData[1][0];
+ }
+
+ // Répéter la requête pour obtenir les informations de l'article avec le titre corrigé ou suggéré
+ const params = new URLSearchParams({
+ action: 'query',
+ titles: articleTitle,
+ format: 'json',
+ prop: 'extracts|info|revisions|pageimages', // Ajoutez 'pageimages' pour obtenir les informations sur l'image
+ inprop: 'url',
+ explaintext: true,
+ rvprop: 'timestamp|user|size|ids',
+ rvlimit: 1,
+ piprop: 'original', // Spécifiez 'original' pour obtenir l'URL de l'image originale
+ });
+
+ // Effectuer la requête GET à l'API MediaWiki
+ const response = await axios.get(`https://fr.wikipedia.org/w/api.php?${params.toString()}`);
+ const data = response.data;
+
+ // ==== RECHERCHE INFOBOX ====
+
+ let infobox = {};
+
+ // Vérifiez si articleTitle est défini et non vide
+ if (articleTitle) {
+ const page_data = await wiki.page(articleTitle);
+ const parsed = page_data.parse();
+
+ // Filtre des données compliquée à représentée
+ const variablesExclues = ['image', 'blason', 'drapeau', 'logo', 'légende', 'carte', 'légende-carte', '_', 'statut', 1, 2, 3, 4, 5, 6, 7, 8, 9];
+
+ // Lire les modèles Infobox, les convertir en JSON.
+ parsed.each('template', (template_token) => {
+ if (template_token.name.startsWith('Infobox')) {
+ const parameters = template_token.parameters;
+ for (const key of Object.keys(parameters)) {
+ const value = parameters[key];
+ if (value !== '' && !variablesExclues.some(excluded => key.includes(excluded))) {
+ infobox[key] = cleanInfoboxText(value.toString()); // Appliquer la fonction de nettoyage ici
+ }
+ }
+ return parsed.each.exit;
+ }
+ });
+
+ // Vérifiez si l'infobox est vide
+ if (Object.keys(infobox).length === 0) {
+ console.log("Warning : Pas d'infobox");
+ infobox = {
+ Erreur: "Pas d'infobox sur wikipédia"
+ };
+ }
+
+ } else {
+ return null;
+ }
+
+ // ------------------------------------------------------------
+
+ // Vérifier si 'query' existe dans les données
+ if (data.query) {
+ // Obtenir la première page (il peut y avoir plusieurs résultats, nous prenons le premier)
+ const page = Object.values(data.query.pages)[0];
+
+ if (page.missing !== undefined) {
+ console.log(`Warning : l'article "${articleTitle}" n'a pas été trouvé.`);
+ return null;
+ } else {
+
+ // Fonction pour limiter le texte à 300 caractères et s'arrêter au dernier point
+ function limitTextTo300Chars(text) {
+ if (text.length <= 300) {
+ // Si le texte est déjà inférieur ou égal à 300 caractères, retournez-le tel quel
+ return text;
+ } else {
+ // Trouvez le dernier point dans les 300 premiers caractères
+ const truncatedText = text.substring(0, 300);
+ const lastPeriodIndex = truncatedText.lastIndexOf('.');
+
+ if (lastPeriodIndex !== -1) {
+ // S'il y a un point dans les 300 premiers caractères, coupez le texte jusqu'à ce point
+ return truncatedText.substring(0, lastPeriodIndex + 1);
+ } else {
+ // S'il n'y a pas de point, retournez simplement les 200 premiers caractères
+ return truncatedText;
+ }
+ }
+ }
+
+ // Extraire les informations
+ const articleInfo = {
+ url: page.fullurl,
+ title: page.title,
+ extract: page.extract ? limitTextTo300Chars(page.extract) : 'Non disponible',
+ lastEdit: page.revisions ? new Date(page.revisions[0].timestamp).toLocaleString() : 'Non disponible',
+ numRevisions: page.revisions ? page.revisions[0].revid : 'Non disponible',
+ pageSize: page.revisions ? page.revisions[0].size : 'Non disponible',
+ firstRevisionUser: page.revisions ? page.revisions[0].user : 'Non disponible',
+ latestRevisionId: page.revisions ? page.revisions[0].revid : 'Non disponible',
+ pageId: page.pageid ? page.pageid : 'Non disponible',
+ latestVersion: page.revisions ? page.revisions[0].parentid : 'Non disponible',
+ wordCount: page.extract ? page.extract.split(/\s+/).length : 'Non disponible',
+ charCount: page.extract ? page.extract.length : 'Non disponible',
+ lastContributor: page.revisions ? page.revisions[0].user : 'Non disponible',
+ image: page.original ? page.original.source : 'Non disponible',
+ infobox,
+ };
+
+ return articleInfo;
+ }
+ } else {
+ console.log(`Warning : l'article "${articleTitle}" n'a pas été trouvé.`);
+ return null;
+ }
+ } catch (error) {
+ console.error('Erreur : lors de la récupération des informations depuis l\'API :', error);
+ return null;
+ }
+}
+
+module.exports = {
+ fetchArticleInfoFromAPI
+ };
\ No newline at end of file
diff --git a/app-rappaurio/server/routes/auth.js b/app-rappaurio/server/routes/auth.js
new file mode 100644
index 0000000..14c2a41
--- /dev/null
+++ b/app-rappaurio/server/routes/auth.js
@@ -0,0 +1,14 @@
+const express = require('express');
+const authController = require('../controllers/auth');
+const router = express.Router();
+
+
+
+router.post('/inscription' , authController.register);
+
+router.post('/connexion' , authController.login);
+
+router.get('/deconnexion' , authController.logout)
+
+
+module.exports = router ;
\ No newline at end of file
diff --git a/app-rappaurio/server/routes/index.js b/app-rappaurio/server/routes/index.js
new file mode 100644
index 0000000..8bf10f6
--- /dev/null
+++ b/app-rappaurio/server/routes/index.js
@@ -0,0 +1,83 @@
+var express = require('express');
+const authController = require('../controllers/auth')
+const searchController = require('../controllers/searchController');
+const historiqueController = require('../controllers/historiqueController');
+const { fetchArticleInfoFromAPI } = require('../functions/compare');
+
+var router = express.Router();
+
+/* GET home page. */
+router.get('/', authController.isLoggedIn, (req, res, next) => {
+ res.render('contains/index', { user_details: req.user });
+});
+
+
+// inscription page
+router.get('/inscription', (req, res) => {
+ res.render('contains/inscription')
+});
+
+router.get('/connexion', (req, res) => {
+ res.render('contains/connexion')
+});
+
+
+router.get('/historique', authController.isLoggedIn, (req, res) => {
+ console.log(req.user);
+
+ if (req.user) {
+ const userId = req.user.id;
+ historiqueController.getHistoriqueData(userId, (error, historiqueData) => {
+ if (error) {
+ console.error('Erreur lors de la récupération des données depuis la base de données :', error);
+ res.status(500).json({ error: 'Une erreur s\'est produite lors de la récupération des données.' });
+ } else {
+
+ res.render('contains/historique', {
+ user_details: req.user,
+ historiqueData: historiqueData
+ });
+ }
+ });
+ } else {
+ res.redirect('/connexion');
+ }
+});
+
+
+// Send search for articles
+router.post('/search', authController.isLoggedIn, async (req, res) => {
+ try {
+ // Récupérez les données du formulaire depuis req.body
+ const articleTitle1 = req.body.articleTitle1;
+ const articleTitle2 = req.body.articleTitle2;
+
+ // Utilisez la fonction pour récupérer les informations des articles
+ const articleInfo1 = await fetchArticleInfoFromAPI(articleTitle1);
+ const articleInfo2 = await fetchArticleInfoFromAPI(articleTitle2);
+
+ // Récupérez l'ID de l'utilisateur
+ const userId = req.userId;
+
+ // Utilisez la fonction du contrôleur pour insérer les données
+
+ if (userId) {
+ searchController.insertSearchData(userId, articleTitle1, articleTitle2, (error, result) => {
+ if (error) {
+ console.error('Erreur lors de l\'insertion des données dans la base de données :', error);
+ res.status(500).json({ error: 'Une erreur s\'est produite lors de l\'enregistrement des données.' });
+ } else {
+ }
+ });
+ }
+
+ // Renvoyez la réponse au format JSON
+ res.json({ articleInfo1, articleInfo2 });
+ } catch (error) {
+ console.error('Erreur lors de la recherche d\'informations sur les articles :', error);
+ res.status(500).json({ error: 'Une erreur s\'est produite lors de la recherche d\'informations sur les articles.' });
+ }
+});
+
+
+module.exports = router;
diff --git a/app-rappaurio/views/contains/404.hbs b/app-rappaurio/views/contains/404.hbs
new file mode 100644
index 0000000..aa95a3f
--- /dev/null
+++ b/app-rappaurio/views/contains/404.hbs
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Oups ! La page n'a pas été trouvée.
+
+
+ La page que vous avez demandée peut avoir été déplacée, supprimée ou n'a jamais existé. Vous avez peut-être suivi un lien incorrect ou une URL mal orthographiée.
+
+
+ page d'accueil
+
+
+
+
+
+
+
diff --git a/app-rappaurio/views/contains/connexion.hbs b/app-rappaurio/views/contains/connexion.hbs
new file mode 100644
index 0000000..e624041
--- /dev/null
+++ b/app-rappaurio/views/contains/connexion.hbs
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+ Connexion à votre compte
+
+
+
+
+
+
+
+
+ Vous n'avez pas de compte?
+ Inscription
+
+
+ {{#if message }}
+
{{message}}
+ {{/if}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app-rappaurio/views/contains/historique.hbs b/app-rappaurio/views/contains/historique.hbs
new file mode 100644
index 0000000..0007421
--- /dev/null
+++ b/app-rappaurio/views/contains/historique.hbs
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Article 1
+ Article 2
+
+
+
+
+ {{#each historiqueData }}
+
+ {{this.article1}}
+ {{this.article2}}
+
+ {{/each}}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app-rappaurio/views/contains/index.hbs b/app-rappaurio/views/contains/index.hbs
new file mode 100644
index 0000000..854114b
--- /dev/null
+++ b/app-rappaurio/views/contains/index.hbs
@@ -0,0 +1,455 @@
+
+
+
+
+
+
+
+
+ Comparateur d'articles Wikipédia
+
+
+
+
+ Bienvenue sur notre outil de comparaison d'articles Wikipédia ! Cet outil permet de comparer les
+ données contenues dans les infoboîtes ainsi que les statistiques liées aux utilisateurs tels que
+ les
+ vues et le nombre de contributions.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Articles à Comparer
+
+
+ Completer les champs suivant :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ INFOBOX
+
+
+
+
+
+
+ STATISTIQUES
+
+
+ Dernière modification
+
+
+
+ Nombre de révisions
+
+
+
+ Taille de la page
+ octets
+
+
+ Auteur de la première révision
+
+
+
+ ID de la dernière révision
+
+
+
+ ID de la page
+
+
+
+ Dernière version
+
+
+
+ Nombre de mots
+
+
+
+ Nombre de caractères
+
+
+
+ Dernier contributeur
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ INFOBOX
+
+
+
+
+
+
+ STATISTIQUES
+
+
+ Dernière modification
+
+
+
+ Nombre de révisions
+
+
+
+ Taille de la page
+ octets
+
+
+ Auteur de la première révision
+
+
+
+ ID de la dernière révision
+
+
+
+ ID de la page
+
+
+
+ Dernière version
+
+
+
+ Nombre de mots
+
+
+
+ Nombre de caractères
+
+
+
+ Dernier contributeur
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app-rappaurio/views/contains/inscription.hbs b/app-rappaurio/views/contains/inscription.hbs
new file mode 100644
index 0000000..d2c29a3
--- /dev/null
+++ b/app-rappaurio/views/contains/inscription.hbs
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+ Créez votre compte
+
+
+
+ Déjà un compte?
+ Connexion
+
+
+ {{#if message }}
+
{{message}}
+ {{/if}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app-rappaurio/views/layout.hbs b/app-rappaurio/views/layout.hbs
new file mode 100644
index 0000000..6fa14fd
--- /dev/null
+++ b/app-rappaurio/views/layout.hbs
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+ Rappaurio - Wiki
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{{body}}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..c934177
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,44 @@
+version: "3.8"
+services:
+ nodejs: # Service pour nodejs
+ networks:
+ - rappaurio-net
+ build:
+ context: ./app-rappaurio
+ volumes:
+ - ./app-rappaurio:/user/src/app
+ ports:
+ - "5000:5000"
+ restart: unless-stopped
+
+ nginx: # Service serveur web
+ networks:
+ - rappaurio-net
+ build:
+ context: ./nginx
+ volumes:
+ - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
+ ports:
+ - "8888:80"
+ restart: unless-stopped
+
+
+ db:
+ image: mariadb:latest
+ networks:
+ - rappaurio-net
+ env_file:
+ - .env # fichier contenant les mot de passes
+ environment:
+ MYSQL_ROOT_PASSWORD: ${DATABASE_ROOT_PASSWORD}
+ MYSQL_DATABASE: ${DATABASE}
+ MYSQL_USER: ${DATABASE_USER}
+ MYSQL_PASSWORD: ${DATABASE_PASSWORD}
+ volumes:
+ - ./mariadb/mysql:/var/lib/mysql
+ - ./mariadb:/docker-entrypoint-initdb.d
+ command: --init-file /docker-entrypoint-initdb.d/rappaurio.sql
+ restart: unless-stopped
+
+networks:
+ rappaurio-net:
\ No newline at end of file
diff --git a/img/.gitkeep b/img/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/img/Diagramme_architecture.png b/img/Diagramme_architecture.png
new file mode 100644
index 0000000..67b80e0
Binary files /dev/null and b/img/Diagramme_architecture.png differ
diff --git a/img/Diagramme_exigence.vpd_v1.png b/img/Diagramme_exigence.vpd_v1.png
new file mode 100644
index 0000000..122937d
Binary files /dev/null and b/img/Diagramme_exigence.vpd_v1.png differ
diff --git a/img/demo.gif b/img/demo.gif
new file mode 100644
index 0000000..52eb9e4
Binary files /dev/null and b/img/demo.gif differ
diff --git a/img/logo.svg b/img/logo.svg
new file mode 100644
index 0000000..c277e3a
--- /dev/null
+++ b/img/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/mariadb/rappaurio.sql b/mariadb/rappaurio.sql
new file mode 100644
index 0000000..435f107
--- /dev/null
+++ b/mariadb/rappaurio.sql
@@ -0,0 +1,29 @@
+
+/*
+By Dario Weinberger & Raphael Payet
+©2023
+*/
+
+-- Utiliser la base de données
+USE rappaurio;
+
+-- Créer la table "User"
+CREATE TABLE `users` (
+ `id` int(255) NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL,
+ `email` varchar(255) NOT NULL,
+ `password` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`)
+);
+
+-- Créer la table "Search"
+CREATE TABLE `search` (
+ `id_search` int(11) NOT NULL AUTO_INCREMENT,
+ `id` int(11) DEFAULT NULL,
+ `article1` varchar(255) NOT NULL,
+ `article2` varchar(255) NOT NULL,
+ `date` timestamp NULL DEFAULT current_timestamp(),
+ PRIMARY KEY (`id_search`),
+ KEY `id` (`id`),
+ CONSTRAINT `search_ibfk_1` FOREIGN KEY (`id`) REFERENCES `users` (`id`)
+);
diff --git a/nginx/Dockerfile b/nginx/Dockerfile
new file mode 100644
index 0000000..ce14e86
--- /dev/null
+++ b/nginx/Dockerfile
@@ -0,0 +1,2 @@
+FROM nginx
+COPY default.conf /etc/nginx/conf.d/default.conf
diff --git a/nginx/default.conf b/nginx/default.conf
new file mode 100644
index 0000000..9261b65
--- /dev/null
+++ b/nginx/default.conf
@@ -0,0 +1,10 @@
+server {
+ location / {
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+
+ proxy_pass http://nodejs:5000;
+ }
+}