From 1c12df5691f971f7946bf0972a0de9cf40f5111f Mon Sep 17 00:00:00 2001 From: NJ Date: Mon, 19 Feb 2024 07:58:13 +0300 Subject: [PATCH 01/15] Removed old data and created Event domain model --- build.gradle | 42 ++--- .../buckpal/BuckPalApplication.java | 13 -- .../buckpal/BuckPalConfiguration.java | 22 --- .../BuckPalConfigurationProperties.java | 12 -- .../adapter/in/web/SendMoneyController.java | 34 ---- .../out/persistence/AccountJpaEntity.java | 23 --- .../out/persistence/AccountMapper.java | 60 ------- .../AccountPersistenceAdapter.java | 68 -------- .../out/persistence/ActivityJpaEntity.java | 41 ----- .../out/persistence/ActivityRepository.java | 42 ----- .../out/persistence/NoOpAccountLock.java | 20 --- .../SpringDataAccountRepository.java | 6 - .../application/domain/model/Account.java | 118 -------------- .../application/domain/model/Activity.java | 74 --------- .../domain/model/ActivityWindow.java | 75 --------- .../application/domain/model/Money.java | 60 ------- .../service/GetAccountBalanceService.java | 20 --- .../service/MoneyTransferProperties.java | 18 --- .../domain/service/SendMoneyService.java | 77 --------- .../service/ThresholdExceededException.java | 11 -- .../port/in/GetAccountBalanceUseCase.java | 12 -- .../application/port/in/PositiveMoney.java | 26 --- .../port/in/PositiveMoneyValidator.java | 13 -- .../application/port/in/SendMoneyCommand.java | 25 --- .../application/port/in/SendMoneyUseCase.java | 7 - .../application/port/out/AccountLock.java | 11 -- .../application/port/out/LoadAccountPort.java | 11 -- .../port/out/UpdateAccountStatePort.java | 9 -- .../buckpal/common/PersistenceAdapter.java | 26 --- .../reflectoring/buckpal/common/UseCase.java | 26 --- .../buckpal/common/WebAdapter.java | 26 --- .../buckpal/common/validation/Validation.java | 26 --- src/main/java/nd/jar/springhexboot/App.java | 11 ++ .../adapter/in/web/EventDto.java | 10 ++ .../adapter/in/web/EventDtoMapper.java | 10 ++ .../adapter/in/web/EventsController.java | 32 ++++ .../adapter/in/web/MoneyController.java | 9 ++ .../adapter/out/persistence/EventEntity.java | 26 +++ .../out/persistence/EventEntityMapper.java | 11 ++ .../persistence/EventPersistenceAdapter.java | 30 ++++ .../out/persistence/EventRepository.java | 7 + .../application/domain/model/Event.java | 11 ++ .../domain/service/PushEventService.java | 13 ++ .../application/port/in/PushEventUseCase.java | 7 + .../application/port/out/GetEventsPort.java | 10 ++ .../application/port/out/PushEventPort.java | 10 ++ src/main/resources/application.yml | 22 ++- .../buckpal/BuckPalApplicationTests.java | 16 -- .../buckpal/DependencyRuleTests.java | 48 ------ .../buckpal/SendMoneySystemTest.java | 104 ------------ .../in/web/SendMoneyControllerTest.java | 40 ----- .../AccountPersistenceAdapterTest.java | 55 ------- .../application/domain/AccountTest.java | 101 ------------ .../domain/ActivityWindowTest.java | 70 --------- .../domain/service/SendMoneyServiceTest.java | 148 ------------------ .../port/in/SendMoneyCommandTest.java | 42 ----- .../buckpal/archunit/Adapters.java | 62 -------- .../buckpal/archunit/ApplicationLayer.java | 59 ------- .../buckpal/archunit/ArchitectureElement.java | 63 -------- .../archunit/HexagonalArchitecture.java | 59 ------- .../buckpal/common/AccountTestData.java | 48 ------ .../buckpal/common/ActivityTestData.java | 69 -------- .../java/nd/jar/springhexboot/TestApp.java | 11 ++ .../TestContainersConfiguration.java | 16 ++ .../buckpal/SendMoneySystemTest.sql | 26 --- .../AccountPersistenceAdapterTest.sql | 26 --- 66 files changed, 265 insertions(+), 2071 deletions(-) delete mode 100644 src/main/java/io/reflectoring/buckpal/BuckPalApplication.java delete mode 100644 src/main/java/io/reflectoring/buckpal/BuckPalConfiguration.java delete mode 100644 src/main/java/io/reflectoring/buckpal/BuckPalConfigurationProperties.java delete mode 100644 src/main/java/io/reflectoring/buckpal/adapter/in/web/SendMoneyController.java delete mode 100644 src/main/java/io/reflectoring/buckpal/adapter/out/persistence/AccountJpaEntity.java delete mode 100644 src/main/java/io/reflectoring/buckpal/adapter/out/persistence/AccountMapper.java delete mode 100644 src/main/java/io/reflectoring/buckpal/adapter/out/persistence/AccountPersistenceAdapter.java delete mode 100644 src/main/java/io/reflectoring/buckpal/adapter/out/persistence/ActivityJpaEntity.java delete mode 100644 src/main/java/io/reflectoring/buckpal/adapter/out/persistence/ActivityRepository.java delete mode 100644 src/main/java/io/reflectoring/buckpal/adapter/out/persistence/NoOpAccountLock.java delete mode 100644 src/main/java/io/reflectoring/buckpal/adapter/out/persistence/SpringDataAccountRepository.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/domain/model/Account.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/domain/model/Activity.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/domain/model/ActivityWindow.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/domain/model/Money.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/domain/service/GetAccountBalanceService.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/domain/service/MoneyTransferProperties.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/domain/service/SendMoneyService.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/domain/service/ThresholdExceededException.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/port/in/GetAccountBalanceUseCase.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/port/in/PositiveMoney.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/port/in/PositiveMoneyValidator.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/port/in/SendMoneyCommand.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/port/in/SendMoneyUseCase.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/port/out/AccountLock.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/port/out/LoadAccountPort.java delete mode 100644 src/main/java/io/reflectoring/buckpal/application/port/out/UpdateAccountStatePort.java delete mode 100644 src/main/java/io/reflectoring/buckpal/common/PersistenceAdapter.java delete mode 100644 src/main/java/io/reflectoring/buckpal/common/UseCase.java delete mode 100644 src/main/java/io/reflectoring/buckpal/common/WebAdapter.java delete mode 100644 src/main/java/io/reflectoring/buckpal/common/validation/Validation.java create mode 100644 src/main/java/nd/jar/springhexboot/App.java create mode 100644 src/main/java/nd/jar/springhexboot/adapter/in/web/EventDto.java create mode 100644 src/main/java/nd/jar/springhexboot/adapter/in/web/EventDtoMapper.java create mode 100644 src/main/java/nd/jar/springhexboot/adapter/in/web/EventsController.java create mode 100644 src/main/java/nd/jar/springhexboot/adapter/in/web/MoneyController.java create mode 100644 src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntity.java create mode 100644 src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntityMapper.java create mode 100644 src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventPersistenceAdapter.java create mode 100644 src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventRepository.java create mode 100644 src/main/java/nd/jar/springhexboot/application/domain/model/Event.java create mode 100644 src/main/java/nd/jar/springhexboot/application/domain/service/PushEventService.java create mode 100644 src/main/java/nd/jar/springhexboot/application/port/in/PushEventUseCase.java create mode 100644 src/main/java/nd/jar/springhexboot/application/port/out/GetEventsPort.java create mode 100644 src/main/java/nd/jar/springhexboot/application/port/out/PushEventPort.java delete mode 100644 src/test/java/io/reflectoring/buckpal/BuckPalApplicationTests.java delete mode 100644 src/test/java/io/reflectoring/buckpal/DependencyRuleTests.java delete mode 100644 src/test/java/io/reflectoring/buckpal/SendMoneySystemTest.java delete mode 100644 src/test/java/io/reflectoring/buckpal/adapter/in/web/SendMoneyControllerTest.java delete mode 100644 src/test/java/io/reflectoring/buckpal/adapter/out/persistence/AccountPersistenceAdapterTest.java delete mode 100644 src/test/java/io/reflectoring/buckpal/application/domain/AccountTest.java delete mode 100644 src/test/java/io/reflectoring/buckpal/application/domain/ActivityWindowTest.java delete mode 100644 src/test/java/io/reflectoring/buckpal/application/domain/service/SendMoneyServiceTest.java delete mode 100644 src/test/java/io/reflectoring/buckpal/application/port/in/SendMoneyCommandTest.java delete mode 100644 src/test/java/io/reflectoring/buckpal/archunit/Adapters.java delete mode 100644 src/test/java/io/reflectoring/buckpal/archunit/ApplicationLayer.java delete mode 100644 src/test/java/io/reflectoring/buckpal/archunit/ArchitectureElement.java delete mode 100644 src/test/java/io/reflectoring/buckpal/archunit/HexagonalArchitecture.java delete mode 100644 src/test/java/io/reflectoring/buckpal/common/AccountTestData.java delete mode 100644 src/test/java/io/reflectoring/buckpal/common/ActivityTestData.java create mode 100644 src/test/java/nd/jar/springhexboot/TestApp.java create mode 100644 src/test/java/nd/jar/springhexboot/TestContainersConfiguration.java delete mode 100644 src/test/resources/io/reflectoring/buckpal/SendMoneySystemTest.sql delete mode 100644 src/test/resources/io/reflectoring/buckpal/adapter/out/persistence/AccountPersistenceAdapterTest.sql diff --git a/build.gradle b/build.gradle index 4955faf..ae96543 100644 --- a/build.gradle +++ b/build.gradle @@ -1,40 +1,40 @@ plugins { - id 'org.springframework.boot' version '3.1.0' - id 'io.spring.dependency-management' version '1.0.11.RELEASE' + id 'org.springframework.boot' version '3.2.2' + id 'io.spring.dependency-management' version '1.1.4' + id 'java' } -group = 'io.reflectoring.buckpal' +group = 'nd.jar' version = '0.0.1-SNAPSHOT' - -apply plugin: 'java' -apply plugin: 'io.spring.dependency-management' -apply plugin: 'java-library' +sourceCompatibility = 17 repositories { mavenCentral() } -compileJava { - sourceCompatibility = 17 - targetCompatibility = 17 -} - dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation "org.springframework.boot:spring-boot-starter-data-jpa" +// implementation "org.springframework.boot:spring-boot-starter-security" + implementation 'org.springframework.boot:spring-boot-starter-validation' + + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0' + + implementation 'mysql:mysql-connector-java:8.0.33' + + compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' - implementation ('org.springframework.boot:spring-boot-starter-web') - implementation 'org.springframework.boot:spring-boot-starter-validation' - implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.mapstruct:mapstruct:1.5.5.Final' + annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final' - testImplementation 'org.springframework.boot:spring-boot-starter-test' - testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.9.3' - testImplementation 'org.mockito:mockito-junit-jupiter:5.3.1' - testImplementation 'com.tngtech.archunit:archunit:1.0.1' - testImplementation 'com.h2database:h2' - runtimeOnly 'com.h2database:h2' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testImplementation 'org.springframework.boot:spring-boot-testcontainers' + testImplementation "org.testcontainers:mysql:1.19.0" } diff --git a/src/main/java/io/reflectoring/buckpal/BuckPalApplication.java b/src/main/java/io/reflectoring/buckpal/BuckPalApplication.java deleted file mode 100644 index 3cd06ed..0000000 --- a/src/main/java/io/reflectoring/buckpal/BuckPalApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.reflectoring.buckpal; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class BuckPalApplication { - - public static void main(String[] args) { - SpringApplication.run(BuckPalApplication.class, args); - } - -} diff --git a/src/main/java/io/reflectoring/buckpal/BuckPalConfiguration.java b/src/main/java/io/reflectoring/buckpal/BuckPalConfiguration.java deleted file mode 100644 index a74f05d..0000000 --- a/src/main/java/io/reflectoring/buckpal/BuckPalConfiguration.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.reflectoring.buckpal; - -import io.reflectoring.buckpal.application.domain.service.MoneyTransferProperties; -import io.reflectoring.buckpal.application.domain.model.Money; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -@EnableConfigurationProperties(BuckPalConfigurationProperties.class) -public class BuckPalConfiguration { - - /** - * Adds a use-case-specific {@link MoneyTransferProperties} object to the application context. The properties - * are read from the Spring-Boot-specific {@link BuckPalConfigurationProperties} object. - */ - @Bean - public MoneyTransferProperties moneyTransferProperties(BuckPalConfigurationProperties buckPalConfigurationProperties){ - return new MoneyTransferProperties(Money.of(buckPalConfigurationProperties.getTransferThreshold())); - } - -} diff --git a/src/main/java/io/reflectoring/buckpal/BuckPalConfigurationProperties.java b/src/main/java/io/reflectoring/buckpal/BuckPalConfigurationProperties.java deleted file mode 100644 index 6da5b42..0000000 --- a/src/main/java/io/reflectoring/buckpal/BuckPalConfigurationProperties.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.reflectoring.buckpal; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; - -@Data -@ConfigurationProperties(prefix = "buckpal") -public class BuckPalConfigurationProperties { - - private long transferThreshold = Long.MAX_VALUE; - -} diff --git a/src/main/java/io/reflectoring/buckpal/adapter/in/web/SendMoneyController.java b/src/main/java/io/reflectoring/buckpal/adapter/in/web/SendMoneyController.java deleted file mode 100644 index 19a1b90..0000000 --- a/src/main/java/io/reflectoring/buckpal/adapter/in/web/SendMoneyController.java +++ /dev/null @@ -1,34 +0,0 @@ -package io.reflectoring.buckpal.adapter.in.web; - -import io.reflectoring.buckpal.application.port.in.SendMoneyUseCase; -import io.reflectoring.buckpal.application.port.in.SendMoneyCommand; -import io.reflectoring.buckpal.common.WebAdapter; -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; -import io.reflectoring.buckpal.application.domain.model.Money; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RestController; - -@WebAdapter -@RestController -@RequiredArgsConstructor -class SendMoneyController { - - private final SendMoneyUseCase sendMoneyUseCase; - - @PostMapping(path = "/accounts/send/{sourceAccountId}/{targetAccountId}/{amount}") - void sendMoney( - @PathVariable("sourceAccountId") Long sourceAccountId, - @PathVariable("targetAccountId") Long targetAccountId, - @PathVariable("amount") Long amount) { - - SendMoneyCommand command = new SendMoneyCommand( - new AccountId(sourceAccountId), - new AccountId(targetAccountId), - Money.of(amount)); - - sendMoneyUseCase.sendMoney(command); - } - -} diff --git a/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/AccountJpaEntity.java b/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/AccountJpaEntity.java deleted file mode 100644 index 7dfab52..0000000 --- a/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/AccountJpaEntity.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.reflectoring.buckpal.adapter.out.persistence; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Entity -@Table(name = "account") -@Data -@AllArgsConstructor -@NoArgsConstructor -class AccountJpaEntity { - - @Id - @GeneratedValue - private Long id; - -} diff --git a/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/AccountMapper.java b/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/AccountMapper.java deleted file mode 100644 index 5d2ebf5..0000000 --- a/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/AccountMapper.java +++ /dev/null @@ -1,60 +0,0 @@ -package io.reflectoring.buckpal.adapter.out.persistence; - -import java.util.ArrayList; -import java.util.List; - -import io.reflectoring.buckpal.application.domain.model.Account; -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; -import io.reflectoring.buckpal.application.domain.model.Activity; -import io.reflectoring.buckpal.application.domain.model.Activity.ActivityId; -import io.reflectoring.buckpal.application.domain.model.ActivityWindow; -import io.reflectoring.buckpal.application.domain.model.Money; -import org.springframework.stereotype.Component; - -@Component -class AccountMapper { - - Account mapToDomainEntity( - AccountJpaEntity account, - List activities, - Long withdrawalBalance, - Long depositBalance) { - - Money baselineBalance = Money.subtract( - Money.of(depositBalance), - Money.of(withdrawalBalance)); - - return Account.withId( - new AccountId(account.getId()), - baselineBalance, - mapToActivityWindow(activities)); - - } - - ActivityWindow mapToActivityWindow(List activities) { - List mappedActivities = new ArrayList<>(); - - for (ActivityJpaEntity activity : activities) { - mappedActivities.add(new Activity( - new ActivityId(activity.getId()), - new AccountId(activity.getOwnerAccountId()), - new AccountId(activity.getSourceAccountId()), - new AccountId(activity.getTargetAccountId()), - activity.getTimestamp(), - Money.of(activity.getAmount()))); - } - - return new ActivityWindow(mappedActivities); - } - - ActivityJpaEntity mapToJpaEntity(Activity activity) { - return new ActivityJpaEntity( - activity.getId() == null ? null : activity.getId().getValue(), - activity.getTimestamp(), - activity.getOwnerAccountId().getValue(), - activity.getSourceAccountId().getValue(), - activity.getTargetAccountId().getValue(), - activity.getMoney().getAmount().longValue()); - } - -} diff --git a/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/AccountPersistenceAdapter.java b/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/AccountPersistenceAdapter.java deleted file mode 100644 index 26b427b..0000000 --- a/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/AccountPersistenceAdapter.java +++ /dev/null @@ -1,68 +0,0 @@ -package io.reflectoring.buckpal.adapter.out.persistence; - -import io.reflectoring.buckpal.application.domain.model.Account; -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; -import io.reflectoring.buckpal.application.domain.model.Activity; -import io.reflectoring.buckpal.application.port.out.LoadAccountPort; -import io.reflectoring.buckpal.application.port.out.UpdateAccountStatePort; -import io.reflectoring.buckpal.common.PersistenceAdapter; -import lombok.RequiredArgsConstructor; - -import jakarta.persistence.EntityNotFoundException; -import java.time.LocalDateTime; -import java.util.List; - -@RequiredArgsConstructor -@PersistenceAdapter -class AccountPersistenceAdapter implements - LoadAccountPort, - UpdateAccountStatePort { - - private final SpringDataAccountRepository accountRepository; - private final ActivityRepository activityRepository; - private final AccountMapper accountMapper; - - @Override - public Account loadAccount( - AccountId accountId, - LocalDateTime baselineDate) { - - AccountJpaEntity account = - accountRepository.findById(accountId.getValue()) - .orElseThrow(EntityNotFoundException::new); - - List activities = - activityRepository.findByOwnerSince( - accountId.getValue(), - baselineDate); - - Long withdrawalBalance = activityRepository - .getWithdrawalBalanceUntil( - accountId.getValue(), - baselineDate) - .orElse(0L); - - Long depositBalance = activityRepository - .getDepositBalanceUntil( - accountId.getValue(), - baselineDate) - .orElse(0L); - - return accountMapper.mapToDomainEntity( - account, - activities, - withdrawalBalance, - depositBalance); - - } - - @Override - public void updateActivities(Account account) { - for (Activity activity : account.getActivityWindow().getActivities()) { - if (activity.getId() == null) { - activityRepository.save(accountMapper.mapToJpaEntity(activity)); - } - } - } - -} diff --git a/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/ActivityJpaEntity.java b/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/ActivityJpaEntity.java deleted file mode 100644 index 89c0551..0000000 --- a/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/ActivityJpaEntity.java +++ /dev/null @@ -1,41 +0,0 @@ -package io.reflectoring.buckpal.adapter.out.persistence; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import java.time.LocalDateTime; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Entity -@Table(name = "activity") -@Data -@AllArgsConstructor -@NoArgsConstructor -class ActivityJpaEntity { - - @Id - @GeneratedValue - private Long id; - - @Column - private LocalDateTime timestamp; - - @Column - private long ownerAccountId; - - @Column - private long sourceAccountId; - - @Column - private long targetAccountId; - - @Column - private long amount; - -} diff --git a/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/ActivityRepository.java b/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/ActivityRepository.java deleted file mode 100644 index 82abaad..0000000 --- a/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/ActivityRepository.java +++ /dev/null @@ -1,42 +0,0 @@ -package io.reflectoring.buckpal.adapter.out.persistence; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.Optional; - -interface ActivityRepository extends JpaRepository { - - @Query(""" - select a from ActivityJpaEntity a - where a.ownerAccountId = :ownerAccountId - and a.timestamp >= :since - """) - List findByOwnerSince( - @Param("ownerAccountId") long ownerAccountId, - @Param("since") LocalDateTime since); - - @Query(""" - select sum(a.amount) from ActivityJpaEntity a - where a.targetAccountId = :accountId - and a.ownerAccountId = :accountId - and a.timestamp < :until - """) - Optional getDepositBalanceUntil( - @Param("accountId") long accountId, - @Param("until") LocalDateTime until); - - @Query(""" - select sum(a.amount) from ActivityJpaEntity a - where a.sourceAccountId = :accountId - and a.ownerAccountId = :accountId - and a.timestamp < :until - """) - Optional getWithdrawalBalanceUntil( - @Param("accountId") long accountId, - @Param("until") LocalDateTime until); - -} diff --git a/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/NoOpAccountLock.java b/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/NoOpAccountLock.java deleted file mode 100644 index 136f816..0000000 --- a/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/NoOpAccountLock.java +++ /dev/null @@ -1,20 +0,0 @@ -package io.reflectoring.buckpal.adapter.out.persistence; - -import io.reflectoring.buckpal.application.port.out.AccountLock; -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; -import org.springframework.stereotype.Component; - -@Component -class NoOpAccountLock implements AccountLock { - - @Override - public void lockAccount(AccountId accountId) { - // do nothing - } - - @Override - public void releaseAccount(AccountId accountId) { - // do nothing - } - -} diff --git a/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/SpringDataAccountRepository.java b/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/SpringDataAccountRepository.java deleted file mode 100644 index ae15293..0000000 --- a/src/main/java/io/reflectoring/buckpal/adapter/out/persistence/SpringDataAccountRepository.java +++ /dev/null @@ -1,6 +0,0 @@ -package io.reflectoring.buckpal.adapter.out.persistence; - -import org.springframework.data.jpa.repository.JpaRepository; - -interface SpringDataAccountRepository extends JpaRepository { -} diff --git a/src/main/java/io/reflectoring/buckpal/application/domain/model/Account.java b/src/main/java/io/reflectoring/buckpal/application/domain/model/Account.java deleted file mode 100644 index 7044ac4..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/domain/model/Account.java +++ /dev/null @@ -1,118 +0,0 @@ -package io.reflectoring.buckpal.application.domain.model; - -import java.time.LocalDateTime; -import java.util.Optional; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Value; - -/** - * An account that holds a certain amount of money. An {@link Account} object only - * contains a window of the latest account activities. The total balance of the account is - * the sum of a baseline balance that was valid before the first activity in the - * window and the sum of the activity values. - */ -@AllArgsConstructor(access = AccessLevel.PRIVATE) -public class Account { - - /** - * The unique ID of the account. - */ - private final AccountId id; - - /** - * The baseline balance of the account. This was the balance of the account before the first - * activity in the activityWindow. - */ - @Getter private final Money baselineBalance; - - /** - * The window of latest activities on this account. - */ - @Getter private final ActivityWindow activityWindow; - - /** - * Creates an {@link Account} entity without an ID. Use to create a new entity that is not yet - * persisted. - */ - public static Account withoutId( - Money baselineBalance, - ActivityWindow activityWindow) { - return new Account(null, baselineBalance, activityWindow); - } - - /** - * Creates an {@link Account} entity with an ID. Use to reconstitute a persisted entity. - */ - public static Account withId( - AccountId accountId, - Money baselineBalance, - ActivityWindow activityWindow) { - return new Account(accountId, baselineBalance, activityWindow); - } - - public Optional getId(){ - return Optional.ofNullable(this.id); - } - - /** - * Calculates the total balance of the account by adding the activity values to the baseline balance. - */ - public Money calculateBalance() { - return Money.add( - this.baselineBalance, - this.activityWindow.calculateBalance(this.id)); - } - - /** - * Tries to withdraw a certain amount of money from this account. - * If successful, creates a new activity with a negative value. - * @return true if the withdrawal was successful, false if not. - */ - public boolean withdraw(Money money, AccountId targetAccountId) { - - if (!mayWithdraw(money)) { - return false; - } - - Activity withdrawal = new Activity( - this.id, - this.id, - targetAccountId, - LocalDateTime.now(), - money); - this.activityWindow.addActivity(withdrawal); - return true; - } - - private boolean mayWithdraw(Money money) { - return Money.add( - this.calculateBalance(), - money.negate()) - .isPositiveOrZero(); - } - - /** - * Tries to deposit a certain amount of money to this account. - * If sucessful, creates a new activity with a positive value. - * @return true if the deposit was successful, false if not. - */ - public boolean deposit(Money money, AccountId sourceAccountId) { - Activity deposit = new Activity( - this.id, - sourceAccountId, - this.id, - LocalDateTime.now(), - money); - this.activityWindow.addActivity(deposit); - return true; - } - - @Value - public static class AccountId { - private Long value; - } - -} diff --git a/src/main/java/io/reflectoring/buckpal/application/domain/model/Activity.java b/src/main/java/io/reflectoring/buckpal/application/domain/model/Activity.java deleted file mode 100644 index 8c70e9f..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/domain/model/Activity.java +++ /dev/null @@ -1,74 +0,0 @@ -package io.reflectoring.buckpal.application.domain.model; - -import java.time.LocalDateTime; - -import lombok.Getter; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; -import lombok.Value; - -/** - * A money transfer activity between {@link Account}s. - */ -@Value -@RequiredArgsConstructor -public class Activity { - - @Getter - private ActivityId id; - - /** - * The account that owns this activity. - */ - @Getter - @NonNull - private final Account.AccountId ownerAccountId; - - /** - * The debited account. - */ - @Getter - @NonNull - private final Account.AccountId sourceAccountId; - - /** - * The credited account. - */ - @Getter - @NonNull - private final Account.AccountId targetAccountId; - - /** - * The timestamp of the activity. - */ - @Getter - @NonNull - private final LocalDateTime timestamp; - - /** - * The money that was transferred between the accounts. - */ - @Getter - @NonNull - private final Money money; - - public Activity( - @NonNull Account.AccountId ownerAccountId, - @NonNull Account.AccountId sourceAccountId, - @NonNull Account.AccountId targetAccountId, - @NonNull LocalDateTime timestamp, - @NonNull Money money) { - this.id = null; - this.ownerAccountId = ownerAccountId; - this.sourceAccountId = sourceAccountId; - this.targetAccountId = targetAccountId; - this.timestamp = timestamp; - this.money = money; - } - - @Value - public static class ActivityId { - private final Long value; - } - -} diff --git a/src/main/java/io/reflectoring/buckpal/application/domain/model/ActivityWindow.java b/src/main/java/io/reflectoring/buckpal/application/domain/model/ActivityWindow.java deleted file mode 100644 index 374b9cc..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/domain/model/ActivityWindow.java +++ /dev/null @@ -1,75 +0,0 @@ -package io.reflectoring.buckpal.application.domain.model; - -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import lombok.NonNull; - -/** - * A window of account activities. - */ -public class ActivityWindow { - - /** - * The list of account activities within this window. - */ - private List activities; - - /** - * The timestamp of the first activity within this window. - */ - public LocalDateTime getStartTimestamp() { - return activities.stream() - .min(Comparator.comparing(Activity::getTimestamp)) - .orElseThrow(IllegalStateException::new) - .getTimestamp(); - } - - /** - * The timestamp of the last activity within this window. - * @return - */ - public LocalDateTime getEndTimestamp() { - return activities.stream() - .max(Comparator.comparing(Activity::getTimestamp)) - .orElseThrow(IllegalStateException::new) - .getTimestamp(); - } - - /** - * Calculates the balance by summing up the values of all activities within this window. - */ - public Money calculateBalance(Account.AccountId accountId) { - Money depositBalance = activities.stream() - .filter(a -> a.getTargetAccountId().equals(accountId)) - .map(Activity::getMoney) - .reduce(Money.ZERO, Money::add); - - Money withdrawalBalance = activities.stream() - .filter(a -> a.getSourceAccountId().equals(accountId)) - .map(Activity::getMoney) - .reduce(Money.ZERO, Money::add); - - return Money.add(depositBalance, withdrawalBalance.negate()); - } - - public ActivityWindow(@NonNull List activities) { - this.activities = activities; - } - - public ActivityWindow(@NonNull Activity... activities) { - this.activities = new ArrayList<>(Arrays.asList(activities)); - } - - public List getActivities() { - return Collections.unmodifiableList(this.activities); - } - - public void addActivity(Activity activity) { - this.activities.add(activity); - } -} diff --git a/src/main/java/io/reflectoring/buckpal/application/domain/model/Money.java b/src/main/java/io/reflectoring/buckpal/application/domain/model/Money.java deleted file mode 100644 index 736384a..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/domain/model/Money.java +++ /dev/null @@ -1,60 +0,0 @@ -package io.reflectoring.buckpal.application.domain.model; - -import java.math.BigInteger; - -import lombok.NonNull; -import lombok.Value; - -@Value -public class Money { - - public static Money ZERO = Money.of(0L); - - @NonNull - private final BigInteger amount; - - public boolean isPositiveOrZero(){ - return this.amount.compareTo(BigInteger.ZERO) >= 0; - } - - public boolean isNegative(){ - return this.amount.compareTo(BigInteger.ZERO) < 0; - } - - public boolean isPositive(){ - return this.amount.compareTo(BigInteger.ZERO) > 0; - } - - public boolean isGreaterThanOrEqualTo(Money money){ - return this.amount.compareTo(money.amount) >= 0; - } - - public boolean isGreaterThan(Money money){ - return this.amount.compareTo(money.amount) >= 1; - } - - public static Money of(long value) { - return new Money(BigInteger.valueOf(value)); - } - - public static Money add(Money a, Money b) { - return new Money(a.amount.add(b.amount)); - } - - public Money minus(Money money){ - return new Money(this.amount.subtract(money.amount)); - } - - public Money plus(Money money){ - return new Money(this.amount.add(money.amount)); - } - - public static Money subtract(Money a, Money b) { - return new Money(a.amount.subtract(b.amount)); - } - - public Money negate(){ - return new Money(this.amount.negate()); - } - -} diff --git a/src/main/java/io/reflectoring/buckpal/application/domain/service/GetAccountBalanceService.java b/src/main/java/io/reflectoring/buckpal/application/domain/service/GetAccountBalanceService.java deleted file mode 100644 index 6a48ff5..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/domain/service/GetAccountBalanceService.java +++ /dev/null @@ -1,20 +0,0 @@ -package io.reflectoring.buckpal.application.domain.service; - -import io.reflectoring.buckpal.application.domain.model.Money; -import io.reflectoring.buckpal.application.port.in.GetAccountBalanceUseCase; -import io.reflectoring.buckpal.application.port.out.LoadAccountPort; -import lombok.RequiredArgsConstructor; - -import java.time.LocalDateTime; - -@RequiredArgsConstructor -class GetAccountBalanceService implements GetAccountBalanceUseCase { - - private final LoadAccountPort loadAccountPort; - - @Override - public Money getAccountBalance(GetAccountBalanceQuery query) { - return loadAccountPort.loadAccount(query.accountId(), LocalDateTime.now()) - .calculateBalance(); - } -} diff --git a/src/main/java/io/reflectoring/buckpal/application/domain/service/MoneyTransferProperties.java b/src/main/java/io/reflectoring/buckpal/application/domain/service/MoneyTransferProperties.java deleted file mode 100644 index 2a4f7cd..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/domain/service/MoneyTransferProperties.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.reflectoring.buckpal.application.domain.service; - -import io.reflectoring.buckpal.application.domain.model.Money; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * Configuration properties for money transfer use cases. - */ -@Data -@AllArgsConstructor -@NoArgsConstructor -public class MoneyTransferProperties { - - private Money maximumTransferThreshold = Money.of(1_000_000L); - -} diff --git a/src/main/java/io/reflectoring/buckpal/application/domain/service/SendMoneyService.java b/src/main/java/io/reflectoring/buckpal/application/domain/service/SendMoneyService.java deleted file mode 100644 index a97f48f..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/domain/service/SendMoneyService.java +++ /dev/null @@ -1,77 +0,0 @@ -package io.reflectoring.buckpal.application.domain.service; - -import io.reflectoring.buckpal.application.port.in.SendMoneyCommand; -import io.reflectoring.buckpal.application.port.in.SendMoneyUseCase; -import io.reflectoring.buckpal.application.port.out.AccountLock; -import io.reflectoring.buckpal.application.port.out.LoadAccountPort; -import io.reflectoring.buckpal.application.port.out.UpdateAccountStatePort; -import io.reflectoring.buckpal.common.UseCase; -import io.reflectoring.buckpal.application.domain.model.Account; -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; -import lombok.RequiredArgsConstructor; - -import jakarta.transaction.Transactional; -import java.time.LocalDateTime; - -@RequiredArgsConstructor -@UseCase -@Transactional -public class SendMoneyService implements SendMoneyUseCase { - - private final LoadAccountPort loadAccountPort; - private final AccountLock accountLock; - private final UpdateAccountStatePort updateAccountStatePort; - private final MoneyTransferProperties moneyTransferProperties; - - @Override - public boolean sendMoney(SendMoneyCommand command) { - - checkThreshold(command); - - LocalDateTime baselineDate = LocalDateTime.now().minusDays(10); - - Account sourceAccount = loadAccountPort.loadAccount( - command.sourceAccountId(), - baselineDate); - - Account targetAccount = loadAccountPort.loadAccount( - command.targetAccountId(), - baselineDate); - - AccountId sourceAccountId = sourceAccount.getId() - .orElseThrow(() -> new IllegalStateException("expected source account ID not to be empty")); - AccountId targetAccountId = targetAccount.getId() - .orElseThrow(() -> new IllegalStateException("expected target account ID not to be empty")); - - accountLock.lockAccount(sourceAccountId); - if (!sourceAccount.withdraw(command.money(), targetAccountId)) { - accountLock.releaseAccount(sourceAccountId); - return false; - } - - accountLock.lockAccount(targetAccountId); - if (!targetAccount.deposit(command.money(), sourceAccountId)) { - accountLock.releaseAccount(sourceAccountId); - accountLock.releaseAccount(targetAccountId); - return false; - } - - updateAccountStatePort.updateActivities(sourceAccount); - updateAccountStatePort.updateActivities(targetAccount); - - accountLock.releaseAccount(sourceAccountId); - accountLock.releaseAccount(targetAccountId); - return true; - } - - private void checkThreshold(SendMoneyCommand command) { - if(command.money().isGreaterThan(moneyTransferProperties.getMaximumTransferThreshold())){ - throw new ThresholdExceededException(moneyTransferProperties.getMaximumTransferThreshold(), command.money()); - } - } - -} - - - - diff --git a/src/main/java/io/reflectoring/buckpal/application/domain/service/ThresholdExceededException.java b/src/main/java/io/reflectoring/buckpal/application/domain/service/ThresholdExceededException.java deleted file mode 100644 index 8c21a17..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/domain/service/ThresholdExceededException.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.reflectoring.buckpal.application.domain.service; - -import io.reflectoring.buckpal.application.domain.model.Money; - -public class ThresholdExceededException extends RuntimeException { - - public ThresholdExceededException(Money threshold, Money actual) { - super(String.format("Maximum threshold for transferring money exceeded: tried to transfer %s but threshold is %s!", actual, threshold)); - } - -} diff --git a/src/main/java/io/reflectoring/buckpal/application/port/in/GetAccountBalanceUseCase.java b/src/main/java/io/reflectoring/buckpal/application/port/in/GetAccountBalanceUseCase.java deleted file mode 100644 index d44f828..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/port/in/GetAccountBalanceUseCase.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.reflectoring.buckpal.application.port.in; - -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; -import io.reflectoring.buckpal.application.domain.model.Money; - -public interface GetAccountBalanceUseCase { - - Money getAccountBalance(GetAccountBalanceQuery query); - - record GetAccountBalanceQuery(AccountId accountId) { - } -} diff --git a/src/main/java/io/reflectoring/buckpal/application/port/in/PositiveMoney.java b/src/main/java/io/reflectoring/buckpal/application/port/in/PositiveMoney.java deleted file mode 100644 index aaf8136..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/port/in/PositiveMoney.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.reflectoring.buckpal.application.port.in; - -import io.reflectoring.buckpal.application.domain.model.Money; -import jakarta.validation.Constraint; - -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -@Target({ FIELD }) -@Retention(RUNTIME) -@Constraint(validatedBy = PositiveMoneyValidator.class) -@Documented -public @interface PositiveMoney { - - String message() default "must be positive" + - " found: ${validatedValue}"; - - Class[] groups() default {}; - - Class[] payload() default {}; - -} diff --git a/src/main/java/io/reflectoring/buckpal/application/port/in/PositiveMoneyValidator.java b/src/main/java/io/reflectoring/buckpal/application/port/in/PositiveMoneyValidator.java deleted file mode 100644 index 80378d6..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/port/in/PositiveMoneyValidator.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.reflectoring.buckpal.application.port.in; - -import io.reflectoring.buckpal.application.domain.model.Money; -import jakarta.validation.ConstraintValidator; -import jakarta.validation.ConstraintValidatorContext; - -public class PositiveMoneyValidator implements ConstraintValidator { - - @Override - public boolean isValid(Money value, ConstraintValidatorContext context) { - return value.isPositive(); - } -} diff --git a/src/main/java/io/reflectoring/buckpal/application/port/in/SendMoneyCommand.java b/src/main/java/io/reflectoring/buckpal/application/port/in/SendMoneyCommand.java deleted file mode 100644 index e9dcd12..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/port/in/SendMoneyCommand.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.reflectoring.buckpal.application.port.in; - -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; -import io.reflectoring.buckpal.application.domain.model.Money; -import jakarta.validation.constraints.NotNull; - -import static io.reflectoring.buckpal.common.validation.Validation.validate; - -public record SendMoneyCommand( - @NotNull AccountId sourceAccountId, - @NotNull AccountId targetAccountId, - @NotNull @PositiveMoney Money money -) { - - public SendMoneyCommand( - AccountId sourceAccountId, - AccountId targetAccountId, - Money money) { - this.sourceAccountId = sourceAccountId; - this.targetAccountId = targetAccountId; - this.money = money; - validate(this); - } - -} diff --git a/src/main/java/io/reflectoring/buckpal/application/port/in/SendMoneyUseCase.java b/src/main/java/io/reflectoring/buckpal/application/port/in/SendMoneyUseCase.java deleted file mode 100644 index 3d86aee..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/port/in/SendMoneyUseCase.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.reflectoring.buckpal.application.port.in; - -public interface SendMoneyUseCase { - - boolean sendMoney(SendMoneyCommand command); - -} diff --git a/src/main/java/io/reflectoring/buckpal/application/port/out/AccountLock.java b/src/main/java/io/reflectoring/buckpal/application/port/out/AccountLock.java deleted file mode 100644 index fa1772a..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/port/out/AccountLock.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.reflectoring.buckpal.application.port.out; - -import io.reflectoring.buckpal.application.domain.model.Account; - -public interface AccountLock { - - void lockAccount(Account.AccountId accountId); - - void releaseAccount(Account.AccountId accountId); - -} diff --git a/src/main/java/io/reflectoring/buckpal/application/port/out/LoadAccountPort.java b/src/main/java/io/reflectoring/buckpal/application/port/out/LoadAccountPort.java deleted file mode 100644 index 3d1acc6..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/port/out/LoadAccountPort.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.reflectoring.buckpal.application.port.out; - -import java.time.LocalDateTime; - -import io.reflectoring.buckpal.application.domain.model.Account; -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; - -public interface LoadAccountPort { - - Account loadAccount(AccountId accountId, LocalDateTime baselineDate); -} diff --git a/src/main/java/io/reflectoring/buckpal/application/port/out/UpdateAccountStatePort.java b/src/main/java/io/reflectoring/buckpal/application/port/out/UpdateAccountStatePort.java deleted file mode 100644 index ce22b2e..0000000 --- a/src/main/java/io/reflectoring/buckpal/application/port/out/UpdateAccountStatePort.java +++ /dev/null @@ -1,9 +0,0 @@ -package io.reflectoring.buckpal.application.port.out; - -import io.reflectoring.buckpal.application.domain.model.Account; - -public interface UpdateAccountStatePort { - - void updateActivities(Account account); - -} diff --git a/src/main/java/io/reflectoring/buckpal/common/PersistenceAdapter.java b/src/main/java/io/reflectoring/buckpal/common/PersistenceAdapter.java deleted file mode 100644 index d76fdec..0000000 --- a/src/main/java/io/reflectoring/buckpal/common/PersistenceAdapter.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.reflectoring.buckpal.common; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import org.springframework.core.annotation.AliasFor; -import org.springframework.stereotype.Component; - -@Target({ElementType.TYPE}) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Component -public @interface PersistenceAdapter { - - /** - * The value may indicate a suggestion for a logical component name, - * to be turned into a Spring bean in case of an autodetected component. - * @return the suggested component name, if any (or empty String otherwise) - */ - @AliasFor(annotation = Component.class) - String value() default ""; - -} diff --git a/src/main/java/io/reflectoring/buckpal/common/UseCase.java b/src/main/java/io/reflectoring/buckpal/common/UseCase.java deleted file mode 100644 index eca4e05..0000000 --- a/src/main/java/io/reflectoring/buckpal/common/UseCase.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.reflectoring.buckpal.common; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import org.springframework.core.annotation.AliasFor; -import org.springframework.stereotype.Component; - -@Target({ElementType.TYPE}) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Component -public @interface UseCase { - - /** - * The value may indicate a suggestion for a logical component name, - * to be turned into a Spring bean in case of an autodetected component. - * @return the suggested component name, if any (or empty String otherwise) - */ - @AliasFor(annotation = Component.class) - String value() default ""; - -} diff --git a/src/main/java/io/reflectoring/buckpal/common/WebAdapter.java b/src/main/java/io/reflectoring/buckpal/common/WebAdapter.java deleted file mode 100644 index db25ec4..0000000 --- a/src/main/java/io/reflectoring/buckpal/common/WebAdapter.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.reflectoring.buckpal.common; - -import org.springframework.core.annotation.AliasFor; -import org.springframework.stereotype.Component; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Target({ElementType.TYPE}) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Component -public @interface WebAdapter { - - /** - * The value may indicate a suggestion for a logical component name, - * to be turned into a Spring bean in case of an autodetected component. - * @return the suggested component name, if any (or empty String otherwise) - */ - @AliasFor(annotation = Component.class) - String value() default ""; - -} diff --git a/src/main/java/io/reflectoring/buckpal/common/validation/Validation.java b/src/main/java/io/reflectoring/buckpal/common/validation/Validation.java deleted file mode 100644 index 6831775..0000000 --- a/src/main/java/io/reflectoring/buckpal/common/validation/Validation.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.reflectoring.buckpal.common.validation; - -import jakarta.validation.ConstraintViolation; -import jakarta.validation.ConstraintViolationException; -import jakarta.validation.Validator; -import java.util.Set; - -import static jakarta.validation.Validation.buildDefaultValidatorFactory; - -public class Validation { - - // Your IDE may complain that the ValidatorFactory needs to be closed, but if we do that here, - // we break the contract of ValidatorFactory#close. - private final static Validator validator = - buildDefaultValidatorFactory().getValidator(); - - /** - * Evaluates all Bean Validation annotations on the subject. - */ - public static void validate(T subject) { - Set> violations = validator.validate(subject); - if (!violations.isEmpty()) { - throw new ConstraintViolationException(violations); - } - } -} diff --git a/src/main/java/nd/jar/springhexboot/App.java b/src/main/java/nd/jar/springhexboot/App.java new file mode 100644 index 0000000..a68e4f4 --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/App.java @@ -0,0 +1,11 @@ +package nd.jar.springhexboot; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class App { + public static void main(String[] args) { + SpringApplication.run(App.class, args); + } +} diff --git a/src/main/java/nd/jar/springhexboot/adapter/in/web/EventDto.java b/src/main/java/nd/jar/springhexboot/adapter/in/web/EventDto.java new file mode 100644 index 0000000..45efc72 --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/adapter/in/web/EventDto.java @@ -0,0 +1,10 @@ +package nd.jar.springhexboot.adapter.in.web; + +import java.math.BigDecimal; + + +public record EventDto( + String name, + String description, + String from +){} \ No newline at end of file diff --git a/src/main/java/nd/jar/springhexboot/adapter/in/web/EventDtoMapper.java b/src/main/java/nd/jar/springhexboot/adapter/in/web/EventDtoMapper.java new file mode 100644 index 0000000..345287e --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/adapter/in/web/EventDtoMapper.java @@ -0,0 +1,10 @@ +package nd.jar.springhexboot.adapter.in.web; + +import nd.jar.springhexboot.application.domain.model.Event; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring") +public interface EventDtoMapper { + EventDto toDto(Event domain); + Event toDomainModel(EventDto dto); +} diff --git a/src/main/java/nd/jar/springhexboot/adapter/in/web/EventsController.java b/src/main/java/nd/jar/springhexboot/adapter/in/web/EventsController.java new file mode 100644 index 0000000..c9aa687 --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/adapter/in/web/EventsController.java @@ -0,0 +1,32 @@ +package nd.jar.springhexboot.adapter.in.web; + +import lombok.RequiredArgsConstructor; +import nd.jar.springhexboot.application.port.in.PushEventUseCase; +import nd.jar.springhexboot.application.port.out.GetEventsPort; +import org.springframework.data.domain.Pageable; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.stream.Collectors; + +@RestController("/events") +@RequiredArgsConstructor +public class EventsController { + private final GetEventsPort getAccountsPort; + private final EventDtoMapper eventDtoMapper; + private final PushEventUseCase pushEventUseCase; + + @GetMapping + List find(Pageable pageable) { + return getAccountsPort.getAll(pageable).stream().map(eventDtoMapper::toDto).collect(Collectors.toList()); + } + + @PostMapping + ResponseEntity push(EventDto eventDto) { + pushEventUseCase.push(eventDtoMapper.toDomainModel(eventDto)); + return ResponseEntity.ok().build(); + } +} diff --git a/src/main/java/nd/jar/springhexboot/adapter/in/web/MoneyController.java b/src/main/java/nd/jar/springhexboot/adapter/in/web/MoneyController.java new file mode 100644 index 0000000..9591fcc --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/adapter/in/web/MoneyController.java @@ -0,0 +1,9 @@ +package nd.jar.springhexboot.adapter.in.web; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class MoneyController { + +} diff --git a/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntity.java b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntity.java new file mode 100644 index 0000000..533a9c7 --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntity.java @@ -0,0 +1,26 @@ +package nd.jar.springhexboot.adapter.out.persistence; + +import jakarta.persistence.*; +import lombok.*; + +import java.util.UUID; + +@Entity +@Table +@Getter +@Setter +@ToString +@RequiredArgsConstructor +public class EventEntity { + @Id + private Long id; + + private String name; + + private String description; + + @Column(name = "`from`") + private String from; + + +} diff --git a/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntityMapper.java b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntityMapper.java new file mode 100644 index 0000000..024df38 --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntityMapper.java @@ -0,0 +1,11 @@ +package nd.jar.springhexboot.adapter.out.persistence; + +import nd.jar.springhexboot.application.domain.model.Event; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring") +public interface EventEntityMapper { + Event toDomainModel(EventEntity entity); + EventEntity toEntity(Event domainModel); + +} diff --git a/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventPersistenceAdapter.java b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventPersistenceAdapter.java new file mode 100644 index 0000000..5ebedc4 --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventPersistenceAdapter.java @@ -0,0 +1,30 @@ +package nd.jar.springhexboot.adapter.out.persistence; + +import lombok.RequiredArgsConstructor; +import nd.jar.springhexboot.application.domain.model.Event; +import nd.jar.springhexboot.application.port.out.GetEventsPort; +import nd.jar.springhexboot.application.port.out.PushEventPort; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +@Service +public class EventPersistenceAdapter implements GetEventsPort, PushEventPort { + private final EventRepository eventRepository; + private final EventEntityMapper accountMapper; + @Override + public List getAll(Pageable pageable) { + return eventRepository.findAll(pageable) + .stream().map(accountMapper::toDomainModel) + .collect(Collectors.toList()); + } + + @Override + public boolean push(Event event) { + eventRepository.save(accountMapper.toEntity(event)); + return true; + } +} diff --git a/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventRepository.java b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventRepository.java new file mode 100644 index 0000000..be202ef --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventRepository.java @@ -0,0 +1,7 @@ +package nd.jar.springhexboot.adapter.out.persistence; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.UUID; + +public interface EventRepository extends JpaRepository {} diff --git a/src/main/java/nd/jar/springhexboot/application/domain/model/Event.java b/src/main/java/nd/jar/springhexboot/application/domain/model/Event.java new file mode 100644 index 0000000..00a7608 --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/application/domain/model/Event.java @@ -0,0 +1,11 @@ +package nd.jar.springhexboot.application.domain.model; + +import java.math.BigDecimal; + + +public record Event( + String uid, + String name, + String description, + String from +){} \ No newline at end of file diff --git a/src/main/java/nd/jar/springhexboot/application/domain/service/PushEventService.java b/src/main/java/nd/jar/springhexboot/application/domain/service/PushEventService.java new file mode 100644 index 0000000..e237734 --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/application/domain/service/PushEventService.java @@ -0,0 +1,13 @@ +package nd.jar.springhexboot.application.domain.service; + +import nd.jar.springhexboot.application.domain.model.Event; +import nd.jar.springhexboot.application.port.in.PushEventUseCase; +import org.springframework.stereotype.Service; + +@Service +public class PushEventService implements PushEventUseCase { + @Override + public void push(Event event) { + + } +} diff --git a/src/main/java/nd/jar/springhexboot/application/port/in/PushEventUseCase.java b/src/main/java/nd/jar/springhexboot/application/port/in/PushEventUseCase.java new file mode 100644 index 0000000..50865ec --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/application/port/in/PushEventUseCase.java @@ -0,0 +1,7 @@ +package nd.jar.springhexboot.application.port.in; + +import nd.jar.springhexboot.application.domain.model.Event; + +public interface PushEventUseCase { + void push(Event event); +} diff --git a/src/main/java/nd/jar/springhexboot/application/port/out/GetEventsPort.java b/src/main/java/nd/jar/springhexboot/application/port/out/GetEventsPort.java new file mode 100644 index 0000000..bfb8b4c --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/application/port/out/GetEventsPort.java @@ -0,0 +1,10 @@ +package nd.jar.springhexboot.application.port.out; + +import nd.jar.springhexboot.application.domain.model.Event; +import org.springframework.data.domain.Pageable; + +import java.util.List; + +public interface GetEventsPort { + List getAll(Pageable pageable); //todo: Pageable is part of spring-data. Need to remove from here. +} diff --git a/src/main/java/nd/jar/springhexboot/application/port/out/PushEventPort.java b/src/main/java/nd/jar/springhexboot/application/port/out/PushEventPort.java new file mode 100644 index 0000000..4cd1678 --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/application/port/out/PushEventPort.java @@ -0,0 +1,10 @@ +package nd.jar.springhexboot.application.port.out; + +import nd.jar.springhexboot.application.domain.model.Event; +import org.springframework.data.domain.Pageable; + +import java.util.List; + +public interface PushEventPort { + boolean push(Event event); +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index bb4bc27..ae3ed1d 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,2 +1,20 @@ -buckpal: - transferThreshold: 10000 \ No newline at end of file +spring: + jpa: + hibernate: + ddl-auto: create + show-sql: true +logging: + level: + org.springframework.web.reactive.function.client.ExchangeFunctions: debug + org: + hibernate: + internal: + SessionImpl: DEBUG + SQL: INFO + type: TRACE + loader: + hql: TRACE + engine: + transaction: + internal: + TransactionImpl: DEBUG diff --git a/src/test/java/io/reflectoring/buckpal/BuckPalApplicationTests.java b/src/test/java/io/reflectoring/buckpal/BuckPalApplicationTests.java deleted file mode 100644 index 9943fe0..0000000 --- a/src/test/java/io/reflectoring/buckpal/BuckPalApplicationTests.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.reflectoring.buckpal; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -@ExtendWith(SpringExtension.class) -@SpringBootTest -class BuckPalApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/src/test/java/io/reflectoring/buckpal/DependencyRuleTests.java b/src/test/java/io/reflectoring/buckpal/DependencyRuleTests.java deleted file mode 100644 index 08f81bd..0000000 --- a/src/test/java/io/reflectoring/buckpal/DependencyRuleTests.java +++ /dev/null @@ -1,48 +0,0 @@ -package io.reflectoring.buckpal; - -import com.tngtech.archunit.core.importer.ClassFileImporter; -import io.reflectoring.buckpal.archunit.HexagonalArchitecture; -import org.junit.jupiter.api.Test; - -import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses; - -class DependencyRuleTests { - - @Test - void validateRegistrationContextArchitecture() { - HexagonalArchitecture.basePackage("io.reflectoring.buckpal") - - .withDomainLayer("application.domain") - - .withAdaptersLayer("adapter") - .incoming("in.web") - .outgoing("out.persistence") - .and() - - .withApplicationLayer("application") - .incomingPorts("port.in") - .outgoingPorts("port.out") - .and() - - .withConfiguration("configuration") - .check(new ClassFileImporter() - .importPackages("io.reflectoring.buckpal..")); - } - - @Test - void domainModelDoesNotDependOnOutside() { - noClasses() - .that() - .resideInAPackage("io.reflectoring.buckpal.application.domain.model..") - .should() - .dependOnClassesThat() - .resideOutsideOfPackages( - "io.reflectoring.buckpal.application.domain.model..", - "lombok..", - "java.." - ) - .check(new ClassFileImporter() - .importPackages("io.reflectoring.buckpal..")); - } - -} diff --git a/src/test/java/io/reflectoring/buckpal/SendMoneySystemTest.java b/src/test/java/io/reflectoring/buckpal/SendMoneySystemTest.java deleted file mode 100644 index b664d9c..0000000 --- a/src/test/java/io/reflectoring/buckpal/SendMoneySystemTest.java +++ /dev/null @@ -1,104 +0,0 @@ -package io.reflectoring.buckpal; - -import java.time.LocalDateTime; - -import io.reflectoring.buckpal.application.port.out.LoadAccountPort; -import io.reflectoring.buckpal.application.domain.model.Account; -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; -import io.reflectoring.buckpal.application.domain.model.Money; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.jdbc.Sql; -import static org.assertj.core.api.BDDAssertions.*; - -@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) -class SendMoneySystemTest { - - @Autowired - private TestRestTemplate restTemplate; - - @Autowired - private LoadAccountPort loadAccountPort; - - @Test - @Sql("SendMoneySystemTest.sql") - void sendMoney() { - - Money initialSourceBalance = sourceAccount().calculateBalance(); - Money initialTargetBalance = targetAccount().calculateBalance(); - - ResponseEntity response = whenSendMoney( - sourceAccountId(), - targetAccountId(), - transferredAmount()); - - then(response.getStatusCode()) - .isEqualTo(HttpStatus.OK); - - then(sourceAccount().calculateBalance()) - .isEqualTo(initialSourceBalance.minus(transferredAmount())); - - then(targetAccount().calculateBalance()) - .isEqualTo(initialTargetBalance.plus(transferredAmount())); - - } - - private Account sourceAccount() { - return loadAccount(sourceAccountId()); - } - - private Account targetAccount() { - return loadAccount(targetAccountId()); - } - - private Account loadAccount(AccountId accountId) { - return loadAccountPort.loadAccount( - accountId, - LocalDateTime.now()); - } - - - private ResponseEntity whenSendMoney( - AccountId sourceAccountId, - AccountId targetAccountId, - Money amount) { - HttpHeaders headers = new HttpHeaders(); - headers.add("Content-Type", "application/json"); - HttpEntity request = new HttpEntity<>(null, headers); - - return restTemplate.exchange( - "/accounts/send/{sourceAccountId}/{targetAccountId}/{amount}", - HttpMethod.POST, - request, - Object.class, - sourceAccountId.getValue(), - targetAccountId.getValue(), - amount.getAmount()); - } - - private Money transferredAmount() { - return Money.of(500L); - } - - private Money balanceOf(AccountId accountId) { - Account account = loadAccountPort.loadAccount(accountId, LocalDateTime.now()); - return account.calculateBalance(); - } - - private AccountId sourceAccountId() { - return new AccountId(1L); - } - - private AccountId targetAccountId() { - return new AccountId(2L); - } - -} diff --git a/src/test/java/io/reflectoring/buckpal/adapter/in/web/SendMoneyControllerTest.java b/src/test/java/io/reflectoring/buckpal/adapter/in/web/SendMoneyControllerTest.java deleted file mode 100644 index 1b0bd3c..0000000 --- a/src/test/java/io/reflectoring/buckpal/adapter/in/web/SendMoneyControllerTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package io.reflectoring.buckpal.adapter.in.web; - -import io.reflectoring.buckpal.application.port.in.SendMoneyUseCase; -import io.reflectoring.buckpal.application.port.in.SendMoneyCommand; -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; -import io.reflectoring.buckpal.application.domain.model.Money; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.web.servlet.MockMvc; -import static org.mockito.BDDMockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -@WebMvcTest(controllers = SendMoneyController.class) -class SendMoneyControllerTest { - - @Autowired - private MockMvc mockMvc; - - @MockBean - private SendMoneyUseCase sendMoneyUseCase; - - @Test - void testSendMoney() throws Exception { - - mockMvc.perform(post("/accounts/send/{sourceAccountId}/{targetAccountId}/{amount}", - 41L, 42L, 500) - .header("Content-Type", "application/json")) - .andExpect(status().isOk()); - - then(sendMoneyUseCase).should() - .sendMoney(eq(new SendMoneyCommand( - new AccountId(41L), - new AccountId(42L), - Money.of(500L)))); - } - -} diff --git a/src/test/java/io/reflectoring/buckpal/adapter/out/persistence/AccountPersistenceAdapterTest.java b/src/test/java/io/reflectoring/buckpal/adapter/out/persistence/AccountPersistenceAdapterTest.java deleted file mode 100644 index 0a4510f..0000000 --- a/src/test/java/io/reflectoring/buckpal/adapter/out/persistence/AccountPersistenceAdapterTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package io.reflectoring.buckpal.adapter.out.persistence; - -import java.time.LocalDateTime; - -import io.reflectoring.buckpal.application.domain.model.Account; -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; -import io.reflectoring.buckpal.application.domain.model.ActivityWindow; -import io.reflectoring.buckpal.application.domain.model.Money; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.context.annotation.Import; -import org.springframework.test.context.jdbc.Sql; -import static io.reflectoring.buckpal.common.AccountTestData.*; -import static io.reflectoring.buckpal.common.ActivityTestData.*; -import static org.assertj.core.api.Assertions.assertThat; - -@DataJpaTest -@Import({AccountPersistenceAdapter.class, AccountMapper.class}) -class AccountPersistenceAdapterTest { - - @Autowired - private AccountPersistenceAdapter adapterUnderTest; - - @Autowired - private ActivityRepository activityRepository; - - @Test - @Sql("AccountPersistenceAdapterTest.sql") - void loadsAccount() { - Account account = adapterUnderTest.loadAccount(new AccountId(1L), LocalDateTime.of(2018, 8, 10, 0, 0)); - - assertThat(account.getActivityWindow().getActivities()).hasSize(2); - assertThat(account.calculateBalance()).isEqualTo(Money.of(500)); - } - - @Test - void updatesActivities() { - Account account = defaultAccount() - .withBaselineBalance(Money.of(555L)) - .withActivityWindow(new ActivityWindow( - defaultActivity() - .withId(null) - .withMoney(Money.of(1L)).build())) - .build(); - - adapterUnderTest.updateActivities(account); - - assertThat(activityRepository.count()).isEqualTo(1); - - ActivityJpaEntity savedActivity = activityRepository.findAll().get(0); - assertThat(savedActivity.getAmount()).isEqualTo(1L); - } - -} \ No newline at end of file diff --git a/src/test/java/io/reflectoring/buckpal/application/domain/AccountTest.java b/src/test/java/io/reflectoring/buckpal/application/domain/AccountTest.java deleted file mode 100644 index c6de162..0000000 --- a/src/test/java/io/reflectoring/buckpal/application/domain/AccountTest.java +++ /dev/null @@ -1,101 +0,0 @@ -package io.reflectoring.buckpal.application.domain; - -import io.reflectoring.buckpal.application.domain.model.Account; -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; -import io.reflectoring.buckpal.application.domain.model.ActivityWindow; -import io.reflectoring.buckpal.application.domain.model.Money; -import org.junit.jupiter.api.Test; -import static io.reflectoring.buckpal.common.AccountTestData.*; -import static io.reflectoring.buckpal.common.ActivityTestData.*; -import static org.assertj.core.api.Assertions.*; - -class AccountTest { - - @Test - void calculatesBalance() { - AccountId accountId = new AccountId(1L); - Account account = defaultAccount() - .withAccountId(accountId) - .withBaselineBalance(Money.of(555L)) - .withActivityWindow(new ActivityWindow( - defaultActivity() - .withTargetAccount(accountId) - .withMoney(Money.of(999L)).build(), - defaultActivity() - .withTargetAccount(accountId) - .withMoney(Money.of(1L)).build())) - .build(); - - Money balance = account.calculateBalance(); - - assertThat(balance).isEqualTo(Money.of(1555L)); - } - - @Test - void withdrawalSucceeds() { - AccountId accountId = new AccountId(1L); - Account account = defaultAccount() - .withAccountId(accountId) - .withBaselineBalance(Money.of(555L)) - .withActivityWindow(new ActivityWindow( - defaultActivity() - .withTargetAccount(accountId) - .withMoney(Money.of(999L)).build(), - defaultActivity() - .withTargetAccount(accountId) - .withMoney(Money.of(1L)).build())) - .build(); - - AccountId randomTargetAccount = new AccountId(99L); - boolean success = account.withdraw(Money.of(555L), randomTargetAccount); - - assertThat(success).isTrue(); - assertThat(account.getActivityWindow().getActivities()).hasSize(3); - assertThat(account.calculateBalance()).isEqualTo(Money.of(1000L)); - } - - @Test - void withdrawalFailure() { - AccountId accountId = new AccountId(1L); - Account account = defaultAccount() - .withAccountId(accountId) - .withBaselineBalance(Money.of(555L)) - .withActivityWindow(new ActivityWindow( - defaultActivity() - .withTargetAccount(accountId) - .withMoney(Money.of(999L)).build(), - defaultActivity() - .withTargetAccount(accountId) - .withMoney(Money.of(1L)).build())) - .build(); - - boolean success = account.withdraw(Money.of(1556L), new AccountId(99L)); - - assertThat(success).isFalse(); - assertThat(account.getActivityWindow().getActivities()).hasSize(2); - assertThat(account.calculateBalance()).isEqualTo(Money.of(1555L)); - } - - @Test - void depositSuccess() { - AccountId accountId = new AccountId(1L); - Account account = defaultAccount() - .withAccountId(accountId) - .withBaselineBalance(Money.of(555L)) - .withActivityWindow(new ActivityWindow( - defaultActivity() - .withTargetAccount(accountId) - .withMoney(Money.of(999L)).build(), - defaultActivity() - .withTargetAccount(accountId) - .withMoney(Money.of(1L)).build())) - .build(); - - boolean success = account.deposit(Money.of(445L), new AccountId(99L)); - - assertThat(success).isTrue(); - assertThat(account.getActivityWindow().getActivities()).hasSize(3); - assertThat(account.calculateBalance()).isEqualTo(Money.of(2000L)); - } - -} \ No newline at end of file diff --git a/src/test/java/io/reflectoring/buckpal/application/domain/ActivityWindowTest.java b/src/test/java/io/reflectoring/buckpal/application/domain/ActivityWindowTest.java deleted file mode 100644 index 601019c..0000000 --- a/src/test/java/io/reflectoring/buckpal/application/domain/ActivityWindowTest.java +++ /dev/null @@ -1,70 +0,0 @@ -package io.reflectoring.buckpal.application.domain; - -import java.time.LocalDateTime; - -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; -import io.reflectoring.buckpal.application.domain.model.ActivityWindow; -import io.reflectoring.buckpal.application.domain.model.Money; -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.Test; -import static io.reflectoring.buckpal.common.ActivityTestData.*; - -class ActivityWindowTest { - - @Test - void calculatesStartTimestamp() { - ActivityWindow window = new ActivityWindow( - defaultActivity().withTimestamp(startDate()).build(), - defaultActivity().withTimestamp(inBetweenDate()).build(), - defaultActivity().withTimestamp(endDate()).build()); - - Assertions.assertThat(window.getStartTimestamp()).isEqualTo(startDate()); - } - - @Test - void calculatesEndTimestamp() { - ActivityWindow window = new ActivityWindow( - defaultActivity().withTimestamp(startDate()).build(), - defaultActivity().withTimestamp(inBetweenDate()).build(), - defaultActivity().withTimestamp(endDate()).build()); - - Assertions.assertThat(window.getEndTimestamp()).isEqualTo(endDate()); - } - - @Test - void calculatesBalance() { - - AccountId account1 = new AccountId(1L); - AccountId account2 = new AccountId(2L); - - ActivityWindow window = new ActivityWindow( - defaultActivity() - .withSourceAccount(account1) - .withTargetAccount(account2) - .withMoney(Money.of(999)).build(), - defaultActivity() - .withSourceAccount(account1) - .withTargetAccount(account2) - .withMoney(Money.of(1)).build(), - defaultActivity() - .withSourceAccount(account2) - .withTargetAccount(account1) - .withMoney(Money.of(500)).build()); - - Assertions.assertThat(window.calculateBalance(account1)).isEqualTo(Money.of(-500)); - Assertions.assertThat(window.calculateBalance(account2)).isEqualTo(Money.of(500)); - } - - private LocalDateTime startDate() { - return LocalDateTime.of(2019, 8, 3, 0, 0); - } - - private LocalDateTime inBetweenDate() { - return LocalDateTime.of(2019, 8, 4, 0, 0); - } - - private LocalDateTime endDate() { - return LocalDateTime.of(2019, 8, 5, 0, 0); - } - -} \ No newline at end of file diff --git a/src/test/java/io/reflectoring/buckpal/application/domain/service/SendMoneyServiceTest.java b/src/test/java/io/reflectoring/buckpal/application/domain/service/SendMoneyServiceTest.java deleted file mode 100644 index c899eb5..0000000 --- a/src/test/java/io/reflectoring/buckpal/application/domain/service/SendMoneyServiceTest.java +++ /dev/null @@ -1,148 +0,0 @@ -package io.reflectoring.buckpal.application.domain.service; - -import io.reflectoring.buckpal.application.port.in.SendMoneyCommand; -import io.reflectoring.buckpal.application.port.out.AccountLock; -import io.reflectoring.buckpal.application.port.out.LoadAccountPort; -import io.reflectoring.buckpal.application.port.out.UpdateAccountStatePort; -import io.reflectoring.buckpal.application.domain.model.Account; -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; -import io.reflectoring.buckpal.application.domain.model.Money; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Mockito; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.BDDMockito.*; - -class SendMoneyServiceTest { - - private final LoadAccountPort loadAccountPort = - Mockito.mock(LoadAccountPort.class); - - private final AccountLock accountLock = - Mockito.mock(AccountLock.class); - - private final UpdateAccountStatePort updateAccountStatePort = - Mockito.mock(UpdateAccountStatePort.class); - - private final SendMoneyService sendMoneyService = - new SendMoneyService(loadAccountPort, accountLock, updateAccountStatePort, moneyTransferProperties()); - - @Test - void givenWithdrawalFails_thenOnlySourceAccountIsLockedAndReleased() { - - AccountId sourceAccountId = new AccountId(41L); - Account sourceAccount = givenAnAccountWithId(sourceAccountId); - - AccountId targetAccountId = new AccountId(42L); - Account targetAccount = givenAnAccountWithId(targetAccountId); - - givenWithdrawalWillFail(sourceAccount); - givenDepositWillSucceed(targetAccount); - - SendMoneyCommand command = new SendMoneyCommand( - sourceAccountId, - targetAccountId, - Money.of(300L)); - - boolean success = sendMoneyService.sendMoney(command); - - assertThat(success).isFalse(); - - then(accountLock).should().lockAccount(eq(sourceAccountId)); - then(accountLock).should().releaseAccount(eq(sourceAccountId)); - then(accountLock).should(times(0)).lockAccount(eq(targetAccountId)); - } - - @Test - void transactionSucceeds() { - - Account sourceAccount = givenSourceAccount(); - Account targetAccount = givenTargetAccount(); - - givenWithdrawalWillSucceed(sourceAccount); - givenDepositWillSucceed(targetAccount); - - Money money = Money.of(500L); - - SendMoneyCommand command = new SendMoneyCommand( - sourceAccount.getId().get(), - targetAccount.getId().get(), - money); - - boolean success = sendMoneyService.sendMoney(command); - - assertThat(success).isTrue(); - - AccountId sourceAccountId = sourceAccount.getId().get(); - AccountId targetAccountId = targetAccount.getId().get(); - - then(accountLock).should().lockAccount(eq(sourceAccountId)); - then(sourceAccount).should().withdraw(eq(money), eq(targetAccountId)); - then(accountLock).should().releaseAccount(eq(sourceAccountId)); - - then(accountLock).should().lockAccount(eq(targetAccountId)); - then(targetAccount).should().deposit(eq(money), eq(sourceAccountId)); - then(accountLock).should().releaseAccount(eq(targetAccountId)); - - thenAccountsHaveBeenUpdated(sourceAccountId, targetAccountId); - } - - private void thenAccountsHaveBeenUpdated(AccountId... accountIds){ - ArgumentCaptor accountCaptor = ArgumentCaptor.forClass(Account.class); - then(updateAccountStatePort).should(times(accountIds.length)) - .updateActivities(accountCaptor.capture()); - - List updatedAccountIds = accountCaptor.getAllValues() - .stream() - .map(Account::getId) - .map(Optional::get) - .collect(Collectors.toList()); - - for(AccountId accountId : accountIds){ - assertThat(updatedAccountIds).contains(accountId); - } - } - - private void givenDepositWillSucceed(Account account) { - given(account.deposit(any(Money.class), any(AccountId.class))) - .willReturn(true); - } - - private void givenWithdrawalWillFail(Account account) { - given(account.withdraw(any(Money.class), any(AccountId.class))) - .willReturn(false); - } - - private void givenWithdrawalWillSucceed(Account account) { - given(account.withdraw(any(Money.class), any(AccountId.class))) - .willReturn(true); - } - - private Account givenTargetAccount(){ - return givenAnAccountWithId(new AccountId(42L)); - } - - private Account givenSourceAccount(){ - return givenAnAccountWithId(new AccountId(41L)); - } - - private Account givenAnAccountWithId(AccountId id) { - Account account = Mockito.mock(Account.class); - given(account.getId()) - .willReturn(Optional.of(id)); - given(loadAccountPort.loadAccount(eq(account.getId().get()), any(LocalDateTime.class))) - .willReturn(account); - return account; - } - - private MoneyTransferProperties moneyTransferProperties(){ - return new MoneyTransferProperties(Money.of(Long.MAX_VALUE)); - } - -} diff --git a/src/test/java/io/reflectoring/buckpal/application/port/in/SendMoneyCommandTest.java b/src/test/java/io/reflectoring/buckpal/application/port/in/SendMoneyCommandTest.java deleted file mode 100644 index 3ecfea8..0000000 --- a/src/test/java/io/reflectoring/buckpal/application/port/in/SendMoneyCommandTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package io.reflectoring.buckpal.application.port.in; - -import io.reflectoring.buckpal.application.domain.model.Account; -import io.reflectoring.buckpal.application.domain.model.Money; -import jakarta.validation.ConstraintViolationException; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import java.math.BigInteger; - -class SendMoneyCommandTest { - - @Test - public void validationOk() { - new SendMoneyCommand( - new Account.AccountId(42L), - new Account.AccountId(43L), - new Money(new BigInteger("10"))); - // no exception - } - - @Test - public void moneyValidationFails() { - Assertions.assertThrows(ConstraintViolationException.class, () -> { - new SendMoneyCommand( - new Account.AccountId(42L), - new Account.AccountId(43L), - new Money(new BigInteger("-10"))); - }); - } - - @Test - public void accountIdValidationFails() { - Assertions.assertThrows(ConstraintViolationException.class, () -> { - new SendMoneyCommand( - new Account.AccountId(42L), - null, - new Money(new BigInteger("10"))); - }); - } - -} \ No newline at end of file diff --git a/src/test/java/io/reflectoring/buckpal/archunit/Adapters.java b/src/test/java/io/reflectoring/buckpal/archunit/Adapters.java deleted file mode 100644 index 4bff0e7..0000000 --- a/src/test/java/io/reflectoring/buckpal/archunit/Adapters.java +++ /dev/null @@ -1,62 +0,0 @@ -package io.reflectoring.buckpal.archunit; - -import java.util.ArrayList; -import java.util.List; - -import com.tngtech.archunit.core.domain.JavaClasses; - -public class Adapters extends ArchitectureElement { - - private final HexagonalArchitecture parentContext; - private List incomingAdapterPackages = new ArrayList<>(); - private List outgoingAdapterPackages = new ArrayList<>(); - - Adapters(HexagonalArchitecture parentContext, String basePackage) { - super(basePackage); - this.parentContext = parentContext; - } - - public Adapters outgoing(String packageName) { - this.incomingAdapterPackages.add(fullQualifiedPackage(packageName)); - return this; - } - - public Adapters incoming(String packageName) { - this.outgoingAdapterPackages.add(fullQualifiedPackage(packageName)); - return this; - } - - List allAdapterPackages() { - List allAdapters = new ArrayList<>(); - allAdapters.addAll(incomingAdapterPackages); - allAdapters.addAll(outgoingAdapterPackages); - return allAdapters; - } - - public HexagonalArchitecture and() { - return parentContext; - } - - String getBasePackage() { - return basePackage; - } - - void dontDependOnEachOther(JavaClasses classes) { - List allAdapters = allAdapterPackages(); - for (String adapter1 : allAdapters) { - for (String adapter2 : allAdapters) { - if (!adapter1.equals(adapter2)) { - denyDependency(adapter1, adapter2, classes); - } - } - } - } - - void doesNotDependOn(String packageName, JavaClasses classes) { - denyDependency(this.basePackage, packageName, classes); - } - - void doesNotContainEmptyPackages() { - denyEmptyPackages(allAdapterPackages()); - } -} diff --git a/src/test/java/io/reflectoring/buckpal/archunit/ApplicationLayer.java b/src/test/java/io/reflectoring/buckpal/archunit/ApplicationLayer.java deleted file mode 100644 index 7c4613a..0000000 --- a/src/test/java/io/reflectoring/buckpal/archunit/ApplicationLayer.java +++ /dev/null @@ -1,59 +0,0 @@ -package io.reflectoring.buckpal.archunit; - -import java.util.ArrayList; -import java.util.List; - -import com.tngtech.archunit.core.domain.JavaClasses; - -public class ApplicationLayer extends ArchitectureElement { - - private final HexagonalArchitecture parentContext; - private List incomingPortsPackages = new ArrayList<>(); - private List outgoingPortsPackages = new ArrayList<>(); - private List servicePackages = new ArrayList<>(); - - public ApplicationLayer(String basePackage, HexagonalArchitecture parentContext) { - super(basePackage); - this.parentContext = parentContext; - } - - public ApplicationLayer incomingPorts(String packageName) { - this.incomingPortsPackages.add(fullQualifiedPackage(packageName)); - return this; - } - - public ApplicationLayer outgoingPorts(String packageName) { - this.outgoingPortsPackages.add(fullQualifiedPackage(packageName)); - return this; - } - - public ApplicationLayer services(String packageName) { - this.servicePackages.add(fullQualifiedPackage(packageName)); - return this; - } - - public HexagonalArchitecture and() { - return parentContext; - } - - public void doesNotDependOn(String packageName, JavaClasses classes) { - denyDependency(this.basePackage, packageName, classes); - } - - public void incomingAndOutgoingPortsDoNotDependOnEachOther(JavaClasses classes) { - denyAnyDependency(this.incomingPortsPackages, this.outgoingPortsPackages, classes); - denyAnyDependency(this.outgoingPortsPackages, this.incomingPortsPackages, classes); - } - - private List allPackages() { - List allPackages = new ArrayList<>(); - allPackages.addAll(incomingPortsPackages); - allPackages.addAll(outgoingPortsPackages); - allPackages.addAll(servicePackages); - return allPackages; - } - - void doesNotContainEmptyPackages() { - denyEmptyPackages(allPackages()); - } -} diff --git a/src/test/java/io/reflectoring/buckpal/archunit/ArchitectureElement.java b/src/test/java/io/reflectoring/buckpal/archunit/ArchitectureElement.java deleted file mode 100644 index 1861b82..0000000 --- a/src/test/java/io/reflectoring/buckpal/archunit/ArchitectureElement.java +++ /dev/null @@ -1,63 +0,0 @@ -package io.reflectoring.buckpal.archunit; - -import java.util.List; - -import com.tngtech.archunit.core.domain.JavaClasses; -import com.tngtech.archunit.core.importer.ClassFileImporter; -import static com.tngtech.archunit.base.DescribedPredicate.*; -import static com.tngtech.archunit.lang.conditions.ArchConditions.*; -import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.*; - -abstract class ArchitectureElement { - - final String basePackage; - - public ArchitectureElement(String basePackage) { - this.basePackage = basePackage; - } - - String fullQualifiedPackage(String relativePackage) { - return this.basePackage + "." + relativePackage; - } - - static void denyDependency(String fromPackageName, String toPackageName, JavaClasses classes) { - noClasses() - .that() - .resideInAPackage(matchAllClassesInPackage(fromPackageName)) - .should() - .dependOnClassesThat() - .resideInAnyPackage(matchAllClassesInPackage(toPackageName)) - .check(classes); - } - - static void denyAnyDependency( - List fromPackages, List toPackages, JavaClasses classes) { - for (String fromPackage : fromPackages) { - for (String toPackage : toPackages) { - denyDependency(fromPackage, toPackage, classes); - } - } - } - - static String matchAllClassesInPackage(String packageName) { - return packageName + ".."; - } - - void denyEmptyPackage(String packageName) { - classes() - .that() - .resideInAPackage(matchAllClassesInPackage(packageName)) - .should(containNumberOfElements(greaterThanOrEqualTo(1))) - .check(classesInPackage(packageName)); - } - - private JavaClasses classesInPackage(String packageName) { - return new ClassFileImporter().importPackages(packageName); - } - - void denyEmptyPackages(List packages) { - for (String packageName : packages) { - denyEmptyPackage(packageName); - } - } -} diff --git a/src/test/java/io/reflectoring/buckpal/archunit/HexagonalArchitecture.java b/src/test/java/io/reflectoring/buckpal/archunit/HexagonalArchitecture.java deleted file mode 100644 index e3cad8a..0000000 --- a/src/test/java/io/reflectoring/buckpal/archunit/HexagonalArchitecture.java +++ /dev/null @@ -1,59 +0,0 @@ -package io.reflectoring.buckpal.archunit; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import com.tngtech.archunit.core.domain.JavaClasses; - -public class HexagonalArchitecture extends ArchitectureElement { - - private Adapters adapters; - private ApplicationLayer applicationLayer; - private String configurationPackage; - private List domainPackages = new ArrayList<>(); - - public static HexagonalArchitecture basePackage(String basePackage) { - return new HexagonalArchitecture(basePackage); - } - - public HexagonalArchitecture(String basePackage) { - super(basePackage); - } - - public Adapters withAdaptersLayer(String adaptersPackage) { - this.adapters = new Adapters(this, fullQualifiedPackage(adaptersPackage)); - return this.adapters; - } - - public HexagonalArchitecture withDomainLayer(String domainPackage) { - this.domainPackages.add(fullQualifiedPackage(domainPackage)); - return this; - } - - public ApplicationLayer withApplicationLayer(String applicationPackage) { - this.applicationLayer = new ApplicationLayer(fullQualifiedPackage(applicationPackage), this); - return this.applicationLayer; - } - - public HexagonalArchitecture withConfiguration(String packageName) { - this.configurationPackage = fullQualifiedPackage(packageName); - return this; - } - - private void domainDoesNotDependOnAdapters(JavaClasses classes) { - denyAnyDependency( - this.domainPackages, Collections.singletonList(adapters.basePackage), classes); - } - - public void check(JavaClasses classes) { - this.adapters.doesNotContainEmptyPackages(); - this.adapters.dontDependOnEachOther(classes); - this.adapters.doesNotDependOn(this.configurationPackage, classes); - this.applicationLayer.doesNotContainEmptyPackages(); - this.applicationLayer.doesNotDependOn(this.adapters.getBasePackage(), classes); - this.applicationLayer.doesNotDependOn(this.configurationPackage, classes); - this.applicationLayer.incomingAndOutgoingPortsDoNotDependOnEachOther(classes); - this.domainDoesNotDependOnAdapters(classes); - } -} diff --git a/src/test/java/io/reflectoring/buckpal/common/AccountTestData.java b/src/test/java/io/reflectoring/buckpal/common/AccountTestData.java deleted file mode 100644 index b06ff6f..0000000 --- a/src/test/java/io/reflectoring/buckpal/common/AccountTestData.java +++ /dev/null @@ -1,48 +0,0 @@ -package io.reflectoring.buckpal.common; - -import io.reflectoring.buckpal.application.domain.model.Account; -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; -import io.reflectoring.buckpal.application.domain.model.ActivityWindow; -import io.reflectoring.buckpal.application.domain.model.Money; - -public class AccountTestData { - - public static AccountBuilder defaultAccount() { - return new AccountBuilder() - .withAccountId(new AccountId(42L)) - .withBaselineBalance(Money.of(999L)) - .withActivityWindow(new ActivityWindow( - ActivityTestData.defaultActivity().build(), - ActivityTestData.defaultActivity().build())); - } - - - public static class AccountBuilder { - - private AccountId accountId; - private Money baselineBalance; - private ActivityWindow activityWindow; - - public AccountBuilder withAccountId(AccountId accountId) { - this.accountId = accountId; - return this; - } - - public AccountBuilder withBaselineBalance(Money baselineBalance) { - this.baselineBalance = baselineBalance; - return this; - } - - public AccountBuilder withActivityWindow(ActivityWindow activityWindow) { - this.activityWindow = activityWindow; - return this; - } - - public Account build() { - return Account.withId(this.accountId, this.baselineBalance, this.activityWindow); - } - - } - - -} diff --git a/src/test/java/io/reflectoring/buckpal/common/ActivityTestData.java b/src/test/java/io/reflectoring/buckpal/common/ActivityTestData.java deleted file mode 100644 index 6ba52f8..0000000 --- a/src/test/java/io/reflectoring/buckpal/common/ActivityTestData.java +++ /dev/null @@ -1,69 +0,0 @@ -package io.reflectoring.buckpal.common; - -import java.time.LocalDateTime; - -import io.reflectoring.buckpal.application.domain.model.Account.AccountId; -import io.reflectoring.buckpal.application.domain.model.Activity; -import io.reflectoring.buckpal.application.domain.model.Activity.ActivityId; -import io.reflectoring.buckpal.application.domain.model.Money; - -public class ActivityTestData { - - public static ActivityBuilder defaultActivity(){ - return new ActivityBuilder() - .withOwnerAccount(new AccountId(42L)) - .withSourceAccount(new AccountId(42L)) - .withTargetAccount(new AccountId(41L)) - .withTimestamp(LocalDateTime.now()) - .withMoney(Money.of(999L)); - } - - public static class ActivityBuilder { - private ActivityId id; - private AccountId ownerAccountId; - private AccountId sourceAccountId; - private AccountId targetAccountId; - private LocalDateTime timestamp; - private Money money; - - public ActivityBuilder withId(ActivityId id) { - this.id = id; - return this; - } - - public ActivityBuilder withOwnerAccount(AccountId accountId) { - this.ownerAccountId = accountId; - return this; - } - - public ActivityBuilder withSourceAccount(AccountId accountId) { - this.sourceAccountId = accountId; - return this; - } - - public ActivityBuilder withTargetAccount(AccountId accountId) { - this.targetAccountId = accountId; - return this; - } - - public ActivityBuilder withTimestamp(LocalDateTime timestamp) { - this.timestamp = timestamp; - return this; - } - - public ActivityBuilder withMoney(Money money) { - this.money = money; - return this; - } - - public Activity build() { - return new Activity( - this.id, - this.ownerAccountId, - this.sourceAccountId, - this.targetAccountId, - this.timestamp, - this.money); - } - } -} diff --git a/src/test/java/nd/jar/springhexboot/TestApp.java b/src/test/java/nd/jar/springhexboot/TestApp.java new file mode 100644 index 0000000..435c7f3 --- /dev/null +++ b/src/test/java/nd/jar/springhexboot/TestApp.java @@ -0,0 +1,11 @@ +package nd.jar.springhexboot; + +import org.springframework.boot.SpringApplication; + +public class TestApp { + public static void main(String[] args) { + SpringApplication.from(App::main) + .with(TestContainersConfiguration.class) + .run(); + } +} diff --git a/src/test/java/nd/jar/springhexboot/TestContainersConfiguration.java b/src/test/java/nd/jar/springhexboot/TestContainersConfiguration.java new file mode 100644 index 0000000..b0c9de4 --- /dev/null +++ b/src/test/java/nd/jar/springhexboot/TestContainersConfiguration.java @@ -0,0 +1,16 @@ +package nd.jar.springhexboot; + +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; +import org.springframework.context.annotation.Bean; +import org.testcontainers.containers.MySQLContainer; + +@TestConfiguration +public class TestContainersConfiguration { + @Bean + @ServiceConnection + MySQLContainer mySQLContainer() { + return new MySQLContainer<>("mysql:5.7.39"); + } + +} diff --git a/src/test/resources/io/reflectoring/buckpal/SendMoneySystemTest.sql b/src/test/resources/io/reflectoring/buckpal/SendMoneySystemTest.sql deleted file mode 100644 index 7973596..0000000 --- a/src/test/resources/io/reflectoring/buckpal/SendMoneySystemTest.sql +++ /dev/null @@ -1,26 +0,0 @@ -insert into account (id) values (1); -insert into account (id) values (2); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (1001, '2018-08-08 08:00:00.0', 1, 1, 2, 500); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (1002, '2018-08-08 08:00:00.0', 2, 1, 2, 500); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (1003, '2018-08-09 10:00:00.0', 1, 2, 1, 1000); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (1004, '2018-08-09 10:00:00.0', 2, 2, 1, 1000); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (1005, '2019-08-09 09:00:00.0', 1, 1, 2, 1000); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (1006, '2019-08-09 09:00:00.0', 2, 1, 2, 1000); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (1007, '2019-08-09 10:00:00.0', 1, 2, 1, 1000); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (1008, '2019-08-09 10:00:00.0', 2, 2, 1, 1000); \ No newline at end of file diff --git a/src/test/resources/io/reflectoring/buckpal/adapter/out/persistence/AccountPersistenceAdapterTest.sql b/src/test/resources/io/reflectoring/buckpal/adapter/out/persistence/AccountPersistenceAdapterTest.sql deleted file mode 100644 index 3698724..0000000 --- a/src/test/resources/io/reflectoring/buckpal/adapter/out/persistence/AccountPersistenceAdapterTest.sql +++ /dev/null @@ -1,26 +0,0 @@ -insert into account (id) values (1); -insert into account (id) values (2); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (1, '2018-08-08 08:00:00.0', 1, 1, 2, 500); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (2, '2018-08-08 08:00:00.0', 2, 1, 2, 500); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (3, '2018-08-09 10:00:00.0', 1, 2, 1, 1000); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (4, '2018-08-09 10:00:00.0', 2, 2, 1, 1000); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (5, '2019-08-09 09:00:00.0', 1, 1, 2, 1000); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (6, '2019-08-09 09:00:00.0', 2, 1, 2, 1000); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (7, '2019-08-09 10:00:00.0', 1, 2, 1, 1000); - -insert into activity (id, timestamp, owner_account_id, source_account_id, target_account_id, amount) -values (8, '2019-08-09 10:00:00.0', 2, 2, 1, 1000); \ No newline at end of file From 1ce614bac9a0a5f2a4354d6e321a7f75c8290f64 Mon Sep 17 00:00:00 2001 From: NJ Date: Mon, 19 Feb 2024 08:18:37 +0300 Subject: [PATCH 02/15] Added event push for persistence --- .../adapter/out/persistence/EventEntity.java | 3 +-- .../springhexboot/application/domain/model/Event.java | 3 --- .../application/domain/service/PushEventService.java | 11 +++++++++-- .../application/port/in/PushEventUseCase.java | 2 +- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntity.java b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntity.java index 533a9c7..0406cc4 100644 --- a/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntity.java +++ b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntity.java @@ -3,8 +3,6 @@ import jakarta.persistence.*; import lombok.*; -import java.util.UUID; - @Entity @Table @Getter @@ -13,6 +11,7 @@ @RequiredArgsConstructor public class EventEntity { @Id + @GeneratedValue private Long id; private String name; diff --git a/src/main/java/nd/jar/springhexboot/application/domain/model/Event.java b/src/main/java/nd/jar/springhexboot/application/domain/model/Event.java index 00a7608..78bed14 100644 --- a/src/main/java/nd/jar/springhexboot/application/domain/model/Event.java +++ b/src/main/java/nd/jar/springhexboot/application/domain/model/Event.java @@ -1,8 +1,5 @@ package nd.jar.springhexboot.application.domain.model; -import java.math.BigDecimal; - - public record Event( String uid, String name, diff --git a/src/main/java/nd/jar/springhexboot/application/domain/service/PushEventService.java b/src/main/java/nd/jar/springhexboot/application/domain/service/PushEventService.java index e237734..91c9658 100644 --- a/src/main/java/nd/jar/springhexboot/application/domain/service/PushEventService.java +++ b/src/main/java/nd/jar/springhexboot/application/domain/service/PushEventService.java @@ -1,13 +1,20 @@ package nd.jar.springhexboot.application.domain.service; +import lombok.RequiredArgsConstructor; import nd.jar.springhexboot.application.domain.model.Event; import nd.jar.springhexboot.application.port.in.PushEventUseCase; +import nd.jar.springhexboot.application.port.out.PushEventPort; import org.springframework.stereotype.Service; +import java.util.Set; + @Service +@RequiredArgsConstructor public class PushEventService implements PushEventUseCase { + private final Set subscribers; @Override - public void push(Event event) { - + public boolean push(Event event) { + return subscribers.stream().map(sub -> sub.push(event)) + .anyMatch(result -> !result); } } diff --git a/src/main/java/nd/jar/springhexboot/application/port/in/PushEventUseCase.java b/src/main/java/nd/jar/springhexboot/application/port/in/PushEventUseCase.java index 50865ec..2eeb53c 100644 --- a/src/main/java/nd/jar/springhexboot/application/port/in/PushEventUseCase.java +++ b/src/main/java/nd/jar/springhexboot/application/port/in/PushEventUseCase.java @@ -3,5 +3,5 @@ import nd.jar.springhexboot.application.domain.model.Event; public interface PushEventUseCase { - void push(Event event); + boolean push(Event event); } From 3827a46d75b0b850e604d03aa2a2c2b2371bcf49 Mon Sep 17 00:00:00 2001 From: NJ Date: Mon, 19 Feb 2024 09:14:08 +0300 Subject: [PATCH 03/15] Added redis set and get example --- build.gradle | 2 + .../adapter/in/web/EventDto.java | 1 + .../adapter/in/web/EventsController.java | 12 +++++ .../adapter/out/cache/RedisCacheService.java | 44 +++++++++++++++++++ .../adapter/out/persistence/EventEntity.java | 3 +- .../persistence/EventPersistenceAdapter.java | 10 ++++- .../out/persistence/EventRepository.java | 4 +- .../application/domain/model/Event.java | 2 +- .../domain/service/EventService.java | 32 ++++++++++++++ .../domain/service/PushEventService.java | 20 --------- .../port/in/FindEventsUseCase.java | 9 ++++ .../application/port/out/ExternalStorage.java | 10 +++++ .../{PushEventPort.java => GetEventPort.java} | 5 ++- .../TestContainersConfiguration.java | 8 ++++ 14 files changed, 132 insertions(+), 30 deletions(-) create mode 100644 src/main/java/nd/jar/springhexboot/adapter/out/cache/RedisCacheService.java create mode 100644 src/main/java/nd/jar/springhexboot/application/domain/service/EventService.java delete mode 100644 src/main/java/nd/jar/springhexboot/application/domain/service/PushEventService.java create mode 100644 src/main/java/nd/jar/springhexboot/application/port/in/FindEventsUseCase.java create mode 100644 src/main/java/nd/jar/springhexboot/application/port/out/ExternalStorage.java rename src/main/java/nd/jar/springhexboot/application/port/out/{PushEventPort.java => GetEventPort.java} (66%) diff --git a/build.gradle b/build.gradle index ae96543..de418ad 100644 --- a/build.gradle +++ b/build.gradle @@ -19,6 +19,7 @@ dependencies { implementation "org.springframework.boot:spring-boot-starter-data-jpa" // implementation "org.springframework.boot:spring-boot-starter-security" implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation "org.springframework.boot:spring-boot-starter-data-redis" implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0' @@ -35,6 +36,7 @@ dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.boot:spring-boot-testcontainers' testImplementation "org.testcontainers:mysql:1.19.0" + testImplementation "com.redis:testcontainers-redis:2.0.1" } diff --git a/src/main/java/nd/jar/springhexboot/adapter/in/web/EventDto.java b/src/main/java/nd/jar/springhexboot/adapter/in/web/EventDto.java index 45efc72..99059ab 100644 --- a/src/main/java/nd/jar/springhexboot/adapter/in/web/EventDto.java +++ b/src/main/java/nd/jar/springhexboot/adapter/in/web/EventDto.java @@ -4,6 +4,7 @@ public record EventDto( + String id, String name, String description, String from diff --git a/src/main/java/nd/jar/springhexboot/adapter/in/web/EventsController.java b/src/main/java/nd/jar/springhexboot/adapter/in/web/EventsController.java index c9aa687..dd322a9 100644 --- a/src/main/java/nd/jar/springhexboot/adapter/in/web/EventsController.java +++ b/src/main/java/nd/jar/springhexboot/adapter/in/web/EventsController.java @@ -1,22 +1,28 @@ package nd.jar.springhexboot.adapter.in.web; import lombok.RequiredArgsConstructor; +import nd.jar.springhexboot.application.port.in.FindEventsUseCase; import nd.jar.springhexboot.application.port.in.PushEventUseCase; import nd.jar.springhexboot.application.port.out.GetEventsPort; import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; +import static java.util.stream.Collectors.toMap; + @RestController("/events") @RequiredArgsConstructor public class EventsController { private final GetEventsPort getAccountsPort; private final EventDtoMapper eventDtoMapper; + private final FindEventsUseCase findEventsUseCase; private final PushEventUseCase pushEventUseCase; @GetMapping @@ -29,4 +35,10 @@ ResponseEntity push(EventDto eventDto) { pushEventUseCase.push(eventDtoMapper.toDomainModel(eventDto)); return ResponseEntity.ok().build(); } + + @GetMapping("/{id}") + Map get(@PathVariable("id") String id) { + return findEventsUseCase.find(id).entrySet() + .stream().collect(toMap(Map.Entry::getKey, entry -> eventDtoMapper.toDto(entry.getValue()))); + } } diff --git a/src/main/java/nd/jar/springhexboot/adapter/out/cache/RedisCacheService.java b/src/main/java/nd/jar/springhexboot/adapter/out/cache/RedisCacheService.java new file mode 100644 index 0000000..1fd0c77 --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/adapter/out/cache/RedisCacheService.java @@ -0,0 +1,44 @@ +package nd.jar.springhexboot.adapter.out.cache; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import nd.jar.springhexboot.application.domain.model.Event; +import nd.jar.springhexboot.application.port.out.GetEventPort; +import nd.jar.springhexboot.application.port.out.ExternalStorage; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +@Log4j2 +@RequiredArgsConstructor +public class RedisCacheService implements ExternalStorage, GetEventPort { + private final StringRedisTemplate stringRedisTemplate; + private final ObjectMapper om; + @Override + public boolean push(Event event) { + + try { + stringRedisTemplate.opsForValue().set(event.id(), om.writeValueAsString(event)); + } catch (JsonProcessingException e) { + log.error("Error while processing json", e); + return false; + } + return true; + } + + @Override + public Optional find(String id) { + final var stringResult = stringRedisTemplate.opsForValue().get(id); + try { + final var result = om.readValue(stringResult, Event.class); + return Optional.of(result); + } catch (JsonProcessingException e) { + log.error("Error while processing json", e); + return Optional.empty(); + } + } +} diff --git a/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntity.java b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntity.java index 0406cc4..639b3f4 100644 --- a/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntity.java +++ b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventEntity.java @@ -11,8 +11,7 @@ @RequiredArgsConstructor public class EventEntity { @Id - @GeneratedValue - private Long id; + private String id; private String name; diff --git a/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventPersistenceAdapter.java b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventPersistenceAdapter.java index 5ebedc4..1cf6753 100644 --- a/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventPersistenceAdapter.java +++ b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventPersistenceAdapter.java @@ -3,16 +3,17 @@ import lombok.RequiredArgsConstructor; import nd.jar.springhexboot.application.domain.model.Event; import nd.jar.springhexboot.application.port.out.GetEventsPort; -import nd.jar.springhexboot.application.port.out.PushEventPort; +import nd.jar.springhexboot.application.port.out.ExternalStorage; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; @RequiredArgsConstructor @Service -public class EventPersistenceAdapter implements GetEventsPort, PushEventPort { +public class EventPersistenceAdapter implements GetEventsPort, ExternalStorage { private final EventRepository eventRepository; private final EventEntityMapper accountMapper; @Override @@ -27,4 +28,9 @@ public boolean push(Event event) { eventRepository.save(accountMapper.toEntity(event)); return true; } + + @Override + public Optional find(String id) { + return eventRepository.findById(id).map(accountMapper::toDomainModel); + } } diff --git a/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventRepository.java b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventRepository.java index be202ef..437f259 100644 --- a/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventRepository.java +++ b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventRepository.java @@ -2,6 +2,4 @@ import org.springframework.data.jpa.repository.JpaRepository; -import java.util.UUID; - -public interface EventRepository extends JpaRepository {} +public interface EventRepository extends JpaRepository {} diff --git a/src/main/java/nd/jar/springhexboot/application/domain/model/Event.java b/src/main/java/nd/jar/springhexboot/application/domain/model/Event.java index 78bed14..90d672b 100644 --- a/src/main/java/nd/jar/springhexboot/application/domain/model/Event.java +++ b/src/main/java/nd/jar/springhexboot/application/domain/model/Event.java @@ -1,7 +1,7 @@ package nd.jar.springhexboot.application.domain.model; public record Event( - String uid, + String id, String name, String description, String from diff --git a/src/main/java/nd/jar/springhexboot/application/domain/service/EventService.java b/src/main/java/nd/jar/springhexboot/application/domain/service/EventService.java new file mode 100644 index 0000000..6f9e408 --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/application/domain/service/EventService.java @@ -0,0 +1,32 @@ +package nd.jar.springhexboot.application.domain.service; + +import lombok.RequiredArgsConstructor; +import nd.jar.springhexboot.application.domain.model.Event; +import nd.jar.springhexboot.application.port.in.FindEventsUseCase; +import nd.jar.springhexboot.application.port.in.PushEventUseCase; +import nd.jar.springhexboot.application.port.out.ExternalStorage; +import org.springframework.stereotype.Service; + +import java.util.Map; + +import static java.util.stream.Collectors.toMap; + +@Service +@RequiredArgsConstructor +public class EventService implements PushEventUseCase, FindEventsUseCase { + private final Map subscribers; + @Override + public boolean push(Event event) { + return subscribers.values().stream().map(sub -> sub.push(event)) + .anyMatch(result -> !result); + } + + @Override + public Map find(String eventId) { + return subscribers.entrySet().stream() + .collect(toMap(Map.Entry::getKey, entry -> entry.getValue().find(eventId))).entrySet().stream() + .filter(entry -> entry.getValue().isPresent()) + .collect(toMap(Map.Entry::getKey, entry -> entry.getValue().get())); + } + +} diff --git a/src/main/java/nd/jar/springhexboot/application/domain/service/PushEventService.java b/src/main/java/nd/jar/springhexboot/application/domain/service/PushEventService.java deleted file mode 100644 index 91c9658..0000000 --- a/src/main/java/nd/jar/springhexboot/application/domain/service/PushEventService.java +++ /dev/null @@ -1,20 +0,0 @@ -package nd.jar.springhexboot.application.domain.service; - -import lombok.RequiredArgsConstructor; -import nd.jar.springhexboot.application.domain.model.Event; -import nd.jar.springhexboot.application.port.in.PushEventUseCase; -import nd.jar.springhexboot.application.port.out.PushEventPort; -import org.springframework.stereotype.Service; - -import java.util.Set; - -@Service -@RequiredArgsConstructor -public class PushEventService implements PushEventUseCase { - private final Set subscribers; - @Override - public boolean push(Event event) { - return subscribers.stream().map(sub -> sub.push(event)) - .anyMatch(result -> !result); - } -} diff --git a/src/main/java/nd/jar/springhexboot/application/port/in/FindEventsUseCase.java b/src/main/java/nd/jar/springhexboot/application/port/in/FindEventsUseCase.java new file mode 100644 index 0000000..c23d3ac --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/application/port/in/FindEventsUseCase.java @@ -0,0 +1,9 @@ +package nd.jar.springhexboot.application.port.in; + +import nd.jar.springhexboot.application.domain.model.Event; + +import java.util.Map; + +public interface FindEventsUseCase { + Map find(String eventId); +} diff --git a/src/main/java/nd/jar/springhexboot/application/port/out/ExternalStorage.java b/src/main/java/nd/jar/springhexboot/application/port/out/ExternalStorage.java new file mode 100644 index 0000000..3976d4a --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/application/port/out/ExternalStorage.java @@ -0,0 +1,10 @@ +package nd.jar.springhexboot.application.port.out; + +import nd.jar.springhexboot.application.domain.model.Event; + +import java.util.Optional; + +public interface ExternalStorage { + boolean push(Event event); + Optional find(String id); +} diff --git a/src/main/java/nd/jar/springhexboot/application/port/out/PushEventPort.java b/src/main/java/nd/jar/springhexboot/application/port/out/GetEventPort.java similarity index 66% rename from src/main/java/nd/jar/springhexboot/application/port/out/PushEventPort.java rename to src/main/java/nd/jar/springhexboot/application/port/out/GetEventPort.java index 4cd1678..716313b 100644 --- a/src/main/java/nd/jar/springhexboot/application/port/out/PushEventPort.java +++ b/src/main/java/nd/jar/springhexboot/application/port/out/GetEventPort.java @@ -4,7 +4,8 @@ import org.springframework.data.domain.Pageable; import java.util.List; +import java.util.Optional; -public interface PushEventPort { - boolean push(Event event); +public interface GetEventPort { + Optional find(String id); } diff --git a/src/test/java/nd/jar/springhexboot/TestContainersConfiguration.java b/src/test/java/nd/jar/springhexboot/TestContainersConfiguration.java index b0c9de4..c3e3181 100644 --- a/src/test/java/nd/jar/springhexboot/TestContainersConfiguration.java +++ b/src/test/java/nd/jar/springhexboot/TestContainersConfiguration.java @@ -1,9 +1,11 @@ package nd.jar.springhexboot; +import com.redis.testcontainers.RedisContainer; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.springframework.context.annotation.Bean; import org.testcontainers.containers.MySQLContainer; +import org.testcontainers.utility.DockerImageName; @TestConfiguration public class TestContainersConfiguration { @@ -13,4 +15,10 @@ MySQLContainer mySQLContainer() { return new MySQLContainer<>("mysql:5.7.39"); } + @Bean + @ServiceConnection(name = "redis") + RedisContainer redisContainer(){ + return new RedisContainer(DockerImageName.parse("redis:6.2.6")); + } + } From adc26f9d97a1e9c6e59c552ac8effc49a037f1d5 Mon Sep 17 00:00:00 2001 From: NJ Date: Mon, 19 Feb 2024 09:48:01 +0300 Subject: [PATCH 04/15] Fixed readme --- README.md | 86 +++--------------- img/cover-430.png | Bin 105572 -> 0 bytes img/cover-packt-450.png | Bin 107469 -> 0 bytes img/dependencies.png | Bin 110079 -> 0 bytes .../adapter/in/web/EventDto.java | 3 - .../adapter/in/web/EventsController.java | 6 -- .../adapter/in/web/MoneyController.java | 9 -- .../adapter/out/cache/RedisCacheService.java | 1 - .../persistence/EventPersistenceAdapter.java | 12 +-- .../domain/service/EventService.java | 6 +- 10 files changed, 18 insertions(+), 105 deletions(-) delete mode 100644 img/cover-430.png delete mode 100644 img/cover-packt-450.png delete mode 100644 img/dependencies.png delete mode 100644 src/main/java/nd/jar/springhexboot/adapter/in/web/MoneyController.java diff --git a/README.md b/README.md index cf27303..986e067 100644 --- a/README.md +++ b/README.md @@ -1,85 +1,27 @@ -# Get Your Hands Dirty on Clean Architecture +# Spring Boot Hexagonal +Project shows, how to use hexagonal architecture in your spring boot applications -This repository implements a small web app in the Hexagonal Architecture style, as discussed in the book "Get Your Hands Dirty on Clean Architecture". - -The code has been updated to the 2nd edition of the book. - -## Get the print book - -[![Get Your Hands Dirty on Clean Architecture cover](img/cover-packt-450.png)](https://www.amazon.com/Your-Hands-Dirty-Clean-Architecture/dp/180512837X?keywords=get+your+hands+dirty+on+clean+architecture&qid=1689324075&sprefix=Get+Your+Hands+Dirty+on+Clean+,aps,424&sr=8-2&_encoding=UTF8&tag=reflectorin0c-20&linkCode=ur2&linkId=c04a12e6dd6d399747b0cdce328650a5&camp=1789&creative=9325) - -## Get the e-book +![Hexagonal Architecture](img/hexagonal-architecture.png) -This is the self-published version, which is only available electronically. -[![Get Your Hands Dirty on Clean Architecture cover](img/cover-430.png)](https://thombergs.gumroad.com/l/gyhdoca) -## Companion Articles +## Implemented integrations: +* Mysql (Spring Data JPA) +* Redis (Spring Data Redis) -* [Hexagonal Architecture with Java and Spring](https://reflectoring.io/spring-hexagonal/) -* [Building a Multi-Module Spring Boot Application with Gradle](https://reflectoring.io/spring-boot-gradle-multi-module/) ## Prerequisites * JDK 17 * this project uses Lombok, so enable annotation processing in your IDE +* this project uses Testcontainers, so run Docker on your local machine -## About the book -### All About Hexagonal Architecture - -* Learn the concepts behind "Clean Architecture" and "Hexagonal Architecture". -* Explore a hands-on approach of implementing a Hexagonal architecture with example code [on GitHub](https://github.com/thombergs/buckpal). -* Develop your domain code independent of database or web concerns. - -![Hexagonal Architecture](img/hexagonal-architecture.png) - -### Get a Grip on Your Layers - -* Learn about potential problems of the common layered architecture style. -* Free your domain layer of oppressive dependencies using dependency inversion. -* Structure your code in an architecturally expressive way. -* Use different methods to enforce architectural boundaries. -* Learn the consequences of shortcuts and when to accept them. -* ... and [more](#table-of-contents). - -![Dependencies](img/dependencies.png) +## Getting Started +`gradle testBootRun` -### What Readers Say +## See More -> Tom Hombergs has done a terrific job in explaining clean architecture - from concepts to code. Really wish more technical books would be as clear as that one! - -Gernot Starke - Fellow at [INNOQ](https://www.innoq.com/en/staff/gernot-starke/), Founder of [arc42](https://arc42.org/), Author of Software Architecture Books, Coach, and Consultant - -> Love your book. One of the most practical books on hexagonal architecture I have seen/read so far. - -Marten Deinum - Spring Framework Contributor and Author of ["Spring 5 Recipes"](https://www.amazon.com/Spring-5-Recipes-Problem-Solution-Approach/dp/1484227891&tag=reflectorin0c-20) and ["Spring Boot 2 Recipes"](https://www.amazon.com/Spring-Boot-Recipes-Problem-Solution-Approach/dp/1484239628&tag=reflectorin0c-20) - -> A book taken right out of the machine room of software development. Tom talks straight from his experience and guides you through the day-to-day trade-offs necessary to deliver clean architecture. - -Sebastian Kempken - Software Architect at Adcubum - -> Thank you for the great book, it helped me gain significant insight into how one would go about implementing hexagonal and DDD in a modern Spring project. - -Spyros Vallianos - Java Developer at Konnekt-able - -> After reading it I had one of these 'aha' moments when things finally click in your brain. - -Manos Tzagkarakis - Java Developer at Datawise - -### Table of Contents - -1. Maintainability -2. What's Wrong with Layers? -3. Inverting Dependencies -4. Organizing Code -5. Implementing a Use Case -6. Implementing a Web Adapter -7. Implementing a Persistence Adapter -8. Testing Architecture Elements -9. Mapping Between Boundaries -10. Assembling the Application -11. Taking Shortcuts Consciously -12. Enforcing Architecture Boundaries -13. Managing Multiple Bounded Contexts -14. A Component-Based Approach to Software Architecture -15. Deciding on an Architecture Style +* Forked and inspired by [hombergs/buckpal](https://github.com/thombergs/buckpal) +* [YouTube: Рустам Ахметов — Архитектура приложения и ошибки проектирования](https://www.youtube.com/watch?v=X6QdWTE1HHw&t=2194s&ab_channel=JPoint%2CJoker%D0%B8JUGru) +* [Hexagonal Architecture with Java and Spring](https://reflectoring.io/spring-hexagonal/) +* [Building a Multi-Module Spring Boot Application with Gradle](https://reflectoring.io/spring-boot-gradle-multi-module/) diff --git a/img/cover-430.png b/img/cover-430.png deleted file mode 100644 index ed32cdbbb401eee60f4b90160d1f2a0ecb1c4494..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105572 zcmeFZWl&t*(l$J}yZd0l2e(0jI|NH`_u%gCk^l)BAUMI@-60U%A-KCs(091+bIx;4 zeea*A>U;kks;JttR`=E2SNH0@_GS%{%1Y8`$i&D1002!^MnV+;fGP(7pqUZjAtS|R ziqil9FwaX}(?!+D9q8a>Z*FB{26XXsFaw%-SeXL=9*g;DR!%0oE}<_bcv{frYaj%Z z_il09y8>BxCvHb_{8n1nit(pV?tCzS=1YSY&t?C!iaJ6)P?<)_%q6Q%J)g(;)9$Lr z+u*U&-QA+gYx>7Othv3XHSoFB<=p;UAY%aq4)RqJ&%_dNpCw$ zUWP;4?Gm`C(2V@`2HQai8@m|mhtQjxECyu_t3TMrc5mk%-Wshf?GHTq)%&#FvA$%I zOe}>yOp6zf=ZE+Q>w2e0FWGzfxWlp24&Rl~i(4(v?3d%wCV!zQf8h=b%}lH(+WY%< z_uGe^U(8bFAA%|xrt`~CSjhm23P-%J@! zCe^s!y2`{Hma^$sbq?&uoAR#yfzMK&_h{xDN}^L;`_o+EFkk4$9cR*+owZ++d&6jk z`&vG`Lsh5F^L6q=gMFh$65ZHC3>r z%7G}!U)X+>qF#|ot(9jFQ^DEC6)2cgc6x*gGNu8gq3U92s7KqBBIjU zzi#84)prs&?N#^)h)h*R-IV(W4TUL_NZOruH|TPQe!no;mv6tlz<;Sob(UN1`1Skc z*V3w)ZFJb|@ca)HJoU`I_B3O~Wn@wliNZYBoRPhXWM4?7pY^@a2Ay1TSP`QnW2+6 zo*|*F%eBboGQ5gHY7fU{+cwVI9OzZtmox}G?V#^c#P^g4Qen_dvKBl2vDNNoQJD6E z4?FSSMD9OVjcL#N{9Zb;S@mAX&|k7j+SXXw&2vP-it+wFJ_w(?Y@*85GNRr;m|(D> zGD}}pLtdQ7U=M*-g8>6b#KG@F#66fg3evL&SPrB!#$f z=dyl6t5rF_ec~k}ozjfCQ;{MzioADB!PfRccAM$!PxahPYA(JCvbiZ9ueaUc_9y@KD#OP z_8GxjN7fq%lSG{tA6UYaHd1oa6yDHM5$uNi@-E_uxXfqJC_@b!ou^4yx`CG?RsWyKZN2wF=I=mXM>BsVU_xkUecwQ!p2R?lNj>NU2&=Dg{o4n zj-YR~3BI7vyGTY8t5`;h$*<>ab~E0xp`LN57p!Ehe=Tx0IbfRhxy=@5tdzmaPVl_n zNwE}Xos^9%K6M2{FBNG--Is$jcX(>Jv#h)s6Oa((ikPOk^ZQ9yk3^B)&pe!j*Frn3 zWRxuGagOhx9=WA#MhIyrg$FUTHcTUh74R?yW)1Ovxu-&&P{sMZ_T&zX9d?IWePTm# zhE~0%Oe#4BDQn7@cL#}-nM=S(uKH0DC`{@Rb~4fWSlN8fGuZr<#Vo<8Qy%z{f@WO_ z7%4cNv>QW!yO_#6#c;*ny#h=9M{bg4dQTl8$*A+E6%z&sF2I5<+RNrjzRubB+cF|m zpT!lDCblt*6ujP#16b%|d~N6SC3BRJBw>*+*fWYHn9ppt#dLFgP-M;dt5w!{{`5S_ zpWz0vR2L(3NFHb2A)}$g#5D@J`egOZ(isgo&WXz0>7byNb1Zx<5;0?WCxz%#!42$# z`ZTNfIIvg~z&>pVl_xr6R|z)kZ5bnlbv`F1R*iC4VWgl&BYW<~W-mk(&kgNH_1lldFgF?o0?y$zQh*|kQDHw> z_@InIpC0;sLD6xVwE)qKs9WKf9D*?#h#t{uIes+M^ulg?{9SMY2P({F0N*{MdWh_m zVRt$@5T(0Og&G$db<}JEF{xWtMlIBXBaumYN}9C=I>+L=lZ^JtGULiCP= zOUc_Ki25}JU5!&7jEy?oYO|At(5fM=L; zOhKZF=UJS{rR|LNKQ23c_~0>7yr|UzU%D8#(7(YSai}7TVh@P!0&@QJioEeH#;L*~ z87HtxcLRQKc)^v#Vb)8?h7Fp#S2z%+Fi3-8kWg0cwkqz&!K@qrrP&l>{rY6h|@K#h9lhmLrYasxh zS)_0sN3aG;lfHsO-rw!5^G}(SBJj}NWEpPrB`~zhCxH%MHUx!;Mw^Cj+Epu+g$lk7yCciRrW zp-0U?ExypBnvXPG8RU{no2ZM97bNkg^^|6gM?{B(9T(7M2>MdTG*_6|V`GFJ;R8>P zDJV&tWrIE*7?k%5O1D7c-ES-;({lMYpeuw7lwfWZaF|W*RW?}&FUzC~D_f&eDh?jL zOnTQD4Ni?noOHM7jhx0Bs{)!Ze$-nGwzOW|Jp>|{o}jTUG^d|f8a&q)MOFvUWMT*O z2+4Uq9KV3eU<6SAfXc4Bge`&TD2Hw|;>v`LVH z%yPw$p*PikNHQ`qxE8_MHRfNsWn%%A1?`q;?x16~x&gV1apb!kR$=fgcfZwn2Z^~j zw9!xWc;N7|gdzu@faa{-6dASB{aBqa9GNhZVPS<%pu)Qq*h{9SP*F=DvT(D(}3nFr;Kawy2r7e{_ zG^jrpVW1URs?FS}x})i}_MqZWmL^7%?62NXBJeW3tt5hnQfwkN9Z;n7nsyZ8Vz&~J zog`4e7*Vl@dVu0%?!~^{dgDsV$^_5|R;>?!Wpk1}{HTuW{Ix{GF?4+WW~D1ePhE3~ ztng-9sx504f#{@V5>94JIFRRX9Ia20ehvb&81==i1zMa4?h3_@piP_1*vi1O0|TA9%W|8TYBC&%&6yWds*a-|=^@T< zC&be!_a2UhYlV#z=lxlx949V+0AHX=4>B+^+$nB*LB;%*xo1!zTVs1$5gxNsWXwkW z7}MG%o>63gkM5!rpzm-r&ZsBuN@z|Ixy)^HhO8p}K{=Mlzn;S^c0>$YZmKwdIecR- zre8osM~gU?IdDkg{fE@f6K0JXOKs@D_mZ`0#?bzJEXMv=tc?msyQBmND9*#8*{o{4 zp%M;t_t-TZgnyPRyBKvyT^U5cUk3+?%c3W;NNl0x;<~yEBhZ10muRYD4IdZcfN5hM z_4*+t8e^pet^!O;6Xc;)vtgf+uVC(Xq{_`WyiqhnyEcDeT3Tw~eZHaBF~%7hGzw^h zvF0yEfj6HSCt{5_ssnMnU*d?8g{I#4P%9T|Ip$v;HsJ}q+d!B^>Tmnjfu1#(v2cj` zn@8|G)3g6b}U$yv>7@yy-`Cn$O_Ga*`(vW$g?IZ^kLv2fu=NG8Q z7uvJjf1oisi;kWk`VuC+qZdHuC7bAobrg~QrYeQN z7%?N*SGvoXx_Gw6UinKl|BNdQ?VwI8F0nC9H(nl|GV?m4vow?HcXQBW5cZJ#`B-_F za;he3qf=Q$7R^@~%>6KmALWJddbLtBV@sq3*%3lw*zxpiQ#n*GyY%9$)gehT!c$A| zGCAaXY{)vpGP=;$KYgtzsvW5ta?yhyc}bI3h-1=7?3?2;O<{yWE!vKYz)|D zBH0>>xwlZpWw_bpFNV{LT*_|2gyxiGyMA()x@C<&yS_UdwrY3QA%CM%6GWy&GE&kH zugVf*kPGpisQyYF=tva`kFL^AA}nA?`}3AB|ErM8hr$WjPe;pzCvwC_i$b+YvffZJ zG<{Zjs0akvw+lF>dV%U80KG7J9Ub{e8X=W>Br+t_hX`zxfTm{{i`pJS1Z5N#ZhlW& z$vCfg4&mA@0kO_{^drvcn(bIj|2&w?6{6ApHsFtOJ_!`xX`?8VA>gj6s4~XSIYWNx z1%`wY?)bcw=>rU#h0mh zqMypw@&ZMX>k=hS0{8{#Fwxn&f)G%YxXtc_VT4fN{HOZF#;@3|Q4p|(&?-kMxw!#$ zl!k1|qXbPdbRmep>nETbi@`R<9KBnPI@T<_Zk-1mLe9&Arvd_y#1 zgfw@09D^vDN@%Dw{X=Hm>J;zQ@F(7eNo*c3a>qc|&Q@7!D*4Dj=><#fA}A#5xxx_u zjR3gQ3PYO7b=M{HyxD`qvDtT&^QuO${pU&C2g+srZDiB{#mw5UNR*I#$GF0ba&ASB zVd}31h$q0DX>QAt>kos3Lf=CusW?kt=|L+QvVUJF0gLNlCoSpWfRH+gr)MZ82V5m%t%tf=zFr$ zD-w-=o?p(sp7sp^{O}6T4SN`8umC9=JFgbxpR#-BG6#Jis+*@B@Q%-YPb!K+PqG!T z7Oye?>pfdk-pA||;cUjDwX99E}^_gUBWp-@of=m-jMXR2GkK=<%<4Oss zYMFSyG&S2uQ+=d@#x-4pjL`%mEGwu+c-a?Hof0f{v{OG^>k-tE*L#P;#Uc$1Q6+3K z8Y^Y%5rX9hvKux6@QVehl7>nyluzm73d`7~O;G_6DYRbBXnX5L0SqMrEP$J={6Xxk z$D!=p=_7CqThOfAAi8lhe&9Ps&Lu}nvoU-*?cpj}Xfsc|aB!$QKx(jZoK_8A^hV1y z>V1DfS1l%0jM5*n<6Nj4aDtlaP)tfszWy*wgGqcUGKc4y;2OVrJt=%*zk{{*k`aqa z&X!1&B`b|y&^u9)L9HNq<5u2s%i^fI-{HWXtvBi$*}}DD?k7r%g;QV5=}~TS^59#8 z6QU-i$s0?d;G)Zm3h5Jcr|&_=84eg_lo1TUJd3$YDnGjVm)tL2Y73!p@mTg+%g*VA z{RgyUh@G-p-!?wg-v**fSSuBZb8wF(A~jyr(CZg+pllb0i_vXBJKB+@@~}JOH=@B$ zi*l!(0t7kH%QLW2aM{*uYEYzq^nStx&4;NM+}GuXH;Czl)=7Neq#TAkD6*q)#u+y4_2!7ma`LJ?NH zYi)IO1Jj9Gq{iA$qRY;KTUaxLt0!E>WM|#xpW{@n;@YGQ(0tvaVmPwYDC@p~))3?N zNP~|=WWbhUSCabZyriF%>M^Gm2?*iuZzY}r)W%%f^?FO`V)hxk|rN(ms)Wfs>Mnx{jM^c(+YKVPnS2@dyE+}Lg-}R9HZh{8}DO#5*g_z(;P9kcfiMb zrpFQu`NzE()}|Ae9O?BMc9kH*!(?vlFQC4S1W!jT$@K0eji&# zj!W6XGBdS|rr~$AaZ3?A(hj|TcWJW7ask{QsdciUBG_tjH^{g|bn46Ktva{e6=TCd zFUkuY#cMd2x5G4h>5R9(!3W*2lmmNp`qi}{$_6<}_#$qYAb`LJzhEG5!_yR{;`PlWdT zYV^+fEK(x7-KvcjvRxZvmFQ|>b6dxvN-@*qN|ynNw5J11ynEi$p@e!7XfnO_TX2J+ zE8*#D&K!~VbLX5a63`7}yiFb4N-=HEYH|MbyJ~S@7M9e5UMZQ`2HB0(4X88nEmamN z_*CVrtuGM{ih1lGa}nP)*N11jKH(W3paZ2S;}pn5r$&de9IB6)&C*W?q0hWN>JT0Ls$j&Wc*?C7nLjk_b(oudF z{UM%+_ys^yh_QA;vbBt{Sn&j=Lz5XeN@+X4~}1Os-EN|NX`$ zX_Dqhqa!%G$A&my3o!qB~)(`|%88y%j!-%fSolE0vyD(;NRAROhspZn7~{Ngn?i$2u6_%;LV zX#9|xFzymyZSnEVa+ntDHA6i!g^$%3mQgLvhQN<-Ns!jkm|iqs(N9!mk3Jjj4?@iV zu6k=6e)1<#EhN#R8Dd5l6;z+}pt61qsQkGcrD{KXgj(p_p)(m3{=QYGJwJPy>QZW) zmxrH2hx>HR>}p$gGNk~mVdW+$ys$g}hu>@7jGK!l=jo@7*VFkBfJWZ*`kgX#9sV8Q^(l<9!?f&SF{hBT}%ol4U8AFC|k zeW7X7;jpHkYbvGeKU#UXk>&PDTH*v98h`#7Kl(=GYnDs-uU+hJPxEBOB@S@G_9}_$ zGCXuxQz|D1%I0h_dMnf~(~)oJ?mLv>cEFU~&+_3N%GL8|&Dz7YOGv!OS^FV&=EU=tWvX05E>vV$c`V5NaV!4dpHG55#nca*v_DJ5AFg7 zkl8aM)27#_>b)nscuO@z%Nba3KVh+|N_D%)`18yCki`H>R0iQ7=2cr9b!PR;Vq*o0 z4llSKf7S_&{iv7O6Ca&-;GtR+5m9r4IYMxN0GqqTXef0#t7@9!Vwi`MKGyXU1;<+G zhIr4lR@^tAaVM<0j_mWZ{`A>IpiIW;D&v>zUJ<%DuB)A%kS8p>d(r`2H<4)gdKI&X z{o~p2jgPADkh&a#w}T7M0b$Z5Ll~c0xyMWINHFE*-7zUXT@%93ItNuFLU+PzQKjPV zUG}i~W1?<1$cQFlKX|^At=-+CZKQThc|@64QAsCT%py9Pyr*D;nO;YoF3XBR+E3)u zAhR0*@Q8f|%PJhJC=}Rzc#q23*w<2-5otGPW#^S(E_zlv;j%~gPK2BJSd7w|T|I#b z_Rj|_*ZCi;$Vr)87>H@Lno7Qhf-P>iDo{00HDH^7XWQG4(V^!WxHahTjTcG3x-JD> z7n9bHW-yw2<5ZaP%j=Z1;E3E03{Xmiii@#2?;-CAT!;k4m?Bl_i|XwPJ~XCyWHIoW z9JW~3-5$R`P>_WxJoO=n|F*JNHQ)(8wlT;MoP{nCKAzgtdC9lwo>}?mMUIC(>B+bw z{3M0Hzvl9#<$6)xD&<>Cb^TV;7*l##tVaMhm{2+~1g{d#8^#nY6TTJrt`oCZ$0FW! zuWj`U+F7i2pCERGcFLT}QV^dltukp+_3W3Fi(}OvrU@utqvFejJpnd9?0rG2{`nLp z-JI#R9ZBv%=*kF^4pVz=+_FuNY3k!ecTW31pObu*xeiY(IxE~fv#s}bR8^F>XOJG) z?fi1ULBHdRp$-+&;vVWPjIm_*eZk_piPdowBYBQ0wBSje&Yh!|{U@*6wzu}K9V>@V zZ`*ZzRO&~=diKB|R^kHxAmI?stA+1JY~=~N$tsagx7=vHepHj4U}*}ujJ2}t-q?Kr zifn-63X%zoPu;si-`S?(Shp_q;ixBif{t40ax!hFwCC`TvTuv~o-%AG$xL&c>jJl+ znd1AwyF;`&qoK$dv^p#8`UxQ29s1&&%?WIcdFqoSY{OEMb?4aFi0MU>xp4THOgJ@3 zp$R_i&3qXXp$Td#%NSI8RFRFBXAi7>ZO7<@6!ibO%~!s<{o z5h9zb&m}J|A-O0S`%u1nHyu!*Ov&5tjD_Bi0}LTn;^NA(;^O~2uK+ovknS5VB-0~8 z+Gn7aFIkN4rtCPVoWUFs#rF{}N||yRxeT15dr!$_C8MfK3O5%NOcDJafxtqKOcze{ z45oLcPj*65?$JQi5^J-|@$Jg8_wP2C5U*6L4+Df*`}L_xZ+dO)BvIR_LdZkd11f(p zn|%19dPZh&i+FYo8m)O8d*W}NY3&OLkP+-boqD5B_kFPzZSyrYuIaNmizIrsTD=&LksO!7Zz{hW@Vi!>=NP-~C7*4%FG(_+%ly8Qka8sFO9 z+UxpFT*eqGIu0l%ibq1**bL-h>i{`l0ssiU^>8pUu{Lu78k<>I z*$GjdwscSdtxSceG`JPn6dlCPEUjd`oXpg`l+;bUtWEe$son}B3wnSd0Jdf>MnDf+ z8#`yPhY;0YxM0Zj>o6-7@GlV;YauF4MP;D4y^|S`3&aItW0CZ*a^s*9Mg|HxnVN%D zC8YiV0r@0EW$EJL0A^)%cXtQ5bAs%hELhq3`T1GdI9NG2SRfKC&YpHIMjkA7&eX3E ze`83PIh#0HIk;Ha+W}uOjg0MGU4*EpAoIX~`e*B)sQ52oY8qO|~ZV-@vIP`zja8`#L!(ml5bGCPNGBJ~MGqZD{{&xsdlYi+uxH{SV6^^M1 ztC@|NEkx8AVwL?rOiIftD*sF4l>!SZTZg~2AY}iCq{F{)^&hT5CLpk!{~_#RW&S_R z{)hDI%wMtpyVnp~|8n9#r2k3OU&0V6MMbcLy@~5I$nwxQ( z8*y>)uyF8jnX_#$;bPxh-pSSol6xy#BMUQD z2RnZ z$;-vZ&(6=r&Hg_^AIzMbA$9u-%FYJj{2LgOMX;!=i>1Aj5S6;UEl|eZ*4WI+!ucivIkYZ&qH8VGIwQ->m=CCsbN}5{z z)reSt?1F#Uva$Mi%l||YWc_zDe@p&bAA_j;JqGEIkao-ZuYUUvH(rzX|M2G@74ZMi z0tEWMM*dg){+F)*()GV$;D06j-|G4=UH>Zv{#U~Pt*-yy=tBOVCpI%X$ll8x@;pYi z;`;=7mV-BzmzMbJsSfZ*yu}}Kh2$WkLH9t1Y6N9v+qoCY*XPu&n_Tao_ffEXVfuRf?|)J1gFHso2;aiS=I7|=UQ-Y}>n zEGB8BT1(4otU&yHqab_$;~CbkP?Y3LRa8H)A;(Z++3==XH6?O3t`x(aO1^clsScNz z4GOXilWKr0ky-d~0{wPp->U*qBe6^NPee>AwYc76H2Fx9W%4+wGn84$2tyGN7lBbt zHA_--9I_D+Ogl%b&z94AcPLCUMQh&14M2)4TNJlPF_i7QmX4skTKQOV(b(!_7 zOhX4?B*wH87Yj@q5F{An*y-c=V4#Q)%Sfr<$|_+v8l&T0lgAZ^qU=EA)rzJ?A%*}| zcIIIv0?!`}%@I)>2NB|1+USP3x!egCtm@H9$82VQ<|Uf9<{k#k@$IWEd(UbxLz))I z;BTp?&ivkHSW2KAi12uY=1uabU_?CPpe0hhr01Og#8hJ~qC+5Nr{%P{o+!Py7!(zv zq97q?c6Gx=wyFk`3EaTFa$C1 z{D)$j6LerLj7@Oxz*2&cK3=W1g|HZr!}*yz#6bru+D^E9!LXG|49SFTcEO6C)wXn7 zM@T8j=LN{K3$En0F=&lk?+%;LbD==885g)VOvhZ0hktPqfcmOGK_dVwT24pw=>l!= z)B1U-D_dL2-c0~8GZu#b9GcSl7gEMT`(Lv<@UL_@Oc?5RG1}yxdBpP4)X%t}g^Cu% z)KETn&;LQ>|C>_ZPP`~WyzWgRP>$=%{iLTLrXT1s62d>`gpRBX5EV5W5#PD zzhN{IcgZu7+j}6Vi;Xr@VSO)$cQQgS4Y2Uvh2$`~2D%XydHoy;D@e2~gPViapS;H$ zQeNkS*agvSM`!MT7nx*5N_Wc=Y$GilH42(2av0lS`hnFj7nc)`RF*-_7fN*P*Cb)n zY*HEhRzwsKTscOHwB;5+GVSj z_^*M(V(3mAip-Y|7sjcGzsr)c{v>O8;-y0DM?>{GogUi>2M{A934bb$#v-TCnsp6Z z_~1-1`nPfjlrB6BJ>_~LF7n}I*{wJlCk9OHH*R2Xc!%?AqBJ4OK@1ABW^90vD*b|l zfyz2~(>*_Y3!PWbCv!R_k)XHb+pAt;+=h4?SYeC?kA_h!BRW8s2KT{EtuM)#>bYlkA{H;mq zz)kPnWoTO9ge;fhiAsXK_x&1*NRWc^HMCl02lm;@)_xh-k8GV|I5eAlKcN4)5~+q8 zpwLqO-tM47YpJwYuCn%vOb5cJS35EZn}M zGf1(~q;Kwhg72grTnJwZJ-bk-qZx9%=zWza!)^quY9}+0u6;y}O+McIcruOqN=Em# zE?zMHnFLMjU(P}DsD7fW>9EV_aG05KC*cJQf)JI@%aQ8D*_Yqf0=M@5H;lfT(TZ+}8A$Ia6J^ zEb&$&=((oudg8+oErP#D(eF1qlL)Yt#d}&9)#f{VZ8^!aNV*bP>oq9rq{cdd*Sl-4 zjTck~+X$^hOSukjT1kb~GvYn?H-N)AOfq6^$Qh0{;;zV@00Qf)<5t@-B`S2`Z3}m# zE?7=${{%H^K^)6Jb4S;Ijcu|yFj^V88`9?-UKjbW7L2ZuJrDk9+nM`F(&pbbS#tfX zV7ph%(h|qQ#~sPZ$6g&_>1m|GjuRbw$J70H$fJ!Z-KuRPxN)M6JAl9tl9#b5(Z3*5 z;mXhElQ13e#gO=OJK=z>ow(?_ueP0%00jB%Sur&!w%o$8H6RccdjMkBr_0?=^Ezli zYf!-4>Jy><>4Ia*$Apm}lJYjvJR@>7K=j*3=)@VNl_p(nN{7%K=QPU44D29w@du;D zgvh<=D(a2RO+yZ16@ybTPf57Xq(Wg8?SIe@8;(CQdthN>&AN&vqcrR-4j_%Lfj{Ezi`KnvQ%f+{=elX20 z`&%!qk4uS~_sidEcJw~M2c_YIL~LxB0iB!Yh7$-c;)=GuHA0tx-gctl=*J72+F6B; zV8@FshEn~@8sipTIaOoQXOBZgHm*F&+=PvAin;8IGo*5crdp1*97;g4>YX=Xv%g3M zsPScGX`)YGc(pBdgLWS7nWKf>{j%$Lh-ap`~>#71o~cr@aG?*v!lt#<2Z zbL)fgxp#YC$IjPZ+HG&Vu1~%P&lz}jy)+dzB6997_X@RqOlw1X1G-<(GT&z0Qev)L@9Y-gC5l(y2ih$y zUn|q1N;B@um!lVXIfad$V0l;~jrlCR6(6#<7h;dA2B+fc>Ir+^qL|8BT1XXh(R+J@ z^T#|Br%QgTfjypZWeWCKHp`v>1K&DSjggk_m+L+PjDg+>@hYbgsTX%L4mHQV?Hb7j z{|+ZSKh1{JSUJ#_pLk8zYA}?9LS8g0UfV>v-kZyq(1LW5w0L)y2IROSyPIXUpB>k+ z1s&L-IUaKb?|z!qrJT<_oM1zCg}7-AHhtFi?a^o*r@=tjpu166< z-nZ-JFW#zkN9i#}FxDjn| zIDywH+*x1&>4O6KV|`+X-#t#=z9!ho34BMqVA_4$upC1%Ya2F>8TqI4$(>SIc+_9# zd4I~|s))d>@477u2b9JIrIngmxnNsZUf%!wgmB(heHw3|IaJzxG~Ayp5BRFn;mA2_ z`x|snC196|(K51Qf9c_`Jj<->pf9$oNk zzC+t)9Q|O4i~x-&Bqqj1LULi<(OX$pJIY|r9=pvVOPALkJgKVogjQ+uM~;-w2^wYB z;4{?IL$`5#R%Icgd~#Xm{pz${ok=)GcQ2Aj++sZotY~LoaCqfi&r5b*tDMGDi;HDA zKj#l16BAAdWyI6$Pm&TQshmiPSb_bEKOzx}CFpxH& z9YeZ^!TIA|;DSw;?X6HusK(frvX%uKp2zF*G~$(rjZlqM$rpV+cJpb(7jE=$n2PqN z_@fLjx8s1KuXH?m8hW2JR`1#N9H&6sM4UhLqE42Zfp6ZxyVkk#IbP5t`L`eo+*B>k zOM&TE>LC ze24z$2a1Pe%Vu!;wa4yP`^vjZ`|}0?eB<*0gDicc08Fv7LEi?$``Tel79+>afzMqt z&a49vyzZQ_B!tRLF6O%)?&@lI^u5?Xn0pw2-)g(~?P9>dVIRuNGsg4vFC0JG@j7{n z-+oiv9{bmQuc?+orPzV|{rh_3ZABZBv|?FAywFu=8zIM?Sc<}i-8VKrQher=*wc1{ z(C|#32@JkZPW!YtY!@5rftrl)ATfuL_Zn0n(CC<*fv+=CG09NV)t7TZ?u(5#Ov{Fy zA?La5-m|ELsPLr1K6#Sxhuc$c)^2BkbLoIUEba9`*6OuIW~wp@r!6`yiG^r zW%tVlw&0)n;JuZ$w7q7AudICt6n;TJ^gYBs_{kZQe)qnhL?v>{-upu>r5mzPQ?Qw+ zu{!P({?c-buj}~7X5PjaqdR?p)A3ZV@9w50@osL|K6hmsz37vmKC2uPDIj1H8R0^S zz~m1`N0xsD$YXthF8=$U!;Qxg5K8bJxFJ z7~kXgCtd5=+W&4{+O%P;`x8nQcubQi7&tTIyKMa{O%Hh{ue9l-nIz^WOg}?qp|CI;a<7Vg!6|Z5A?DpH2M}hKh z-l3?qk3)2{aJQ@8bav^yZCZL^t1q=sZ%dzLudZ8}c7dEMa1BrAQiPwRUT!-co5?eM z+lF2|MNZ2#A8-8G9&?O1#y=*c>{yccsIXiWp2E;(Vc=GxtFGq2J2YY= z9Ix4hySqhsk!YDVovAK2U^9T%1{m_BIgZRYvzv7zvYS+DpWPg?8qQZz{@SIZp;;Td zU1ovF6KVR>%;a#)t-+u_RiH@nD_t1vCz2zUeaoslMR!lE5L`nG5@v30uH$j*0_9Q` zdlh@*`u(9{Rf>4=)c4?lD*M&vH%yDB-RW9tW^>o4a~fBkeYbD-{G@7^qcB!|;UEdH z2ui9LQzR7jAxvt0Ailra%hT4^)@HQR_Gm+_g%;w9eSTskeXotTnX?ih%=cy}?C548 z=d@kxnXDB$k)7UE(6;&c=CGo-u_{+mVF%LJ=qn0E!qFEjljGMllz3Mg0Zem`QNO2X zF=3IDhv9N3=%I0A2R7Z0;gmeuF802%8ba=}kk)_#kWoE4)u32^f-+NW0_PE*9 z-cC-!Ya2GODLRl&YHHCC-euT%VXpz~DC7djQ8l#Jx%KcIEwo@f-QQRl z_PLmGZ$7+xoWh9A@qx-}ZidH8#EXdjbnQ(B0J3o7z4%-hDYW=N{U)z(kB*Hc*bnP; zhxJkEZEM~(ybUxV)zc{D&K5Ed{C8%L}#FruYJAJ;!i9Uz@5h94?0; z6tY4me_GN@Ve>2Pcr;t}iQavFk_!HUJn628I8;)6-k)~5)`f6#%hWG2o|CY#e4Dgp zDmtY-Bjn#K>hfu7zt_5=BeG%j1)97fz|Bh5<1Wyf-Af%uhfL@rq%)r^*?4yl(^;6A z;oVU11+;nJhU?A_MoWkIQ~(k0u4-70qxjS6Z-aqwnkHKjD5zDM@?PLjm zt=LoJel_1j3H_weQ~3G%pk)ZYvpMs8i<33Gxj%Brt{wfd+-9-XmW!C(XFim)Q9HDR zt=k3#04aP4o1x9~tlFHYBCaxI|G?SNyLFg&{I!l%|Fr;$T0rOa`Np}0J~sQ0Ks4{L zR%l7b(4Mh!=&stl-+^D8!Y!W|2>+~IZqGMHk})(M-yYwcdS^zqw|MkQ=8Q$JcvHOS zJ@U5(0mK3xyE%S4%>~cbc{fB*{z~C#(n1&-&1hkBy_rezpAz!8?|Z4A5Agjnf^nAV zF5F+#&5>6pEAr7vQ0Y6UE93TU&`>dBycoVZPojT=6P~c%y-;z6>z(VcQfrN6)#A%Z?8l2V0`QciG=hIWIlQ=N?V?`HmA$Agq(D(r)H5i2Tmy=b@&@v5mx1+1+{a z>e+zzb9t2(|D(f0F(U$wj~L5~haG5VqytMs&p-UF;g8962|c~GUQXzQ1P$&-{zuGx zC+|wDOZ*AV??NU~FPB+i+~ytY7k@OG4|z-$O;hEc0|%Z%i@#}O0_v_of`1-KH1Dr@ zjW<8$RXe^{QHg9h@rNCFho1vsPx`wb(ZFX4f|gI4o1OXjL{75Va1nSBp=kJMb^*gZ|ou7+76)34?$hiF=b&CLpmHk2x8K8k1u^ zr}V`eV`HuAYc#6TLRxK@gLw-oVnTQ4xN{$EpTlgE1dE!c zX2@rLekkANYU?i2#&Lx|h>=h_?i3Pj!`owr=4^xxKkwq_T`eOA+b))GOTLvFK@(*H08vYu$KY9O>ATsF>|* zf=tXN7?_7Dcb|9s<3xy@oLae)Xr#O36$C-R2<9uP_hi&s(-noKri|CsL&VdwvmAja z0CN9($<|pAOa@qv`UIQJ?>8Z8hb7^Pp9Pk_-z7{20Q>Q-Rb;Xq4ldNoocVIeWZ*Lb z9F1JH;}SV3*oSbr3oc>%<*g{XpDRwtUr!(j_L7uhC`qVGz8<+rq z90-jecy0ee!%d9XA4}E)03nCxYF~Yt(u!_w2G2A%>XrwHO5+{MQ^kqQv82L6=h_aJ z6tBCrJmJvu@Zht%F-`eS7v;`>D|Kbm84Vnozg@sgc<*tb?$>+&G8k{7iB-ua!1N9`cHkozw48Y!n*XdvVfFCGd_zKD*tHv;ni zU49C^k65_0>&<9*hRT)Fk2yNJ$!V`zvTfY&KRkc=7oU%xe=L@yq!^KjL z^#`9SLNbA!5Gd8jliMcbTM9wu`*xi<(B29I%0ui{q=@l4MY(Au%cMFnWS7AD-S1pc z@M$A$&t23)A=8VYKb9o8-gfDJVRK8KjvkO)|Df~;QtTM}#({sk?EQn@tGcj|Fk1Lg zm523Ou8qm*XYlI7nSbNWfoDYYC7dxD1&=zeR*Unl9WLyCu`r~s5M$I>DE9D{Y<1S1 zH8(4y~o7oHlh`%m`LKd9SJ~I;*qY){IaTq&dP_uUi1!RF7*IYFhw=B34#s-CBw^{Jy zL-+clBOBS=mtQw+sII9IGlU^S24mqhvk?60@!;R?3og996`a@-9VK?x;1pD)6! zDPuth!S=m}@#sHa!EJZmFS=4~FPK)Qn(X#jxaRUHxaRUHxNhDI{Oz8b@yUCy;_=5G zLVQ5zw;%|3_q`>kt9ONNn5v8muh%QusuC9$hi;v+U^Sa?>DXa1V5oFB@!QsIB4aDi z2w3s`s-S!H+Z8KCb9&g&A$aDozaZM)xI96y@Y>n9YVMVy`_}&a3rB{tgK^O_#XCEd{ zy0l3VTCMo=eRtuG+i!*0Y;N(5#Gy!WiFnibjSH`X)oR7@+&m2E*BdiuOq1oij09)_ z1YSYFs#U9T^s%uXo!jH;c~>GfHWp7l{s?Zl z`34+5bOes-YV?q7gwD-9p~9}zt%w=Zr((wRsp@z`DZcn}DckHaJxOQSj<>`(L@N6y;A@C@@tG9b+K%G78e)elP|vux(-XfTZ=ifw_)&w zgZ$o=>C-O5n9-w9Qd)wTm>9H4NfGti(PPK(@*7JyGPHiirQ{}zJlkT)PwThg;m4jp zSy`F9as~rzHXBpXo;sC}NB;4Y$Z~uBKZ~$t?a!k7yLIh?abtZ8-;JOJ02vwSXqVPT zROYW6Hpy65Y;3G-lVNj8g`)-!Kl&spD#UJ)Hf>VSv15)5w07*=h5P>R3DI}&f4U5( z3*^aBtyU`x1_P?AYfxWbe-;f>g3rJB8ZK88J7}Mkg$EzFA8){7?%gN)-D0tzLx*gnr>B7sf~qP9qg{RDbJmQ>{#=2C5M;M+k8$J1 zV8-;RB6oR7NvS{Apd3+rk&gNRmo3iPTDhEw_Zvhf!a6Rnt3 zVAa~q4AAzi!wDg-GvE8yM{wlGQPFpCak1!_lY_Qx+KB2>SXhL=KJcjG=3_3c8Ms)W z6)xM-xc{3Ue#O-bZpBY))@cS*6c-ocqfb7=)GMyTN=YVl3gDJ|{*Dhn{uI^K)r!{U z?mc^P+gRR_iHv`?Yf_t_tnBLt{zsA+q z-;UZqcMpJimm5z${Txb5E&kvX001BWNklY1|)xF~+zvJ3xt{Y^L- z>uny77b{o(pb#uTLS$OvUtMl5uD|7O{PN3sW)xX*aWNkK$5SG34XpnY&%KTpUVH_) zCr*f5Xn|5tP=H7N@f0IjZ_{Ec4FIuVC{kH@Ieu9E6Xq|tC1A}|&;7xSc_NzfZ@;q` zwYBn~p?a5#*#?9_WOz1uRf5^OC1ZZ2m6-d7Td?Yf)rw=@!2MI%{#dpa7e;Y{Rlu>r{8n zQ%dpZGq2*U_ddoIGpC?O_il)dje*zeML|I!RgVpMNDfckT$I(TL;6bMemNPjK>dF|xBV{gG4x z6;KzjIrh8nSL4{RT>t0w8$&y4g%IGA&%QuHLz*0b;=p0$i~`HPS%IB9n>JQ&*tA8Y z{9k+L6Ri62XIyo~3}k1w2LVA*aWR&!ScRWAZO1JOuJmsd76fkt==*y5%deIpJzx!N z*B)^&Pia{t-dp^EpWWBg)HHwu@k2y;l@mAo>8}_$v@a%IG9Ia^zU=S^4<5!_i$6g{ zWi`5V{=~mVh*~)BBui!;hl>>YC9l-i6yWsJ9Re^|tV#)g-`8^D7w_9Ws zt^IjDYHFGchrRpuL(SLt>C%-rbmSQ3%$$m})Kqu{FY@wE;eTI!BRX>~F)jv~8Evs^ z|55DRy+^d4?#Pj&*z|jNC!SYT*Wyq2J%S6mWMjtEOVO!gM?^=Y$&` zPbnXHnzlPpU>AW3oy9r=mAjHsWv@jMe_S0^c&79^J&s4psFU>nV1km;wM6tkCFaE1 z^F=k2P`aM@8Al+qVFMHiLVZ&OkR%G9i7s%al6I2=E>u_> zs}6bqsChDZSj;9|GSRouI4e_p#LyF3J}qgHys>f~1)`ekTlt zN>pKj$dtYK|3p_`(uQ(KNWDw_Of0ZwR8*eIZb8W}lx;*ZK}|1w5EbC33T;gg&ibI< z`7?ZQU*>TmB_*YJ?1^W1pad7D_!yT`6d|RYb%msawQfHb*_K|n5m8`8(*LurW2t%8 zJxw4;neMm1tEr4dHS!pC7=)4=GLZE^gSAlx5V6~e_#u(yK7|VKD3>UA!LnVV>g7>{ z?ka4$=ciw{V)Bf6m@{KCayn$gXfz@(?^yAMAx_|C@#kRikP!54tx<|qO5f(qM|IJ!nTOUJ)}YL6Op1O zDj=l)P2}uE`bJugN@ZR{L_4;q>>A~Ds=)UQeuNQ~z7j(xWxg@hV9B%@#}$|JQ4G2U zMcCu+92t1$CEFq)Tt_4-Tq&4>g1ye7^gYnzI8$apQV>wG*_A>eSZ^U-0VA5NqGzN~ zg;t;n5JD858~m1JDV%Hdqx4#({$>3Z?zrN@g$Z0|$l~Ef(^(39T6It?BDA_{^~ z1~vj^H=%keSgOE7l(>qP6N*aySYZuvjzXDl!D>0ZphF~OtF5{bo&8C5M-oznZ30S8 zPpYFPTp@62cHoMH(ml%uD&M;WW!Ijb{w5MtNtxFY3D7|ozY&*16_^-R;B-WVbxAn{ zRe@b1;bT-M7($_?*yR(&cY{Wma=0WKJuEF*4)oF2uySrL3h1+bvPA7~IxD*Hs3Mg*X=!pL$) z>K&t8xP%H^kzidK`cp`cMdgA~DCyG?lm#-9>s|5DDCwPplHNIpo;nyQUu}eS)d78` zv)+20wQNgoNV3)rCZg%MBC6@Q%qN5?eT^=Yqu3-gZCGWTsD%c2?^ zyQOb0T^*CwNE^Ds2RCXpA^)ZMpc3Q3SYD0v`#xlT5R{GYiLI$RA12WDAHU?iH@m_EaPWle~=Dxr1=x zhKV7AR-ikkXlQqoJT@CJwxs#g+L24TvJeg~F&jjAx5#!~C1_JJ!t zTCtXn%oKQrWiuU5;%GV=vdYuThSc7X>gatELa(T?!(c{PNGvU&uhp2R8gpgWM9D0m zP|wbBjj7!Z07QsM`y32auiPcmcnwt8!C95t>N#XSgEXBczPUIRAgN% zD{jin{nyCTDn|6wG(@T<_DAxDTxRdcosz+;GZMr#M2FhcI#?yxx=lH~=cmxlMHL}}tH zE1V`LAyIVWv69#}ihD>ls*0!uidnB}rh4GX_(H7T=Ce(DXH5g+-x#AQII3>5F z5Xx92?7eJE22}5b`RAiDwXPKfsdJ?0+EyS6#b}&ML~hJzojpbvu0$CaNy4(VU4hi&N&**LV|Aff>z4a-K!+>vl(ruaZE zuNcYyT&6ojKBza2GNJCWzNqQb0nXG!xT0+U2#obEM3+_}>To{nE4IU!TM<;b-pq5e_ zD*ys`FK7$Lv_Wv>q@zC84tNFFs%sH@tN=0JY=voWk>VN!JM3AXYfGxCsxRrUi@6IH z6Pz;!A@h>V2vIfz4#fbWOFU%W`pHILQzPN|BM_IQ_wyV$KMCS8f!?g3XY8mDY zxk%so0ql29grjpiq&~A0q{ba_wpBa3KZ-6JjC#g;j9@dPB0d@w9n)bL-4|^)?nCVB zKZ4YGR4Q&j&9xVyVo(>gT{FD>cU34%r3y~gTV zBmi(;cMb_OwWK|v!Eg&8WlNdz{uW6-jj=@w^qZz*f*sHI@Pz0#pzLfWY4IMv7XKqn);$a6i35=O{Z>SMuvsPPabQ|u0wFCLl{bt*aoTR9 z07JSX@o+wp-ueN?LnUVga7AE2DLhu=n9z^yY7qovEcrx2V za4Qj1+&>9lVr{+RPva2>-@x{GRla{0nS^;Gj4)2M=C+C4C+k@u( zH487s$*DtSpe3r7$%s=^2BY?>3j;V6fixkLG%>7N8Y3{=Q_h)#WZ((_i9hZ{(%xLT z#heg>x@mn>N1!oxsT05Y403;Yp@0bN_*$v#6PZrYgo4K zzNxxlU&1ZE2~W)Dx#>UZkrH>ZbKU z?qBAhvO}tlY+D57UE1NqLs!CeQO@}ST%m&(H5pLRwH@=fr2ToYtUeh0K&x_v@fz&+ zsJQnM6b?&UO(D1{BO0Aq(MW zj=PCHkax{kc&+B(ykF5aoVs-~yj_yd7vKs_JOeY~iLx<&i(R#&1*Rj*a_Q{@EtYQg zcoAJ#j+lZn7+h@EWJQ;DsJV8S;!~qH9tgR{r59wweQ`(qHy91_j13wPY+rm94OV_!-M5W!7nL$&{h4%3{ zdEIy>E7aB8^=@Q*um;4VZCFsVF(|{RJ|PBmlX{-s85X1 z2Dpq^H0GI6;jD z#GNRD?L;xmr^`Va29`HH5!HQiP~JI1UJpW0b8$~3G(?f<4ga-P)*xxeQ5ee{@FvEf ztZyepi`Lnto!`f=l^H?_ELd!);^LlcLtt4`hK%?P`%!gy8`(QMF71z`EqNg;9IEQh zYN}<$b)yxTR(x(D64vd8d4E2r!2nm^_NW-v1CDkn{&&e*yc(9ZM}msVjw-D}!p>tb zRMx=LCLX1IJ1W+pzDJfn$RyavZ(~U{GFNW(y=VWb^cvvsg7-|cT4+m2(%bbBBWg45&s%K|hEHFe1N zb&tp>GMz4O6;4HJ)5jXC=8t5Km#C6Tq%Qsu=3g3gg^{3k)&S(syhvumRdmik!kDhG z{CE(pRa!JSLr7v<5K&b%q6PStlDcVqnG+}R&?zK8@}($h(NJ28glE15eb9vB0pctW zuDB@FP3{f*=i3Wi0x7D3vBX!Vw{sFodUaslllto(B)sswD7M|Srw~z} z{07HOqi}jmUu1o<7SxOzaqF!4QA_ko~Zf2@=A!+AP*!JhaP*@4`uKWh$*^bh_ zon+UWYwD2k^cOH3EekM0DD0nYMW(YJxz|sWwS{9$ZzQ*3;EJ%TFu2a63N9E@=V}#= zQ`5f_)0#|tf2}0czUlw*i`Ia6ymBSeOL>vrv^}2@eJF0r=tb)hRU{9Cu1$<-Ixjn5_J6Qc{uk@U&YdzS#PtUm-?Jw^s7 z#6VQHA*-Fh#d0JIZKF`uQ_f_fiYs9G>5$wdw0s*12X~XL&6N%6f>`r9G|-z-W{i?${_f3rmT^p+&c9_@Cs>S{oMyYBR~0mC!x`m46t8 z(hIU7s6+vgYsbRqmhTCp1fa1Nphlae5|`U&of+h-PR7C-5U-#ZYO9p`R8QiNz~5?S z4q{q`wt{lhUe=pEVapt-lO%zyON>R`B6`EC^AA~3# zUZeNzX++v8Qj+rH4n@!c02gyTkl^S;bJYu0+6UGt^?U*@{orNFWp8%#M%&;S(jMmZ z$6L;#OtiBtT9c7|o|jgOn2f%YX#;@EJ-9ti{^>GZq1M!7gh%nYIurO%3PMy)2&Vda zR4Y@u^dA5BCW7({+52kBdgq|5cW`@1Dn}{+mxj)h5PZ%kU)tqC$(x6k_dYtQjj{AuO2$*P$>E5g1tWQIa(y&5MA$=RY4OBLXPR;8V_n4Q zM&hvolra{0OM7M`c36j?b7;{7TSFeSFy~QOE#UIVI?qt=hP|*{)u?73WbYM3?!21I zFJvC&VRkr?wsIS+t9HZC;1=+?-!!t?+hEfpLFvqki=fCFS$&5ul6p^^GJ6I&H40 z8Lr|eVP~f?JDjkVR|l^nOC6#HvpVWf+g8ei4R8<1hI!pl$)5!p z_QDW*_-pp&8f~3st*HZR@g?eHv5&O}s{`}P&PU+VC$Z~xGl7emj5vM61hgyo9L8h% z_EI>n9g2cW1|W0sYFJht2(Myp0WoD&s7_0gSTz(G4}A(!RUcOI&Mu6_XMrN?mE|yP zIU$-t#$)BMANvh48A+6%b<83|(MyZff2LSdt7I8xd(8}V(TUy9#_Tg4?&##5*c)-1!Zp5I*tL&7BF~fPwOdeq^+npaHzXS{D>rXFBk;psQ4JGwW3A71 zAtc1;YHvNc0%?R@8Cr!^PZ`KwGpu(5buN8>4EL1RW`T3&K-r5@s-uc3=pFU@QRcmc zLwdkHq`h+4HX|zjJPGc>?ZwXsCMJLcF^dR-k2%mwlcSZ_Mhp%Y;u)Du9PLt2KcSmu z9b5qigR+bv+a~rNqT;@t;2Pgm*%fFcsJd$c++({0{6h3O`(&(19)@I4U_Nz8v8ca9 zz8RY)*-@^M%vj&N((Yi}R`$AW`S|{tq3zyIN$_?`I%|NdRX8zIK3t2MduKvm1RvBV z#^CrJ(~xvY9-_A%hGkzqP+1Ga+u-h$irT&%P}Z}9XwQe&Vn*H#6Olz}Ncj%^^LFJ9 zU}z6n)J?&dzAzV6!uCH#hHkqV)z@E))1&($@kl;Wp8AUEn`R9|x6J}rjX=G}zrft+ zHxhcZMS0gu4Shg#>91f8TZ{y#3CVVpGB)!X>s;t~=Q|*k^~}QtrCz+cOD;g}f(f#6 z$}a4Nn0I~!8lzD4HiF8zE7tG#!aidtYLmp4v|uqI@Aj!k&s-1tmks$88_IEw?1+*p zE`}o`8J6BT$ols(n10LimrsJ}m|%?s|ND^O8J$A(ZuRgUNLqUs@KOlrF{mBg1JNID z_S4z8jR)i`nh>12W-PKCbue#~CrTDFVo-k5c$DGklpfImFEHTn3h|3GYAWxnc zJL)I*g!S7!00BJxGvG;2fbHA8O^-ia>D$9;kY}+ub?rE$Cq%>g!(NaY7u>^gP&(@( zU5U9PA?EeR5p{JLoDwgQBdZN;f0=@W=U0H#%9&gJq@FlEcO)QCWWKuGH)c6-X|IHs zH=RKGSyc25001BWNklL|IamZ zrPvi!Rf9Uoo-9w473KF$M#8_p2ORajmoyO6PwI)n*~3+nW)dA9BZ}bHrL@kb)nn~D zXAWd;CQaU(D{}E^Er;8_-3{A}p{Pp~2YA#b$D#g`9NMl3xZ2z>^Y(>TX$ZWVZ2NpL_RoWGz|+%c=wCJ8TCk>T3>gzVu?NU(imzl`8bFs*>joOuq zvd;2#uHu1RQ1*H@qDy>0=S+-&Cy31C!9-{4>lqC~pz%OzBq$r)jXB9;R&Lj3Ly|sC z+IATEK+#TGg6%#n^H3PnRM4 zu6KQ`TcfQ+!5+a#u$G9#Pi#F|0w}zrV6!M^=j)IGODUUBh%LQxOmhD2Dz8z6Kpfl5*SunDXy35dR#fgQNqC-Iy zOuJ5_wMwhX=@I|$AJA^u1{mDog`yklTxkE%Pl$Q@m+%{?$cgk9m%&z16IxyB-AGx! zxdF7AG)&azTVOA)P#8QGRAse6RaP4jXc3JNWWB)|Bt-TViUM^_?19=8c^*T&2GaJIJ$}#% zl-M1|f^68PMvM7u1I*R6y6X_X>&zw$Pk8nlB<>H<-A948n-9RWyY+(B83rz$NnjUk zK!<0(K-}>{T?>-ZL6UIz6gvFlQ`myd6{j{icNZY@(T|aM_*77e#9mT~_W%AGmd0eO zfzVRxLB>np=nEaDK$~rck)mTTYI*J$o~UN+;>s~>3om}-0XA~7V)RLqvNhyYBI)2s zrj=Vgd0^mB(5@<#;}wxw0QFv^Jp2XHf7%X15PO%*j#^~Dy9&`uHtOG^zzAjwW*-+J z`mUD(w&{2|($)l-fh1r6*}mP2>=%|Ix~L*J1$*=~GXL?JYIX+VrAT`6Yqa}zGmQ26 z!O>J(kMGetfaXS(=>_4MQoz#2L z=AqA#wq}Q>u`4yQ+bvy>xPN`udd_ocSyy3@mD+j|X6=-w+$B3KM6P087pfbCyEEKqLutpbGAYtg}+7wG&kjPLtQ2Qh-v~VTwkV zTZRdZDWjBho5}5gAkp~7FxaoRYci@bQ)G2E)z-tl^mjJcDKL$|xP!PgyHL?NL-r=+ z-7*m$YXNb%8qVEN=xevP$xXy+~6Z8(nVsJ(9j@1Y@Jy1L`uW_hSG!Qvk8AuR)fh z7R6)wqAnpu+_Zv#n1XU&p1?+Alw?shZ#sc?+uuX&oPnqq+8vJcB<9&~#N$QW$r8k` z-3j~GyL2f?A^ueD9U?gD{kC3JDf<~bqui|ZvZ)2CCX?a@<=#6NPFya z*l!w#lHNJ8bZdrsHxiGYM%?nP%zTHI9}gnCxC-U-E=GB$cE0n}0_J2)VL6h&-URD+ zdr?23yKbFB1m!Uslz0Th{rd+*t=`xXD3Cs9aGuu@(v4X|(tS8gf@tLgXzF5Q(Qq5w()jHYiXTX`@tp zJBxzoVDf64%3(Fa-9HoV4sAfAZ9af>IAJ_$;w+Co+w+`Y5lX%puQGp~2UR9Fe~jy&IS zG-2#JqhE1c}>;SHo7aDT(4YwCm6prlqTImZk zk{=RCf)#>nI<+lS(z01Sqi6I|l^zy>zs86nDt#mk*ibvbQ}zx@gM%t$^Jut^Kp{|s z>S$cOe(P|rht6@R&|WmCDrjZm)HPy z;G=r20WBS^*CNoV8uW};tz&rf3{Cl~5rtk?@Sp^(>o~{-BL?0CXPRRwrTx^OU79c_ zCsCaLRD*eh^+I}gGZXfU5H&DUU>Q{7k$MscE5(JdNQIswTUc!@#bpwN%F;ThQyNf0 zG;9W{K(zx|ovdAnn1U7;*ekl_ArOM88^~ z8VpO1)vp91R8n=Kz^S0);!rM%y$Z=tYXzVlY=sPjHsGV!RjF{9JnF^YHS`v7_3W42@>dw9M@tH%}Owdii?MF zXd?4=NkkhVY)hU70T^m-E$L=r=DH0uqw;krJgqQUxO>ShoRH=)5q8dobHbr~>;U%n?O73~}IU3DFa`CLh*R$2qE0L5WfY z%R8dBSg?gsbru#_c@fJYV#`}k7JI^A5NhX$QJq|wsPtU0-l|~Edt@0MB*c*im3IlH z%ZcQrMAuN2_Mr;zM>Hs$l9fh7Y>+S~1l5>tYGZ>P*-J%$MwB+uad#jGuIBZXsqMm4 z3P=|Z-9RAIVhO>rjIdsdhS5w?zZ3(=Scz;YgJ}{4Akx|%6zaAh)_P$$yqg61Y_;YM z_JB`4!F|&1R(f|?p_q(yb5Y;R%t!6>2;cnRCTv% zI1x_~@vU&+IyZ%eIC#VmqqNhb5y13>Ix9sI(&l`vQ0EZq>?qQtu=K3mC@Bh!HGf4m zqXl}bC6{0${P1_`ay|1964}BOmoZOg*{ZM;+izkP&mzPZxOu|Q0cf3R-#&>uGjR2 z_p3!(Qw>(Cww@R&;cO{eIMnD-wcSNj2fI@X9AfT|)8R7}orNZ~G_)+WP!TssD9}6i zl(Cj-^cRsVCD1cGqBwA!!=R+(6C)~9n<#(|QQSP-(!sD)E6oN`*78I}6KHM8WGPXi z!fMo%xK=)1Xt0h*0#&5IFq9=As=^eY!Csa21+t6_R_Zb7`WDep@QPN3Uf*v7CJxcr zUQ}hqv#(=qfFT+!&Dj+Pu4Y#mG$>~i%N3@zG4@R3Ga(xOrpCaFz>idUpAHQ|DXLky zdZ#uCzX>7&Mx=SVC#1TDJHFKRx#{&qDD@Rpu}Fx5g+jE@kcKzg3AEEfQI&i38%P>% z4K5tGBBwgEmiqO%UCyYhNn@df1k4$#6u!rxGgRvO(P5#ofSc;jLF7!gSqnca+)LJ(R8 z3=)oJVN7sB7|K9F5vgsthKjXGLd?$16)Vy|Ddxn+rFiMZDAq)=zQ5v8`N5vul z;#&I@+0~Jr@TG@i@ma!wD=2;=h99ak@0gxRttU$cjl|3f%wiF^P9QN81JnB`txYMp z_QC;VZcCn9ER3bZ_3X2wDg}vHjM5P}!5oPdAvUg*XIgDb8ex>$l+jQrcM6{+9Jq9G z0PVAIwa#ABb0Dmqi64?bgAsR68Jni0;l)b%`;=15X|Xac=l4tscATiLb!larR-3kG z@ZAa2GncS~v{?H@37Rbeg#*{QIPHiIFi}6OTh9r$&Hfr%>%UYSp`~YgwbG%4tv865 zTdJ+C#np~eVH!(B=d%dgo!AmXKr7Ft^lBnW$;&foaNyE0LETvd zLVXpboy|)0NRp{t$*|Q^6bs-&iISwvrb5mYmEUrVDN<$XeaG(AD;ltp56Des64HLat20o7Rbz;y$yQzuve z1qG`)6t&#?rXM*&_cV(+)8g={XFs3nUa!XAh(eZjN!~*x%EQd;LYk+|l+0g!?WJ~@ z4^f$Y=cgO-90V>BI&XGqIvt#zrjiF%T)*0A%D1J@axZbZ>} z!8%ooG|+ZEiAp1p5LK7i+Gt@a9oDCEwvh~Q2sAU+6AkvL=TzNu+W-nz<&$%^1;RZh zMwVKN=-jqTR%P*wKq@hN3jRB0ZC zU}fp`u83H<+I!rUzEfMv5|HLESuMyLs? z!jx4re%Yr8u}`FToK3Tl?IY1L2~?MOHRg|MK17|srf2<&Y8ER^ z4MimevEEfP4qWF5P!T9^6IND;!Kk00Rff)E(3uaCn4@Z8x>Se9goH3xNvrBtt)9~Z z*};GSg>p=sp1hYdi1#8oo=aP8FGbp95t#?{|Jgh5uqe*1jsIqsDpC{$3yOjYDk>rt z?7jEiVvk)DO*Cp^V(iAm7&Z1@6OAp#5_|7m?7d z71{R^5!R4V&a^YiKWJPwLJpLqrn&k`V;NnHsY#wJ*U?HAOiGG_2v#H|Rz#RJ?L@A2 zvD!V}Ph&Jun5&W*D&#x~<(xIt7{4Ov#_WnISYvW(v?!}?{`W1f|EO1?HRoGFLZ6XW ztOT>klCA;yY9f8juD58rAYTJXil(ss?ip1v5#IA2g368;Wvm~m5`s!?m2%~g+T9SX zsQD?GfkK8~ttqkU)y_$)6?#M@E1L>J3Z_LGE^YaD5LM2D|6l2$GF%}^@7x|FChB_g8+zvbtN)2WEy~1&g>NN^F^c4aO=)}uHSxu zD5ib^b#B*$vSoq+*s*gD>o@OKq~F@Ls7IxWeH%~hhOG&Yic$UDFZ*`kvkvV5ShivnlcvrynHmdb z{X&rg@P$3kQj*hJx(WX^%^5yf!#zsGtbfU=9r%&0lXCIS(okQH)_!KXoVgW@B{dE8S zLofj@35B3YVZ-(3&W9QSmo@hirL?Fby}Py{pLbq{jrv)Es*_UTMJu+gTD3uqJB_va z+DgH!pUxrIJ8~hq7U{|a1#xY5GgY>W3OztgNf+fAVJx3a>;8$d?1439=D(3DAVUFH z@6S77V`GE8y*<6Uw`cOS1?pc!tHsvV*6_Rew6?LeHJld&^Z0Z@vU+ja6E9{@k=Rf+ zZnmhP{EHH|76j=<4a)8)sd=ZL#tfrD{knPpHaawdKn_n&+O=&>jvSu!9W*k9L=i+r zM)B&^YXG97qu*0&RC1e<3!&EcQea?liWVu73j5%FqTH;xm&#?r6s?GMYx@2B!b|_g?JZH%m!QC6yp4OyzJte-XlSL{M=1jw8yh`%CnV_7NIa*s2u?~!G^Ni| zE8NmoAihsYAPct^K{~akBBv)6c=Z9^SDJKIW0}kCpZ<4_38-p$U-VoU>Daz4PEJmGx=p9!&Yim~Ub=$S8@5ZTm+uzfyN?F<>q5)s&B&THi{bVoA|lwl zWgDX>%|I0ObVI*hU1{8?0RVrkT~CebRmqY?|D6H-doy*~OjfMa{!8$cVSuYay}E>6yu^`{p$Ni7dUWed(JbwIyIg8hrOfyeU4|3(oX>xr)(IR~PMK4B<{S|;o zqlZ$rPVMB@i6YL<&a`aN%%a(4N*1A8mrmH)+7cBVP5j$<+}vF8@yU;ii?fM_Xijas z`+M|=FKE@Wxj~pGzlSqz+q5EU)~pO1@}tFSY1Xu{0ek^6XU@d<{M_= z#Z-;)uNC!QkWJQG-_Qz1tD6k2BHo?#RjY36@c$^qxVOJlhDSeVI#8-yX&y?aOzd;B z8s6?2HRg$?&18X~qoaF|)8f(29+We6JLP#? zrZrwGgEO2+H#``}fW`5?+!?;?>*~0_-`4$u6gxB2AzZwlKq*Tm5Z_VhB<5M2gj(py zD;gG>z|^r;PA6k5Hm%x}o^*Lzx(Hd{pr(&KMlwi2z9}Tj{94;Jm#zPd2j_l+M-Y?pc72PyD^_?a9>&>`MNW+7gcq;XVlolom zIx8(r^~NebIW~N~zXqd(g=I2dB>0lTvDh+FN0`auIo{JZVr^@i zFIM=8m7RU_^i+2j!wAOt{w;-@d@RcwF_K%nRMl#wu&W(X^5Na@RH22s?{~ zSqN2HjgIYwVunAS`_Npi_F2D{6~93sK)rKuWcHdL|K}xPtHU{M7U%tmQvi_x->rb z3PsR6FF|Rvg=qC@swrPBu!pi;9UIpyzYSUj(mD3?L-Y26?fRo|X2w;aR6b8-rvDqy z&C$Y~uU)Ro`_PL>o`vs@LpY~AF2m3Hp4C=UvM--a8E4DoW^#~T7u&+~JKDiUJT6A`}_K^UFhY$30*olZ|uY`Zx77PvH5QimpdlVVCdbOg56WLS{G_a z+lzg7B`%rS0KGWfosVF?Qe)16G4eiUfs!;Z5)WolO~byV&}4(zbj53MkgQ)a#b8Mk z#p6E?|DYgPu<}okN>O;9$>(qqS_6wrIJaLcdCXRlWOa*fQtG7;zQ< z&jJj_L5YxxDof<#nBR4BRWNdyDAN4Y_T*uuQVrfF25X@goRU#WSl-RxuCf$_0jEy!D2+g&(49{NgCZ3M0(1FJ6@SD%TW` zd8Ck#dd~tQ)4sDc+TKCFzdiF+ERA;?Fr0|xWuT`QO(|h`8?W6y+o#5%8**{&o5~&F zg^-exx+GQMIP}lHtg&~nW`3?e>ynAJZ9H4awmXphhEr5p8VZ?JAfEBrc_EFBQ$*rA z#qg6<2B$Nho?TjB^WZ*fPY=P?M)b?OWgHVpa`j8`+iA(fNYQY_U1Ic(pyaA@bDl=uRa3kYMlR z#9!leb^YDg1akcuGnSp3JNnaVXO`Gg!EA{PB2Oou-f&znpFcePW-4#p8FLi5oM8-C zYOBak&|HldY!BgHLr8&VHiyTY4a+w^?)Qa$K|w)`+HelXOJW0`P9{y5pyLtpM1_%` zBGPuJZ#e8uu9zTl1CSU&Nh85%+Tzf8tFNzbiD2LFuLIW@NauTpV^0A`W4wGnChw4< zqN2LMij!c!QYuvt;a?QE{qA%REiE;b&9E3bIypI!STg-3?k)^312@QzEt84bC1X4G z^ijN?PS&I(Nq94gi9fCz5{+F({G|v^k&3T-n|h2_tfEl<@!}1sDK1jy^?@8iKF0ot zrN-!hFlGS(eI&H5wAdq|uBFY^4m{lNuoP zdb7v25+0Y@wr zmot`E5Z=$uoCkj@V0a|bQ{#RKIQ!+7O@NP>%yE`8QKT5FctU6>~HhwC>4hYHprtl#+7sSVK&gWNdnS*XI6|P$*)z-6xh<{Hydm zM0dW={aq%L5u++2j(v|?cg!54`3fvjm1i98vh zPiZM-I){ChYW*<3kigbSIu! zP`nVNtZ4b#I{Kv>A@VU_i(&2hQkRDa9dkLCzt&XEc_RcSv0<7%^|?OnXN@gCJwf#bXGeq zh{-VE>;_pyuG%kIoB2veg3YqZA8H1njY}u@>Ms1c_Jn> z=<&KHS`GR=>~yEtEii1pvblLqtYOJ6&J-vnt8Y|G-65OIni8#fUT^#IGzs%s9?q5x zH{iQAxou@^)?zQ;d=IE3}OZQ4n-Dl5vZ?X3RZq*`H; z_9YlILbbQn_km0oi&nGxctYYEx?HM(JsgFK4|pLRPL~G4m+y?G@(3UnEZ1~KB7B3q za@+C8aOb{c74h8O-f}wK2l2cu=|R}lrw%Jn#^t!oiGtVTa#w=&=@Xv8z?$wiJEa@Z zeDZ|tmQLF{4;qcucR$h(iS9|K98w!kHv7{9OZuzjtvyZV%6tj~Kjai`9n|g}ui1KS z8Pcc}<$iK#usit!rKw4n!R6Wyy6wQysDwQ~TtZdZ+z4j0yZy|!A%TOZdf(;!b3hy_ zc@?xNsWxZ0+!^Z~QL0pFzqPd4yZl<^^aEAFHOUq$7T=bhZE31QpBNtN_9xJx-d^9$ zm%Rl(Mb45~(`dH*S8uA=2hP6sC#2-B=VRMOLV@$)ep*2~b z&rq-m?*;?O)U$QHXR#a6E}dq-HwY?5^3EuODG)e_1SB4=@fn^!I(c&b6>ZPRL(kVf z{iS;%nXt$tt1zZq#TTZQOFdc)i!tkc&ily5#9o%-6WsH`HTDgk5cPfBE^oiDu5j~F zuo(_nJc|rx`t~29yqZRT^q(_@a2l^LZ47*PN}`uBl!=9Vzh@;hPKR>h{hYAXvS; zF4lcU?{?})i^FUPY1|9q6KlUSz+hNC9h`1quDlp|cR%|K_u2YwCF zMTWe|+Zi^-OhJYn|NLSS9gTg}x9o<|M6MsWRDKvANH9yoP{W^nh!70P*HgZ=BwZWX;e^885bS9P>|9Cy4&uzw? z?oY(@by{Bgk_D#JE6SoJKr4CZm*`JXf2jeX$t-{L+oYl%$>;TGx_%|$Kqd-O4Vd_& z$F0(Vn6&_((bSKq$QiQ4vi@>`DYnxkIiIhZq*y`&c4w5;Wj{(J2cXI;D;d|AmG8u$ zr)#9<%_}Fv&+CNUUm|1(PJN&r+cc3Xvl4*lg7Xwe$A(fh!@+TC{Zbiw5g%r zVx4*p^b(U~4IzJDZdb22dM^LHSFstY1e>xZZ zj8~`9AI6E2%pqgq#2C}sbfr6V;tJxn4x)_E-$G-e?s)dX81cS!i%UfmJi$MA2pclGxI2PqKf zcE(7jTDVgTXdXgd65Zs<Mg=4xEQ|<^%t6{l1*~G!J8D`GzMrF2MdvxminPo79?=+0b%jty!)ra>DowG z^T?ElyfuS;$M-QGqP_jk1y(V$WwP(z_+XOiwJ?GWw7$Fc)57}v7!y1ZCooA9P#qup zWf4*6AZm9q85VGJv&yrA#3{eayW_9d{8l$zsKWU7`@ z2_gIE6LZ?DbY+n!hIA5yEne$0Ajmfo~D3=NW*D5I_-=~9^PhfSH0`_jC^|! z$4l}K?tH@1dW|cTp}RYu3{yI;D+h*Z+|YhRycryykJl;z(nBqdCL*8<{~-8+S2^m3 zzmN8B5DzQ@ff3HYD<(ncrX+rUt(@W3A;HuT%%1pbIa&){+WaX8xL~F z+?npiTt=1<#@`{C!zAci&Gk&q5l>6s&DH%G?59sU7t=f9DeMz|vQs9E2-tsor}M>7 zuB|V5QkM5heGg zzJ(FT+kgs6PF((xIAGCA16X~M9-b?#z)iIz3B6O zi&UGx0Dald-@n@EK=c-$O?Ub|2QKdW+f#mFVHJ7~wu|EjTV~6LL|xMH?}x2KWv{01 zQXTQ4PC7+*p#EvuuD7SUD-*R;<463_jkUEUxk5=E$*NK@6i^X% zGEWL#c29P?y|`B|?kN4TrmXgE@pnfxdmcs_zb;Q!2ymq^TKvFdVbSPt8)`UdRjx77 z4cT>!eVjYL7@F9xMysx`*S}}coXWA5m^Z6~o~wLxB$3KkK_K9cfaKzktrsQ1V_-wY zyiMX+DAQf8ApT}|SXQhHi`f1aGF(BN^X1 z?|Q1622jdfJlC*6{s~fneh&+;`C^(Re)8A=p<5 zu~Au#e?9)2&jhEDuC8wH@c|l&K=e7w2Eu>z@W}VCsUClpm#givG;tH&k6FZOz3!*RUd`~y{%Z@dL#8U{MN(Dyrq zQk50|^v3(fib%mz`()7>sfWuJm0^-y18HC!o!&`L0x%f{@&wixqKYM zjUeO+7R=QK%S>m|bl@>~p6yGf)PMl;CqI9#{<*RE4tE#&s|C8DA`4w0Iq^c6nVZLY z#8h`E|BwlRL7%g<`WVF!NUAUTfuTy1R+ZUucxyna$?*-cF9hbh{-x9K2P}rR5MRoa4hW_sBr`r#GMR?6&$rt+o8W3Cb5tyq>_)(w3@lTrIo}>a>*?(!mn&doD1759 zFVRO_*csarIGFAZ!)NkIVJf}&+x?Ef-(RM{j@;mxIhl`JL(y=gT9@?Vc3jK~&a>Ch zf+qR=j`sIZY$2P=G3!HHJKXt*A!{bFE9UbHy!GX*ajYv$;<@faj!GOg+9+^Z;Sk$} zH@>`%rgDXsVE9mFa8+3N0AeP-8oh(pbI9>PbIz)V{ zal7FG_LE>~!r0f!n>$+mp{^gh;riqx>K&wfV>mYcCWggg@ejbOR6V?$!a!BdC~ zb)iya@Zj@w`lz?Nq#I6T$kYllB~YgbSY>tUEW=|^{g93#KVK*&=&9+eB`1`P09(!W z{36CoLl&RbYajvl!B%Bn%C&4k-_Pa)8ddY zn>}ZOP4D!1B7-Yex6z~RQzWy|S}4}@_+;gWOO;4kNN@92B($Y6t~&yfGs1_bUG0rF zY`c>cZ+zECY#AG<+gk@li>c&&WiE-uHf_ZI=X?Cs*1EmaGf!Ewg~Lwf={6PJ6sBU! z$*|=HqafgxdzLTr^UE{hFV$x|&%F1OeEj7J^2g)jW93fkS~w=w&D8GS1EiDrLY_aD zYYpwScVZU7%SPymWG^+p4U`duvL9z2zHIidB^v~C-`s>&Tk6@|ckxCR%o>&|iMk=7 zp`oj+rcixh-p+2*?M`RChl#u~F`>O$T@^Xk^a=%*D>yxF;UPc~%4p^T!!Hg;JuvVr z4Y56X6eo_d_Yu+a>ZNHttn3{1nbR0={nJy(?ukput-)y8PzK66!tU4+%k@4(&QQ}@m< z?1IT9G#Y;rUte6TFE;hL&v@dJ{xo_Ce-m=u70=|4v`A+I9@mG63?^Y1&CKU894_zr zR0pUp4h_uD)pnTnN3%N9aVq@$eUnWdh&B2nf`t|BY|f`O+T)27r-|EXaW?hKILo9s zL$JNK-f@lmA-SpXl}cakcN(O=AKSvA#>cGd67F>BTB{Iz`t<2{f4}OE_Si@~D;rz2 z<2s~AM)jc4MbK=SO!!D*Ws(yd-(aO!4{fz&45BtL#Bk9Rt!?v;7gXhDI|Yj;-(_y?V3F9CRH7jb`V_Wvh;l#wkcl!gT!IogSYt zu=r?WIFx8Y5!d29%jm$fwRk#QkWnF=wKLTEzE&Y_ZrdI( zZ2JbcV7c;{wMqW+0iI~3)iJY|bevR8&D$Rs?Yb`koe~gtiz8MIW-nMk5nx^zZ!du$5n* zO8k0XPgQDFwWFztThY+ak~@w37opJ4udn~k9W78LKZWjiMAAg7H(%2!`3P#Q40g{J z$sq2HCX0yAW>3NL^YecW`EvW|mV7g7EbyqiR|wPM0o=~O?ii}N+uq#l2~TAq34Ht$ z%uvF(1C|pA_ue)Y$ogy9!rDCiGI=6fkBk=b6We8_p&vnl2#roYnBiMU22`b=oj5_2 zm66#KXsD<`Qo^5KPt;-+h(f-wSgzJP>4@8jqw4FmD(W2(`K9X7rW!{&L0Fiy6dtqeIq`B0(6uuw!q`qa0-LCiR5#281WG5hyh zMpDw?Qus2JDjF`<1mFwKug{~fU+^T#O~(Mekg;(=J+cx?{oO8bJAE#+aj+j zRzc7c92TZGu$HUneHy6!u1KyG6HI^unX3`>%MuDSy$9#`~ zrbt&P#dm=zL75isA}!{8?`UEHtl<;K;F`mxL#v}VZmVCd4(Y%cK2f9EA2KkS-j?ArCp3E|7@snAN zhrRdgb*4Xa1MDxZD80ZPQ@Zd?ZKia=VzV~l#AvDx^5Oyx)+b=j^ToWRD#&F69T&}1 zJ6%vnpw@7L8>A01HNaBDkMl5DjFkFa4zy*^A1+hrpfR3&3&M}kv-wd}6&sjpznHEu_DW3-)uV~bN{ry?EE1xi*WJF1>QIh)o?NMKMu3<2P zc+R$Q)*P&SDe~y}J5mJvq@*Mx*dnIWb3kYy18pOdml)&MsIM3d2rGYrXo4-7-R;~@ zmvrJkJT6%sM9O$kbP`F}t_w6$Xc68E zf=%vl>4baR9})xRf@pD83~(f@u6C&_a8$?v69{5IMA5`gg6IMkD{VtNxOd`ZzG$Qq zIWq^a?RLQ+VWw0SJ-g*mWissokb(sF#I})ChnsV=$5w$(>MweZe;G0u6WE*K{zOt) ztdNTnPoel(4bw2AQ}ndeY;mO+749dd*Ynp2+OjG+0`i(!$- zl>z{5CYi=v*is2d1-|l>Ipd|Q7C34nk2rF)QIH;p|G0b2HT;UlcA()==h0?Efml;%XzWl(}{_JFFw)OBJ{Fl!Ej>dWc;ji_L!s zdD=7V^D!2GaCSr0q$Q(*^Bz-s>jTMu$Km>=$e*MCvjB73>Rz5625-y}z-UCYiw_MI zla;Q0#7#EOT9N46h3Q1=>9)W#^l=1O;r!TFEi~a1_{N#F=ZES8J_j z5Nx))S^U8|cpMhwcwlZ?NTrkq{QaZN`Csjip*zQYM_^2HH0D@}G<#JQ+-JL^$+W3; z5AE#iM&nfDy^JK#7=H4==7B0_cE(;P zQ3XXNCTK1fG1w4fy2CjbM^5ONg6nHs;_zOu7=YK_|u-~jrU(y3<*Eq|yOPfp@|{eTRONvlROU_H3jXuVo; zeKJK59?j(XbjroW5gV1HQzAjbsXAQ4>kSvjH1mT^Gd9VkD#itC>QI-yAoN-2(+|uC z<0Ur;K#PtI=U+9u-qCEJpa32%W`ctjAX}putzNNv6{<|$hSc}(fKc#HYEz(4_zPyt zH8r(J*9mI_T*5?Ixm2-Izvqw4bF&+F;Y1n<9UY)_UxLFzYO<7WPk6*@3&N9`UJOsy zTBY3FIDfggmy2?W9r}n63W6B4LyYJB-I-+abUrLR{5CKm#a~VwdkA>4JziQsCx5k* z?sWrd0c2?Q2FrmO0ox|qI~tS?l%}R8P;i?Fw&5UX9Gyq$$4jYt^MgAY@zMx37%iH!R+*aen6>w@n7g{ zZDsX$qCS;s{H^(xklpdni>#-F373Sr}>4+3`6XPIvc2belb1-lIgz+;2|=1`0XMKi5ZutKBC3-v7@xF-&3+nKF@qdQj-2dBEhh5w3 zu{`T~eIBg~qKdGSR7LBfTl2K^^ozSIV9*sle|M1$d1Paz$)MBq)ESLjuhu%X1DpvT zn5Ye2IlZCHejfob2xTy?78)jAZ!t$Djom!}IEv3NFJLrAy)uXE9bpcDz@8a5ge=yZ zKYp=0zR2IcqSa{coi*;f+QE8JzS~0u=dO=rVedp`)ay&(*!HOZ5q+sxh9+<)(=f+U zr*oXqEY_O*gM_t$H~&S`Gfn}^T%|jqEpnFZ z>3F*L5G%Ajo*s*rk@1`KYnASR#d{>&v0ALhv6a+DLaWym6&okLfe}g;2Zx5^WzQ%& zG*9AAM~eu2o}qfRyO^>Rp*D|)Fe;Ums;MQb(`T4ZnUfz-_a;((!7vP){XfS1*ED@J z~D7>?&=2ec7Tyt~?8uHI(jTaj6xZKciQ zk<1>7B|>u}I&--nTzkA&i=~E34L<7T1q-G7_1%XDkL$0mtG0iv%p0i2A^wwJfDCiaSw5rBh{ili-e*XTXI%dxdyp_&3uik<2q7+=qEwuB|-TqbAJLTF9 z&Csi88M^JE_;j%Ks*RU5L~zdgO09sSjbTXYYO^=&4>TO9Om6+#HveaCOMfB>r3NY* zh_GbVaE?aH4WQDf)HYrG-S}xRo-xrzVj5F!)P0TZ0|DdSc0P1AcGx*@do}(pmg3LZ z@Jid0hM7DoI7pja_dZEwcIH^Wq%^g*&Xnj9qOSKx@no_9;TMQI;TLFyRr&*vz3u!c zE)J#>C(Di4jN7i9Tq_rs!{IbCdS@Lk2-w^yfsva3sYu}1?4JJxFTzSk;rhhLLA3w= zzLCSRLf)re9&(PM3M66G@ zw_prNTsASO^xy&jRVJ(+QaorMc>geDa5?iQP+9!rXK`GjeT8lqjWlSbdU`Uf{tk-t zUQKAW^=JPKw3;{!0e=I0%s;TVXe#zk^;r@e>%;EE*o`R*tMzV9u$R4qO&41&TI(JD z_G0M5F_%*qm~OqXdngWaH!CZ?!{J@mz;=5)w#aJ%vW)Z3%UK5(_ z^(5I+eB&fm^(68&dy#lSahL4!kK5XnoyHUp(FdN5oqYa@7}Bc3j&}@vzEKL z0X@AnON|i1ZHairggk!|U`!EeRq@xpA6m#CXI*@H`RG*0qCl2)d{oST3on@JUy!_B zuHBjCKvQUEkYcWyJc3CC^EgzCMGK3Bv^V1Y0s;pl8JTESR(9Y!P87=(VzcXrQ#>jZ zUzEuD8c;!q@@nwr*Br=x{_;UGW;pmWqO`25x{r(_4$lG*#U|s-1LH-^o)JvlN$k!0 z$AwArbh3w|oevVPq{9FD~&W{dQ{1S8Q(8CR{S?SekLox!$T95&tO%o?L^%O zy&g|Vx2Gca%Ydf-g)*^0019;!?Lc+#2ZOiW@vOj-J-%0CBB=r;sIqM3h?bGTW4G~{ zq->O}{!y+#oA3pm{+6iV`>hOezP*`DoyE5i~iI9DEx)8RZlqqJ; z%2HGj>oW~1swDZQEFC1e{E@IhGrYJ5Y4;PYvIGoyNzU7BzeHQ(nB{G2)+8p0$}Iu5 z`dV*^!WXJnTrCn<`sN?dVk3NvwQhMoM!utwF!%PMSC#nm@PE(#prD$#JD;#}_6XrN za) z0uf&APxL-~4)2^QFK;p9az>FU*!+br#ASa_-6TI04WE>|Zf*07Ph)=Z1?$mnaW<4~L4Loi?s z=WuET=hVNV$;+MCfWGWbfQFwaMv(zS~i75ld!G~1kNDOIT zE_aS+tBx|0Ud_IlA#Q#7+KO6gtx**RJMSfsPye|ftFwGw16BT%6mHmyEM+>Y-+Mw< zf~C>u&GqxQn3^_`;@l2?jLc9)Gp_;Q}VTmtHc=PNE=U|%z+e25s%0?+gC#a$Em} zI7YpW3&qe?VQ^MC7(L=NhcS1%c4f{86u(F*VFYT4B=V*FeAbhXKLuyOdY);MAODp#Ft}@x^S+K^zPK;7(Oy_e^fB#)!!=QKLm+q zum*tZe#-Q3(5!EqiPsE|8Bv^In*5ze!UHqyg$%l&BSy|J>hrV$VdT3-%GiuHiZC|Bp>cn@d zE?2pa^@K_P#+2w&CH1`*?z1G_8$_0gaCdq*WV$SYQ)oYNXy(7bf6gv4WY zkX((6lc9r-A)RP-FoN+8&h5b*~x#8P&9z7IZ@t4oP2lvNWO%G-|8GEr!gg5=CkL7T@q1~DC?KcYgO zV*L_x@oz(BRqB5L0#amEozGgbOuv^NvqD%o^;Tt&L8n**95&sbFZp3VAKUz!%}E8qpByHU^Sm2&r~r$>h+do0j=&PvtH%mD{yBOk)n; z!xdX5^cAU?N#ca>`Vj_BSMhSau6D!{_P>fZ$v~-Owy{0DE?1H(H87r9jB_@o;IWjK zFU9$e=8q^nw7pd!(NBH#)zRmUt;-r!?}Z@>-%g;IlomDo+-?daQLYaNiQ1UIXOWsQ zy3ogN8%Jwr#3V3=lxb^)@^#%pr#LemJm}67ooO!oi8u)S& zh~D%JjB6*2%V(2u1c#ts7nqk8m@Rjt5|jQ!^za4G`?G|4;o=`w3BOj^yc6W2)N)jDSVkwa55Ci7`8P$B{z?qBVfq5R^)RCfgT z>hji^W{{sB^d~&do)UXCYH^!xvIZgO62G`SP!EL1Y86Bq7+$SR(0J-URe!gjH?pY% zsR|tU0@b-;kltNg?ocvYu6B3y7JhZDun`u)VJQ;=vDrVvI-hcWFa#l7@aJ6wH7q=Z zw_xthVZG_7N>xZvQWH9jg?<$^OlInX|F60pG z{2bOcG#v4t6dTp33IX*EKd(6I&BJVWN1wSpNp4IP^EA>^{&28b?TzDOQa$*RPH2|8 zbVmJ!NMWv!nlDpvdbq>@AouQmv2?7dnR(sy={%;VCl4y>X0zJ^4yB^y*Dn;92j-S9 zZ|_{(`$w>7RW23`AchlZB+GFWlIRTKFoxgD5KYlhGks-4pYQiDlCeHp(vThs-T69ctDgvDN-7KPQIb z{Ac*PWV>(jGGC+*w&>^&L^0q|E1yo?{={N|vdT;#m9g2-&rZUar?6xRTothD5C5*7 zNkpjAZdD97UTq<1z1=t6N2gYgVlG#!aeULZSa%f<-h>2r0{nhy-61O4)B!&u&r8Jk z=Y1GO>Q{V6N5_m#CvQNb0^T{B{{kW)Jca7W*ALcQm6;d_4kDf6i8tZ1!C#~_JLud_ zwG2nX$aUf1$VYkuBb{CznLsF;1@@cSYC}5FdUApVAzK|!xf;_ya0OKMIqi-81erMi z_Urp*FGqKW%Zzz8wqi5Ed6_$Nus>NrZEw1u)0L(DE#7BcNC{H_+5XGRzn2@yc2AWM-G6?kk8yO&8ae$bVu^IiGhl)N{#mZ@wEtmgiqC3|9t#}r(+~noP}Cv zyb4C5XKBgB`b}R0MH)dMaO{oB=ZNs6}!#pgv}aTOp^rc=WY$rK&QO z#*VF~13E_rNVcb|o?Z}u3J7_;IsEQ&{I%hXtE7o45aF0N@YdW3z|&F$Jo)m{pY2T+ z^j>}XMw1%9h@8Vysh$7xk^c6Fr~dh~Bwfu1v(#WLGNYL8jE@qo{w2L1@yPbA+xP2V zRC4V9ex%M*4*}T{EcwPpZXhc=t8BI#Y&@kxp6-H28+>G3p&_(=Pn|%nYS^Pk(-7-y zkw$nyIPRoj7c!_MhxoC~OzjNTerA`7WpUzgx|+mXwQ=)a#Qh*SOUGZC@y$_ZYt!lC z8Ai1{VK|<0s!oJBz>_27MQEI2JTubNT4WKazf}Fl+S7M)D!8M#G=wsE1AuFTt( z%}S?d=DUG$QHSlu+``G1dHevk7n0u2muO#9S9RyBZEY|=z3#D$1?Vt(!;{VekU@T zE+ql0=KIA$vk0c3J6PhOe?o@K@Begk)LdhYli+?IB_130 zu+)}d6jv(8%X<&=Eb+!O?l4J~0Ey+>=%}Kf$XO!oCePn({?q)lFS1T6lwudtsY#^T zaMI&DFkxNSs5{hFTxYVF#$ws?(02DjQnM-GGb|7#{{yZ?zCbR{qwJ9gu&b^=H_0P& zJ-Kxc*(yPhDN%R*HCWc?4cPaj%OqT;xi}eQ)dh(*%8`Y~8ym5wD ztg_qQ?~8yB7EC|fA=jYt0wsZ$11;tdPCIsm26G{84Mn6D_x*P&VE` z^PS9f#d^Fw{@s*ms5nLU8;F1RVZd>Pz8z?lr~@D-}j9wBhK z-4_KVm`U7@&2W?d{AaaBi)!=4j@{MdNz*WFmSC_X|AG{e3E#SLKtcHaZIl< zJoBhA91%=6A%gt@6rB5~r|OF{&%p$0+#3`59}qQ7tQ%*00|2Q}5DF2)2dN^$lSfYW zrkS2NRcK;a*Zh2fD8{g;frICrYk_z&r~{}*`H9pOr}xxAI#NWgNZdvJc8a~oJb5PV3cQh=#R1-IDhW@C>V~{kLAvt3u;uJ zxov4k$2I8G(NHjYAIDsUg=c{ungfg5a7=W)N%F6}cWCxgmCl^WX&~2!&+NC1xG<;u+7Xi3xR zqtD7g9h*|)FeACS){kqmh|lT}0pP`GAbK-1FCoB7 zny9bFJJ`r(vP($AnTS#|aFdt(u@w((PfTsgVgR zG>L{|PW~f<8%XbiT1=S=b?n2r;_ilDfyN6pD1dJ%1BKMC_T%6-4-TU*cX8R8#|ITP z$@FZh;<~!-z&c0(2ye;QGmZi!D6kp0O>ZSxb^}ri*wli_F#@a}k6$#JZLLq;jHbCG zir4D(mnDIXW_a(A53dhM!M?Gvc*1}imS$T(6q=dU#nCEJ1f#|TF2)v0f{7ZkLme$H zFAYQMmS1%4HwNHF@6GACTXwx@a=v4S*eVbabul>=+MHs|F$$9q+^XIwtz5LBa4%B07cq zkA#lP@zlVeAYnnb)dd~199^CB+wqTGJj+Ov1#@idb(TLtD*#pi+<00prRY6~J%kOZ z2oJFz7c=ZhQ~(`+V*`ct&vI^>pz5mIMCynyk?)gCo3czA;udm5csVr=uWr-bih$>2 zjXr~Fqsedw@nbb8W+w-Jn@+XNAOG4|;&pe1sK2tjpz0+isfd`K-p9|6AK*b%QzpXV z!tw|%53GvHq9y`C^bS%>u-f@D3bBhrel&4MD|g3wDEZsG(~`E+)RJ#g4I;~MF{mdW zz(vL8`3gl6^5L@)G=&1y#LkG4(<6PFT;aHMM_WdJiF7tzqs98}aUX68(|^T3Nu#%E z7Oj7N56}GG`UXT-G7NM-r3f=lx91fKaSnF&{c_}w>>{500s?>+`1I)(lxs1nQo~(b zpkh)0i95MzVR?BGQo5;%2krt6^R5F_-Gew*d1M6}7kA*5*ib(5@(QamDAZMKcQiRT zB7!-+!Z_CRm%}oY7B^2oAUaa7b-Pzd!WH4&AhpfX`ns?7py}W;Vh?|t+;Bu-kl62V8)9Dgz-|1}UctE?SrF{Nx49Ob^t$z}jjARj!p7*8QW{Wx+AvAJLVS=z7PcVw1d zO7=0x7o6mekG+Xd6BM^&e&zx-I$+KR+x;;^2He2Bb6eL``Q}Rvf9fZqS8x)LNGKVLToFNU9R~*^DE;r<=byb)0 zC~*P8E`GL7E-}k9=|WN(Dawp}&+b4p*pT_7yUlq9^#2IS!d#Ws41?3Z3CxX>=)gM1 zRD7-X7mv6_cq>5~OJ&M-?oD~Vxw}O_tP$n-Nam9OWQYlk4qo)w30H#&pZ0Wo;Q9@1 z{XH64asK#Vek&X6NFkf|T_6;l*|<9=zqClDmVK3@QLuC>XU-(K(a3+Jtu>Xw+q-Y^ z_Ux13^L;JkD1^=KC~r0&3=cZTHDnj{i(h$ti`zE=sj*lBSk$;|BmW(Fw&gs7v}frM z1G9?+2XQ={3mG z@bK_p{rC}v(&8%gvhzCwh}^sa(2jxr@hSU{QEXv#xZ+4u_Y0tmv{nPgYR+05-+19M zsk#i!adgt2M#dFKlwMjlj`Ip5K4OiEtsWA+*9waW)_o|c-?#f80CYf$zdEvHaZTag ziV{7ge6448H~w5cj~|8&Fxn*+=+U(Uf*^40*h&3@HXDa`_s`|w{(tPfdC;wERu{H@ z@7~{V&bjxV+XD@BqhJq+(gWSxZW=HkNTMbcs)A^!N=2(uDJ!u^rOH^PsY)b-NC--B zD2y6HiAE|zVCAF$03ZNKL_t(gA`k?$N$eJAXz6B=kq_0KJbB`qZjVoqnE$zW%T;je35IKekD6|J2_`pZoT=)35#duhUn3&0pAG=g5-N?sLEHwXdOX{Ttt)zWx`!@tf%V zAN)o7V_)&5^zZ+{-%tO?w|pzT^M~I@OhkX?zxx{c+u!n6>FfU7pQW$(qkn>a?0xU2 z4}bWd(^veFFQ=#P-lc!`;a{Xzz3P+c_kGb9(z;*MVzH==7!NUIhcEcmU;QcLhpUwrY`Q8XWl}e`rCgy{mpOvKj~*b^oyj)A^(-X_P6NGZ+avBsXzH&)8~Kg z+v$Tp{~>zGOP;3Bef#IoOJDjD`iY@F{U4y~ z)ir(57k&Y~aPJ;{|37@^NW%sv7C-#{H$L(#ec8pr{=qinEnDl@Bi7KqnE$zrS!#L^o4YJc_{`Pd^$k| zV;;N%1+UN1d&-Fw;*9ipSpk zW_|sL-thY0P2cf%zl+}g!4L1>_0f<1CVlSbJVW32{r`a8_fsFpzV%g~^m2Oj@Ax!& z#}B@fe*HK8H4zbg?AaG+b@hN=_uALeYhUwfdVF<7fA4$#0TC0u^)0Wb2M_Mk_rK#^ z*&4icc}}16*0<1m-}{sF{-672)eM62Gnw!H`#(s}ef*>J$)EH|^y$Czb@aN|zJ{K7 z@(KF+4}OTg{u}-h{mpOt?*03J?O%O_e&~mOm|peDPoy`#;q~;!H@<=H+`dikeAhpw zKlR`KkMyx;U)Wz^wO-TT|NbAOmp=U@ea7$lbb8|(K9eplF6rC;ukWDm{l0h5XT9+= z=|_I_J@lau{|h1l{fmG3>-4_&zL#F}>QAL-p80Hg(;MGFm$xqI2Y%ok^k@F;*X_#- zw4X2d{I?PTba{Cx{<(E|Nk8)L_t10C-=nYmFa9(7nfL!Jea+W@)8QQG`TO**Kk~2W zv)}w#)X|#W|8u`UKl~#vBTR)rb-n~oT{vCghKJuF%p$?$$`Mw_{ zBBED+>MQ9JKk*gxUEliy^dKpge(H%^^ybfc1HJo4-$TFf&wn{FhM+I_{I}6B{KALn z$KJc4UBB#0{{UTHUeX`?&;Kj>j8A_JeeT=eMz4GAYw6?9K1=`GU;k$M=D+ow+4KH8 zpZg5`@~`{~{m_rTck4iz{{9dAKlJ3C3wq<5-av1A>ofEzpYkgD#b5d*`l_$~I(pAf zY}VU5f9O5*@cwi3>fiBc^ybfc6aB8w_?`3{zwr_JpTGVa=>s47C6nv?J#T*t{pzp& z8oldBew>JyKJB-CGQIMZpG@ETeec+&=^ysU+n;$8ee7c&ryu-B?^fsR2j1~6T6R5s z`s-dxuY28V==}Vg{?R*si2n3{|Fv|zI-HyR$h&`RGY_Br+4Q!zzJ;E;dzZfbJHC@X z@|z#s&qEq4eCWf!OmBbdo9I`5I3mzLde;xrD?jPw^p-b&7QOv*o}pKK z;wR8Qe8>Mw|MX|xPfy>yOW*n3-%owdGIE#<^Urn4q}3wfXm{nM>(n5fg9dE4en*Jf(zj{E|&DGxfZo zXWVw^yg^D4{XeEnqC(es)#=-sc4lIZy#F{qye$&m(TBFqU?K$DaO;2joBtxc{ADkr zKky&@r&<0+p1cTSOXjn>?s+?px`EquUG7|nIJEOLoPQryW#6YFxN<6YzAhR!kg%o%2Xh z{Zi;2%Bte1?hBwr&^`ehkzPOU+JJ9#k?0Tm`@o5NOyr%3LFjamTu7RG7-md&xEZBW^D~iEmNxQ%5+omHoSzG z;f{R{EZFoI18>zT@$rt(*nEl?RUKEo=?)K{Q-y5Cly>(QDJf8T1Egp#jShtipdmh+ z#&k{Jf%O>lM)?S(!P@zec!NUiT%leaKmOzIqq}#XGIldltbb5swzy%Ihs<5;cd4P2 z9nHDiLd)~lfs2LI(vlY3Q8jk0@H2W73gRkx^qNp)owk5|V3GF7Kw?aBjGmgu- zry}p?au^0~*j8F35V;L@?3g6-0;(ykSi*9P>GD*`Z?5x_+FWqyywbUXV#um-h#FAP zU-=t=68;`nb z)M<&kq^vvDGbu)|s+g`XiVn$^2Guwx*3DqkkHx1$mze zZD|Y$2i6XnX4zYXk>mLN-jk$$c-)9sPY7cS5x$9W(aX$Qg)oN)fYO)q8Z*o6U|{qArR_11b&9N>-T(2#l;Dvam()j-Lvc+x_RY0* z?AR`4^+e7(`6!!4x*Mi=QR@-6c+s>_Y64l`CI^flC*J|XkXkt1<4j&$$Tn^YIY9Dw z>fWC9LoA?4zD`QcNzb280Mly(-(BgY67o^;wh)Nr$Fy7tBij-v~Yg%m!NE2ZVE>cvb29@|)Z<2elvwRcz+ zdbkm&ie1DSyjIT;J^2!y;e#1Pi}l;LUkbSlQeb2`yFwYpu175RHcq4jY5R1W{eg8m}sWEl8)AH_@m zwo>Jfm%I_B@aJ`4sstW{e-;_OQ-VQXuh828Qf~HmK5HhbP;y{}QELF)u0n>!GzmdE zH$dRA+dob*oX%O1f<7sA=qQYeQlDjyOv!7o;<&Zw%{rHPu{eaAhP1SCWQvjY0}HcL z&B}E4jpF3f7A<=MinyS47#?3MA1NATS=gDv;Uj4p-A+Q|rz z4dvmm5<#df1SXHKz0_kqsVS@aC<*6RSz)Ou--AGSV38vYT_^wT&p<=WM!+DQ{032Q z!v^9TD-`3E3-i%t$txcZRh`UmPjxC!F7=0*PBFV_9!4rdgBc&g0OO-V18$$cX%#VA z2mr4T^aO}Yp=o&gq9*Cnjy{Gw@6AxZfARllJJFk~hFZcP%UFr=-dI%)>AdTB!K9}b zuG&Hjn4d;xbyz+51rNGOECQS{Kg(%`HWgV!a=W>4;=r^IezZX1S&K&YJo_h7Uo_(; zFwl|qT2&w#?q(Y;U$h#Bd*gGnH635P4$UerfEnhffeh=j#y3`c*D@?xz{#Vp=HWY0 zzc8|m1|l*meTQB2zzV=QxmIC5GP!TvfkkeksHR+J$^OdDZz##gp?KBM^fA=&5`x)K z>8Z}Plq|upP%3M6K+!X+e-j+iG0rYA(|7Wq`!GBAZ2wd`hRGH})0gn}EM8;ezR>o29rVPM` zUOw8t0Ksq@;UIJv^*VVSmwfZN{F65I&2+4BdYR25^x>LMr^0KI3Fp11i8HlkfS|~E z#84&l7FzL`25SywcklgE_4t~4Z02e6QFg}mQ2)&eRHW88(^Pvh**&qVU?7q~r~$`; zXi!euVFALJcRy&1CPZ8;;4MxlLzyg^%oHiv*R0GLC!d*z9<&tSZx-s(3`uHCm}=vq zEpKM)*|c32ao%%{&lpDuVJmyiu(dwwCLH{f3D{OSgU}gbTQLhE>sKnlAZ5KB-LR`lM(du!-=DG8(6MS|zedDV_3rJ3c z^?fd{?{a;yzV?BgWb3xBNrk|4=MTI$&vhSGZ@>dRd|FaTkzJE`DEL$+6>$n61p^~MKm0n zB8#4CB4D&wLC`H{LU5eJse&GMVt%WIN*j8X5SLW^e&P^MnHL=Gs$_&o)oJk%RRsrY zYRaLtBWoR-_ziaR4696#z==Ia-vaB&7-W!i(V@lIn+svj?1GsTGC!n}@jOFQBoUNcHcsRa#U6 zHLlcUp5Et|(+Z)+kJZ34F2CjG4sUUh49}$Tqtnc)ceKwFnX_@!RIH=T?B<&Nb&L@6 zWueERNeXjpdo-dJPe;*0o9sBZp*7OL98`Vy@Fo3L?%50SxJD$_Tq|1*dnXoy`Q6a<; zH>Yn`R6P1Lt6A)WHc|ZJh1;?{)e!i&#I$bsV$K&d8~)gfL#K=<;Xqrh%g+2u?nR&k z!TI?@O+Ub)YB)eH45N^ykCdYteUaYSR+34SB)772EvlK1voJy&hNgiNKhu?p-uIOD zjX_!(IX19B%Go{Es7vKVl@!!OW~fDi%4QUfP8G&ary$f$Be110)p`=PRC#DQ&2npX zR6M{y950rX(%u1TKqlJOifUaS1!I!k*3`;+GDsR&W+lQ0NMmM|eI6r7YIPZ{#>%Mn zNrn=*NtuPD%negZ%f)~RGk2XO*)0N|2@-js0)Y~`%;@aR6mq4`Mtbj+jsU+!h)t&K*GxI`p2!OG1&bzqC`>aDp05 zIY%Ji1z@gzIAD^t@bxYG$VzzZT0Fo!c;hZ%BwmF7rph7on zNcC!YD3))6o@TLtRne64j_0R{HDlv;deS33H%K)b_pM8Wfr%LlO$z6jjw$L~l?}uZ zL}Xnis)}JH6?-Y=b33acrqw$0BQkpWx+tpBH@p$ZOLH0X@9`FOr|kbD%x%MygK8Od z-^NFql#X&-2wj+!O&RH)*@SKyYCw_L1*@G28DW_OV10}7;GI8Uy&piJeXqp|W zKa%3H5p1T{m`D)%nkewBf0ok_Wo#}{1PLg`C;!XVSF z*+J#YviT8c!};8Y#`JPvLQmw#Q1(ZPM$M7K_+vbqo#P}^etdwK(jws!mbTuGGOyKb zK{0~Ss>FyT!XN|D9wmE{NdB3a*HXuBrvswp!i}#y&5vO*Jcn$t1<)-wEAKES@Y-hn zyv{)r&A#vcr<0)Qrn_~RzBQue)?}Z&zsb?vqd89qBr3-`kUW9YDjb&9{a99d_mTrn zN#H~(O;Dqt3Plw%EZnje8scAOBXWm>U@Ws1eg7QP87n(K)`}M;Q%b_LXg`ZZIJ}`b zM@5)ANWeX?Oknt)&G{0105#!pvsIaDgOcfj*{*#iJpZa^@<-~Wc*p`#aso==Fusg) zjB5C?ifseK6?}|Zc1P<7a5Iul>RE14dk`FeM$@^n1x}PyrgCbkQPKidpED|FjU&y0 zgmQV%RHjS-tWDf?_TtuLq(*OjBT!K&O)l9W$I6X~2o|)XQ=5nst`OvNb-sh%+~uy5T~+thMC;5iPp#tqx+& z5b+4H&kQMl*KH+;sLK*CIAA9uC~Sxb8H*bx&j^9~?XlSyp$@Oz9-G@`5+`LbK(Mzf z0*hqWhSk35IH@2*5SOF}XWt$I^pF;VjmFjk9Y2B&EOlbSDrE`r7>}$8hcoGpkq4R! zjyP_baSaX?6)s9x6}mdKWV%IoZFncnXo-p9-mSg|#6~ruN3%m+s(qB!<3uEob;8O@ zAjKmu+6}+Wozzq5$YAC>O_G)n%&d+&$!SO~jC}pLh^sR|##i z%7Q{za-o*tZj*?N)sRGh76O;mAj%GrtY={#7^8Tfc8mif9JLS_0!eSUa9HJHeXlFjt@IORKC8jMq zw}%Dgd4}>}w64Yp&bZ>cz;wpVU2x&PKQAp_nz^;c0#Id?ldpvSf45hdVbI4c_x3F;E< zt)_z=TpBQ(y(Z?xD)MF;8uWIb*KO17;m;7pO% zj&kL2ny=Nch8v>nDFXzJj`9wVQi_e`5S%Hl?FI)?A+V0UmSEP!#TM4uif7|}Q-w^FSE%I=L;<9RqKN!NzDTyA*i@Q}@8<$-TB!##%76?D=E&e**k!@crRndj zm=WZ}2 zyx&4<$5Vs%miTE~nv@PK?yNM|KThF!x~(C27#Q9_I<1R!uA1=3GsjD56>qtdHOoJ1Iy{sJ z2E}in?&C>JI6E%hiv2kr%a5BrhYvU+MY#L-&QYa%Rn>em<0=hD&z1IW@hj}`YVac` zDWk6iT}=(9;n9wPcHU?}`k)}p9D;~F4`6kGHc*$PN9f9r^Vt9sv6_a;%fMw8s{+_wAZ#(TVY(p70?qcrg)60hXH{lR=w^ijg(G( zir(L7c+D&EWtBnTfcm?aMZr$nleXteoY?5~lV@pXSM548mU2&s(gJOsZVe+a{2Yod z+HGV*I(#{>kaAYCo0--qMCFQ*^73LTuy_y#`YB zRW8LX8Y6|pid9v1ZOfx^HaS3Cq+Vm}Zt3ENBK^(oh>g`7k=)v(Cq4seOOIz_Z%FSg zN3^sSFm+mc46RxmY}(PVh1j10FB5lSS|HrK!?WuHvi!;9MWUj0m~gYQ^Z$}r4pM}H zppF6JMK{4ZW#>?SY@Z1hM@TFxHiC5)QI|mF@%UW}Wh|pUf{Y0^?@ND1rdgN#Y9Xic)rab6=_rHPTTU zvXbiOnXEkY;XT=cj;jQEc1k=K?_`SAK!g-jilixPlS>sN^QpACEpdK|BjT`e= z$bQTO6ironJF{LVjp$zCdFDd=Y96?xy!H!Cfya0wGMpxf_4^%;l(yf{f%*<}ZT^}D zYat2@LZGs)Nuq|9W2Dh_`vnQ;QGH+yArLFsD@fzK+pKega>fov#cxroqn^CSC_?5@?*-fGS+yh27g|36 z03ZNKL_t)`Fe4JrGA?Vk%3b>|p(-x0k~A!h!0>2Tr6tNUAFFkq52$a}4-dMvvWS&u z9z`_n{6MXPraw5di)|gIO8CNCT3!gOZYC>Eo|7%Gl=lQgxTE;cxKg&jVwe8TWw0~U zc>!*R@I!}+85UUA5koKa^JiH?;0j3qho={$jyXrV3Xm_6-iF2Oq;w?lI80!p2XD$KvsQ+6+pU_*^% zqk*E~g*Xt?9mkcNB1PQ6ebHiLM4snVElfrP1|?v`xT}-nHZ4MKvW7PxzrO@q-WrEy zY!h^(9k*Ack_Ob7gpIeyi$%f*acv|g(-f{537&Mai_s~#|G}q3BMhTQCfmgpT=K+2wBG-diDvK%Nq`NxHYCZG1lc;$*jnMA6OM8kHb3YRt2<7aU2vmY!OV5D7pdP)P^ z(%f(2yD+RFv(tOeYzG%r_?~0L8_r!=S+<_?(Fl8H1xcD97#SeR9W^FBb(W1eg;iYc zb<7+xuLyYA!k)lR$cX&(i$x{Vgdx;tq$oLiAM`CXV(C}reQW3P|2r8~?#Z zyO;nagA=WfA6$E-j-l0fz>aV+Szj)X7|VwVi7SROW;~WEOfv`}K)re@5%8lJVo7$& zD8fefntD!q)Eub*JNRC&0WvW}Fr z^9_uhik4*v3!)txMO)Wn;$=r6!e2u-z~*dg1Qj>Pu~evwD^tyr^>h+OW}k#Ikn9DT zkEu1C>J(GuTd^#fs<30z&j77L`C@F4OOqfT<@wTnff*~JOx|?P3nPAaEa;V|!i(C4 z;W@X&&E}v=wd@1M{Fi)5OQh0x4rWOaqhyh|%@Kyrd$krPCKR;P<&M#<+vuc?Zc7se zuMZh*wYF_ci!Hu6r>*OgYK{{Nu`s{&@r2)Z)S(@pJ zY`?ZkfyW@dEf05$*)BZD$eH)WWwfJw9s2>ZTJ{XZHjy7pTIUdhsdO`aODnpSR6OAX zWithRouvNWz~6$XUoM)fx2vfdygv|lC&%9E$VsWlG3lT@e73sL7EkgDrMe=!0srVb zwG<0BlMj;hG&GWj$JnxDf3dP|EOulbeSm1a`0;JPTLUCqq~ZW5&Pz+NwzBs38K12|6$~07 z1O%)rO-*s@br`%5ij6rq65EBoQGahQ_QgCju54(yo}=o1e1di!(FMu`rBP1kg|_Qg#+HfS+xnucsMzsfc1q_CTQ@6A{2pj>^h81-B;TY0IO;17`0r5 z%sxg_HRD8q^Mf&eqfbR!lCdDoHOp|&B!VXR z>AGC~T{Ijvf!c4;T3abR)Zk}WqK1=+gE_XvLB2~8sO5nfg87BJX8ler3B&Hxc$72} z2+j(jhTNkf%F_GjL6dqP$EoMKIgKMLvEj5AmpRUSg6C(7cSh7EoYl1wy?q3>7ZfAM z(wm)(@<~WnZ;@-qODuW4mb=2J%`7HlK%*Dxd+NK6`VM-af#4;>OL)eBPaLis&y3T|Fw%_6(n zmg7LcIcPl~U`stVU>2mM4e;rmSXD))Fb5L)s(;6UE6nbO^|c7c&`nSS;U1MKXIkux zm{%n?`evmq8wyOuW|2Ax(91T3i?U^RzgP(B@3l!_1QK3QFOK<~S3Mc+MafK2I+918 zb!{AL*Axp{N*ekKX&>Zn==OzE(mR>59XqTN^!aOLjfUM=SiI->s0+C>+ShV%OK_{T zNAzI+(5QqItQ=^4-Ez#>z|&Q0t2_>3z4XIk947B##wGkCLj_=n2;$gzC8A|F?EGb0 z>cGGOZIPf2DFhXvgbhW)uKiIhg_kL;P$Rv$bzT@?+mO^qvav6$eAIgVYrP$3P0l#n z0vAM~lt~Dh&|#!b%1|p#1M%ZZKVd5KGu>SkiWw-=u_M}Rv!8b$U`!+~E^wcSt*2JA zwgUiKA4e+?&`y#jDfdOfotc!SC)YI-YXGa**m*8KP=p-FyWyzwVy5Yets}`SpyvGM zF&z!I27uca(qT-{HD%i#z>S8kKoBFVcr9!&>{U@mE{|rWjGnHlm2+)VtsS z2{ge>pDl)MuWfb_cU>-|3p;d-x3G6iPFSW%m|YVf?NB5QOpiBGS4-zLXi@Ffj*pV- zf@65S07z0|iq2ja9~`SNkt>3yoP3_x+(n|}Xr9`5lw~DNpN2lv5}U-#LPX}B$RK29 zdIGCBRtXR+LvHsK4{hTXn$H@&$?CYg3Q#f4y>w`i-nApwafi4hkpf%Sdm&y~Vp7j+y* zX(fRk*HM|qGpL&mf4HM$<^G*U*$CV_W6% zN6dZu>tVDd4gzmd-}jD>n}ESKT*dMy=T5V@`Ep}_nKFpJ7t0fnl`-1=R`zk zXAXElcFx`)K`kp6IqdzS`Cgc2BoC52Ca8aT%N0_8YV<;l%eB;=hQg{7!U zJmTSEY@$jUrYZI~t1-^rnlXh0a`pM9Wne%ug~-Am1aBwQ4OuI3BQJop!a2;kL%7r< z1WRB3@lGbx%i%s?X znr^xPGa}W)pg}4|UZAC|XLyJHt?u6Qd`yM_Mr(u9Y0{YZY%v^^GZA;Yv#o~c9DZv; z9rBB?yQb zg+>%O)!GH+dV~W$-!B#C89dtxB|CG zly^m-T%#^2AkZr^IQ-6_|k?cv7;e=2y)0n@7@X=nlL&CgL+m%MR%H}Ub7K>vEVnM;k?sn+g8TE z+z@z|oD;hn(qLk|gJwj&KY+YOIxkLi^#DC+g|q#jFen&N>D#rN?=&}rE0Rzu`W@uN z*g;)f2wV%bsyGA;rh%AXdnwVwaS}0DSd&@dv48+L6#frMp`9v1u}(|ji*B&NLU_Oe zwsUF4ox#px@gZV)-G{D@$U_Huz(nS>=gprHOJ%WI8=q~X^*km1y#+&zifl(g?4aMN z!&ij{;0DPUN((`EW7PW$k2nYUSnvoNxf~V+AGR`Ai5Z*~pJ~o)l$Ay@mZ*anZTo3j zal<=>vhus>1*Tdl#Pke{Y1^9*v4HFFSuYV7f!_}%+7#ziR-x|<0^;Xb1E*(LS~P+j z6Cd)SA*{}7trxwsKooA9susg`1MOmRjrBVFe_XGKFU|&29AKty-PeW3OwD^OJMU!; zy!sX@++bSkwjkazx3AIcJscd*zTxZB!|=`D;68JFZSA7iv73`SE{I?mlvjAM;cX|2 zE08#>UAA1qITufMFYLq^(`t1zjZNWzm}NzCR-70Rb=EvfNDvPiSoSIw7o?q=&oxcm zk_e0T$8%n1E9^%jOi(*wT4A-4)%WNz;p!@P#_N96Sy#7S=Z?!VcmvM*^N&E@Owt^% zHC0Qcrj$PBgjvIv=*tY@@4F;6_wtau#fa4I5A?KeCK-Ig77 zckNCqFfHv)Yk=28+uQd)m*-WVD_pO~-4PRYDrE=?Hw{gv5H&}Fcm%h9879(J0y_j5 zoKY=Lg!SC_?O(e^TTmRiq^nfSez1*CTlPUiKQ7%HYAqYIepu!MMC$c~QJSMPb~qBS z(8uYUO~xogCOMbf5+t1yVG-%MUd6b>@UPm=^UM83TEUEpyJh=hVuaHg5)C#xDBA!t zKzw;o4cb`ewOIEX#L!CKdFkOs2pS>2?4ok*U=>PyTiW>bCP&P6x5gI7`<*o(-~JHze4mhj%ts)z|qyWuW znTZ<400s<@RA> z(+E|ak>&(_KW+=QWFiVpGSl?EeA^9&5#2OKg+-GBiquUEWQqnP@L|%<$PwCNif*#Q z)|s_`xg~dkTjR{BvmDqVX@vJM*J;z1lY#-$2kolm@saf;sk+0jov(TjFPFq;MK)pI z@6TC={>bU^JlXQ9@}>bl;R`n79J)v5i7HBjy)Y_J<~`a9HXstRAhh*{piLRYAz;4KD8%pTxVQ+2xwW+`5LFm{>p<&`a2 z4lBC%cPaXq7;UBD;Z(~B1Ab>kegbNn19k1v<4uY|v!=mu$SYMjbIj~gW!@Ai5D)f^ z#@$c8|Im+>g*jXq&AT)`N@9hl)Asl1eq5IK;0hXA=h>J7eJRhozZZ!&F^2z0(rU@WO#d@V&0nilVL5x^#7- z1{2Y0BxSf-PrJ8NP05400}x}_W&37TlLp;WxF1+zZMl&B8qzO^dsp>EJ3@}d3&Vo@ zZscxKe5`!)lO{`ZWZ}tvoN3N>h?A9CPv*QNg+WRO_AF zSpm+@?UuA`W8>7_91U4sHbTX|3V5i^=!W5t+VoqDOsf($dn2THL`{Pi2J)L{sCF`BOOmyW+@`38b7Q{XRwcz3v#{S!?z*fttvS!wCpfF{oQI7Y;CDr zon)LyK{u5Fv5wF|L%XgRY?bgDC(R`}ptLeQ(jvpCAD2S&P*v8cAbe}=ScAEhLL{fC zl|HhtI0OX)1Rg0uopp=$=ML9x4bY6luzehMn3SJjzz8t;{ET?H%u(06AC#h<{#1z? znlT(zk&=kQ0+A3&C9l~T&;7ebqb{y%-X!|lyp2A@b!hP(M3j}DmW}Ha-;FUL+Q~Oa zZygXR3`S(cgpzj@zt@_+AIEJB>bNvJZJ44i4uO?6G@O1oy%qiqJr2h@q`rnQ8d; zmP_J`^ZWvRzbQ-}F;0tUqQ(HHUDh8_kzpv>k)Rq4q)(>`8t~^53Q~flFc3PoU59tS z_Sh_Z0;&~mKj&HwHx8PlZtaWFFbHX@`3Pm0iR>1tKh_!he42&Yn4I=Uk{V;NZ4wCJ z0aifDoSO34TN`X?4XcX#m^D z76W5$XK8>TZB61dPMI{XNkcVL(5Y5jVtg5Lj+s^-J5T-}&uqY_#U^lNb6We|M~Y|0 z(u9`zVDg)CIcEq=@op=NaS0i`Jg3#ICuK2^Bn_U04YQ-?I34!ny;* z7&-YqFw>JC{WziT3-yDb$LqR{^Lp?o-@vOi(Q%e+Lw`0!6$0P(EHM`hw_VTXr~3@=SV-p%f-L_a-eC zF}sjA6d}fm&#W)+UBM-_sR{2sM44ex`J6T-XsVvI+YR^ysN4=+?8( zCr(g17!pt&i1_l7@c3#=5pM0qs^6fl=8nnR&ok3v-P3xxpsZhym7x_mXg6Lcds^2Spe(SV6@Ij@ojr1IA+SmDKyD5!_7pqTJR>JZCwJ3G) zY=%>+DdMR|p#2V6_%{p4%RTGTYPLYfPlJ)v>OBob`12^mAX1v<(De76BRIcB+%0P7 zL3$9%%HO5}g!mcQp$L%Wvg|(l=+*`G=V!4gRv6_&qDHc21}SPB9=_YE$M2ml&y@%T z6r?h2B5{rboe+eG-YWjEJVq= z{qdw>r*mjSjrM$5hfp?%rJt!6CR^c1qo-3JRM|IZia#OF)OrHMwQ$8R0g;(DDlf}C=D z=D}!qb(^Jku$$K-aE0VOD%!G0o*>$ic9F)M*)%Hxpo$HI((JgbZhUM;Zy;X;X%K*v z4$y=%L{Pjr?sPa|XzkW~C`F`D*>X_PdyG1Zxm|)89YXEZ#js%O!fDOw5XK+-eFJ~S&g(TjZ+J5+UM%s@EO%88a7P_ zXhg!aRkv2^?jd*L93b_6tNcXBJZ`S*l1?<|99b*wMR45~(N8EU40?-wV~Dv1KO`u~)W&#qE3UKY2${)Id!1d$}OKb&;<(=Hcn_TlIm(^_rR* zW(11BTRwo6039`b#2VwFp*N@Hh}iACs?%TBbJTTeOBeM3goU->QTP~Qod!ED>+l<* z(_(|z;pn2#BDWawitE?e zpyEy=dsT-{o_elEaHl)wEI{z+bIoTL#LF|q48n{B*j2Q!Qrqn%&BfocEy{QJ{UI))g()}~}yF`thoK&mHkWZAowKm11MVS!o`@ zuLo^Kv-Woc5tjvW>rHCaLQj&8&OR$8`=kXmKpqsq3KqaT?t~0pIhngWE_wA>F*lNmr+t$`a5~&%tEnq zf&%Y7eaBD8&|(%~qaJ^8zF%(uZIU$lzI|;ZDg=wwI(F6-Ax2t?v_z`U|6(lxf`!c+ zE;cTf`Qb>(R>+88hRnHEwxZROx7mkoaD?EbK}(3o>f|)YG%3lAUY-}iPchbEd2%?X zQ;yG^73&lsLW?rmDs+tV!hrX)gR#B#$lE_z`g?@hsPDBG6f#t>M}-q|ijBQgb}J!+ zEVSiGQf}Y#_-sj!pST<}r+dfw zJ6&j0yO+tfu-6E6s|v}yRev9Gu~PjVl$~vbM_TNCC^fT6IYlqqWXK+bnoer+b&a?J2(Y`n&TP< zTe=BMp5ifC^ueXpMzFRzjJiaqbnLhZ8^YTccib(=<_ z+$n#M{88SszYpZ^mwv}UtK&j|uR{_c=m2mCUFhZs@ZroRr5vp5Ppj_`Y5U?KuNzS7 zMMbL&vIKWqjk;DFc+<2?w&z-CsZ>Q}6#63loi&=za-&N6ySe%T${QT~jO06+1o{x5 z7k26K7DY$~QGV-!_^fdBD@n&NSYWgL=SIg+KDzLb;gqP$c7D3{C78GA?-+QW8;Y>{ z$bf{5>{&XY`?bU=2D&*1%9ZyUq0w(Bpyp@>XX;$3~ z3Q_C^ArvmhN6QKij;SW!_|tT@g$nxj=eLQoUPd;(XVzIs>FJtt+M+T0I&iK7(K+pq zk*1LT;MO@^-@b4vX_7*k&xmgqBEEg^=ol)wZQJXCh`Q@_=JTg1OyPOf zWODuq-n49qBQ)VBEiKr6bQe@{^X@pDYfZ7&*be`t4k;5TXULH!>iEzg7Twq>mLf>< zmusm4-0+0cATe&_B#vv;OLj+8k7p01ArQh2$-0~cTgqdM&Pac+zoX2jB_irC?gTPk zil+@18yic-QJ1%Rd>yi~QB7Z-kfAuvUC*xNf*ux9PFnC<3dZeT@1MN0r=W5j!X@lp^_3kOBn{x{IUzXLfe&}0!)6M1G$_-AdF!;$zFX40t~##W^*9DqBE>b0 zjw?DF^|Y5!V^lt**<2f92xZbnDh7$bW||&}-4vu@thW+%aj_2JAv8`Fw}mRL@Sb^~{ zK?c#HBYyIBP8Tw7&bwOYH5u-1)$bEE$^f=e2!0S=YpP?0RI|nH#;IQmB?@TXUMWTB zqAl1~J~bC%-;hlGa=Oi5QYQ9!&7@{Yki-BK)r{n<28iLJ@h4AKQ=FUo!)ZolA<)~V zW7x7jBJDosgq__!{hcXNN?ucXTKYR75TP4X;I>h{N~5zwK}wD-(ovZUEF<0<^6y@u zqkB)^p(j7~g0vvS0Jqv9PuwED|A=U{J~*(|I+z}xF4puEfoXZQs@Hj7cQUi6!FK7IQ}E=7D@9Yeixe*a3p$Ayu(3{Fd(1Af`gGMI&E*|pG6dHDJZWzTNAbO0%&XR z9{_sp=_j%=t?M{p?ti|#Ai6xu*PE(is0T!)v*hSjLu3`ONKX#h$~^eR`e(haKh|}_ zZe!22Mx0h`|AzW}DUaRFWAgIbW5Y@Dbkih@B9fk~C-lH=8rX5(_2!_gNain+V6)0B zM0_nMy;D#BgU#7iI}Sd4qQAH;8iq&;dj&Z_+4&cz2l0yDp%{31>F;#N7G#ySMD7%e z@6XX;uEcTw;*1_|GXz0pGgDMfyBZ4+^-n)hFO@y&ViWPFl0;hC5D(rUP7kTcWjPH? zRy89OblV~np(IeAT*gFO)dDhh4eQ+sOO4wZ92bl@oei>x)s`bXgfMbs=vhHt7Nt17 zOF@%4JO#p%Z25lUBiAxac_v9!ei**PQ82HHwn%SNPNK^_tZH5?s6V@uor8OBba;`C zqzZe^;5s&KSwf*6DRF3}Sgdp8o{ibZpT50SKQQX2tbd;^iOMX+-qSJMxnooq znk5>s@4SBi}-Q)VS(WU2fh@%#-%LPlAbTq3XX-;Wmydhpb(Dk=&m zNQ0=qdz)xc{C>4gvR7-CM+(H+sK6nCDRS6?5nmHB`P#D`(YYgJI5JXgErXA2|b-u-J_WE+obH*h(|C{63%B;3$hhTdKQT9}dmM_i zc8-b_1Xd=SAwynpCZ=_R&VXLAAWqWXW19+llmaBh#%lLq;m+Z!zq1g*v*eVZuVE$# z2u*RQkddK;w$%0{LQNJE(Yo8TK1u1vdQ@%a&QIJTIxh;t*Zmd|hOV2&2y?OgVB9bQgd-2X6=gIy zFkqJMGEctn2FnT0LQEp!#1dP#PtYhEP&PqkuS2v%dX4JfRzF{XwydihoWkLr*5|i~ z7Ylivp^TaY2OvB?o5(G_4q~4TtO+^&JsJ$xj;PEuWFmU@_64mj&s4PKY6k+uFL|=Q zk?Xan)Pv|AX<1Hg;>3Ug;Zf0NahT72{#+eKo0gcg6Dv5paPLl|UpV)G-GENxYL8?Vb+#*)Ix~Dm2Elwe3U6Wy@%11}ga~qNvF^_-J zBK=)U;IG~0R%Ev8sK2;nI}a<&lX_kmj;(Zxnv<%`hJvnf(Dxi!j3v9WhJoG+)%EB(doLz78Fx)qas_5`KXdn9RtYDZR5 zk*ds@Ai}GLTc{DGSUfB`IncfHGkWyIrGB<04Pf!!{v}p=ydFkN>QjS=`ysVflWt*Q zCVS3hI+83xwV{@CdrXl`Ld{`uzHGVPy^^>a2cLQ($7Q=ABoty;RCg39>n|Mb!2Nix zqO2k#196@1N0N8irNoO)ts%!)f2-zAuM2~klN_2w5lX+8|D6}eUM)Jh_tfneW1|=ge(Fx0 zbg)|234I)6b;3#-;rDUl`$zor{XTc}qA?lYqQxLtwW zS@SZ=YPZfV4v0-nrhpUtxT17CI`k^Z6*LTRO0k{`}|@m$W`x zkSK5CbcfzpE)c&&&@o)CvmKNc(IYXU7?XkJZpTUBTkx|v+Tt|*ohX!jR;lAqMEzYJ z3@$WkwILG^NE*gzIh`5P$TxeI+uq$^=Ym||>aEiEwB&{ox&h2$b+jUvoI z0zl6`eTQE5(HAoH_Le2hPuwEB@Q~QWqEk*?Z1(_YgkmtmN}oG{l* zebLo+Fi0bTqUrD2>gVb$(cT!U5;> zYPvYzQ&s(3XbnXsHhMl-XxCv}tk$33Cf+rfR1+^yp`gL(??DPuLMn3igTmodl2S4C zkJ9N%|JF9u&dGiJ);T?S>x|AHUAydvX7u`(K1toLf4ra!`;mr2;$U`2g3TQm`5gyC zQ8lQxIsyUq7E6B5g2P}0)ZdMLER9^K_k*(7H2>L+GaivBIHnANma8^$(UA0dqy@#t zKwj1pdhy)N`vLULmZi^&k=j%a-ioIWBpWxVzt?~XMBRe=^UJKqQ&a7aQPAt5EvaDG zlgMF5{XK%%B;+M2<1lHZ1UB39(WmbmG9I=pP1|=Se3b<)^GgEQ~8zCgSCR^Qzt#(g4b795%N9t#0 zF}S3dfYZ6rCbT6elT=PiU^m8%8&msip?PNV+NrLR#&>&cK`)DCBUN5TZ15e8)fKr| z=e2S?La0jnJxEW~AVt@3)uFJ&2qlJQZ&^$k+_mh@`9s;=w6L~^Sdj^gG-2Q&ZaE<9 zv;sH=A;VQC`v9D;y5Mw z2stCr82xo9)>ePkE9$NvJ7^0Hw4VKxS`RFp?uLr;e6$5o{k<2-AY02(8w(a3*e5*q zU~^@}X1qGOzFrZYf7rNgBI=~43m7wkNE_%f$k|U=Kg`_hKfi5kX%1s4nJ$=F1sqhw zzEM{uE{W~qEoU@mWGNFu>C-h-Oj-4Q#Vu9QOCg;B($zGM??zf$-ro%8Whumqy}X)d zTgc6aHf}-~+OPJay79ezxIp*#0rlq>xw^S>w#8a<8H}P|)j8>COHF?#fnqOvc%eW% zrb32L`xQuw*UsziUajcX{l_NSf-<9f1%;2_E0iKYwC(?;o_;1t4F;O}bh%VuApM<%Lg>6u877_MZ7DVVo#ftKT-ef= zK6^jeTu{qZq%;X8B0PLd^x!K0(8U>X*JWQztTabw*87UFJ+|qRsKRvjkOqPQ;lfBI z4`9&~i^WFjsZT!B_i~*g>$$gC_8)Ih7sE>-VKcO3(eewAEWFSAnemK^NIpDg)ihfQ zbuJZSy|pZ9aHIjFl;nJ5o|W2NKE&~zmZYRn-EHv*CEDTw3fM{pku*_uoO;?*{(97u zbdMiyjD@n+Bn1pM(Fbfg(V`WL_wf~=wt>LZ8jBm4HHnoOek&$yZ>z9PCBE2moC1`EOqkfJBfvtnAJ(CHn&1hSb< zc?QOTfhb#}?28*&j$;w(S^|odHj4OT{|CG#;%LgWJkHC9_X}rb)pc=mS7gnx)n{I? zKaV;~kyBc;IIEDGi92fzwQz7nStcJ}Fw@;#>2hSbZ;4q+p5hvVyiODzZujQU0wJ8z0P=u|7cbihB>KTlY=Q zDjWNCPx$!#{7vTz;zgG^XbEMx;U3#zk;Zp4)zq^?9Y%Im`O;!p6E%JBnr91_p)U-i z5hQ^m>Qp|J5s#(epsnJH-D!;6!FhS}A*l&BIgZGYQ1Zo494H$x{QM(k@ya(VQ3Da< zgPLBJf_^&bYG*RUOc#8AsIFh8ywVSsmmiQ2bDTBS?`d8#m4MVgqky} z*w5tmm#d!cJpV|RYB$C@JMVh#eolpfh%e4_r^H5X0vle++J&s0q%zq})&_)rt!cNw z=DaI?*q+UR5hSPDr=#8VcBW;PbJgE|+zALu zi*8Hg#7eO-O97yU)VvHs^3S$n%8xeM>I<6k6P~-jNw z99th+V!^0}L!vM(x1T|1uP>H$ie7=b%3P+ZxVf|~%%%2>9t)D*&A3dHM}ZJpZE1HL zQznstEI*jQkJ1!Q0*XHsRyd$P!Ev1xD5j)wvx}51G*Q*QvVzQ5NVOk&!k#s1ySCrw z9GEN~Js@nm&ay+1X^y3G9@_VWlQ&?{mncwIZbtjcfkCGTjpAe}tMKmQYr1@JWfvO@ zdoIg%|M&}q1q1QJV2q-zBRDRQd}@{VZ>iB0yKLWR%gH(isikvTIC5T^(0lsR(}h6%Zlv^h zX63wGr`gR~C)Z)^H|1K{9KoK~+|%OG1KE)nqP5ygw$^o7jVJ4KD5$7wr+R@B(FL~^ z3o7qiptqMk`yi}GC{FW(M??>cK;!b9tg{#So8u&Zm9Ujvhuv25q5I$oEy!X~tJ0?G z@#+dUI3$*flFMh;ShM{%w|4F1lOZlv%s(sObEj?w#mvkD0|1+O^U8papDMw&=RF0Y z;s&OJW$I6CjnbkPUU)cm54*SHwoTN~G6B7r=pH|!u3zO&BXtZ_@(;+Y>k?+QQf4<3 zG7j7eiw;dtzYz5Z*+g3&>z1XzKX^>btJNUOu_=rd(%+XI(Q*;S*TmdxAhn=BD`w__ zhDW@1v_0JTQn^1=Ol zrE7Fvh!R9L7L1s2Pc0LpE;iO=q4eW-m=xi@KDMkwE704LnVzc9meSpsm*p-k_3E3ia|oH0*v|)~rgvJF z-GFiB)KILi!&#~l+tpoP)8hInXA+>#6gx>3B0e;Pe9Ifu^bW<;{6J^pV2mf$U%uk` zht&1GnvhW@KvZGadQEulL4NV`C2`kP4$GFP=F#RNdu6cX)Aog_wY0gQ42!i&+>6~D z^cyIC*K@8x$T7}`4M{6qkC2b;xU_Q_E#)F71(8H~TD#|=NjD}yNu&DIh$fHZ!Q%M~ zl)Z+EFCJBSYeARP?Y@<`hPo(^B-!oiSUXNoTY5aBUd_t~_r>C#(ka18e^*pASTOo- zIgpW%VW;>YcYI39d)ZJ@@=Lc@Yr1{!p__^a1$lvJQ?pg1zthE8O#F;VPk3M_Ok^zw zdd&Xvx*7~aTOyDwH931G?jyhe>g_@~FY};G_!v3(rAMa= zSuLE(eqN5#8rNaI*wWwRPBv@#2}9;dJ{zW?7Wq7R?&TruL<`as|-$5RYk7i4Snk?PVcT~_qE-1!$s~xy72pctxVl9JvO?{C< zy%YI>w914mt3f0nGZ#&CY4WqAqyJRmBHQ6YIF<>u;vVi##dT)YCL9M(T9_R1suZb4t!T12#vw(<}4EHBEQ(Uq!(ZE_?pfiULBOj33cJQPJ9rEsQXxv{=NXw z`Prx)vpQc=50Ed1$s)D2zi*ct)6Ud5Ln2k)b@GvJwI+D-O`_Vz*19ehgw?7>pwQgC z-%S^Nzo%*2DAvd(jm_o}9hXgI`AxIym;iI!mf)SV9!6S&(c_*jg;?hK?+Vy1W?Os{ zN4_naZvgRfL0GN#_6GfG+bOvVqm0xsgPG1B-lxY;K56eytsAoH*qAhVsMK?6sxFrE zspO}e=PfBsNskaj^z^g$^8`xxaefwh-G4;%xX47jI9JQ?^+fl>Z~8??SLe$Dg~ZSj zoa&S`5ky2aER3LY?Y;w@J-TXeT7~3q*KO4D(?VqK30Mq2|I3`8ftI;=n*s!e+`xsl}s5)U8&6Q}SxF1TG%Z`1btXy?7|MKZo;YNiH^K zK~l;;r?V(JmYhk6%oIxTtncZG=N@DYGYPs1y_BVi=N}NQ``n2ZPRERWgh5=LEvPSw zbJ^SyhXUaULa37va;KHaFL2yGt(Qw%=~vkIDAw05JwA0jaz=q?P?K_#p7moBt&wjl zuDN-Ri&fK}(oD6Myc{rMj6JhBNo5^!a02F66hvUv!Fca@cgnkn&ZyN0b&_V59T*$W zJH_ChEvu7eB&dt4g3V-oDk|w%UDNXM;|gs>Qp|PaBn<(wWRUuAs1#xTU8w4?sCbEq zl;(o@vw!0A4>#hhu|cRvfkC8Y{h)hz;y6^dPq+_{uJ!mO2}o{d4co4vk?eYDTPAPNykEm}gN^>U#E4KN=koigs0IeKQw z59NS{UU=KH>_WtswS_eiMR-EQ#U}E~8V}03rt7%vR#8nq=?W*Is1L|=!$Uv zasJ}v*#UJ9Sg+i5v?}Rf*Ffx=j_M|>Ohh1;oaH!0SVVXrqJD?ESYkJj)xfeuU3MKI z$)?;;mi+(=SrkxOdT*XVcC|V^Teoylz z(|M^bA+_4D(-ISZS=!NgVR_}!sx-|=>kH1I##mo=c1FB@oJ6TiSYH#Lo$rl@3ryGjUQ0KZ$+9f+38d~Nlsy+A2DmzBB{ zgPG3n-&dTHSB#5H(3SAdI)SuoSxXYXgsAW*B|SoW*C_lW3fU7;;6 z#ozi_FFRTaA*l9eb6%I-$rZ_c)gxnLEk#^ROh^FaDL`-mxS zLMBOdRkt)FO^=7(ClH1hezy=FInr@=j%OVhW1b#mY57Gc_*>oOO{!|a2Fs?bYc>)N z=Ixs7sbfe9%`I&)m4^q2l>%Kvzl&?sVv84OJbEF*G7 z-NVk%U);Orwpq>BT?zMGm-P04#Kg`s-QlrYsGiCea*;bPQO&i!Jsoqr`s$cv7P^myzy8V|5HM~ldB zn&XnFt$fQIOcRUFK-!m+G@nFu1I>LLHB|tfY|OmhN$#>m9#b%if%JE4W4Z_0m4RT2 zr@{01!QEzXWnZ(pBC`+$LJ25R_4pN?KYC=&mX^X^eFmf!H#6iGBSf_xA*ZrOT7Ru1 z6G_WLeEIVah?vD5U7qv`SYr$|F zR67##cO7Y}5gepp*kNTj8q%>b(>(YI4~DbAFbB#|pL+|#Uc7Ms&`CC=U8tnWSI!15 zX`uD5t!k>2ti#m#^~rngUajcz{^J~!!LN==|IQmkZp4!LTy{FqwQ+sEtj{6cIIq3f zxXd}twFn#0R(TDhB7_%xPp8 zmShbraZeZbACTJDqd;2~-M3AD*V>neJ-rNRC${c2IBhT8CS*tsSPPXh>ipqjqKA6= z`;a}_3+eA6r$yuz8)tMP)#tj{yDS!+PxBrzKHn!r$-@|>JUxE%rEG*_m}HMn@pGbd z_&P!MaG=d0G-7onnJfS>`X!`-np_-i0I{R8(~bGSJL(qhXUu@1!&bfqrUzGB!V99F zR#wbn)zf0#HwTCNkvU%yt=HKk;`*BS{35$0t5UAK*4cxHbaneOlks5$Trjp+wNlZj zOGkXd2jUpZ8HiAmGhY7SF)goFc_|2BHg+s&u?^ZvzI53U3n~$Mp?W==*B1e^7VXPY zyw@+aPlN90wQDsHh@Fb_&vMrhcZ-cg*+A#P-GZ=QQI=R=smB{ne@utPC#MSQQpWU{ zkqrXS*rN}zB$HneMM%~nL3XJ_R|J;k(+a$L`VU-(ETN!W+L-&it{`7uxP6Og@ zTSS}up>1!i-M~U;P8P`J3-{$@ z2F!RJsW@lT@O-%@x)&Z06+*nxgbd9yte1-{ z{T)$OKtmJ*5;Dx5T@FRqT#suB@Os3{7Ikq(|3i>o^CG=>6B~n#I%>p-R850K4I-!gP zvBc-gI!WOAs#pVZ4>3&>X7T8X&abWndJiVq$%cj@2Rb9CR3uS;R>f)kDJt%(q7+~8 z!b9rTy{P!@Cbba})@#DE5Asi)FE$jdJ2{-#`%?XVDN=gwK4W%9KeB%GX1LLPi6+{R ziKru9j3mzX8HTCSc<KI8?;0v>_n}PqRW=aiKA|d+qjmO?O^+xT*DmemyHjsng#PL|caqR}SlS zsYlpA)xn`}^yZPZ%7xmhUgm#gyeEhs)Ysh>=P!H;-?hJ)dOU*Z@u&N_A&x6npAR9v zwc3fm59%9sn)2mHXhX_-Pe~G97Op()`0MVJyG5~(IkFWF+4sX@# zv&9hB=`c4-0SR1RiIhrJ7_WSJw_4NXgGV`XvV!f3K15DI7Vni)+aceVp;MT?fA`WS zJo`W})(Ed-JiaEp@Ti~&qX`*uWv!_G9!kjY8$_l^h*hU0HGc7eGbWKx;Mxg#dAw4g zc9W6Y(}js8^(ey=p{*O_xIC^dk87QV#j5ZvhTei^Rf?|Yskmsl*`;XN66oNQjW-Jm zy5Y{s;%uYtEAvJH<00NL3!!m^_PV+dwc#@RM2(VK64K-4=6bT(xp?6Lb$!1tQ)NLR zK2v*#?by5?*lwaTk~tHy4w;Caetb>m53lkhBv0g{G&-e1Mu!^JYH&lTH3}tUj4-~I z35T}$8!ikZj)O{VQtr6A&cCEpv$98SNffRf)}7F4y$Bpv?uKN!m>Bass?~|pRLE=M zt2J^#koG)2@=9fZI+>FSE;wFvY9mf@N3qGoRR6>K>ONz!GgqjqMLUvr4!k@FzrL>2 z9_o0#<(xLBj!lqJepT zCqFH_mp?$uSUZwSL^2bw^ZZAC~?&Zv5` zWbc8PDVru_knpMP zvhLl@Ry1M7@6YT?st&G&=nX-XPZOeM2F>SI& zd!Z=4`pQ~e_@H9av_)88A2^8e97cv~M#iQegxFxQpiXjJtT8LXj>3Y7*N4~HBcYGa z4BbGg&{82Rd!Qa(FSQKS?y7Dy)rPLkTcra{9O=(>`aGV)U5IFF_dxJRkh^Z1i5NVn z7L9^$KV<4rk78G6i%RuC3uHv6b|$39Z&Tar%Q`JrR0a(GnzJ%WOs7TdPAhRv7>Ks8 zS`(gokbn4mx$U5BZKhQ9zc#X3LWb9=0Ksz`W(#f8@gR+SVmu+kg@N8-pnM$*Zv?oyI3d=I*1Y@b(_DH9M>?k#R@h- z;l{X9*9f&$7`t9lfB?mTSy^KgD-JyhKu;HJNNkk#O(T-Jd9-P^ROeWW61U52@zVpe zUifIi>>n+q$6sIhlwc%MfkzoyZ8fdjbi{5zL0FuWeT0kX_j-iM7cV;ED*YX`#2R$$ zb9H{^Kb=Ii1<_Xic~2NCO8pg1i=9}a1mPh>m!Ph$Yqnw8zq^~8yLZDKm$VwBGcH+O zgUD_-!HxDM?7-Lz+p@q70h2QMeOg-$G!(a~zziIf}2@FIbhB`H;>7aJ$*Hj1`1q25sGSFoiI3jt&#>`+8?Fnl>8L*QExTXJm?bOXfGL|LU`YE}t{2}1*Ek%lkC8^KOzp~n+7cIw3l zQ!7~^D0`*=v|e`M_UxhwJzLgbU60nhW z3OQgIJFU)^d2$U0@2(-6n~7A(Vi4Nw02!o1NVAiNnae%uTB=VLy9eAz=k+3@3awZ; zqY zec^=kcw9Y>g~@1GbS;#jM-fIotDvpuzQFa0@chGUM0uC~u1*S)CU=7N`&N&TTlZd* zqp)~9u9Cw1YxvSm%~Rj#FgKK8fUD7HC@kovC2G8g9T%LPk1R@(kd|iTCUp$jg_FQm zbHP%Q8qeXxwo)$`gc5cuX%U<=MN5*sf>9ZDNgZf87_IKp;}>urm5qJQReC&c&bzAR ziWr(2ARmbekWxZX!km6Ebv_ zcFt)+9$^m}oM=lzM(r^9us6M90MD=8Fx2%TbzC0HoU`y!B81XjYkG+#O{AA?Fp{3( zYkj;XL575V9XiK`Q*m0bQ5qM>HzKWLM8CU(arUBDW|uPDwRzWisaatX6N%~ZxO#l( zX%v!nv}-3=Dt9#&0|$zVLuhM=Uwn8)co85RoXo)*Rg4Ak_6Db6okU53(3gYSoC!$gmS=L{sB= z=wj14Ng@W+c)E4%qODlQ6y&ol^@f-<>K2WI&S7X|e{ho?-|1Or%F4>t(fL_T0YAP9 zS|=pQMY`awn2?Al4;WmofJhOBzbi|B->HswhlGqB#ZWb^Vv|$3zF4X0{L!Hv-} zQZZTYx?T&Rgp8fT4Yuuxo{OOypCNdI(&Jx*h^tP($VtDnJ5asIJ;V}hT0K1WFxod; zEC8$xOGC2`55>mO=dQlETgbGAS(Ju2?cp?;MD#O`qQ>fM5oa;*di+{cy2#8L z4B`FcvohkEQrchXU%F>%cAlCsRQc!`)#j$v8Tg(U>izJ28;7GiL+|SYX#Mra!R7czRwcL z-Ia;tl5Lfo*&!v*7O81l8^?!I-GF79!W=S|4YPb?0XHnwrc*cfc8ZA`DG1{^|YNr1GMFYV=pBrh*{ zKnNWJrkB8@Bq4M{C?Nz0HJB1QCO{w<_ujj2o6*_dAJS+fjmpuqdu?m;o8L7v8qLws z(OGBhv-jHN4MFGH@aE0b}30Mjlv;U^}&Lt^+hUDC?Ml6&u5z z$!NTg;dua&A;i+xEu!Sg@yUxRxl56yPdIW4WrbC#cR~?{3{dCx_H4ibQYt2ms^lM* zyR3?m304_FQ8zF8c*+@${vd~2+}g8a4sS67shknma})qtaad3BFUMoCimpG3IL;x} zTNc>*4fZJQNb{alFxmBxtMK4`_P{k)O-0|neYaFsVU#1KlxIZ=?gs6ig)x|l7SU09 zhTgqvg2Lk!V@=G`3WFzK_eIHc=U2H{8lEuQfYyYR8YZ7(*f}YwB(Vh?Lmu~~na>w2 zl^~=vEBxASBMO4m;K{nno4-Zw1m!UC$qKx3@xz;Iv`RCiYj9In4&0FO_{EBMBW&C< z0IfR@k{u2xWw(KbsL_=Df<+743rlz12d$@9i4V4 zYcS%eCPx5s)VK-l7>WSLa?V*80(nP2=JKX2mL`0CzZ~NFEBs8VD~GOZy7bQbXL;jN;mk@U~ zhe=u98^5LnO=zU*91R}0!Q#CV-csm+d-Fk)f~!n8N4sh`7*u?BU0C_n20OqwdeYDg z!!G3>zWGkUlR|gSeFd6U8j|VF+z1Hf-r4n}=pe`L2IxacTqZi*D7y^al9q)c@%gC2Gc{vukb#@c_ zf!0H0efFHEiDohyXyE+Z&@mem;=MEv81w@V+BPX-5X*Be7=-T z6_pzj=Lz(ddoiRZx62gKdX1;gB-p7V=WdzV)cLwg~3sd?qDU!#!6{0(gK}| zyoB{-TS1_;6*I2VX`SGXGz@bh`fXv84;XN@ni;f;4w#gp05#0}SXy(6E#~E!ciAUj zm;yGN*#N2fk^)(jV}rWPRjO-~J%(_Co;TE0xcz2*Da}9x*GYx_bTNEn`4DhJf_^UO zdmJ!sRDD%(<1SQ8h!Qbf>dF=4c_?gY>ECoA8G5%7T>3+Wod-VgKv3=%tBiv(_O{{! zl-l~&mu)csnXhcM%?4^5x~2?TTRCt6!73Z>$0cZT50YG>m}9PHSI7SPdQsO=;)&v- z%aD9l^Tcj2D~a}IF1irBiB~F$8m>7Ypu#LGbOx91Te&X9FZxkRh{B#sNU8Wz)d$Dk zL@w{~sglXI!s_Vwt%67auvC`zT;}9i#pFdV>tf55%07(PD_rZ_6%6Rzd64vpKV&s| zvOpK3Cn8UcZTW*1#R30F*R;xb5B4;;0x}e$?S< zAe^~V$%0UkAtiwcTsHBKrp{dFN2d(1V-NeJykVvdIJ+i9c-GIwo9fDywXi7(z-OOdR4p#4 zwt-fHQQkTXT;{zXubdqRFr`XCNA@z%`q%5g3s-GRz!jt#5U%l7oZLD1!Kwwedci3m z`IaI;H7IA-f3Hr$R@5McHu~0yF(O@gDwBj=vWCm(KX9OHvhe#NZ-u{CP!N#pNI9z$ zG)vw{Wst=AU6oSIz14K#6CR&aj#-9DMa#)lPxrw#c6*bW?L(3bA$NRf@5d*SLUdy(%Myz_Qd_qiy>Am(6P3EK+`bf&Qk zrfE(f3Ec2Af}gH(>TSh+&?CG#TFy{&Q3i!wOLnV6fX)3Js$epzmfkLxvAW`rzpQW$ z3V6H<{}uvlg~!`n)RptNSryrZWAUMTbHgGv0i*kXV?U@+)Gg%j?<*oOITH2#G&Nn} z@0GZO>Ja{Z=ze?Q>MJje4O-h6aD}-J*}<*U#uSCP=c=*_R^4!858I;fI*N>Ny+bOv z3^`m!h9e$W3R$gD42Hy>WM+y1=H#Q6O%6Rmb@1}A^PDHLji?xq!3v!mCt}bKJSYU9 zfEW&G-z=UHJ;cP_?a(|-X%3Y3k!OHby|<0ue#;>arn0Z*CpgeUYp z5VT-{7RP6Y?!{|u+18=^?S-q#1g&ixxcmUj3tk-Qog!2@AsK2y4RMgtrvPusUuJiB zd`SqbSG?8_y`7yQrOz@pK$k7j-^zh5JJrd;#kQiDT39;_128;6JwYzQAO;i!NQ`() zkRr|>hjrE3$dbTv4yRn+8Ye;57(C4rTdb=)AKLfD{ps)}CWR2}*si)b#VVD9K|;JL zUV!W6dW0ruskjGU^93zns}b3)#6MSBPBPl{S6T#+YtXX5!5rl43lJd>$jdF(_p`p> zKCMJavB?4sQ3!H7+aP68Jw8h5J;Iw(Y;X+3E-+B*LWNE001BWNkl-{WS1`COI|$(&Kt?9Bq*Rd!x!6 ziX~3f`GA7EM5SDN80yJG^R9s!G9o*gB z-Q8Ua1&X^n#oZa)t++dFaf-XU4N%M<0SP5P+5!%~ z))oDyqyqN!iJ=e8qro=P2Y}c};#x8|a4z@bJJjZNs@A*TqGW zzQxijTTS45H*ZMlvis!p9Y$@F)@vu5*FK%!i{K6Cq_rBEMdV<)sV1`9$dJs! zjuVtIK~#gcaDsTW^SGRt!?&2CT!t9f2|YiHx%11=O;kl-~H%i#UuE%1hh1$;6&mRTrlv_HGh***fqCk0;-#vPl1cP@CH>+zhpBQ zukY+-5N?N2)?49oSQ7}fX7#P@HZZ3Ou*NHDqJFg|6C4t2kc zE4PQ9gr;N;+<8~Zl4DGEj@}JS^TScj?9>!@F|vkTze6EHvuUmVW7Td+qK-VqczMg* zlD?e6t3X`C{J?Tsht`a!ZDoJD3qqwMF*3lFGa5Gw)jf7I4JbD zkL((>#rY23mu_Lh4k+L&LkTWW5V|oWwog#sw((=xdmevD*KgM9I*Lfv*iTnNtO?qG z-n71qD^{ZFAvnV%6z(ElC6F<95>>@1Qdq|c;W4pH$_Ip)7jzY{?;iNh47C?~DJulL za9X5fOHnaE-PvJNmr9G)g4!sei=O9Dt`wj+b&|4@h;U)a?h(zhOcij6TSe80yc6z- zvahXkJ=;)Jrc(>Jq~_O~#&3O+D9o#8IxiXq_VVnh0e|;6-+xuC54D9bqEC8gebNs-a;0j1ENiU5`%v1kIlQADi!cT9m_#yEZyg;NwgQ)f0LJ|>n7OArJMlWrHeUWOVQ{$US~Q@Dq(B>o^pYph|4 zWpNzXxpv9a21$L<3M&#~D@RWr5fzt<>Cy7In`kkU{(afL5n~Vh!d5F(&1}u-D!OyC z?`fGHy06hmCDY^=jy_nI7Lm+`613D9gA1z$?`A-+P=gNl^=F`l=p}eJ^oB44bQrmc zqrv1C`6U1odnh1f<0WFGl22pifLw;w^*F4Y!maLz@|RO549A4IzUb9o&bO{{dqsjq z(OlF{15z8BIHtuPT+G*b1|9n0+*Xp_E7XW4m`#~}{j~OKQIV`+pBY_(d+1(28f262 z4h#?d#2zOzES~d5eTS~7TLN(p-XS>|Te+a+3%XeNQcOoaFy#~yf-8COHS$B%2pO6b zpm;|81!mUs+)C9`>t$1rSqdW6uH%ahU}b>mORvR^5mCQxWFUGBi{*3>)+)@zWracQ z&Ba^FKqg#Zn%yX#0aPiv_k^?J3#@JSu&Gh$3j`dM&9>d9*KgyYZow(%p5kmxF3-Y&#)GCs^No&r!+)lp5g|e3g@mA;E!T5#@^pY ztX};_fskH1vAbc|`|aPVZ)=2AE43Ey>sS#TzTxO-4>409`H*K>L3 zp-KmM!r%P(c?fiaPG%z)U}O~NJQW4y0_KRV`D!NooWWhkSitq+%VHMvR8mcyk5bN8l3#7W+kv;wd87YcR}Y zs#2KG$|(0^N(BE2-x?s3#=-o}=zk{u&5eg1gF1EqgSFxGPYu3E`EEA1g)KrfA|wn@ z@=2(zcL0U9jLE|dDUpOiw2ykFZPEGxiZdvEJ9qzmIqH$in62dgQw^(3P1(h%pu8;< z?N0W~t`~!iw+Q*Pz=m4lQJoz$g>R_>1c65X@iY6?w4a)jwKrV~Ic*BO|hlo>B%IA5&Jdb+7ol$0Teq%krl>L_138{GBe(~?JlTJgV zJsw+kp%t4sRP=!?2cm*Q0;vP?xbSFTYcF`wgD2|;*r|HrMfAn|v`V%%{Q0A%5_dpT zDp6n8=S$$ujlqYLR#^Xje&4PUQ-iMAz_Ux$wO3C81yO4&?jv)#6M2+;CF=@3Bt3yM zoE@~!@_?wV>s&ZllHIX(chW}Hr zi}=|~cKjK1YlXB-NXX;pK+hW;`mN#fi%Wa<)N9n2Gy6U$r$X4YD}i;ij9@xhyfW8w&iKQO!=SLC@hlD9J@)t|i8KKE*in6DHrghN3fBJ;)daRIjp3U~X4nGVK8mEKU+s zX4yznOMiXaZe2gob--1FM)GW9AJ^?EvA-xa#BWN#2o-;3BI zwgOu%D)L_dUN~2Mh$MCrcm0M!gX&B|UjeP@MJo-jx0=!(*H`DCR7krmGYf~Cy|diO zCqXAKj=N*llJLlcszIMZ{1`)5sJC;oiRAukq`_R->$j1QPTU=KKl?gTY9!0-E7 ze@CowMHz7JunPb6OPm^>otxz;0%rDmLhB0Sy)qT_t%7U)Zfk@l?~L$>yiyqUjfSok z5>WWS*;PP%q7}HjnSu=RbU&;_NT>Do3D4K$Aqy>*kTM)I*lfesbjC=pm9q(1r0GHh zgN_PJ`S2O}z%#Lj1DineB_yN3%Rzn<>4i@Fs{_Rno!b(%UBbuy@iraSG{g%2H$xjc zWKGLk?PQWT#p+7R@k(!^a4wwkAz`o=OyOT zsRk6#qR3x}jHJF5pxYzY4;XiOsQ+{_gLe$0frPgVCH@4=zO{<}-F zqpC>)ZkWNe{l`zzF%X!S^8pNt3`t=);e9xIAx|d@jo}~VQDTQbS_hUS@_O+D{Q}+>nFyF zmrkXXGL%0qjE+gwcMZfuzhr9qm@?9)eCB4V*k;$nPYQks>v5`|fl4l6{`v%h??jSJ z^_SODb4`kodlDdd;U$(j;!GHatz@?PK6`L8u$9PfLs_#f`JXY7!fP0t3`+Phg)DCQ!PwCBE|eTb5Fs*TV5Svd z{xeGY0|A*(q-S76Fqo>5u^))n`#>q?ifW3g7L+KUVnbPnsNASiNeOfttOygacLVBh1!RF{GfSfhW5F8l|! zhlK5I1G+jEN8;?oh|7<*SCdOThOpDI)pW?sS4KIMw-n*S&k+00MNN-Ow#+g7J#z+z zU9PV2mvSM{t+8hhc4w zCDwLDhyJ&;B`{rwA4&jT<^o0R8)D@`9Pm*?pV@GUiXEf1+=b;H!QZP&~dkB+l#cw*|`XN(y!FEAwFEQY*vmc9tK=hs*gH)2N z>9!UD_zI_uol1El-!({SSu0lq=rrP zJ^ngWEM%8}cVs#X%We2F32*XTx`G|{Z#cr_mv6tuRTRpuAF0qbiL`%(EdC?%yI*{(aq9HTM`m;!@S=f6R7yaNlfmuvIi(O#@rXT0=$oTG|qv?FZ zhU8hco-H*vRIs^pnLKBNKYb;35vl1)=);e(ucVWRB}kfNr7*=m#>sT7Mz7ML8L$8@ZkQIE0*0Ug`_5a!Ei_!%jKr>T&d^u!89o&;TcP z)XQ<7lR&*uK_X3pwFW)-PVxeX_;WHn<~-5|(l)3-gd!#otIZ42tL7y%A#%n-W!94G zd<^8Kz2c`Fi6{sMp=JOkWHu-`kzxghu|JlZeT2NX(N6x7q`TaAwPam5t#Vd{Y%HH?fkS0c1avja_$z$8D$p#_azp)JlfDt=5WyPhBiN8|j>V8_0IC^} zY&oDJxFs0a2uK>NfYn_i8e74~pYe*boBWU$ZMS{kkie1<-DmAVhW&JAX*C4cpJP}s z<`TMe|5c%*Ve6@`+eK&j>xZ|yKEA~$dOD^TOpizHQyML~)G*n{Gz86xKaMPKkz(z(@dbxr}05U-IaG@>`lcV63bw%?`Xhu3t1xt_l5*zJ4x&5-f}Op{#)xySVgSP zxd1q`UOrYSIjQIEvUtLVGZ`XYN98)xSaSo3k*D|jwQ$bIu9z#eV}b$K0EC@-XzaNP zS8v&M$gHxWzt}GwMHgnx|4>?rc(622UN<2Nen_ajkk#tN=@4G3mLp7f90Op{qEq@Qk47EHSyS~oPpKikg4_aZ?fQxng!Y?u4`8Ca^p5u<4gb% z$wk;AhaXU0{JV{$XU2Q|N6I6x#sd^prC-dujJdsP2WB*&jxPE1V>Dofx6c<-U_pRR zJcP6a`GyfLsjTYA8-~?;i51~dhfDee5G#mWsGv0^DCo&3m{o$IwD3xoQCS=AG%GS; z>#G$G?N26+i+2O@wAtl-&sS=QJAE-55$!997)n(-u}^0GfNHiDa_4dBU5SyCsQsr) zWa1--#H+&FO*P2Z3I^f&rIqLq+t}$jgQRf9udg4kT8tiB+j5)P1gbIT!1fp4%pXGNHP@)nBN5U~C3;d^^3{VYEfH0@w(_85?e_VXUVY7xU`ZZm;$FA>ig=n# zFB^g&^}h;jcmZGo=iP}s_mTIhr5NL4!(1GiCMPGXH3~FZ^phoZa^??4Dek0l+d`p4 z)w5#FXcX|)1z|vcgn9QHV4ah3;7+v+ZulKfQ%_|o{I%1fWjI*UkWmYWXpu|)bf-k< z6V)XZ;FX|sUCy##jVgiK=?NP}y%D_2URFb4y3EGnE}M|*eC}y2M!o_B@)J=M4@-)! z0FCj4k>!0j^=N`|yb2P#F1;~uVKnazA= zO#3ndv1nfO6I|s|fzD%9U;A6mk>H$HFy)wa--#OOu$r~8WYd4IM>|d6SNFpRT280d zbaANoWb>aj8r{KXctL@)YMJdcqDoYq9|S&D`zX!=Y8Lly^S< zFV`&SzOYlFkyIP|jgyk9PVi$vh`U}WMP zLz9WvA-F%NO@0oL>wAeWRSX>)T(k1lUWiXj(|VT?63(^{ux8$GYwEl&a-qiu%z}cx z)prweEq2}$dv6lSpF#RU8X$Q8j#LV}A?1r}Jqm_2QLWMnPfjF%W*`@)OvbML>*Sm*vU z<=Fe4m%E%Bsa1NHalKvq*Qz};|6-y)c`uo8NS-e?1bv{mGzKzDT(nFur9w@*1hr%z zo5sgDD&N;$CW{I#x#-lP!gMg9S#;-WxfqswSV*@iYn*Pa>D`(N0BK9o zTu+XdCTS5`8oUA<(qK(^8RnwqRYDzNa{Vf!9l0cpf47&x45JeW)vj|OTFN(Di2 z{m>x7#gk%cQ%ivtHID;aH(K0ia4TwduDgBElrN0nw3+h8@NRl3975jDn%%Ir<|cV1 z0Yb-JvR1t;y`ul-Rzp#Gs9(8&mALA`(h>{e66A9)^f;pQZi*8E7&eGXhSrnD3zkq+ zQ&s90;$UPZ1GLRBQk1YiqdhrfqaPwJO4OkTBP^>`0ZA|<+Ai|9>BH^(kSBRuX>O7p z0R_aYtgS<#h6?}Al_}_#43eYvSz+6GFpMa-Ui3~2?;)>Gm3Y1zZJJy=swa^)!2wJ* z)@RtyrVC6qa)Mwjo2BNjXPfa#Ot-(eJDy99yaq`wMJW5tC{A#b_c*dN9*|MwEG8{Z z2Cz`bpKvI6reh%mN6kr--R8Y_Zh6Ab!>0BltKY<$sRnOjIdA^rRMo&N(~?C~(2YY% z@ON>)Odr2V?itzfF>@x41oC?0oL%gZn3rA)U4Kbv_|PIw+CeFJZ2!^B+r(VtBmRAh z6pBS#gvCmpy|ClXg>kqKE=$*??6>7Xdg-Ug2ZSRd$WL7lDixjse5Dd3US-e zxxY0(_J1WkCX}GMqmd8D5H>Z4W)R#9*`|_L8}I6n!D;SagAD3Enr5IP^TeG5v{_YE zawoyS{|Ji*FI9!MR72>bnAshifx%DJ!Y~At`$7<)MjT}=w{*+ZFK^M>7%o#4Y67Z+ z=h&rjWxJ8oI9+|oxX(S45Ga3h&%MhP-=$ z6;^*BlN5A9JwM;s$lH$E5USzM$Aq7aS#+_qy))i0JiFk<2-h@jrWHtb=ud=7f%nZs z#)??Gc9Us(59WKexoU~4W%rSGFQMSk^T$qjC*DIDF87{$)c)BE@a)olOXvt1lPc=$ znR$4X@Q4=p_j(z4z({X_f4NoWV6jRWT!MC{3mPXXe<*w?Q!FfS6%hPQ;4?Nlm7nnT zvhYy<{;-VZF!Dhh!TsI7I_SpAy~e;SD4(R82^s>00VV$84)kMoHfb(tu76+?YkRev zrK(ic-31ddERozwE1PMUG|e~c8d$gpt=WWVZWHIMYO?ff8HKEx%KhVBin`2v*DHi` zzz{Aj01z!=sTt$AXqF=YLKsKvT$!p0fxyk@t-waSk0(y6xSR)OJm%A1&@ld`B=0dV z`PZvHIsgzp{aqzmK6w(#aPE=h)L7dKeL5ZTkXC)~J zM$gORP%UEL>*3e_E`6{GYP&Ckq9%Sw@5IdBFfyV|W`W-iN^~_E&qPULZy8_Hb@N*j~19W=K*3OTsHahoOMRt1jP)g$bn&^lX zlG&kewcoBx4AUNb*KK*u@e_P91a_xi-q+ZAX&=Ha95Pcc`6{<5EmXIz2V4VdttBQ> z9Zt>oY#@4fm-1y_`ycyEjwQ)+FpvE&?W%mL>58f3IX{e`1{Z(?CG-fu** z4GJ%Z2-{U6-+YDQ+t&ob1mN!vWeM$pe30)Ej-XrSvU7`c<$gZ)>92e7b>U=JMj(P7 z-UGZ1PBB~ufB3&Ijvz?jVzT*cy(gFVfi*bjF;EmDNG_f8)tl~69z)5JFRYIwllCpM zKdM)GADeNj;t^KYd8vjEL6P{ZGjuwS-CBq$Geag-p!iD+mAu)7r`b`%p3u5(r;?R6 z=qyiAaDGq2|9>ukS8UiX{7#+uzwP7|XH4`f7EG&d9)0Yb2g~gKoMS6xqgT_Ak@_LV zgt$Q6f+0wff?09s-}kwpU+7a^7(%oZHzX>1n_VNqGF>s$I==o{MDhM!=)FCt~? zEYJ4Yj%aZD$t@_-%56i!yeZUW)?qaoOsKGZj}cf)NeTJ)r$Z7aM2FtyxuU1?uPB2* z>&B&?rAYralPLu#MRz>Td9e&x?@A1-p-Oqaj4w&Z?se;Iov|82wg@rG6f0W~KJ@uFy#u5iIq>d|MI5o>hctrNh3suQ z@r_|rSYt8q{bLg6^w+<4KMb(fmqtkcu$3FFs)IM{D9ZBvEF`%{a%a{D*3gg@y4_&f z`(NprtRUOJJ<*g#UW9+`q4egt5QZSqc90&KQ%TDA79>o35^eu@M=J%zN2EqXq>A%e zLTc$%vVv=0Y0J3md1~_ffzA|6PV8_pxC%Gs-Y_DEKq2s$~ih92mX7m4Yi{Z-|8pbD@O`3?3HB*)jhTIv@aQ4)4jE&nCwqpd?J2 zaT}Xy8yh78okvjHGWY8qrS~y|J>Q9QgAO$p@AMlWBDuv$pXEU4KP}?%m%d3IL1`ZZ zuVRL6i=^7Xz;9jo5CA!SaX!VEnf<^2Sibucy&N#SdHqOk7<8Y1=1}oYn}nGl@)f5s zzmmbmQYAlT^4G?BefNIZNZrkpA9+|7b1tUUA7?2AsfPTKQ@9!Mo_DegX5RG9Yk1yn z*PO9BbnSf>h?+s)YL~16RrrqE`C;dd_tE;=!&=m1_b;$E(|&i+lvsa6$Vaa?GPf$A zrxag)cC;vmC&LGCQ?BVbdE7cta!ErzJ}YCH>5$dLoo2D1>=hDSeiAO`r&Kf zCNb9o3|Y%~ThLaF2?_J{`Iu#kKkqv`_mWx)Th+KD4WTx?N3eAxL5;w)R zSGA@fyy-?f!dUP-k<_jyELMSy%aN8~$y9|e*LY*&N43GMF-4aT6lWR1ZX1Q}u!_e1*m<>^38E;1*>i%N z?R7os>TB<*(5;x2?ep+m)<+R(t3%yo;{Joh%-aarrBt;BoP|2C?7#58;0r^a#MSK@ zA~OBxhv-tnx%YAsmklo*klr@J9rIcLFDAo;M2O+Srex1ykW&k^wH8(^?|M0JzowRG}M3(ZS5z4EC##|ar(drydxRCmrt zvKK3P(fz>L{C%TqY6ORcu{-N0cFxB=tXj!K-)f6-Z$!^l%=&tZX_Tl9slejpYeZ2= z(hREX>*NwSv_!*0dlYb)I;^ z0w3ttkb5REW8;jutAbhLz`jG{8f zu{)I(B=G3q?!w?rfD$?@a^`WY71c@3Ik5RX)qogAPaN!;mbKtyIcSZ_D9NWE^PXkX zCTk3y1$<%FDqP7lkoCH(1l-(9XLw14a|HG7s4kXxXlvnU^&bqx_KkwG*$CU-7geP3WrC7$x6nMXoMd( zfnBCx%b8I#v*W!?4C_qO5G2WlILiO=P4jX4jt60IbdBOFqfK&CXt7Fqw@HVrrY3tqI>%3`(D<3^T|`1|F~> z89&6*Ag_9>s?MUl*4TZjdMx91+EHuxP@AeOtlmOYPx#uXfa7?3vg~2$oN%@Mny1aO z3ngy=HwnYI6qXguZb-jh5obLuyy4xZM1D@a?Ze2i|GP4GYyZX>XojLNjlE_N^H7r) z;7e;9kv$s9g*(_ZGC*<8SP@ZQkwAssL;5GfmUic=udvA}F+_{v+;HnLNB*jn2~g-a z4~yUC_?nqcGGf}BH4mC5a6d%eM^-1jdXjbbF@;*A(8{HR6n+D_(|CC~hC|%`Pe8T4H6d z50Sk7!izyqoaAmvKPYk{`j6L5LPBuDiu4(;Je&5~rO^UuFdJ`usK9<2vobE(awvJ9>V!g&pzkDnSnE}P!|CWh$zM)fGJI_+?It93$Y z(Y!53NJG*^(4bEkO64x1AA-6dSXwq=wC7J#gN^cW z^Bn|H>K>dbYg2H~oGt>3EciSE&iDa^rmv*TG&X*A^(?*7fy2g3Wg^!iO}4|85_zrT1WdPL=2#L6jG;@9+CZ)}e>8X00rW0vH=+;0 zK(HpOS2N>S!UOb@2LDKOXTHN*_|zn1ljQdxD-D~Z^T@4W8J#cGJ3Jy(R{>f2Z5 z5VC*>p#aAQEreW-Z{Vr5FAmIpcQAFT>x%aHf{04$)3V^{ls*i}t0(Zt!Vh1QK)uZM zPi>L2H>Y{WDGRfyv&oC6*dndg&;Rjvz|st``=X=mZ&CrWq(7TKQm4I&RAduXaZx!t z%tmHoAjsOAsh2@iu&99WTEh=iYJjVon%8 zVYM6eUm0P%}olJR9^p zrYMgf`}lKyw#{C^l}tFUJWdz-PhjEwLX1RZP){=${-^6CDlLLJainJzMLEp?y{Rb? zERoCSc;)kt*bFLZ zaAztxfWVYod%CM zaqE32#ol!De;CS#WeJ@HZ=+PsikYPNNq#qUM?nF!yfV*%>-+-+YknPM5beK*&d#+M z^v}26i5ukyK?tx>*(xwYv#nLsPY;Yz7vj%qdJuYgK5s_n!I)gf48i+8;jC8DTR3>b zM4A+xD*Ul3gCGh6M$bSUbXqKHp^_K#m)%W;iOUY{+Zw%kgzW(`b5Jjo(L0>^XiKfM z*8uu4RK(hqSB(Lz1f=wkuU`17UKd1TdwaXf1`6L!4P3!DLCgOFr54s&`oP{q*MptB zg67YeL~WRAuYzg{oBs~Eh7dZ{Ry_gIWd~&20+$3pEgRVE51YObq>FGzcwa(P{~m12 zu5Y_vf4Cr*yf}tAUR|P~h4NqPo@E0m1-g!=>ihSO%L?q1s`EbnKv!hY%SiRYg&-`l zZFpya7P8MwlT&|H2b#O!oK#*iXJ5p^@qOsk z2q~Iwp_oj}L-(}sb)Noq9s9l-fkTRgT5(_nenp{2fIkQl#HANLG`5s`|Bfp!9UfxY zKe=1}GR+5L!rqiI_JNj8*l=atx&`!}3?0z_D?xPXT8eG9&jCmI3`}0ZyX5i1A^#PN% zA}rhwXjWU+kOF#KSsTlXPdg`%$p57Z+|(L}!UVOVXL)?eg0rN(z%A+5II)rra}pbn zbSZ42#E2hSR)KDzWMb;536-UTATO{+elI~1LSjVU+jl1r>*N88+`c_ zLctDKlcb*?#BCpcWY+k5dkod;*7f4kzCIwwe&L{1%8u%Ga2U0iGf5|pU1V4Mn#)fr z1&b!z6BsZxBj392IqlgRIPpy2Mn2rOX4n0_9d<+0tBm`6%cPuAorcfPokJfoDwer^ zS<92z^EWi`?IoT5jsJC3Cd4Ru$kI{cS-ON>y%K!?$LkaJZST_#X(^mgXTsWKC^W;o z_oOGpF<2X-QE;iYZ&C={`n~um|C8Gy@tG!@mINW-{6oj>a|NV54QzfXu=y^Zwzq1fVQQ&rC229NGw|K_^?jw`h`fN0ybM|q>iw11 zd~%cm#N*a)mEJs&+za9nU;4VmDq;3F>SA_1DI(Pee-6+Pyc60o5JmCcmvHqO@8zBP zQ&)iH z4E3>w&-tODJq>FcOy}4^NsIM&2~x>(2x_=5m31ogQ&$SnrlBvUPumyb_T6+By!ruj z@X!bY?4ZRtpy(9J;k`VR+98LxIFTp5V6UTFQ4fO5Qf(^ioS^AwFK=n}1GS$^bQ+2< zkEgz}z%78M{C=8?2aW}RZXp`Ek}AGRw@v~8HyZFs&iarWl?C8fQWBs6rEpikf5)N8 zbI^q9kns%F39F&^P%MRX53N-?llptEy=}zy5!-a-Q_m;F z%z~1Jz`HhX-jLXK*O6*N8VP<4CVp%YJgsW03~cw6Z}}gLYkL2y7u#FS34&|Z@~-Xq zhs~MAUEXuc$eD$VDza~~?mzLl!`HGEiPi0lKmBrpR=+ozOiszH-%OnN`HbLyma_%G zxCW7ZhE3Eyi&@MutUKS!@E`X=fj}VO^tAG1z6cze@IQ9a=ZRQNU1_@J>iQbQfGLWq z@8ijEzbD$QUr*%F#1eU)a#4Lf2H?8uDiH2>>X*ufEaYzYems|R4mqlv zsns4at4U@4$DmIlYyTsEG7l!uNN&NGeHmL z!XNv0tP!nXkuF;vFGJ&eleC6%o|n-^5Fn%TZ_Hmew@jPg`q>X8K6$~_69>; zhh7EYO=2#szxkoV$H$|LT5vA=?MfpP^Y`Yn(#Dg;PO!H12DYLM^cG62?ZIt*vT|2) zOVZ{=q+;UbzN!-k{7p_$Guvptw{dXjyX?4%h~9hbFUa>U^4`KytQx=UZry$yqC)E( z>OyZsWQm8Y9fk;<WYU;(6g;)`SeVvw z2|>>*ey-;!1K4)@Lc*V}KA(+q{Z9$JFQ4%MfPqM~ft4P9B<2m8KI^Icc;kW~jE|37 z_gDW23YUR+zP;g`z|e#QWk4@jRVMfm2i-`HmyR75F=B6*p6mA=YtBnojss+YK|;-2 zfhHJ@I+SHdZ%1f7iC<|$@6Y(QV{EnemKo@F(7d){4Ok=7({bP4ti^Z@trN)fJ3L8P zyUr2U{jT1dJGfKEwm;xV`)M+ihi(s;0Dw?fl>VBIICs@Pcfoi(BYyn zg^C3Luq06slPVHT+FT0JI^RVw4E^ctPWP!lm2EF`Pi63^APAKL-dNxQ8=g_xE1TDO z8(_cLN#N9ZLo1pifVA~K%{RNgj%>9Z-6I?wiuMWFeRFYTw)ys4^E+7AtYu>u0wDVQ zPyOq95a;yUu-Em{&-~%WGe;%b?LoWK+t@wV^Ql5jNTY0Vb3Lg=NVeLwq_SX`pf0#P zr>)rZIB>N$B9-=3T?Kq|xCUJDy~p2kg-jJF_wS#>f4a>`kfKe2;4)ubSlT_oGlC1g z4sDq3LsAion=O$w-3_~W2s5tpy9xlH3EyJp``zGl-kjcnxKYRg{$V(_-lLfSB1v7@ z|8qWHY1MBx0c$vqPXz_NBwixOl>I~6>rr5jw-+@QX+D{m$8I(XSaRbJ zcwu_l=t=|t5`57&35fmvT2$$@VZOiI!vOqw-Ds7Ccf7Hdt*3@FIn3)eJlA%vL%}74 z+Ai~ghK2?tF>rV0=5c8g0_y2`W*QOzc2d}4?*}sE6m|9odf>E|rS&A@yWxAC)s!Bf z_p;+6BB=9?d(;2UVf|*Uquy#m7G6okAUygW{fsfcqy?BhUV=W^83@z$djYok((6*H zQd5OVoej^F81%AdT=8+|>x7>n5wPCkB(^4Uzx$6*DFPPjJe^HH0W901-@g$ec8pZ3 z4LhdSk-lF^d$C5sDoI&e{~WsnxVw7}>P-ZIzv!~-3L>NO`lr}C2kgHqrvl64B#MWd zf|+awxknCoBwS{2NK<1#Ca%jn)8=#7gvNw4k+s&&Kp-{D!#$(6-y}A0wVKLaNctfm z2^Dv9Ej|w^*9lcoR4_lsc zM($ZVkz-#HMQHu}@hrZuH@mXni8Qg_`E2XK;+o4V87ZuK9%ChKIxquG!~bR!$`845 zdHgdq!FoJ*2E79B7|w`^tdkh3+m}~MIS6vt?{Q6roJ%hcGY(99%|3JN7vTX^8$lU- zw8Yl=w`CcZp9xOCokl;s2P8t69B21NVGKAV&AIR7B}07sjr3>oOG8%|$)ng?YS)Yv zzR%mSoS1W-&th(yi4{7=Ll!p%+S^GjeOTR9XG0dm*6eKXGg5}hlA-5qV+HqTOcdpk zMJOCvA26_5r_Gb9H!grysZmV7*x>kcNDx{~Ga-~N!Cw8yfT~Jx%Mu*sMQZZs>Lfa02x7Z%m~|wLB5d2@29pl zj&}Vj(=TlQy^mrB>qz|wak%L~1O&jy=blG2{gKH7+(ztuM zwGkusdGH1NAnc#{u9yImz2SK8+bp~~#{ny_DItf#q4W<%W8DnrIPJ^_1tpj#3SdSO z`=hgVKDkcjcHn1+X4R)^-3UOS?==fu^+Uj&M~Vi#Z2u}r7)+KUg`kv_lZ&)ggD5xj zMfD`%LroNZ;b$%IBnk9gMB_Mk+N%=guNi(zS>}y5{8L4lCxWDBbu+^HTT1Bo)n@$y z5H*bJEE;)9<5vGnmKciL9aH6asRToVfY-|eGk<3~s!U!f^;h%2kY)cJeDDTEg8cuK zE1i(kNY0pWL-9c$G8;q)UA>9?7fi(q7Pa0+T6zuyFS{N$M{t(b5qJ19$0k~qr|BdSJ?-1V zx%W84u`0b_B4ICgzJf3zU$?)*-5Nv3)OD^4Z-lTiS#T-MkeBq^es`~GZOA@j;&E&NKwE8dt0O~4-tO-LX-H0-uXis7Yg%ICa*doSaRAunIVg^ z<8mfuCU`}5fSsI1YCdf2&u;UAnU_&nTz`WV&m5wR^~@nPUj+bwB>P2LLc^(TqjZxu z>z$5xa{PJCv3zwkcj!(6vE>K~ z3h1^Pk>mh{su-qC5S23js)e4C(mfoD6*(JCdy>S_JbgHAcBB_Cs;$azk@8`v0t9w zV^X{roYOjw+z6RAf0il%hekUK1X!csJvH(dOtb;A7^xzT5)Y6WJ!10#D~DO`BQ8eO z{gOHI@aV7i1wmpQTo3CW*6!}^h1Jz)!*MHPH_n`*;GWcUkByy+%H%9>Q9a5(>C{$u ztjd~>q)@oO2qRzu{d_M`i}ptHmpMS1KhlwaT}QJ^iHCiJn}<;t>`YZz!X$O zw~VIL6WS9t^yv?Kvd-yNTWLfi&j?ff-Dyw+O-y&G{9br3Mu_q4==OhVy7F)+*Ec*E zTh=34#x^Qi>?w*c)|BL`4r!2`8A}p|ILsy?m5Q+?6QN?1jM0cJF*ugKIWm^XQdBZ_ z24`%)&(ZI@-ap^#d*AQ9@8|jBx$o!wLaQj@&I9ALv$=~dmtZITwigr{`e(uHZ+GU5 zX~4$Pf%DsK;>LN;b>_`AXy4!J7Bm$@kzQl@Q$&(quPw^nF8bPjixntUW!ocN8dtIH^ec#|G2y1quk(Z!__d$*2eR+>RoG<^o%;=~TbtC~6v$PUqp{f7e z#@PR%`Pb7EBME!*0!}C0SN5Gx8Let6o9l_QT4x+DPndU~{Cto5$^Gt+i|^HgJB!Uc9#Jkn6 z4J!lrPE$WLXy49~#uP^Tq;MyikIJFyFUFTRLtukOupxwD!=HXi1{1*z zh}dOsRKdbwIr9WzKl4EBYyU3QNi5@dndZfeTvCTualw8IgRS2w>4u{O;; zJ;=ukybm7T?{2kA251$xd<#^A>LiE_CS{1ab7N7A0zT!s?>LtS{8_G*iog6mnpd{S zXo*oJTW#exUbXQX925W-ib$oGW~#oIdi(f()0FX6(uvoj#KG0QcGyjM;Fw%YzN+{& zZ4J528NSH+e}$JjO46AeSLn?R#YT0{!9s)>gnH2zQ;+({fFfiZv@0nh)OQ%X0>sNc zX{&YVA*}jL__0uwRcCfR5cn;8(zTx7Ve~J_P0X;cRloYOEV6Be*zG_fFFg(f=pO_q zrcMxq>qd<*z-4$~(2pYPalvAOl&#I7|7!m&GQgz(x5JtW(dAd~e9n$nztk#Y@lX4K zz5xQwgHhyv$KwsJN(!KE>ZeN^#Z>EECCp;CC5Aa{CVf64vLVVCIpvXS^9NX)oGq#S ziQa`+gX}EPc=MpVgJ=Xcc-W`Bz*J1aceSdivpvdpw$sTjqIbaaS6KS1i{T_oXjw<9i+yv@x7UtosWG+p+WduwKwDwjb5^ zMKeTYR}a%5;am>0eIk{_XOasJm|`By8N4*#1U^IxwhWyDjPzPd=n=q4jHgl^FO4ni z(Rl?is;?$NuLk;iew(CUWyRfS&N+7rX{Mg-rh7vp4%AUdu5$tuy~6~SX*Hh?4X0J` z>&~>Q@X%ZWuRVWlx^k2t@zI>-ohBNDc7#`Nm}z6j_WWlh_G*7=Vf*Tq^xGp6j%ZM= z_O_GKBsO^qfpa6b>xzo<3z|CxC<;a%t z!$w_C3nj;#<0d~gI+-x5=xc>+2(0AEovztKgsi%|{!;Gu`>^kY>Cv+Wefo*c!}Y4E z3aR8MuAB%G5^E_q(E%F0Ubq^BaYe5_u}@UxVpA!|EYUEZW-}( zc>)P;g@h<=#cC~buK4~sV2lqidr+=R4$h4aS2BiXbPo4j4F59!wV^yxmr7c27@&)@K6QVEc0c1ve&J9?JU7?Cqvc}S-0Ip zQ2*ky;pB13A-JhAu^8X_X$?oRM`(era1GLci}xXw=##o9x808$CE?`Un8dJQCTGYA zjv~NGb+@arwXlKf2iJzznXGg$5*&7fJ`ns6Hk8u9A2vLw^%^e%B&YWY)@Id9_;$EW z_Ie5Ve0Gex@vR>ZHiZX+MW%5)Mf&$i$N;HmE9py6l$D|NxTUnq$dwsOj#8s#DQFFj ziWy@D(uNi?cJ%9=cvWTz$`h@jpw|E<-6=uWKcx%vZWxEGl+0 zc8~zFEl+*!A(_j1+{kWlG|}eM@powcx)(eN5DMU&!p@6nIz*PA`#dK?7QxX2r#XPr zC_9D#?aHTBj~^7IE$szf9YA^96;@kk8}*x|l<9+@?`(jw%TKlf$}uNx>5~JZ>?Xj| zya9AD$tPxzr`Og-X@l2yIa2ln{SwE@!}5)sMQA+%@nP-jt!TAo>x0JPZDC^;2Cw%b R5Do#Kv$hv(Dy+N+{{tpS#w( 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�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¬|O1IzopzBgv|I?7fe??Dsx+ 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 lZQFOZCiM{`ts-h761 zGE;7O&omwwNQ?hZn(gaP{(4^u!2s;!{%)z)%{6$gB1-#vpq4_hC&iR{_ihCc6u^bB z6Fz_)Am`|7e6{JQKi|mL8Q}Ha+ZwlrX+lUn|0ID&{b4!_*Ask1n-TQVP{vsVQE-}( zavxL^^o767k0`?|v344QtU*3nT2p{qP)ZSMR3T~X1?^12Y=F*v8Mqwi6nm)eadB}$ z?)amO(Krs!1p*qs3fi>2Fyq;ti#uNm2hElyX|1Mz3z&2fTSe1|IIKZ=rxy4??D_HO z)29G@WWy+1Zx)JCw`qnc92wF$oFe6cj!i_%?PORKD1@32N#DcdLv#98JOMOj8M@NMBWxr)*E$A;UE`nsf z2@T6!=`2)p-D)Qx?-%$iJ^1zyS+*EzHFN47C1zN{54+cSX9@^^^C7rC=;j8jWjXNm z*7Y|jKP>2HPC>UsI|&L4TUJbknK?amse9gGs(xEMhz?SbsA#f}6ol6uT*{WVwy5mb z7~gE)&po{t3Ne4=ye7hsb)Xtn_CG*o7;A?GaNDK9Ty?SA%9 zV{!|snmdcyYw;Q&cB$^ma$H7T2oQ<3-Bn5ijF?BpWEIp)X^rRZxIacT-O2a zYhhtQ2p^}wElI>N?;Y*COU}9hTzcXJ!j=sgaVleaK~Byv>w=!%-j|As;^Vj#U$J^TjtZzInPk*kE zV8c&}7Cxo2wzl@1b$53c%4YJLUnri*$ziz;CHltHOE$#+1<{FOpcQA$X6x)6&;R^@ zq?j%7tH~E_pS%jyEYF2XtHMVVa$1@XTdQi>36zOjN2y*BFR!n6Dv7i8VYjfBs?%Ub z#CHkR%RGAqYc=HpiP`}$9|DG4ilYmX2xD_g8MknX&Cz1j z?=QGT=JZx#or+n+GJv0iKV@r=dc2-B7L~F+xQBwcRlA|Jyu6&-WYRd%Typ>g>s$U+ zt2Se@0EWQsbM@WW)YO+EM`tclTJFD|%+|%7;+)>`p%)Mk5E4p=R(%#mS@!YxgO!cD zdzT&SV*~=A%usiZm@d}sjrnd!wqhTKSrlXT_Vnp`?TQ z_zJJd>u8P8D;SB!Pxp-**ITLW_V@Pz=(=2<@(RLxo9K}eA*4N_XFC9*A#F9wF7}sj zn4&2Uupg3n0#F1ojdf2~!wfQOe^=MSB`p9reejRM<6{1(d)`I!*!`3TNMqw=GHyNM zj-X4uM1?FEMkZ$F1Ct(J<2KN4!>Vy6zZP`rHEOKh=p5oeSU%KoUV9&Q4E3-103x zuJ*d|ba$^=QZ03{u;~exW{5NK0x%5(i>)9I4vr4&&2Vry0@;U%h)65$`+LfEI`Gbr z_oK*43)4f|_o9{X6pMTIgLDPpV#|LIPf@^J0!jt9UJbdkPu4ojv%T{3p`)$wQmF4r zX<~9JY9M`(acF*3^;8)IhOAlQJ>rub|q zB_ICho%erUfVSgO{d&*N&Q2i=->h{=jYzOMoTCCWgn!Z zP!Qg`!3acyt+Fr9V*Sl^v$hL{Av6-IuU_3|bph7xBLL5#Y^D6qgq`O+QSowbA{==g za$X#L?XW8x)>xYYNHUVI!L4Yj@t>3*G@7&3&fFmB@bLVw7?=8;JnMN8MyA8@WbW*d z(cPCL&;m?>6a?0+us7$ROVJ41EdeE0Qc|)Pps5tl?ge*BEYk~kSW({=T3m>fGRsL) zef@03RDeL#qE1r))w9;Yl7b8|2-O_r|C)~0hxYNNAict;Ds6PZA__%+y4H{DZMZ8HE`5I#%(x>Q{i_lXX`w|Cz zK#Fp4g&QW!%^5(thv+voHNAoHF4r``+Iyig40wfsf#HX1%g~TLXx*alJB}N~QY>O( zHE?5q9HEgUhdKyjrxiC1Q~!+CgP4XUy#G;BRy(XE_!lT$SR`zx7Z=hP(A4sq4Se0& zvS_6gIIC@XlJPQ$e}3c!vH~sSV(3S>hS3oXJUFvrMn4O6tN%fF)!t^6l$HH5c?A4Z zNaMet;OOk^4cOkyXX~!uvcP}DSlIi9n1bB<~eNh<*fQW~=(J=mBV=NDmqOQB_sNxg-7d?GnHy@9hVtr^IGFlwc7D zyaw*mXS`XscI+R34}d#f4JV}%VyrxewX10JnkGF=pZtv1p62gQ_v z*9c9{AHS2PYn^Cs6&m&lprRBN!&{#OhJ_&+?cQWTlB_MDaUdwGoOjbc-@OluhMxYG zzNE@9l0dvVcN9I`2az|PT_fBr1VTz~fo`S<1w9K8d~|v{K@)Ujkn?u2JZm_*qlOeV zO*lO7J^si)OLjM~29Mm|6;e12mG6MQ*OdTRU!aLMv7|l`A$?V`1DDLlF7&o!Z)h1TrslX7rz)^EevIS}Y+AaEbv_vw858xR(BS3ubID`FLi9gdcXxFLs_FUHO3eD=a75Tqzep0sSB7}7ByFE6B2{r2tK)>IX&^)%>&%Wl_ya(C9EQ|bGwZB{DE)Pg1SM4Jt3tSvp#Faff0nfYkn z=xBTfOLV6L)DEy61+MFX2lp%~25!oJDm^XC|=1MNILkg4+tL^)(@0U6a@9&~FO zm}>olXn}bH_d#5P4iP0~m-7H{in7|;Nd}`;zkfTyl7yaqj3zZI>Hs!N%mABean|?| zpPQST>f3F4@Ecu!LPdwf52RF^O6ad&{5^77ah8J_w@;uK?gw$ZWxBV!J0xA7PF$SE zeBms=NG_T=<*v730yGdTM77W?9O%+Puq7rX!M-PtzV}lWkANeTHT3085wM&%0w~;8 z(bdx<2FxQ&j18I~;w!MCI{bKuIkBR8(8LyZzgK5Zw6bsQ|TBW|#nV(^3Z# zd;mUbwJs?xj(MHiFS`z|4*0|$1WZM$Gw3(2U=7-hUlB-odU^seo(E95oO-s>))*$p z=-^GoPRIfq@K~2-&N}_*56B-SCq9DsF(1X79KTCMbh14epOV6Xi1_-Iu5J|Ryd_>p z-A@3k;9;zW-u~fXCQGnk0(dNFg={3hr{R*glt*eQqA8o5NCAE(xZ}v`%3$G6@#qGmieG@fk_}A=VOL=c6!Z zxot7h@a%f;V5O;16o;7YnYp2#uS&2H$$$5$7Af)2s~=C_qGdDf<~mT{e#+4Pt&=I2 zg1`PpN>`B1wH-@dL3uOju^Fj=kkg2hmOT&gwgr|NO4NTlw*|7O&7Y?h<|rwXY>pT_ zw!T}SsH2pR@rB(|8>j5Ru94lo1oirV`L>3+!OMyr5;hX2V2LE}Sy;(tM;fPK!8=@PAA6AF7Cud>$DQ72{OZfI;sE()jq1B$LVcr|+WNb3WgSwKpett3LNG zkjj-Qe-@J~;*w}~!eF1doFJgkFy8krCh5~}OUqGN*iI~|m_MYd)RrE{rzk((HkYwt zixeUK`p!QmAYGV4Vemii@|-B5!m%-#9FbD>27LWE4UX?d&3G~A?}$bjs(qxdCGyeU zehMjA#KjsmDZRzijG_9p^Rfh!z^?PYKI2z)rXuYc&8&b3bc%AjkoyGE5!!wTVLTMp zey7Xe+pLa`Z}9u>V2z_bu@yJ=4Qc#}Ei1%`H=!iR$elu(7tKV@FXa(^9EX0Pgu5I1 zi^PZI;@Wef1Z|XeQrDm?4Jyh=hum$sUtU=q~9siJgfY+JbZ=#;cJKl8=o!VRH%bskfu# zvwY2!s>o?P`A4)x8HnWB>5mJL*1V|QDmRlm^9BX zKJh8Y{=IQZA#pJFNQo3X%YTxZTobIn4y7U$`HUmEgb!#2@&hQvD2^w7hHtH^Y}qJ# zIvL1)G|A`a;OO3yvx_uW{ma~rK4G7cGdb_1M61frz~>q+Q%k30c%EWr)+!_&`Jj~YJb$!E9rKjS9U?p|JbqubO_Uu7T9qo z?#K{ms_LjFz*}6f(m8YX&M>K66DR!HUdS4X#vS>F5XFSPn8K@J4JOa$JP=<#wjOBs zvJ|yLIi+q8|B&2 zw>>EeFEUZmTjv;gtsN$lk4st|`wq8YuP%i6Zq8cBlg}@hC9}U3YIo_F zI15A^e@hj3#+_IoWH!C^1_aH9YSlDD^kcp$D0&XBRA=6$)}(W|`}wy9ZYiOe$U1%J z5{il~O*;)2_IS{#$1@Cck0)UT5r*V`SYdYWwS)bBnfLk}<#~P6dd`Y_G5+G}>#4No zuaZ($JcIWX45(*%j+alQIX!cyAe`rN+sHf#TL=4o?`rVT2>65&}_)=fK=W&N;9I&l{l(ux7OQJ-IY`= zRhm)GgWuYsQ`#?UT{YbQb7w3i|Jn~6m1U9nC4+fe`N*|n`HB~}$IYXtjtH6TRk69> zXVd!`w7fX|$b*sd>9l}(f0)~@Fi+~t^xihZU9G?8c3Y&y!zMkQK?!tEDg+`5IciZ} zwyH2~(_`_qDtYOO_^48q9h8-cNs6s!?0tyz=BVfwuBy}w#eSqWxniL4kB}8p?ei|R z*4zV@$4%uf`ofF;D}LFJ?nJtgIyrEg>=*@F?31-KarQ9eU6S}5Y!AB`kG=lyHKXa5 zg$pbP)7CGnlk{%Dc! z4Nup6h04Y1a$h-WMt#C&ps`=ImI_gp`YY~rLyw8&W}ku8^C5@#4YhZ>(A5Qf zmj12yBxQ)wx5noMf0W%0YAP^5qkF0|BRgZGdP(1kA|O>TU6M#h>EyB$>6M`3Cz{Lq zj8u4OywO}WYU4#*bbI;`zwRGPR%M;$Z%eh5ownw4)_1HpPGgh{uZjZOh6oS7MN!63 z^Z9*w?(!>o?d|;+ETifnxvjT17)_}M7g#9m(G9;bbM;vHa^d^r7;~dn6NoA$XtVo|tU`{oi_W2n7elYr7mB6ow)rn4mFk5;@ z6i<)kU`Q=OMaq!yK#RTw{i^_KWAqDUIgM(zGn{-%sr<#S@`1{k#X20>1dO8wad`2R zY6==LJM0m(mQC8M*fDqeQRR-KSt?07QwYkx=A08JjDC-{yZ&RuP1^LAA)JDa^}h5e zS5zIG*u$j9&pd1^dM8+`wVycUcclbHrIHqD?yLdRY0p#A_jJ3>Qm_2(S7YOgC>PZl zWKvx@)x}Dwax|6&$-Yz9Hoj~~!cbj>FR`1`ZDe3PfSXUEHl#iL#4?&{^` zb$L86FaYe&Vnu?WwI1lF4mv-+{y!kBkp#p7ZDoHi^C4{QQOSSD zX&FV`9?KF;34J%1{tdSgO;XBWylsbup%%IK@85Q_jjT&ol0p{H!?^cELO=6>2nv!B zQXFWJeTqR~{h6mpTVXh_rk6m9z#BFZ6u+tNvv`;ongt*nBzj6978F($Q`uvMct{qtV2Y9lDv1Oy?k(Jp~&52}!V$5W*Y!>WAOa>b1SQ& z?Cb|pfifIzw=ocC5wuJUSxW>`EhPl1m6JJp+Ku!T9NlSPTj_|r{~|w+E+G3C=^Yd_ z#BEkIO--RA4+s%p$DDVjB4h9E^`Dw^coRro(n@M8gUG5VJXIDDZO{ZLhB3Z znU}ZMN0z@4?Ic|`BP6j@yX*C@VJi}anNK7yim!Q@WXlqfQ{WHj00tUczM!|`T)qVL z)Y%5FpI@|vmA5iHnu<8!mc>vZC_!+GcYMiP(FyT3d%WlM4Dkeuf%FN5aZIBDY?f#Q zCP0|jO$GDbExB?o<<;6#+Bv@@i4MQe>y&0XnI|m_Eo^_PrH;}gD99}s+v3#1>_4HC zstUysO7Xu0dC64VE1aO4r{^e<4|d*VgDl1K?j1-iA!MAN3H$>_7eX)znn0d8-kp^I zu@vZ(&&kkZi#&MH-rL)2z@v~N^b@)%Q1(G#I6p}rI-9){VVDR48tj(X0;U0+;NV+9 zMQQ`Ra2^9A_s?G7VCe$8yXstm-wKd!dV8*-rn9Iq|3<4mT+w9W%a;Sk!B(HQ=8|Fa0CyK zI@JGD!ht&f!(VGTS$=hKvN*o}H$Of(c@i{adS4J=`ntQ3f~T*|QO+QEy-PU`j*kn; zRID4kKh4a{fYf;5&=sSl@8L&)g^{xldp9eq-7G>UPGNt?9)23!7o?dCcrtJW!Z|HL zgJuP=VI25+DQW4&g@rm`9fpV1YWRTXdkrKL?B}dOpkP7Q@6-}V2>ckx=2x)a4{Q5< zFsx8jV6dX1qCk*xggFi(dH|Moq=}28TQPwL=zK%S7QmS%z(E=H^*7Kln>|KEnfkCMSQWnMJWH>#M7RkbEIqQw!UD12yGjVNq9C$9y>Fr^`A6PB=(jNIM{?!!w`=Lo9#K&ITU7 z((9(qeibG#(^?O|>z&J|t*sX;beudqHoz8w4Iwx@ysxiM@3+Hy*^eKA2Y~HXgi_4W zwhi95fF+2{SKApau21B(FW!S2>PZ!i=jCe?TfDShy@zwhQ^XsNsWLfO>Liva)T{js z`8$_2m!wNWv&M|@fmSI;DclBlH-NcAy0m~(gP#PYZM@FI4Xz%Y##sBOXd28#q7E)$ z897LX0``l7f~O5CF3`dJR#QS4^AL5X+^Qgjf-83O0uikeV^*c);8u)eQrKx#$N< zu%aX&UxRi5yeCk#62h!iZWUHw1X0<1U8t*rla`i7e0v(CyXoooNgJcZ=^-KV+wmW) zPfes<3bmDJBwXQ88*o_euB@zVuOEYF&uhPRb$omr?h00Co?5Odl9yFTJOJAP6g2RH zc-tqKki#|r-a9_G5InF$1op|$`9iT3{BV@h(gF;);06$5At51<%w<%-AP2JbDG8XC z?D?8qTwOVJDt~|>Zi)q-WDC|x0R#}RyKtJqJB4(;`*d^h$Mv8rGcq#+hvNW36yy#Q za%Pa?L8@^-Sdw#bamf~(Y0%%D%NJv2310_oV1|-lj*wu3OVDA)C-(Y3Ug&YXfvH4^7bxSMUF27ZrhT89AY|F3uvS4KmZ-Dr1#S->#25MXSw zocy&tS~2^FNnUu+yVvvrK_@v#%%)tl{MO`)yYo^}YIRnBLiqYT4Dy4Kg4(l{WRNZ( zZ7V4#;24d+h-I(-T{Vvlrvyz0emtJ2@Df<>B=R>5r)?ZV=W$43x)cXq5ECcf)S zNrX*6z?;_8h#?xl=s}3)1%8*UmY_v1>YLT!S^4@K8fP5(qxnjFS|)Ky5eF9L1mKFP zK=FaPM<}V^o834;+V{Bvu*mx8!3+9SA z6G0ivgS|bTLfJ4liN>~W44j0vmL(;I;Q@_uk zER}HFBO&<7s_0Pybx~tN}C=eaAF=z;~w zG(A54K{;7~uP-Ab<5Z1nw29Vp70A>&4^U7(#BjdZ0YRw(CSq|xN=gcO&W48vk|0k> z2_>+zwMB|F&iSCt)F{J~;@t6Zp-|6LTZjFz%+Z+K4(>#kqXGD|3uMCZO0E|#UI28x zg#eJ2`##qtR=?8bCpZ8yx(IT>Fa+H}!$4egwDF_ltIJEPnVKM50>mCjGVZqe8laM>0KXivaon+dkwQw=yY5x_YEe)Sr9Vw~BSD4nUgu5zZngC@3I6qF-v%8Vs@d z`uJq`&-ZTYi+@irbaiyVr59#>mxSbd;gO#R%kb7~?GN%xdlvuvh{rg(jTVe~$Z_tV z8mauvQ@@1(hd2V^Z$f9CM}UAN4d4|7!S-W+FqJNDY_JVXOJeL!S8J4g_zMeo@s=|v zw6fQbn_zCN$4g{-2L^t?7KMQU%*FNxOiWO{49ASL%Hg)`h7KlHbpFo^z!^UBTwWf` zzpH8!m%DI&-J<6saL+@yfN6qzOk#O&5*FubXEftH!+!<U1~#t-k`H|~mIH3YwQW8?9C25@AU@{ng_WKarx;0IU=l^AN%bjGK&dhefA_)=hy zkB*93n4jMV+jJ2s|No=uETE$NzOO&@kPeNMG(!qV3QBi4ba$sPARy8VNJ)p%9n#(1 zAT6mFv`9!veS!D-`>&VfS}w!^=81dHInUmot)Bk4b~abkgGpG}8*m1&GtAmu9?EMH z40M8e_tFD24wO3eXdQ*{2iC|w}>lt=B@I!hhCK}`?(zw!U z$`EaH}n32iV&{=>~M_1MGk3zvTegW022ghpvAG-#@t~qxWAqD9|W9 zcqqUE3ZV6He9+e)pP#$Vmk8bc&S-LO_YQFW{;~(ON@%gakm zO%2RG{s(=#yLkaCXG>rD*CGCsCxWNeVA%ra!n=OpU_sy96bw#4(*f3@X`rVCS1Vw{ ztjrIbrl0?|wmQ`LsKftXG1yMnPED*B(IX4WSyd@&%x>qwJ_)8hwDk0WpeF@OgUd=i ztCRI-P?~j zocPD)-6qv0ZQwuSTs&%RZ>u&uoxeOLby_OVPEH2)kZf=$s?D14zP|=#D5#q5H)ird zt@zs47kCqZoY7}DAs=*|;CuTOYL|kaoDJ4eu#bNSvI5XO{JYV?@duK@;laVt6;ezb zHBjaLcY6z-UUSuSB7t%c=qomulMBiNdJba#W2;x3riTQB&QVT5fsKug7igt{%wteb zT5UaLOZ(7+E!h!l&tMw^!fsHl9)Pz%h&=#)7&s=15?Z_k`WEMYXSH5W7F=GKk$%}UuYOOIpB5{6$R9l8{pHi zGWhp0P}0W5$B(2%mz9-))*Ax?TBIS(;MUewa26ve=RrvVD){8YL}D^B;9P6k-F2wM zz=DA1@T3p~&|-kg?jK#{@=wrzqQ^h_B+)T2!14`_r`Laj9?>OWxlc++_;We70hB83 zsT`hHV4FCs-d8OeRmCHyFh(zCrAyt*4^#xh|&#kErR1C?z6w#^hO^H7eDIP+<`~r zY^>x3Wi*Athu<1#DmKC1)nqw<&D{WM_D9CK92wny2YX;WsXN{TTv(u|$&=F3P*VEg zeFMfcU>e{mNF5d$I+ZI4Sa2uH%gf-Aeo09QHaIzKY~4W74HjNlKlu9y6d9l+2cLq~ zy36Af8{J}US~BSGl|4`g_Vx9FH(=5e_-y^>C@3Q0>BK3>$TklS{(&38Tt~=Z*<$5l zf*w4`2OTXK;FyDZATB0`Mht1=lv8=-yxh2Nf8&9l=!ODUeoy8XKII zJ0M>Wwa)-11vVBIaNbQieTgTAF7y8h2xdTS@LEv)Uk?Em1@H$0Vgkh9;2RMPfJ@Z0 z-Rl>SvV)V=n*2NH%J!(cYeJuU#5@aXVPmtYO3=!aO-8@h!f|8?JmGt2HLo)f~M+HCg!TeF;H4{t|jA3E$Zmf8_6>$JJ z;C2oW;FV$RGBWLccjzKW{cke%Z_)hTy=FzCOo#ROn1UeyGiZ1w#`xE=2%VuNaY?Nn zA?EdhPME}h;m|HBw0$;C_g85hsZOcrn48ZpkenK>dst)p@3DkrSzYMY)j|cP!|~)X zwwyGS6mHNUFifa8zwyT>#rmsQ{fVE2f3$!9AhD-oj+LVGP=1|=jAg7P@s1FAC!O)F z4G|Sz@F&Mo{#gqTSBe~L_PJt#K}u2~t;6TCS+FM8&5YcZgE9*o#xCR*9`1?`?=5fo zfWp8YQ-0U-N-fz(KOpvk{nPvBn8`Wga=bJc%Q$S`6iF&pq$P8DO1K<)uA|e8zkptE zR}sh3k=Rb)4iJ)aEO`6t#Voq;T!-V1q<(>)q^^Qi1OuX~>10DjRzoytCR9sY>Cx{n zH`izPI}cN}_g7@F>k=KTV+<2K!)lFpRJDKkD56Ox(P^@DEL(WgeJtpRtaE4FQRA1F?SFTru`O%P!E#XIC|ROSJwqQEQjn`1h)Hf$rGch1v=O|VUa;-J z)oW7T+=ozmXWVwp>wXX&t$K&|p$vfQ)3Dxe!3(zRIVJy_!lsuuyTxnEu^UYmug#+Hvyu$avb(Ao90;ABOLJ5@^X zJSA2$F=IaO$HNgKatLYF(SUHwbr*FKR%e{kQseIlY~s0={RONij_6rczCaxCAD6o} zVYt*&mzbl&AG;eBAC;<$<`T>`Fkq>R3gP%Xdt&A7+DcgFk}@xT#{He)kIIXy*Fk{4a{rw`CXeg3^GY>l@UO)B8FxPkWpEdGYH z?gaHs9j!9r^`YRe>HcOZk&TacV|Xig1}X zY~7+oHs>qL5d+=gAMPQNHKIYY@Fu?~#a?CHn8Lxr$$6=P$*8=9+HVeH@2PHVaNwM< z*}v>)=UgWB<0m9361n8Oi)rzyuQ^q9-KNB;hO>ij5>EW2-1V`9lxK$PyVX(A? z3ex_io;&>AG%;8zYCDPHPF^=BaG!R{Cr*K*!}>B>UW4v{{XZ@Bk1|*(k}N%`^X`=* zWYPEKi)EtyB|k3u@>JGgf;eK1_}Ar{#UCjJR!3e9d&6G5=hRKTh?Th{6XW>7l%3L* zeL11^r-HO=zcv~gV~aPwwv0|V`0E#orxku+US*JbB2rcdF+Ea_J@*asLzeE=$GSlL zU++T^8c)47>gar#WFjZNS9c=4QiNH~IoHFb3vdc64UdVWJQ8_D9d2XDd{QOeMvU{n zw%R0FvSNQ^VC$J>GH24=*}sIuqg`?LT+gGsw2&?%kAZQ)d2Ozj%Wb97#`%aom_e zh?R$QC;nwQeCz)%zCL(AOAbe@r)pLwlE==9fcx};4MiQ9g zt%3>MbY<7D7)Hq2a1}%936K11g)5IBH=_+@BEr;C>Saw2@52rEOMDlq&cea5(Zdu2 z3n5lt`K^&ck#Q!_bfvx-y}nw+(z&bCQXctMC-BfkPkH>mFV{25;HiB+u@q!}J^r?{Uw8RI!g z57u*6L5DAln|-{(p)|T!oH4YSD#0HzZ4IZQ3lP=DKS&~x*- zcOSwTL7y}bZ%l)Vupr^CSHezx;Wo}IYsbtW<^A3<;Acmx>Nrw`$(c;epScjb2KwAU zoWrs%;Rz=9xAo7?)h{ui0@iriE$dRmCqCLu6^un*ifG*wBr>DPXT*^8TPfnN>dI?* zAATl5qyFLuInN{Edz+;DT8lR(y}pdRXhYk~$rnD=;K)mYd@sr3%ip&E9rM%P(v86Gh)!BDJW zkypHSvq5gF%7dA-vL593BBxvi%4LXahh;}@BWNNpn2B0kQ6cbH%TaY-z}rhGN&|-)M^4t6EQnwLrcu_+d4fczwVmv4+GS)smWbw52p3GX z_Sr<)BFk6q)JN|Auu|*B;U_g}8deqZiEB7VF=G@6Z&BGBrgdhr$Tlir^AzBiR-1@f zSgWTEc?~Yci{0zf1^95Iw>%Mwle#2V6y->eYdZ_yR2_2U;Q#?yKR<1cj3wGQF>vqj zd{E5hO!AnGr`g-M<6TmgvM^!Ge>>zOPlA+nwTdxeBRMhPDs?akorRHIMkAlX2AwI6 zDmnd$WE^HpVsa3YA5HYlMtB@=3C767(mSPGaPk~ikCmf&+DGEG^%5{HnK|66(+Fhs za_FK9vg%k_Ws?xyv8sQHV|lEObdsdDW$Z{Z-8gN#KT;;I8^3J~q~m~kY+e(oJy6Xb zt%Q}TA>mG>@4yWxN+PREll#(8Pke2i#AjSQW3G1h{5rZiS~wEM&eni+Uzx!-maG_Z z4&B_+f<|r@z5klWVlU~jZoxsEc11r+p*_q|N=Rnjd!JAbfA0{8gZ1M_Mt4Gf%vq_+ zRZ`eXG`}?1H`GQw(v_bcGnBk7c8%g1 zB-l-DUM*+kb`6G0$r^J*qI2t1r4Q#Th8r$_lgTSD&eTTmM@n+TJ|yyz7UB^)X7IWa z6Qc|2Z0%riv+{dI4;SOY+Oj8@2Hm3{*KOqIRMtA+^sD@}!R=3=7pdDj@Cv`Nnjt&; zs<*v?l*w;EOZDJjnPhlP^d)X+6f60piworFwT~Y8O+M`QOnmcYIXUZu&K9bl-dYcL zXS3(A{fel~uER38GHEnWeL+XIN(3Dgm+Q+a7*QCy!J(N=Z2mCw_bE%ukQfK;i{J5$ z@1Bgcx$;p#-)2mB7s5X66rqaoNb$E#YtuD&~qN?g$YUJy&Mpzr+21vTK<{w zfI=on6Cs*5dh9JU_jELk)z;KSQG=E{yKMA}jgnK9%;C&XXu4gsbpolrE4v-1#oIs! z1E`V3dhyODpE&Uc#UTYq zGD^mrF*s$_`ir&YBeu`Bip=xEDCd~ zM2{yd-mHJkNmi!FWPOCmY*%TKEN8U18-6mT4bRd_qA0`eJ|bxF6n5<}OWnwqzMxNl z@a1#JN{&TxGAzsRv)LtXGo3fkk+>cc3`VCDrQ#>Pxf1@E0eZ{gp+@`qRzSJwL|NdHU3 zDOiV?WisaP33M;Y#d4T%m*tqPdwxk!;*BfpaBn6Fj-YsTd@alP6OZk2PXQ$pnM7T} zLo?~mx~WAI)Pp<52Ux?}fgFBxlo5V7)Vl1kLy8O#*uZQh;)RU4cIfCGMdt+{T5WJ%tE&bm_PVuBH~fV?OSGh-6=1E_{)v*YZ=icdmfM#S zXS`Md5^mTXzb%-!NL_TkV<}XhZ*2BJoQei;LXi<3L!%UfTk9!0)S{UUD=G9RlCymu zB62kq%~-iVE+9H`}a~aZ|a7CNIcQChnSeP%pu$1B~xguTmlPTp@pR~A0KfGC{v}cVbaHtGl9r4KKl3$%ed@s zDvyG@cvOA^xi!2IBaGaI1xXr>tuRod#nNWFxB>Um+G(!EVWOf2s-8DjdgrxIgOLJo~%wFifT%Pn-kdh3V_dT^j z{UAD5%V+qF4w|q zb6s$M-tPLs}v?>2zBGi8xpXmr?a*cBY8Y!0(xw4 z$Rsegd|{Mng^<21Y=oNd7^%|=q(--NLMM{YCrQqpOF*w|&!G7|c|`DKzQu#z6ds zh{>KTk{~ujri4S?`4!=*$cGP?v9wUL8RZy@@zfaR@8s=+6=Ux(l$9Yde``w8QjD;PO=u*ptW**w7?zt>u?QNHDYsT}#jX6nX~cCQf}zRrKU%EdFKSnR6 zB6f9e*o}tY$?4W(o0=G;%nOYN$S^%uEvOo5ea5?u@?qW4CX8A1lvh{bw;YY;WNiPj zmi=vYs>D<(;;#ogng5cS_5s%o0l|eI9zo31H)UY^4%7_8imkhk|Tk9A*w|}nvSb<0AHNF2Qyuy_+*WayD1FM?7{`qFdc{{^gBchl=z_m zi`?*jo}2cun=e7uX#HEv9H~>`{d5fS1c~&&u(>;*o4*<@?Zvy}&6qgyut_NVnG`=C zMaw~$LC8l;vRBFT4RZn)%g`=cZg!=}fHD7jmcg#JDoL9}Fg%2RL`7MJd>s1U&1kYHM6(eW?qW5^MuT@oKrxBcTFZ#GFh|p}&lSVTE~0b! z^;ht&%UmTQ@QqZP`MJ{9cnE|{3fdcqbbGXjZ{cuu@aytTo1I9Sd_q%>#}9PCPumW7 z>PFU)kMTBDSlwPVv~-A(S+X?k)ts#ThKGQ%Ah)PaK1)NxHr4d~L#AGt2y|ORZ2!Zg>TER|X5orT;o-tL60NPVzgH9tC-^AA+tmDw@$9}`m~gF+xpuiUgEZP_Ju54 z+{WDFGI)<6a7@WqsIzfml*k(mab#F=EE#h4ch%syK)0ndQRb!w)+A2YiTT)(8uH-_ zMugycXSYK^*5D}i^eemx4YanI0xQ-nhM2iJ6HS)B8nRG@)lDbi_l}>dk!{3%-&TU} zzJKR`c!}Lh5JHq_sdX)ocE1#wsl7@f_q(Y}Ir#lop%JZMLY*|sDj$`luJMLHGrTUY z%%3>rm^dhBWD$9W5$m=aF2ynAPG;+Q=HZtT>cuw&a{R7IDcDSfv{{Ee&ZkJrbVk6(5dfrOahbbbZ+MebK zuYN@F@98n&Guj+WSH55iczt9Q6~F{dZ*DF3LXj)`z>-4QLmk%*_*SOUz3cRTuetJ* z8D(~eie<#8E*b=NiU~y&)8Y*&FXVr`PR3KkyO%;6m7zdaVy1w!;PRknyx#o!N#N77 z*Kdo}1@q8Cp?es-+^TM*n*%s3I#j>hj1vYalTeiY(~7T|V&x=vF-TWw`%`NeIs8Au zTnf`;r#o;{sFm%x>d*xw1AEz~^tc7JBP|(iBdXWXCEnpf!IBmSuWMio}#263fPNrsGh#nxR0QjQgd)ly7nKgByQU|EZj! z9bRl~203O_u-jOrL0Z!)BZ`$W?O^OZOQ|gDnXIkyJUzFnv(J$0lmD*;Xscjy%v#EC zNackC?kxEUVoWR?O44-Vb(MhqX{Tn9&^sVd_>1*Q+XObH54Rsf*_R0J+BAlWV;u75 zBw%%^<<(53<%I|Fre^7$SV?KlwfUZhQt7tZg&CDxL%e>zsSo`YogUJVDurfPRcs(D zgGj?JWR`iVpGR^c(Ier-ytEK5^Yo1iM+T8sYw2MLi43K4c-A?~&tcfA>|ld^l1@`> zQqjxtVkFs###7^{P?@}imkO4;$0A~=+JMxPqX@mxB0|p>!$q}hn8XECw(n=8a9vw2 z!1!GKZ;&%@GuGJ`!u-aNO5SVr?!iKyib(A@2BBCsb39cB{v;v&%Ez!^*n6tzYO4tC z4D42^jf)`3Y7ay(IEuku;5xxskT6AddJ>?zOmo0c~kJ~5zSHIk@*HtSSSQN z0=;sm*9K*fX1gzg8?wxrY5OqKjifJUMDjN{#hxmz43!ra#!@=G&hk*R&_tF%pV5nY ziVx}uu{a$+avR7=^&-)*7!imo=`SUd<~Rg$Wca7>_Ub-~IztG?^3mh39Z9w_P{whY zNjAy|1=uXKmTVF-C^L@rAu${zQ2rS;bAWfPRH`|tGFhDtyoGyllEGvt~ zwx|0fp27Fw_+-bYx5(w4qU0e=JpQFTI9?4uQamD$0BZLkA%Eh@YxAy^0utYDF<$4L zuu?%3SqS%-471F(N0o6z?|$;wFY&`7^xjeO0wnDRd96r{lcJmx_a)92(nrmtz`VgG_{xcFez90RsB-+wj$h76=#_$rdTTm{29usy@mYw z`$>4ipLJQhP3gRpqzvn)Fe-!b8*hJ?i9NGNpDX5SD?_jn!m-YeY`Tp%l}5)V(4U3H zvHo<`YZ=T~54u8Ukl`fQ9iLD>*+f*3F9^$F{x*?bZGz*Avu;_|P;8knq5nrT%$hODD<~6bMVx2( zvum8sd!FQDFi)U5l^7RkTUU6HJz?u~uG+C%N({SJx#GM!F2f8Yn&(xLh-QNO7%8{m z9*y}0I}haq`%^DY!WbGZmK{30rP|7?cYpE(N*bAul^=Y9F=Yi#oJ7k((WKC#`DN2t z^^bCW?E-NnvQJfH} zS*Z&G{HWjp*bsvIodwa*Fw3)-l>3yLA2dEmi_A3;20x&Uw4}lj{uK4fJpuKQnBtH2 zfJp-FFnJLbOv#%%A3@20cpkQ}2it-cq6e|$e3kJDOQ>MRg9=7y=x45@g~4z}m4%MDuhL1|N~+>a`v?=|W4Zp@E%=%{PM&+-C6@M5aK!)?CH2FF6%DU0J|A6I z^J8ulgKC|fQf^1)3^#XK-P^JGiv1p3uu#2y2MdMDL{dRt7TaFx!k0d+kr_=M%}nCN zGD-?>-yfJd`jY7`cJJuDDiv2{XM~{}8rY7ZW7_C5z(`X2G^6qgapxB$`n<70 z`q8;f_Z7&}@jMhex^lI~4R8@+)^8ir+9en^;B?(DCt6m=2zTN(?|?tFHhh*OX>ws{ zEF?%l(cB|Rf@RZrpi{3cw$HDeBM4K)Nm8<_IbgerS*(0Qr6SqGbmN|5-nEU-+)f#0~!oG*HVP-nhGnw zYBV&j(~r7j<1O|E+M0F!$>R(N8Zsm7r_EisR;ZIx^|yzl!f=T*8xP0w6~Bh*Ea6|y zf0_0CiuWqs`{9OHy=Z%0DMv`eDPBXjVNKTRO*8GTQH8WW@PKmWb?dSxyX6a{%pEFq zG(K8!z!7@zhE$dj2r@L*{?z8Kz#$4`j9zD22fd?H173vL{mk7xzF3Ug_;Q?YX|WR7 zi)v>{%AOEBAhu#2=(#KIM};V+d}TVuU#isMIG(*JQy!7t*$n@ZMBNdOE`m<<^vRoN z4dY)bClEB>XN73KTJZgmnD(HZKBayaacf?&prUG700%-S0CW=;6#V@8bE6F{Nf;v) z!jJP; zFLL~AG)imA${cVRgL``!a+aI~GZGRKO4tg`j%wzA@ok^^Ju6l!op%&8%Goij5TsVu z)+QaM&6EZjTJWXetg{M*jnW0DD!q^$A-^uk;Vgy1pRWl=jwxcWtX*~ts03_w0d@w6 z;n<@K&fFnXkmF7^F)>!Q5@Scla(Hv9CqetG7(E#k4dwuP`{dMj7jl6yeVez+Q9q5Y zzrA3+=lsZO@e__9=YTiI2D7i5CzB|k4E`?s%Ke_K%12B*bhhYGsZ{jo4IC3uLzd^x z`}YcibM(`4>Y&G`?X)d6Jh@@woBeT6dlawrNq<;v3uV|}>u3SumpJtRkPi)fc>ryd z4iHU%^YTuCIoit1>>J>d5YdWS2xkId)k6{zbVyTEQ(avh5ZbFKE9a-6=Yc$;KtO$( z%8-FR1&kgYozFOrI(zIUolpruQWkE99@g6PuFu|JW8=Ji`}QAYZ#01sI6+VeK=l>? z_$xrpnlcAO*+4d2OF;xMFhG$5B77|#djmy$C<922vu>W&GBmsb^eTYOZp_dB2?WPM zz~yp~a|R^jAfjy=M2?;VHlM0E55)vf;s7mT76{|vy#t9gYC!c5Q12V9K-UBeFnRb31&f(ZmEy+pyj8qt%VW4&-gKHxywu{`}!sHGX6%`f0@gf$-i~?fd%8ptyY$cCd!;6L*N;JdLx zWq@oDn0eIHJ^^|)HW957hwa7qFBB9suL6H>%q26N|%u{Jn(C0I$QpL^l9`hJdKS2iyj=3`|VxK!S;d zg_SY~WRXC;6IBoi<2JwB2IeHbVR?D^e-ND-Uf2VuQaNY2QhCMPF<_|VYU7#{-gpyq&i3&g3wDFr-5K=5y-shOCT zmImBy04`%<@)ZdA0mHa{7-&BAb#;M%7Kp!kfcGMlfzL+smYA-Mj~d{&fv8Mddmg}^ z0oDd6@uq-55QxAg-}4tf6coxB9#()TDJw_C#VJ5R{?6Zdpos$}i)a`p2S*fOKgPz| zBnSf3{4Wad{_zP3ffUafn2dps0jU3ls0nY%^Ya-21x!Ey381h;LqmRDfxs=6@((@? znjU~R0+ybXloWt@i!K17^X1YP<|@CyRT&4n-jTcqn4Am%WCIB=5WvbBe1B7wpFk`t z6S=3$6Ai1oiMK!{)c#UCZqY3g7wQ%ko_atW3vc#uRNm1V5jH5(}_(} zz{ODf=bMg%I0K5fKK-UBWzVbq$G;B?@5fbo&i|9ELjcO~!9THHDbV(7sr=sC0|GoO z2#_Dz<5p^V1C!&E>I$;dJYqopOIb@_98 z+HgB&!H0>118N9La&ktL*VF7Ft6z&%G%~wDRA+f~1<={;zQ+X$8$csG?IE$z3@C9n zga*J037A5_BD6rk5~AfMaIyvq{@?L}W%q)kfO-`r(7ecu-u3KV9$dH$i@ni;o&}?kFp0Bzp`hB3zmW zA8Mh|5-@aNPf#HbM|xeJ=$8a=a)f`lzOTDrp=b)Q3bn$8H#Cqnxk7_!8WW; zLOarfAX^h*hIl@=VM6w@!1!|~lL{_GPEoNz-acHHc?6*Jf!>$U^NdL}%&uISfE3s> zz+Q_f?JiLajuCM1Sb`{-nyzL5{QC7CTx>wzt^Cgtr-Gm&BO9!ZU$X))2Nsy-8Y^J6 ztL)>Rb^_XX;IA|8^gRalLSUDn2Z?gP>;vpbz=ig5`OiPMU%>N&fqKdMsN$=Pz zaAb|9Qe7WK_M#O_MD_@t1l_mor%ETjU{`q5V`A)r6%9wo@fARA^idzE&=~Th_~oHd zc0~clnH$Dz4+8Suvi0PT1mW?z4~{Qt?($GoJ=T5X+Pnvs?>@w?e;KDT(WVqm(SlP8 zAFB34#E!WQ8NNd{xk_aTP?fvHj~GgEhK&Jj_JkB_zyvJs1_tkK;--7oh2*l{;q}#?o5QGpHZ*FQD0E{~*1OV)VO#vd+-|-Q!q=3s$ z5tuWT!XL?LR@T(m`|wi{{L42O9fiZ;2}Bw|lIg|EE@4!`quMWg~PLvEn)}8`DBiIsv(S3RO4!pkmAlj``*q1HQ zYGhEJ8!yt>gXJi4_OY~mz$-8FY$alusY>IA$qDFK(Xel?>+E)}D()=&U0ph*VZn%N zai#Am+bqq4+|Ecpf5Q<%vG~H1B$9CoK997-s*}U1G!qHvoVW08hd5>y-82=j9^W<^ z@eCW(ER75gYpLMl;T4JJJUxHHh%KmSE29MLz$@3>kXRZKB1Ro8 zEhf6hP#II#D!mG<;JJFOFC&zgA-8>2w*3PGu1i|W1FP8c2HX^1>~_!n022e1fU2c_ zw+*TRXg=7vfGr6Ww-+D?IZ^K|AVIs-8T9w}gGhTuZ>(&Mk<(5F0~%`TfWxjW*KPl$ zE)=Za!yx2><5W%!7i&;+cCatk=l*Q0E9?&DCibP}OG&?KFlMw(Rw7US&Qc{(Duro~ zm{`ihyRuf%VSO~OM1Ppj_v%Ih-A>9Vdh`eaiz0MdJ|WwiU3gEMXkBe~TI2e&SkJ7* z)j6ZYKUzh5HPb!_lnV26b6}qb3{fCG2eAskFUiHlCE~KoK$n)BsS1~#A>ii}k6^h% zvlw6rCXu_?U%5Sw=UqF$21Kd4ud5|VTJF>NNpOl-sGk|E= zW_{Cg#+TJ`pgXRml@|#?8`MRAedD0X9QqKKP7#G=xP^Kqr|A+^m0v|np`=Q2{v(#_N)OLS(UdO@QL}{t&+{td{orCpo`;-^+OA zPcy%DxvHt^#vKMW%OOzrfg=80e0+RtEH@l(0L=0M0nePGEH++u*VXY038iWQZ`en- zKiV=-)hT8TQchC}-n*gS&%^L2A@01ikLa6hD{r2(%DllTpsm5C9(7{z2{ ztS=7I9J+dfUcC}xRHKN;#Kxv3z*Z^Os~`j)xVYsN75{Mfpl87fUgl{uQXg&N5fl}b zgUOYXWeBEaehGsWZx+Vi)d6;X^4N0ewCnM)2e4*JAUFAnQCh^1$;^v0;0nSe2E2sz zjSXNMKzhdi^M&#*Og(#_6+Cp_I=~WQXy@ILeRX4e@8_DQCB?KTG2b%(^$U8CJl&2B zJx>FoLqA*Y~FVKxz9 z0l(eyJ5cv|J*87Mw5%AbpJ0Q)$ZTMkAzI@U6i~*#KE{-}hzP&2W)Rc@2-;4TmOt}l zB?V5P5YS>#c`8^Zn?35Kc5E_23*LEMu@K5Xf^Je&RbHN`)vuR(`=1w2Pw2s?xzC?R zPdjsSR$xEoy(9ruieiLq;ici^m z6570wts|5Ff{E~%!D?D|);~R8#PHY78BZvQy5Mz|Q?>~Y*FxIz7C4bSNONiJl zQPK)`H%YF`HyW%C#4jEkuE6K*y5v2u4JT(@fr^hfNx1R!FKa5DcfPn~idWa>sEC|f zjmMsMDUXJz7yjsV$wrMQzw8r3aUF&jlZ4QR$>jDmP9ieruMs z%*+_Bf?Fv?h9p{w4}Z&G)b99EpC-0KxyK=emj6Vbx=>b@lwk3)nppgF0t+R|NwTp1 zBp4QK;L4^;sBT>liX#_6$5CBgZ}3I(HGcTc*XRr_i%6|mY5CE-xU_oXnL=*2T@q&- z&4sv&a*juwJNX##Aqx=(jf-L>P(~^tC$Q1Y1p~$e0afp*zoVn0^K!$383@Z0E<_&G zVD^u5iHLZ5YBs@d*xx_04|eFMSy6y&oO@w+u;p956)N!Gd5&^2Xx$e|UwkKJj}vjm z3P}!5T%^nwelr}O>wdUz2aP~Cw+;wcg5M^MnFqsoYC5+hs9s|9# zH8ZwFyO1~harAn7PxYJ4#JA4Xp9hDA0?%d@C-J+XXwDEaf;?O8!dYSV)dtns?b2Q-2?+@ZMu*NZBT$JKhxiHa zhJJSO<49DGuyuS8%vkcazjsBhKQndo@ZXGhQv5!&>~IwmswjrRU!z97+V|qWg3teX zm}z#D{}_CVQKQY4LC01v=2>q#Hoso1(yeM}>OAt5oIHNx`dypE1pB2gaB=}0Zyh_J zJnRB^bH&GxAZT}Or}+z5{1piv9RvPHN?O`;5M2*CN5b#XA^ z=XGt3L*y@MGn(**{rk;8yrc`r_nB3^$FZgov)asP`A#qFVt_=R0E1+WZN1i0&+Yw` zC{oFr{U`U3`_rArSrS+Crao)70w2K40g$_86HS@t=Spe|E-K4{&1!x z9kjKx^WEqEw(j;uUr!g{MzmB$V%wfDZ+r*Sir?QQfkRGAU46L8`MWZ(Y2)G=-ff%f zRr=yHf+1Mx*_o^P{#R+JVXM0)Fqwi>pB@mT0$h-O%eDF64{ocQt9cn1dM)?}9tyOU zl|ii;P@gg{_5mYow&g{x;{$arPENm_Y@e@MFLmboIya#yuvz_L(Iz=j)z(+{&*DW7 z&iYyi364pnb)y9t21DTJJ?;)YebVdG?=H_Vt}-%f^pKfh`3G7x$*eNx&u}Le-#FLZ z)td6FwdBp%z7Ge69WM0Z!1IAEOFY|C{|?Zp9enG$0X@00hK3oao%Qt6#%zoL+v5*0 zGyUt!#K+y2p<37LF^>Vrf552;piv}V_YZalT!SL><>Dtpqj%pM%jbvVUj&{+vG-h_ zOhl1tn+3ie1G5&;)g7DaErN7*e%HOvpa?%!R;C?6ehS_Z!o@u{x3}vCspg5Mh1;KU zm<@*5>4WOq+wmAb*O-5|UK!!rzVjKbjDNn`dbsw=({9?d&We1*!#pVas+3jrsiGW6 z;n*3GeG8n4xnRJQk#P--&i@kZsrf8sz`zGg5CBx+I{?2mtT06v%sSWvxB;Ut2rxej zx;wr4T>c=FhazSL&`WkceGmt`J;1uBdZ`(%A8-~EM~4{rm{hmc7Ot8XR@CA};*IO4 zTGewn&>w#L8NYV>I40!fp`;DA9GdhS!XZ6T2gznMQ4YcJ+XwMR=t8uX=wikMy2?rc zOfx@x+dE!-tn}Zgj+e}|*?~X^=9T57b#w_S{tX3ytzH`Xj*5RB7)ilo*4e=U#7!z` zXiSB#<9Bqgo-Y^1d(irT0vkidwA~vp>@N!ApD*&17|R9>fP;2=a*~{!EcvbR>U7%2 zq!rN#)=%Inr+w~kbMtpv*zN1(_W{N3wOdy=jYILHN?QaRy53Jo0rIYhXr4-dfHt<0 zFQdfFJQTkHs7f@hqP(0ASOet|1_n?FKzGDMM@PrU6r#L;ktoagjqHk7RMhxi|MGsP z@Fd{65EyRnPhw0Te3jg){@lTP2U6SbFF}L{K+w}(AJ2em2E;_2|44wL5MYD|SUU8r zLF0h*0IsC86hYvpe*lpA8wXz`Z`_W|!ut3Cz8~WM=f{J8bc_Fj=r1lFP(5?f0mvXv zdgET6Sa#4axe4Y@=gLcCZ0a*aAFWeQ($te^9FlJNFB61(gT5S$Hg13c6xd_W`~sYu_JFm&$UA3D+**)2*Sz+} z+N-1Plkp@#-g-y%Ttf0beLpL!u@Oha^;#5Qg+Q!F%3M(q3tPz0)a3N^5diNoZYC<0 zsGc&7cm%!w4<}~_6wPt8Vt!y6yZ}f`U)z#-&R(vyHvw8U7@++d{|A}{f?-9A>qJ>) z$>pIyV%*Oi7jn^^upu=D_i83>!= zroeAd;~NH@LVQdNDJDNJZ%&tB2~7k)=-g9HyF1-y3!d0(ECCNOU_D)*KLT@!(Xg-L z_8)1ri0WT-o)nBc-*%Q&Wzp*;BPKTX4SgNjoBE3|#R`*A&qMy?Ait5fFz@GY)l>;` zG)*;S@#XRXS>=^J!sNDdtFo$^f>i$M2nA)jUc)te4k3elDv^^A-k!Gx#C)Nm^W53aWqQ3@B75CrA`*`VS+x0mu(g6FogWef_tvj{v>H+g%HWIz4x<)uW!hgR3hjX;x10DZVatw2ZlcXE&cp zzet*P`qmYp9VT;hUIibnSxY<-F*-uivr%m`hL6PHhAx=4Fjus8TAAD{XJ0a(XNY}J zdmDB5C8rX%>0|L-FC8WsU+kk`^ZzkU%&7 zjd5&T8s^FE-zsy*9$20qytl(7)werfK`9+17QvS_ev#LaKZu~xt4Q5>{r5*D>)e2f z<7(w(td4-Cs}R~pZ&Aw$CR=fuqh#eITlF{lla?=M!iXb@FKk@WJD#4hE(S~9CpiCf z?+BU^kB&6>QC&(TS1O3G-0Jfnlntg^Q-84*UuoR$qqTq3 zHpc7rR?nM{WliQf(^RfqldI<8$ckBC_3Iqzv`*Op487e?JMdpo?O#-c85@!Em(xT2s}L7?RkF48)WF%f+UZCBO$ z=65eZLUR4pH{XI681!PcYTw8Z{2NcO<8kK zbA8Z<2rxfr{HRWciH;Ndx_b5GWBae}ws_r7v;BZH-9W#M?DJXNve(r-R;x5> zV4YSw_FgtI-fwJFcUQ(JpLSD>keu(mK0db#Z{a56+;=H{To`8)>NFPE^8W(51x5Nd zLS$9@Wl$RQ=YCY3cjH{@XJ`^+o{i>N9v)=~caH+!8?J zD*TXAf`SbR0-D!=MTp@s@_+fe{Q|G$iP*k|_M2PE)X{FT(c=J>49jH~l5!`ITzz-DKBhn| zWtTNv`U)K{>)V3J?m82_vu%Hy%icH^v}=r(CHTCr<|R3eYw+GbB4WZ5jg=##!-8hV zgDj4w}Q8^tzTMu&$*5`Xv^C$LehWW@x5&$C+z-^?bC#a zl(HBaSAa-4p!n50VxysE{}ukjykbO<2m})#&@Q`hBW{vv08)|rDa*oKCWIiH+*>tt zRaTwJCGV5GqJ0)zRc}4wOl|BKb)R!yB&N{l|eo<6S36b{yhDF~I zY%LT*U)%Rz0zjdi4&Klcva&RhvZ>n-%iI@I9SJhD6=6&rrcwP9QvyJ!3 z?QN@+xs)&>M6K)srSy;8f*_60YDUy zrl&u*U}SGjG=G>|daTi^5!)*p-voV8C0%0OKtZ`$Hmyxffn&!5q!2>nM72Q{0qvH6 zoUPJ0Gp^eR2W^^k1ATeh*2(R3{IxB5A9k!It!$xst5@hq1e6UQ)LNgir9O*u@`$Jv zYXS&fIdM=Yv0>XK>-KYH7!lI!*=(N-Z)hC!%)jGXhmk^$cS#nM>&^SBk++<64A&J3 zuNAg+EA_jTnd0%clq6~$=TAu_lD6KEx`kr`$lofyK0ZEJ1iWtW9M;udO-a89dn)T~Q_)9-y9YqZHdW0Q(X&9`s)9!>;cr%VF0iY;e$7KcJWb z1@uU4#N8dl%Usw?-<`7Z)K9b$U*`z6Z$9mdSPdws40KuAO!p!Ph? z8#K-V1C?DtY#qkUEhr7jvCL z2$eGf$F^jQog0CpxD#jj)0o6yYkhiNNoILvJJQ?~#<80DQdT9<=Ty#Ffk)X%+Rl3; z%ivs^$qK0Iy=uR^{Q7t6nNjxVDi^tJcK3O3d)eq#_vBXrJL=gHOt5HtJ$ZBwRQ6pp ztUF%p*RI%c^YlfRBUX(rmRlrIVKKyIs=q}M{N3rX&dG?b3ADZU#=t~I~l>h($ M07*qoM6N<$g4dh$egFUf diff --git a/img/dependencies.png b/img/dependencies.png deleted file mode 100644 index 571ecc8e411756c931df6d2020d6481ca2577260..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110079 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

hX?37LrX-l`G77iv2R-S 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≀R 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 find(Pageable pageable) { - return getAccountsPort.getAll(pageable).stream().map(eventDtoMapper::toDto).collect(Collectors.toList()); - } - @PostMapping ResponseEntity push(EventDto eventDto) { pushEventUseCase.push(eventDtoMapper.toDomainModel(eventDto)); diff --git a/src/main/java/nd/jar/springhexboot/adapter/in/web/MoneyController.java b/src/main/java/nd/jar/springhexboot/adapter/in/web/MoneyController.java deleted file mode 100644 index 9591fcc..0000000 --- a/src/main/java/nd/jar/springhexboot/adapter/in/web/MoneyController.java +++ /dev/null @@ -1,9 +0,0 @@ -package nd.jar.springhexboot.adapter.in.web; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class MoneyController { - -} diff --git a/src/main/java/nd/jar/springhexboot/adapter/out/cache/RedisCacheService.java b/src/main/java/nd/jar/springhexboot/adapter/out/cache/RedisCacheService.java index 1fd0c77..db8b271 100644 --- a/src/main/java/nd/jar/springhexboot/adapter/out/cache/RedisCacheService.java +++ b/src/main/java/nd/jar/springhexboot/adapter/out/cache/RedisCacheService.java @@ -20,7 +20,6 @@ public class RedisCacheService implements ExternalStorage, GetEventPort { private final ObjectMapper om; @Override public boolean push(Event event) { - try { stringRedisTemplate.opsForValue().set(event.id(), om.writeValueAsString(event)); } catch (JsonProcessingException e) { diff --git a/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventPersistenceAdapter.java b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventPersistenceAdapter.java index 1cf6753..ccef86f 100644 --- a/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventPersistenceAdapter.java +++ b/src/main/java/nd/jar/springhexboot/adapter/out/persistence/EventPersistenceAdapter.java @@ -2,26 +2,16 @@ import lombok.RequiredArgsConstructor; import nd.jar.springhexboot.application.domain.model.Event; -import nd.jar.springhexboot.application.port.out.GetEventsPort; import nd.jar.springhexboot.application.port.out.ExternalStorage; -import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; @RequiredArgsConstructor @Service -public class EventPersistenceAdapter implements GetEventsPort, ExternalStorage { +public class EventPersistenceAdapter implements ExternalStorage { private final EventRepository eventRepository; private final EventEntityMapper accountMapper; - @Override - public List getAll(Pageable pageable) { - return eventRepository.findAll(pageable) - .stream().map(accountMapper::toDomainModel) - .collect(Collectors.toList()); - } @Override public boolean push(Event event) { diff --git a/src/main/java/nd/jar/springhexboot/application/domain/service/EventService.java b/src/main/java/nd/jar/springhexboot/application/domain/service/EventService.java index 6f9e408..d714ba9 100644 --- a/src/main/java/nd/jar/springhexboot/application/domain/service/EventService.java +++ b/src/main/java/nd/jar/springhexboot/application/domain/service/EventService.java @@ -14,16 +14,16 @@ @Service @RequiredArgsConstructor public class EventService implements PushEventUseCase, FindEventsUseCase { - private final Map subscribers; + private final Map storages; @Override public boolean push(Event event) { - return subscribers.values().stream().map(sub -> sub.push(event)) + return storages.values().stream().map(sub -> sub.push(event)) .anyMatch(result -> !result); } @Override public Map find(String eventId) { - return subscribers.entrySet().stream() + return storages.entrySet().stream() .collect(toMap(Map.Entry::getKey, entry -> entry.getValue().find(eventId))).entrySet().stream() .filter(entry -> entry.getValue().isPresent()) .collect(toMap(Map.Entry::getKey, entry -> entry.getValue().get())); From 74aca7b6a8c6ab33361f3640d0f38fdd676f2d8a Mon Sep 17 00:00:00 2001 From: NJ Date: Mon, 19 Feb 2024 19:29:26 +0300 Subject: [PATCH 05/15] Added Kafka support --- build.gradle | 2 + ...cheService.java => RedisCacheAdapter.java} | 2 +- .../adapter/out/kafka/KafkaAdapter.java | 39 +++++++++++++++++++ .../adapter/out/kafka/KafkaConfiguration.java | 17 ++++++++ .../TestContainersConfiguration.java | 8 ++++ 5 files changed, 67 insertions(+), 1 deletion(-) rename src/main/java/nd/jar/springhexboot/adapter/out/cache/{RedisCacheService.java => RedisCacheAdapter.java} (95%) create mode 100644 src/main/java/nd/jar/springhexboot/adapter/out/kafka/KafkaAdapter.java create mode 100644 src/main/java/nd/jar/springhexboot/adapter/out/kafka/KafkaConfiguration.java diff --git a/build.gradle b/build.gradle index de418ad..5217eba 100644 --- a/build.gradle +++ b/build.gradle @@ -20,6 +20,7 @@ dependencies { // implementation "org.springframework.boot:spring-boot-starter-security" implementation 'org.springframework.boot:spring-boot-starter-validation' implementation "org.springframework.boot:spring-boot-starter-data-redis" + implementation 'org.springframework.kafka:spring-kafka' implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0' @@ -36,6 +37,7 @@ dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.boot:spring-boot-testcontainers' testImplementation "org.testcontainers:mysql:1.19.0" + testImplementation "org.testcontainers:kafka:1.19.5" testImplementation "com.redis:testcontainers-redis:2.0.1" } diff --git a/src/main/java/nd/jar/springhexboot/adapter/out/cache/RedisCacheService.java b/src/main/java/nd/jar/springhexboot/adapter/out/cache/RedisCacheAdapter.java similarity index 95% rename from src/main/java/nd/jar/springhexboot/adapter/out/cache/RedisCacheService.java rename to src/main/java/nd/jar/springhexboot/adapter/out/cache/RedisCacheAdapter.java index db8b271..996e5c8 100644 --- a/src/main/java/nd/jar/springhexboot/adapter/out/cache/RedisCacheService.java +++ b/src/main/java/nd/jar/springhexboot/adapter/out/cache/RedisCacheAdapter.java @@ -15,7 +15,7 @@ @Service @Log4j2 @RequiredArgsConstructor -public class RedisCacheService implements ExternalStorage, GetEventPort { +public class RedisCacheAdapter implements ExternalStorage, GetEventPort { private final StringRedisTemplate stringRedisTemplate; private final ObjectMapper om; @Override diff --git a/src/main/java/nd/jar/springhexboot/adapter/out/kafka/KafkaAdapter.java b/src/main/java/nd/jar/springhexboot/adapter/out/kafka/KafkaAdapter.java new file mode 100644 index 0000000..e688c45 --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/adapter/out/kafka/KafkaAdapter.java @@ -0,0 +1,39 @@ +package nd.jar.springhexboot.adapter.out.kafka; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import nd.jar.springhexboot.application.domain.model.Event; +import nd.jar.springhexboot.application.port.out.ExternalStorage; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Log4j2 +@Service +@RequiredArgsConstructor +public class KafkaAdapter implements ExternalStorage { + private final KafkaTemplate template; + private final ObjectMapper om; + + @Override + public boolean push(Event event) { + log.info("KAFKA: Pushing event with id=`{}`", event.id()); + try { + template.send("events", event.id(), om.writeValueAsString(event)); + } catch (JsonProcessingException e) { + log.error("Error while processing json", e); + return false; + } + log.info("KAFKA: Pushed event with id=`{}`", event.id()); + return true; + } + + @Override + public Optional find(String id) { + log.error("Getting messages by id in kafka is not implemented"); + return Optional.empty(); + } +} diff --git a/src/main/java/nd/jar/springhexboot/adapter/out/kafka/KafkaConfiguration.java b/src/main/java/nd/jar/springhexboot/adapter/out/kafka/KafkaConfiguration.java new file mode 100644 index 0000000..fe2595a --- /dev/null +++ b/src/main/java/nd/jar/springhexboot/adapter/out/kafka/KafkaConfiguration.java @@ -0,0 +1,17 @@ +package nd.jar.springhexboot.adapter.out.kafka; + +import org.apache.kafka.clients.admin.NewTopic; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.config.TopicBuilder; + +@Configuration +public class KafkaConfiguration { + @Bean + public NewTopic topic() { + return TopicBuilder.name("events") + .partitions(10) + .replicas(1) + .build(); + } +} diff --git a/src/test/java/nd/jar/springhexboot/TestContainersConfiguration.java b/src/test/java/nd/jar/springhexboot/TestContainersConfiguration.java index c3e3181..dca04b3 100644 --- a/src/test/java/nd/jar/springhexboot/TestContainersConfiguration.java +++ b/src/test/java/nd/jar/springhexboot/TestContainersConfiguration.java @@ -4,6 +4,7 @@ import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.springframework.context.annotation.Bean; +import org.testcontainers.containers.KafkaContainer; import org.testcontainers.containers.MySQLContainer; import org.testcontainers.utility.DockerImageName; @@ -21,4 +22,11 @@ RedisContainer redisContainer(){ return new RedisContainer(DockerImageName.parse("redis:6.2.6")); } + @Bean + @ServiceConnection + KafkaContainer kafka() { + return new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:6.2.1")); + } + + } From 868e348b4df0374624ee2a91da3e4e3deb35de93 Mon Sep 17 00:00:00 2001 From: NJ Date: Wed, 21 Feb 2024 09:24:42 +0300 Subject: [PATCH 06/15] Removed unused files --- .github/workflows/ci.yml | 36 ------------------------------------ 1 file changed, 36 deletions(-) delete mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 0ec06fa..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: CI - -on: [push] - -jobs: - build: - runs-on: ubuntu-latest - steps: - - - name: "Checkout sources" - uses: actions/checkout@v1 - - - name: "Setup Java" - uses: actions/setup-java@v1 - with: - java-version: 17 - - - name: "Initialize Gradle dependencies cache" - uses: actions/cache@v2 - with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-caches-${{ hashFiles('**/build.gradle') }} - - - name: "Run Gradle build" - run: chmod 755 gradlew && ./gradlew build - - - name: "Zip build reports" - if: failure() - run: zip -r reports.zip build/reports - - - uses: actions/upload-artifact@v1 - name: "Upload build reports" - if: failure() - with: - name: reports - path: reports.zip From e3c18d927cd89db9c0f22658f6d6321339148457 Mon Sep 17 00:00:00 2001 From: NJ Date: Wed, 21 Feb 2024 09:25:20 +0300 Subject: [PATCH 07/15] Renamed web package to http --- .../springhexboot/adapter/in/{web => http}/EventDto.java | 2 +- .../adapter/in/{web => http}/EventDtoMapper.java | 2 +- .../adapter/in/{web => http}/EventsController.java | 6 +----- 3 files changed, 3 insertions(+), 7 deletions(-) rename src/main/java/nd/jar/springhexboot/adapter/in/{web => http}/EventDto.java (65%) rename src/main/java/nd/jar/springhexboot/adapter/in/{web => http}/EventDtoMapper.java (83%) rename src/main/java/nd/jar/springhexboot/adapter/in/{web => http}/EventsController.java (84%) diff --git a/src/main/java/nd/jar/springhexboot/adapter/in/web/EventDto.java b/src/main/java/nd/jar/springhexboot/adapter/in/http/EventDto.java similarity index 65% rename from src/main/java/nd/jar/springhexboot/adapter/in/web/EventDto.java rename to src/main/java/nd/jar/springhexboot/adapter/in/http/EventDto.java index 6f00da6..0d1180c 100644 --- a/src/main/java/nd/jar/springhexboot/adapter/in/web/EventDto.java +++ b/src/main/java/nd/jar/springhexboot/adapter/in/http/EventDto.java @@ -1,4 +1,4 @@ -package nd.jar.springhexboot.adapter.in.web; +package nd.jar.springhexboot.adapter.in.http; public record EventDto( String id, diff --git a/src/main/java/nd/jar/springhexboot/adapter/in/web/EventDtoMapper.java b/src/main/java/nd/jar/springhexboot/adapter/in/http/EventDtoMapper.java similarity index 83% rename from src/main/java/nd/jar/springhexboot/adapter/in/web/EventDtoMapper.java rename to src/main/java/nd/jar/springhexboot/adapter/in/http/EventDtoMapper.java index 345287e..e1a3f7a 100644 --- a/src/main/java/nd/jar/springhexboot/adapter/in/web/EventDtoMapper.java +++ b/src/main/java/nd/jar/springhexboot/adapter/in/http/EventDtoMapper.java @@ -1,4 +1,4 @@ -package nd.jar.springhexboot.adapter.in.web; +package nd.jar.springhexboot.adapter.in.http; import nd.jar.springhexboot.application.domain.model.Event; import org.mapstruct.Mapper; diff --git a/src/main/java/nd/jar/springhexboot/adapter/in/web/EventsController.java b/src/main/java/nd/jar/springhexboot/adapter/in/http/EventsController.java similarity index 84% rename from src/main/java/nd/jar/springhexboot/adapter/in/web/EventsController.java rename to src/main/java/nd/jar/springhexboot/adapter/in/http/EventsController.java index 8e583b9..1156e91 100644 --- a/src/main/java/nd/jar/springhexboot/adapter/in/web/EventsController.java +++ b/src/main/java/nd/jar/springhexboot/adapter/in/http/EventsController.java @@ -1,19 +1,15 @@ -package nd.jar.springhexboot.adapter.in.web; +package nd.jar.springhexboot.adapter.in.http; import lombok.RequiredArgsConstructor; import nd.jar.springhexboot.application.port.in.FindEventsUseCase; import nd.jar.springhexboot.application.port.in.PushEventUseCase; -import nd.jar.springhexboot.application.port.out.GetEventsPort; -import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import static java.util.stream.Collectors.toMap; From f874270a10896eba5ff036fe5b2a40ae2b1e4e35 Mon Sep 17 00:00:00 2001 From: NJ Date: Wed, 21 Feb 2024 09:25:53 +0300 Subject: [PATCH 08/15] Fixed readme --- README.md | 23 ++++++++++++++++++++++- img/hexagonal-architecture.png | Bin 50897 -> 450954 bytes 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 986e067..6d19ed3 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ Project shows, how to use hexagonal architecture in your spring boot application ![Hexagonal Architecture](img/hexagonal-architecture.png) - ## Implemented integrations: * Mysql (Spring Data JPA) * Redis (Spring Data Redis) @@ -19,8 +18,30 @@ Project shows, how to use hexagonal architecture in your spring boot application ## Getting Started `gradle testBootRun` +## Project Structure +``` +└──com/ + └── yourcompany/ + ├── adapter/ # Adapter logic + │ ├── in/ # Incoming requests adapters + │ │ └── http/ + │ └── out/ # Outgoing requests adapters + │ ├── cache/ + │ ├── kafka/ + │ └── persistense/ + ├── application # Core logic + │ ├── domain/ + │ │ ├── model/ + │ │ └── service/ + │ └── port/ # Core logic API + │ ├── in/ + │ └── out/ + └── common/ # Neither business logic nor adapters +``` + ## See More +* [Гексагональная Архитектура и Spring Boot](https://habr.com/ru/articles/795127/) * Forked and inspired by [hombergs/buckpal](https://github.com/thombergs/buckpal) * [YouTube: Рустам Ахметов — Архитектура приложения и ошибки проектирования](https://www.youtube.com/watch?v=X6QdWTE1HHw&t=2194s&ab_channel=JPoint%2CJoker%D0%B8JUGru) * [Hexagonal Architecture with Java and Spring](https://reflectoring.io/spring-hexagonal/) diff --git a/img/hexagonal-architecture.png b/img/hexagonal-architecture.png index 316f6ad0f4b2b3b2366742dff605ea27f1f33e76..f20022802ef09318c581bdbc1bf12b0ce98984bb 100644 GIT binary patch literal 450954 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