From e13b1a87109dcdb46815d93ec92aca649659a6c5 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 21:47:34 +0530 Subject: [PATCH 01/38] Create README.md --- Team-CodeForMap/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 Team-CodeForMap/README.md diff --git a/Team-CodeForMap/README.md b/Team-CodeForMap/README.md new file mode 100644 index 00000000..18ed8957 --- /dev/null +++ b/Team-CodeForMap/README.md @@ -0,0 +1 @@ +// code here From e22a4f3970a5c46cbeeadbfc5ba272c3497ddf69 Mon Sep 17 00:00:00 2001 From: 01ankush Date: Sun, 29 Oct 2023 22:17:14 +0530 Subject: [PATCH 02/38] test --- houseapp-frontend | 1 + 1 file changed, 1 insertion(+) create mode 160000 houseapp-frontend diff --git a/houseapp-frontend b/houseapp-frontend new file mode 160000 index 00000000..07424756 --- /dev/null +++ b/houseapp-frontend @@ -0,0 +1 @@ +Subproject commit 07424756158fdb10724f335d8ea2a36bc48384fe From c12d72c84c1439945d61b80ebd5c8a8f0d92bb54 Mon Sep 17 00:00:00 2001 From: 01ankush Date: Sun, 29 Oct 2023 22:20:41 +0530 Subject: [PATCH 03/38] test --- README.md | 32 -------------------------------- Team-CodeForMap/README.md | 1 - 2 files changed, 33 deletions(-) delete mode 100644 README.md delete mode 100644 Team-CodeForMap/README.md diff --git a/README.md b/README.md deleted file mode 100644 index 877fb545..00000000 --- a/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# Code-with-Google-Maps-2023 - Hack2skill - -Welcome to the official repository for the Code-with-Google-Maps-2023 organized by Hack2skill! - -## Getting Started - -To get started with the Code-with-Google-Maps-2023 repository, follow these steps: - -### Submission Instruction: - 1. Fork this repository - 2. Create a folder with your Team Name - 3. Upload all the code and necessary files in the created folder - 4. Upload a **README.md** file in your folder with the below mentioned informations. - 5. Generate a Pull Request with your Team Name. (Example: submission-XYZ_team) - -### README.md must consist of the following information: - -#### Team Name - -#### Problem Statement - -#### Team Leader Email - - -### A Brief of the Prototype: - This section must include UML Diagrams and prototype description - -### Tech Stack: - List Down all technologies used to Build the prototype - -### Step-by-Step Code Execution Instructions: - This Section must contain a set of instructions required to clone and run the prototype so that it can be tested and deeply analyzed - -### Future Scope: - Write about the scalability and futuristic aspects of the prototype developed diff --git a/Team-CodeForMap/README.md b/Team-CodeForMap/README.md deleted file mode 100644 index 18ed8957..00000000 --- a/Team-CodeForMap/README.md +++ /dev/null @@ -1 +0,0 @@ -// code here From 4e3f2fac2bfad4962ba2be48409bd5cb4469eed0 Mon Sep 17 00:00:00 2001 From: 01ankush Date: Sun, 29 Oct 2023 22:30:42 +0530 Subject: [PATCH 04/38] test --- Code-with-Google-Maps | 1 + houseapp-frontend => Team-CodeForMap/houseapp-frontend | 0 2 files changed, 1 insertion(+) create mode 160000 Code-with-Google-Maps rename houseapp-frontend => Team-CodeForMap/houseapp-frontend (100%) diff --git a/Code-with-Google-Maps b/Code-with-Google-Maps new file mode 160000 index 00000000..c12d72c8 --- /dev/null +++ b/Code-with-Google-Maps @@ -0,0 +1 @@ +Subproject commit c12d72c84c1439945d61b80ebd5c8a8f0d92bb54 diff --git a/houseapp-frontend b/Team-CodeForMap/houseapp-frontend similarity index 100% rename from houseapp-frontend rename to Team-CodeForMap/houseapp-frontend From b97c2c201fe46e48327c8a75f7769bdc084af4ad Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:42:26 +0530 Subject: [PATCH 05/38] Create roomRoutes.js --- .../houseapp-backend/api/roomRoutes.js | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Team-CodeForMap/houseapp-backend/api/roomRoutes.js diff --git a/Team-CodeForMap/houseapp-backend/api/roomRoutes.js b/Team-CodeForMap/houseapp-backend/api/roomRoutes.js new file mode 100644 index 00000000..5e255176 --- /dev/null +++ b/Team-CodeForMap/houseapp-backend/api/roomRoutes.js @@ -0,0 +1,28 @@ +const express = require('express'); +const router = express.Router(); +const Room = require('../models/room'); + +// Create a new room +router.post('/rooms', async (req, res) => { + try { + const room = new Room(req.body); + await room.save(); + res.status(201).json(room); + } catch (error) { + res.status(400).json({ error: error.message }); + } +}); + +// Get a list of all rooms +router.get('/', async (req, res) => { + try { + const rooms = await Room.find(); + res.json(rooms); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}); + +// Implement additional routes for updating and deleting rooms + +module.exports = router; From 8eb5de1950b1af5708b9e3700ac1f52f627a4c6e Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:43:07 +0530 Subject: [PATCH 06/38] Create userRoutes.js --- .../api/houseapp-backend/api/userRoutes.js | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 Team-CodeForMap/houseapp-backend/api/houseapp-backend/api/userRoutes.js diff --git a/Team-CodeForMap/houseapp-backend/api/houseapp-backend/api/userRoutes.js b/Team-CodeForMap/houseapp-backend/api/houseapp-backend/api/userRoutes.js new file mode 100644 index 00000000..81ba3341 --- /dev/null +++ b/Team-CodeForMap/houseapp-backend/api/houseapp-backend/api/userRoutes.js @@ -0,0 +1,115 @@ +const e = require('express'); +const User = require('../models/user'); +const Room = require('../models/room'); + + +// userRoutes.js +const express = require('express'); +const router = express.Router(); + +// // Define your user-related routes +// router.get('/',(req,res)=>{ +// User.find().then(users =>{ +// res.status(200).json(users); +// }).catch(err =>{ +// res.status(500).json({error: err.message}) +// }) +// }) + +router.post('/register',async (req,res)=>{ + // console.log("test",await userExists(req.body.email)) + if(await userExists(req.body.email)){ + res.status(409).json({error:'Email already exists'}) + }else{ + const newUser = new User(req.body) + newUser.save().then(user=>{ + res.status(201).json(user) + }).catch(err=>{ + res.status(500).json({error: err.message}) + }) + } + +}) + +// login +router.post('/login', (req, res) => { + User.findOne({email:req.body.email, password: req.body.password}).then(user =>{ + if(user){ + res.status(200).json(user) + }else{ + res.status(401).json({error: "Incorrect email or password"}) + } + }).catch(err=>{ + res.status(500).json({error:err.message}) + }) +}); + +// function for check user existance +const userExists = async (email)=>{ + const user = await User.findOne({email : email.toLowerCase().trim()}) + if(user){ + return true + }else{ + return false + } +} + +// Create a new room +router.post('/rooms', async (req, res) => { + try { + const room = new Room(req.body); + await room.save(); + res.status(201).json(room); + } catch (error) { + res.status(400).json({ error: error.message }); + } + }); + + // Get a list of all rooms +router.get('/', async (req, res) => { + try { + const rooms = await Room.find(); + res.json(rooms); + } catch (error) { + res.status(500).json({ error: error.message }); + } + }); + + router.get('/rooms', async (req, res) => { + try { + const rooms = await Room.find(); + res.json(rooms); + } catch (error) { + res.status(500).json({ error: error.message }); + } + }); + + // Get a room by ID +router.get('/rooms/:id', async (req, res) => { + try { + const roomId = req.params.id; + const room = await Room.findById(roomId); + + if (!room) { + return res.status(404).json({ error: 'Room not found' }); + } + + res.json(room); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}); + +router.post('/voice', (req, res) => { + const voiceInput = req.body.input; + + // Process voice input and generate a response (e.g., search the database). + const response = 'Hello, how can I assist you today?'; + + res.json({ response }); +}); + + +// Add more routes as needed + +module.exports = router; From d5d7b8dca901c7242917f9f00719ab99f12c0ad2 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:45:58 +0530 Subject: [PATCH 07/38] Create userRoutes.js --- .../houseapp-backend/api/userRoutes.js | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 Team-CodeForMap/houseapp-backend/api/userRoutes.js diff --git a/Team-CodeForMap/houseapp-backend/api/userRoutes.js b/Team-CodeForMap/houseapp-backend/api/userRoutes.js new file mode 100644 index 00000000..81ba3341 --- /dev/null +++ b/Team-CodeForMap/houseapp-backend/api/userRoutes.js @@ -0,0 +1,115 @@ +const e = require('express'); +const User = require('../models/user'); +const Room = require('../models/room'); + + +// userRoutes.js +const express = require('express'); +const router = express.Router(); + +// // Define your user-related routes +// router.get('/',(req,res)=>{ +// User.find().then(users =>{ +// res.status(200).json(users); +// }).catch(err =>{ +// res.status(500).json({error: err.message}) +// }) +// }) + +router.post('/register',async (req,res)=>{ + // console.log("test",await userExists(req.body.email)) + if(await userExists(req.body.email)){ + res.status(409).json({error:'Email already exists'}) + }else{ + const newUser = new User(req.body) + newUser.save().then(user=>{ + res.status(201).json(user) + }).catch(err=>{ + res.status(500).json({error: err.message}) + }) + } + +}) + +// login +router.post('/login', (req, res) => { + User.findOne({email:req.body.email, password: req.body.password}).then(user =>{ + if(user){ + res.status(200).json(user) + }else{ + res.status(401).json({error: "Incorrect email or password"}) + } + }).catch(err=>{ + res.status(500).json({error:err.message}) + }) +}); + +// function for check user existance +const userExists = async (email)=>{ + const user = await User.findOne({email : email.toLowerCase().trim()}) + if(user){ + return true + }else{ + return false + } +} + +// Create a new room +router.post('/rooms', async (req, res) => { + try { + const room = new Room(req.body); + await room.save(); + res.status(201).json(room); + } catch (error) { + res.status(400).json({ error: error.message }); + } + }); + + // Get a list of all rooms +router.get('/', async (req, res) => { + try { + const rooms = await Room.find(); + res.json(rooms); + } catch (error) { + res.status(500).json({ error: error.message }); + } + }); + + router.get('/rooms', async (req, res) => { + try { + const rooms = await Room.find(); + res.json(rooms); + } catch (error) { + res.status(500).json({ error: error.message }); + } + }); + + // Get a room by ID +router.get('/rooms/:id', async (req, res) => { + try { + const roomId = req.params.id; + const room = await Room.findById(roomId); + + if (!room) { + return res.status(404).json({ error: 'Room not found' }); + } + + res.json(room); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}); + +router.post('/voice', (req, res) => { + const voiceInput = req.body.input; + + // Process voice input and generate a response (e.g., search the database). + const response = 'Hello, how can I assist you today?'; + + res.json({ response }); +}); + + +// Add more routes as needed + +module.exports = router; From af4fb1c10624e064c89fc7b3031912ef60aaf057 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:47:21 +0530 Subject: [PATCH 08/38] Create room.js --- .../houseapp-backend/models/room.js | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 Team-CodeForMap/houseapp-backend/models/room.js diff --git a/Team-CodeForMap/houseapp-backend/models/room.js b/Team-CodeForMap/houseapp-backend/models/room.js new file mode 100644 index 00000000..6a3d6129 --- /dev/null +++ b/Team-CodeForMap/houseapp-backend/models/room.js @@ -0,0 +1,74 @@ +const mongoose = require('mongoose'); + +const roomSchema = new mongoose.Schema({ + location: { + type: String, + required: true, + }, + frontImage: { + type: String, + required: true, + }, + video: { + type: String, + required: true, + }, + isResidential: { + type: Boolean, + required: false, + }, + isCommercial: { + type: Boolean, + required: false, + }, + price: { + type: Number, + required: true, + }, + numRoomsForRent: { + type: Number, + required: true, + }, + isHouse: { + type: Boolean, + required: false, + }, + isRoom: { + type: Boolean, + required: false, + }, + isPG: { + type: Boolean, + required: false, + }, + contactDetails: { + isOwner: { + type: Boolean, + required: false, + }, + isBroker: { + type: Boolean, + required: false, + }, + }, + phone: { + type: Number, + required: false, + }, + roomDetails: { + bedrooms: { + type: Number, + required: false, + }, + bathrooms: { + type: Number, + required: false, + }, + balconies: { + type: Number, + required: false, + }, + }, +}); + +module.exports = mongoose.model('Room', roomSchema); From 624dae9e12e550a55cfffa6f5f4ac28aba76b7c1 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:47:50 +0530 Subject: [PATCH 09/38] Create user.js --- .../houseapp-backend/models/user.js | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Team-CodeForMap/houseapp-backend/models/user.js diff --git a/Team-CodeForMap/houseapp-backend/models/user.js b/Team-CodeForMap/houseapp-backend/models/user.js new file mode 100644 index 00000000..152e454a --- /dev/null +++ b/Team-CodeForMap/houseapp-backend/models/user.js @@ -0,0 +1,73 @@ +const mongoose = require("mongoose"); +// const bcrypt = require("bcrypt"); +// const jwt = require("jsonwebtoken"); + +const userSchema = new mongoose.Schema({ + email: { + type: String, + required: true, + }, + firstName: { + type: String, + required: true, + }, + lastName: { + type: String, + required: true, + }, + userName: { + type: String, + required: true, + }, + password: { + type: String, + required: true, + }, + +// isAdmin: { +// type: Boolean, +// required: true, +// }, +// dateOfJoining: { +// type: Date, +// }, +// salary: { +// type: Number, +// }, +// designation: { +// type: String, +// }, +// active: { +// type: Number, +// }, +// token: { +// type: String, +// }, +// image: { +// type: String, +// }, +// userEmail: { +// type: String, +// }, +// accountNumber: { +// type: String, +// }, +// ifscCode: { +// type: String, +// }, +}); + +// employesSchema.methods.comparePassword = async function (candidatePassword) { +// return bcrypt.compare(candidatePassword, this.password); +// }; + +// employesSchema.methods.generateAuthToken = function () { +// const token = jwt.sign( +// { _id: this._id, userName: this.userName }, +// "qwertyuiopasdfghjklzxcvbnmm", +// { expiresIn: "8h" } +// ); +// return token; +// }; + +module.exports = mongoose.model("user", userSchema); From 9084dc5214f79af3189ab1f60e4549bb9e23944c Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:48:47 +0530 Subject: [PATCH 10/38] Create index.js --- Team-CodeForMap/houseapp-backend/index.js | 35 +++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Team-CodeForMap/houseapp-backend/index.js diff --git a/Team-CodeForMap/houseapp-backend/index.js b/Team-CodeForMap/houseapp-backend/index.js new file mode 100644 index 00000000..b922ffbd --- /dev/null +++ b/Team-CodeForMap/houseapp-backend/index.js @@ -0,0 +1,35 @@ +require('dotenv').config() +const express = require('express'); +const mongoose = require('mongoose'); +const cors = require('cors'); +const port = process.env.PORT || 3000; + +// Routes +const userRoutes = require('./api/userRoutes'); + +const app = express(); + +app.use(cors()); +app.use(express.json()); + +app.get('/', (req, res) => { + res.send('Hello, world'); +}); + +// Use the userRoutes as middlewar +app.use('/users', userRoutes); +const uri = "mongodb+srv://ankushkothiyal2012:kcGkZMFdKuOeq0OT@cluster0.agvnxsg.mongodb.net/?retryWrites=true&w=majority" + +async function connect(){ + try{ + await mongoose.connect(uri); + console.log("Connected to DB"); + + }catch(error){ + console.error(error); + } +} +connect(); +app.listen(port, () => { + console.log('App running'); + }); From 3a48623716654830570d8afd8a7628136b1953c1 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:49:13 +0530 Subject: [PATCH 11/38] Create package-lock.json --- .../houseapp-backend/package-lock.json | 995 ++++++++++++++++++ 1 file changed, 995 insertions(+) create mode 100644 Team-CodeForMap/houseapp-backend/package-lock.json diff --git a/Team-CodeForMap/houseapp-backend/package-lock.json b/Team-CodeForMap/houseapp-backend/package-lock.json new file mode 100644 index 00000000..af00b214 --- /dev/null +++ b/Team-CodeForMap/houseapp-backend/package-lock.json @@ -0,0 +1,995 @@ +{ + "name": "houseapp-backend", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "houseapp-backend", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "cors": "^2.8.5", + "dotenv": "^16.3.1", + "express": "^4.18.2", + "mongodb": "^6.2.0", + "mongoose": "^7.6.3" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", + "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/node": { + "version": "20.8.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.8.tgz", + "integrity": "sha512-YRsdVxq6OaLfmR9Hy816IMp33xOBjfyOgUd77ehqg96CFywxAPbDbXvAsuN2KVg2HOT8Eh6uAfU+l4WffwPVrQ==", + "dependencies": { + "undici-types": "~5.25.1" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.2.tgz", + "integrity": "sha512-uNv6b/uGRLlCVmelat2rA8bcVd3k/42mV2EmjhPh6JLkd35T5bgwR/t6xy7a9MWhd9sixIeBUzhBenvk3NO+DQ==" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "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/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/bson": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.5.1.tgz", + "integrity": "sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==", + "engines": { + "node": ">=14.20.1" + } + }, + "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.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-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.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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/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/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/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/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.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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/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.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, + "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/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, + "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/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "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/mongodb": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.2.0.tgz", + "integrity": "sha512-d7OSuGjGWDZ5usZPqfvb36laQ9CPhnWkAGHT61x5P95p/8nMVeH8asloMwW6GcYFeB0Vj4CB/1wOTDG2RA9BFA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.0", + "bson": "^6.2.0", + "mongodb-connection-string-url": "^2.6.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/mongodb/node_modules/bson": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.2.0.tgz", + "integrity": "sha512-ID1cI+7bazPDyL9wYy9GaQ8gEEohWvcUl/Yf0dIdutJxnmInEEyCsb4awy/OiBfall7zBA179Pahi3vCdFze3Q==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/mongoose": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.6.3.tgz", + "integrity": "sha512-moYP2qWCOdWRDeBxqB/zYwQmQnTBsF5DoolX5uPyI218BkiA1ujGY27P0NTd4oWIX+LLkZPw0LDzlc/7oh1plg==", + "dependencies": { + "bson": "^5.5.0", + "kareem": "2.5.1", + "mongodb": "5.9.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/mongodb": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.9.0.tgz", + "integrity": "sha512-g+GCMHN1CoRUA+wb1Agv0TI4YTSiWr42B5ulkiAfLLHitGK1R+PkSAf3Lr5rPZwi/3F04LiaZEW0Kxro9Fi2TA==", + "dependencies": { + "bson": "^5.5.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "optionalDependencies": { + "@mongodb-js/saslprep": "^1.1.0" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.0.0", + "kerberos": "^1.0.0 || ^2.0.0", + "mongodb-client-encryption": ">=2.3.0 <3", + "snappy": "^7.2.2" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/mongoose/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/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/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/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/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "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/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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "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/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/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/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "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/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "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/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/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "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/undici-types": { + "version": "5.25.3", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", + "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==" + }, + "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/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/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + } + } +} From 65a5f5771ab8abc19533b32486e4f6240dd8e820 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:49:35 +0530 Subject: [PATCH 12/38] Create package.json --- Team-CodeForMap/houseapp-backend/package.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Team-CodeForMap/houseapp-backend/package.json diff --git a/Team-CodeForMap/houseapp-backend/package.json b/Team-CodeForMap/houseapp-backend/package.json new file mode 100644 index 00000000..a135e077 --- /dev/null +++ b/Team-CodeForMap/houseapp-backend/package.json @@ -0,0 +1,19 @@ +{ + "name": "houseapp-backend", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "cors": "^2.8.5", + "dotenv": "^16.3.1", + "express": "^4.18.2", + "mongodb": "^6.2.0", + "mongoose": "^7.6.3" + } +} From 50de5eab4a992b423bd1513ac95342cea6d27524 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:51:30 +0530 Subject: [PATCH 13/38] Create can you tell me the distance between the india and america.txt --- ...u tell me the distance between the india and america.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Team-CodeForMap/houseopenAi/Openai/can you tell me the distance between the india and america.txt diff --git a/Team-CodeForMap/houseopenAi/Openai/can you tell me the distance between the india and america.txt b/Team-CodeForMap/houseopenAi/Openai/can you tell me the distance between the india and america.txt new file mode 100644 index 00000000..091a36db --- /dev/null +++ b/Team-CodeForMap/houseopenAi/Openai/can you tell me the distance between the india and america.txt @@ -0,0 +1,6 @@ +OpenAI response for Prompt: using artificial intelligence can you tell me the distance between the india and america + ************************* + + + +The distance between India and the United States is approximately 8,000 miles (12,875 km). From e1ea85d69520f5c754bc84d25fdb7866c384db6b Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:51:55 +0530 Subject: [PATCH 14/38] Create write and mail for resignation from the amazon.txt --- ...d mail for resignation from the amazon.txt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Team-CodeForMap/houseopenAi/Openai/write and mail for resignation from the amazon.txt diff --git a/Team-CodeForMap/houseopenAi/Openai/write and mail for resignation from the amazon.txt b/Team-CodeForMap/houseopenAi/Openai/write and mail for resignation from the amazon.txt new file mode 100644 index 00000000..4443791d --- /dev/null +++ b/Team-CodeForMap/houseopenAi/Openai/write and mail for resignation from the amazon.txt @@ -0,0 +1,20 @@ +OpenAI response for Prompt: using artificial intelligence write and mail for resignation from the amazon + ************************* + + + +Dear [Name of the recipient], + +This letter is to inform you of my decision to resign from my position as [Position] at Amazon. + +I have enjoyed working at Amazon for the past [number of years], and have appreciated the opportunities for growth and development that the company has provided me. However, after careful consideration, I have decided that it is time for me to pursue other opportunities. + +I am grateful for the support I have received from my colleagues, and I am confident that I am leaving the team in a good position. I have enjoyed my time here and wish the company continued success in the future. + +I will be available until [date] to complete any necessary paperwork and help with the transition. + +Thank you for your understanding. + +Sincerely, + +[Your Name] From d5922ce89862dc91c6f09757faaef4a2359cf5f1 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:54:52 +0530 Subject: [PATCH 15/38] Add files via upload --- .../PyAudio-0.2.11-cp311-cp311-win32.whl | Bin 0 -> 98368 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Team-CodeForMap/houseopenAi/PyAudio-0.2.11-cp311-cp311-win32.whl diff --git a/Team-CodeForMap/houseopenAi/PyAudio-0.2.11-cp311-cp311-win32.whl b/Team-CodeForMap/houseopenAi/PyAudio-0.2.11-cp311-cp311-win32.whl new file mode 100644 index 0000000000000000000000000000000000000000..245f92228c8dbeda081579f7a5026c22bb95f844 GIT binary patch literal 98368 zcmV()K;OSmO9KQH0000804%hsRH>4hThdhl006QA02%-Q0AFx#a&%#JWNB|MV{kJu zF)ep#ZZk42aCv0py$^U4)zvsWo86EF7G}|nt{NoPs8OiJE-LAY-H=RzKy*XM2CE@d zEx(wmMc4^YAqFR#FkS{?m5Qxxv88YEtM4mTkbnpqpxJ<^Fb>~8*GZNK05e81=U;MvT~o%`q9bI&>VoO{o?Q}Uf=!7d1b1Ac}f2rUBt7ZCpW zzg(LjjGwf7ys&-rYnQdy=Dv2>{OWs`WiMI!ga5VkyZ2|`{oMy1_(3@PuJ2_pl^@8y z_krxf+sd-<|G_=qyLQ~TF*#-({rXS;<3;t;Pp#kX(~CcS1+IS{=E7Sb zb5HLxbUod>i>`gW+u=I3$I92+yO-+d{d6o`M??OdbUjVwmJWPD^(-Cu)Vz-QlwbSl zdEUKuS7ZC<>T6IEgt@kK;d=dtcUfu2g|y4Y+Qv^5oN0paUp#I0-vKFZxXDh#M>pNW z?I^R1brpKjIMV5LfERM}BK*oPJxkMsMcDqbG+_$l5~68Bd?Wxn(u5Ni!Rvd|gsd+a zv*YkSkeUE+_NJXX|Fz-otq8-lBqNOjH=bKo)3S9c+skqvjuv4I8L{*G1S z^Cx%sUtjf6mC|l3tUTacF{AuR^ql@w)Y^X zSlF6`Dp@~PTOnuc#zwj?iS)rOR^09Oby5qwIZ^6(CJVCr3_!})7B{n54u4yC42!c? zX!CTp7%^n0Iu5gR+tu3~kxuzqRtJC-bHD(K@C3+t2`hGmEKtX@41QmQ-Pm81f@Z7p zqp0%-p2@{=i>`3`({Th>rMH~LP#iLiB#=P3afDY53d>@n0(mZ1_Zaz z7rg@ru5I8b?|!}em{ZVGw|CA zzvtoi68v6)-=Oi&8FBnAlF9-?fU(as>1murPfFBLc>o1Oay+jv4CCQhN_^7tYs8o8 z;~v2cqj&-?EjT4YpVRoo&Myvr=_7HlxcP0!_!|7$;I|KcM?E-`IcyGxBhA78*&T!b z*;C;?<+MPaL?DN~Yx0oSWjD)rma;$=@h1BlAiW~`u{c4B|51wLz7&vKvVlksj0Ar|esi+8+9Zq1Sh)+Pr1LH6@CV(iM=`;^KQV!{ zjCwCQkBn4bCRT*#tGkMXIG@uNi<1fkfw`LU9(0Ds1pNC~ebSN+HKBB+8>_#i&rBhq z8g>PKHHB(IT!i#LkA?y3%ey`srls(C;-q?7+@2bIl=&NhqY@GJw5~NpZZ$qiNhQ`^TbNa%)mNRKZreVB~_DGyuQeV2yzPfslbZ z9XS;tT~0>?=K^kJnEJ0`(tuX-HWV*%tJ2%7$e~JIFx{)tF;?V7iaw!Ar@GU8hav`M zjzi93$hn;rL(Udf3_16(Vy`M4(WLE|{~%N<27$W}|DLLa!}wz`J;T!g zJ(=8c+Ts=uaLb7N{1wZ)hnN4#_~n|CJcesXm{Nv)^Z?2$f~*oyKLCg)j2m)}A!i$M zmev2V3LTX+Lb@11>g2dI5noJ*FDAqn6XJ^pBmSs`_yR(F0U^GC5MMA9@rImBa18^3 z1|bBakb|Ru!#{ytz(~7NXFJqPyfJC<-1t40zNoB*OzFNT-MR$X+2VR{Btg4|eebw2L#+!$lLDZnYhn-)p51X=3Y}hBDPGu7#|A{v< z5YwP;{S+QRwR;(xAo*%de%E6LdF(y}34mD)if~_ekuRY&f6m%`ogm*VeYqo{FL$Qs z%d;JzK3_AEzMPq=FFP%L*@7#A@(L72{f{W5#&IEafUC^I^vC~K=_BW#(}$(+C~@cV z3E>)gT-n(xanwx#oPt#-Ze%^{X73 zJ=X+@LMamg_wav{WRH=xK(Zns%VQ+@@eZcG(Lw#LG@8R=>Dgv-LO&aa8Ou;eJC#=r z7@ zDJNz-3rOJLGuKn9v-=(>wss$6@VAQEPAo3x26g{wUfvlwDz1IfX7w0qpi;`i4nbTm zWA5cn{pV08^;>LMfLRfgunYLepYIeSS78!DE`Og%Q(^*2OOQM19iULdwFFd#Z?uX{ z9>@lFquFBFZ{dufk@+?y z4dYMLU#F7_dNs^cknaTKW90*^B(5Kc*@Tb9+tUNvamT-m4kB+ZI3r|Je$p@q1>$;~<274~knEDW%HZAQlZ@V7xRJZeooqY{=h02bl+Q}{+KiL_h$^~H-p`E4LI zk~O-m@+%VM-{j>zRGzIzz#@mlh6zaOjjQ1AZrzSNFfuaNUWL~wQU88%?*3q@k+}!p zpOI!m{%9e(Z}|eppOp;wUelMi+6Xh%*jX(y@VQ|G%Z$ve01WDQRx(g~u*NXoL-NTl z5Hp*hX7goPO`5*%e~?~XEvLIk+Vci37}CHQ-azw^2EMQwI5R>6@Ur`7#!H9@Bl8HP z#Tsd}P)s)7XAYDv8f#o)rb5%e-ml%EZ;JBPQ|M{UDW^Sk{Bihw(F#!ZBXLmF@){BE zV&ii-l{T|RFJgUtHvDb5{LLmB?=*`_73)A1Z8HdG1tU_|HoNyS9Qsu%MYsrCXL5JJ+dza zC0_*}(+D3MO?*tJZU-!UP{*exI=^TW{dTAXO`Qr*b?51~<1E^v97HoPG9!%??J0f5 zE?fA@ykd{oDAG(uN|^(1E1j&w1(m9HR_sx2-OE~pdX!0SDf_AZ)dRqyQUEf6K2nA< zuLs`*kZ~6Q;|BHbw31kpdV;=ao-{@LMO2BVf&M>B55SwC{@FJZ=CScYA0kZx9nk#QYNH;+j`vNYT*svZa#T6c*b~c;k26MH5t#+#- zo8@7W2k-%t8(^e}O1jxt=JmfSHr!|92>GnmE)lI1@*CzEm)HV_zUU#u1la!UY;j;>z499P4}M(|1W>nvMX4n z$JePkcj0mtSVyz$_I_Vg0Q8-ituUG<(1dT*ufMR5gB|Pd5A3qj++GD4VenO3vV(5E zTmZ=AH;KL{=&vjUqyRjpH=i<9F;u1OM7M5~`>53P<-5|vh7(v*sh8c7Re_3_z?M3+ ze8c~S*m#J{0jK!Le~>xQ4s%|bxb7)@IGzDBMH?8aS4&Q9W)`%xSX^>k5OYs~z7Ma0 zPAw3CYapt`;MD`OTHw!uZHvXbx-j)P+#JSiI^4X6@4I-)^cjD}j2%29zM4Lx+kbZH zb9nPNG56qNaaorWAC8M|dT`LgVzKT6|CwbMYo5=P{f^0Rur_U;lP!(=d&FCNl#@33 z!z#d*`23$#FDUnS4CB`|r(E`7^SAG)`mJLVc?*u;M-Q$9MFZM0p|3*^SUlP5%Rc*wVV6dH6pcNY&AO0@!k@#7h zj@f>5LXPa>Vi2FAG)XSol@N@CU(ay-syj{*c2Tl&fvYVrBAsEo_8n-chkB3gAuLK1 z)M1>7D;C3if%2MmWA0`LT92pmNhJmU(-Sqa9n?|4^nS?5vYh^`@r>FHXBlCqgUfqk znzKy*{UMuK2(ZQ5DE7yfzTi6q!>wU9OUV6yHDSGYVuT5ccaz{_dl8k|Oq)NJoVhOP zyu3rDOp!zKrF_U?C=0ByWQ1v8az3K1=7_$ybLfaZW2TUNfoUPc6x3>A6mAW24GIk7 z0wc3Mn|F=%Xp%EX+kPSJ=mhN1mTX*JbcUcefBP%-2A%*Nki3v|JmAd=?M2)cuMtA} zn(5G=mtFW|tI(HC7if_%q`!9q-9g$LaHq`)mg+@M*@QCv_+tF~=qFh9G+(p|d7bPJ z*Dkcbu{4O@g4Q5fC)+E^T3_LGw=Fy&AH<#i z^`#$G(Q*M)P?e}=us&keH!V>gk;u}v)*@XvIstK*j(y}Zl+-{G5lQK;i_RC_?!g0$9Ec z%9jja6|3X+*NR@vu837Bq z_|^sJMv*1Bm`nVsN%b{BP!lts01=_YGvo`vxQZu@tBbdDHpC^`-Jn#M3+Es_q_u-3 zhXV9{ueM@Lh4Iols92wNmyJ{v5WFjBVIll$EK?EE-vTeylg;n`tTTLrHlO`F*e zmCsCmQ>!x`Ew&ZIL!9lvH|%ih$+S;?%?>MnwtupPQDxoNXe(@1L$7|$7|7L@AhGRIE?PIC~p}xxOg2w zfvkV=W1CRpRH?My0}o8&6+sp^W%0MmKU^$co8Al<|3%-y!XI9&oVCfL`U(P$?$OHG zGpFgL<;2FG%Q~rnXg`q{L;*~*~*uN`9}8_1W*WdyD%#~0RrR|w8^4L9kkkB zTH_1__1zn7KzAJ=6y5rVmr;)hP~~6_Ahswazd;m0g|0{`wCggQHM1e}1W@?a7@Gl6 z;yUDq?r~OSgfeDQIybHpCbjg!Q2X(TFXxy0lKeu5u9=T4vub3P`TMpc%j_J?G7ZC7 zCakR(Yf-YTD#0@01j{raE&t{Wu#79oGDu=3J*0AuI4K|`xo5=)+!G$kJ=($)?(q@# zP>a`}F}bJxt8+9QkEMl3$km zpU5wd{wRfCCUJgQat?l3Ve!kSkEQU-q%Y@}B}sm{ZzO)n{I8+>GRr=gUz{etWLI!v zS0gQ`Axb$lLYcbbAl$2wJ@8k*6xXBU%0W-WkiW)W!8FbB3es^<|K>kvFx3Lw^SE*! zvQ&-Dkf)UC3%<_P==7-Q>KIDd9|{e^%g#Io4v0U|y^`-95o~ zXh;&6v|HWbal3znM7!|_fY5#U)@(?)$CgMqug0nW@-d`9hZ?~Y))9-eo902p5ZA9o zotV~7sjEJNjc4_wt~=JMk?25zKUqxCh49s2(8;%;;qBET9XK2k05 zQvKHHd``7Ni5#m(6O#Rc$NaD(8+d%mk#|Oge%%x#TPJHvknOAgmucq|gE|YM%>(vjvCAS(NcFd` z`cSQMbMuX8Eh>`5th70}1&a)wd(>QK5ud+Qe7@3y%Pk5SW(XD-iKY7AK1j$|vEg1E zT6%|zXqyMEADHu6AR8AhJ_cyGbr*~1CIsrVwPpH`Kj2*)g;wdsD126DnRcMM&=D(g z;Z_$bcGP5tfB}f^8ce#Ig>)AOn)?BZkO}?@)?BR8g$ZhrOKHpYzd{HlE1#VeBYOqD6L=7p)QWIPZ8r+*PM?t%%Bp<;=&8ud=EfcNH(6F3S0~F| zERe-Ko0Ky)aUG~8Lj4a5h45(qY?rv<8QhMjbwM`rjsRi9Wf-4)jA@&yr_LAL^K|Eh z*xfADXs`xW?ke`zWi5TeUk(vt&UQ`WYE@ zV*N@2Z6$z4yP^sSR8KP$NoPea%Z0`hOgQe$BM3|N#TO(X91kT=K7i!NG4_~=v0o%G zwlM``)nAG)l;HJ0l!S1)f42K!`O9&&s2p*1EHeQKGMI&{O@J%;d`_ht3Fjd&VVAWL zN@Bsn#D(=Mq0tHcmF_y1wF62Sz6wSVj#7QT1xNT%YhTq`Pk}zLdR*Qz{i*2rzLe(@ zCy=AE(jkOz_8rZ;-CcVlTj})m(R>Hivk|_OmAb6?4eaOZz<$1z?B^KT&&~qm=-b^( z--4ELhM_%M+N(DAL#tDihY~mFZZYXO5=PPHr#+TlkZ>;dI2Z-ZdE#tK2B1U9l+dMR7qFmQ-Hbo%FQ`qgqkXoqiiKm#kNWP^*=lx^fW?hzAM7lYs=7SFYE7vzdk8b$~)BuG>O86i()P7YWd@ zwtfXM!xCTy6}N}{<@(Z2CZ96oC@3dVHL1s{bVOOL+rnRqNpB-sx@H}`jC`w1BM?2EariLj#Sg+;6h0yY=!(C;!6j_!j3+vBW-PYJnR7! zi;<_!VkW?552SV5nbdX&#Ecz!OO z1@^iQW^+>K?<;zF(RMHp1ikiUGk+R-DZ$Pju%R%N+VZ1m0GjKs0+1&4%x2OghLB-A?msCAze+ zlAQiljGzKq`*cVH8-Ho_GMh;q>`inf@hXSy$oXA4Q#EOmSokIg0JR)F-ds5qmN38! zTgnXiV8}`_503W5_fYGch(lVeqkx!a`b8i)5(-W*FOEvkjmuEFlnQw6)Sm~t@fz$F}0*6JOKu4 zwEuP1CeCaHZKJgt=C5PGwNe{&jcNitTxB^nTJHrz7I3e=SV%0rJ&DW{KrMh?!fF%{ zTdHdhL7VN$!JE_)z>^qRhcy%gLB1iZLA?at+ohI~Tpu7?@MCeIgl>)n*}4yFD%r#> z(-N;*a{LzY`PbpyoT>KKl=6Mjc4vzF#KKlAo*N#gtj-m}8N``5O{j_!nYUp6IlL~E zxWKm{mt4iYFwkj9Uk?mM$dmV|3Wyv)y5+49Q!HPF@Qobz3ST-mLNdZy^8m7;6h94t&GbBFHh1HVY6-#h^nP?EL zIv|i}xSYL=l&E}UTX8e%Z~Y+M-b0mLsnofQu!j*9gBEN|TWe&_N7Z*!P_IUPy`&f2 zus+O&qAQO8wFULkWHPn4@^RxuY)qeil(g+6`71AbIf#!Fh@K>f_cP+ERQR&K6h3zf zeDx-L?eC8W-wW>#hYuUmH@$DdXEAh*%^Ja={@aQCnG-`$|LH`O$6jUib3)jKG_H@X zr)j55-&}(GC$q5`DGr35D)cu0%$#8579f-Bn0zcrB)uVGz2ias){hYqn26#iz9ylZ zB1zFbijj;FpKm*tml1c$19sD&-Hb$@E2s*(CWXIEYZ$f~lU73dy&rHo@|Zlm_X`Br zrFvOwD#RZ?Z9*)$SV?^7+Ya+B*_X&Usr!>?Syn%dlI-j6CG0lYOKTu0s~+pjI`oX$ zHbHH~1w61g$56JDUx4gZZ;TZ=$fnPT1)OQ-jcY!zG~RG8GPv=Oxdu00ywM_i(A3c) z+u#ywZ02Js1gkT%(LL!2^SK6$Ld;0Am-5oTOk61ERV3d-Wm_p>tC@{gRs-2_Wzcuj z$lL^1H4;6GJDqiQZGp|moJ&bt%%lQ4`jV|b4&BfkKciaBMa!;R01qP0&-qy_Ls^j} zSV)N5G4oN-9IU+0-NI+`$a7S!mGKSxuv#B6b2e@ogx6nV&PY4;2LB@Sf#i4&T?QjZ zaD^l8kk40M>4Mud`6Bf9Tmks*zEFv$FCBxA3-A%8czQM5iMj2#8u|2DTy$H|t{gU$ zR}c%RKWWWyBd-4+0ATFEDWAPhZraB(b9XtRaX$R_Lrrvh<8z$;Fem8&258*&h!eLLYtj64su zM`YtibGk0d&7C6e}=$UI0CxldGrcLwdf$mgso^dmg2pd#UGJ zlRfti>pAap7WDZEtIv#jV0D%Y=l!qA)+&(LaKxCRK0Bm{E5!M^qi?TQ~Hw2ASt*A{sg{*>A3;F;MR(!R4-ooi@0QU=Gd_m@>Cr9+BQ%>D8R5<(kRJols;rwu}`J^83 zt}pxv)VKksKHpJQ+8j9qW{fDcs+9+QonYCprYYnaA#U6caHgw;8+&H5CY)vHRxN*8 ztpq)CvnKVxR65Vd+>ZJQ`hn337B_e0cBoF-w}Lc+NG=90?F-ZHuus`HmFo%TL8?ZL z1@&usET8qr=P*Z{L^C?M{-?ZdDEr*J;uclj6E3RI_5Zfqw)3H~3Z^J^DJ9V~fQ#+K)k>(!1SLGHLO+?P&Tql=*zK>OW$&>-An z0vf)|s@$ubC0~hlR{k^^Dy={UCojOLB1liiNVLDQCd_KaAs&O@5nQGsKAjqqPN2xp z^*4b9U7B2|>1R?uvajv(89$k0mg zX~oln`cq(MfIXp=9MOt{r9u7b8l+&iX_#9`SP3st-8BeCVPl^VojD;JP=p+m{?QTe6+AyZSs;_WpbDt;#l%Gp)n}WvKZp+Qx*kZT%ljp z#T8-+51J5?R9vB#bSCsUU|cI*O(0Qh_!+fsa&xng_EL7JVyioxu@83@yD!|D z4Y%02ZdZ*{UqA!qU~#ygE90Vs2Oi1t^~Yt|+HGbfPTC;8fNvz{TN}=J>y&E;Z8j(J z1d@5`<#{7*H0KZ6XwK&w&AEd%nk#6}__A7rxDDsrj?zht7$+X+8w7z7Tv|-o=Q84sx?ni1bn@WYt_Zs)D(?3{m?Lj^; zUvR$+zlY)XIQ)KNJ`3r#^tALed-^&4IfnXk{WE+82I1?T5aDZXCxbiO#`@v- zx_bR^d}Xd55nunZS1IDFa`!NNy`)+A`ZD@tAd|&JFH2q_g4sWaFdZaV4G~JcZ zO^>g$JQVV7yRSBj$u85LbF5b#kLLStyKh-KE7!X}^7U2d%il?a6#~)(YmQm+0U9RS zZNV1%dtfR^U95?;E9n%Y*=RD&Oun6&Ejod6+8z6Rdd{2&#wXm``zbm3s=HcyjVTzyN=edvaS)lXN~8jl0X5g`rJV z>K!y$UJdi#tL8c~z!*6izL-hzR4nagrUqXbx68dSJl!5#+S%zMA-{)fzu~cd*)2Zu z2Xt83M?{la#d5O>@}*3Dv5<|h-OA$?(5)+Cgul~Q>`DvIN8-q<^w#E)|46YHon@!> zXcE{QbvtR(7X)E|m3W}+j}h2oRnf3w^EertD{|2?tjRa9EvP@P)7 zVQ=d{%}SE>*{rzH&;9S!MxH@$AYUKMhErI(I0+Ov7K8j9;`6QkSa>{h?bretiXw;P zzjddv&j5BRq1?0sFG4uee`a|!uhPjrfmdRI>^%8RJb?34b}P+>cU)?l6z zFN;&2@rLE(O7d-refWA9sO;i|$cX{+O(NHPttwciKSvv14pUzf8!%kN7gZz2FhZh< z*8CdlFzt}4b)jcYU*1mQg!v}_5&dJB#5Nu#!TG_l&E6VhO+1!y8;_4rBgeTPeguPs z8C6&0r`ndbFlsTNv}W_Rd24=xVCkbVVpLiwYqBC75*puTjK^xCumZ&U^+ z77U99!SIyLDplm~S=y!SqaBeLy{C1J#%XC-qq?IjH9kSv=j5$o>{P7Da@0?}_eD9( zmqh!!l&CwX5y}D4FIFO=UCKV%tEnAbrmwk|P+udI=~vd6DnFRH8wvGX?=NjOwf&7< z6bW%|g`Y~9I)4|8sci=)6flB5srhfyB5#vB%G(3h$|6$1m5Xeq+K>JfDJrlSnT$)D z8?f+6jFjQClZKO0Y4G2eU(h=fC5Bupw(qs|B#@4zKwE_5UkB;{cj(BNbOaPFX2*Jw@iZR93fQQa|DpwTfhPoZ<| zL9g0GvBS_eJT78T*aH#%h>;I8VyJBNyue*{D1pa6RGEPveE9s4a}M9XNF>KNk<`5~ z0+IZofwxj424iHhh=jI#Otf)h2Iu}PB;7$q4L3@!P6)9{%_%bKPBZdHF0rK2Uo6u+ z7fTRFUYbHJ&shbog95}}e@XG1y0&4snrDWAb)P>Z@!yIl`tCNn=rCk*MgzuDPiS3{vL5|PslPP6S3v;4aQCi zoKGwf@WA=uId@_7xmfrfhsSzNQQb|}mh?%K|9QWlwWkIg8}=l!7DkaiD_BN7Xm)HT z^4{eA!BV~Ro)nqdb0#5ED{&cRNADSf{JSmriqBsvU$F*LzOJ|%#mX?MbZ#rmHxaB+KX}wsVdbm+lwtX0 z2DN4Ql8W5;vLgMbR>ttV7PZzTs5RW2Lax?%1j)#@&ndF)%vXqP`?4ti_x_W*X7PZQ z&?WGEiv+8!wDg4pzpWSs&zYg{{Huoo5Inae;2|c~7*)xot}P*TNh(_|*^ks)T!Zmq zs6M7Fey_YXvG{%SwdUgY-}VsJM?7D1X#70I+hH(yfkWM4g(ALz%|GN+KC+2x(MvI* zU#xba&$Z@gVFDhc!?6fLbS=t_u>esmJltbBAKy!d-rS9)QoVwc@rohz9c?y!NB=Do z^RwR)IuTNJAxhK&2M^2)>i_*RU#Bae18A8YpnD+bGZF!Xv&cJn@H7)Y=QI;Hry2FP z<}?#eOfxJN!+>fbF$cU^mxypguTdPsy>;iXPfBqBl!siFOTru{?Y}!$tPE8&vjP`w z_74E;RqP=*?)1+wcluF2C^rk?skGTY(Ht7S+mC3iH_?iI3C0cjn`DbSliU6n%@)*m zCzGk!mFub&8p~YzFL#^Bqg^#C1pI%4y?yl>)86LN@+Fd-xDuK$xxd4jklN7dUiHYA zS=}|O6IS;IEK!>chPP#MQwq1bPoXy>*~1n3>{!D1#+Y?$3H6hAEaTf@8Q**_;?y9K zNyhhuRYQ$$l4hZV@tqQ{&E+>rZWP%dxoH)51QUFJgjIC734XXNsS9%xJY_`~ zOz`*je5nb3U|d1S;H7$Lo2c;RVer@p7S98upzpV z90PDQw>!Mm8Kx&(0`6W6+JRFDS71UQ7ZS?xw6C zXGPigXKD(%l+`B$WYHoAD|X9vwb&C-i`^;l81JtfN&qyz;UVMu1Wh?Gz8*Hm%?h&A z)y*kGyc`A>MtN6HbDDb}3LhA07; z7XGpVldS^Ke)$tfO`DLKHk;J+buh4N?j-L?eaxe{(X>e`e;T+hCOy4qI8|*LfvOIz z;4Q?8NQx58lx$Z1oF+c8-xuv~#r-33V-!f*y*Bh<#E^@rk!Gma$?~(Y>J_uam!#%d zc)DA_$caq7UvSg$wcV4svtJG!U)w#g#fg^-S}=gTTLkk;-&~nOukN;@2W@@QX1CaY zf{;mDcLg3h*9liZDoonK%D2Mn4tU+kUwh2g?$L|IZya8l1#kDW{X>i6sb|YFl~(7P zGh3mBRc}CnTc@9F63Ay5?p9O#TUg0ff2%wm=HU`%pcwl(Fe>kXHiEn zUTQ$G{4Q&Jnj6vfpz*Hp(pH|ho&xv}g|nHhlm%uP9gL2GBGLgEV~v(8E?e*BInSe< z^v<1lH#fDGT&!j8pjzf8a?To7OJe*gL2BPAh^LO|P&CA^njn@b8r0 zk#dD-Oq{2S2YPraK*QrxaX^z*hhRLny{YAS-sEBo`l>@j1h-)K0Bd^X` zHxC2$3~i2M@&VS>%!=HaXDoB1srdtNudGV*2=eGyJ_-76w|a{kQdwb|M|6YSvB5(z zJbBf8kJ6guuXC>2%PI$qS~u7G)P;CbBP(}muHO?d?O4Byi?UKr_e3qJdIXN03kzj10#8T zMz;q~uK0CI0ef4901%`$uimtFNQ!dPT0wKHmCvh+6**AN!lP_(Gt@1_0(jK4K+?u2 zavHa~s;pNQy}H=zT4@?BY%-hDnzk5V`E>H(H_vE}k~FdpWT!p>VZsvxC%==_kHnqh zwc51B>fCRhT^uX?Q)^CP(LwuTbmU8opvn!}&ynoPj3vRO9Dk5h8#me{ zV{7ceQZ|9j^rC1LBOz26#%kryRbWK1)KUYg>-kbtqciaEwml|2hu#H zwN=b3rB4B%kt0UVkU;aG!@i7j?Ky<1BPWDw+Z4M$t%4R;gW^uf8w%o1s{R-N!!opT zKv5Q-TBg&~f{tYTxBznpHl+83hL!%LJW<-4D2?FB3z?LKXAF#0rDn*gN}HI}P$Q(H zbcjjh?is|cKCMY>@wz1@t>s-_C!pOq0Wdbx?5jK>>HqqmIeCh}+T#Om*V*(Gqd@T-3@<0^v-lp0HItBxCAM;B3oRK(Kc*B zu5!S`#=?NysO)#{CH*JOZ<8-aJnVS3dxtlwJt{HPYn&%5{ zJ2@x6s}?@y9o$+fD6Umc4}LkqdItJHr^*8!(!okxWJjoxskkg4{+qlA6Ss*-GLeFS1hqYzXtFXoibYlWF0 z`X3{Bc~2K5?!xAss$mJ7RDWmo*atl>;60wtS6tLcA>BAR4s_{3nt#rorQ%FlUQajrx$dC*$UW3;E8{y>MjE7c$aqNA@Sa1&q-?D$XzU1@?#>8B zjh*~ca`+)E)>Kt$?6{ALA?icM4y3N&JUvvzk0H4UXV2T6LV`eHx}-%S&V|VI`ezS- zUKqlNpX=#FEUMplM^zeZ+;5+-dh&dyU}{lDW;5nfxXLVNSNA}Ldy^}D!5W+X`zQIi z0)NafOWB|t)VY9O?HpF8f`QeW$p+~;}Ub6CR)~?dvgZfyM_XlZ0#L1ue&(w})Z*-^o&xplu zXpRfm$NpBas1+)=@83;Y4prd)7~|#kx1MzPTWiPpKNe?x%v_tCQkwarI@aQNI=$TF$0MurD98*TtEKTR(F6->A)?7P`||zrRN;?%_@0 zNsz3~)TJ09JT>^uMDYZQO+%U7LtKNDs(<_xKysUdj!kH1)FbivR+W)U4Mhtnafi6> zopeE%fjF)kv-b=V(&2OrMdyokBr(t=MZd8V8SJ^c3#z zXr2juBWDE;mazj1JT)(<-wgc#LZn#%9v}Vz%o_?i6sV8m`dqgsrsO7IutF(Kf)pD% z)37e&XZ_Pncn%{M01h^L2nul5icf?pg>@n#9(m1SBBItrM5}}2^l|iGAi-nopt<9x z(d|t{Bun^6j;s@Nh;d@Y{ZRdqxm>m7$(pn! z6x5f`L2(wO-efTvUQlR3SBShUXO)NU6SQT)+UrBQd^62v8&Sa7V+nu`Iz|$RAOR0|kF~Ok6^AgYIa_&| zRsd>!A^k?EjWN@m+{!okjX`nGsbYUWSLrD7xeET4P31@La;>WTZu4xG&oG>l)C9ho zX0D$xC1o*j15~+QxYp`Y}krg zBIus6VJm8iwW6lHLiURpd#e?iv9~$rVeIYeKR4ZR6Nl8~-Zg?hMqrRVWd@qH4-Pb& zM1f|R+sSdqVGWd}?sU)n7h@>Bxr1UTor&!WcP@I$4 zzbzpj#EctpGMBsX_EEY$W|!OXdttRG8l*D~&W6gM9JI4Ep4PD5^ZLP;0liMiTm*?C&jvv3^#CU&<=VYs0_*tMp z!e1d~qbSjp&RD+b1c0%duI8Ca>k9untB$kPy}qM)mF;ymfQeHQZ)Q@55w>~Z=P{<) zD)c-5%CSr*y3_1Z5-(6%vmmd(vVBzt7Cu&&M}=uUL^?63{J@En^4=lkkFDyUqm(+x zG1MF6i^`FxNvgEnElRY+h#w+?x`$*tF*Mst)Wt80>JUa|zkHV6MnMs_AD9a5K8e5YB7b6iSf zCkkqcd*{3;;S4t>XuM_OfcKdvP;Vnf_14 z;J030dYZKRO?;NQQoCti8JqYtJlTyJJbaV3ao!?#vhas9&@v1E{SK?t6SUJqn>yrz zW*#<7aYzK8M=S3|5a%Harfl-K`NaJh;;FnBq~zo`)$;ht(RTWh2HYxp$z&<35F37i zndtcSv5jashz)B=lAN->hf{Kjy*K&iQ)vgihs7_UbHEv|i4H7R*VD_A0oFR14k=gH zuN1#&5P0h@%>7h$5A+=iv)o~QcHvhsK&T9+<9 z-(!CrdNz4I@y5@wHSMO0#9Pixe&7Fj-Nj}H!lMj+lDpK)K3Dlk_mWGUp7?U$VEND2 zgSFydtf}6d7K8d--?Etwt|0D>oirlv7&{5=?D?BBv! zW&>4CUhqMUoKu2qLMfYR($WP69^&K*U)e{FJkIdM3f?)Ktn{Co-}Fj!msbZEyAm-* zzy_w4lA3BFY!9IVM-hu~zu-RXv6DU%n7QOKnqa=e*yN~J%kBL!U{HHbHSzFxUxN(@n@n)|6 zjjIuZmS?VfJAs~DEqXG-og=NzPEhu7vUFN{qOuR`5t6Re2*76ZzKTaaksmt*Q~VV$`f+jm>6mP=Jf3B3^QH`G=E&rhMVvJA0|waCUXe zSV%L)O49AsX&njA8aMH-Pk@eBUxwc(vM{FX<*NC$i7n=wSfkamglcSUDkqUp2TXKc zVnf+!slTztwPx87&wDq&mv?=tPvfuC6F!YK>0GKeT2g&<0d5rApP(^WSb1{vOq(#6 z|L3RprvaY%L1$)^$ss)Xtc8F%ib34lI2)Jr@{dh|`f^Z}qN>!cN_Y~QiW_EKdBykD zmT*sYt^62p<8$*!1tO-AuLLb>@=i3IR*tgoTtL?U1FxeM1f#T}ny48XVr@_L@57}R z*5!+uGK9UVmK>|Sjt8D=QcJKxAM+V5u(m*#Av^yJ(lOSRM>)b7$_8XT2gxh9SxIe% zzm>fw&h65c2k{7%Ij9U`i0ijU*#!MFu%(TiE2w^oct54bCi4jM1RG;@{0maJb8P@OW z`5z>-qrT35@}LfeROz^0c>^tY$$Rj_3rlW59~(Tu3BQFtIODYIdB%g7@y6@v^ju30 zH~t(kNg+6#MX3`2s#e)mBa~^CZzH_DYy#YN!0$*Iz)W+<%qd(}0l)>r0Nz3BM+d@@ zO>pRwZsb55K_Jc}XuCMHlTvc!nV`OnxsFk_UX7}Smv?^M)L2d6)so}r(86t}1vHsh zlS=Kkc%Lw|tJRRZphi2%?S7gFxUe_m4)sYd-5ep31X<5YjuU;{$Oq9Zk0+PeDfXhD zXq1z)AxG6G=hMv|Di2eOAs;95aXX0flzoH}`O=U+-bYBn@1`d9fj=lSw?(Ln376$J z%Fb<{xzYd2^3qUVMv(}!0!0EfgNfpmQ=)apHrkFh7>qOZSGUT}CxYx1|m1^w#)Wc>|Wxk^!c0J-itvtTCIdZhl&)ZOTQ4C()I7P+ykTfebhiGVh z6uQFSIQW~B|7AB@s&A?0boLBd0LJy0rvEk9d<#@m-$JYI;W7F|z>isme|~YX*}*l) zLrOeN)GDCbfJ)C62zZ|+MrOd9*cvMih^pbAFdJtq@fdHKtvTB2an85Vqp=NH)p*AQ z`SUajs3`E~B0P1s1h*JjzIP-~JqGqO6@+;xbI~>D^7dQMf$xLY&}wD*DKU3HvoPalLvP_i(-sHoZ1^Y?7D!aH&G{e`I_W}+@oll$u`acDhHSD4= zj~D1j#cA8v8q5oPK+qLo6dV;<)nU94HfJg=KN!>}USZ<9Mu^piQ!%GR;q|3ZE3d=X zryTT{?OvDqy-Ks?Y1^Q_P*6XTD3Q|Y`|u7~;oH}xR_Dxn0cof1o2lywP~Y^_`kot7 zUk=sx=o%8dhZ>@|N=ERC8(RTnnC*l5f~%}DxDeN+?4mWla3La&TKrZL{sjK0)feVk z_?tBhf7Eh^mOs5LsE5u9$rkE&aq1nbR|Tww@%YQA*nl4^KnLd1uRxZZ=|&<>dT6Uh zCbIGByXUnL25iZpdTR zN_7PO57PvSK?!2&n^TDJ&^e4_F6IQ0RJ}s;m3m80o8mCSJAv$zj05F?BD4# z+8U|P`nSG~8bRccJT|1CwUd3-ePJm@rs%hNG321eu4k^KD6aawhO2|k@O3HY?WAn-<#BDSUYs8Zi#ph!|)`;gu;|ZiL`bsv& z!ep1}E3HaapI@fm2Mf`C8^pa(DMVbCrGgpyg)rEjE(?Q$xMdOn!#;;3RN(;>^ z;RpI#?Iz4Q377+A`cD$gc`C}1@AMztK-v@Z!&#=6^L{9GZfg9U8_dR?*tpk>GcY~i z%tas`wQtc2Im+&vf|k$ipCJ-(IT^(V?QF#AH)BEk_Y(2syNtdEj7(OKJRYqM>T9O( zQ2M>RKiBXq#*%D(XCoe`#-HxdpG`bL{l*fn@vgErXK;}$y&JwV2 zp?R7$N4pY@gRHvLjPLmb9c=?~ZQg+R9W+w{7)&Lf9O8cmD0Nq8b%qu)w3}KqPY2ka zL5eSc@)_F01KPYeFF(`y=xnF>(oAvfOuUR=J6n8o_UN@UN5jLowX?@RI(y98nPcF= zwRZNnM`w>+J9F&X*)HWno4kWOm=o}_4uJBaW-v_zZJt95I2S_$pFjfx2%w(QKQdJJ zc4Q#eptv)_6U*2{JSYj~(@0<4c%b;VZZ+S@AKp>5aPayU`4`eyL<1CVQ#~zdAoKOk zfA{OwL+j6>`Zo=(zr_QCrhjsqE!8Kl#Hno@_=pZtC8s?6zJ{vBAthE6WE;1^&5Vfyz{nXhyl|1Lixp$sD%``=uqHA0&BdapQ=Cxdr9(I;%*kbu z=diV+0E@KH&0IB9sNOn@6}apL?(avZ1z7}pV!Ak9{VB15S_G!B{B3@!=qYYmbI|ya zp!mh22i`=L4Z|o*edSp+iW>yqbT^aBmha@Y9~=-Bt$r(s1m*{C8L-x-05 zT7x=EspxCP{)gPFUehncG#ZYC)z>5OiPoH`em%jQsP0?J+4uyQb__8P&KiuJhk6M+ z=BVR(aEu#_KbOuCA4zAcxUGX3wI)0iF47tPCh(IR-A%(|lAo>bpUJ;PG1CE*DPO_P zQ$9Nz{su48JxZ0)S0Bn<)t}Gv-R_{$=GW)h1jsJCk{_J+9c3F(vf@daXr=Os9? zj-%xQ=O6-2-;1AfQ1+3Cm(z81nz@gW`aK6!15%$C*;2pnz`xk*W-3~Ox_72cXo$)e zRd2qU;$H3gOG}dH7=SdX#-_9)2kOKV(63zbgkqy;BdrlJsfVuTM1or4#ijahM04~X zpn4Ktoz!SaDX2B#lpoZWOiS$6$=7I&d-%H+e%a11+bCz7FIoSjQoY!!e>|^WZ-n<& zBf1K}fS7n9y0$SY3|(U+d3PtEz!xpUkWKTu6ZF9eWf!4Tt$bURdTF6=k1Dm0i+?mc zh7WY&1T+jQLeE5sMFBmAK9~?O!nOEq50>E{Mc?-5PnJQS;9?-dIQjwOVUi14^=r}Z z@j_KPrj{Q^%3OwWQF=Rwh8j|l%UJHM(4F*219AcS(Ky^le%orCPWXp1-6GVBAEJ8kaHP=_n4r!^-7{xm~{cCWz9{v+`JHaFOULYjCVHc@^D*L4za>sQg z+;P#TmcDE7+G_p*GDpOa&!>GxeRgU?&$O7K-?({^Tn|;HBSweXw7^uM{xAk5Rqk%o zM_~vP^M!|me+?Ul}{0+)_KtXgDvR1tCqL#rq3lv`(sU(--umu1}kDsmg}Bg z(!*CPw`j#FUoyDxG~vlE4XF583`bB;Uu~jM-ASwNeU_)etz#%FeO~HjU!Qqih`o(} z)eYoLI`gpZH1?(%bmW@{L@RCXSb$VbDCuus^(v!EeTVW&2I`7gWiRV!{fi^@JOulG z{@p05ZyMHjI$vGlQ1-jcD$V-*B?GHooR^e)5XfW*#5loV`8y%j1F?o4(gfX z1)&*c)0F$M>Pq&RR<=zEmpB6c>PjP^pL8*d?3mfU!?B$9pPm6l#v| zu*w0=vBuY_HsN+e>j#dM_NEVS@1`N`0qjsYwwn0TN0a4Bi#r#%Jj8LyX1PoCZ=dEz z5G1xq0gcHmHs#DEV$euNjuA1CExlP{*W(Ooq(6&nDncStJM z-t8NjN`b!4$kH`Zk7Ik{t_Vb5Vtfr5J-zav~PUA|5&AUWJO`U8KgJGBru{NjnGH;F+kRi?Ec=1}PXgle2k6LX z`%(XahdNrc#Pk_~c#Ed%>Dg<#)@{AK!5OfrYR?4OK(i1Jd*$wB8o>$j!k&ID-G~wJ32cfwQatTFL18jCWM^^ZE|CF zQkbLR(Lw!<2YEb=v0VDFyfCBb@`5%J& zC%+NgZ@~2h`27if{qS=`+STxj!u?FRE`Z+y@N0nI&fm})dYXOQxN(m3Q5oaRe@^&~ z9y8XJwiW7t-#6el0e&~buL6Ec;HSbb8-Bll-wyb_3co+YZ|t*QUgz-jyGZom!f-Gh zk9Skzqn3Z$$cf}^6WlGca?{+E2U_a+}w(24@)u}tWOys-M-SYT4ZDZq3YI7d)H{#1PfF3aDH zTBaDei}=Z@v=A4G4fBu?`Bs3~fI74CP(Y9;vCutWH_gea%{1*LiO%c7^QY!yEj`Uj z-2OAHRh$`PaeytTAG_4rEw~bFA+^rQm;bTa#OX`?yIo zFI|e;^aEx3#PhkYNgSg`r{a7i^(qIaVkBp|ha?L6{Csn8@Byef2}KtnO7 zpPY!>$ZqAJXY%W6i90-v$@X#SvJ;!~|4D4zfKT++|K8HE>~wMo zgTPfKJWN{T@FoNY!dRfqF<9%H`q*~X+N!7Vi-TXB{Nf(l%Bv3e+p5HZ9@YlHwTeYO zRvWW?ouIqOE|^bU{x--#;h=+joN4_O_a7pi;cL-~hI?mNf(+~M!}eo3S+ z?12o-4H@40hj>^G4&XM&M+=9YSAaw3i-sz2A?jsh(L9B=wa){(TZaL+wlcjTgC=nb zQfVJgJkiEK@YqI?lIE8OaYrlpQ4eCxN~ zy=NwuR?qqV-}8L`JWuxQ%X@#&Gv|`Uv5H@?ttM#cW1mjW3;xBTBcrP2$KM2t{EQ zHP$T3K(Aw;8^ulZ>ub5V#}maFC!R}hj(5bD&hzUtFJ!Ea7E2!*#Zn2XSPEr|<*{Ol zb7~VU4GTW7k|Ce=GV3s__ZXbRUbYmq=r!5$WIA|FR5iJZGVNs~(>KAxB}5ZH`A$;g zYk+qu0J8sedEhOcWLVgN{4x$o_;~Q%d_G$Y{$zCE%t6c*{5?tK;=T2(q=3h{ zSKHkBgIu^gK|P{BGa-2}|NRrPQ1f7ZbC1#e<#+v$4(9JpJ%!GQYD;`0$WvE zo3lzQIS)kqXb^vT20o6dYFb0+XkSwjZ!Gz;(H93oel)+IK31aqQHXCz#XFRJT1hX; zJ~fzr9v_avpURn_FH&J$b6Y&J%Ave6Ej=>Z**NVi-F?}3+xa!O^)ycFp@-ha+rC_L z+quSR=jh>!#@l+=-1d3nw9gxF`+~-L+F9e6vzUp+%L@k4{~d(BDEp7R|99z&^pBOI zEWGS3i>WMp%UkkPdUq--We%_{{DrAYqeko2is-^ZYb>wH?i5?Q-m~w>r294P6gF8L!Fu#nx!stT0D1of6QN9`^_YOwWuF|wUGHMsjOG`Et9{xLiiWv?bGHs^KYNBWI~E_&)cWK zv!^rmH=<#L+wdFeBqpXQh1;6w)6b9T%WXNNrpG_xw!mqfWKIj57jav_#_%mLh1??2|Y_MIMt+v+vd zQkdH^2|W8QH5sdnujaN=^^qhYUb&=PJSMl9F8iAiSCe2*abjMhQyL!q%l;{1hShCq z6fJs{HHzlZ535DR#%*DVnR^R+B^+&;`;2ZLcUjeUAolfaNY@q&XAJK!;L`BkZQOyxOi+cIuyu zOtA!g-wr44e7gFbH!KNzP^E4UeW-R50_l&jZ)S()eP^$?*Ge#>h<5$U%dAGe*tL1B z#@*$@dm>u1-eSz@vh5Z(_-nD^gsAMKW{VnW)(XFN?5ueKOVFIpf}};6S&*y!(-z4= zY2PyKP}8FYaQ@6Uu2-)@JYd5P)o_sZAcwi+GW3n#U`M@F!@6;>6_vK9H;0kD!mk&; zA@v-*I@)j?DN0YYy_Z(z*ROa34bt&7okNXOp2*t=!%V8!zDwPetvS{edJZf81((=2t;;H5cCX)du-AcbP-kcFWwV#O)JorBSu3y(U95nHL!=e z7C3eljCksRMDa0=^z&>9R6CEyhNtLA&lUt@x(x$IjcW@@O0!npZ`IklRxxnpEr{7<0 z9O@T2h2v*hkt06kXBGNQ9G)=~-UN}yVuU-L(g?TX>G1-0%uaXHJ(VYvwL1`plRc=d z9AyZo0Z=T;j=4?4=5)ibS)~8NkfSXYg2q7WFAyyBDHx4D#fGUHpXT=kKZQl1(oKgE`{QwBLjj#z=u)%MG)(PVXuq;xm?{hT*TWWRm^zRSNCH8) zmtuNqIb<4S>;Ksy`Hr0_d`Drn%t35?xWPPQA zOQd#D1^j@ue<2-qMEFkIzKlxrRd9tB<=Xa6jytfyNThAw^99DM2jdmK^KI0&srJJIb@*48Qn6EFVHktj**ERL!NVl?CNW_ zNU=59o<8H-IYExE>`yej(3m8+?Ki4Vb|Tq@ zWaE=9kA|0jZoYfOC??V9y8E!!ag((0J!tO#{RzNv%Q~Am*E{$eB~Vj1FfVISD_$xe zJwVq-a5liHwt4R79Ch8yV!1?i2w|K8PEL3FOKFnx1Zy|AqTzti{YZE{gZ_PVMbaog zr@Ga+-gPOrzD(WzIDJaLzogn33F}l>;GG+>03MZb&93vM)J3hC#|<5Bw3wQ8QpzNT zR%x6hc1e}G9XFQXxatg3wqrho~RhJZG1FFzKvpsJhp7=)C=mzrv?qLM$5^Rd+o;M0h%q z-NE4c;+va*Q#`r)9W2z!CiZeW&s=Dh_~~Q^3oQ??yi7cp>wx(zvwj6mwa2PVV|rrm zhO4f*jKP40cltF z4WItIeOSWqO22=f)Dx{YHATwhkyM4)0hXLrptlIDk;Z5I*@yyATuzkv=;iykyoXCCJR-k~%R9b!=-BK);7+ta z_x}?H@#efU`Af5wT+Yo6W(mhe!}=X#M=zreRtqiiEX`Vce7gFDO<8^Vd}7a?7;iRX zj0f)%N;xq=vqh!bPY8Z|<>lf~Rg-YMBx+`u!>z;nwNNmxhl)I(E`Lw#7nRQVb@7*( zYy4N@bO@B>!*`<$TJwp$u5?xyFH8BQ^X|OX1qptz_9P5A`}0rGOBFSsFw&a=7yyvW;UGXDH1J+_k%LpZ{cz4KcCH^~dgn+fOY15x6?T z@jClp?qaLPdL;AgR;KUv#b22SH3j`IIk4BqyL{gy4Oma z>JC(4F}n#LweeRNb(%nK>oeuCwm(20T4fvKx$!Y~!pyBlex_lWOw?XtnskJx#>WOn z=IvAC70M%R5mzZxW@C44flhF2w!{Q$sJJ={mWtK(z(x;;*!f`w?K2k2{e&ZWyapTKg`#)vHg_d6aEsUC+PS( zUpo9X;A&AG+{I{Z(4x^k{Wa;7Ey}MX&gaUHxATSqi_^-Pyni8t*f|mZY0C&P;r~!~8hY{Fp8S12P8s^=oGjh+5U( zpM&sb@=l>b^KKO0tiYY=AaNV?6J<$7-z&BORx9)l>`uKKusKQf4|n|-Gt!GQvcM65 zV8k!3&m@LGYrwq1L`7@J!7v=v8L;RsiFh~p$^!-R`yan&g4{60?cJk{Y{&wXuW(wF zI-FCeJJDlPAzrD2Xjk3IGpmIE#52^^Y4hoDzR6l_5`2hwV2EQ25I&88sMxT-ig-8r z{1tlWMrc@V#KyM0_6wv9<_Vd3UvQY_+8A#rNC(;{Xf7ACyj9(a_m)ruqbS;+OTmyGyY4X`D^EID-^bSMM(S%tH*YPg_B$JSyfrOz$?mhX4 zMt6-KXpxeLzt(TTKOr$qt(Ob_Xol?J24qW;GCw7L8-%@A6DurXNX9%PD2fz0dFL=B)v_#ENG!HdKSr`npSOt7fSdgCES{?y=zLbcWH z*}wQ>;{-r$J#E^jQU1ez(TMDkLZ`UZ0ZTP%B*zz<8V{xAFLDGkrXl~K#UBr1UxCAV zcU~(3L2P~ch{a8tRB!KJX`{9!m!9Cae~uH;ezeja>eYqiv%_bC8G0=bnKL$8ztOlG zS{*O#Z#l(|@A%PSR0~PXbb1Yd%YuvnWeA!&#RChVs z-gE3&IK$?)AClpJGCU(fQ{j((uMGbqV5aGd&oP`i#HD43ISAa%C*dVd zEhCnW1BVrv>i_B`F1Lp|p|F$I1@qN*DMUv@>Ho;*TDx>x73O`S%#q(Nlh_HH!oWT*(Q0AM9Kbp_X1(itG1fS7IUbD78zp=IR z0!Vvd%IB^Uma0j+q(A7b=P9LMY3>H+_%6sneH_t=J-e0;*aNd`>0JaCMKG7mCCNQEn81hx|Wl4QD*F#bj}y( zrQ3+(cH%ry$M;HOnjJ_<+YO&ajeq2qZaaX&pp*w%TL7UwGpBW#zQu^jH z;-Rw9+iyk;T;El%Gf>%O-^rHi(w}9jA*D-r-BLLwFRoR#Yu;Be*!zi?n?`NZ$BU8T zE{C>ak5<_#98JNTz;k|T1+3ik+qo4^HhD`}^Id8*L;d``QU~wcp1H1-If2O)l#8u% z#u&LiNzHX~xXhLRK$a4Q=B{W0=gR^TA}4sUnrSrx7#FEJ^gMnXPjErJWVA~2exMN#HpFl<2qUa`=%D_>HI_u&oK<~H^Za^k-vU>6 zvu%{pT>62!Vh=H+t%|qZD5pv*{XqX`qpWNyE04A$?_*zb6#J4u3-!4|Z@rusXI^Y% ze}C?h{nb{qVjIvdN_leM#86HjpLf`t;p;HHb2?}T12=0_Sl5K}99$xl6X?WLgI(1Z zUM`39bn1}aXjI{u>t2}=$eBxdFQB~nWmyC!^DyB!5!NRfdGV0Q`^7MWbNcVk^Ta^O zT=e=FfBEsC(;WL-pIMptH=Y&gRhnkHRnBxfX1YCfrgu+H z&h+wrGyT)PWv>4iWwy(i?iggImrhR3bZ+07uHjxEy{!LCZ_F?vS00CMZRn!#@zA)y zhPft|{yS%I?!-fijqHyz2JyGU#*O*4kiILAwhpo$$nTKI_m3`f@LE**pv{j-_TTO$hKkZU2L@?6Qv5|_~0ezpyV zrJ=E+fSm)XJ+{U0?6EZMOq(q@C6IHM3HOsP9R%*}L(R#Gdg~ygpe{jCtQNggM1?~v zb!u}OHFj~1j%EaWRASdCb{3w}6<-49*hfAGdhwy9x!lsLh0k?%7q@hRbitCLp0h0; zt)6o(9dTxtEjaNk4%vEF1uqJ$MFsGao!2VEw{W|>jl{I@l$b`5Ie`{*?lZP0yF_;G zv(%xx!f6B{>4wSIF zTn}lb?V^^=l^!Z#5!PDK$OOjQDyBT7HFV--s3ZOgD2;yA0SlYlxwO*to&%vvsJLyc z5XPSa-PHYZ{myJ&#Jm0-R)OBNhAb;IPCe%cjbhCOCO1?BwJtVPJ(sOC*#6hs z5#Kl-l8Mk-{Q@|4u6!IO4s0B!HJ`9DWAiVyUtm9=)IINzq!6tTmFuOEjsD(;vLWTN z8Si(Y8Koc4ps6dG5>$&T1l8(W>90OAD$S9VnpG7zxaw=z3V6M!nF-NP_x*15gY)WM z8!r9c$7EBjKnHWxH z&?Ra!Nd#UyQwgDDASCZV_-3#VQyQr{twCq(ZZ)v`_NbxU(c#%0x{Oyx`Gtomu$G5p z$#{v~QN(U3ZBn;@yeR@e)!$q2fuy#n!lR(-60XH z>w^^hW(_&-+5~<#n)uz=7r$FgRBO`nKTP5`OX!Ly19;KQM=)nX zQwKrr4LlJ#Oz0yjH6*zd5)SK^rV6aY+bp*NmmOPm@TamFqX4Cvwj zZIRLGW6HF4?ZJ}1g-6*_COi5nLGZDwj7&AjlMrhtQxsAw#DhpmgRk+8gnl$`&A`Te zGqrJ0W7jWAG%jc~E-O{H z0o(7g{)TWeZVRIcEpfEC#(7Ef=?}e4_5Kw1AkH^yl^q03GiAB5CZlvJ`>RWx9ncwY zo@eJ5Q@VPs(rWnyptLNrtxcbh;w)8amdbg7^;{O)+R2d+O)SaXrRr9t?tekhsat~= z%-)70g20BmQPDK6$kp{Quk!5Lm(8V>7f(e>+sh)Q2aO#=nJ>=HckO44Ra>L&L-68+ zlZ?+W8I=b;?*=oat6Z_$zK`~5rzE_|25L`%;;Ah-HM51rM{5FfflC|cm$lqR9hmYj}Q}p&Xm#eUb@F{30+p5 z6)Am=xCH*fi@lE+iRX+ksRK_YTWEQ2<~9Fitn{zovKg06yypKNmzQwa2m<*#Ts9Du zd@ix(zdD9bCXI%Pbb~c9+GDf?O+XhOfc#6g{Six|?XuBEYyU4a@dDYz_zkJTY{5rt z1H|Be)W1>;E`449|6y*jGyk8Tn-!zK{@fJ)^(*J5Lf>$MWFU7Z_J`?kH^>HUax*f6 zNfJm@K|d1Z2KmZJI-QVIXQ$3={kj-tTdrgv zijPZOiQ^mby=x-$QlyXbhWiGm;R)(J8{~U)(#O%qspNZEAM(wOl|0&0iw2VK*3Z%Z zK%)PPdXwbaJ;=8~$ai2c^38hcd62NP^LRerlaxEZ59MC=_bE3P!?`der;+UXi6xbE z$Nn|YNffthI*(aRf>19@A=FjBHVE~7R_U}N@G7$Sk;ULy7bU=;<6Pgac77qj;Jzdn z5WjPMs;4D3ZI2(-8a5bWg`uBA)}M&O*|5=gf9hP{_nVCOZ$W~;vr|IWd)GI5z@VznAHq0A@vO}qoS zoDzVC=6erHb@xC4%HKi#HZoeQ?k;Gds5{yJuTqawK16SjJeRjU?>OuScxX+Kuy>~p zmY8!;bNo#9MwGS+$NK4T+Gq}oKbwZoz8|87){=iPj)?tG+Uj`<%~<>(?Y|^c2}D2G zYtHqIXAPiu#{i0A>WPo=M>3MF%pqUbMd_s=G=w11|YZX?p@L?_;=>V~UaY?y@xy>d??kQPRjawN zNDVl&K5_SW;_m6h9ire^7^Z@5xq8xFdb|d@L&m@j^2MaGbwLYnkWE2OS@kf;a;7xu zTPDhgllsDmCb0uh7EcuokUD9_H%E(0*#4sox(TC1J)@IjwIO9IE)i^ps};`>ykpXe z3q)-ef0`K^5-mnV(YS#`!5_$da6GqqnEq|E<_|72;ht;uiH4J0&Yf}*(2D1Z+H5Xx zo>}re!uv?HIE#;$rlznv?0b(-5+0!!(PBiMjpzNLZ&LkKw@el2fEd2#lXyH;A0pc{ z+0a(>i1ai`4Bmf7DtI2#D!cPnPE^7tup|`~c#39(I2gtocuvo6;Xp5$`5crW=!$x= z6Sm~9oE)@kD|$sbdtv$h(**X}-=wB3$&M5`ee_zd@%?eWTaW!GN}U0gVP&?bs6eS( z1^Df>tF0LkM}ctEYu?i$J-#u>1fj;K-+GvGjLl>Bxcl?BVwhLnA}UWye-%LgsejqSMD=Vl^+{$CT1z(jfB${p5Ht!h?e{G7muTX z2;<~Ejnx6|opCXnqjCI1IVwWElbB^f_jK-KehUD4<;_)z{`t6nCyf5hxVSUXL7~o* zSx2Cco-N3^{9w!`+ST0-^$X|Xrq~sE)Wy^J+^LlpyM%f7{W2oXrmIH z&yU_$_3871lC*|imzHOtUIzUiKVgwxPMoa0o4~J24b$&gGd!~h>LJdh`EOxL7|IqL zVW7+}m_?--HI9CV8X7x!@i-yP%3Mpxr>>lA3Ec*05skc6-4|4dl5Y^A6kV=h=)i0OwiWerj`^k|#TR?6O@j{H~X+5f9>P-eJ)UYjV*xX|J8K zoT5eNR4fizZ7k1<$P=YlBnN@ZdWmMY%qx$j5K+S5ySX6jc>ZoO*Kw(aSR!BoXh(C9RM*>FxBbXTi zL|T{<>^>=dJETK*V0yBch(qOYnY3E*^!jPScxq{i zy)g1U%bQ9O>gD-eX3Vc=FU{~phtIyP{$#Qxm@di-)c38z9&sI3UOc)$)Nq3x?V_|t zvuZzbYGn?dtb%@k*0;UvOk7M5>{>>=oNRA#YI_^LqP;IKGJsJv8>_CGOtjh=oGK~` z#1J%8w$F9gY$D;7@?wWp$PF#di5F8ti*phl*@RdmLAZ^^VG>7uVi=Bda3{~v#kb`X zF&u*N=vTDign??KpNM~fYT2H_qnia_et~c<>F!(x(BlTP>wwE z?49!U_w%oxOLrk}U~)3cT>0&~K!HpgScq?&@Y#6??{g$jlYFy~-#mK{{cr#=eetEz zB{j6W#&MJbzy5Kq9-LQJ1<(442eC=xN)ub1EjQN?t$U3@p`=U z#{qwgF2BC)a=8$@X}uL%k(;(j>?f*-)8`kB59U<642Lj}Ka53jJRH0u;Anh_+vnGB zJjf>Q+RE`X;xw^WBO2}Dm6^h-6^$2#4y`Ct5P}wEX?}N^QPA#(cMY>}eLf!ubOpLbIgDIt}+FS8n# zWN_s~q5aB=6wNaVdH!L;hJAo4awxe;6K$qrMPIg*E!R&?yt>7BRfGt3SLVg@S2~xB z6YxaPqF+Ma*Z^gvbMZ-f=hGFL+OMa}n}O_2BL2Z#NI#%k4U3xo`s%rTl-nYu9fs}* z6xgdRW!3IT>B*?~M4H7ob$BD{<;|y*+>-W8H8O%Q6 z|MmXu`+PwEe)*o+ztbuGTl?PM>0b%-&Upzp>$DrLS}I4xmx5;qnJu4s!GM6SE_Gc4!O0R8u;9*;4IM~ zt?d@gBvLq*!UXTliH4sW+sL`G)uUvd-0={k*cCy-80rn4o}8SpW=AN;>z z46+e)$mop<80YX-xs&I4luZb;-M_Si$|Bm=f=pjc}k;Te0(e-0;cehU-(B zt=}rmBSagZX6i3~q; zvnV}bzo<|vJ>e;RM_K*c`4oU?ct=imiup;k$F?<@$z=DSP);Um0tt$STMPh*%yk0O!;j0Q#&;eraq+8Nf60Ir8miZC9t+1BvLz+}`UtYB)4BCN z5e6K@bMb@)W3Jd9|I}Ona1MU#R6jo7k`AA3z74HnGlV_-Pa88bD=}9T9fX%x@ZI8ekJ` zxHEC*Gw#%74vSLnut5#Ln4gIM(k+(~5N^vb=q>s;&gfr^`d1~aRUVsC_cJ7(l`Th% z3E!b@fL@}1b{Y^$z1yL_fR98#V?Pv!k}0>j0p-$Oaq#5dW^%r50JVuzegjo6}{Wm2R@XP=I8B;U4D}-G=5E?^`>doQ0AIK z+fCDKA=jEh`%TmAAqRa=yJ#P6@&!**cwZ<@ZMVkkYP(J2H^M)Y*4+d?xx(4R4tVy{ zvM|fH(n-A?zWl@3m~iW|ks<;T>}gYGwrhMVB7hgs0B9?;-=OiMr^KPGPJ{W^b{;e( zTo0XiCf`(8=#s#cgbCs-j`!kB!dcgMkk-L%5WFskO4=e+J2eKkNJD{5`fvhZm&b3= zXI|Ei;#>evCp!$!An#ieem{H?aU=#t_zF#Wei;pSekl!Be8hHzJNVU!FQsR#B%jM4 z5{%apgYnvoyx_gUe?pn``>yf(N8|S$mhpRxf1ATcjo&xEWJf-zEy0{k z{Fs@u*l0-!&K|p{Rc)mi%#u{tlGm#41Vy%1$NkD9t-f;olU?!nr^?E-d2`@|?3sJ! zz%DgQ^Y%QmXbxg+9`$zPb6^g@~$9r1Q6Fs!piZnafu z>5(Oz@^3~OWk#h-dkW{aT@NrwGfi%_`SdeNLiVK8MI2_wtBEutjXyC?x%w}%>FdSp z-9a|2h*kyQO{B=leSjw?27n`e{dWqwFgbxqH&fA7>h=%m>DwU}hjpWQ`jC-ODqOQ; zjnJwHm+cEIn**^PmxuY%Z`qE6Y3YI_Q>$eIlRi0fWa=bF`U1-n==xNQeFJuFhMFwe z8i^or8jj7&;Iu~;wZ~;xe>}C*@YrS|=QKXRmxCG3u$qhld4ZCN-x${~$T!7J35HPjLKmD$>47xce=$Qir7JF!c7u@Rozb>G!t(`Ih6nE{7K)t-jVw2Y?cN=UVJr9RU+k3r9dXwA zui)_rzu{m{2>35hA8=Tf+^%ltdY4aY>vZrACE|0oNGAp&!{ZEHjm4)`?p5NOk(LVn zv8cr{+0~A%bv}O#1*dO^(AAf1D9Xh9k zhf{xOV=T|d&4IK`WT&F;(&*@UrG|vnjj&MBuNMX7~V^xDnB9OsEhj&62dYx zIPMEh_sKG3tk?nUdfZ}GX5inSwn;Z5oRb}f z@>hvpG)?)4P(EdVV(xR>zEUyQU^zz&gUgbsFd&Lx-v*%zSGHh28x| zdp_+607O0mfKq=Qnp5mhZ(eT+We3GYOB=3&(Q3fi&d883k zCyg!Uc%Jjl$lhrYo|^UOR8>1|VAEkWU2MO5L~drr1G{EqDwKk_ninkT$$m8mlCw4*KWx60Gi>wVW`u$h?ph@sTN<}y;GS?44*y$1i;!Nc{5)M}P z&^31DAZszvh5;oQP~130y6+jG<`dYK>8Dzx?4BW!k9?#bRtbc!9~daSHRV;=w84v% zx)P$#vg+(eX(vMEdYyEiB7WkYE)Mx*<>wfoNhXN_L<=Tu2LON3hUTD5gJ{FtB8{w&jk0a87~RevvW>%TD;9vQ|2UNL`ayxGlfL|fnZCbcI! zEvfQIIiIZ+0hq{Y;hE5{B=!ngoU1{IKIw<%7f0R3ej2CGM>+F}{AH%=hO~ zl4F$QxJ)uehTNVz-n6QipG!{{<8764?UAK+CFh8evrC`59}3*|Z3wIB*{u{G(<&Q9 zJ;u{sFRcW^4rU*|ZO6iWr*su2y0y(ya9+KI6+Y*QTBt(vTnUSoF4KwHB-G~fe1@(P zZ{|P5AUgr;A?GRyJBrPk z213p?TN!d5V#v8f>PyOuj;3kJtR7CV_=L9oW-bUu9rQI4#z$YVKDF1_miVM$Ys~i zG51|UL{ag_$82O@wKExvX0nfK9&+{@YYE*Y)?rMEPRjP|3yy^ek&??K4~A9` z>=QiK@r|3TraOA^1ZOxN98n%0^GG%}l`~hKQM^_ z&{Nu|s5t2sYfRu5yC-q4JYM=VC9yizp2tF`)HxCjmq9U%rrs;qI4r^x!e55SSMbsO zfb4DLJGyy3*;<-c?ttsXgQVIGRl|d zdF3!ba(y3=Gzaq=Y6~|cG)B4*8iA0jhm17r-KNCd#>CwQ<4*tgCxCU&^~x6MzE~QYObEa#qCU~5z zZ9^%ZH<$lW@D%06iJje!iP0i*cn`|qUH5}@Ui#7kl{WV??n^;kFcDzD0{rVvTULn` z1n%UYfg~2678;)x@ux@d>1kePmg5#N4UlTCk*bDM0fYqCi*G*qZ4y(~7%N#L8nyXV zW7w`uqrSghO&vO>J<-8_?3KE65OeO+BCYhCzYfk}m30U-E*|B~kM2SF?AKU~Z$t*T zu%rccy3-^F+M~xPjWVsx)1jyc%_(ko;D{%3yDMfFu7}iZEW2!Z^NI1bJBP(4)G9N2 zXg{5IrV36AL`ReI;#t~UE6uy|y6L^>zy>=exKt6|!{ZFeQ2ruk@D9-<3Lp{vq}ma$2sj8|QDvbTnyCtTkp4t~O~uH{H3_oRo;1lwF>7MSTaN ziZHN83Ii?T<`$ve%wj9)=aOa7}=xtHpM_QJRk_FTNg`O;EKvuU%=j ziDMF~xC?^EO~MxCxh22E85}C%>U8W{b(zDupp2fc7C z^65XwV4YBVw+Lgd(%2WanYg!K;+te*8e85e^ASsR+!#T6(e)(_-lM>Bqlck1Z|8a(?0>#ozpx4fPcD^CNlgV)^g>D435nMJn)f;w zIcW$sg7}C9d1q+VxIsLD*W!?Q{@*v=K_%5Jh8gh=&MtpX@Uk!VCqf=9N9|m4{08II zz3dj>?Kd93!;j7seW$u+DN4*cBP5Rz0e`VT%QYrch9JRepZACPck6SSQzVb3zwI3y z#46})vB`Ls<>F$PF;vK4TG9H1!EC+B3B`}ZUtuPnetBDS1RnEw<9)HHm%adk8N$(G z1kEV+@W;h}Ml#+pXJda}UpH7v-Z1~!jEWL{lo|Q>m|!;hG+roOB{=+n-0@a+nxNJH ziuW5QFOjFp9FvPs*u{$XBD&yi>J#?EQ2uWm%{v|r@8PSq$!&(JTY}{P_6v7{6%F*v zgJaTLUN>bqC_u0zB>>yz)IegX@xVkh84rx}{oo*DNf_RaV!D3$~B268IVt*Y0U z5sZxzygP+vqv+9|{rF_W#bILxPG2&<8WX6Xf(}d1bTbM zu(FVE=NfNW13y@luu?elT?<<&IHi5UPk#aGgfB9fM5a%Ffej>5()fU6}H0tf_J*s@Rsb!pzyFuq`U zKz79Yjw$$-vhI*m8R>nezk;mjP(S~1@UGg=KLp;D#X~2RS4v|LYnP?UwFlFnHQdQ{ z`r@H?5*o=5AM7ijkB55ozy0leT)?rFL$e~1R7;QXv7E-BH&W`(J6>K^!SeZcv`TlP zy@|H|&}eJBdhW+TXYDz(HRK>>Y7Vz|5IOu;wKpM~|MLNCWwY2LmhS%>W~yL;*gc57 z6`zN=skNAb(^j4Wo(Xdbx_JtEgcn}UM|wLIZ+q0sa74p8KH}}9dJ+M3QhImaV7*IM zSB&TR=>9)Dd$1oE^uWZ3AMACdz*A2Gp4_RB#IaLSKc+hl9>Z`y-AKSQ6U?#2-hSKD(1w?EcoY#(ZR^2uH>| zvdJd>^&5r<;lrVC>eu6xw??+BZKS0u=GwX*KWST^!;Y6T3ws4&%Q)ej z?GuGA#D7&9p}mQ1F8p8WdX_9KLw}d=?8|>5in8J60nxgR^S+aAOCmxy*nlj$gs##z z$h^xZP(tj4Vq^86W#J6BN9}R&21_a3ua)+QA(1&JsR2$=Sb!!xkQMlt*v&xeJ;ZQi zejjnFPw|+z5k1u~RXFg%fHPq5V_2ZnotbuK@hkM-luM(*2YaNzag?x@i2`T5Bihho zO1K{Eu?_fUGru_pd~+th4Jgx@DAO?@pCggaVIT0#Zt#W8h@dR42k#I+8gF*lVS!Vj zPn(Tz@FF3u-*bulb^=mN`eoPJWnHwnZU%wZi}K7jQ7Pq-{8!7hr^f%YR72A*I z;d)UQ@SY8Xjq_aQr&^x>?QefuarW2j>u3jWdiS?=+0-3wG*e^nU+D|SL+QlS;p>xG zlyYm$W9uzqx7to5D(^ULT-(mRUu`L$P5i|s@QfTomY&jIhTue|UWelb(I)fki+w{x zk*ADOE$ox$@b4jLVrRRaV@mNcB7q}`PqsmVa`vp+V_RxF)J5#na2nPjp0|`~2V!Zo zo%bFENuqMEG9nvTaVL7)*d!K|S0pxf`GvSa<*mMx-vGVDxdn8L05+HE32 zQ0Z#nvy@ZO>3j&hK%0)>d)lz*bPgb&48t-2|HosBGL?!}go-nkK{z%!As&PW!ANmH zELcce!UtP;u1<>wH}c+dWa&vlwP-pN{~_r(HAGrYbkVPp)29FJ1!nq3Er_PWdZeYo zGNeWtK1E7<%OVXpQ1zAT%f3ix!aQ(A;HV2Szs#rwE1SgEn(yP>y--F=?7Dvlw2s_x z({?gaOpC?RJ0nX2e$!VgR>{3?DMTDk<8&nzw!>-B8UydTOaj0KYEJ!Q86L4K8%n_| z9ki(i$6BSX8evnywcK@=PjB=><0rtXi;lBzU9?Yq&!%=+l)5qqN4l&^U8hCfgrB81 zmlOS8RigGxP}tRx@=DFxLMwvK2k9r;04t@AMyoqEQQp_o(|uM;ZiCgmwSz8H`-R!c zj9nUkRaf0o}39!;L~eIB#al z4b$VB^w_eH?zV2k$`*eaifQqe zLG$$$W?s$}8jtA?jXhgD7qc81&Q$a4du<=uv^lQ8(^IT&a7PvT(IU#Ww1Dza28*be z5&EVOC|0N_)^ljp+~p2W_x-b}KCQT*%%|NkLmx?XaT&2mLa>IE>XwNoapKEU6Q3AM zi90B<=5@(Bzgxs+A>6`6MhnFq1)_LH@RD%r^2$}jh85gC)3T(T%83>i;GU>0eqs|S z!Ociu`Q~-jCI2K7;2v?r=qFk{1Ea40a4cL0p+asb)q2v)wMLkmr=9Xz^xWGUsc_-o z#93{bO`IDsq4A|N;!6wSOXm_bkZgy#f;h@pun4Rg4tpv#Wm@$Gi(ezeo_V`HZOZCpk`NP{w-gcaWSzRUfx+PSWBRu}m+6L7 zdCro9oqxxSRl}F3^hE6y5^WH z^M2hi5#6=tM-UNK!e=aoyt-lrO=9@4vKG!cR=H>nrzsYt{>L~a?ZUlwM}hjbMXQ*h z`+j56oOYr)`y|bA88qjvHlRj_R6I#*uVPJ4~X)e)mTMD>FFRM{g1ub>b6+ZY-wp}_O!wO9M4joN9aFH z|4Zoq2cEB&ZwRI7@nEg7y5FY%179;=g8$+D4!gfQt*z+RR`hBsdh)j+$b=F;1g!mu zTM4(*jUN{8f%ZzAcvl3DRYIAffCHI7kg=1)xmGf5>50s7a-4DD^f7(Gxza67jv+O{ zsg!n#Ov}p6UT0*^X-S7NG5rGmd+33N80aoj4(U^>^&ggc+-j8C{Z*yDWHn0dMX5F} zmG^6Af+nj3+m|sEelDQTcXmd^=eWly!M&}p)-}&@kIXX8aW(Nc1DH~`ijv=(zDQbV zmFYitiBjAkQM>MY(5G;0W-*;n!b2#bCsIBhh1>)s#BW)R2#dw)dB@@@k)n9S(ct-f zsl&7D{wu^@wX?TLZF6|q7oTg>ZEc+ny3)=Wp+k6%A zPHR2o=pMOOa_#Z*|5GLDCJ>Wbu1!+XAUA zIk>(vb%{_yNT*ZT)EBo2ZA#-!*hW6)Tk zM0m66D-$Edv@DtJBb!+mEvCjojQ9V=(C#7#X2TzE_iW(|Y?u%0TC>LA+gK>g0T>N2 z^LJ;`tIF|$m2k@8o{+eP?j7hbHE0GkB0;hw`OFmuB84{1>rAyMDRr`}Z`JHW=gP{> z)4wq|>5q-3kqAsCHj%#SGj3(ZP+W|HsUBE2^>6YUeVQDX*tP}M-^5H5x6#tj8({-I zpFZbz@|bn-f?E3&^olG6u66uIUBjK_fQJNiT2qZ=wt4nEiUs%bO zl--p|*@@zdiychWf@7;!`FKW;uqhSo&WqeyQI_y#{oRk5U>AWq&wOMUU@47utDMnh zHxtpPu*{Y-y_v}L3XXrI-PYoqUpII)*dks41Htx$c}f=bWzvxL@1jFQfV$i z6mGRA2Lme2Km9&E{RJLQzXU#6t?Xq=-{l!B$_ri*_-Kf^5tz!tp*N=S{O(}I?!5`O z9^<2hoGn@?&qW$$*#4eR^O1#91&=;XvMM0L8o{L{pipUUm|oPFkcyIxts1zz}>>9%1ZC)D&=TFHVYdO|LwIvZD%CG;&Q0|hx0MxuPOYN~O z9~C|x8bRe`P&oxk_+B9F3TMQdnRgfhrd>ku`O8J&_zI>$b+=+O^@TNbtyx8RO7SJ| z7cd0zBMYcrf4Pxo49YCc1SbH88!d46Qk8EFU8uON%E)xZT}YiN!eA9<(_j^4$3`gb zp~}b+RkSixX+`cbiOyW5{_rn|j21bhD2~X0O_X+4dD?>)s^_esq0}YmA$!4mc7AfV zJU=;M#4mAFLC>yEem`S=M~7y?@olKY>=rdY5xcWO{}U@Afb`8w^gH$Y&cyf0TV5hS zkELySWf`>+Iq^p#Ke^DyWFG5)m2MAg}i=3j!Nj(j@qD9iW zV~Hzf%R8gqQis#o;C0|h<6}9z5RoA0E1RyFT>2{_G$H~)bXlggw8ME>UaLLsNSgjz{9d~WrF3GcUawX z>HjhMUrYZ|ENHdc?Y5?S==q2Azl{D@)BgZ^JvGI6h*nO+ha2IA8v=Hsv||bV)7}F5 zbG_w8y&Tq8-|`r5-^V6M1gE*yNW*7b+MISQmKTGfj^iNMY}-q_2UinqGCYN@m17f> zkF$6Go3Y?<4A(2wsW~AR$8b$ompO(9k=l}M&@Ll2b~^_F5oZcqR>fP|PLGk&jxyi9 zyRb#E^M=Q#H~-l*wZA5CWkRBQA7iJ;H|gE!WNW_rZz&z7RTjdu(7}qN2){$O!>Xbb zfstvI?Zdb6VA4`GIwd^uNTWb(C10n{JW8<=JRZTwj8MG424AN7_;N|ztF~|tO>r&U*^Q;Oi z`)Bo4_)~j#c~7Eu-Ko4c3`Zn`$lbc>AxnQ}T30@l;2d}pCz*$l#@mEHNzk4+D&7cp+WU#cC+O-xoJk*%uji`qR(IEixj-p3%HLfnZ;{ zBCc;_>T)#DXnqjKOp-aN!`AS&^nv`t@LkWJDwx6eez#vE_KepuDR6Z z(;@*joIuN}M5(*_GGCQedOCje?6LV5wVpj@jMSG8CPs>uG>lU0!NJaV#T*xHy7k4N zJl_AdbhEN+=);yi`bh!|uRE=y$~I_WG#v;U_4n&B%e@ZeN`JaUMO^UP-&3Lf#9=fx)O1R0B6toFErqt%}5;D}pz z`98`4>SJj;oh+ycjy_Z9as-DH*F`lNJS7%&-jSw*M`QL(X`b!?fV%~e1s5@BHvRlV zko2Aw9h%=!rL7#HG{0V@#+||2<&8Ty4JsN+b2OCJf+kTWN<$ooOKI+q4560ZGFEs8uV(GmMGrJ6b)W86d4kD{gmwbN)*8e1Ty zJ4)1^AxrO|6|Bi`g%@6|OtB)m!D1D=g>K;BH#UWC@^CYWZalcTlx~!CguBEIZ53n4 z{%yP&LN~yJs(!5J)-lx3St~9qPFA~eI&2ni)PJ%uueW7*bLaO;P`kzey*VF&E z=)ai$ee{19{X;+RkxkNc+t>kDL{>se568nM+enZ>)N#b>)LgRb}dT=yA+xe4uJ1yWC4RaZ(m-V=o7VX(!I__ zQs`SQYCu%uo2+~qxXH@Lfj`8FQ|W0O67oh;8XkTb# z%Y<;O?ChVRWRZqg*QdcR?8bht*dgwqUG5vAjgd=|fT6YTF$=%XcJG8me9A>NYNaRa z>rrR4ex9j>az_^SZ;#^Ex)l-_7QO6>JO){@uWYt9r&n+Mg?YN8t;4BO)QW_n(52Pi zW96IYtif-{(MmTLYgva?CXA(v$M8sy^c)=X-8vq@H}$H|Tp);oAB!rXl zdUo4s;FfK9wz`9R9U3RoyD5D^Fr#*zk+P8p@{=&CQ`|%Hy*ZI5p{PU4t1_~F5x*^V zixsD}`gU%EuGJrujiK*s5zo5Iz=d|gg?d;>iW)RitB3pCi1(PUnsx{J-S4vLD5PkR zjR<>WPG_{e(zozna|*I(+)bnV4|65s(9(MFVaNjuHh~ zqI5Df8b-(K3NZ7-BK6R;@&$T`-mz?RD)->pz$C>SfrC5(!>^SiaEjf%U;DN+DKv3b z-GRxmD&aQlPH@)FYTi;ysqI6X{cw~0xaY{y&z0u-YOFxUQJD!PoL4|DraR*I6OzB9&+LxJ@AWK_x+~OrMr?bFfz_t^ z*zJE8t8E5W_vpX>sZ_ILthV*VYTG}+YFl5dhP2XqGJ(}66IczAwnXd##_E#^tUlQv zt8Ig0bn^q6Wfga8?W+_rM zl^QQ4m--!3SVAe)5-t;uVfbQ~P|^SHXKq0M_`mvMA|L+dd#LS1pv5^_f7`??T%ov0k$a;wVXp&Z}rc<6LW406^O z=!}QniHD9sbs+RcxxS+khn58U#Hm98nrAfq7 zy-yzTA;vt4%cV`igqQ$pxu#%qdVe9(lvjO8% zkUj;nu;INPsp-po#+UEl%hc2_i;OQgsNz5-i7!Fp%N6*tF!jqa;|uscBgBdEWx4U? z6Nuw)L3=Dp-Cy|OKKXEr9~Q}n1N;z_4?Fl_nS6MOMUeqW%=KIUH+AnHA4PRF4)3od z11!vfi7qvj2(hAx8coo|1xD{)|(9=0B^qyo!tSXeuT5ewf_J?*l1Z zmLdpTT8Qb_;*UGRRLVe*&{PToQhT>zDn+S;OkYLp{kwF$41&7!$^v3pw^-IIt#_dG zRMrKh=7Vp~GNSfpLn&Slv*2n=FewYBiWB1X`dVQ~y>Hd`luK2m^3j_VogKmr!K4h_ zL=Ra*IB3#2t2nQ{os_QtWtZMccQX=l-0l2yce|6RxT*K;Bi+vSZ*pG7C4V6mp1{dM zvgbV#`P~+H!ERGoY7mToabre}-jee&3Vp&b>3MugzeM4$!z8sxr^UikVo7Vx%ULXZ zJ&iTb<3Q74kdBFkZQkb#u*CLr()wxaX#6CxtP{G7Qxk zN4a7o>KQ1$?j(HXjO6P+z+v`nJWk-|F@ASQ7~?UnCjh4oCqzVHNw|SU zd1nxdf|hm1eK(ZqmOziwk?NXtQ%FLqG+2t|Uyf!riKr%7{gujw(b%4*S!f>#hGo4w zp0%j@OG1K^=}!s1JvLPLx^UeS1FOxYmwHb#SIj6`!8Q<~MbdgMt~-Rf z0AHvAuCwL)Sj#_o!?(43(lZm)_=o1ag}(fBdPH^sUi)STbOWWL`xUwUBc_+ierTVj zr6)@3!!2Ee2|>y6j=@qB-sd?jRv#DbyTy_{p;rGqwfgl+tM`kAjcTjkuWj`^l~%v= z-);5Z(ju+2m=@;zF)&u1KS!F3Ep!^9u0uy3n3k#AgONyCM*{|&bBn4ZgKi(>tS8|x zS6WZfds(lomH!EzQ6>Eg4zGPTr1=Y{?sg4l@zPpFjJf6g?#Oe1V9%i_{L5b-Jo0o|+u6-K$HBaAp#iB;w7?X=bT?kINbDOQW0 zhvh~iO#`=hl?ZhWMh$s>OmSEXi)itC<4{DQZEnTFkg{0}Qv~+tWRD&A5VE}XhUlH} zjX`&V{L3}{cEV59;4WHscr(14Cc-b{yvbW~3NNuz8I`%Vc6a(=*Wu9abUIPxziwe& zhy~~0xEJm^9YMEZx&9V*kD%QIRaJIMENlORj>_Ic{ilv{-GO7oOo{WBw9bV2pmKc< zsms^z!gwXEVo6I*Njv|OAF^aP#*}py&s2|Qvbbq<(4rMB6%|4Y+n)1sCyuvM`M1}P zhL@&R~*{ZtauW7B9hqhJcYI`h^L(=RLAJBs_^A z^$N%)fT&j>>J^Ck{t#D%AW|6+&YL=SVXWTW#UC)rJ|N&1>8mfZ-eF zC_1{;$SVEhAl;XS%z z=$@c873!$Uo)PU-r7ZVbr@eEm=cLn>@bYl8H)rsZck@ceGE()qfykx9g{AA+8^ zKq}mtCl+qC6>f1qDB8D5_7^*{RAJ*Lmb6eG5;pkyHz{dXE)peR;5Xtz|87cB!NrT3gz2;|I2ntMSs|a8IAU232ZZ5=?k|IPHTO zG5F1dxa7Egio?JSt{wO=yY{d_p*D)2cZ`f7?%XgEg^02QMcncIe8laVIm? zp^N;%y(z}9&ACq$#=e_QwwXicx36&wDW%^rqytuEZI-W>X*q`jQk^3(tP2l>x^QkL zo~sYtfUd{Q@|<Xu)IB#84X9g_nbTFc+)T;X&*dSz@vzYZA zuE%c-U77=`xbSL?f1TQ&$p1kz#>7VSRyWU<--!G(f%?PUuA+$a4%u~+azrG?fplDt zAvM+|y_(%ez#XuhSsK2QAlx+}UMDuVxeDd@nu`nNvY2u)sJXC}e;hD$#q8h=)`vPU z`k^v#Tzm{F!=O}#A)+$eIVvG;ipWAGgu3MX(;LHtn9H&iDO9qXgG{YbWY8&7 zL#R%8SG<%;O6j;!6WQI%VzSDk{=HOtfenV5J0dW0%0meU%iId}03WrN@e${fn05Ee zpjg%=R-Y5APl?stIdp!{J(AAFc^5W@4%+Nk!j4en(0M+HfXC#t5!Ndaf_u}As`+qs zl>Jan%__HD%3s{nW{_tshiEW|@2WouKmt)fCN5FWALSG+UNKxUNup^(o~>x{@;Ira ztK%QaR>{MU(fTm$Yy_~C;QeIO%w8?e@D{d<)ot*Q#p=!(wq~)q9Vh<$lxByL`qszj zVxDMk_2xTrsyl^oAci>P=Zes5^kVP}x;tU~ltuJ#%XrcrJRS1BNtiAbC2k9)Y!~i> zfz=`BYErgi%IQUH)m%-vMw1d(aTy*X=P>#ItRfAT9nCxvI{!RFX^`5n`Gh{)Z>eUq zwf)xge*IQ_qE59yEM&SWN2sCg3$d$~ZwQ}X)YiiO#Y!y%J=Foo*Na^qZHnrJDz+8q zY0*i)z}+%ovShdH!^`ZpgTSMEF_52hu;&XHm}EhF@BXpn*wPI9u$jO>oZmt_)_gr` z7@y?1YI2Vv<%KYG7j~aNsCo{r(r2CxCY=K+;Gwkc^E))X?x|3(8-QN-oGLiuqTh(M zLF#p$b^R1deI7^spgZ8LfwB0f)2O-uNb+AxZ%R;X<9|CSA002^mL33nCCHRlw|kx+4uc_|^(GA`E9R&)47je9)gfeF3q@FCEN{4li^5=TQ>%W+O{PV2A zGd!$Bb*0`ij7-tPWGnz9c4UNfCBhgyJh@3xYI1|RP=Y5ZUE*+%32uf!#$-8~z`I;O zAFei%R@(El^V)s<+lOiSM54n0BJsOKn~Wmyx3rEUe+zY&bhDTE*S}6($f=my@5GbF z-nb71gv_%!zowgi*)T$qempv9Yfb=^lR`J9$kT5k3*wX3`f;<^M#+{Pt6+-JaDy@_ zxR;$3z5PbSi0Mn?{FIpS;#TF2=}>bdg)X-x(X|CGywkF0CRWrNul5DE;a-q(MjECH zsMXCMSF0#)i*=rh?)7n*m%OA}MtqxA5nje$ctV@-tA+XxRhdV#b@Q&qWx4c9$;(7pKiH<-6@fCf72Ia9qQ+0oxmS+B)zw!Z6@#tjmz!_ zBzs%T6QSy&EFvl!?$K(&}7kFMK|qfpe&%f4`xrz zV%>_7LASY7cG_vh&fSV5=OU(}!E=Bl7L1WtDsRtcF;0=a4ONN5Ic19)cQU=G#WOi{FKI=GXM6ZVIE(=6R@sy@Ox|b z*U}Y;9q`bE+z%n0ETk140N9{YH15##2lmE=-cmwu*b%|o<`*ED2yP8HH@KI;=}hcT zuRIOP(+K_0cZwgqKR8y)-)5yhIGcG%w0DYSft;5kWdEZf@nh!`itJCFMM(A!N05{V z!M8J_WdGKjm$Bz^JEir=B{&0^`4pQ0bZTY*VNkhGgk}KGV~Q2YFj2w&SD64?K%~D4 zkSERtIy*X{k9J%5x}VdsO`B-%(%jE3j32eXRnjjJtdOOZib)1nI&xg;I;v?U0G_F)@K zYcZZE7jKx`5eM8YS)?hJYn{he4/{$G>-|3n|gmw)>tDr(LZOD9*vlovcTs8|NC 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 z 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 Date: Sun, 29 Oct 2023 22:55:34 +0530 Subject: [PATCH 16/38] Create config.py --- Team-CodeForMap/houseopenAi/config.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 Team-CodeForMap/houseopenAi/config.py diff --git a/Team-CodeForMap/houseopenAi/config.py b/Team-CodeForMap/houseopenAi/config.py new file mode 100644 index 00000000..93f45906 --- /dev/null +++ b/Team-CodeForMap/houseopenAi/config.py @@ -0,0 +1 @@ +apikey = "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" From 3cdf3a651a2b2ba74cf8d47bf928fc14988777c7 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:56:03 +0530 Subject: [PATCH 17/38] Create main.py --- Team-CodeForMap/houseopenAi/main.py | 103 ++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 Team-CodeForMap/houseopenAi/main.py diff --git a/Team-CodeForMap/houseopenAi/main.py b/Team-CodeForMap/houseopenAi/main.py new file mode 100644 index 00000000..64e5ca6f --- /dev/null +++ b/Team-CodeForMap/houseopenAi/main.py @@ -0,0 +1,103 @@ +import speech_recognition as sr +import os +import webbrowser +import openai +from config import apikey +import datetime +import pyttsx3 +import speech_recognition as sr + +chatStr = "" + +def chat(query): + global chatStr + print(chatStr) + openai.api_key = apikey + chatStr += f"Ankush: {query}\n loco: " + response = openai.Completion.create( + model="text-davinci-003", + prompt= chatStr, + temperature=0.7, + max_tokens=256, + top_p=1, + frequency_penalty=0, + presence_penalty=0 + ) + speak(response["choices"][0]["text"]) + chatStr += f"{response['choices'][0]['text']}\n" + return response["choices"][0]["text"] + +def ai(prompt): + openai.api_key = apikey + text = f"OpenAI response for Prompt: {prompt} \n *************************\n\n" + response = openai.Completion.create( + model="text-davinci-003", + prompt=prompt, + temperature=0.7, + max_tokens=256, + top_p=1, + frequency_penalty=0, + presence_penalty=0 + ) + text += response["choices"][0]["text"] + if not os.path.exists("Openai"): + os.mkdir("Openai") + with open(f"Openai/{''.join(prompt.split('intelligence')[1:]).strip()}.txt", "w") as f: + f.write(text) + +def speak(text): + engine = pyttsx3.init() + engine.say(text) + engine.runAndWait() + +def takeCommand(): + r = sr.Recognizer() + with sr.Microphone() as source: + print("Listening...") + r.adjust_for_ambient_noise(source) + audio = r.listen(source) + + try: + print("Recognizing...") + query = r.recognize_google(audio, language='en-in') + print(f"User said: {query}") + return query + except sr.UnknownValueError: + speak("Sorry, I didn't catch that. Could you please repeat?") + return takeCommand() + except sr.RequestError: + speak("I'm sorry, but I couldn't access the internet to recognize your speech. Please check your connection.") + return None + +if __name__ == '__main__': + speak("Hello, I'm loco, your voice assistant, and I'm here to help you with the 'HouseForYou' app. Let's get started!") + while True: + user_input = takeCommand().lower() + sites = [["youtube", "https://www.youtube.com"], ["wikipedia", "https://www.wikipedia.com"], ["google", "https://www.google.com"]] + for site in sites: + if f"Open {site[0]}".lower() in user_input: + speak(f"Opening {site[0]} sir...") + webbrowser.open(site[1]) + if "open music" in user_input: + musicPath = "C:/Users/artim/Downloads/Egzod & Maestro Chives - Royalty (Don Diablo Remix) [NCS Release].mp3" + os.startfile(musicPath) + elif "the time" in user_input: + hour = datetime.datetime.now().strftime("%H") + min = datetime.datetime.now().strftime("%M") + speak(f"Sir time is {hour} bajke {min} minutes") + elif "Using artificial intelligence".lower() in user_input.lower(): + ai(prompt=user_input) + elif "stop".lower() in user_input.lower(): + speak("good Bye") + exit() + elif "reset chat".lower() in user_input.lower(): + chatStr = "" + elif "one person " in user_input: + response = "I have two rooms in Delhi for one person:\n1. Rajendra Nagar - Price: 3000 rupees\n2. Rajeev Chowk - Price: 4000 rupees" + speak(response) + elif "two person " in user_input: + response = "I have two rooms in meerut for two person:\n1. Shastri Nagar - Price: 10000 rupees\n2. k-block - Price: 8000 rupees" + speak(response) + else: + print("Chatting...") + chat(user_input) From 3b985f1c494b281c184efc06f59cab60faafe1b0 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 23:08:13 +0530 Subject: [PATCH 18/38] Create README.md --- Team-CodeForMap/README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Team-CodeForMap/README.md diff --git a/Team-CodeForMap/README.md b/Team-CodeForMap/README.md new file mode 100644 index 00000000..51f1bb73 --- /dev/null +++ b/Team-CodeForMap/README.md @@ -0,0 +1,28 @@ +#### Team Name - Team CodeForMap +#### Problem Statement - Craeted a app for users to buy a house/rooms/pg on rent. +#### Team Leader Email - ankushkothiyal2012@gmail.com + +### A Brief of the Prototype: + HouseForYou, an innovative rental platform, revolutionizes the housing search process with a focus on user-centric features and advanced technologies. Tailored for a diverse audience, the app facilitates the seamless uploading of property details, covering rooms to PG accommodations. + +### Tech Stack: +AI Assistant: +Natural Language Processing (NLP): Open AI key (text-davinci-003) +Programming Languages: Python (common for integrating NLP models) +Maps Integration: +Google Maps API: Google Maps Directions API, Google Maps Geocoding API and Google Maps JavaScript API +App Development : Ionic-angular +Backend Development : +Framework: Node.js with Express.js +Database: MongoDB +Authentication: OAuth or JWT for secure user authentication. + +### Step-by-Step Code Execution Instructions: + In houseapp-frontend folder run the below command + ionic serve + In houseapp-backend folder run the below command + node index + when you see connected to Db it means all set, you can see the app in localhost + +### Future Scope: + In future i will some more functionality like house inner view using AR and app will be available in various languages. From 792b5104814ad74a7f1de5cacba007218532e6da Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 23:39:24 +0530 Subject: [PATCH 19/38] Update README.md --- Team-CodeForMap/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Team-CodeForMap/README.md b/Team-CodeForMap/README.md index 51f1bb73..8791943e 100644 --- a/Team-CodeForMap/README.md +++ b/Team-CodeForMap/README.md @@ -21,6 +21,7 @@ Authentication: OAuth or JWT for secure user authentication. In houseapp-frontend folder run the below command ionic serve In houseapp-backend folder run the below command + npm install dotenv node index when you see connected to Db it means all set, you can see the app in localhost From 4b8af9f6cc0d16249335047cfcdf5350d49fcb2d Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Sun, 29 Oct 2023 23:57:34 +0530 Subject: [PATCH 20/38] Update README.md --- Team-CodeForMap/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Team-CodeForMap/README.md b/Team-CodeForMap/README.md index 8791943e..f938d7a6 100644 --- a/Team-CodeForMap/README.md +++ b/Team-CodeForMap/README.md @@ -2,6 +2,8 @@ #### Problem Statement - Craeted a app for users to buy a house/rooms/pg on rent. #### Team Leader Email - ankushkothiyal2012@gmail.com +##### please find the houseapp-frontend file below link +https://github.com/01ankush/houseapp-frontend ### A Brief of the Prototype: HouseForYou, an innovative rental platform, revolutionizes the housing search process with a focus on user-centric features and advanced technologies. Tailored for a diverse audience, the app facilitates the seamless uploading of property details, covering rooms to PG accommodations. From f89df0b8ab1bfede4817f8a0e9f5b7a7abf3368b Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 01:16:01 +0530 Subject: [PATCH 21/38] Update README.md --- Team-CodeForMap/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Team-CodeForMap/README.md b/Team-CodeForMap/README.md index f938d7a6..6ed151d2 100644 --- a/Team-CodeForMap/README.md +++ b/Team-CodeForMap/README.md @@ -20,11 +20,12 @@ Database: MongoDB Authentication: OAuth or JWT for secure user authentication. ### Step-by-Step Code Execution Instructions: - In houseapp-frontend folder run the below command + In houseapp-frontend(cd houseapp-frontend) folder run the below command ionic serve - In houseapp-backend folder run the below command + In houseapp-backend (cd houseapp-backend) folder run the below command npm install dotenv node index + In houseopenAi folder run the main.py file by clicking on run icon in any editor(vs code, pycharm) when you see connected to Db it means all set, you can see the app in localhost ### Future Scope: From 0f489a7f35398a34c141f45a545115263676d426 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 02:05:43 +0530 Subject: [PATCH 22/38] Create gitattributes --- gitattributes | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 gitattributes diff --git a/gitattributes b/gitattributes new file mode 100644 index 00000000..95f90ad7 --- /dev/null +++ b/gitattributes @@ -0,0 +1,57 @@ +## Unity ## + +*.cs diff=csharp text +*.cginc text +*.shader text + +*.mat merge=unityyamlmerge eol=lf +*.anim merge=unityyamlmerge eol=lf +*.unity merge=unityyamlmerge eol=lf +*.prefab merge=unityyamlmerge eol=lf +*.physicsMaterial2D merge=unityyamlmerge eol=lf +*.physicMaterial merge=unityyamlmerge eol=lf +*.asset merge=unityyamlmerge eol=lf +*.meta merge=unityyamlmerge eol=lf +*.controller merge=unityyamlmerge eol=lf + + +## git-lfs ## + +#Image +*.jpg filter=lfs diff=lfs merge=lfs -text +*.jpeg filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.gif filter=lfs diff=lfs merge=lfs -text +*.psd filter=lfs diff=lfs merge=lfs -text +*.ai filter=lfs diff=lfs merge=lfs -text +*.tif filter=lfs diff=lfs merge=lfs -text + +#Audio +*.mp3 filter=lfs diff=lfs merge=lfs -text +*.wav filter=lfs diff=lfs merge=lfs -text +*.ogg filter=lfs diff=lfs merge=lfs -text + +#Video +*.mp4 filter=lfs diff=lfs merge=lfs -text +*.mov filter=lfs diff=lfs merge=lfs -text + +#3D Object +*.FBX filter=lfs diff=lfs merge=lfs -text +*.fbx filter=lfs diff=lfs merge=lfs -text +*.blend filter=lfs diff=lfs merge=lfs -text +*.obj filter=lfs diff=lfs merge=lfs -text + +#ETC +*.a filter=lfs diff=lfs merge=lfs -text +*.exr filter=lfs diff=lfs merge=lfs -text +*.tga filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.dll filter=lfs diff=lfs merge=lfs -text +*.unitypackage filter=lfs diff=lfs merge=lfs -text +*.aif filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.rns filter=lfs diff=lfs merge=lfs -text +*.reason filter=lfs diff=lfs merge=lfs -text +*.lxo filter=lfs diff=lfs merge=lfs -text +*.bc filter=lfs diff=lfs merge=lfs -text \ No newline at end of file From f5db005a1d71e4ddae6002826e58e1c64bfe358e Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 02:38:26 +0530 Subject: [PATCH 23/38] Update README.md --- Team-CodeForMap/README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Team-CodeForMap/README.md b/Team-CodeForMap/README.md index 6ed151d2..883a4851 100644 --- a/Team-CodeForMap/README.md +++ b/Team-CodeForMap/README.md @@ -12,7 +12,7 @@ AI Assistant: Natural Language Processing (NLP): Open AI key (text-davinci-003) Programming Languages: Python (common for integrating NLP models) Maps Integration: -Google Maps API: Google Maps Directions API, Google Maps Geocoding API and Google Maps JavaScript API +Google Maps API: Google Maps Directions API, Google Maps Geocoding API, Google Maps JavaScript API and Google Maps places API App Development : Ionic-angular Backend Development : Framework: Node.js with Express.js @@ -25,8 +25,16 @@ Authentication: OAuth or JWT for secure user authentication. In houseapp-backend (cd houseapp-backend) folder run the below command npm install dotenv node index - In houseopenAi folder run the main.py file by clicking on run icon in any editor(vs code, pycharm) when you see connected to Db it means all set, you can see the app in localhost + + In houseopenAi folder run the main.py file by clicking on run icon in any editor(vs code, pycharm) + # try to speak these commands + 1) what is the distance between any location to any location + 2) general questions + 3) #SPECIFIC ONES: + A) can you find for a one person room in delhi + B) can you help in finding two person room in meerut. + 4) For stopping say stop loco! ### Future Scope: In future i will some more functionality like house inner view using AR and app will be available in various languages. From 8f3370c2444f64b0673e26525312d5546f27c446 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 02:39:11 +0530 Subject: [PATCH 24/38] Update README.md --- Team-CodeForMap/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Team-CodeForMap/README.md b/Team-CodeForMap/README.md index 883a4851..4f3c9273 100644 --- a/Team-CodeForMap/README.md +++ b/Team-CodeForMap/README.md @@ -21,10 +21,10 @@ Authentication: OAuth or JWT for secure user authentication. ### Step-by-Step Code Execution Instructions: In houseapp-frontend(cd houseapp-frontend) folder run the below command - ionic serve + # ionic serve In houseapp-backend (cd houseapp-backend) folder run the below command - npm install dotenv - node index + # npm install dotenv + # node index when you see connected to Db it means all set, you can see the app in localhost In houseopenAi folder run the main.py file by clicking on run icon in any editor(vs code, pycharm) From b1a783a8f2fd0dc72831fef4351e450fafe8daeb Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 02:39:39 +0530 Subject: [PATCH 25/38] Update README.md --- Team-CodeForMap/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Team-CodeForMap/README.md b/Team-CodeForMap/README.md index 4f3c9273..fecced9d 100644 --- a/Team-CodeForMap/README.md +++ b/Team-CodeForMap/README.md @@ -21,10 +21,10 @@ Authentication: OAuth or JWT for secure user authentication. ### Step-by-Step Code Execution Instructions: In houseapp-frontend(cd houseapp-frontend) folder run the below command - # ionic serve + #### ionic serve In houseapp-backend (cd houseapp-backend) folder run the below command - # npm install dotenv - # node index + #### npm install dotenv + #### node index when you see connected to Db it means all set, you can see the app in localhost In houseopenAi folder run the main.py file by clicking on run icon in any editor(vs code, pycharm) From 3f2c60c288c97bbc11b12208c5e4cde167a2f93c Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 02:43:04 +0530 Subject: [PATCH 26/38] Update README.md --- Team-CodeForMap/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Team-CodeForMap/README.md b/Team-CodeForMap/README.md index fecced9d..86ee7cfd 100644 --- a/Team-CodeForMap/README.md +++ b/Team-CodeForMap/README.md @@ -37,4 +37,6 @@ Authentication: OAuth or JWT for secure user authentication. 4) For stopping say stop loco! ### Future Scope: - In future i will some more functionality like house inner view using AR and app will be available in various languages. + ##### In future i will add some more functionality like inside view of house using AR , app will be available in various languages and user can pay their monthly wages to owner directly through app as well. + ##### Messaging system so user and owner can do direct messages to each other. + From 6bd5cef3473ccc015a84fe563851c20cfdf06062 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 02:45:48 +0530 Subject: [PATCH 27/38] Update README.md --- Team-CodeForMap/README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Team-CodeForMap/README.md b/Team-CodeForMap/README.md index 86ee7cfd..3b145c41 100644 --- a/Team-CodeForMap/README.md +++ b/Team-CodeForMap/README.md @@ -8,16 +8,15 @@ https://github.com/01ankush/houseapp-frontend HouseForYou, an innovative rental platform, revolutionizes the housing search process with a focus on user-centric features and advanced technologies. Tailored for a diverse audience, the app facilitates the seamless uploading of property details, covering rooms to PG accommodations. ### Tech Stack: -AI Assistant: +###### AI Assistant: Natural Language Processing (NLP): Open AI key (text-davinci-003) Programming Languages: Python (common for integrating NLP models) -Maps Integration: +###### Maps Integration: Google Maps API: Google Maps Directions API, Google Maps Geocoding API, Google Maps JavaScript API and Google Maps places API -App Development : Ionic-angular -Backend Development : -Framework: Node.js with Express.js -Database: MongoDB -Authentication: OAuth or JWT for secure user authentication. +###### App Development : Ionic-angular +###### Backend Development - +###### Framework: Node.js with Express.js +###### Database: MongoDB ### Step-by-Step Code Execution Instructions: In houseapp-frontend(cd houseapp-frontend) folder run the below command From b666596a7ead22acf1ddcc0d638af4ba742450ba Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 02:46:42 +0530 Subject: [PATCH 28/38] Update README.md --- Team-CodeForMap/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Team-CodeForMap/README.md b/Team-CodeForMap/README.md index 3b145c41..ca1cafe4 100644 --- a/Team-CodeForMap/README.md +++ b/Team-CodeForMap/README.md @@ -8,15 +8,15 @@ https://github.com/01ankush/houseapp-frontend HouseForYou, an innovative rental platform, revolutionizes the housing search process with a focus on user-centric features and advanced technologies. Tailored for a diverse audience, the app facilitates the seamless uploading of property details, covering rooms to PG accommodations. ### Tech Stack: -###### AI Assistant: +#### AI Assistant: Natural Language Processing (NLP): Open AI key (text-davinci-003) Programming Languages: Python (common for integrating NLP models) -###### Maps Integration: +#### Maps Integration: Google Maps API: Google Maps Directions API, Google Maps Geocoding API, Google Maps JavaScript API and Google Maps places API -###### App Development : Ionic-angular -###### Backend Development - -###### Framework: Node.js with Express.js -###### Database: MongoDB +#### App Development : Ionic-angular +#### Backend Development - +#### Framework: Node.js with Express.js +#### Database: MongoDB ### Step-by-Step Code Execution Instructions: In houseapp-frontend(cd houseapp-frontend) folder run the below command From 95f9bbf52ecc381b3879a3678674f69d9c53cefe Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 08:31:02 +0530 Subject: [PATCH 29/38] Update README.md --- Team-CodeForMap/README.md | 171 +++++++++++++++++++++++++++++--------- 1 file changed, 131 insertions(+), 40 deletions(-) diff --git a/Team-CodeForMap/README.md b/Team-CodeForMap/README.md index ca1cafe4..9f4f879a 100644 --- a/Team-CodeForMap/README.md +++ b/Team-CodeForMap/README.md @@ -1,41 +1,132 @@ -#### Team Name - Team CodeForMap -#### Problem Statement - Craeted a app for users to buy a house/rooms/pg on rent. -#### Team Leader Email - ankushkothiyal2012@gmail.com - -##### please find the houseapp-frontend file below link -https://github.com/01ankush/houseapp-frontend -### A Brief of the Prototype: - HouseForYou, an innovative rental platform, revolutionizes the housing search process with a focus on user-centric features and advanced technologies. Tailored for a diverse audience, the app facilitates the seamless uploading of property details, covering rooms to PG accommodations. - -### Tech Stack: -#### AI Assistant: -Natural Language Processing (NLP): Open AI key (text-davinci-003) -Programming Languages: Python (common for integrating NLP models) -#### Maps Integration: -Google Maps API: Google Maps Directions API, Google Maps Geocoding API, Google Maps JavaScript API and Google Maps places API -#### App Development : Ionic-angular -#### Backend Development - -#### Framework: Node.js with Express.js -#### Database: MongoDB - -### Step-by-Step Code Execution Instructions: - In houseapp-frontend(cd houseapp-frontend) folder run the below command - #### ionic serve - In houseapp-backend (cd houseapp-backend) folder run the below command - #### npm install dotenv - #### node index - when you see connected to Db it means all set, you can see the app in localhost - - In houseopenAi folder run the main.py file by clicking on run icon in any editor(vs code, pycharm) - # try to speak these commands - 1) what is the distance between any location to any location - 2) general questions - 3) #SPECIFIC ONES: - A) can you find for a one person room in delhi - B) can you help in finding two person room in meerut. - 4) For stopping say stop loco! +**Team Information:** + +- Team Name: Team CodeForMap +- Problem Statement: Developed an app for users to buy houses, rooms, or rent PG accommodations. +- Team Leader Email: ankushkothiyal2012@gmail.com + +**Repository Links:** +- Please find the houseapp-frontend repository here: + +- [houseapp-frontend GitHub Repository](https://github.com/01ankush/houseapp-frontend) + +**Project Overview:** + +HouseForYou is an innovative rental platform that simplifies the housing search process, prioritizing user-centric features and advanced technologies. The app enables users to effortlessly upload property details, encompassing everything from individual rooms to PG accommodations. + +**Tech Stack:** + +- **AI Assistant:** + - Natural Language Processing (NLP) with OpenAI key (text-davinci-003) + - Programming Language: Python (used for integrating NLP models) + +- **Maps Integration:** + - Google Maps API, including Google Maps Directions API, Google Maps Geocoding API, Google Maps JavaScript API, and Google Maps Places API + +- **App Development:** + - Ionic-angular + +- **Backend Development:** + - Framework: Node.js with Express.js + - Database: MongoDB + +**Step-by-Step Code Execution Instructions for houseapp-frontend:** + +1. **Navigate to the Frontend Folder:** + - Open your terminal and change the directory to "houseapp-frontend" using the following command: + ```shell + cd houseapp-frontend + ``` + +2. **Run Ionic Development Server:** + - Start the development server by executing the command: + ```shell + ionic serve + ``` + - This command will host your app on a local server, accessible through your web browser. -### Future Scope: - ##### In future i will add some more functionality like inside view of house using AR , app will be available in various languages and user can pay their monthly wages to owner directly through app as well. - ##### Messaging system so user and owner can do direct messages to each other. - +3. **Inspect Your App in the Browser:** + - Open your web browser and navigate to the local host URL where your app is running, usually at `http://localhost:8100/`. + - Right-click on your app and choose "Inspect" to access developer tools for viewing and analyzing the app's interface. + +**Running Your App within an Android Emulator:** + +Before testing on an Android emulator, ensure the Android SDK, Java, and emulator are properly configured. + +1. **Build Your App:** + - Use the following command to build your Ionic app: + ```shell + ionic build + ``` + +2. **Copy the Web Assets:** + - Copy your web assets to the native Android project folder with this command: + ```shell + npx cap copy + ``` + +3. **Open the Android Project:** + - Launch Android Studio by executing: + ```shell + npx cap open android + ``` + - This command opens the project files in Android Studio. + +4. **Run Your App:** + - In Android Studio, click the "Run" button to launch your app within the Android emulator. + +By following these steps, you can effectively test and debug your application within the Android emulator. + +**Code Execution Instructions for houseapp-backend:** + +1. **Navigate to the Backend Folder:** + - In your terminal, change the directory to "houseapp-backend" using this command: + ```shell + cd houseapp-backend + ``` + +2. **Install Dependencies:** + - Install the "dotenv" package by executing the following command: + ```shell + npm install dotenv + ``` + +3. **Run the Backend Server:** + - Start the backend server by running this command: + ```shell + node index + ``` + - The message "Connected to Db" indicates that the server is up and running. + +4. **Access the App:** + - Access the app on your local host. Open your web browser and visit the URL, typically `http://localhost:YOUR_PORT`. + - Replace `YOUR_PORT` with the port number specified in your backend configuration. + +These steps enable you to run your backend server and access the app locally. + +**Code Execution Instructions for houseopenAi:** + +1. **Navigate to the OpenAI Folder:** + - Open your preferred code editor (e.g., VS Code, PyCharm) and access the "houseopenAi" folder. + +2. **Run the Python Script:** + - Open the "main.py" file. + - Execute the Python script by clicking the "Run" icon in your code editor. + +3. **Interact with the App:** + - Interact with the app by speaking specific commands, such as: + 1. "What is the distance between any location to any location." + 2. Asking general questions. + 3. Using specific commands like: + - "Can you find a one-person room in Delhi?" + - "Can you help in finding a two-person room in Meerut?" + 4. To stop the app, say "Stop Loco!" + +By following these steps, you can run and interact with your applications for houseapp-frontend, houseapp-backend, and houseopenAi projects. + +**Future Scope:** + +In the future, the project aims to add additional features, including: +- Providing an inside view of houses using Augmented Reality (AR). +- Offering the app in various languages to cater to a broader audience. +- Enabling users to make monthly payments directly to property owners through the app. +- Implementing a messaging system for direct communication between users and property owners. From 8578d30eb352f9f3bf554cee0ddaf82041556530 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 08:32:48 +0530 Subject: [PATCH 30/38] Create README.md --- README.md | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..9f4f879a --- /dev/null +++ b/README.md @@ -0,0 +1,132 @@ +**Team Information:** + +- Team Name: Team CodeForMap +- Problem Statement: Developed an app for users to buy houses, rooms, or rent PG accommodations. +- Team Leader Email: ankushkothiyal2012@gmail.com + +**Repository Links:** +- Please find the houseapp-frontend repository here: + +- [houseapp-frontend GitHub Repository](https://github.com/01ankush/houseapp-frontend) + +**Project Overview:** + +HouseForYou is an innovative rental platform that simplifies the housing search process, prioritizing user-centric features and advanced technologies. The app enables users to effortlessly upload property details, encompassing everything from individual rooms to PG accommodations. + +**Tech Stack:** + +- **AI Assistant:** + - Natural Language Processing (NLP) with OpenAI key (text-davinci-003) + - Programming Language: Python (used for integrating NLP models) + +- **Maps Integration:** + - Google Maps API, including Google Maps Directions API, Google Maps Geocoding API, Google Maps JavaScript API, and Google Maps Places API + +- **App Development:** + - Ionic-angular + +- **Backend Development:** + - Framework: Node.js with Express.js + - Database: MongoDB + +**Step-by-Step Code Execution Instructions for houseapp-frontend:** + +1. **Navigate to the Frontend Folder:** + - Open your terminal and change the directory to "houseapp-frontend" using the following command: + ```shell + cd houseapp-frontend + ``` + +2. **Run Ionic Development Server:** + - Start the development server by executing the command: + ```shell + ionic serve + ``` + - This command will host your app on a local server, accessible through your web browser. + +3. **Inspect Your App in the Browser:** + - Open your web browser and navigate to the local host URL where your app is running, usually at `http://localhost:8100/`. + - Right-click on your app and choose "Inspect" to access developer tools for viewing and analyzing the app's interface. + +**Running Your App within an Android Emulator:** + +Before testing on an Android emulator, ensure the Android SDK, Java, and emulator are properly configured. + +1. **Build Your App:** + - Use the following command to build your Ionic app: + ```shell + ionic build + ``` + +2. **Copy the Web Assets:** + - Copy your web assets to the native Android project folder with this command: + ```shell + npx cap copy + ``` + +3. **Open the Android Project:** + - Launch Android Studio by executing: + ```shell + npx cap open android + ``` + - This command opens the project files in Android Studio. + +4. **Run Your App:** + - In Android Studio, click the "Run" button to launch your app within the Android emulator. + +By following these steps, you can effectively test and debug your application within the Android emulator. + +**Code Execution Instructions for houseapp-backend:** + +1. **Navigate to the Backend Folder:** + - In your terminal, change the directory to "houseapp-backend" using this command: + ```shell + cd houseapp-backend + ``` + +2. **Install Dependencies:** + - Install the "dotenv" package by executing the following command: + ```shell + npm install dotenv + ``` + +3. **Run the Backend Server:** + - Start the backend server by running this command: + ```shell + node index + ``` + - The message "Connected to Db" indicates that the server is up and running. + +4. **Access the App:** + - Access the app on your local host. Open your web browser and visit the URL, typically `http://localhost:YOUR_PORT`. + - Replace `YOUR_PORT` with the port number specified in your backend configuration. + +These steps enable you to run your backend server and access the app locally. + +**Code Execution Instructions for houseopenAi:** + +1. **Navigate to the OpenAI Folder:** + - Open your preferred code editor (e.g., VS Code, PyCharm) and access the "houseopenAi" folder. + +2. **Run the Python Script:** + - Open the "main.py" file. + - Execute the Python script by clicking the "Run" icon in your code editor. + +3. **Interact with the App:** + - Interact with the app by speaking specific commands, such as: + 1. "What is the distance between any location to any location." + 2. Asking general questions. + 3. Using specific commands like: + - "Can you find a one-person room in Delhi?" + - "Can you help in finding a two-person room in Meerut?" + 4. To stop the app, say "Stop Loco!" + +By following these steps, you can run and interact with your applications for houseapp-frontend, houseapp-backend, and houseopenAi projects. + +**Future Scope:** + +In the future, the project aims to add additional features, including: +- Providing an inside view of houses using Augmented Reality (AR). +- Offering the app in various languages to cater to a broader audience. +- Enabling users to make monthly payments directly to property owners through the app. +- Implementing a messaging system for direct communication between users and property owners. From e6ef912e8b714ec9133b7897a3fd31e8413cf6d6 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 09:40:43 +0530 Subject: [PATCH 31/38] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9f4f879a..fbecea66 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,10 @@ **Repository Links:** - Please find the houseapp-frontend repository here: - - [houseapp-frontend GitHub Repository](https://github.com/01ankush/houseapp-frontend) - +- Prototype Presentation link : +- [drive link](https://drive.google.com/drive/folders/1Z8LC8B9MlcAvfmvJ5qZrg_X4wMhVVcRs?usp=sharing) + **Project Overview:** HouseForYou is an innovative rental platform that simplifies the housing search process, prioritizing user-centric features and advanced technologies. The app enables users to effortlessly upload property details, encompassing everything from individual rooms to PG accommodations. From e28f4bec45587a2d62d275ec471aba78d938fb1b Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 13:14:50 +0530 Subject: [PATCH 32/38] Create .env --- Team-CodeForMap/houseapp-backend/.env | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Team-CodeForMap/houseapp-backend/.env diff --git a/Team-CodeForMap/houseapp-backend/.env b/Team-CodeForMap/houseapp-backend/.env new file mode 100644 index 00000000..feada9cb --- /dev/null +++ b/Team-CodeForMap/houseapp-backend/.env @@ -0,0 +1,2 @@ +// replace username and password with yours +const MONGODB_URI = "mongodb+srv://:@cluster0.agvnxsg.mongodb.net/"; From 4a59a11054d1e5e11b64dc082cb755517d24ea6b Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 13:16:42 +0530 Subject: [PATCH 33/38] Update config.py --- Team-CodeForMap/houseopenAi/config.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Team-CodeForMap/houseopenAi/config.py b/Team-CodeForMap/houseopenAi/config.py index 93f45906..79a6a086 100644 --- a/Team-CodeForMap/houseopenAi/config.py +++ b/Team-CodeForMap/houseopenAi/config.py @@ -1 +1,2 @@ -apikey = "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" +# Create a new account on open ai and you will get free $5 for api key ,generate one and paste that here.. +apikey = "your api key" From 2b81aa6a1629cb9b9f16b0505a95966eb8ddfe45 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 13:28:30 +0530 Subject: [PATCH 34/38] Update README.md --- README.md | 49 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index fbecea66..ad0e4a2e 100644 --- a/README.md +++ b/README.md @@ -77,35 +77,58 @@ Before testing on an Android emulator, ensure the Android SDK, Java, and emulato By following these steps, you can effectively test and debug your application within the Android emulator. -**Code Execution Instructions for houseapp-backend:** +**Instructions for Running the houseapp-backend:** +- Ensure that you have created a MongoDB connection string for your MongoDB cluster and added it to the .env file. -1. **Navigate to the Backend Folder:** - - In your terminal, change the directory to "houseapp-backend" using this command: +1. **Navigate to the Backend Directory:** + - Open your terminal and change the current directory to the "houseapp-backend" folder using the following command: ```shell cd houseapp-backend ``` -2. **Install Dependencies:** - - Install the "dotenv" package by executing the following command: +2. **Install Required Dependencies:** + - Install the "dotenv" package by running this command: ```shell npm install dotenv ``` -3. **Run the Backend Server:** - - Start the backend server by running this command: +3. **Start the Backend Server:** + - Initiate the backend server by executing the following command: ```shell node index ``` - - The message "Connected to Db" indicates that the server is up and running. + - If you see the message "Connected to Db," it means the server is running successfully. -4. **Access the App:** - - Access the app on your local host. Open your web browser and visit the URL, typically `http://localhost:YOUR_PORT`. - - Replace `YOUR_PORT` with the port number specified in your backend configuration. +4. **Access the Application:** + - Access the application on your local machine by opening a web browser and navigating to the URL, usually `http://localhost:YOUR_PORT`. + - Replace `YOUR_PORT` with the specific port number configured in your backend settings. -These steps enable you to run your backend server and access the app locally. +These instructions will help you run the houseapp-backend, enabling you to access the application locally. -**Code Execution Instructions for houseopenAi:** +**Instructions for Generating a Free OpenAI API Key:** +1. **Create an OpenAI Account:** + - Begin by visiting the OpenAI website (https://www.openai.com) and creating a new account if you haven't already. + +2. **Access Your Dashboard:** + - After creating your account, log in to the OpenAI platform and access your user dashboard. + +3. **Generate an API Key:** + - In your OpenAI dashboard, navigate to the API or Developer section. Look for the option to generate an API key. + +4. **Create a New API Key:** + - Follow the provided instructions to create a new API key. You may need to specify the type of access you require (e.g., GPT-3, DALL-E) and any usage restrictions. + +5. **Copy the API Key:** + - Once your API key is generated, copy it to your clipboard. + +6. **Configure the API Key in Your Project:** + - Open the `config.py` file in your project and paste the API key you copied in the previous step. + +7. **Save the `config.py` File:** + - After pasting the API key, save the `config.py` file to ensure that your project can access the OpenAI API. + +By following these steps, you will generate a free OpenAI API key and configure it in your project's `config.py` file, allowing you to make API requests to OpenAI services. 1. **Navigate to the OpenAI Folder:** - Open your preferred code editor (e.g., VS Code, PyCharm) and access the "houseopenAi" folder. From 1072c379576558ce0a3a61b424f752d393dc3e28 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 13:29:58 +0530 Subject: [PATCH 35/38] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ad0e4a2e..175b0974 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,7 @@ By following these steps, you can effectively test and debug your application wi - Replace `YOUR_PORT` with the specific port number configured in your backend settings. These instructions will help you run the houseapp-backend, enabling you to access the application locally. +**----Code Execution Instructions for houseopenAi----** **Instructions for Generating a Free OpenAI API Key:** From e74a5218dea663be9586b9fe046910a9564e3489 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 13:32:25 +0530 Subject: [PATCH 36/38] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 175b0974..08a97d00 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,7 @@ By following these steps, you can effectively test and debug your application wi - Replace `YOUR_PORT` with the specific port number configured in your backend settings. These instructions will help you run the houseapp-backend, enabling you to access the application locally. + **----Code Execution Instructions for houseopenAi----** **Instructions for Generating a Free OpenAI API Key:** From c4820e40824f37f9dafbbe46c27745696f205e63 Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 13:35:55 +0530 Subject: [PATCH 37/38] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 08a97d00..c84be8df 100644 --- a/README.md +++ b/README.md @@ -138,8 +138,8 @@ By following these steps, you will generate a free OpenAI API key and configure - Open the "main.py" file. - Execute the Python script by clicking the "Run" icon in your code editor. -3. **Interact with the App:** - - Interact with the app by speaking specific commands, such as: +3. **Interact with the Loco:** + - Interact with the Loco by speaking specific commands, such as: 1. "What is the distance between any location to any location." 2. Asking general questions. 3. Using specific commands like: From 5da22f3ce2453fc4953f028a31c90b073c4fe78a Mon Sep 17 00:00:00 2001 From: Ankush kumar kothiyal <82761600+01ankush@users.noreply.github.com> Date: Mon, 30 Oct 2023 13:36:34 +0530 Subject: [PATCH 38/38] Update README.md --- Team-CodeForMap/README.md | 60 ++++++++++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 17 deletions(-) diff --git a/Team-CodeForMap/README.md b/Team-CodeForMap/README.md index 9f4f879a..c84be8df 100644 --- a/Team-CodeForMap/README.md +++ b/Team-CodeForMap/README.md @@ -6,9 +6,10 @@ **Repository Links:** - Please find the houseapp-frontend repository here: - - [houseapp-frontend GitHub Repository](https://github.com/01ankush/houseapp-frontend) - +- Prototype Presentation link : +- [drive link](https://drive.google.com/drive/folders/1Z8LC8B9MlcAvfmvJ5qZrg_X4wMhVVcRs?usp=sharing) + **Project Overview:** HouseForYou is an innovative rental platform that simplifies the housing search process, prioritizing user-centric features and advanced technologies. The app enables users to effortlessly upload property details, encompassing everything from individual rooms to PG accommodations. @@ -76,35 +77,60 @@ Before testing on an Android emulator, ensure the Android SDK, Java, and emulato By following these steps, you can effectively test and debug your application within the Android emulator. -**Code Execution Instructions for houseapp-backend:** +**Instructions for Running the houseapp-backend:** +- Ensure that you have created a MongoDB connection string for your MongoDB cluster and added it to the .env file. -1. **Navigate to the Backend Folder:** - - In your terminal, change the directory to "houseapp-backend" using this command: +1. **Navigate to the Backend Directory:** + - Open your terminal and change the current directory to the "houseapp-backend" folder using the following command: ```shell cd houseapp-backend ``` -2. **Install Dependencies:** - - Install the "dotenv" package by executing the following command: +2. **Install Required Dependencies:** + - Install the "dotenv" package by running this command: ```shell npm install dotenv ``` -3. **Run the Backend Server:** - - Start the backend server by running this command: +3. **Start the Backend Server:** + - Initiate the backend server by executing the following command: ```shell node index ``` - - The message "Connected to Db" indicates that the server is up and running. + - If you see the message "Connected to Db," it means the server is running successfully. + +4. **Access the Application:** + - Access the application on your local machine by opening a web browser and navigating to the URL, usually `http://localhost:YOUR_PORT`. + - Replace `YOUR_PORT` with the specific port number configured in your backend settings. + +These instructions will help you run the houseapp-backend, enabling you to access the application locally. + +**----Code Execution Instructions for houseopenAi----** + +**Instructions for Generating a Free OpenAI API Key:** + +1. **Create an OpenAI Account:** + - Begin by visiting the OpenAI website (https://www.openai.com) and creating a new account if you haven't already. + +2. **Access Your Dashboard:** + - After creating your account, log in to the OpenAI platform and access your user dashboard. + +3. **Generate an API Key:** + - In your OpenAI dashboard, navigate to the API or Developer section. Look for the option to generate an API key. + +4. **Create a New API Key:** + - Follow the provided instructions to create a new API key. You may need to specify the type of access you require (e.g., GPT-3, DALL-E) and any usage restrictions. -4. **Access the App:** - - Access the app on your local host. Open your web browser and visit the URL, typically `http://localhost:YOUR_PORT`. - - Replace `YOUR_PORT` with the port number specified in your backend configuration. +5. **Copy the API Key:** + - Once your API key is generated, copy it to your clipboard. -These steps enable you to run your backend server and access the app locally. +6. **Configure the API Key in Your Project:** + - Open the `config.py` file in your project and paste the API key you copied in the previous step. -**Code Execution Instructions for houseopenAi:** +7. **Save the `config.py` File:** + - After pasting the API key, save the `config.py` file to ensure that your project can access the OpenAI API. +By following these steps, you will generate a free OpenAI API key and configure it in your project's `config.py` file, allowing you to make API requests to OpenAI services. 1. **Navigate to the OpenAI Folder:** - Open your preferred code editor (e.g., VS Code, PyCharm) and access the "houseopenAi" folder. @@ -112,8 +138,8 @@ These steps enable you to run your backend server and access the app locally. - Open the "main.py" file. - Execute the Python script by clicking the "Run" icon in your code editor. -3. **Interact with the App:** - - Interact with the app by speaking specific commands, such as: +3. **Interact with the Loco:** + - Interact with the Loco by speaking specific commands, such as: 1. "What is the distance between any location to any location." 2. Asking general questions. 3. Using specific commands like: