From b48d5ee19e5228d9bcb979f2140f996fe7a12723 Mon Sep 17 00:00:00 2001 From: andrei-mihnea-cerbu Date: Mon, 8 Apr 2024 00:03:24 +0300 Subject: [PATCH] api v2.0 --- backend/API/API.csproj | 25 +- backend/API/Controllers/ChatController.cs | 3 +- backend/API/Controllers/DoctorsController.cs | 139 ++- .../Controllers/MedicalHistoryController.cs | 82 +- backend/API/Controllers/PacientsController.cs | 117 --- backend/API/Controllers/PatientsController.cs | 80 ++ .../Middlewares/ApiKeyValidationMiddleware.cs | 4 +- .../API/Middlewares/BodyCheckMiddleware.cs | 5 +- backend/API/Program.cs | 13 +- backend/API/appsettings.json | 1 - backend/API/bin/Debug/net8.0/API.deps.json | 21 +- backend/API/bin/Debug/net8.0/API.dll | Bin 12288 -> 33280 bytes backend/API/bin/Debug/net8.0/API.exe | Bin 142848 -> 142848 bytes backend/API/bin/Debug/net8.0/API.pdb | Bin 23604 -> 28124 bytes backend/API/bin/Debug/net8.0/Application.dll | Bin 10240 -> 58880 bytes backend/API/bin/Debug/net8.0/Application.pdb | Bin 12448 -> 24900 bytes backend/API/bin/Debug/net8.0/Core.dll | Bin 7680 -> 7680 bytes backend/API/bin/Debug/net8.0/Core.pdb | Bin 12596 -> 12528 bytes .../API/bin/Debug/net8.0/Infrastructure.dll | Bin 30208 -> 37376 bytes .../API/bin/Debug/net8.0/Infrastructure.pdb | Bin 17776 -> 19104 bytes ...crosoft.EntityFrameworkCore.Relational.dll | Bin 1986480 -> 1988032 bytes backend/API/bin/Debug/net8.0/appsettings.json | 4 +- backend/API/obj/API.csproj.nuget.dgspec.json | 14 +- .../API/obj/Debug/net8.0/API.AssemblyInfo.cs | 2 +- .../Debug/net8.0/API.AssemblyInfoInputs.cache | 2 +- backend/API/obj/Debug/net8.0/API.assets.cache | Bin 31799 -> 31799 bytes .../net8.0/API.csproj.AssemblyReference.cache | Bin 14132 -> 14447 bytes .../net8.0/API.csproj.CoreCompileInputs.cache | 2 +- backend/API/obj/Debug/net8.0/API.dll | Bin 12288 -> 33280 bytes backend/API/obj/Debug/net8.0/API.pdb | Bin 23604 -> 28124 bytes .../API/obj/Debug/net8.0/API.sourcelink.json | 2 +- .../HealthcareManager.API.AssemblyInfo.cs | 22 + ...thcareManager.API.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 19 + .../HealthcareManager.API.GlobalUsings.g.cs | 17 + .../net8.0/HealthcareManager.API.assets.cache | Bin 0 -> 31799 bytes ...Manager.API.csproj.AssemblyReference.cache | Bin 0 -> 14132 bytes backend/API/obj/Debug/net8.0/apphost.exe | Bin 142848 -> 142848 bytes backend/API/obj/Debug/net8.0/ref/API.dll | Bin 8192 -> 14336 bytes backend/API/obj/Debug/net8.0/refint/API.dll | Bin 8192 -> 14336 bytes ...thcareManager.API.csproj.nuget.dgspec.json | 307 +++++++ ...HealthcareManager.API.csproj.nuget.g.props | 25 + ...althcareManager.API.csproj.nuget.g.targets | 10 + backend/API/obj/project.assets.json | 18 +- backend/API/obj/project.nuget.cache | 4 +- .../API/obj/rider.project.model.nuget.info | 2 +- backend/API/obj/rider.project.restore.info | 2 +- backend/Application/Application.csproj | 23 +- backend/Application/Endpoints/BaseResponse.cs | 4 +- .../Endpoints/Doctors/Login/DoctorLoginDto.cs | 4 +- .../Doctors/Login/DoctorLoginHandler.cs | 27 +- .../Doctors/Login/DoctorLoginValidation.cs | 23 +- .../Doctors/Profile/DoctorProfileHandler.cs | 87 +- ...rofileDto.cs => DoctorProfileUpdateDto.cs} | 5 +- .../Profile/DoctorProfileValidation.cs | 39 +- .../Registration/DoctorRegistrationDto.cs | 12 +- .../Registration/DoctorRegistrationHandler.cs | 35 +- .../DoctorRegistrationValidation.cs | 25 +- .../Doctors/ResetPassword/DoctorLoginDto.cs | 7 + .../DoctorResetPasswordHandler.cs | 43 +- .../DoctorResetPasswordValidation.cs | 25 +- .../Application/Endpoints/HttpStatusCodes.cs | 16 + ...storyDto.cs => MedicalHistoryCreateDto.cs} | 6 +- .../MedicalHistoryCreateValidation.cs | 23 +- .../MedicalHistories/MedicalHistoryHandler.cs | 132 ++- .../MedicalHistoryUpdateDto.cs | 7 +- .../MedicalHistoryUpdateValidation.cs | 25 +- .../Pacients/Login/PacientLoginHandler.cs | 37 - .../Pacients/Login/PacientLoginValidation.cs | 29 - .../Pacients/Profile/PacientProfileDto.cs | 9 - .../Pacients/Profile/PacientProfileHandler.cs | 120 --- .../Profile/PacientProfileValidation.cs | 40 - .../PacientRegistrationHandler.cs | 48 -- .../PacientRegistrationValidation.cs | 34 - .../PacientResetPasswordHandler.cs | 58 -- .../PacientResetPasswordValidation.cs | 37 - .../Login/PatientLoginDto.cs} | 6 +- .../Patients/Login/PatientLoginHandler.cs | 37 + .../Patients/Login/PatientLoginValidation.cs | 31 + .../Patients/Profile/PatientProfileDto.cs | 9 + .../Patients/Profile/PatientProfileHandler.cs | 110 +++ .../Profile/PatientProfileValidation.cs | 47 + .../Registration/PatientRegistrationDto.cs} | 6 +- .../PatientRegistrationHandler.cs | 51 ++ .../PatientRegistrationValidation.cs | 34 + .../Patients/ResetPassword/PatientLoginDto.cs | 7 + .../PatientResetPasswordHandler.cs | 50 ++ .../PatientResetPasswordValidation.cs | 40 + .../Services/Database/IConversation.cs | 2 +- .../Application/Services/Database/IDoctors.cs | 3 +- .../Services/Database/IMedicalHistory.cs | 11 +- .../Services/Database/IMongoDbServices.cs | 12 + .../Services/Database/IPatients.cs | 16 +- .../HashingAlgorithms/IHashingAlgorithms.cs | 6 + .../bin/Debug/net8.0/Application.deps.json | 292 ++++++- .../bin/Debug/net8.0/Application.dll | Bin 10240 -> 58880 bytes .../bin/Debug/net8.0/Application.pdb | Bin 12448 -> 24900 bytes backend/Application/bin/Debug/net8.0/Core.dll | Bin 0 -> 7680 bytes backend/Application/bin/Debug/net8.0/Core.pdb | Bin 0 -> 12528 bytes .../obj/Application.csproj.nuget.dgspec.json | 71 +- .../obj/Application.csproj.nuget.g.props | 4 + .../Debug/net8.0/Applicat.44B5EDA2.Up2Date | 0 .../Debug/net8.0/Application.AssemblyInfo.cs | 2 +- .../Application.AssemblyInfoInputs.cache | 2 +- .../obj/Debug/net8.0/Application.assets.cache | Bin 928 -> 11909 bytes ...Application.csproj.AssemblyReference.cache | Bin 558 -> 6473 bytes ...Application.csproj.CoreCompileInputs.cache | 2 +- .../Application.csproj.FileListAbsolute.txt | 3 + .../obj/Debug/net8.0/Application.dll | Bin 10240 -> 58880 bytes .../obj/Debug/net8.0/Application.pdb | Bin 12448 -> 24900 bytes .../Debug/net8.0/Application.sourcelink.json | 2 +- .../obj/Debug/net8.0/ref/Application.dll | Bin 7168 -> 20992 bytes .../obj/Debug/net8.0/refint/Application.dll | Bin 7168 -> 20992 bytes backend/Application/obj/project.assets.json | 801 +++++++++++++++++- backend/Application/obj/project.nuget.cache | 22 +- .../Application/obj/project.packagespec.json | 2 +- .../obj/rider.project.restore.info | 2 +- backend/Core/Core.csproj | 16 +- backend/Core/Entities/Chat.cs | 7 +- backend/Core/Entities/Doctor.cs | 39 +- backend/Core/Entities/MedicalHistory.cs | 8 +- backend/Core/Entities/Pacient.cs | 17 - backend/Core/Entities/Patient.cs | 32 + backend/Core/bin/Debug/net8.0/Core.dll | Bin 7680 -> 7680 bytes backend/Core/bin/Debug/net8.0/Core.pdb | Bin 12596 -> 12528 bytes .../obj/Debug/net8.0/Core.AssemblyInfo.cs | 2 +- .../net8.0/Core.AssemblyInfoInputs.cache | 2 +- .../Core.csproj.CoreCompileInputs.cache | 2 +- backend/Core/obj/Debug/net8.0/Core.dll | Bin 7680 -> 7680 bytes backend/Core/obj/Debug/net8.0/Core.pdb | Bin 12596 -> 12528 bytes .../obj/Debug/net8.0/Core.sourcelink.json | 2 +- backend/Core/obj/Debug/net8.0/ref/Core.dll | Bin 7168 -> 7168 bytes backend/Core/obj/Debug/net8.0/refint/Core.dll | Bin 7168 -> 7168 bytes backend/Core/obj/rider.project.restore.info | 2 +- .../DesignTimeDbContextFactory.cs | 5 +- .../HealthcareManagerDatabase.cs | 8 +- backend/Infrastructure/Infrastructure.csproj | 44 +- backend/Infrastructure/InfrastructureDI.cs | 27 +- backend/Infrastructure/MongoDBServices.cs | 36 - .../HashingAlgorithms/HashingAlgorithms.cs | 19 + .../Services/MongoDB/MongoDBServices.cs | 53 ++ .../PostgreSQL/BasePostgreSQLRepository.cs | 4 +- .../Services/PostgreSQL/DoctorRepository.cs | 16 +- .../PostgreSQL/MedicalHistoryRepository.cs | 7 +- .../Services/PostgreSQL/PacientRepository.cs | 12 - .../Services/PostgreSQL/PatientRepository.cs | 15 + .../bin/Debug/net8.0/Application.dll | Bin 10240 -> 58880 bytes .../bin/Debug/net8.0/Application.pdb | Bin 12448 -> 24900 bytes .../Infrastructure/bin/Debug/net8.0/Core.dll | Bin 7680 -> 7680 bytes .../Infrastructure/bin/Debug/net8.0/Core.pdb | Bin 12596 -> 12528 bytes .../bin/Debug/net8.0/Infrastructure.deps.json | 5 +- .../bin/Debug/net8.0/Infrastructure.dll | Bin 30208 -> 37376 bytes .../bin/Debug/net8.0/Infrastructure.pdb | Bin 17776 -> 19104 bytes .../net8.0/Infrastructure.AssemblyInfo.cs | 2 +- .../Infrastructure.AssemblyInfoInputs.cache | 2 +- .../Debug/net8.0/Infrastructure.assets.cache | Bin 55356 -> 55532 bytes ...rastructure.csproj.AssemblyReference.cache | Bin 21690 -> 21824 bytes ...rastructure.csproj.CoreCompileInputs.cache | 2 +- .../obj/Debug/net8.0/Infrastructure.dll | Bin 30208 -> 37376 bytes .../obj/Debug/net8.0/Infrastructure.pdb | Bin 17776 -> 19104 bytes .../net8.0/Infrastructure.sourcelink.json | 2 +- .../obj/Debug/net8.0/ref/Infrastructure.dll | Bin 11776 -> 14336 bytes .../Debug/net8.0/refint/Infrastructure.dll | Bin 11776 -> 14336 bytes .../Infrastructure.csproj.nuget.dgspec.json | 14 +- .../Infrastructure/obj/project.assets.json | 9 +- .../Infrastructure/obj/project.nuget.cache | 2 +- .../obj/project.packagespec.json | 2 +- .../obj/rider.project.restore.info | 2 +- 168 files changed, 2877 insertions(+), 1146 deletions(-) delete mode 100644 backend/API/Controllers/PacientsController.cs create mode 100644 backend/API/Controllers/PatientsController.cs create mode 100644 backend/API/obj/Debug/net8.0/HealthcareManager.API.AssemblyInfo.cs create mode 100644 backend/API/obj/Debug/net8.0/HealthcareManager.API.AssemblyInfoInputs.cache create mode 100644 backend/API/obj/Debug/net8.0/HealthcareManager.API.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 backend/API/obj/Debug/net8.0/HealthcareManager.API.GlobalUsings.g.cs create mode 100644 backend/API/obj/Debug/net8.0/HealthcareManager.API.assets.cache create mode 100644 backend/API/obj/Debug/net8.0/HealthcareManager.API.csproj.AssemblyReference.cache create mode 100644 backend/API/obj/HealthcareManager.API.csproj.nuget.dgspec.json create mode 100644 backend/API/obj/HealthcareManager.API.csproj.nuget.g.props create mode 100644 backend/API/obj/HealthcareManager.API.csproj.nuget.g.targets rename backend/Application/Endpoints/Doctors/Profile/{DoctorProfileDto.cs => DoctorProfileUpdateDto.cs} (75%) create mode 100644 backend/Application/Endpoints/Doctors/ResetPassword/DoctorLoginDto.cs create mode 100644 backend/Application/Endpoints/HttpStatusCodes.cs rename backend/Application/Endpoints/MedicalHistories/{MedicalHistoryDto.cs => MedicalHistoryCreateDto.cs} (52%) delete mode 100644 backend/Application/Endpoints/Pacients/Login/PacientLoginHandler.cs delete mode 100644 backend/Application/Endpoints/Pacients/Login/PacientLoginValidation.cs delete mode 100644 backend/Application/Endpoints/Pacients/Profile/PacientProfileDto.cs delete mode 100644 backend/Application/Endpoints/Pacients/Profile/PacientProfileHandler.cs delete mode 100644 backend/Application/Endpoints/Pacients/Profile/PacientProfileValidation.cs delete mode 100644 backend/Application/Endpoints/Pacients/Registration/PacientRegistrationHandler.cs delete mode 100644 backend/Application/Endpoints/Pacients/Registration/PacientRegistrationValidation.cs delete mode 100644 backend/Application/Endpoints/Pacients/ResetPassword/PacientResetPasswordHandler.cs delete mode 100644 backend/Application/Endpoints/Pacients/ResetPassword/PacientResetPasswordValidation.cs rename backend/Application/Endpoints/{Pacients/Login/PacientLoginDto.cs => Patients/Login/PatientLoginDto.cs} (50%) create mode 100644 backend/Application/Endpoints/Patients/Login/PatientLoginHandler.cs create mode 100644 backend/Application/Endpoints/Patients/Login/PatientLoginValidation.cs create mode 100644 backend/Application/Endpoints/Patients/Profile/PatientProfileDto.cs create mode 100644 backend/Application/Endpoints/Patients/Profile/PatientProfileHandler.cs create mode 100644 backend/Application/Endpoints/Patients/Profile/PatientProfileValidation.cs rename backend/Application/Endpoints/{Pacients/Registration/PacientRegistrationDto.cs => Patients/Registration/PatientRegistrationDto.cs} (55%) create mode 100644 backend/Application/Endpoints/Patients/Registration/PatientRegistrationHandler.cs create mode 100644 backend/Application/Endpoints/Patients/Registration/PatientRegistrationValidation.cs create mode 100644 backend/Application/Endpoints/Patients/ResetPassword/PatientLoginDto.cs create mode 100644 backend/Application/Endpoints/Patients/ResetPassword/PatientResetPasswordHandler.cs create mode 100644 backend/Application/Endpoints/Patients/ResetPassword/PatientResetPasswordValidation.cs create mode 100644 backend/Application/Services/Database/IMongoDbServices.cs create mode 100644 backend/Application/Services/HashingAlgorithms/IHashingAlgorithms.cs create mode 100644 backend/Application/bin/Debug/net8.0/Core.dll create mode 100644 backend/Application/bin/Debug/net8.0/Core.pdb create mode 100644 backend/Application/obj/Debug/net8.0/Applicat.44B5EDA2.Up2Date delete mode 100644 backend/Core/Entities/Pacient.cs create mode 100644 backend/Core/Entities/Patient.cs delete mode 100644 backend/Infrastructure/MongoDBServices.cs create mode 100644 backend/Infrastructure/Services/HashingAlgorithms/HashingAlgorithms.cs create mode 100644 backend/Infrastructure/Services/MongoDB/MongoDBServices.cs delete mode 100644 backend/Infrastructure/Services/PostgreSQL/PacientRepository.cs create mode 100644 backend/Infrastructure/Services/PostgreSQL/PatientRepository.cs diff --git a/backend/API/API.csproj b/backend/API/API.csproj index 59e8b4c..43c6bbf 100644 --- a/backend/API/API.csproj +++ b/backend/API/API.csproj @@ -1,18 +1,19 @@ - - net8.0 - enable - enable - + + net8.0 + enable + enable + API + - - - + + + - - - - + + + + diff --git a/backend/API/Controllers/ChatController.cs b/backend/API/Controllers/ChatController.cs index f9d3256..47f585e 100644 --- a/backend/API/Controllers/ChatController.cs +++ b/backend/API/Controllers/ChatController.cs @@ -10,5 +10,4 @@ public class ChatController : BaseApiController { _mongoDbService = mongoDbService; } - -} +} \ No newline at end of file diff --git a/backend/API/Controllers/DoctorsController.cs b/backend/API/Controllers/DoctorsController.cs index 62a3874..a589f37 100644 --- a/backend/API/Controllers/DoctorsController.cs +++ b/backend/API/Controllers/DoctorsController.cs @@ -1,117 +1,80 @@ -using Microsoft.AspNetCore.Mvc; -using Core.Entities; +using Application.Endpoints; using Application.Endpoints.Doctors.Login; -using Application.Services.Database; +using Application.Endpoints.Doctors.Profile; using Application.Endpoints.Doctors.Registration; using Application.Endpoints.Doctors.ResetPassword; -using Application.Endpoints.Doctors.Profile; +using Application.Services.Database; +using Application.Services.HashingAlgorithms; +using Microsoft.AspNetCore.Mvc; -namespace HealthcareManager.API.Controllers; +namespace API.Controllers; [ApiController] [Route("api/[controller]")] public class DoctorsController : ControllerBase { private readonly IDoctorRepository _database; + private readonly IHashingAlgorithms _hashingAlgorithms; - public DoctorsController(IDoctorRepository database) + public DoctorsController(IDoctorRepository database, IHashingAlgorithms hashingAlgorithms) { - _database = database ?? throw new ArgumentNullException(nameof(database)); - } - - [HttpGet] - public async Task> GetAllDoctors() - { - var handler = new DoctorProfileHandler(_database); - var response = await handler.HandleGetAll(); - if (!response.Success) - { - return BadRequest(response); - } - - return Ok(response.Data); - } - - [HttpGet("{id}")] - public async Task> GetDoctor(Guid id) - { - var handler = new DoctorProfileHandler(_database); - var response = await handler.HandleGet(id); - if (!response.Success) - { - return BadRequest(response); - } - - return Ok(response.Data); - } - - [HttpPost("login")] - public async Task> Login(DoctorLoginDTO doctor) - { - var handler = new DoctorLoginHandler(_database); - var response = await handler.Handle(doctor).ConfigureAwait(false); - - if(!response.Success) - { - return Unauthorized(response); - } - - return Ok(response); + _database = database; + _hashingAlgorithms = hashingAlgorithms; } [HttpPost("register")] - public async Task> Register(DoctorRegistrationDto doctor) + public async Task> Register(DoctorRegistrationDto doctor) { - var handler = new DoctorRegistrationHandler(_database); + var handler = new DoctorRegistrationHandler(_database, _hashingAlgorithms); var response = await handler.Handle(doctor).ConfigureAwait(false); - - if (!response.Success) - { - return Unauthorized(response); - } - - return Ok(response); + return StatusCode(response.StatusCode, response); } - [HttpPost("resetPassword")] - public async Task ResetPassword(DoctorLoginDTO resetDoctorDto) + [HttpPost("login")] + public async Task> Login(DoctorLoginDto doctor) { - var handler = new DoctorResetPasswordHandler(_database); + var handler = new DoctorLoginHandler(_database, _hashingAlgorithms); + var response = await handler.Handle(doctor).ConfigureAwait(false); + return StatusCode(response.StatusCode, response); + } + + [HttpPost("reset_password")] + public async Task> ResetPassword(DoctorResetPasswordDto resetDoctorDto) + { + var handler = new DoctorResetPasswordHandler(_database, _hashingAlgorithms); var response = await handler.Handle(resetDoctorDto).ConfigureAwait(false); - - if (response.Success) - { - return Ok(response); - } - - return BadRequest(response); + return StatusCode(response.StatusCode, response); } - [HttpPut("{id}/profile")] - public async Task UpdateDoctorProfile(Guid id, [FromBody]DoctorProfileDTO doctorDto) + [HttpGet] + public async Task> GetAllDoctors() { - var handler = new DoctorProfileHandler(_database); - var response = await handler.HandleUpdate(id, doctorDto).ConfigureAwait(false); - - if (response.Success) - { - return Ok(response); - } - - return BadRequest(response); + var handler = new DoctorProfileHandler(_database, _hashingAlgorithms); + var response = await handler.HandleGetAll(); + return StatusCode(response.StatusCode, response); } - [HttpDelete("{id}/profile")] - public async Task DeleteDoctorProfile(Guid id) + [HttpGet("{id}")] + public async Task> GetDoctor(Guid id) { - var handler = new DoctorProfileHandler(_database); + var handler = new DoctorProfileHandler(_database, _hashingAlgorithms); + var response = await handler.HandleGet(id); + return StatusCode(response.StatusCode, response); + } + + [HttpPut] + public async Task> UpdateDoctorProfile(DoctorProfileUpdateDto doctorUpdateDto) + { + var handler = new DoctorProfileHandler(_database, _hashingAlgorithms); + var response = await handler.HandleUpdate(doctorUpdateDto).ConfigureAwait(false); + return StatusCode(response.StatusCode, response); + } + + [HttpDelete("{id}")] + public async Task> DeleteDoctorProfile(Guid id) + { + var handler = new DoctorProfileHandler(_database, _hashingAlgorithms); var response = await handler.HandleDelete(id).ConfigureAwait(false); - - if (response.Success) - { - return NoContent(); - } - - return BadRequest(response); + return StatusCode(response.StatusCode, response); } -} +} \ No newline at end of file diff --git a/backend/API/Controllers/MedicalHistoryController.cs b/backend/API/Controllers/MedicalHistoryController.cs index e124c24..b8628a7 100644 --- a/backend/API/Controllers/MedicalHistoryController.cs +++ b/backend/API/Controllers/MedicalHistoryController.cs @@ -1,67 +1,71 @@ -using Application.Endpoints.MedicalHistories; +using Application.Endpoints; +using Application.Endpoints.MedicalHistories; using Application.Services.Database; -using Core.Entities; using Microsoft.AspNetCore.Mvc; -namespace HealthcareManager.API.Controllers; +namespace API.Controllers; [ApiController] [Route("api/[controller]")] public class MedicalHistoryController : ControllerBase { private readonly IMedicalHistoryRepository _medicalHistoryRepository; - private readonly IPacientRepository _pacientRepository; + private readonly IMongoDbService _mongoDbService; + private readonly IPatientRepository _patientRepository; - public MedicalHistoryController(IMedicalHistoryRepository medicalHistoryRepository, IPacientRepository pacientRepository) + public MedicalHistoryController(IMedicalHistoryRepository medicalHistoryRepository, + IPatientRepository patientRepository, IMongoDbService mongoDbService) { - _medicalHistoryRepository = medicalHistoryRepository ?? throw new ArgumentNullException(nameof(medicalHistoryRepository)); - _pacientRepository = pacientRepository ?? throw new ArgumentNullException(nameof(pacientRepository)); + _medicalHistoryRepository = medicalHistoryRepository; + _patientRepository = patientRepository; + _mongoDbService = mongoDbService; } [HttpGet("{id}")] - public async Task> GetAsync(Guid id) + public async Task> GetAsync(Guid id) { - var handler = new MedicalHistoryHandler(_medicalHistoryRepository, _pacientRepository); + var handler = new MedicalHistoryHandler(_medicalHistoryRepository, _patientRepository, _mongoDbService); var response = await handler.HandleGet(id); - if (!response.Success) - { - return BadRequest(response); - } - - return Ok(response.Data); + return StatusCode(response.StatusCode, response); } - [HttpPost("{id}")] - public async Task> PostAsync(Guid id, [FromBody] byte[] description) + [HttpGet] + public async Task> GetAllDoctors() { - var handler = new MedicalHistoryHandler(_medicalHistoryRepository, _pacientRepository); - var response = await handler.HandleCreate(id, description).ConfigureAwait(false); - - if (!response.Success) - { - return Unauthorized(response); - } - - return Ok(response); + var handler = new MedicalHistoryHandler(_medicalHistoryRepository, _patientRepository, _mongoDbService); + var response = await handler.HandleGetAll(); + return StatusCode(response.StatusCode, response); } - [HttpPut("{id}")] - public async Task UpdateAsync(Guid id, [FromBody] MedicalHistoryDTO medicalHistoryDTO) + [HttpPost] + public async Task> PostAsync(MedicalHistoryCreateDto medicalHistoryCreateDto) { - var handler = new MedicalHistoryHandler(_medicalHistoryRepository, _pacientRepository); - var response = await handler.HandleUpdate(id, medicalHistoryDTO).ConfigureAwait(false); - - if (response.Success) - { - return Ok(response); - } - - return BadRequest(response); + var handler = new MedicalHistoryHandler(_medicalHistoryRepository, _patientRepository, _mongoDbService); + var response = await handler.HandleCreate(medicalHistoryCreateDto); + return StatusCode(response.StatusCode, response); } + [HttpPut] + public async Task> UpdateAsync(MedicalHistoryUpdateDto medicalHistoryUpdateDto) + { + var handler = new MedicalHistoryHandler(_medicalHistoryRepository, _patientRepository, _mongoDbService); + var response = await handler.HandleUpdate(medicalHistoryUpdateDto).ConfigureAwait(false); + return StatusCode(response.StatusCode, response); + } + + [HttpDelete("{id}")] + public async Task> DeleteAsync(Guid id) + { + var handler = new MedicalHistoryHandler(_medicalHistoryRepository, _patientRepository, _mongoDbService); + var response = await handler.HandleDelete(id); + return StatusCode(response.StatusCode, response); + } + + /* [HttpPut("grant_access")] - public async Task GrantAccessToMedicalHistory(Guid id) + public async Task> GrantAccessToMedicalHistory(GrantAccessMedicalHistoryDto) { return NotFound(); } -} + */ +} \ No newline at end of file diff --git a/backend/API/Controllers/PacientsController.cs b/backend/API/Controllers/PacientsController.cs deleted file mode 100644 index 2ec98b4..0000000 --- a/backend/API/Controllers/PacientsController.cs +++ /dev/null @@ -1,117 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using Core.Entities; -using Application.Endpoints.Pacients.Login; -using Application.Services.Database; -using Application.Endpoints.Pacients.Registration; -using Application.Endpoints.Pacients.ResetPassword; -using Application.Endpoints.Pacients.Profile; - -namespace HealthcareManager.API.Controllers; - -[ApiController] -[Route("api/[controller]")] -public class PacientsController : ControllerBase -{ - private readonly IPacientRepository _database; - - public PacientsController(IPacientRepository database) - { - _database = database ?? throw new ArgumentNullException(nameof(database)); - } - - [HttpGet] - public async Task> GetAllPacients() - { - var handler = new PacientProfileHandler(_database); - var response = await handler.HandleGetAll(); - if (!response.Success) - { - return BadRequest(response); - } - - return Ok(response.Data); - } - - [HttpGet("{id}")] - public async Task> GetPacient(Guid id) - { - var handler = new PacientProfileHandler(_database); - var response = await handler.HandleGet(id); - if (!response.Success) - { - return BadRequest(response); - } - - return Ok(response.Data); - } - - [HttpPost("login")] - public async Task> Login(PacientLoginDTO pacient) - { - var handler = new PacientLoginHandler(_database); - var response = await handler.Handle(pacient).ConfigureAwait(false); - - if (!response.Success) - { - return Unauthorized(response); - } - - return Ok(response); - } - - [HttpPost("register")] - public async Task> Register(PacientRegistrationDto pacient) - { - var handler = new PacientRegistrationHandler(_database); - var response = await handler.Handle(pacient).ConfigureAwait(false); - - if (!response.Success) - { - return Unauthorized(response); - } - - return Ok(response); - } - - [HttpPost("resetPassword")] - public async Task ResetPassword(PacientLoginDTO resetPacientDto) - { - var handler = new PacientResetPasswordHandler(_database); - var response = await handler.Handle(resetPacientDto).ConfigureAwait(false); - - if (response.Success) - { - return Ok(response); - } - - return BadRequest(response); - } - - [HttpPut("{id}/profile")] - public async Task UpdatePacientProfile(Guid id, [FromBody] PacientProfileDTO pacientDto) - { - var handler = new PacientProfileHandler(_database); - var response = await handler.HandleUpdate(id, pacientDto).ConfigureAwait(false); - - if (response.Success) - { - return Ok(response); - } - - return BadRequest(response); - } - - [HttpDelete("{id}/profile")] - public async Task DeletePacientProfile(Guid id) - { - var handler = new PacientProfileHandler(_database); - var response = await handler.HandleDelete(id).ConfigureAwait(false); - - if (response.Success) - { - return NoContent(); - } - - return BadRequest(response); - } -} diff --git a/backend/API/Controllers/PatientsController.cs b/backend/API/Controllers/PatientsController.cs new file mode 100644 index 0000000..90beb2b --- /dev/null +++ b/backend/API/Controllers/PatientsController.cs @@ -0,0 +1,80 @@ +using Application.Endpoints; +using Application.Endpoints.Patients.Login; +using Application.Endpoints.Patients.Profile; +using Application.Endpoints.Patients.Registration; +using Application.Endpoints.Patients.ResetPassword; +using Application.Services.Database; +using Application.Services.HashingAlgorithms; +using Microsoft.AspNetCore.Mvc; + +namespace API.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class PatientsController : ControllerBase +{ + private readonly IHashingAlgorithms _hashingAlgorithms; + private readonly IPatientRepository _patientRepository; + + public PatientsController(IPatientRepository patientRepository, IHashingAlgorithms hashingAlgorithms) + { + _patientRepository = patientRepository; + _hashingAlgorithms = hashingAlgorithms; + } + + [HttpGet] + public async Task> GetAllPatients() + { + var handler = new PatientProfileHandler(_patientRepository, _hashingAlgorithms); + var response = await handler.HandleGetAll(); + return StatusCode(response.StatusCode, response); + } + + [HttpGet("{id}")] + public async Task> GetPatient(Guid id) + { + var handler = new PatientProfileHandler(_patientRepository, _hashingAlgorithms); + var response = await handler.HandleGet(id); + return StatusCode(response.StatusCode, response); + } + + [HttpPost("login")] + public async Task> Login(PatientLoginDto patientLoginDto) + { + var handler = new PatientLoginHandler(_patientRepository); + var response = await handler.Handle(patientLoginDto).ConfigureAwait(false); + return StatusCode(response.StatusCode, response); + } + + [HttpPost("register")] + public async Task> Register(PatientRegistrationDto patientRegistrationDto) + { + var handler = new PatientRegistrationHandler(_patientRepository, _hashingAlgorithms); + var response = await handler.Handle(patientRegistrationDto).ConfigureAwait(false); + return StatusCode(response.StatusCode, response); + } + + [HttpPost("reset_password")] + public async Task> ResetPassword(PatientResetPasswordDto patientResetPasswordDto) + { + var handler = new PatientResetPasswordHandler(_patientRepository, _hashingAlgorithms); + var response = await handler.Handle(patientResetPasswordDto).ConfigureAwait(false); + return StatusCode(response.StatusCode, response); + } + + [HttpPut] + public async Task> UpdatePatientProfile(PatientProfileDto patientDto) + { + var handler = new PatientProfileHandler(_patientRepository, _hashingAlgorithms); + var response = await handler.HandleUpdate(patientDto).ConfigureAwait(false); + return StatusCode(response.StatusCode, response); + } + + [HttpDelete("{id}")] + public async Task> DeletePatientProfile(Guid id) + { + var handler = new PatientProfileHandler(_patientRepository, _hashingAlgorithms); + var response = await handler.HandleDelete(id).ConfigureAwait(false); + return StatusCode(response.StatusCode, response); + } +} \ No newline at end of file diff --git a/backend/API/Middlewares/ApiKeyValidationMiddleware.cs b/backend/API/Middlewares/ApiKeyValidationMiddleware.cs index 142ea4c..919132e 100644 --- a/backend/API/Middlewares/ApiKeyValidationMiddleware.cs +++ b/backend/API/Middlewares/ApiKeyValidationMiddleware.cs @@ -2,8 +2,8 @@ public class ApiKeyValidationMiddleware { - private readonly RequestDelegate _next; private const string APIKEYNAME = "ApiKey"; + private readonly RequestDelegate _next; public ApiKeyValidationMiddleware(RequestDelegate next) { @@ -39,4 +39,4 @@ public class ApiKeyValidationMiddleware await _next(context); } -} +} \ No newline at end of file diff --git a/backend/API/Middlewares/BodyCheckMiddleware.cs b/backend/API/Middlewares/BodyCheckMiddleware.cs index 557290d..e54a79f 100644 --- a/backend/API/Middlewares/BodyCheckMiddleware.cs +++ b/backend/API/Middlewares/BodyCheckMiddleware.cs @@ -17,7 +17,7 @@ public class BodyCheckMiddleware(RequestDelegate next) var buffer = new byte[Convert.ToInt32(context.Request.ContentLength)]; await context.Request.Body.ReadAsync(buffer, 0, buffer.Length); - string requestBody = Encoding.UTF8.GetString(buffer); + var requestBody = Encoding.UTF8.GetString(buffer); context.Request.Body.Seek(0, SeekOrigin.Begin); // Reset the stream for next middleware // Check if the body is empty @@ -31,5 +31,4 @@ public class BodyCheckMiddleware(RequestDelegate next) await _next(context); } -} - +} \ No newline at end of file diff --git a/backend/API/Program.cs b/backend/API/Program.cs index db3649c..3902904 100644 --- a/backend/API/Program.cs +++ b/backend/API/Program.cs @@ -20,7 +20,7 @@ builder.Services.AddSwaggerGen(c => In = ParameterLocation.Header, Scheme = "ApiKeyScheme" }); - var key = new OpenApiSecurityScheme() + var key = new OpenApiSecurityScheme { Reference = new OpenApiReference { @@ -30,9 +30,9 @@ builder.Services.AddSwaggerGen(c => In = ParameterLocation.Header }; var requirement = new OpenApiSecurityRequirement - { - { key, new List() } - }; + { + { key, new List() } + }; c.AddSecurityRequirement(requirement); }); @@ -66,8 +66,5 @@ app.Run(); static void EnsureDatabaseCreated(HealthcareManagerDatabase dbContext) { // Checking for pending migrations is more efficient than applying migrations unconditionally - if (dbContext.Database.GetPendingMigrations().Any()) - { - dbContext.Database.Migrate(); - } + if (dbContext.Database.GetPendingMigrations().Any()) dbContext.Database.Migrate(); } \ No newline at end of file diff --git a/backend/API/appsettings.json b/backend/API/appsettings.json index b3317b4..2942806 100644 --- a/backend/API/appsettings.json +++ b/backend/API/appsettings.json @@ -9,7 +9,6 @@ "HealthcareManagerDatabase": "Host=surus.db.elephantsql.com;Database=newbwuyu;Username=newbwuyu;Password=0end9Ixqo9PeTE4HVslX7_FVwruEhFf-;", "MongoDBDatabase": "mongodb+srv://andrei_cerbu:andrei_cerbu@cluster0.v80skg6.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0" }, - "AllowedHosts": "*", "ApiKey": "testapikey" } diff --git a/backend/API/bin/Debug/net8.0/API.deps.json b/backend/API/bin/Debug/net8.0/API.deps.json index 1eb504d..3f09a94 100644 --- a/backend/API/bin/Debug/net8.0/API.deps.json +++ b/backend/API/bin/Debug/net8.0/API.deps.json @@ -77,15 +77,15 @@ } }, "Microsoft.EntityFrameworkCore.Analyzers/8.0.3": {}, - "Microsoft.EntityFrameworkCore.Relational/8.0.2": { + "Microsoft.EntityFrameworkCore.Relational/8.0.3": { "dependencies": { "Microsoft.EntityFrameworkCore": "8.0.3", "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" }, "runtime": { "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": { - "assemblyVersion": "8.0.2.0", - "fileVersion": "8.0.224.6803" + "assemblyVersion": "8.0.3.0", + "fileVersion": "8.0.324.11510" } } }, @@ -285,7 +285,7 @@ "dependencies": { "Microsoft.EntityFrameworkCore": "8.0.3", "Microsoft.EntityFrameworkCore.Abstractions": "8.0.3", - "Microsoft.EntityFrameworkCore.Relational": "8.0.2", + "Microsoft.EntityFrameworkCore.Relational": "8.0.3", "Npgsql": "8.0.2" }, "runtime": { @@ -375,7 +375,9 @@ }, "Application/1.0.0": { "dependencies": { - "FluentValidation": "11.9.0" + "Core": "1.0.0", + "FluentValidation": "11.9.0", + "MongoDB.Driver": "2.24.0" }, "runtime": { "Application.dll": {} @@ -394,6 +396,7 @@ "Application": "1.0.0", "Core": "1.0.0", "Microsoft.EntityFrameworkCore": "8.0.3", + "Microsoft.EntityFrameworkCore.Relational": "8.0.3", "Microsoft.Extensions.Configuration": "8.0.0", "Microsoft.Extensions.Configuration.Json": "8.0.0", "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0", @@ -461,12 +464,12 @@ "path": "microsoft.entityframeworkcore.analyzers/8.0.3", "hashPath": "microsoft.entityframeworkcore.analyzers.8.0.3.nupkg.sha512" }, - "Microsoft.EntityFrameworkCore.Relational/8.0.2": { + "Microsoft.EntityFrameworkCore.Relational/8.0.3": { "type": "package", "serviceable": true, - "sha512": "sha512-NoGfcq2OPw0z8XAPf74YFwGlTKjedWdsIEJqq4SvKcPjcu+B+/XDDNrDRxTvILfz4Ug8POSF49s1jz1JvUqTAg==", - "path": "microsoft.entityframeworkcore.relational/8.0.2", - "hashPath": "microsoft.entityframeworkcore.relational.8.0.2.nupkg.sha512" + "sha512": "sha512-8JnVZHWaNFkrrD/FC0O4jekiHIYey8y6TQ4Co3OzLz0wd5Dm1cwJfTp++1TvaVu0BBd4bVDtiktppa5epuoPrA==", + "path": "microsoft.entityframeworkcore.relational/8.0.3", + "hashPath": "microsoft.entityframeworkcore.relational.8.0.3.nupkg.sha512" }, "Microsoft.Extensions.ApiDescription.Server/6.0.5": { "type": "package", diff --git a/backend/API/bin/Debug/net8.0/API.dll b/backend/API/bin/Debug/net8.0/API.dll index 83e88212b64c6ada54488fb6e0ab13180d336172..29e2afb5ce57683b8efca7c519ab50dee79267d4 100644 GIT binary patch literal 33280 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 AKL7v# literal 12288 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 diff --git a/backend/API/bin/Debug/net8.0/API.exe b/backend/API/bin/Debug/net8.0/API.exe index ea0d281847d8d8e1e4a9476a492ba6a72b143f98..c2a09cc054d1ebd3fea9e6d7c3422d15e486a925 100644 GIT binary patch delta 99 zcmZp;!_fdlEsR^3&S?1?F(d~~sxtxdL267G%z^67fH0ZCaJ#fN(^Dn@2=Nk4 diff --git a/backend/API/bin/Debug/net8.0/API.pdb b/backend/API/bin/Debug/net8.0/API.pdb index 32578b17e41c08ced61d6791d6611283b7a3b607..19f94611536daf5d1cbb9c2e677b66c0ee38ddb5 100644 GIT binary patch delta 6317 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 delta 1919 zcmcIldrXs86hHU-N@)v}6)3c#*jD5jq2*9B-&>ROJLh-KJ@=k_ zZgaldL*%`WNNcRS3;^a7mfKOmZIo6Hc>_Qt50JoOCRfeIs`a%jz7KsO<};hXhxTD+ zzhGXr1ho+ZkFCfTS5~vlI!a`vhqE^qwD%b&Emf!Gt4%{c5&*F^ijzrY0BA!YKo$g{ zp+r%kgrKkkmZ9XJNKqsx%*PVc)3&(nyJ$6TA|%OC2cR&{7KT#=NzOe<2z*F5_zSgy zfFS9_@^2E<)Z+wS2fc7CixYs(3o%8RTNT!xKImd7vL(h+Oh7F7@L} zF)s7tY`xr%FF~$&%I63@j(F;T%eWxQk1qkbR2<`;iEefmqnSX01s`4LG3z&h5lbLy z_CV~R*l7x^IRZUV=+U68G~wb-~NW%C9ftSMC@dS}<^P;B?2PmOlH=pA~rf>k77i zD{48frDwX&=kJO*VB_dOP*Uu}%Fs-M(`cD+M`ue`on3h~C+p^k-l89553T)iD%&Y# zq0K>KgEgx~&dXmuNbYQzY&LiGw;a)>uhGVLDj%FH9_hHBAJ9H3E3BzrUt`;n;;0QO zCL&psHrbf#IjkWSigi~~=IzX-7mVMp7(aBVVRZGwJ-$EYcXAUCy!rh!C&VD}-16M^ z-0_T1SIF9F;!UFiAqx|yBHn$PEA~=j*R5)Ud(8*;QcYo-wyk@v0hYHWXd{chUMM=T zn?5gpvX6I&Zjr=B#kq4F*O0~`A&26fv*QJafcto!%HmIBze!a$mZ;MKF z+{xa&kIxhx%xZ@fv>>cfwdQE&XV439Zj_9*-uwN<#!JP|ULWtxq>Av!?)zbTqf{HV zALxR{7}(YvIm>Q;qhR-n=A^{7$FcN?UP(ujB;BWydeUdt;xI9Y@js>$K`<=lAPkb3 zrR8u0%@EODB`MvXl(ZANwQP~Ql=OnBo`H|S`wXrz7)2-wWng4rW>CYRj=??#hZwxW zpoalVD;j1nfnXLhm=Q)A+la@@dHRUAfp|NKcTkK&tLY1(!&yucR5}L|JP-k$8b|isBoTK8aP$XOPnN< zRT7d{UE@s2uX1g4aT}eq(>|9LI%3@A|3e)X)^*E%2FDqEB_a`Il{ygnfJLQB350PH z{4S_~xVbtUQ0%(^0W*n`fSS!KT&0{^6)vn27G<(2hLLED=-H*_aWE5fEr^~jt6 diff --git a/backend/API/bin/Debug/net8.0/Application.dll b/backend/API/bin/Debug/net8.0/Application.dll index 3847881e122b3861bc168b8bcaffb8d4f941263f..bed31540eff2530d7536eddc0aafe9e99dc147ab 100644 GIT binary patch literal 58880 zcmdSC3w%`7wLiYjnMa=FISCH|6A_FAA}BXh>ovC^$JaDQdN9 zeIQn?wnWt0s`XjL>TRJa)mz(ZTl=n-6np!)wza)_uYFwl`+nCxXXZ>YiE?j0pa16{ zJ!`ME_S$Q&z4qE`?{ntNu>51UNI*n_xc>1Ekpn3CSF3Pn(2eSX6Tey@Pv?BQ@_@DM z+m&m#HODL3JKDB(M7LKoMq69kIx9BEDmr$wRy4O()URAqvAwM+Rx@l^?#Zs|^A?IM zvjWod>7QKf^>#!~s>rjZh`a?(*l=6_2W16ui=aqx+t^J8?bp9r)Pv8zfHYh~QU0GQ zU6L&PodCTn6|>}OI->tyg(dmmjsCmH+WvJz(G?=uzWQv?OMG-qXKZID=*~9*P^V*c z?FOZP6(S8a9r2DvP{uZljRQS`%lB7{>8k07wX{KywhC-kAH3}o0$M9FKb?cI)35lW zZMKADW0%Omt6VQ@&GCV;c7jGuJjo6?ihzM(8HOTYz|V%^B2~jha%CcFhIuuLfKlKv zT*MW<*fxlu8_aId4myRDl+r1-oDGxFcX9k~gimg`Y6P@9i%}i6ouw=S4u%^HmpO}A zbg`;Ls?em`5LKhlg1W-80$i9~Y*(E?8`)nm#O>FKSB(a*0}}03V}Rv`U#~!qRbzp7 z&VUV7CjuLOQ#H`><>C9Pps2bEW3H~kELL}f*btz);uh%0E3v9hhI|zwzIu377A4Sf zFbVruxC))cPhpd63ZI`8zP-P?34_^t((%~)g=7Z08AH&s>x{R>Rb+;aBgw@ z^FEyyu$}E(#3JB)j78A7kVVMZ$fC^Iz@m$SP@Si$Nf_1h?LZr6Hdqj>!U)5R)DqNc zlq&*8smD+RjEKi@kqn_*4iSWI86}NR7`q6G;`jr`evRErP!IcCSOlC)S(G`=EV@_) zi?QtC3=+QBJ&Z80HFj&@AdOutG{i0zSBBVy7l(*lw5hJbBCM{$LUUsmE3aSdVr?LH z;Sx7?GfN;^PDf`ZcHyq-j?*m!x(eUrk6o%m>}Iz2wBxZ?V>h!kW2-Ph)g95K32D(i zqzQ=FkM6SP2k&5{G2s`3OZe9e5=3$QOX%8LGrJfHwu98o__&fq&`Gc;b9S=mq6ESO zfrc<4VFDXbiU2cltOyt*J%%D+AQ>77MZiENGz=HX5ZFkE3~b~_Urt6!D~>;I?AExx z9@Vh>1{MM5Q!L7y>sWNL3I=0=z+e)|xVB{$)(A3Qar`Ntu3Om5c5Y=+=G@Gpi##Yn z&_f9cqr}@Ia;W1OpN>1&%69H#5pX`kqRiRLqKj2f1+$@wgwGzXSuC&O_@h2uJ#1z> zyIBOBPp~L+x>yjB9o#dK`Se!Gu+F->T+D zRoyYwHXBvHH4FXKSdj~%Dn1>Za@VTvSd|n`+f68p6`9$ZGl#UM0!^zb2~J`M$a3vf z-8t7|X`*o)o6%^(vfd@Jo$b!i!d>ISuU?(x{G86>m4W2;V~37SDN zOAKlPVtI%O?B_DgAelQDX-v=zl38NHL~qZ{W2}A+9eerXF@~k>Jjo*9JkBEMJi(&O z`7(H^@wdN!ydYL$mv8tS659Um<(W60Ji3SE8sM6hF49Y zgsygC2@ORMD_HS{p~wom z3KLiDkZ_{~>mV%uK+Kvvdxkf!$T^tT@{IF(-jII6VWzqYskpid%5d~$D#F65@d~;IB zIr)}vPQDFqU`}3V5pcf4BIx`Zi!$dm7G0FUoYX>*A06W&AcA86(nin@Ij5k& zBGWj4dw5%39RHE&Q`hL9A%H&rlSP^HCl+1gp_e-Cg+%%uUQ8Wt_;maSTiMR*}xo0e)E{rsJ&-ep2vmKa7T|Z<|=Abj^Vij~PP+cVY>B4d= zj{nrB>jO5koxidOIDcVL=KME{E>=NTz3L*-PgjJxzU$Lvn~_?15;rbig*i!gtt(1uEK&CkTTd{S0O5MH3wExD(E1WVabfl zxMXm*HN?)g2nJRmTUJ*s0qD4lL5gI=1=5IyW`Uf;s++wkEQicJZ5pztbJ@u*QGK-+UGUCznOg$zxIGWV7g^1l)`ajMyiU%twcOs4jE1@|4YoE?> zY-c;Cun0IOvj{rlS%jPkEXtgdSaeYksxMU4B#df4wY z0b_>8Py~$AJ%)>9i1wKfLA0MiN!<$=>!UcH-<$EkU%Ac<8f!ZNmdp}^ny}-enNV>cPoyfwfu0&1bYfEL6zQcn{%7d+)+rAEjKM`L z0!}@PptF!gnKPe77bOsiNI_VqB+O#+Kc1d#!u?DQ_hh`|hP*ibf$2-*eGT>5&N>zW zXDy2|XElp1R-u!v+6jqdyqjksW2ozIK3yMUGuye4MVWH}i!Sn@WSc4>VU&2!LJ)4n z@nb$64QypQn^^=LBt@#)#G;E;P}QueNcimGT0W7w-uLM`m(6TvIg5a^j76Dq4vQ{U zLDwa!i-ggIOfrWK)V$LlH1wjgfE>Hygo5-UEC!nJaL* zG`XS{4eZxX%9ty9FrvY8#ibZQ6?U^~W>5E73pR^>xdMxaN1U6W${capDZHD}slvBg zz7GN@j5Uzinrnu%26?Tzs)GO-!_8csz|u1p))6w-<&@COm01Gzewy~4!d>qQ3Lm1q zDx8+NsBTbuKY2X%YUavp&Dg4)G(mUi%o2l|u={vS(9D&&gOSDr&0Lu!1~uXOk7k0& zT)Q|>&0K@@GSQp|aF&(|uDP(4%3Zs-yzoqz1)d4Bz%yYMcqYuEixOCRSE3g~_|F*B zSxKD%pU%tJ&UQLk1RQ+uMV)aLWeyIR&`AmCOsGy0MkkhHowpPf0b{<$aFGlrg#}!V zL8qRQu*b_)SP;c=9J-U|;vV*mXRR#otd#|xwX*196%6W9gGeNEmH)FnbY#{)?whdw zPtLghZys{)9Q082ae}J=%(=K5So(_V0cUvCCn%vSF0%wy+-K04S#gM3_gt*PX&Hj* z5Nnz3z4dtP)fG3WHFwb(_$IgNYFcB3u>Mu}R?C;K)EZw*j^jKP_~Pf&oDw{vXAy92 zW)XDoX$z<8CKg?kz;q$GAtp)qV{*BOV5r6MVxP`C*v@wDW`Sq+EP~FREJ6;l6IJhJ z(M3V1zE)L}FsjeOxtB8=3{~BU0y|D}lQ>~YK$ZtY#-mR=ffW(V4KD=E1Eyr*%Ewh* zI1Ap9Sx>_gvszhWCvZy}v=g|U4JHZ|C8G^t8*YPCxDAd8i|tAjp^h^hcFs{*1KFY^ zaI6gDwQ|}P!}V=o<>r^zyiLxXTyK|;&(+Vb?QCZ)8*@=pQk?X7mBaXvDc)XopWgBh+!UBR7 zZ8#x;h_sDmnfE4U3}aEB(qqQSZ560&D2TEx>3kU9?gIpFV2flzs1`a;$=pZ+J3~bSc z#}DB)+$!gmW|d@B;Wn7&k4T!I<)F@IeiqFCl$!sv1{-Tjv+ORG$I1|^R&su!ZUg%? zPOf+b@~)3N=3oi;bMadyPk{a5i8b-h!71JF1&?p;f=nV@mwz#`SeF z?_LBlQ4C-w&{;4Q99%jY8w+&luo;$41B+p{`Q+a&2~^#nuDuuP?F1{aa#;8RLt8?b z2F50~w-YR!i-|`ZWhE{oksxdQJTa^e%cw4naOk1_0ILKR0 zICgZ#>MY)i8XsC%2=w67&r7B8Thc{BAN8RYi3L82!VI5}Vjx`~H3A*fM{EWkZDRo+ zZAMu_AKj=vLXw7$SP37o@cBqvdOq69_I84WvxRuXQC5OP!`({*ohWYCCUNfGZ22xc3^hGz)OLr z@^J&EAX7f3Za8cQ3+9_k*oyi1CiU0^7-1(^3y-nzPiLuoEntR^kyySqTyY z^RaTVG~IlBnQ6_!&Bt+|{(MZ@!R-M%QL$BM>~wC5tzwz-M+GQk~3lywUx3Cna-qoH&-&% ztNW1ZFQ>Ak>zV35t*(DqgO#;R^(=k4l8v!*U@0bZ<*ShQa^YoE;!%2%<#+TVpz*Z$4Ewa-dKG7I0@*OuPe|2W&*2^J2H z$c$uVB}hbkc~DzLjEwe{zV-)HAII8%0uhBh2YIj?ou;k*)w6Jx zTZDneGey5`gBswLYgxc8Jt);Jx2Rk2Oar=D3AeEDxkX!gZb9y(TUaF}(uO&9mrAH4WR4XJ^;D#W6o;HovR`iuA*A(N zbqp{YV_;=z$nIk4TPbV{Z5wIrkTaDGI-k@8?`B>89Q9AgS5|SX5nDd|CU9;w$3Jf59+!tnSuDByv%;}^W!LXOFm5*(#DfT}$-0~rfRGuQRGtvcP)@>|Zp z&`Hxd9G?nh*4Z(~SLN@(3pY%vW<4Ef#0*Q{&`Rbxozwx>2l9w81grvbr3 zSDB=9ip1m1=_+_1!D{BTZ3F_nybU{r&gOQMT(hkx-PvSI%;xPZxHVv{n%M*gcL8rB zoa_W^F`F!omElIj%%(Plwl-*U;C0R>3kQL~*;H17MAcp>)A^h>a6UU$!KulKQt>+= z?#>22^{V_s)y|2wNG?i_-%llhxN43w)it*A2o$ zIk>9xt2<`lMqOq#V>{xB=}rjh%8J)x7M#22m4tzx0iHTBb-;m{PE70xb8{aH&JEmR z<_66%H~Z0#onS5IhK29Mq)jn5=W=fDp#nR>!nvDx#IO=12A-IdyBrP89qhfPH4FE| z^m(BE6BB9Yb3QRWG3^7x%$=QJW%9(tihjxP%}3!lpU3P3J=8XnX*xo%8s_xBgVizO zShF9ZDgW?T1JA=hc;p40tmUzWrEkYE4s!2cd#S-ruy8(0JmM%Tp@gyJOq#J7W->(UxRIDk3G|sfp!r(QBD>MFPR4~%H26KP8DN%kKl?}q0Pk@TMHnFF9LBJg_qZ&5 zyAd1ryT^SE^6o4Q*o{sz_qW<*#KdaE3l<%RMql#AR*!2RBJ3@#w0-J(w#ZL#od#RX zK2;O{DxA~(0PG#&yjG)Y??DLp&TC%+nHURTCmsSE^j?k4u#g^Qfld7jDD_~1NQWD7 zxPTj3iFL%n7be;g>u4>e&Uu9G?F0+wVd4?PN|5lM*R)l{$Y^ir=d}UV$8lckgR$@( z_VF*HQ=c!M1nK(XaiFPX)9;YRX7I&VSil#Lp;TXBl9Rq*C49lc=L>D=`QmA|w-YR! zr-(-!WhF@XeW9%)Mn-!}_r-wfSJLCdkA|v@!u5gXar2!|eYn3#^fsQ0f}N9++Gsti8+7h+1^gDa4@r+d}Sp__@C`)tB8@&-qP2|fa)RFNKG6zg}c9nK8EnmH1!X5 z1iyb?2bmZTU?;upMSKa=b!Jfy`5m;e3y8{ zQC5P4-#^+aVq~)x6RhZ$C*J%AT^8Q~ zN8rN>dZ+C?_^j=6F!=F>a#oXb1v$=7A>le0%Nr;eZMhU!4*@;%oe#wQ)Iz<1GhZKN zlb+<6Z=ZS+J25=TTAuk>`i?|wJjA1{@1_#2YsOfZk$RM+eMijfM?Ckd{W_n?TRc4* zeTZ-}+4=AH$`OlWaHY;h{#XqNpViFJSp6kNk`}AUXEnb0rW=x)M1XR+NpNxfm&uY{VJgfOF`}M}aXEpcf7_L=qtmLyA zmcCG6+kVe#kVU+`cfje`eO9AAM$ACfWyyU`Z|etCCujM1p49|o0p|I1o#)@dOn3j{ zvzp(7bSL*6pgOtbZ3#>SpVf4^v+Qt|&1ax&k6C_~1y{>|0MWd&UtNU746UriG_yEX zhLAUR_u3TG{Bch6AF04juyFoBJYrZ065g|#$?l!{D=9~IT$Y+ z^>Rt|KGwp^ERK~`dS2G1@bV|<<@c$;POxy^BOWoV z1c|B#plr}*C^^~5F+0EP2E9B#x>Rzit{ z+OmnZT!Dc>r_WAGwB@mGJ?i>@=xkn+=n9CZNx-e#G7&*i~1=2p~!~_duzqN@AE<4mvE)_{hIh&@IiMLMli$~ewMB! ze(A!^Tl|baA7rAMUQh7L8L9d1cK~2BtcF4s*gW-18~ptGOX|sM)RU~lVqoE$Yi;Qr z01DV1KShDU8Ad$fC@Vq2e}>mq5hJ6$rJvykRDa|%d_cw_ugq3o6rt11dBuG;%a040 zS4tt6fWL$BOW|lILdz2d@~b1MWO6maFjF#NPjKH@7F;a&sLUjjht+@P?IPB~e=K~- zM4NiaWCRu9o8~B-GU5?OSqTyYlZkRu$z-Hy&B9G4Cjj*)6VlEopO_|-(O`JVgq6u; z!ixUM#JpXU^ca5LfkI7Oq(K72iaDp_#O0mSb&NMamgYR>D9vaf*h%nz)75A!~)(u7f754c{2pqAkq2 zOo_&rpXF3gdvbc2XdYGbpVsBUS|%EnzC^>u{SuA;NHoOTMcQq|L}SDY2Y1jqL=CfK zzR`y(AFYj-cG8}$JdMThJg%7-%>?(^%D=-U-IW-@AbAJLTh7$Ab`peqd52%FNlaDe zpA0k=8q7P_GBV7K2b*ExOk{z)GY+NRc;L|%HsO2Kv8=?pVc`o4Z3$%>7N@d3zPN|N zsUjY6l$97yB0-k-ZqfDVeBir9sx4yLsuk(^Xh3y_d^FU%MRU|g{KAsYN2h^weKZ;9 zpgv+V_-Gmn_(;F-#N7Ot`pD#FR>DUtd_K~ao{y%oy`5m;Od%d|l$9Xi&&}E@Vq~

tOUCIkOLgou_L6ljqL|i$ErDio-0{106IUuo=R8DGTI-1t>LV zKIzK`tVDFP@Z|$->E(kZY>$_NQ80JUZZeU5RW*@N{|@p8P-1r2BP~6%QpflY0FBklYY;z)DS$wTE%|7G4L4{ zP8iq@v2S7wtmHE+mcC`ew#WYrOMApC?CelomVR?TpgOe-($>L8dEe-4o#)l)$=w6_ z3~L=ocXHPP)yXaAw+!?d)-5PG%eSI*pJA~*W_be(W|B2PG`D|6U4$GAt*pf~vrrG2 zXIR=4+HQk3=X@%#6D*wd#3P24AmKg3%Jja`DBt@=)j9rmgE)Z9?;BC4_w*&x`$m49 z(Lr^74V7u)u~DK--liRS2p0PMAS_f@D7=I->6pS6q4SY@>$u1 zAazdLvJvRzZF}6=yxpD6y{Xw`OU&lQEI6AV1ERC}jLxQcR>oS)CW~WbRo-oZHpOh- z!P&fs3h+id3TGqnh+!p2R6Pr2gFY+U4S&14s%^v%K-`{;14NP2bZ>rEKYkoUCR*p7IL+6+ORg*c7?VW*K^Nf;Ofo;pQ+1`f=0 ziegWg8!T-zH;4r@H_z$Z=vP7$ti{~0@SUQxDdy%}&dnAouoEntCgON)okfDgz*CfR zQ>Un{6vZ3ylwApRc2_e{|0#;Jv&|>AioIR}hIfi$W%3loivFjlmk{PYkKtPY6zXA` zPVP4PfK2aP%mXqVBhED2A*!*f{^6PCtLmS-RVQnCreW#Zag2l9d)iB>!A`JnV#Fhk zvJy%dTX4!xp5+W%=NI>0aHLv``=Io*oUiq6*12an9~-wq$+KKCTx{)j@S9;X?kuO3 zmU7MNxOp@DypH=m-K1E{n_-r|O^S{C-3-45d3SOKe9+=Panmj%CWIqi4Cy$u^W+_{ ze$@6M!rqEY{|x50STyhUJIC4h>RdNY$3vat=Ifelhmh~St`lSenGrM70d&xF9GhW* zUBLpI{beZi!199n(cIUu66=eFFMPBm)|cM!DJMte&? z#|@}Hj&oceCUJrKVkbKF`JxM?>x(Oarj}E`!yB8y7gw=>FLt3+U;K;D7p#OYSonOQ zEj?d+obB-rJqpJmj(6x;BuMyup{?)^Ju9`hbYBdpJ`P`efQ4VLzUYQ_^+jkFPBct0 zpHO3V112B>yU1w6@y1=cIGX6!9aRDj4aTv(g`KOlnSpGPO5S%4lDye9{CNWlF47*h z;w|vk)S)=`z#7)Vp)7pKTbp{x`%_eaSE*4r*AS05%1V&Xx9Vu1ap(`cUno zwed2G{|p6RI^KlD72L(jKGZWaj={^v#73NKl+QhQ5ZO9QHp zV=ZxWSfsw#3+=8i&O_*8clCVn8TOmF6R<7Bg>)B|1hdQCC@0tIHyGI%9=VqVJaPw0 z^~gbb<35hxbFCBE zFdX=r&W`5Rt$2ombNU96*K)vHw?-yyHox0GZt=RMNHQ`P^wncfH@}5%EbE_*^ZfZI z-j|nC0P?TabSVb|D56VN z`5grQF0&lOg2$yjWpE zVX5-p$|L`vYM7)N-W}Ez$(1)tn<8O(B9A&}SY5yuXRRs-OTLv8#tTNnn<53W#QJP$ ziQEBBSbnS;dhJyOxl&oqwhxt2{u8QU4Xg^wiwfV!CI5Zp7v+4M7M07dBZS{q{3V5x z%c%beYgIwHT$OVkv`q<8&yN&dQ%?L-z{kofIrB@xa$p!ae}Ltjp%*x5hyqJ`@q2@Z zB6nkUJnH81zvYs$weAaP)Sp}`N9)Gt7|8;qzU9`HqHU3k%e$?t8Q4ha!6FzNAr+Jg zt*b0Pn%ykJTFY`%>~i38~Te&3jUp7B0*!kgy$dTlywv2e5Gzx$y4PbrLKnLDA>GNsodgc zF}}&tq*O}@sndkMDU$NSXS2u3RJl|syJQZ=H%;11T`8%VvQw!)7S1U;3BU1trBeG# zPQ>_TOP5lO#iZs)k5X$2Pt2VlwQ{3UM~m;l`0C_lrT$n#YJuFY)He$6DVT^naEAmi zM}4^cX~v4bTLP6u5(<+#U+&eqgIc#iKCje9WQJym%6-0e&GLY+-4*hX){R!lo$@86 z#v|&QrCT0VYGjbqb@I4U?MmG&Pbu}NQhVhYpUwy5Ijsw6-GlPHQtu<>G|QLeYf2Sr zf6vGvU%PL}OIp{dbuY?cU){IlRjtF%?nBFK@-3xG)Xq2LJ4)T4)Gy_`N*&bRe_{79)aD*4~?Q(q5R)|*=QS@mGH^$VqpuZyf-`Xno@Uum83^-0#Rm0GBlRa?LF zwVQ7J-q)_qdROa=ujgBTR?7JL9P53hjIUQ)A1Gz4zQFpMQpVSttYbc%ZI)#*CXBD! zfs^{V`g*4oR?3W_+sd(0@p7Y;uXV=io2&w*{-9&uYZY6TJeu{jd`n)!tkl z-7kl}2KdJ?;p%e2%?fKExxRZ_0pW^l!pF)8pDd+@4^+b*z)E=|@=d_E%D?48OMa=f zL(6Q<`ZwtLD3X3XBlA+dBviws?C&Rg&l~Q-dRi&6LlD#$qq^ z`Wgqkrr;3zD#{_ex}X}IjtG1FwraT1HhPLOw(`q=eNcIh=)0jQs(A)1X^>ffW<)!6 zM7wn?_XIhXw}KqY5*^D<9g8;#WB=SCEurS2Em?uc;TY>6c}_o@>8p`G{j}UK|I0M_ zh5aOr&V8~1ns2lTL)Q9!GG8oi1jk4=$X3W0KO9p(5ABDqga(__OMShh=G2=V_L6RS z|JgKS^vhq9Hd4Pleez1ET}ROg%?+|MIf|(P&fpn3gSRUDLy*z9CB#_eJTd~ihP0O2 z`diCZJ^fl83UeMko3G8#Di!Cn`CG-GQky>w$p)dk@%*)c+kg-4`BVg^>-1uSI&*}2 zZnOzQ)*XO@#}eh=O_Tq;Z*;V_BSM+S=>|S1Qiaa~FHOOsL^T+vxde##UbBQ2v@h4;>FuvA$fW~n}>=w%BO4ohtCodZ2?iyO2qj)7W zNk=ginj2(haugpecg-2nT522GTC>}ZPTOtSYNFHv-e?nstOa_fC~`Qop(GHI-^zU%!Vo3hm+Y5%7D%Em(fomA3i&0mYtV@JHTTqmw?k{@CN1Yjds-QSoH#PiP z0dC6m?{MhW@DB>glGMfFBLyRq)YR~A3q~iYlf&;8;PHz79S&U*{#yZ`jPQ@+`)xs` zA=I+p7Mzr%65&uG?jtM6xHdbQQvzy(OSR`%GESl{wI^r2b+Rr$6zueVN-2V81*b`kEi zzicSgQYFtOsS^vURR#+`Nb%;F@DxXz2NnUfQTe9m5Yh?U5 z!C#L&Ypp7rDl?V3HoGNvy>+^rDr?0dtP6`mzwJf`Cu z-5=hUeU=ou6s3Q9ETv-sOdhZ z5~;;APR;{Idyd?u)V0~PdYRnqQnY%R>~|?zy<8r4DO$Z;o;H+Py+ZyaNlhzUA+H+> zzP_(;rHrmt%hZU)Jz`MXj*a(?#S!bVv!RV8&+VzS<)I4d#P zopO>(aRqcrwM#LUcF1&>qSZTOu1nGC%cb6>X!Yf?+@-!=wBEWx*16Qb6&1-9a9 z7mnEOTA7_!TGS)UT#EDl3Hgknbl!K%=Us~PzFQu0DQ1SN<#CsyU#^ztT#A0VMh>|Y z{c?@`t4q-@*UI-?ihj9Pe&$m2%O~ZiOVKZ%ly?lJez{IQNK(HqyiN|zF=KxP>-~C( z%rz9(`wg;1DYM>hl2(_ZEjP&(E=5~DEmye|ZTYlZXDIFOX1O&<{j~6AdBjkdhZBo# zl@F42zc0K^*79QlH?sD~LoW68VfBT31u0bPp0%or?v!Gs%}8>MRfA6NuaA zQ?k!`Hg_7RJCwS0#A~Hz7TqKFDP`K-BM+xhPrL1?3Rhxb3Lr^YX@$l$OuS z50x_Q_Q?^qj*|Q2g>zDp`{Zj%8OdIG#jT@cuiUaMCD|*tDP<(@lY87cO5P`b$H%dr zckh#9N*T%hlD)#zQF6aDtx8Gmmn}+}(cUi|N||=|3xCYk%XRn5)owd#0mYA*+}XTe zu2sskdq8e+>nI6oO-k|sxlJh}`Jmk6)=~07xgCk$)A^v>p_H-g3v!=Qrrj6h;WX-L zw;i>7L7rZp(((m)Mk%A^A^C<yi*m%RqvRK* z`(r7|FUlvBGLm1C8{Ileeo3}%Oi6x8E>X%zJ}jMX9VH)@H!ey^J}f^}%1AyUN8CC} zJ|eZ7Qj(9ze5H)!qq5AcqvWHqb8|}aQMpnn5DDaps=&q|s89+zWEnRbs$)>cY-RFP69Ydo(1jDr^wkITeu zDaj{fhEhfnRCB7oCuF8lM(2}K>($vG)=~0Vd1psT@>%(VQf9OVQu6s{;i;^_h}RT&(Dq3V zl(%HYa7y~&$8*UcwB>iWefIFFm3L^AX7gbMQJFOzMw+}MNX1JE-# z`~~#b@`DIvW)~BZW5#IXX=e&Af=>c2=d2R8qL%{VKtAa52lnOH|6LvLK>Y(-8IHd# z{cp(^)k1?CJ;c-PG&cKnj>6*x3(sK)hwk0f9tx*)=3@qJZ55E28WpDZZ>c4Id;C47 zT3L9WNey?XC;c*C^?Cj@_|p<{{&}7^effJa{vX&2{o}=e8QqmWKl^PSh#PGmbr!r{ z%v=n#ge%L7D>IM&NHd&o>I(Y*KRg9@2&dwjh^rdcWL!14PQx_?*Hm27am~PWI<7Nt z&Bk>mt~t2o;+lu+EL^p?>ToT(hWmiSrK1#=GZdep_*}*3Dtn-SCrkrKUS*!S3#cx!3+Wg00zSM`$3*9ca zlx_{(BL!JkhBnH7hd&PdPi3D8jkM-~GtydEc28)e{oS$$Lv_|dJX`#&H6`x=@MnSF zuWcXEwvTA5SLI>c{aptB&qAkK)Oo7)C%jv`$Ri?d4VBU1O!aCsH2n z)Y?w1ji^%6R8*89VXWS2EI zs~Gr-lJ(Y0D*u|wzoGJPm~q)Rl(%J#w6~XEl{H%XI$7Z)g}vHuukeXdukb0%&vlG% ztA@8#!_QUoJF59T<-e!=zbijz(ZYNkdp^egna~W?JXc`^wOd1@wRW`D?oyBKQg76& z%r3QImyUgxj(wN>0{8F{iyk;x^-od_lZ<}l&sBcC^6QnqOtr05xJ>(9tF>#jHXCmb z-I|{*5xE0!gnSlowCn?{kOu$}iGWq|7~mv%8gPm{mtQHnrJ}e}Zjh2O<0UTV7Mvm% z%9Uek@Rr}&q8cfcivUlMF2Hee4Pdpr2smBd0Gxwy)F7X{19-0T*8on3o_S;HRCAqb zULcL&EL8n#v^J`>QLSyl+fGZz#I!c9wYwp|V9Yhj*`u8O%DG=9A5i{N%70P$FDvJ$ z;=fWnV6n%5#Sw)Rj#s!q`3n?ZsIU>71!Ec&Z?e=9#dj-zH#if{EW9j_atlJ*xb-we7DIm!OW_h3bKzdLT&4LqYnXLTkq`@goY4DwHs-3Md?>u+D|rui_2iJ#t}5Lzp&4l@krKwo&mO7m~AE@qLhgx@4cq z_bR7X<@YOoP~nRTk0?BuxKJ%oe4oNz7m~kU z@k1^o=S9W)Tu9DQ#U*=>3@?>zojW{h#@vC^Tw0-=O662$Q+}M{wW$4CX|2}QDW^_r z7bxC<+R{ja);20GC zO681GyjEeIauz5aRlHI09>sSnzAtBwRFv(@;YfRxzhC)>6n|0iBapeY?1;+rDgUVQ zC0A!nVTHnR3TqYC<{XDyK(bZ|T%GsAk3wxD+Q1L^GA5pwdamiPI z=F^_KeD>0izeoOcctbvIh$^RBW%eoTRn9@h4=H{`@jk_^VboJQY>%8dqIMWH)D5G~ zsKRdW_l)RPevfkYf%BIU`;^nGoP)!d2M!LSRfm*wMDaewr9iDMpw0@#D;2L*yg^~N z!XD-CQ@mI4gNpZ=wuOl2krjosu(FWa>J&DBe{f`j@_UrC51h(T`;^nGoP*$8HtL{q z4k_mdI4_MlqMSZ_o^`?)DZ&amL5g%9i)eFY5qqgsyg^}9Io*o)D85heUd0b8eyE7r zjwmk0)Kj6bvRJh#9#y)t%irH_kat?xX_=JPXIaI9Lw3U>oCri|midQOL zt9V@rcb2Ha9>A$%_Lc0BF{AgDQ1c;`JOa*^(MOciryMEWBQK1WQp#ARs=1W2Sy8GU zP)?n~sKV~jry$v*c&|b$qOBt2S1MkoFdCud-OBG(&Jo4?6t~LQs!m~4VRxBoR=l@N zN3EPb<H@QM^}SpF$a_@*`DVVckgf9#wpw*7hncqf~N~N-C^V*r5FAD7NZV&OzlIQoK*0 zbpl&eoInkgiq|QOD(qH%kK%m_t~a8-=lc1!ajx8 z1eH-(H$i0-?^Sq6VV^?l6qQt1r!cDUkitHNl~rnw!XAZ(6!s~!PE`%3vX`jhy$TO0 z>{Dn>)Y^%Z>{WP3VV^>)nzeP++Ka*-a1a9u4*^acV@=Xt6xJz>D(q3%tMHJ*K81CY zRhz;dg}sy6OP}JEHLR^u*rTvl;UR^6HI%G8jWRt7dlep1*ms)NPEidCqY8Tz_9{H2 zuyU%(D2yuXQFusUpTf#%Dx)x}uxA?eA5y$ep*3A)6!t2-0iQzrmz86e*~{z=c9Y$1 zciD&S@7efw8UynKD*_)2YzcG(J|6f~;F-WT0)G!=2P46m!TG@z!H)&E1os6W2_6WR zhfWIBg#J4;Hasuf7XEbj`S6IWo3nn9^ za<9n!V(u%s@8?d*yD{&3d4I|)%Ac9P4tMhwe(EWR?@-~bc|5Hv1y+vlP>sYhyAwc- z#kZtR0(CMlk#Bi1!!YjA>g9{ZM^-P1$-=^jprRXz$*c5j5!bZI6zyf z;S&qbK869G4By}>I-rebsl~vj0NQxJjNeu}1Cak_d>QcBfHt0|4hKF5(8e>>k-+Bx z+IW6?0`Mh(HlCr50e%jkE$89;WcWS{ppECJmB7~k+W0=$IN%op+OkQ%;no0X7VA~UU1 z0cTm&u&5UJsWKnr@;=>~qfTn+qmxfb{t@@e2_;G5Oe7{Q&u zXUpBd&&0oLb}HaL;B(}D;B(|b;CQYIe6BnKe4acGe4acB{499}_*rrQc&!`+UMt@K zj;Gkb>*N*S3*>d+3*>vi>*a^Q>*dG57vh^wrvknOe6jpH@Wt{Q;7jBk;7jBWz?aIO zfiIQ!fS)5D06zy`wylcyC^;_j~>v8Mv);{~~z?;EMq02&F4;>D@9saNI zoUBDztFsPge>*#zQ;@SLXI0KcIg#8Ga!d10$Xk1-gWddW$^VyIi0>Tx z7+2-*#V0HMrGBD38&4fmf1lOQMbq1kDq}r9NJ{=)mp>8fzkeUL%B8oRk59k&@3iLO z8D>6WFdwm(kC-dKiY`RF;Ty$R!CcE+$y0Gn!}mm|cvvHjX zd*|Sqi)$XPvv8e_+)|6H4tZrhR`LQ|^|%&dB`-o|S&VB5R`OC@=ioXQ*D|c;<+xVh zT8Y(s9^S28g$wgUlhL{lpDOY@)26I+%W-Zw9_4hrw^4`BKNiS|) zwF>1rTo*{dzCa4?>G)apI;pfbsq7?su}reh#kE|f*{e`SQC=XcA$KvZOK@F|>l0{m zogI_g?S*m|+T4XUcR~Ix@E-@C{XP%=^WZ-ZU58NjJaip`uGet=7&_jD?C!c!hmC9EK7fW^UTwKd#YH$_GD9RpO7sy=5 zF2S`HR|BpVwCf07qc&ZIc2}X@RcLb+_@4xyKHLNT9`N@--`%L&1ATWx-`&vnAg(8& z=WCFEDR{lgzYh7=A^$q$@m+0{H{rTKMu#qts?c7!K6I}p@&U!1YU9na%uE%h_kn^nk2xT~TuZ+VrB^NqyT>|_zT>F4OkMb9| z-oZ64Z?9aQ*C(IMJBn+sd>PjZxL(bBR^G-H$lohf`OnG{T=9Ia51D&beAA|>Q)KS; zSW|Ojv}JXyv8|)&tkc1ixgCC@v8^fQ@|)TkJKH+ew$;a4Vx1ndJ=)nEYwhgEy*%2| z+=QC8R<~{Aj*bq9)vJm$eQ8A8rChBZiJo_CM{|#Ek2bQ?blv9}OVTyClsn8N&2fxi zm&-hB2Zy_KVJmcZL^rp@8m7vEw$?4pTX%HCn$||+m)2boZSHhyNJC)Z&i0O2JdTlp zSh~Eeb!*##ww9JyBL@psU3^z-BW0JzI=8ho&EL`7(iH1JMN*$qb(`az9nr?l^~OlDvgGp$xx+u`V9#7{GL=)pRpI z=E&v*M~&I(GB+8sY25S}S=*LYxuv-y-np=&1MbHnfsO$I4W8*N zUBDNWsh(Yt^d4Pi%6-et+H`}~U83+M^vsXdH*eX3xoz!S)X}zmWlPg}(Rlm{u3;mP zno&qEKny?SI^usYJ zo^RY>Ce_xpXh?y@X`f*S_G$RExM`dfQb5nh^Gb(Wp znR`~Ftl5POvArgh!QwTGW36b=C~)rlT}zuZpGjSli!5qxbul+h#f*TN9fO;(7@YF+ zcWEjy45&p67<~DTc&CfCH8pS9WpG-$v`OtmL5exY<+$h$!x@3m&l zJh~;e63KNt(o1K|bg?v^qU+k*W35e#+B&vJJ6XT3HM#@2yrcQbq_7TN7Vl_AYl69S z?OB&@+B84fcqy{vqUKl&xJ#P`^2`VZ@{Xi1+IF-y$jz`Of{v+k+{sjN52s!aPxk0BQb!kA zy#on;d(50VOiuB5Yj?HBT+ZTHr;*^Uk>XLp#~Iqs=XJDgX>N&0W~royJuw>1VAN45 z(wICiDTx_2rO8F^KxCz_l8e;GHt*QFHP$h| zqwR_~kBn+5lJ?Y1o77HM+$2XBy1gAv?9gnBAvV=@;%CM-@92!Vny4bhTd||1C7m;% zzm#xYJRaM=xn$X(o+Gq#na8U>55C@D)Qx#sT zCCyDZUZnV5|BEod^|20~l?PTXZQY^?7M0PKL8ZLoxUTt>lGU*-Ymme{ckyHxPx1A{ zxUeP0dj-anugW-F^{kGyM0YCYtM`mX*f#BG>`dwOT<;#nQx#qdYL2$#WKto+XA z&CM;%oxWP6O$6wUm|U*V-GSltShNW{hqw$^Nsa3o)~szaKSjs=EbTle%bQ!9x9`}# zEY`ZUbDJ!W?(|Vyf4ukLdd0T3jOT%9i{=~6L%J>vmUbZIYBTH@Zv@=%MFPS0owoLy zKpUfF&62ulr_Zcw*^14wbK7>o9=chBLl#6^8)JxJ=I*s^m&RJ9aR8@N`I*y-m*ki6 z#FN&2Y9mOd9wW3Iiy+pKx?dA4VZ;Q6@8kJ;6Vpf9Hj+vuXstIbgH@ZxZqggrY+yzD z>E5IiU%T{blVp6=raK*|kL%jlpY08d_k-q)IIxYmCmc|_2$9+5MSX0Gdn?WJXX;q0!ML+ArbiTwUEh&KBiK(Pa??ot0Y_bq9nEo!!E6W2 zK$+&ezOyakWRu^XAqaf(?ktm&77u22$!^m7QCBX-PM_@*e}~>+v0=J|i3jqxr`;r` z_@;l21d911gS4skPk~RWKf8k`E7O8fO}O0oTGrfpSu!uxwKgqiiA6iG>2+?}wAnoQ zNcIF3-Wkj6q8*-5X-mqhGu^q4@|f-@`f=-HTcUXUfoCMKj`lX>m{^lZlwLERFFcmt zA0BU@PrMpe+V2;yDt%r&Zt5h=<30xJW}ZyXmr&2F%12E=^@&pb{F?fX=F35HgF_bO z1E5$3c1j*ukid8!F8VYGkWV;#XKynMH`2U`s&9^NZEeF7oW{7v@^%=rGsZf+(~vCb z>}==h#oTkm-2(}BARbiXgDmSbKQu#(M=_kzJMp{*)ZDXXY}(YhtvT6ya>J|P<`kEO zm+ipgi8SS&K{ZRFah(6QCij)NEFH+&v~7Tt8yIe~YeU}ejJ5JOlC*;HTa(%jlKfQW z;qW!Ql3LuSOJ)bf`(WS7<-%eNa22E70}|NVE@V(+Ey$vWLx(Gxo5Iqi(x$*i!}iY0**k*FsPD z{Y8J!M^Q-cLc5gRaeCr{ftGKFUpcM{{N^irrl%^Pg*ps>7U)L!DGJSaB8K`HFk00D zyIS%2KQxb9fjVRHpuSj@lKJpnr+<`QPh6^A8MMc&M}W9+c)|9J&oFxW^_aphmRjj+@Bb2>hA=YN?a8uK+T-Ol5Tm$Q#I zUg$H=E9iYTvzqa!@vWKTRAw{YV^sL_5A9~0`FV`w9ni(GlfMO23;ttPFsqp>mtLt9 z8L&>+`@j`4m_`}jKgvDtGZXK?m^5dfu^L)CH9B$ou6+-T@KkPQUOyAo%DDd8Gsu*s zqAt~^jQ{W+Git)+Sxv}9!>0e zGcho`A!?TQ*I;(T)C$iuDicHOD}65U#8>BZ@O5~CeIkk z0wa?#P8RoXm+r|O$fix2*-aK1%q#t~$8pYQb$af(LRWMqd*PweR}b*N$-rJV@#om& zN~-MNgLe)}N{st3z3}olzm`E(i_AH{`rdKhc;TD_GuD}A<|;_iE`k_!9^f?}nTH3h#NUNlxhxvbBwkg}46R;h%u?2_(Bv+>$y$*$sV z{6n53OLi6DP1cg`SBty9jaN2Hx_?m8{c=h7cZ-YgZy%I&ziEvXFvdVKH`fB=Cw56y z!6VKNMC6+v?Ycly$%2_bdL0;*TW#G^2n+o>9O7%!p(dT(&lQTAMws_zQ}^p!h+> z4=VnW;x8$FK=A{4-gML!FGUZmJP4U+h ze?##%k}a2M%VpYfnM(XzC4L?*!mj}9oQIO;Y%rFfNU`t*&0H)ETDSo#gkk%(YIs}m z_Y{9m@plz}SMlE{{u{+VQ2YbM-%

#UD-f(quYDkz$!Xn@pehjZDl0Ao}kKDjrOZ zu|>z&qGN1vW2S{shnQ*ce5oyqv}KXv`HJT&9#K4!)VNbM?o^FCRbsSCj8^<)#ZOke zO7SYiCn-Kj@e0K&^1YevzOHy_7JSGuImYhm3g}l9lMv3T1nSmvr9`!~IR~&#Hj-;-0c}v4{GJJv1sSyT3agF}>ZDHk?O1BOXat z_;f#oPnTz9B^6=_2V7--+YWfT4vg`7e-0yu1HOWyr27T5`4{NTt+14b7xC#GR+>q8 z4#Ovht&Cz~Xvi#_ogLntHhe1oa4%^Wjlw zmy3x+fN&m}M`MMcImh1QW(csCym>MKmgd-({GNHq^UO=>UVg2gmtRY-e!XAy>%+aF zr-J+qjyJ96H`0~-yq}Vvr&qt-ulnr_k@K5Ok@Fipc`Wrt_8WhItSae#$8BSl!76td ztV()?B3|2fMtS4He6P|8D?$Cc9GV*;s(`i0xS&A)P%v$E;!*uxdMK>&g@WSll6HZf1jk&tBd+o7Y&^Mo=ArI?}>Q*MbZ_H?x%3HKQPdLg{#bOdxfW~ z!k;KQYMk4+hg*g8|i5>A^717YvHK!7wi^7}$=%FfYSA zO&VgJCiw?9$s63HbVtqT=cpO!)wB9l&lpt03BhYa4a^9Y_nVc3hpf=6O2i zp|*$4*@>%*qTS?-Aa=E9`8-$uJimUn?7oiRMz&C&-9qwqf;-8pwZpdh2lE=jgkWAO ztbziZHA-fe%;O%+^Uu8Er8yp2kYi3rc0obDxs@}E$CF)!bFa2u<*#0qi*32AWF0oj zf)P`=g>viVzKKKa1=#7M(3g#hlG*qN>L45hQUDaZfTBie%4jRG-|UlGvwF5odUQV~=l?G`Q7dZP@lyAG zwxlA-E2+(QmFsO!ioXnP$Aoe!0#-=`MvX|-Y)GL^YBK7zEb^P)qNW!mE%e_Iq!jGT zbEm2TlkdZCDR77Bo~Hx&5?7!KzN(S}T%&_k7#P5qP`2fM%sSyru#8nzc(*ylAqoU zd_ADreKp#=iH`3vO5^`ob?UvBYP>_A@p}sR8kn^FlRFyvWqo{sQ`UTFkEs`HQcg?p z+!qh}`E0W#7yTa=g%H|!^d^* z;8B*QZlL~te&G8+-WO$tSYgMl^h4wJ_%s@?P$}Z}pEdT>3OnPUr!=*~W{I>}a>@TH z3XEx)11-&Sc)>)!PYKUVA8N^&_gnh!iQZc;AG#&RENRF*kdLf5^I%MKH>d}9*Z;DY z57`aZ?Q}m@$$v;PBYK3AC{O71ltxsf<3oTjyzZkfGeg=Lq%njxb53Y=pl9q?q3%6j9Yyp&zPJ zSa9Y>?(Ff6c&)i3)?Be5*0FiVM!3~{6Mf^Nx&`Z&t*u+TaN~jnlkqjjXbU3el8u}3 z1weewVxw;oH@0oQWTW0@ZETHo;y%n@S<~LM+5O&xxMmb?cg^5X_eYNG`Tk!%_x>Nh zKY7oB|M83#xrlg0iuPkGeR3k3aI;w7(y}~?FHUTaV_%BJYWSTE{rkswDCzGKzpnp} zasEr~h!c_SbVD?f@E+7aKIN9++JNY(`hV@6!AiqG5QbOm(SwiRu~3kt*4T?+QN&(U ztmH1WEd?8b_91*6U%+S5ClJ4XCTUY`JW3B;*km`mvokxpgrt0(*amdT=B_?km4*S) zfKsB2+)?TiMdX@#pW`KErT50imv)|KT~Qgt$d0_{a@O9frVA?EwBQ|{8D|QmG-AvQ zX30JqLM$jr-P0=G?uB-z>_pypdTYEgD9`2vlOne1_ehV{#|bbUJ5YT1fH*6A$eyEZ zX2e|vB~`MD8o$TY9IdO&PY7owSL#{Mr2Qoy@$<#b!p@Xgi>q{^NOCb`WwglBw@-h0 z#u>~EKRi_|U2o?h?25=QB4y!u-Z#-RF-grhXRhJ}C(wO!`W%q2OwUbmUF4ATl=DN~m zkh|EMP(Pv;Vat$nV#KSc*D<9SnKm+F9hJJaHa*ruyyuJ_&OO!Jp|#q8^vUfXGxF07 Luw`q)zkA>tjZDZs literal 10240 zcmeHNeQ;dWbwBs+?%UN`7Sc+x1qiYJkl9#ftq)^lB81lZumzTEEZK%)ke_y+<;DBO zdr!uy5Rn6+aa!7j!T~p?z!ij`?2qN-U&oWLK7k(&=Fwbp z<=Gl~zUsAgUsroxTQ`0z>%>cTamqIH@w8be6y5lw6}P7g@oXVJuy-t;FJ`Rd>ebPW zzUh5~M0-?#T86%TuH4&sS|4Af+KJ-e7#{aCy?8R+hnuKYaP9fc4EA5Hc|h>_3eb^H zuqgjqeEKA_aP5NKy^Qn`-OqtoejOpI25e@uSF0r zLS=@J_@XAI#-2OL(i?^M_?|>kH$GLoNbmB7hjr$2hTz>~pCoTuihF&Sr3@mDV2d0d~6~Nt% z@F9VuM%O-gCD7J2#*+z*yDfpSwk0sEHXB1JB>>viCg6LU-BzacMWYUe9N35^&{3Ox zsNA&agL=lm{`WmURW{d>KnU9GzbVt3He+<~&#MRYn%1Z!R7d8Z9n|$f?WI=7 zf(fX%(GSAtS=II)d|5Wy6RmM?ff=#DyZ zCxD}>m9aVLAkW4;3Xx}`pT7l!^LQ4r7zOgk$@lYkBLd6?G7GCn9v4Xwc8%gS=#{gz z9nY)#BwMV8Y+;!R>ebpS9vurLknuJ;XX;sQL8ka|u@OP^G9_xT)D25>s84jmaMiiX zkaEOF+QnL3FtLLNd#-UQKb*LZ*@%Hc6>tRZ`xIT~jT?*O*o`}tzw*HqIVPdCaSre~c(dVNqGpu(Ex0#~xpuZN<*zD-G#fDu6h6nKcA?RCB z{2O-Wijypi3(JB!wD!qWRVY&WvFakk59-v3oBPM`2`dtz%49i*@6?AIu@{=3tO~QT z*RU@0P;TBnKs5&QxX@yuY}lYVfo}v3hA*MhQh-yzuY?TBgkClb`d*OXV*luL(XDU=P0xjzK>(UIsre{68a>xrSbc z?kmuZ(hFgR?+X5Xf$s_DcD)|`MpTOtqdCf`D5V1F$Qt@ReE~M(;BdS)3FKNhgDieO zatA_Mrhc@9YOC_vv`98BPzrhv1n!BXpr>)y(pEKWq>!sBp(0_X45|_8^TsfG4?`+| z!u%{eNFk#!3aqP@ib_!(HA>r;q%B5kp|@FY)e42v3HVp)8o+wZ_<3;F(LI4~K%=T# zBVvIb!2dRG0PIz}03QqA1W84E0q>_V#udX$#M-5FNN=b0YNA3n4Lo9W0$yv}DHd2a zM(o3-R6sHF^-Ad5p;>VD#hH2_(i?e3X}ZOyZj9WoHJLtjmwpE)zpPKqX^ft1pBh!C zb&!75rw*wHLEYz3P2H%95dDVV_M^}{Dnt+a)WuLO+CJw~{pi7sDym-3)F~Pae^E#24xzXWbxp^FdQ<%^YO9)R zH?riL>dL?-P%)uC-P9X?RzCCKpc;Egv0V%5KESCpx+4$0=^a*1$;Mj z8$4tF8G2V|sY+cQzKiPA8+r!#Xw}C7cd6fmOndnEX;=+by-Fr(L=x$QO z>Or*y@CTuNYNOcSDE2q{_CKaRskTsS_zAU*o>kAN26|LI2mFP|E9zDHCOEIs+Q?t4 z)9Ufa->XyV5!6uwy7M~N&;`IYx;l`gF6ssRC=CPl(?P(Sgg*w@CpJ?)WXpqM z`G{~#A2L5pX}UHzFPu|8Wd0WfKjTB@{JG#SLH_#SOJeQ3aNZKmTfzw_wiZx4inx+- z3BE!28`K|Af3Q#ZDdG1Eeng-toV4Kc0#6C&KEclj{-VJ1>OT6dzFn)c;BD$G zpf(sE2S;O_4nQ)1KMm;+@DTnq){L-N2m`N@^*aivk;hfwR|7`zQ>zs)L055Q0jxOY*#x(Uw_Ja49wx{dw>xqV9&v8Ql9)N{hj zWizImEf#vOnV9IHo?gd$O!H%SurQssY;!Va9qFKP(>adE;K`D0ISy1nq@0;Tnj1ze z_gFErb2^*LShg>my4%dULZv1h*EZAcL9e?aOYF%yE*=#w?6;ihoXd`MQqOL)kjYuS z86kFBgC`-5Guc2f?G|m1Jv3cNAL*pw{nI(i?|Hb8b+cw}8Fv}Ex5NW>z?I>4kr?Wt z9?Q0i_6P=NPFd{6HVEvXo{?e(J@k^-_nzWZwlFZhmvUufkC~s$m^5X%69cA;30p>b zdebyE@?HI5vHN6mCI1iKGSjTF4~!uE#*hwY~J#U&8v_yZ+xa? z`J7#r>q!jR#rz_VB`P?6VtkV{EU_PRP1hPR)5o#}i^eQ>3GGxivbAysF}xu}ZQ8cT zp9iL6QL0qRWz#abl4F*AB8vbfIZu<^I)Q2DVLL&h^h+p7i~4N~9?*a_IXyLH**opx z-44$`aRlYqF)<--5Z6IAXW3FrP|2iR{Aih+UQlMOMc(LiF1M7kqKif0l;c?W$=u9% z)~&R$B0`HAWn*KmRT@8L7pJF=EjEsuHj+Ao*M}C0@%UmxS!;JTld%em{Br+87~nz6 z=Cx*J<8a|<(auYF&D;k{^%o0Avs2Ty$SoS#Zyg=O^m1o-?QjHwUd+;6Eh<}Y1xar2kkStBCtVJ@G1;d zF1L%z2n``Fh4MxMmli@|9rYJjp0|T1)0V9A{)FUWDNF9j7Vg4KawjGxz3r;9CvUm1 z7o8)lCjLf-r6y+$6>UoL9t0?l<$F`Pn}Mu3RVZT9N;_p%Ic?>+TV56X>5eq=D(S$v zZ4(nNUb~kS7YZQBIdmX@)WlZlhoy)Jx>kXw$$|zCGPxMo1%Aaow8DzNFM1`yE3mU7 z+R2439TD@l1*xSnE;W_PWcZY@(tx+gJ4>o(3| z47o02u4%h8QaoXe@>}>}%)}E|JN&s^DmqytZH9)us@!iaa3(TRrxl#xeP%j~Dyw9T zSQ#wlx!pL1z)VHUXwe-`!%5`~E;LZ(S*y$2c6ZI*DH5;$s}6u*53&){Q$2&rEo0ir*G6jzbPT z7HEpc)RlrA_TK`>g$HS|log3Mq^H42%Qzf53X0#?rT^&3rUy&T$TQ!&{p`z+-eXWO zu2dutClvxxSI1-xgOJd}3}ZJ7yq)0{A)_%iqhig$u!<#&#=5&ytO*BpM(Qctu9T{6 z!AnpyM&i^M+W{_%;%foy)Xks5kA~P>?B<#X==sxi^AD~9WB!rY{3l}bpRTP{x-mBY zIn_d7ToId#MiuDCb*#DOGS~)wM%Pmd3`0m-m_VG|fGxc-RpV>a)XjgDoo`+Z#tVU(x-1VthvHf_H*HvE#_K`^Ta+)^@IE#p9Dw!^ zhe)&W_E&KL!(@B9 z%Cif8=a@`T_@xoP;<%yri+PF6>~##mFVIqHQ*BN_ae?sCCJzTI{WW2I5S;|b(*zQ#4HQUK|%CSOSss#=7Jte4Ka2o>r;zVX^Gl6N_2a!3t>ClVZrr!@;Ts~BtMZiy;AHjMviF$#JZaLD^#7xazbg^S)hF|KUByeEIl=PQVt=Tqf107AhkpB9F24&ajn zpN;qo#MegA8ke&~0q25T#W_I)=(*r0VN}5<7gAX{VXU;25t(+3+xy!_lNYG z8Ob~UuwDmFN$m?a_g4#fj*Kg^1^Ae&@bvxtOyX>r!ykVW<}X)!pgSd+JmM0@$`PBw zIn0Gj9QSVNXRpuaXmUU0aWdsa=4bWi#dRO-6yXD(=G+QzKRB)*r>*dFsowJFEXJk{ zaq2{zwxf?p+Cg2Q@Vx`iZg4x~RLLh(3-x3{q62^JppQb%tAGwXuZ8?}{H4*#SGVLQ sg?u>B%0n-QNX1d5OS81-2j}V+;DQtUt@(+H1^gGlt6#eC{}h4$0ds;yg8%>k diff --git a/backend/API/bin/Debug/net8.0/Application.pdb b/backend/API/bin/Debug/net8.0/Application.pdb index 140769ac168ba4da9dfc8f34dac8dc9cb76e470e..81cca862d4d885e260a93b784ec6b2add6a50aa1 100644 GIT binary patch literal 24900 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 Z%@fuXzI|2>_q@UH90bZW;cE%e{{!UI;Ku*} delta 1724 zcmZ`(drVVT82`?_Exm0~p0%JjF9oDfV6+G#ixa8yfe=)Np!lG)byliuv_3GIeP9TV zG3G8fv$2W5G%JD#8WZ9)IKmPFTbzH)ZP~^cPF+N|Wy?rp$-dK@n*OsUzw+V7i8TfY8&kOH@jn&;;QKI;TMq!cvmp`j8OlB@Em{ zeux~$5J+Pf*ok}qc^G*DIgTZe!7@;T{3bH}5!jMSpd7IWVMW*xj#O%6;CLzn9z+wO z)xXBV89z&)T1S2G=fXYS4hV4xM+vOKs}i?K{HFnsp{C~vXnIci0Ro!Z>6rtX+Czdg zwNnJ!N3K-0So3({*)hvRJr?2k}K1nKptqg+7& zC-Aey1UU?&1N{-m)6om3r>7?tPuZ@c8={+#Bk0DXuzU=bNJg&6cD3SeI{od>H_|63?|*-Zi>yc-Yq?eMwXZPp)=ZzUTdn19G*<5TE^XS{xcH~OtGRcY zGHynEusNm4J(M#1gLcl{EqtQZ@tsZQRQK;KuN#s6cFyRDWxb{2Z=}S{uef78{5Z;M zFbgU^-Q_vv@p#_ie{UJ=?~3g^T9<3@n4P#Z^EmJH7<;mCz4?0Ruyek6T)Amot=U;y z=g2TS!gdjfLLINm&G!dS@K;A74vtsOOqD9j%Cc&zyw~90Zwj8hJU9R3vM%P2q_)US z#a4^WY_e~(IWR|kP>vKaiC4~B9$nVXHvF@%s=4&ynZA-e5sGr7BKmsx*69m>rX(G1 z5nhZ}C)0x7V*bjm!n1E*TkutLt!4X>ce0CSOSYb$Z~eS^{LwF!dG72{VJvAyVOird_KyWae0^S7jOWxmmfHdb7!DvhK51>-CwYeTEg)nfetgvvP9GdZ8!b zIHT7O@ric{)7>F_w0yr%oP1aKQM+xZAtg*xPCHE^T_#eZpF%VuCHqMx+GL_l%8Q;! zqDz8ES`}u=mdj;;4-o+s!wHLu1Xm34T_V0A;`@^L?h)S%@%=@5rKC4bPNGT0(i-A^ zAi>r-5RXlguLwjZF`SHb_e^j_En4CZk!!3e*q3YFWS0Te`q!I>_q>}LZM11Xmgw|tk z(gz#L5l0YFJPts+JecWx46zXr8b?$_Q-cqmy9buhJ{POSVzreF7YBF@Sd6#xJojq! PslaClVmN=S8a4a}_oHEl diff --git a/backend/API/bin/Debug/net8.0/Core.dll b/backend/API/bin/Debug/net8.0/Core.dll index 1de9e46d8f2c696c72f4fe22de639a5f112f217c..02b0d4689a3b78c659f41dd00b70416e72ee5f74 100644 GIT binary patch delta 2127 zcmbtVZERCj7=F(E=-RFHW9!py!WGH%g2@<+-LNCS$QJ6zfwfA$M5%?PXKGd;})Pp&xT9feSn+#QX{a=3Tt&% zuUIS^tZ|W^?`opKqk}_(iB$`MqkceG$xw^crTuJDIAFEw9U^Q^=&kPbvIV;bs-zqj-a=9aq?+$=UXqQDUv)*ToU?LC);J0Yr^L2>8?RAgF1k z2UoVQ&S)KVS79mEU74FWSt^orFCy{7msaqo>Jui}doUWJS=pX289d;TTg+UBV3*^XX5 z6GK&U7Zc7=Y@pg{t1fyvp0L$}^mOdC)dgcCZ)e6#0a~og~4Ooc~cK;{dX=6RTWpo0 z=fk5pRhHpa{CF;>oONuOA1^31?rh`|eoWck&Gd?K(pIPC9X8XuQGyv;9y7|6y7nt0wwN$cZZWb_twPe5d07eSyEv z;6jF<5kJwv3(xS?UPAOCrm#)nN@UhE)TzWh3VRhMi2_5!QtVJTPIT~6Ge$X%EB-FA z3TG5|D|}qxB=%z&X7SF zVIeBWtBD$Fa1;3=qK3ulYZW1C>|vPkC{e>w<_gpiHEwtjc|EZf#+bZ^bB|vsb6?C{ zv>o571gB?CRy(#^Nl(dw(K#R3e0qfcD&Qh*fR*)hTUR~hdiTKawA))_ieW1jSmB#r zbo$)Xvj;ohKlMyudr{@^^jM%(MB=H`K&m;`l5A>Aw#4FzczoeO5_ z<+pafXgwJmirc}@@>>p@wNs z+3VWcI8yu#a5VEFZ9x)E+;5UBhBy)&t#q5I8>t$wk(mkVen#ckM2xW}&YBdG(*+em PXmw4~{>mRkwxQrp9FAR0 delta 2212 zcmb7FYitx%7(I6$+jhI%?$T}_(Ar&EpoJE8`d$T7OtsWtsg_D0rgpavEP*DpC}Jbq z#)Q}a#&vioA@KqHfJCEIO~gPXF~&-QCK@Fqk|tW?GZ0Ad2cn+2bIZ%{!`Z#(p7WjW zyEF66Yjo-8(wAQ}#0-pu}VO#kPcDr`PZqpwSVLPQaE?5XnFQ@OpLP^UceOxQg z1-vXT4{kLq;~fEJb*gG3xQw~enhk^ z(~rNzxZy{Mo@LI$5xvv&-~@}ELrZsn$<8l;m&|{RWjEAk!cit0>39bXN2MWKs!wF5 z5BErQK&oskpn4q-5vPe=0%xS?6%R8sA^CRk*o~ywl1C*%V#_VAo8KZj?~-pPJo7t8 zu$DK;K-f8p9qHrfq8d^vPEW^kN)6J}@q$v*MlUbtPNgmzo2d4eo!BqwO zc<=%2bX9sKn-qX8)mVBBo5V}4ynE>daaef|(hK5k<+T|jn1v6N*JUI}DNng3+L@Yz zNu>sjQRLzqSIOOn@T;rj?nAgNmAm^8t|`yyXdZMv-ZLG|gHI~Aqxr~H9y^*uK8ls; zw6p;8l6-Hd3;d%0UrgRv@Uw6t^ZAqsoRs`|$^X0b zI=Rccxo-aLt7TvxUoAnR2Zcm0Dw3Q6uq4JLE|=IU@llCuCB}&Y1H=$EOB^G5kRr~; zQOQ3dhH+YQpTunvU&DS>VG>`O)d*u42@z2^(d4}(iktKvtQXx9Mdz1&w~ zZ}e3rojQ1&%&^2Ji5eTF^L1nJ(K2~!dw9wu1!R(+J>6?`X0-EH`Exq zG}c$d9~C|PAwXkU(a6;tckQaLTFFaO$3WBic~c1U(ktX A`Tzg` diff --git a/backend/API/bin/Debug/net8.0/Core.pdb b/backend/API/bin/Debug/net8.0/Core.pdb index f9e0e04b45d4a91439461ed24e5fc9df6d4b2912..fafb7760272a705d46dbc263074b79dd4d713027 100644 GIT binary patch delta 1109 zcmdmz^dWJANlXL_1A}rM1A_r80|SuBpd4IMl$n=a3}iBxz{Em>87zS80Fbz7OX4YnA-~wVnAePW(VUP!6Uo94(91BA<5GMg~CJ+|@ zaXApz0kJ7ijT;b$Z)RpX%UI6^G+my7oq-VuK|leDVSIKVUlE95d=4O635gGqS4QH4 zTrV#1! z!J+J()z$dbT^p)*&oO+h?7eKmeRlT)ldP2{y)LXS5CLcsQ&6YVfSqR$rsq3D!k$1pKtnh zquiXi*F`R@c6UztBx1DEKef4g@2~Iw{9gM{zREsT!zej9HQCJ2JkiuL(cI9;#K}GNe8>XIKmidZ zWh6ZsKoKdZ5>U=#;@9S85HB>HTyG#6F9o)h59|gOeuz)_!9EdSX9Z>(CSbx7VdCI{ SyFeJ-1rq2kkOjK{;s5}RC$={L delta 1227 zcmZuvZAepL6n;0aZtC5a+ceB{I;Z>4xx3liR7ho&f-7;_kMhqpXH89O`o}US_90P_ zwo)N0s0sSA1+MR{E^|N}1U_H@Ueeg?0UnvQb6@}T z?Xr>bnUlp$BW(*WSHAZ4B#F#W+YX2a)b~ynL}G#IU4H0_K=1Vt$O)(d`~WNikRbvI z0AfIjfkGyLQ%}Je3hlu;zz_K`tU-PV-~qG%&Wx||Uh{$~n2-YC!5{ww02N@J3n5SC za9mI0a9me&IIgF2IIe5Jb=@xpc*Z6VA}nNX3P=fD3s`T!hB^+%hI$Uib$GQK=W#uY z!*M;E!*SiX!R746IU52(!cdq}^UR?|>QAs~tiH3g{6=>1k$ij7NB-dIbcfD%voCxn zd+tK4<5GLHquJZq958xY=o%gslaOk#747akt!n==lkXZHza<$tcp|euZp9tWx!5<6 zJQluxJy7)O_q@#MtMz-`jivq;Xm8un|5%lNpyBA!R7vG(p)WjZVfGt8yuCMDqG7I; zMcys81=c2GD%@Vbuc>uQ=ZY$zT?#$54n1({;^&6Wep^iI+@^6>@*6Mjs(R5iAi5HI z67@+nY@P3Z_u1Ycf3|w+Tvos0{G+&Fm*MAJVdwIj(NWW{&~w36En_xWYdv<0nXy@H zCdTXbxqWp$55t(;b>>`;iOJ2gSgl@WyhHe1V^55NS4hRAkU*!hA%g^wiVYePBsw-2 zaga;$LPN%>WMwiDm1+_a*!F}Bd>15w=umf#D<~opXc0R>Oad)VXU)h2TEb3{5*J#k zB{dm&2wG;4;%_Y1^AL?FAzYV4A}F$WNX!b!L{OS}NWltvBE;L_EDDkyYa*ENB?Yl4 z;rI@?)O_$!@P#yFZDg95EJBOfMc4>p}|7LNMen{Vl`r diff --git a/backend/API/bin/Debug/net8.0/Infrastructure.dll b/backend/API/bin/Debug/net8.0/Infrastructure.dll index 4616341c99985b0d64e24642a9d77b2c56a857f8..8816b78ee6b878a0db42ed37539ce34fb652ff7f 100644 GIT binary patch literal 37376 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