From f48bfe2107d5730fe6bf059fa9271276229329c9 Mon Sep 17 00:00:00 2001
From: verboomp
Date: Fri, 23 Jan 2026 15:09:34 +0100
Subject: [PATCH] First designs for ui
---
CLAUDE.md | 99 +++++++
.../fotodocumentation/core/model/Picture.java | 20 +-
.../core/service/CustomerPictureService.java | 51 +++-
.../core/service/PictureService.java | 31 ++
.../rest/CustomerResource.java | 27 +-
.../rest/PictureResource.java | 52 ++++
.../rest/jackson/ApplicationConfigApi.java | 6 +-
.../rest/vo/CustomerListValue.java | 10 +-
.../rest/vo/CustomerPictureValue.java | 6 +-
.../rest/vo/CustomerValue.java | 27 ++
.../rest/vo/PictureValue.java | 27 ++
.../core/db/migration/V2__init2.sql | 4 +
...-foto-documentation-web-1.0.0-SNAPSHOT.war | Bin 26668182 -> 26671951 bytes
.../assets/images/logo.png | Bin 0 -> 2197 bytes
.../lib/controller/customer_controller.dart | 31 ++
.../lib/controller/picture_controller.dart | 23 ++
.../lib/dto/customer_dto.dart | 62 ++++
.../lib/l10n/app_de.arb | 73 ++++-
.../lib/l10n/app_localizations.dart | 100 ++++++-
.../lib/l10n/app_localizations_de.dart | 55 +++-
.../lib/main.dart | 3 +
.../pages/customer/customer_list_widget.dart | 275 ++++++++++++++++++
.../lib/pages/customer/customer_row_item.dart | 40 +++
.../lib/pages/customer/customer_widget.dart | 251 +++++++++++++++-
.../lib/pages/customer/picture_widget.dart | 234 +++++++++++++++
.../lib/pages/login/login_widget.dart | 172 +++++++----
.../component/page_header_widget.dart | 87 +++---
.../component/search_bar_card_widget.dart | 81 ------
.../ui_utils/component/search_bar_widget.dart | 59 ++++
.../ui_utils/component/text_input_widget.dart | 60 ----
.../pages/ui_utils/dialog/dialog_result.dart | 11 -
.../lib/pages/ui_utils/general_style.dart | 55 ++--
.../lib/utils/di_container.dart | 4 +
.../lib/utils/extensions.dart | 20 +-
.../lib/utils/global_router.dart | 22 +-
.../lib/utils/global_stack.dart | 16 -
.../lib/utils/password_utils.dart | 12 -
.../pubspec.yaml | 1 +
.../test/testing/test_utils.dart | 6 +-
.../test/testing/test_utils.mocks.dart | 25 --
.../src/main/webapp/WEB-INF/web.xml | 1 +
41 files changed, 1727 insertions(+), 412 deletions(-)
create mode 100644 CLAUDE.md
create mode 100644 hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/PictureService.java
create mode 100644 hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/PictureResource.java
create mode 100644 hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/CustomerValue.java
create mode 100644 hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/PictureValue.java
create mode 100644 hartmann-foto-documentation-app/src/main/resources/marketing/heyday/hartmann/fotodocumentation/core/db/migration/V2__init2.sql
create mode 100644 hartmann-foto-documentation-frontend/assets/images/logo.png
create mode 100644 hartmann-foto-documentation-frontend/lib/controller/customer_controller.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/controller/picture_controller.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/dto/customer_dto.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/customer/customer_list_widget.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/customer/customer_row_item.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/customer/picture_widget.dart
delete mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/component/search_bar_card_widget.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/component/search_bar_widget.dart
delete mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/component/text_input_widget.dart
delete mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/dialog/dialog_result.dart
delete mode 100644 hartmann-foto-documentation-frontend/lib/utils/global_stack.dart
delete mode 100644 hartmann-foto-documentation-frontend/lib/utils/password_utils.dart
diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 0000000..bd8107b
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1,99 @@
+# CLAUDE.md
+
+This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
+
+## Build Commands
+
+### Backend (Maven)
+```bash
+# Full build and deploy
+mvn deploy -U -f pom.xml
+
+# Run integration tests with Docker
+mvn deploy -P docker -f hartmann-foto-documentation-docker/pom.xml
+```
+
+### Frontend (Flutter)
+```bash
+cd hartmann-foto-documentation-frontend
+
+# Install dependencies
+flutter pub get
+
+# Build for web
+flutter build web --no-tree-shake-icons
+
+# Run tests with coverage
+flutter test --coverage --reporter=json
+
+# Run a single test file
+flutter test test/path/to/test_file.dart
+
+# Static analysis
+flutter analyze
+
+# Generate localization files
+flutter gen-l10n
+```
+
+## Architecture
+
+### Multi-Module Maven Project
+- **hartmann-foto-documentation-app** - Backend REST API (jar)
+- **hartmann-foto-documentation-web** - WAR deployment package
+- **hartmann-foto-documentation-docker** - Docker/integration tests
+- **hartmann-foto-documentation-frontend** - Flutter mobile/web app
+
+### Technology Stack
+- **Backend:** Java 21, WildFly 26.1.3, Jakarta EE 10, Hibernate 6.2, PostgreSQL 11, JWT auth
+- **Frontend:** Flutter 3.3.0+, Provider for state management, go_router for navigation
+- **API Docs:** Swagger/OpenAPI v3
+
+### Backend Layered Architecture
+```
+REST Resources → Services (@Stateless EJBs) → QueryService → JPA Entities
+```
+
+Key packages in `hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/`:
+- `core/model/` - JPA entities (User, Right, Customer, Picture, JwtRefreshToken)
+- `core/service/` - Business logic with AbstractService base class
+- `core/query/` - QueryService for database operations
+- `rest/` - JAX-RS resources and value objects
+
+### Frontend Structure
+```
+lib/
+├── main.dart # Entry point (MaterialApp.router)
+├── controller/ # Business logic controllers
+├── pages/ # Feature-based UI (login/, customer/)
+├── dto/ # Data Transfer Objects
+├── utils/ # DI container, theme, routing
+└── l10n/ # Localization (German supported)
+```
+
+### Authentication
+- JWT token-based authentication with refresh tokens
+- WildFly Elytron security realm
+- Bearer token auth for REST endpoints
+- User passwords stored with salt-based hashing
+
+### Database Entities
+- User ↔ Right (many-to-many via user_to_right)
+- Customer → Picture (one-to-many)
+- JwtRefreshToken (device/IP tracking)
+
+Named queries pattern: `@NamedQuery` on entities (e.g., `User.BY_USERNAME`)
+
+## Local Development
+
+Docker Compose provides PostgreSQL and WildFly:
+```bash
+cd hartmann-foto-documentation-docker
+docker-compose up
+```
+
+Port mappings: WildFly HTTP (8180), Management (9990), SMTP (8280)
+
+## CI/CD
+
+Jenkins pipeline with SonarQube integration. Build runs on macOS agent with JDK 21.
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/model/Picture.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/model/Picture.java
index 6750a73..29e0b20 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/model/Picture.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/model/Picture.java
@@ -39,6 +39,9 @@ public class Picture extends AbstractDateEntity {
@Basic(fetch = FetchType.LAZY)
private String comment;
+
+
+ private String category;
@Column(name = "image")
@Basic(fetch = FetchType.LAZY)
@@ -79,6 +82,16 @@ public class Picture extends AbstractDateEntity {
public void setComment(String comment) {
this.comment = comment;
}
+
+
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
public String getImage() {
return image;
@@ -121,12 +134,17 @@ public class Picture extends AbstractDateEntity {
instance.setPictureDate(pictureDate);
return this;
}
-
+
public Builder comment(String comment) {
instance.setComment(comment);
return this;
}
+ public Builder category(String category) {
+ instance.setCategory(category);
+ return this;
+ }
+
public Builder image(String image) {
instance.setImage(image);
return this;
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/CustomerPictureService.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/CustomerPictureService.java
index e1140bc..40b247f 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/CustomerPictureService.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/CustomerPictureService.java
@@ -3,14 +3,21 @@ package marketing.heyday.hartmann.fotodocumentation.core.service;
import java.util.List;
import java.util.Optional;
+import org.apache.commons.lang3.StringUtils;
+
import jakarta.annotation.security.PermitAll;
import jakarta.ejb.LocalBean;
import jakarta.ejb.Stateless;
+import jakarta.persistence.TypedQuery;
+import jakarta.persistence.criteria.CriteriaBuilder;
+import jakarta.persistence.criteria.CriteriaQuery;
+import jakarta.persistence.criteria.Root;
import marketing.heyday.hartmann.fotodocumentation.core.model.Customer;
import marketing.heyday.hartmann.fotodocumentation.core.model.Picture;
import marketing.heyday.hartmann.fotodocumentation.core.query.Param;
import marketing.heyday.hartmann.fotodocumentation.rest.vo.CustomerListValue;
import marketing.heyday.hartmann.fotodocumentation.rest.vo.CustomerPictureValue;
+import marketing.heyday.hartmann.fotodocumentation.rest.vo.CustomerValue;
/**
*
@@ -30,8 +37,12 @@ public class CustomerPictureService extends AbstractService {
Optional customerOpt = queryService.callNamedQuerySingleResult(Customer.FIND_BY_NUMBER, new Param(Customer.PARAM_NUMBER, customerPictureValue.customerNumber()));
Customer customer = customerOpt.orElseGet(() -> new Customer.Builder().customerNumber(customerPictureValue.customerNumber()).name(customerPictureValue.pharmacyName()).build());
customer = entityManager.merge(customer);
-
- Picture picture = new Picture.Builder().customer(customer).username(customerPictureValue.username()).comment(customerPictureValue.comment()).image(customerPictureValue.base64String()).pictureDate(customerPictureValue.date()).build();
+
+ Picture picture = new Picture.Builder().customer(customer).username(customerPictureValue.username())
+ .category(customerPictureValue.category())
+ .comment(customerPictureValue.comment())
+ .image(customerPictureValue.base64String())
+ .pictureDate(customerPictureValue.date()).build();
customer.getPictures().add(picture);
entityManager.persist(picture);
@@ -39,10 +50,42 @@ public class CustomerPictureService extends AbstractService {
return true;
}
- public List getAll(String query) {
+ // query = search for name, number and date
+ public List getAll(String queryStr, String startsWith) {
// FIXME: do query
- List customers = queryService.callNamedQueryList(Customer.FIND_ALL);
+
+ CriteriaBuilder builder = entityManager.getCriteriaBuilder();
+ CriteriaQuery criteriaQuery = builder.createQuery(Customer.class);
+ Root customerRoot = criteriaQuery.from(Customer.class);
+
+ criteriaQuery = criteriaQuery.select(customerRoot);
+
+ if (StringUtils.isNotBlank(startsWith)) {
+ String param = startsWith.toLowerCase() + "%";
+ criteriaQuery = criteriaQuery.where(builder.like(builder.lower(customerRoot.get("name")), param));
+ }
+
+ if (StringUtils.isNotBlank(queryStr)) {
+ String param = "%" + StringUtils.trimToEmpty(queryStr).toLowerCase() + "%";
+ var predicateName = builder.like(builder.lower(customerRoot.get("name")), param);
+ var predicateNr = builder.like(builder.lower(customerRoot.get("customerNumber")), param);
+
+ var predicate = builder.or(predicateName, predicateNr);
+ criteriaQuery = criteriaQuery.where(predicate);
+ }
+
+ TypedQuery typedQuery = entityManager.createQuery(criteriaQuery);
+ List customers = typedQuery.getResultList();
customers.forEach(c -> c.getPictures().size());
return customers.parallelStream().map(CustomerListValue::builder).toList();
}
+
+ public CustomerValue get(Long id) {
+ Customer customer = entityManager.find(Customer.class, id);
+ if (customer == null) {
+ return null;
+ }
+
+ return CustomerValue.builder(customer);
+ }
}
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/PictureService.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/PictureService.java
new file mode 100644
index 0000000..62213cd
--- /dev/null
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/PictureService.java
@@ -0,0 +1,31 @@
+package marketing.heyday.hartmann.fotodocumentation.core.service;
+
+import jakarta.annotation.security.PermitAll;
+import jakarta.ejb.LocalBean;
+import jakarta.ejb.Stateless;
+import marketing.heyday.hartmann.fotodocumentation.core.model.Picture;
+import marketing.heyday.hartmann.fotodocumentation.rest.vo.PictureValue;
+
+/**
+ *
+ * Copyright: Copyright (c) 2024
+ * Company: heyday Marketing GmbH
+ * @author Patrick Verboom
+ * @version 1.0
+ *
+ * created: 19 Jan 2026
+ */
+@Stateless
+@LocalBean
+@PermitAll
+public class PictureService extends AbstractService {
+
+ public PictureValue get(Long id) {
+ Picture picture = entityManager.find(Picture.class, id);
+ if (picture == null) {
+ return null;
+ }
+
+ return PictureValue.builder(picture);
+ }
+}
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerResource.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerResource.java
index e41fc9f..d88e8f5 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerResource.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerResource.java
@@ -13,14 +13,11 @@ import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import jakarta.ejb.EJB;
import jakarta.enterprise.context.RequestScoped;
-import jakarta.ws.rs.Consumes;
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.Path;
-import jakarta.ws.rs.QueryParam;
-import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.*;
import jakarta.ws.rs.core.Response;
import marketing.heyday.hartmann.fotodocumentation.core.service.CustomerPictureService;
import marketing.heyday.hartmann.fotodocumentation.rest.vo.CustomerListValue;
+import marketing.heyday.hartmann.fotodocumentation.rest.vo.CustomerValue;
/**
*
@@ -42,12 +39,24 @@ public class CustomerResource {
@GZIP
@GET
@Path("")
- @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(JSON_OUT)
@Operation(summary = "Get customer list")
@ApiResponse(responseCode = "200", description = "Successfully retrieved customer list", content = @Content(mediaType = JSON_OUT, array = @ArraySchema(schema = @Schema(implementation = CustomerListValue.class))))
- public Response doAddCustomerPicture(@QueryParam("query") String query) {
- LOG.debug("Query customers for query " + query);
- var retVal = customerPictureService.getAll(query);
+ public Response doGetCustomerList(@QueryParam("query") String query, @QueryParam("startsWith") String startsWith) {
+ LOG.debug("Query customers for query " + query + " startsWith: " + startsWith);
+ var retVal = customerPictureService.getAll(query, startsWith);
+ return Response.ok().entity(retVal).build();
+ }
+
+ @GZIP
+ @GET
+ @Path("{id}")
+ @Produces(JSON_OUT)
+ @Operation(summary = "Get customer value")
+ @ApiResponse(responseCode = "200", description = "Successfully retrieved customer value", content = @Content(mediaType = JSON_OUT, array = @ArraySchema(schema = @Schema(implementation = CustomerValue.class))))
+ public Response doGetDetailCustomer(@PathParam("id") Long id) {
+ LOG.debug("Get Customer details for id " + id);
+ var retVal = customerPictureService.get(id);
return Response.ok().entity(retVal).build();
}
}
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/PictureResource.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/PictureResource.java
new file mode 100644
index 0000000..f9d2cea
--- /dev/null
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/PictureResource.java
@@ -0,0 +1,52 @@
+package marketing.heyday.hartmann.fotodocumentation.rest;
+
+import static marketing.heyday.hartmann.fotodocumentation.rest.jackson.ApplicationConfigApi.JSON_OUT;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jboss.resteasy.annotations.GZIP;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.ArraySchema;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import jakarta.ejb.EJB;
+import jakarta.enterprise.context.RequestScoped;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.Response;
+import marketing.heyday.hartmann.fotodocumentation.core.service.PictureService;
+import marketing.heyday.hartmann.fotodocumentation.rest.vo.PictureValue;
+
+/**
+ *
+ * Copyright: Copyright (c) 2024
+ * Company: heyday Marketing GmbH
+ * @author Patrick Verboom
+ * @version 1.0
+ *
+ * created: 21 Jan 2026
+ */
+@RequestScoped
+@Path("picture")
+public class PictureResource {
+ private static final Log LOG = LogFactory.getLog(PictureResource.class);
+
+ @EJB
+ private PictureService pictureService;
+
+ @GZIP
+ @GET
+ @Path("{id}")
+ @Produces(JSON_OUT)
+ @Operation(summary = "Get picture value")
+ @ApiResponse(responseCode = "200", description = "Successfully retrieved picture value", content = @Content(mediaType = JSON_OUT, array = @ArraySchema(schema = @Schema(implementation = PictureValue.class))))
+ public Response doGetDetailCustomer(@PathParam("id") Long id) {
+ LOG.debug("Get Picture details for id " + id);
+ var retVal = pictureService.get(id);
+ return Response.ok().entity(retVal).build();
+ }
+}
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/jackson/ApplicationConfigApi.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/jackson/ApplicationConfigApi.java
index 174aaaf..50d38e2 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/jackson/ApplicationConfigApi.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/jackson/ApplicationConfigApi.java
@@ -14,10 +14,7 @@ import io.swagger.v3.oas.annotations.servers.Server;
import jakarta.ws.rs.ApplicationPath;
import jakarta.ws.rs.core.Application;
import jakarta.ws.rs.core.MediaType;
-import marketing.heyday.hartmann.fotodocumentation.rest.CustomerPictureResource;
-import marketing.heyday.hartmann.fotodocumentation.rest.CustomerResource;
-import marketing.heyday.hartmann.fotodocumentation.rest.LoginResource;
-import marketing.heyday.hartmann.fotodocumentation.rest.MonitoringResource;
+import marketing.heyday.hartmann.fotodocumentation.rest.*;
/**
*
@@ -48,6 +45,7 @@ public class ApplicationConfigApi extends Application {
retVal.add(MonitoringResource.class);
retVal.add(CustomerPictureResource.class);
retVal.add(CustomerResource.class);
+ retVal.add(PictureResource.class);
LOG.info("returning rest api classes " + retVal);
return retVal;
}
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/CustomerListValue.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/CustomerListValue.java
index 6ebabf4..5a40024 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/CustomerListValue.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/CustomerListValue.java
@@ -1,6 +1,10 @@
package marketing.heyday.hartmann.fotodocumentation.rest.vo;
+import java.util.Date;
+
+import io.swagger.v3.oas.annotations.media.Schema;
import marketing.heyday.hartmann.fotodocumentation.core.model.Customer;
+import marketing.heyday.hartmann.fotodocumentation.core.model.Picture;
/**
*
@@ -12,12 +16,14 @@ import marketing.heyday.hartmann.fotodocumentation.core.model.Customer;
* created: 19 Jan 2026
*/
-public record CustomerListValue(String name, String customerNumber, int amountOfPicture) {
+@Schema(name = "CustomerList")
+public record CustomerListValue(Long id, String name, String customerNumber, Date lastUpdateDate) {
public static CustomerListValue builder(Customer customer) {
if (customer == null) {
return null;
}
- return new CustomerListValue(customer.getName(), customer.getCustomerNumber(), customer.getPictures().size());
+ Date date = customer.getPictures().stream().map(Picture::getPictureDate).sorted((p1, p2) -> p2.compareTo(p1)).findFirst().orElse(null);
+ return new CustomerListValue(customer.getCustomerId(), customer.getName(), customer.getCustomerNumber(), date);
}
}
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/CustomerPictureValue.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/CustomerPictureValue.java
index 0aa212e..86da208 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/CustomerPictureValue.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/CustomerPictureValue.java
@@ -2,6 +2,8 @@ package marketing.heyday.hartmann.fotodocumentation.rest.vo;
import java.util.Date;
+import io.swagger.v3.oas.annotations.media.Schema;
+
/**
*
* Copyright: Copyright (c) 2024
@@ -11,7 +13,7 @@ import java.util.Date;
*
* created: 19 Jan 2026
*/
-
-public record CustomerPictureValue(String username, String pharmacyName, String customerNumber, Date date, String comment, String base64String) {
+@Schema(name = "CustomerPictureUpload")
+public record CustomerPictureValue(String username, String pharmacyName, String customerNumber, Date date, String comment, String category, String base64String) {
}
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/CustomerValue.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/CustomerValue.java
new file mode 100644
index 0000000..e70ba7b
--- /dev/null
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/CustomerValue.java
@@ -0,0 +1,27 @@
+package marketing.heyday.hartmann.fotodocumentation.rest.vo;
+
+import java.util.List;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import marketing.heyday.hartmann.fotodocumentation.core.model.Customer;
+
+/**
+ *
+ * Copyright: Copyright (c) 2024
+ * Company: heyday Marketing GmbH
+ * @author Patrick Verboom
+ * @version 1.0
+ *
+ * created: 22 Jan 2026
+ */
+@Schema(name = "Customer")
+public record CustomerValue(Long id, String name, String customerNumber, List pictures) {
+
+ public static CustomerValue builder(Customer customer) {
+ if (customer == null) {
+ return null;
+ }
+ List pictures = customer.getPictures().parallelStream().map(PictureValue::builder).filter(p -> p != null).toList();
+ return new CustomerValue(customer.getCustomerId(), customer.getName(), customer.getCustomerNumber(), pictures);
+ }
+}
\ No newline at end of file
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/PictureValue.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/PictureValue.java
new file mode 100644
index 0000000..31cdeea
--- /dev/null
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/vo/PictureValue.java
@@ -0,0 +1,27 @@
+package marketing.heyday.hartmann.fotodocumentation.rest.vo;
+
+import java.util.Date;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import marketing.heyday.hartmann.fotodocumentation.core.model.Picture;
+
+/**
+ *
+ * Copyright: Copyright (c) 2024
+ * Company: heyday Marketing GmbH
+ * @author Patrick Verboom
+ * @version 1.0
+ *
+ * created: 22 Jan 2026
+ */
+
+@Schema(name = "Picture")
+public record PictureValue(Long id, String comment, String category, String image, Date pictureDate, String username) {
+
+ public static PictureValue builder(Picture picture) {
+ if (picture == null) {
+ return null;
+ }
+ return new PictureValue(picture.getPictureId(), picture.getComment(), picture.getCategory(), picture.getImage(), picture.getPictureDate(), picture.getUsername());
+ }
+}
\ No newline at end of file
diff --git a/hartmann-foto-documentation-app/src/main/resources/marketing/heyday/hartmann/fotodocumentation/core/db/migration/V2__init2.sql b/hartmann-foto-documentation-app/src/main/resources/marketing/heyday/hartmann/fotodocumentation/core/db/migration/V2__init2.sql
new file mode 100644
index 0000000..e81bded
--- /dev/null
+++ b/hartmann-foto-documentation-app/src/main/resources/marketing/heyday/hartmann/fotodocumentation/core/db/migration/V2__init2.sql
@@ -0,0 +1,4 @@
+
+-- picture
+
+alter table picture add column category varchar(250);
diff --git a/hartmann-foto-documentation-docker/src/main/docker/hartmann-foto-documentation-web-1.0.0-SNAPSHOT.war b/hartmann-foto-documentation-docker/src/main/docker/hartmann-foto-documentation-web-1.0.0-SNAPSHOT.war
index 9f17fc9d705d7566f312507301b19e2847ccae30..133c95d81cb2601332161b886ef7dafa3e489c89 100644
GIT binary patch
delta 57584
zcmW*Rb8zMS8o=?|wryKm+t}LO+O|$@+qSm$TWoFHcDLrXy{C63pYM~CzcQK0Z;~@f
zTiZaGdD=igRF(sWzyJY(fdTo@=4wDh0tE-oWFk<-|4#={<^Rt=pydCbr=axTvk40<
zCLlljA`KKHp8d)Z6d0%PIDg0GJFeex`;Pl}JV1NduRK9<>f=rO;X#2x_zvQCkiLWb
z9hC2&eh2M4=-L;M|*?~s0n>^tP&q4*Bv
zcc{KY{T-U`(0+&RJM`aS_zvTDn7+gO9hUE~euwQl?BC(|4(E5cKzmL5xk2Bl+ZM)1
zOP|71t+s%+fp&m)+fuFePN>4~z4n0)fDVC;=hydoy6}XeJA-lDc?y2?QJ(o1EqCq>rnlJ4i^5k
z;|Amo+N(D*-N(agS$^^;+$_B~-$_2^;$_FX{Dg-J5Dh4V6Dg`P7DhH|n
zssyS6ss^e7ss*Y8`VCYM)Bw~7)CANF)B@BB)CSZJ)B)59)CJTH^dC?UP%ltl+t*J2
zAD4W$J>cz{PPXH=m2bQc+zsDV{{u7tG}yMQK1AA@&$jb@oKwT3jZ?#PSv!B_2>81#
zAz{ztEPSJKH(tQL7n$BT1V>PC&~TKhjW(33&CuR9
z&ptAXm2gmm;Wki&k(I{qPzf_2b07;KOCT#CYakmSTOd0idmslOM<6F4XCRlhPzhHE
zym%a1HBeyGzoYRT&F^S^NBcWEpuIS>x}ae`(c@mA@j%}J`wsYbAie|n9jNa>e+T9}
zu-}0L?H%`m2hEZ~y4B{=dtfbB9iIaMaevF#&h-M71~Az)GHtfnZG3N626h|3P3L=e
z>H70IFVp9f*X8dPs>O7Np_)Xuq586F>Z|Ecvi4(I5C;nkaK(lI>HCi=8>vs|gXBxg
zOhO&Pit=di6!Vis3^X7h;ALl0`EyNPLs{{syqb2XqQ)erflfz0=&wU6lSw}eeKIxx
z)2UW0G)Y>}OG-MVw{=>$t=!oM+%jgA&Er0NuZ3Lt_@+YO%MUH^_plOlRPA#E@>iVw
zI2ol!cdI$5z(4GF)L?RXy8DSFbXNMTngtE-J-cOW$+hy*9>=9mu~%|oN1B+v`&imF
zQi+j;EHrpXsR+}|lCdDk`_j=E7Wv5l-jnJI6MV6%-SMUD>cU-}k8sN0ztdI{lgoJW
zedi_V_yaOxX(;NfnIyvsBQzZqOG}O>N;v3RhhtY#o`aQsDhw8kg<X6xvuzk>dOf+>>e_)GY%f0u4Er0$6{raun
z47e`(P5Ex>8%(0r{oUkz3gQf
zc@xU~V%GfJ=gI2jzyAFP>4SM2!2XGy7;}{?{{?$(_?Pbq06o1lG(Y?bz*}729$Y+T
zwzPQl5LSr!+-H0JR1nvdb14Uuo*6dqei7PQs8Vyw9eg=;66h=B@_&In^k)53ESqKm
zfIb^io;x_&KYa!F|HCgzEo^AH7vg#A+W%)G`9UkMSSDG<?39k&v(w1bYfvbZRX@96(dtvS{J1c7{4tE(jY)PX6ng8I{*_(oH;Y
z#zXouJ=z+?Xntz8wWPyS0KMhi0gguMFlAOqvP{M!xjpzcUqF0UH56$Xmz}!MoOi$A
zGJ|-EgX)Pjpa_hm-=3)j@ROvCv50W{ci$+P4I}RC3;qS~&N|@288d;M8Wx5cq1HP@
z2&z#fyCpt=aF&7a7Q>C%Lkw$M#vQrU#wJhbS1$EL+EB{p4c^Zsf!4grT}()klXh_n
z)zq6391jC2@E$;w9HCX}+p8(H$SpX5-zU9x_#y%f!++vGHHgim0SY^PLc%k0L
znSt(|Wq)&+MmAZH1K{V_>&hr7O*?~9nxWLi{RR1^Bw%_X94+@E1}_)zSr-mCxiw53
zh1vb8MB`oE_{=2H)meYSx25rS_9wMWrybLjz_7G)O|%u$lW27_!rxHVfo#1PGlLx~
z3oZZr@k(YBIUMy|g6(F7Cob^EpZWv*j~Y0A>fZLeTE(bGDj?N&rE|-()7x=0WrU&0
zGk)MiPL2&bd}3x0Q6k1PA;FwxHb?2j_cQ(p=|)01T=VB+y&k&!S|_z#Pz(Lcjsww7
z0m)z>o;m|+pR#PCE~dVRHwhUvh0Y;zCQM$R&W507kERc;a*MImDL7jH*iIA{!GY8-
z|D}3_1XzZNHULx1+D};1myam2@IVdAJC8ZeKZpa9;&o*2ICuS)uPFB@WQqrW1Zd>@
zK;|0Jgr2ihAclnNB-IH9sdf;APrZfieYg&Ou$Bx%PEp(rxR~JhA0Ty0gs?Z`=GH;L
zN4#O0#qRyLm9KzUa&~`TT?_dWD$pFlJ`%u-uAok+B7~HPv8e3+9&-?o
z#~0^=V-A_l2Ejf>AOmm{DD-;hgFshNmyvJi%qw^RO{9Uc6%hHy9}PiIt(H93QX77S
zDLm`4p(R6;NVoX<&l1UB^}n30{+b+aBfp}$(WPcW;|Bd>$#(cO^|X@l5M4M5$};t1
zZ(p25?_I#OYsGITZRlz}?bYfE>CD0?)lSFTfCdb{2x2G(hK}}p?i*~pEB^X2%0=No
zO6~eGO*1bF^l^wb1PJ65`gGh}0T8hFDRf`re#savt5PnjdZbE+nEpRH?ef+AZ>lNM
zHp>I2D;TK9Or0a~xx)_|Zp`%z%0<5WbKX|XUJ!uH#k}M+HVfibvnbD$y&)NB2lm-h
z+}`K#4n-G}v4J>R+srL@3aJKEM!e{$DzAJ!IoMJ;nW|cW@FaxT!wK)Df9{z*rsA40
zez-{oo*kuzLd;?CBaR9?O`h}oyZ0}4Y;Mn!sYj6<8NWM;DEgdm`w}DE{cSSUl`ZsY
zsQv+HP9Q`nDB(C6CvDSj1Hg;|r}eahYO5v-Kiu?l&I=3oZ1GGW*>Dr3l~
zE>^|anh4QzWTsO(Q2)X=hm#A7g*_%w%LW7RV{3>{)oSE3he3-N0$HsC(mCtHUq^+|BdE|r!)v_MMtCvB
zD7X2luX~`FxNymEekFE?Od(D}d0>X7?DVQ^i~YM1C{&V~U$H}plT0elX6{BwBvGu|GX5UuNYT&vABB{L{rd4Cy0xPHo2iU}cRkO$k$NfZ<#he;Q*7($opqj4WN>>G~9hVeh&i5cF
z*uW{>a|b2;b(W5C%YF=1dZH*&4iqg0{i@D!VrqGL*X388TA3UUQ*5rx?OQU%dUCFp
zleoCYhRjc6$T@vc)08|<)u*74Xg+wJb)Sw<%&&sXLsP{{6oGL9=$7J5W%~j$O;e6;
zH(M&}e)HaAz20%DOABdpthbbBVTBluX$78#On+o%G(}W1&SLJ5P!&G;^9D6;5=PrF
zb=P(|X>!90{_`%pQgA_8cX#AOzFf7$H^4$~6iN~(-{-Yg#O@r>)lHhOaOV#ebQzFf
z?mpd%D^A^_5u_z&zjKErgslPGagV&B+Xa@NE!S;xht^$Zi8nZfzV5Aghcbb}fu7?^
zLje#S1kpw09)CRQ&5H>KE@*Y&Tgr`6G7|Go#@<5}-?m>2Z6OZ-Ta{vl8VMv-V%!yd
z!zJXkO<rTs!R<6Fzu9Rpv&
zh1ObQ-|Cqq#b?}o$ZM7fnDW{>b-!M>HhDLjO|@=j4}|?fIa%9$1|Q3X$A?y6E5ACW
zc(h435tH~U;xFZS672_gdm#E!lDUT|wnB#j2dSX^q?c*>2Vk~BQhY)xQ)EgjnTNI53kC37i2sGxUxS?9!!uyn2^
zON%D)?bA&NO>;~|WwOn1*E&={Oronxj=9$_CQ@m(GcmJ>(JMS}PKmMAf@eFpuI
zY4{O`E%In=(_ySSYJ!MIBJ_+4xU%|Ecu`~t;|q41G0q)>tZa9KjR|)@y-<}2fcKD8z)9?;wV_BdDwQ%>JtnAw
z^6(WYtgBQ6*%$iZp8JAD*!yHqiv6oUOceGE77*JAf1L^9Vj@4zzt|h&z&}WqLYH>8aFs|jV_%9JBAamC^W5{sC=X+tcLI)00ybE4(3Uk~
z6%Fv~wMA>FYN)I+RcJLb5=x}6pZL9E+w9MB*pjo2tk&T%4E*cdFiP|3FzL?cpgOF$
zHAOK>=er1xW!3#DFSI8ea?+Rv9WvYz3zCcnaP|Lb~y}u(PH7%60$zt7KTRsjqfft8k_E
z^&(|qYjS$2R||Vq*ckF=7Vk>TXC4y^0ty-2FN(%6x~w@uDicOR${~}4j4CrDFC;nn
zk7d&SYoK(y)_r1Fr%UI{E2<6>fT?fn{$JPH)aUt%j>p8jTUzZ^+w*jY4AyA)^2F(|
z>+{&i*oe!FjHMRQ%8&kdHuwmz1mhZ~beY1ZZRCSrQv2dmWit@F*NJ0B)}e;r2Y4&4
zp!X+J-2o&dBc7W+ob0#>-_w*$-f^9EN#isi>T6$`GnT{5l%XbCWv;=B+cNKU1A
zIgy)Md!UM}TtCt9MH>eB9h`9-c?7%N%%sbN7+n`kYFQwq3*j`}(&Z`HbEpVp}S6
zt;H8%Cx=l@WkuGN!Tmf)0i=jJXKF`su|{Vs5{;Xdsd5mMEN$zlyTonrV>Pl&B(15n
zC%6`JWxnM+)p(lW#(P{g2`e3ru;q8@hQS4est%Wd{RWnF0-+S~&gIUkLjcT=*n~Ef9z*V8m
zNBzh>nDwF^?Pigv0}R((2`gJ1xCNO(4AQ}w3WW{SHQPEl$j8~19k*y%FmX2fAN7w!
zki0kV1(OHbi|K@iy&I%kSPyOB*O#|CVTBjUOj`CmY?%4IB}6nfN%i)%W~#ZHw3`2w
zV#qYBf?3i%IFY!Zah%#+}vN6NY^pN3>q)2fu538=7
zyw36d$kNXpseJEm98`Rm^fVmryIrO8VwrI4s5(}BuJhgXK#-V<-pcXWZSgzW5eOQt
zmSG+D@V1NBCqVC9!nUaMpK9$x@GBCTh@J8Zqph4yDexwhBr1nY=pi3f$daI9Em2
zwknLLm?tU?vP>WdA+m7L2XeSszaOIo{GZpz(R6m>gJ&a8O6OD&3D#ze#-E(xqj`AUUun2>+}eZc28i9+5Ckn7
z>H~IL(E!jOd;Fo$c?G#&8x=osiJ8mU*9&ovR;F!Keedly#aFMtv|si7Qu|gZe>DDr
zBY!b!yo4Yp?j+o^KbymQ?}qn4<%p--|`BJN;*>i>8rJVyG^qn*o)V`}#vSpN06*BaTBLt>lyd
zds7@eO=Kl`e?@N@+#w-1^v4b>mwbbQX`?fM{&VPuF;Nu)*ztdNoU?@oc6ZiaLBaFb
z@>93l?*|})#lS97VC)!Bx@x@J=nMQ;78+uWNpYU%C;Y?ni&DG`;#gf^CYt&OV=zCQ@uj@JcJWNF<8RZQAKXX`n-em(426_#^(Zp3>sj97Xa+LX~y!jl4Tfh+&%iH
zT4uqxBnp+oMPenJm(2o#g!ARLK`dhnOu8>wdqV!zs&x9>Rx(EF>@Fsmr5mbk94i!E
zzKjNYbGG~AjmG17yH#nB9ymoFi@`*|u}^vaDnto?mEkAWboMTe5QO|bmd1pH*?(u}
zy7O+<@T;t(W`wRMszPqk^i2+vqi-Rj%oF_jV&v}1)h%R9N8r}rK
zI;}nICKDbMW#~T2;^v=IDWyoKmaSkWh-A=x7FCDg5hSkWxUN_>xir9YAkO*(h^X3&
z6{P09XNfB=gr;IDrxf;o;iousiZ+IJh1i&!)}eMbwR^}A8G0(RTN_4GHc3o>?(T`i
zx}BOf);B54Mn06zcKdB`KGkg2aQ<%k^9o)C7~X6$^sDs@Op3~O4(cR|)ORi}2x5z~
zte|{TggX9NbSl=1d)Q~E%jQQ1Xt8F!vH#Qjav=I_y9C_nBXixL^L?eGd~CE|&_
z5%AV2s7l)yg=O5$^NhH@tFzx>E%{bd)l=Y#^UBYeb#EZz$iG*nUE)szx
zD+GLyP?yA5)DYtQ`7WURz&+SQn=;s<{>@mLv=gzFe6yy#jU5+U3`$1ixhl6XpHpiD-xrQyQ^3jt+Y77s!HAQny7;QA
zyqY+I?Z`8-C_qxanZ8m=LVG@{#FD_ZwUlAU#_Go=FFU}zhuKq4u}MV1m7&|#%6~Vq
zJB*alA=SjSRCib4w>-W~jHkP!d|T2=VZur=Y&bvdaL{KbO&IHMD|Fboxv&buFbx85
ziLEc*9MEnd;#I@q5Y6q(Ud|h~{;qRIO5QBNI_#+ut*ONVE~o=}Q?o*jJ;3dsWUl06
znxy-%$P56Lowa#=v!`+PKjju#4?!ojYJB`S-LO9brr|W+hsZA$7dI?oivlo+Abo+4
znzg|%y*qrPtJ%7rwGNJ-J_pJ*pl5;qg}k&Rt#8c=Q=LXYkXH+%IJNM_i8CovFIjCU)`*@f#Ma_+`dDzg$pRVQI_0Q8fWru)K0hH^{!$JWkfQ?TAj#b!*w6
z^6qbr2H38>e7uvsew9ru{G|-iBAAu<2`k#dfTc0pbWShJMl
z%es#tJTLXRrh`yMhcb?hBq5wd(S<*s9ZB#37)tTj1I$TYp;+sMWr?+P{@me9d&=3S
zD`*g96_=u^2M(E56>oLOGW1G*D(8yX0xYP+avm-L!d7KnyQ>=cT6p&^OYpH_2G?;MsN1$n2?ZebL=D
zM=v{PTP~bFlX2t`Fv8mLlO)>K_vP6a@6+-!S+w%o*6kO~DnABuQIv_bto=%K*J=vx
zjQc&o%yOfj!o#lmGoR!vuDitlfewKJFd0|`uEd7O;%_Ycw|`>LTjq}d}vRy#litEl4m7;}r{pvB1ABT}609Qgs=
zwu&P5X}#yl>qerwMB58X7raK({AEmO+zC?vt-BE!a+qa3v}KXxyvs?BJk@v-Fj8km
z^D7YUwFYdQ@JqGZ`u9vkE!r|iu=hDAA31pPSZo8U$1S(L)cGRjg3WW@60O6(A|^6b
zg{T3p2?@yfRCaDfZll
z{rUq!lOz*akY!G#=f@f=dyBp$Z|t>e8-#o1f8C`Z`^Hgz7y}d>YgPAIJtXXF>UA!w*BY*BcV@kk_rSe!lTj8%mPBv=RU@B@NeMt?F@Tvs+lHMV8E-wNt*cPvKeyGCMxBlEW<-xRi&f4**5rh*
zi0P!6!F-LxRYip&cwsn1qJY8e&?Q-ym6_T?r0`
z<8Ans@+*7c3PPr}%VJfvE=uvGOD-(SRzfcroTLOE9^0qak6T5{z9%c
z*d5K~f@}54heH6wpQ>5xPB6Zn)BU&znEeOw;IIYBq&JcAz}BmITCS6RnTLDjsZ-I?
z0dpMOX;}!nfG9nbFF>zCityKp{-`=Ksz*$?+}6~FM3t-wC2+kBd3o+T1VS1@3o^0fi2
z(>SL1)QSjzox4ULS??zNjMshMx%BKvU75~?d*|kA{x72V{>%-?o4>BcxM&I5h%vbX=7;S21-)-36Yvt_aj3HxS1>-2Y^a?kBWtEBgX?Z+NNP-aM
z>^tb<2yq?1*%wMSOdLh;e9Qz!P2D`o_Mbtv3sQ+KTKs%b;;Xq~WUw*P1BsSAehP49
ze%}_E6H4^HPJM~&C8O#Ntu=H$%>vWu1HkH%n|IZ|ThYEVA5gnDD8bjuMJohdat825
z8qvYOdl*!uhzB_THdw&($;)b+VYI6?@~EqEE1m7k-?FqV_y7!QtREqUC0g|p?~26r
z{bUMlD#%LfxEY8WV@;23_-fD!cxyNz*od^2PrL4BUcgYN`I9VpGh>CFCzD>^|_rmiOa-Z4$9Tf>}K%zBpxC(IYKn*)kRcM
zA_glXPP#e-{V)
z;>3>5fZz~#(kf+bl>dN_1B=&Cvbh4|vd*Yg)f6pPbS+zr#^g(QsbxCwwWgvT(K2pT
zq~g_(RfhfDm=;Go$v)!gb3Mgk8!sFlitg1u7^L+2Cz2=;D~S+~Dx>vRlz=UTDYq(b
z0hV6ZuS{4D3{S)r<~p>PO%0czvXY8zWQ>er?w*+H{3-SU2>Fdb7c<#>C
z+QM_`d(U3&Hw;7AH(%irI6xe~iFQ?8ltl!mRZoh+`C9a|`A|p3?s><#+Z})82#R0_
zInF_KxfU_>+L=)(bSSp;i!-(gYU!Fvq
z-jObm0N7i7bx6UezxJhq6atTSCRT_Kn~VdAw=D9c4ip@U{>EO9KA?xoReG#$G}RAT
zUxdayW9FG-BHFJD!xo($t~#0_@dfNQc`uGnuWt8PhG2JkZ;gZPsZ}98)m=huOZV$^
zDcR(`iuP?D{m}JdRzmMqK^5t@WTmr2b99`jk9@Hi*1AJ>19L=7?tUOT{hT~Cp%{H3
zEe2%<>VEU9n#6id8DNUt@fqp|t+N;QrGHkOF@h8WJJO{y_|U^=lBW)`9hk~!jDO1K
z@n6rNPfbRZN~sj3$qHd5B1*K|-zhnybuVNXcdofRdo$DEZVY#=&YyR|g8w@9=&Vkq
z63eDV6qs~n6fzcw7u}p0ys|RcrH-wvO$2qL3Le-;&E*gX+5!8?n?ZBNC%GT(oif(7
zq^Yzx&c=|I;gV2@lbg9$E{=A=syZ7wF(qwu6z`cs+N^^sE%YpU*_-&e64`fVpz7|4
zQW|;l)p=J1S?|TP1A3)rLvaW;7L`oOkLXV8?twJOPMkG9j*b1ut%|&X9f*ocQA{`7
z^9MrAiIR*WzX4SKpeWUX4df2XaU%t*%-L{GXjO+5doVt
zE>uJ+C{itBgVD7V+69|Ui#}8Id$sF%<`!N!r96z{G@SmHRxZ5@&mTD&hdGujYqMKQ
zq%5+BHO-A&X!77x|NVDYqF3ARrEp(8`*C;EXu3qdvIDrvJN1x;mep)HTSxh+MF59O8y|JimE{bGd7
zU*gXLrw`O5x7W|;HGT4Ci$IodpkTH@cBO!tgwd76I
zfC{5gd>?_>mdvSuCk_I&!5@{YD5AAP2-+PsS<{xRp@0k%U`vd0OCocV_wEA1X1*Xh
z8UhHLC4!ElA;Ttc$|5m75+UZr>rd$8NVCWPOhT(a$ws_l3ngiddj++g4r|lo?3kHY
zAmqZ5tT=|!UxSvsGDFJaMbh%}XdM`xConhgeu~Yma18+9jb-P!w4(R&p&V^V)^q&1
zf53Gx{9?L8pfOLR@bL%n@xK8J$j>0wYz3f$p12*hIuNwU)urc~zUi(-eFb{oAC?kl
zj8PY*d6=sqTb`VZ?es+LS|%^(LPLTC1b)#oCVoD*h|i9$4UNsNN-Rzf%@5rZJE&q(
z8>d2`dWNT<4)xiCx37h>iwc6WCcGC91+fj_pPp%jLU*;Q9&)KM^mYF&*VWEyib
z+2eO8mf44^iIzq4cun{R_M0cHU6b~``NhxbY-`kLy`zZ_h2%a7X*qYo99e0X&YAej
z5@lCk+Gg9iq*fzqliQS}ouDFFjDXlSPZl;X#6!75(N;n>S?(zrU5p>X6sEc$aHyJ{
z{ArRUjJJ?>^%Zm!Nxv&Q$t1
zMt^Adlq;5aE2p5R&w6Jt#qFpqnnm1t@Of8KpfK}y@+pK$JJZzNA{^-7^#y?3=7Xyj
zT+P06U(e@<;g4}Wy_L*>JfV(M^q>iL
zCr@wU3!yhbZ8Jr
z2D-xWrqE0rF5@q(q^oT&I3Gaeum^75$f2MoZtzzTj#p2!O=8HNj=Ai*_o(0Ogx{0w
z(bpT#Pw0e)er#}PG*{GY_=e!g0AqI>`c@jOF|EiN*-|5-3ZsP7R$jR!U5=|ui`e;?
z8dA=+_1K8TAI)U*rUi(2y2n-zv)1C36cf*BSz--X=w!Qcq10rouA_j?D&*GE=5=b5
zyxnGa5scT@5dnNxJXMgdNVNeaf-KwWBg~*!iW0hYWAv2Jhh-Xv>{Ui9%PAC@h~$Wb
zaeUI^)i0Bxm`GZiN?xbFWQutdYBP-w@$x{t#o2m>fDHn6=MZA63fpIM6>^A86=~@R
zeYl@fi?rZg+On<^lK%nz1gz76>c$Dvt^zte1IVAkrQA7GD%hebbXrsqgvUS`vIV^5
zx?*i>&OG+AO+R&6haQ-wsz26}SvyRj1~^E!3!uhD-ez9P9{?pDs<>J%5dNNuqNLV
zo6Bq0hgH(i_t?1&VTnm#%GMCDOkZDGO`KBSr-n$NWR2qUEv>{cX*#pgW1VA!}P
zniOL;){pz-iO~U+)$TMhS0-$KZ_j1xzP=x$Vj`(3*qI`eQ4*y1kl}}pab8rgHVpP2
z7N#BQjAWy$@9pP9CzNF?yLmLMPWTodo>PcZW@UwyWPhN;jMrq-?<>)6babri+f-2+
zXVT0S=ntWhv$w@3YW>MfF6X;s<1uEoFKB`^~~w*%SYd^XJoOiz2&SPyTT++FRRwZXHLqppc`e7fp#
zi;Lc{U-KiOyFxSq>%LRj%anq&%e21X%P_82yD^f9B~q>3Lc#ck;fh1~O$TPHuT>rZ
zc|CdS=~Jt`g7Jy^bi44W#bjia`k>$Bu3t@lfcF}}=^v8;tsGYBmFaA21BLSKpM$)#
z{~bK<#zTa7xUdgc+qmH+iL7ObdrMAZEi7Ol>XmgM^=s79g;ub-ru}4M_e{3`Fk!hf
z9LeRkZQqV96W_12OKVmPItvmU4DdY>I9&uQ&<>anmu4l-NzW>1jw=
z`YgPVl1W(QEH|u$!A#JBfpyG#({;ON961iCOH`TW_&)zqRdDJh>A=s{-}uMtA`gv7
zaQTP&sIBY|y8cb+ET{%;u0bAtyz=}5$2G0cPFi@w_ZXzgu
z(Rf}|^b|PI{!dGivj-3occwMaev_e^5}wZ;(cD>G^#?5^lDOwR%|1>!gtKbFJn
zt2Vq-eS{Z+c;*|fuR-IBvtKcrs+NC)0ZPn5KH%42QP8Qun_{ad&o|poZ0~vyz0C4V
z4o)U0LKE-e?w7IryBFjE=1Z=OV4sye7@$ZiAo)#Ow1Y#MH~eg)@{jJpHAe@K@f$B}
zR$Y~6CT+;M)ZkvsS1ztut`lz)OA)e&bJPrN(7Q^QaP#DL62K2Fm4n{tF_S+20;*9W
z6RJyN#{d;7Nwu7fB!5Od(wY}C%73TSI)rA`UV#mAdA5(gAu~q&Q27al2z|oIb&205
z(6z4pzMpSNLk!}N5!ai0ce1kdx2%qt`Qsy_gSvNHP-qNrv+k+-z)Sb3fg#W8nv?P@
z?&vCU{wD^jrLQ7`R*^&QqN&?|5uiUfi+|`<8bOtrJR0V=WV#w3VX1juZE;VBUm$|-
zL1G_jG#W%IeZXwzN*-Vo1CFR}VQvgC9}dC1(v&VTUV???s5zpt
zZ%tkPFaN>}Pq`?|mq8jIY`T%w;6hM;D!oMciK&HI?Y>f{T$=u7pSA&S1i)!r=0qzg
z>uvQYB2AO4OBUmEAoEf?!1_zFhybr7bHs=~*=%&B^p1B$^_CDivey53G-2OhRBZ%<
z?!=b>@ebl73$NR7Q!O{ObY#KPT;@<>Q0Ib<(=k#>B#VZ-y`X5fN4;QJ)kuaN+hUeu
zCb>d3?Ge7D^RXG0FJ`!48-Qv5ig@D{eXj?YNtY*XT)I2^Ji;9k$k;f<%zXAXbkOnG
zWv|yZsJfGp1EfEz+Wr)b1v3Qo3~NMNQ>*vKg-0fxyiv9BiOQ0yzvx>(0DB0#87m-u
z%hN9Gf!7IL5_sB>D{oI9An!`5WjY9BdY%=PUv3dRymCvJj
z+O1P{rbr(on+HwDBzSkR_n#7^(oApI80*6-@^1X*eO?{w?P3Tf6Z_x0JpZlz3n%|6
z?fox*oikARzXKk8m;kEiJ29wXBjB3YxB?}oUS`2sNwEM2`yV2M)95vGzrBgwkTJa^
z(qFf6R2^@&F(F;1c?H8R$TUq@QEbYHBzBNeNF<#?+`z^GoY=JAY$hCQ`U-Z%;cOgQ
z@G|h*wD^=T#lP_SU`BDs#F1PGF8w&ntGqM0H8LxWpx4h7+5yids1s_cF;jgw&Lwc#
zCHg`Ak*~!SEG+u8ZFP!d_&tb7Bn*OZ%)fqVF>8b$78)EkY{eUFi~oDvdN(z5qmT4$
zw44qETBf`8{y|vWv66!Rq_gOsi$!Z|8c$Mp#aOUxHC6pnxIQPK+gU9?B16d;IC(J|P7_$+r6CvfXDu-NbPpT$je0LEr}ypJ3aybm2@>%R4O{gYOZ>Uu3Zy
zK@x>8%LM2Vr^R%=^;QMxXtXpzWWu*U^w~q6!f_e-;keN>MAD!v6ShE_8Xfxz(T$6}
zhK}pKcW-+WcE#=8Os3yOA5|g1oc7@ZEx^0%3@wrh&V2>Zg68YVmk5cL9cx{!u^9bN
z2G!IbfvMR%vUnFu2gz;H9xVnBQPU~G_qHX6WCfsKt2rDQIS6+S`822YN=q&fXRYeC
zedm)Nb!%%g4O>A`Q!mAoa1n?1s9-Vr*m
zV9h;tRMR;vTWmTvkN$jem=_ea7LwO`=k+m~EqYKbW&bo7P&lA|%XeLRigmE63$Lx0y)k(=QJh2%dI_w8i_H#mHM
zc-Yqi&~y5?T_)X)$oOy%UmW98ua^U3CU&7_B8@N)Ku%G`k2P351!~0oa?+?LLmL2|
z5K*V}Hs|*4b$9fi7Ar8F6(*<>USl4wVY@CZ1wnFZw0@EyyTo4qHl(=?b>NL^NwxKRUebavCp&tj73pE>@{l
zuCF$jMRqc4&rAW0)Ef%^a;@U3s2~8CSU`ZA_dm6GXXv^~DL%&2q2BUDwEy%pj*|Q>
zhPVd1wcaQI@a4^Bz+@UU|K+`R;0+l=6s&aW4~4LW+MBoc#`=p%vrCxQ@2uOJ2lYb>
zneq4U3GDVNA|s`!+)q%#cXfZG0+8Px10fz!sLQS3o~
zI{nLkIt-#xE3Ul8ZMYd-Ycnb1d;i$q(gFrWq$QAVuyDF?5`}*Pb7(^
z?kkydWi3tsK_g>Z1T4&cuUO%%{l$~2PsF%G^jtJ^C{x-#UhW&n%^r`hU3kKC_NQ
z_@d})-6@hV1zTr1-Zb5*?OQ@3D^YF8E2K87ax)FiUH2iMygSl7B-Vj6t>q*$^#pq1
zj;g?FyM-3>O(-l>1$*7lV%7X7a1M-f3?aCgP^T6mpYXC9@R+VN!zK+Y7;Tx@Gxn(%
zys$UH;g-M)ojb%<7WEZIGk=LMl_G|Y+G{u1n?rnl(7o|AO;K
zqN+eCtmup)Eahu@z=5`FRC4$J>xC4*MONu_b_@^^lpC|T+~*7R9|jaKS`Hg)^jz47%+yD3e)7cpd$9iHGBc5Rqk
zCYpN~W==6|Vhp}x(7w`>Yv++z^?U`JWaxiX94FmBc-YW%)L(|E;DH3wG@|5#{k*EQ
zPPCsJ*iZE(tot~%o-DqVi|$}fD4DEY
zM-3VFj~P)K%_x+Q&R=V1!+s$@Jm8HxS9}o_JT5UAM@HVa3E+epMw8saE#B!N-KYZD
zW0(zM%U<3n;Mxay)FOKnI{F(&bQQXGu@8D@^$9!gV2d~O|&6BSor~A4s8fFi|v={rV%3>E45*n>JB`eR^}t*pIH`oAld$X
zCfN`u6;TZk0KgRZ|M*8J|9`>xFE`1ewmh;R3i$2!Y-;fYRd}E~q9`q`OZU6NkOc5t
zksxv%WZZ&VU4M`_W2Z7KzA&=yEclUZ^l_%
zo_-H-Tc|V{SUh8VbNm3oz$sYIjBS{=`(;)P?3@ZrP+Bqh5|3~RgEBkApn{{PgF1zz
zsBQh)ewJGn`1nz-dF}hS{p(aLHP2AWBX8#!c)#0cs(-`fMm~fL#^@m<%tS97G&f_v
z!qq^Q-l;?>DNrckSxBU}Y@b8%a+t=P_@=2LOeZ94h?Yyc3&t>Xvz@b=ihze{NlnxU
zt<0%WRAib70##h65dCFiojyIxf>4b612`>?)T3&7HihS4zll=SOah9$CP(U_{T+kP
zE;wzdO@9j9B!f~?uEup6EMnDtsBlJo=FXv94!F|Hfr(nP>1f@myndpbI);-`C#m(f
z)tLXfaaEexXf63w@i8Y4q_Y%zf>KVKJ<9g`R)vmmA&fe-Z%#}LyZVRREQ+*}ed@|s
z10Ts%3yqNL7W`Se20M>Dh$@#3McI+qM-+poyMN!0ZJfdcJ6=&?l!d~=JC3R2gnS4L
zTDt($o<5BYp)cl1_+;!}mKd|g=*bL^%Z$+m!3^Ox#n3=i5%#0moW@e@nW@ct)W@ct)=y1}>
zet+N0&T40W%#VBTN=KzrC6#2UY`=c&$97nL(#7@peNMs)?J&*oj&((A>!_F9P86CQ
z`}2uXHz?nZ^uw=Wcc*%FxhI4d_u6r<#Dip`S-B^`v%B56SL(rfy&I01;Vj@pK+a3o
zl2OX{^U(3gkUXeSahWSCmLFax-27cV|9_SE;h(^LiNlP=>MspPhWP(<5=gl@E18%&
znmC#Nquc6VS!6G#MKPpZ5=0&VNN_M16fopMLLX9dQgZ<*W+={oX6dpfiU#HH(Pt5@&l=62`jpV?eLV1IwG
zpW^z6O(A)@{s?EJgsW&yAsZFHkSm=Vi>xD6hnuV-YobgB*`>tle-(CAuT|tni4GPS
zPE#t%CZ*7BszkO_ZB}$k=KYSWsC;Gvu`xP)qlXe!hav`X4ieD!OtqS_S+me$FISz$
zp;4ij>+CXkW4lKQ_!D7bqKnK1-hWL2*UdbRu}jm(zb2nIXPz2pC}y8N^_@;i8FjefsILr6Pi9xCF3R
z2m;5VgXz;&QBZHpa_sG@O-{kuXSz!r9hk
zfGNZA08UW?9#w>FP&3UJnZ-83qe5veLeWi^%C4VTGSbL3WnVhV#
zhT{y9Zm6ckMpHw35V+E;Z4Gl&O=Kk#qkd@{Id+GdSx`CzQZ?A5a!D55l`88rCATfh
z1s4OgC}`bXX~wwt2!DjeqSPH0M(uW8WWFrIq>9&)zslmEK}n~+&Ohm7KhlYEl!jXk
z?LERB{2EKVi`x|}AlVLBc?><)Ns|oShsA2@a!OS^ePh^?=7=@(am;OOAv%j3>6rKw
zPSws-Irx~-R4%_Ou$(OfA83+1|3bs2nat8u^GcIu$Z6pL#(xzoiO-}{SC#3evD1b%
zfLnz554z>7&FvcG$Vd<$ZaoI(CI?0^;FM|QjI(oj{X@_3?8%ja?@w8f(Wc;(CL(tf
zo7c~Yl}To8+MPBqom&3-%xQLppp%uB8qi=3UkM{|?eG!6(TMIo{Q;%}`*s`4mS*l4
zdz|?W{td*ZBY)KC_Aht*^X?5clm?t0+vx5DnwE2kk+Mut?&^leOT=dfjAFIzMIRT!
zTq585#^@a99oT@9jSAg51U0RyLww2VakbKanK<{ERVrG}T>}q8$!y1Efx)v8zQHmWOmf
zWA&fT6LkIb+=q(p=iDJFRonnIyK`{Gc;+~UPTIX2w=4Kek@v+tcJqD!PhxmGnxxdb
zA6HlGxqnHt+w=3@EAU1=hMhxDevQdjYthFsJz#`&NIIe15;BB_6_F6a%|s^}_B}bQ
z^Y`}wD4zuT@Igk!^}u4|z1*8N#;gPHSl2K`)vDS(bJAyx-rK<34rD{z)xdV0UYWT=
z-g)`jJ44?2{Cqt^*n{+Cy;M_Ab+Fm*h2wj(AR+aK!xz55)%DH`EHBX7jE}i{E$geIY
z0kB7~Q;iP#M?LV?#b@$>IWuyKcm|4Kw2P=2#E2JBNRWoHzhQ`MeUj)qMm$19Z0)1e
zzkiB&28rAhP6uI#yz>&Xr%L$6g%6M^ouZy2qU4(^+X@=@ku)IS;t>Z45>uy+39lU?
zW5c18=f~^>hHLkM5jaG^fk#w1M0od6Fr$$wiDy1xh=lSH|8R`JgGE_CLh+cQaHN$u
zV%p%f5G1`o_81^zMj?HGP8}2XCMFRimVci=(S#+Y`0Is3oXv=6hzRdtvIi>f5fWw`
z(g!@7UrmGu>{G6)>DS1g~t0W51Qy+g
z%3Whan0NRc=HipL`{H3RxFP!#XYc=*4`6z=soMP4QK^XXpN>nZ|N3#MWMO9R{D1#M
zgbACrivmcY-!X~ShH!KNDa!eHo)SU9KL}O9=qdyvmC6OF2yNMC7Obsm$-IJ=T0x-8
zz)%qTgo#W!Y9cASVK_Qj4*h!4@n>iCc71`|LtTE5x#JxJp{rn@APz$!j|lw;?i>`x
z#tywGS(tFf>N*+mFC3{$55JPY5q~YH=Ou_Zw5MfGgsL8VDVG$tV3jOlA1G4^Q_L7=
zloV%1cvRcXbbi~bo8f5GjivLwKuUUIEbIZvXnX%JCk5`?r0?3Y#FZv#%UYr
zbFyeT#~l=E^kUEH8Hd{0!P2-E@*h^VktZ#plUF|Jkeb{f#h$oI#u`DhaDQHu7y^x_
zy2R{nz^=?PFe|B%hny$>byU&&M}6?SQtXg76UOT0ePV6`D~H{TMqH#fSFS6zWGssQ-v7BuBx>fYNS35hhTVocn`7*#JQ~eDd4G1#g@e<#LGL#j$?nPJWJYx&?zYTB#*GF?%no}*h(}k
zM8xb1WVNm7`ir^f(24rc_kVCS9yPY(4uFAx#QtM$Tj;;3S^r}D{eQEFj{prFO!uNh
zuUfu<5!leYTp(1AWLqAm1u}mCE}tOWP{$?hCXaXj{m%-1y6eb&;*U>7z%5tj7PFxE
z)Km^%>Wk0LX;?NYnii5Yv28v&bf|UA$A=JCgQ5DcLHdsk)tgG3)PMrZ4X
zyH1@oc&opT1=$!>U?hh&=7DJF#S2xPp8dwXfA2rTI
ze+VzEHmoxXyHOrHHng0KM(g{WjKbx>+CYI7|t#tH~ys3$f20fHL%SpB$jHjhlV#4~QGG^7xFNA06gX
zRANE3`bPH?GwL-mfaAbcn&9DQXBscD$32vk(U34o(3v-n%daL@894@SZ?yA1fFo&?
zJi~XN9YC{oEPuyfoBMN0N)lFl$A3faFgpPGdY4tL;9oDCH-F)7+f9DnM%T2b@Q6|qhprlf
z91k2?U*bt41d}^aZ0&C4qbnq(g77UG@@<)pqy>*P2;zG+yr6@Rv8%QbV#i
zp|r#1Zol*-1I={vMXMk4Xt?Rf%0gw?5hxKwi~9bGgR+;OnE=(anvwDwWind94x
zs4f!~w@)^(`GlqwQ66#tJ|u42i#W1_Nds9>d=6tkP{FA)_u8yyihWer!~&;+;};tC
ztExS<#(p{6dPhY{g;JB$x?A{V{}92HKkn|(Lw}hBXkr;EYh4#iA>eWW$FTCTmpNyA
z8jK=p+lkA8S?Znvfl0Q(MSYJB8!4g|Mo&vg=`A`ro5_nowh8_z4Ow6jjCtiRp_2Vs
zpbE=Bf@ErcZOkW)_~fHCJMW3(z+3cE+Qfr5CvHy^1&3kLOj;)sNdruvkIv-t4y4J)
zJAZM&f`Y}Ehf|cfgQIVQdpTy4xw!AgTWp6L6APa|8>0d#$(L_NB0zA>nlH~7lj+PV
zzLE|h)e9!wEB0_M-P9{^fmzriYBaIs?SJD43!b5w&)d_NTB4t8$TQGzUOlU|*jw;%
zis~P{E|aTh%cuASqnC?h0j-;r;~j7#_J3Qs$Otz$fD(x)Fee1T?EP{sSi+AazEd{B
zJIF2*`P`1wG1s|-fe-~E#-NlczF&+umzC^6*NHeNM&v}|bRS$Kl!O?MgM>CaZA0$X
zDq10UcMiZckSXr|;Q?AXg{{_2QFW$`Lv$@xB}VZrVD=8xN`C$ZU0r{QjDNSk
zO|muL#uT&(y}hAMMbmhe565@R>p9?oCYm%Rlz!sSG?&}R8EnvE#jIiG9I~UDkZ0>S7&x2!8?{Zv%5GBy%UAAZ
zI;&-J;>K-l#njp~2$)1WOp=d^Y=66eJf_K4uyjWAa)lpobtv?W`a_@~0}SP-|Bn!N
zpYriQgCAl=udjTk9yu?bpQE|GUkH8vn&QC2)KWMTWsGU`FNnbn$2C0^fRRs$-NPQo
z_M~?!c@Lvm7+oTC^%e@3$=@M2o<{p;BXW7(wp7a0+W1T=Icp1Qm2kty$$#^BmT8p*
zHT!6+p*LRd8i!KGzGE$j;Gmm;t|=>xK4M`XzX9<9M2P@Ehbk-f$;%tjs;~)W2%2{?TkfdhRm6l!kJ7^I-!%)%d*?fdv%>PCSTHG$@q*j%aC>?
z|M1uBgU%l|iiYo?%d?LyZm2R*UTHx+iq1}&a^FlEi%}TTTmj
z`7#nGr#YXuz=BJKZ)^07VR%XaKXpLzMI;6xed!Dc^U3Lp>;*AT5-oW7HXi7P16JnLsAo=oQsYuyJc
zNHI?ubE8ZMBBTrB(toC|Zsr18xURX@At#=SwRXP}@1GCT_B|gFNJ&w+L&{yy8ZaYO4?l)z5(DS@jVssd8N|}PvTZ~w
z8vEN%nmqz!qFBs=jq;BCuaBD}TUKrz^WdG7Ocwd_du<&vy|I?Ei4v(g+0$!MnorG3
zfEuwha7F0}b$^=Skmf6`DZ%rsNvzHB5|j2%QiSTkw79a+u}XM;wlx1wY2Peq-@sC?
zqmfvaqtf;xRo+P=b+d6X`Zuc$`LRliMe1tlrSEl^j3E#Hq;9fAjXn;h(nM7k
z_IMoHP8zd+v$>-0U1@Zsm2XMo4`I~n#%12a;z{IeSYCQYPw{v|vORu;0
z4_MrYGaeh1D6$%oAf51HMoW1)_;gp{&RETTmVOyNlZZ
zD)`O{UotAO!jki;(&)Lrk{JlUZJz)-L
zJ5Hj52G^Bf78w`Px;S({@av>FEEfvBBhALfVF?|_lp3aOO>MRgV4cRMDMeRf-HbDn
z$A8A~7&K_pEY45nARb0SP4+nd&QO0+X8&kp9D3Sj%PWX}IFdX`HZc1$SmWy<>*X}|
zJ+etiJxb32zpS&ijf$f43q2Vx=pp3p1GnH=z%tLC|{Q>o0TQB_0
z7V#MQ;%=?D>DJv7jq2$D#sTXc#G{&j2lapte(%Yn>q}sV=*KPgeGcT^JKqja4S&QP
z;N6`e{Ds+{!{3VDjxo+{Vbn{sYZbUlFqQ*t?DFn@2kF)Z$ZqTq9`b?PrweiD1FH}B
z*_|pH?2i7`eRJpor%&2o={RP;V^n#Y1u4D@rea0)>($DGgn&HQVUm&H@_z`0{|9K~|27m{jag66!q&o>ncm64`fy=cm2ymm
zo{CQD_&{okN|H{AQc`9@G6b5Mw4{iV^z=08vN
z%L(`&a-WIFv;X`{Dq*1iG}GyZl-_A{kPc1>e5aJoJjncdil5t#ebxs0gN)1
zl`GIY0zksi<8kc@5U>h?Hg&@!pYJx~@&o}>1`LfAAS7>>w&lGyYKiR~LfqLi8ssd`
z;p0#b3_d!XiwvdT;PhHwCVggOJw5&{N2H*@d|b@PUi4fI>;#r
zNLI5^7b8ljICC8%^e@$D`^#kajGqsbBbEo=Wh2<`y)Q;O1@<7B$#x=iB@ywf&CaBR
zS>`4*5rp*++7lJ@tax9R@xHTXkNU5%^DK^0Z_~(nJOfA(_VJ)8n}3T~&>Wyn1-K9Y
zgq(lit~P??@Q=QoWJ!XMW(zV+oNVd900X%*<>$=OUz^ze8bR7DayrL5n2n|obQ3X0
zQ<~?6s_Yg(c0VEK!XKHme*i2X7gm0kbyV<`bu+fuCwzh63Kr_#KtqvA6dll~VhvCh
zQ^g*v`EAzai<1-Fn}5{}yB!!aBX(3^QD2nX)6V(8A#2XFplu6)FUh3oLwVfsx`FugLX{w~M1KyOhYryq2C-yfrGtfg
zD}B)dNd}&KQ6Iv|u>KJiEv5}l(b~E1{WEmjRZ#FPe$9g_wrYQFbi}Y6Xe2Qga*yZ^
zC8U=QM&42pqZK_#*n{Ym}u~h=>z=a3{$!)x})hF0d?K#}tY{Jg*{PqdrJBrz7
zulV(3S5Gd(9~{3iSsb7VrG-QuJ@~R2*^BlsScn05PU3TtmojsxkY+L~nf>voW
ztHc8_^&2eZjWwApZYe(T<#v{nio~;A7@O_1!1OI0&VOZZyp4#%qNNZQg=FW4;Slyf
z#H#%SKBtR97Pk<=g;!4>ZycL}6Hg$w3CIAYMI3L4_EFA_P4FFdK
z&m~`@DWi8}fBj*K&NpX6EL$E$f+_w6xWu+6ubT)qhlO#j~6(UCOR6Tkgr?ZOk&--8%O@
z@0SD|%=^B@!|5)|gF*U_)t2*aRIzLe48IT}%@hV^Qbq>>dnf%QxD&qQX3NCl%U$cE
zjfM{yy{*#ssCR36?My8bNy|;C^24=T?-#4z)tYoEzUQFVrPCF$w}&UwKBpxt^wGaC
zkAH86pOwp%cHe?xvmM{-0#skWZV@LMdGO63t6eL;x9$8E0~EuzRKZ-nLH>4=f#C?2
zwSU2>*8kWgB=_HTlOl$)|M+j`_*A&f;Lxlby4el_YM)IedeB&?iH
zD}4*9;i23V8{Ap@>CdY;Yj}W*;9^nUf~&R*Ee1i?Gf*pglwGOPu9%
zhix+Kd6~C_DY4%Jv@s2}?UmgyV0=#P*eEy^rj&)grLm1tKWVkMQa#r?Rcm=V6yUht
zhpvM@mQYH@Lr-Oj8d+2zi(aSXJb%0Q9-%~m`%Y<#)fVBQREL9G11B7Sjd2KtgIj*i
zw>7cX62LN#T%XU`#%W5{cbqw@04>KJy2bD2_;4__>|iFVK)w
z#OkZBFHFOLsjU4(`@Ws|OJ{#`G1w|L7T!BhUQ#mF1$(3Ba6R+a0#tMoy?=M&-VN^S
z70_x*&0rz_fJI+L02_RpoIvyGJt@tC!?mqR9z=ld&ogFtALBhIZ$ZI7L5$WX6+4pm
zX|0esj_c6H
zS^q~Oz<3@>IFG}kAegFwcRjQQ1
z)Iyl}nK@cynOfKJp}*0pNzlFnd!rqgqR1|SL`@`IJKeM+>h0?F`uzeiH>!;wqveQe
zQV`ZP@Daf*8a1AM{BR!9R4MCaUKv`2nS`8uhu>0kPfYxIYA(WhH11FCDZzhYT>W)b
zfZJ9zwk{SqqJNpqHOpPs%ZPpHic?TZ`)sO_KVJAawm!B?x+v!+a*7hsRM+9;$l2PZ
zvc^Ye&C2y6%Xpr)xzeHenRi#@SQxodil?*Bg0YKUK0Gw8-QYa(%b<6`&)|nlxOH*U
zOo2of!dLmby-P2(Et@@5LX+p%PIK5}ji%`CyH;JU3V+|3v)%SAv;S8clGuRlmUXWE
zcs#B|WOGgZXU&-MbFRdDY2CUDcFf1oG}`PqDMAeEG67@fv-X0BxFf7wgaB&7nWww$gHBm1+exf*nHw*Kder
zw~m?vL4WO7#O{<{R^)vMuF@~!#TWPgVBIHd-E-yu0|7Dq$4R`Z{~gWvS9iz%rVaj^
zf(&awdZVslfB!_B8Ji{SjK)ze0mg=dNdkjJMX@%uY!s0RD7s!eU+4E0=E|m&dXZR2
zSa80TbjxgMk`;xMl``94-S)aozu{Z>dhhORq<@`cj!SARKW*N9yPxXyA#~VDsL0)JX}D(_C~7J!^l}cGJe3
z6Mq9OoO*9F9(@Y4Ee*B{$I^n;vTtKj255eo7Qr{Q47XnjV!6s>&b+Z6aiTrH;c#ZS
zoPPk}@HJBFXdgHQ$vBD;-5KS<;9a-u28kBZ8dNryk
zb>L)Rwa6$g{24%3!#`nUJ=4r}6<`hYNUPo7$D7t*l#K0QJ{*?kELOWgHBE`;mPYIc
zCJE)LZ^=142oBE-9HZb(ZF3fz3lE{rB7f+wqh|N*g=%2%(7E_!rmY7SRWCBA1TfK<
znbQS6Wul!6vA97`kpZ_SHk$}yPGsW?4PZ{d&$OI-tvQ3UiGPA)>0zk04_;pvv1kc2
zB2!Z&hLbq39wHw;QKH8lZ1`z)`4u6;p3M$_oi$6+8Clo{PNFn>Lw
zCtH7CBO7mydC8Kxc{=P`|t+NoTypbSw
zNDMyJNhd%SPWt;0I#jEnAIQVaq)LV`2GXJ}!Qd24nX}2oN_~Y*{p4v4
ztULmzt(?Pdq5tOcb0MeaQcDR>N$`s2;K3avGe{H)K2lYby;G`>y}
z-1sa~HkCKtMj$~LGQP4@3uS->F2)E=ULuyc@&_mm1Q#4$=@DL|bg@KH_}G>sm$M34
z@wh=hIbujUC$MeqfUMJ2nQ7RDFH0tN73erB{^CtbdI|NNCIHo)*TceE_vU_l@>`3K
zKpWn1X++E>-<>019~w`7D1Xu16uEo=dwaR
zA~P+Owg7BcQoGy%Hs0*eG^tod5v#04LW`0H9G#K7skb@rS`oWah&ESFh*@GbIQr36
zF!K$Zp2W!J9UgosS5DL>_KCbeW?(;xMJS+Q0JBV%HuK=OHvn@l#D7>|7W$Km9UXm&
z;hEvY9r~9Pbmc*yfpYz7r)>Oq5-#FM5V1Sgul)UFyxM_E>=xP5{LsOe6u5-c{giJP
zDh8VP-2U2Qcl=-SClgp4l70z0h5PVuoh4Lz=Hfhs+#A?knzB)L25tEX+4)JCyEr=|
z_pZGir4iv|k6XWbxqq_z@$qg|h?mxg_O>embBZnOFOnPgkcc;BkwVw`Lg|9up5i1j
zDl8s3RpQ=*t;%kZG!Ef$R7MeGa_);6s7WPIlXntiLwBSQLc}eYS10A}R@DHo&3VWK
zA1cFH%C_&tOI7}tO^@N}HR-mnCTSci+wG6xlZdH``jbt?yMI!&W(u_>1Y>hr?442*
zr0DLwQRQQJVX~kf;mfL-_etudi|K{9Qcbl`nzEpx7YgveGQ
zkF-nqDksJxF`eyeC20GM%jZa{n{NIF>esP2cmkvgz^pAwS2`Ny}gGFH7QhMxk8z*d~~rwFp51_&R
zjp#FMVbZix!w*>kr0Q-L4n{llaW)PLwiWTRI1xA6zQ?E?oel+AH53I3&~(z4H4W_5Q*7+0Sq<
zKAb+J;GJONg~WDnRK9(tp#VuyG<32@QdgH8j+Za$Wl5;lR$d+kV>Jl=3dV
z@pG=WT7^tW(c;c@MMXu?a7KMhryRx|i%M^a1Ubk1yd}NTJ7L*_;avgL)y?l*I|rs
zT9YbL{Q3h9s{!rPrp$?kqXm<4M|lWOJEjtL(tbWpU-l0#;`X0|KFxwD3k7wM$VRXC
z*YF452uAOW%)%A)AOle|EU5+(Eig~qzzU>IdBgL~#kd|zs(+>7Z~OVSxn+@O0ZPE~
zj_$YHSr1#6>(@=s%sN~LSWXngKjm*iX(F|?C%cw^Csefcm_>XrD~P>Y5&vkrWzeYC
zEaX*iSwpk`J6U^&ts@_$bg?_U8=7X&*cUSUG>$=l7K
z5X`rySagdRfzWg>x>l==SIE$mB6&nm!J{%bC>Dm11&$hItqjyb^ctckT=voY?MUv4
zg}~?jLR5Ls|KITTzc!rwyD!mz_C{O&3r;m;N~Qn{`3ndLFbbgn(2pzw%|ZG}Z9&M1
zaLN|OZ+}R!*RplpOhM~YtDjq%ORJw7s;j$cEHUFe9~)LSKI;B@)O}@9tEXN0{JkT?
z-Z>5df56Z?)#dRQs`}{pcI)xkE9bd|m?Ld5Pb05mF(^XJs4+nd4V#KjV?rTdUa%dg
zyS@`xkR3^wml50AQ!R=>YOyrEa#E-hus0
zW37h4wTP8Xv-ia)Ml~8N;POEl*;Fplg4#i1O2eNBr05j*%{v^IFi^{?s-y52Lu2f>
z2!9(T76??#RL|35!9f;%lr|+4n%lvLwrw{a#xXB6f?0THbXWG`E}^Cf$WktXJ7rrP
zxKs4YLs?vC2OR^j!7G~(uT5~E14O}jx-~s;^kR}9+i>vBj6wwFB#IA6K%`;MAemiN
z&bt?X+-+$sS(L5T!&HKw$PZ)!;u)1dw0|w-Cu|(okGQN{f*lZ&9TJfz9ex9;;U3{3
zYsWgVS#?v6yd|ZrD$km@hfwH4o%f;oEITK;SX_QpBwt#lU9}0L|8a
z%=;`uFH5&qLgvS5fpN~s5m8*ssy|?2!51P4d~oOiz^26@jZrf6*0^58b6}7qeSbYh
zO2P@R)fho)VNnQ+A+(`4qdHJq28!vF6{6d0-Aq(h9}ywZbo^9IATQ+puuFJ-
zi~Cl3v{h--&I
zDWvjcQIZ*{P()72kGS>PK!27iMbrYTJ8Jmam3tgb`O3&drV0(NP8JyObJ5zxd(WT&I6w6hCtUNW
zj-i8q>yFhV6)_p7y0h?C?UQiZ_KUB3%8=&AYRE|w9|OuBThwn}+W_)=iJt^Xx*7(t
zr$HEjeWfnm5UtFLoPQ;_OnB=U6_0#ohVM7Y5&P`;t%nFF)xqfmtfR~AibgV73EGX^
zfCDU9Uj6kc_srjJ%=&nxX}T10$@_AyUWu=TOP@~MHwgmC+B3E&NH*nXeB3w5krygU
zzqKwjLm8lG31(@kQ!)=6)|r#`rO`A`qM5fw5f}@#tj}#;E`MLC2?$$4g7c+y??QOuH2#G{~Vr$k#0kYqys;;C2){^&{pE%D(vu?Mgi!Zxr6lLPHizz>z0&z|cmf`-O$V7cZ0?j?qVP>bP55{U^SWOoEI(BzKC!;?_G7uf
zf`2xa$cT-p^{W)-9F;MvDrFeLKk8vihMc*Pce2dqmw&wKC*%r8qzo!5i*|lr~XY@oua@$$!0*e&gf5g0VCYgv!vYiu81QShDlA
zNK;#XqsJ6jkjsi>mcHL!e(vdrW)mmoqqiocBQf21Y0E+~`4j*<+MK}BXz9d!K9PH>
zgkQpw6wQU+W~8P-ix|-;5<@<-G7Pg$C*Ljk7@hAMX!vAQkg{GXv;^av?KnhZJ6vasb6X@ldR%tNJ~@4?oQ)=*~t@5x%m
z-N0M@KZ;3sirP7M5dp=oKXN<7{VDFzc0uG}-7`h`ur0DWTfPvIY9|aazEAIa-#Ia0
zw;~$-4>h=AV%b16tE`}+QB3RGiQGYAe8e3HdRv#(AsfwS3{Nj;H&%`39Y8wUSAUX4
zTk-G*$y)atXyFbiAsXr$!a0%>)GIn3Ikzl0186=fK$rUq-N&oB@LLQpa%m{vq>>6#
z6qfQscU?3>WHlzA7+v@9bb?*hhBNJc%#fMmuKC&xsjgKy+dV!0c1bOS4TfB64iC5B
zl?1pts0j5aDh??6Z+VIO7ZQ3*V}A-NQs1NDXh|?Q;1=Ju@QNR(o?K)I+mwYt{Ke}2M2C7jlpp!>@e%F@?V%f^7NQLbAtE6|
zVT=3-rMsV!-%NUvk+%O)AkKy=NOau^bzl*xSV2^@Zvek)ex@Fj3GE!BBoMy-nM-o=
z&i{=x9A~533DP0F@6G$;bbpzDD*JH=l_SqICe|U3J8tmRHpHQC@Kpk#jBLWdRq<{+
zdNk_XRoA)JHY<#vDPKLHF`%^8$TJmY!rf-Jf9YmWMQYSq^`;rl1tuXO>wRZRW=7(v
zRG2q{UC)5%B!XIRTu@8K(@dlM17?ODCLU7&PIDfO0sAfkEJC36A_@@VY(QTU!>&VF)BTBpJLvHm$LbS-zd`F`A
zr!#1iLsAY1W*85TVly>`9DJeT!=6%(HEWdYh40^g2lNBP*}ST-KtR}d|KklD4lX8+
z9t;Wwjs`aWyMaSR_wOcgKIIKtZ44N61rcEMBD%52-3_TgEPoP7MbKbKpNy75U30gI
z8(PWlM8pIM8TUKL*TQHw*VI@68wq!Fvy+?l)2-O_kJHol8~l==m_65xMK`Aw~z+t9i(jTTMhV|3Jf>A
z%Sx37dMjUP&VNW6ZElQtXscOF+tK$S-5tYlo-Q&h$7JPY*<%!K$xFD5F~e}8`q|7c
zuC>t%Kv}sGAYm-MEfhI4DIuR_P^`x>xlbx23fQ8U33b&WC<$lFs%nCJxXDqqm`&Du
zaR|&-v3xjZHj`lR1l@u`t>P}-fZmU(mVV5}QYKBe#eb0JAZWJw|)cQxMTOhNHFJ
z>e9(Lx-wK&kU@{mw8Q&Sh|QRf6NXIZ0B_vwT+|+Y6-(^*_HW~dE~CeIqDCs8R`Q*7
z?i-oBrZNMSkHZiCM=_~ms?^p&`z|yL=*n74sdwX`@&GppI0hoZ>c4a#lyAtB#nqB%QYwe@9Ws9iRfy#DQ
zZOIo}{pNALTG-Llor~fcaMo2k@iyS%JGd^xv~CpyhzYpF?);@-q-ZkFFD6ecrlZHa
z`C6S>5Us?#0RPQLlLWa-PtW-bx-Sr#nI8j`^nZAUdxZAck$ZiFCFg$J!3PL8ApLU6
zjryhIMs4CB&e2mFU~r52=|ui&S_P`YF$c)&_l1>0W2Pc7gRFF>oo%roy9~$t0Uz;R
z>2nBJTw#uBM#)Tx*H@!SXsg2ZV!0vu}?W+fGfh^
zfPavqI0II`UV6Rs=cWb;1WYbE`$v(k
z?hN0l_pZnG_uD^!A+$UKy3>Yhzi%Nl%{%ACl+0a5L8#-=QTD+usUd48k
zOsg;kTTN^jV2XHl4*5
zL&<;5`1(nY^QqC9%3Fi;sdPyyqy*4V6B$YIz5Ul{CTVmrTAJ*vbf@Cvq`*>#
zg1!&%ja!sAu0bYd5W%P#s4D<_&5Mxc#$SKnjGs_}%dF`4CD@<2xbQ#j62c;*z<6k7
zyK^4Ed=$E~P0r{)vQ7GGS9`JXCtQO7;z@~Y$_w}9#UpV5$+0K6&B$j}8Q2GU^4ZcR*aAKq4vslJP;f8Pk{2GDu
z0w;FZOpnCYB;lgd1WAv!IX1NLvXnxX-BOF-4>o`&;m#R2tBAf=PU!1?{E>ym*;GGS
zEU7bD^V|f8JqYXr#WqrN-Beq!AC+;-u;W^-(=lBfpI+=O!mZM*82Nko;vs)G{XTZU
zpG;8Ww~`}~oY@Y?o!C%DqB%&Zzqo%(K
z>Q#$!w6g40Q_=3N*r!%y%%&s>pCxC>yRHUY$0GUD%g}BAXVLvckt}}_2#LwV`@#0c
z-H52R(a&YGKl#h`Y^v5mYU4mPy0#dT#W-thyVveqTW1jKz
zcLjaFMrgVnRj_`s@t53y4j)S?>u=U^nPA)Q81(S2@-KAs06TYa^fbjrH@VE^`xonQ
z>7>lK$VNYSO~@-hg{gm%G3DygN6k0zY_vj1w)^@ReeEnO>QB~KkJw#bbp76}>#}2_
zHwjE!dEU|RIDesC4bLo8%%@j257;sx(6;oJi(D)u)N44HMIh)?Yi#Ypvy?A^eM!Bm
z%XUk6s47>oF|&a6Q4u^0$WKFXGz}yyC#2&Nl}g;9oC(taG){l+(+R@|N1wZvs4m}}
zHP~>BmS^L~-85xSgxrY-j0EGy?-Lw4&a(g@=!!6UY(!?nZ@YP}2tAQ~z4L
z>);;kBATlc>av(#Z*1u6^=qP<=}(m=Q9*k2Ib*3p3t%0x@nX-Vb6Qw8FQlGkKETcG
zlU8+RAsFQSN-fbv4j4@7Myen}l@rJCi)Hoora#Eau(@RUuLt<#$Gppqe^|b3M
z7TUwvt$g(c%rfRC@6^uTt4GWCo0%+TBGr0o=P*D8K_<`s)_wuM1NV-fwR%PA(OLU+
z12acCv+@Mh`i;_}PB_1SQ-#>$(#34wRZ&w>^T3U;1bKg10cf!lzi7@}EAF{Sz0(IW
znpKa$ZTE28C{J`nC@z@N*yeokGX6*^EQ@U(zdncr}Rc2eY@vU}WHB={Gg`9fikX?2nVBqRW@bhU
z_syHxiQR7_Uc}7KkM4-m9sR2-GPBO9s{G@CT6~T2m2V2k(}8D{=MmU2osG@M9kkam
znyG)9F#!3YdFZLXm-_eY94MF;90JNGPjc&syd1lS
z@vS1}2i2wr%b#r@S^K4M$p_aj+Hzkqel9)K!I&|0)!$bqgI+_blb^Hb!>fx!s-dgV
zuOHBF8oRW-nNYTvH~_jIS&&SEM^F|I_`QD!sO!@N0Z*fyu$xTb6PJX3?X)#b6Ops6
zK+T_N+e0vyeeaNN2;Hm5^EyddIP!bWr>K>D!t%*5mb)KGS}>eptQWtEp_WzgGzX~k
zhJU45uF%5Lzh~>W!UEBS6BM^WS4^i~pJwkeRGSJ^N9^4Rm|Myxp;BJ3b
z@-;LV7$@dG$qb4AqRenKadKvIwPX5wPhH-?!co=0+T}k~Mx~056COJ{pW|-D-m=SX
zkskUgTfu;-=Bk8<7`mwj+Sl8_n5;na(GC9Z7%R_n+5Pzf8O{#lXp+#8@Q^BMfe7w)TqpJ9V6-
z)o1NkA~u@%v^GqzY0&ZZBn;NSa|gg0W2xUDz;BDm_Or|&05YJ+va6t*0%T1QZ6uac!;djoQFq$Qtq)Y
zx944UkiKc5K>|tRbOen7N->dsTg0cV)6IW$6Cdohxqiw*so5v)V+lC73Xk}B(N03Q
z@UD8$(yK7~3^V((kl+^B4zPcz)$`rdoL$2BreARhU8Og)%x!m74%a#;H(E<|dg7)k
zIoQH1#7)RtI;m0b#2+QZDL4Y=f=KWNV=C!v8#nevI_=#gYnW|7h%-w69{;CZvpB
zG~pF(R7=*`LbYn5^m;V!<7CSkH7-A+S;Ii!siE;RnTkh|8}+F*m1ci^j=j2s+gfk8
zkRnX!Kw{RJX=v4G*6cel(ODTtH|W3$F5A0Kkgbv^1wXixC0C5;GeggTez(|;*+@0J
z3ug_0melf*^)uAQ?@5Fv`34oxWo--4E4ZOZLZ~=~P&G(7qcigI`Wj^tIk}G8oN)hy
zY*`h5o%tAyGIX)Paz%tRbN5LbXDcp)q2IcUu?_eY)*rAfaEuu06X;d#%zBnZ
z^)_7y1F&Y+7C?c9h{mq!z>#vn@v9Y4bMwF4{d)T{n4_z^wKsnsHA9d*0GQCup8@%R
zN+uFNz~~q{eko{r`<>s}pI8H+DQ_6xr$pq(ces%s8>}!N8}7bt=6|^R|CMH>rHT7}
zxR56ou{$^2^F$;|98md+vSb%4GzoC`uw6&UlR@+r_iroYtZ=!>*6C-Sdk5aH!(uae2LjaYvRBbe@H=%;f60LXm{#QTYp8{SR$tpA>#Y-@xKb
z5~C!GDPw1Y6shc!zc5E69yKneX2p_=$-O3ZN(mm5moM3iKp4A@w0<{EKiq3CQ>
zT|4QZ7vUX^M~_OZj%e9!TA8;pEnj;%e2%*Jup|Y7??|5P
z_a`C5qs)JG!%wXmhpxTrsNYWZaq{4kY&^mNouwz%0*1#+%sEEL-2I9{JQO<`Uzx%J
zcmI?~AMI<(OMe3*mSBMrNz1v(Pt
zT*=M=qd>v2k+9po81n!duP6*~G;T2r=A^wWYKecN?=(zj*lMF8Dm#$5Y<9;IyE33&
z%kTP;(-YI|Q?%()dtTns!wFZlhj7D(7{FiU?ppmk+?#{!puwe)^ik^Zu<>w5G8d>$
z;*M*h%v-sFB01IXq8+(=l(s+svS*`0V6D+|4FHa>vS0pKFbI(@_r9LnmhNZ7{aG2d
zl*NCkJJKB>SyRN{ldZIYHt*Wa*?ZdlqeLSCn_m&@$Oxo(Y7Aa1=~`_u$RC+9NqKzg
zQ?|!iKtm%3&|)QnhyL-qKFxsO$McBdpi+lgnsjSFnGwjxK|sOG~vlEB2f2q~oySR&L!Cou-J{
z!JBo-1V^A+!XKH->A{;oVV}m0G?hvC;GLx<>1Su*nN}Sz@yb>6slvNk1MJmD_o{~8
zas!}+XBDfqtP4LjWwc!LHIwDLjfRusZdRf9z#8ln4V$oIxv7_`s4>G*-uJO41_*ym
z<(-uX3YjM?U22%&^=>1n%d`$iW;#+k2PYmibPU<#QLqm=sF6MK$gynN1!=r!lH5E)L>W9C*$9MaJEh}a)7KM=)ZiGKAsAwUv{ssq%t
z67Bu(`@#Zua9-T-BCvHEuomi`OeB9(zFhM+-Q?u`GG7N%0&t<>@ImT8Fj
z*Fp>ZtU*p}1mC!1J)oz6G?nyZSnW9tpKdn;ZabLyLoATsBXk*UkD@9@n@TcvJZ3z$
z;}edE5VdZJ%4dWMDEpO?T7Q35E=Q0f06~-JSsha}gD_9apv6NILxMHx8rI%D4>^=W
zKvO-0tCJpyCxr>D+s&lQe`4C(Z@MfDXmki8{b?pZsGoL(+|Rju3xTw&c{~CL6^RhY
z$xIX_cNVsjs)xB465haxc4dolGvnQyaj)RnE6}@-A41!}k#mXQU5S5m_`1e#2_4;M
zI~K?5dc%{B-SXzZIyK{eY?ovl9mf8W7+>Xza70>(&^VHm10lUpQ(#BOtV53_JA&
zeDLQ|GfjHxn5GHqDy*FXt
zVr|W09x*!OlN&xygtx9)Wr)>p@h?w&hjHo^nYGLCKkIZ8eX6ljVq_yZzB#0BtWer`
z04;K;nW~mU4=#T5ZFhCFS?c4m;<6xM#vKS*e}l_RYLulKy<~@=fL*fLk!rd5T=6BXV51^L$do}w9h`yAzm=bqdkj6!7joU7elv93&KcPQ-HX|m1N
zA*Y*8Z(bD&HQ4Nus>@jzANB=JS{d@~D5Mb_K|nVzysIUPpkv!rz0$jQXX!Tm2GPgy
zaqUBZE|FVBI%6U2XC+TBWE)qkPg^yo)M0wdQ|B-Y`p7SGPpI*?k#3lHgD&
zGI*WpRc(yMC8y0%so(hFwTXGpkw4
zf8=BiPdI-_TqscRxZX7*jW}8yH|xGgtkIWRc?!wD%=*J}c4I+TT;n1An$Nu#LwdL|`t<5%$D;s^5$$T_xtTD$hBxLW_%2hs3N)F4W;;UK~x
zyC!do2HGyQrJi;+tbO;~;Tdnu&td|&Zass_L4SYZ!J#KCF9A+n*|YxTd)`aBc;4yS
z;+@6sz+?BSotMF~`|_dD7HK7ykfI1#hzx#ea*TrrH80?bg->~BLdO)2u6JWG2Ax$8Y5C
z%*bE`aEfu0cH4xlvAyesI^6RUXdMV|H@H*&yEsm>Xj$?1qAl6r-LP-`$m;{*u--up
zCNUmPCtnXf`=$oCi!Da?zVNF?4a@G;ppt)T+{qndiN?x|Pw&e>Mk7Hn7Wu;m_!Zws
z!ns>A+tV!Eo$GJ^QNCW+-yT%H?jzo&=U36p&P}_YgR7i^;2pp!bAKpc_lmSAY0Fed
zv?^I;SAG~hN^Yn^d864UDpIL1AkfCV0}PZPp@(@?-o`}mARW>pF5KgC
z{jlI((EAVJ-fHtwADju`z~XLt4ck6ng#31?T_dGhjdt7Pq6ZW@W?w47yD-3=oxh#lK;*#0D
zT^~VG{KgDe5LvI;{>Y0^D4_mznn=1-S}?if@0LnY%$mGF-+Dw4AKY0Eijp>+rJ$D}X)-tWa#AD>pBF(_lE
zqwrL8xl^?bqF{^pvUO
zHN`u6xbBiOeI>~qc1?}u{Gls+9)51Q4W8%`+s-7Fy(5h4O(hlBfnv8URS
zWQ-K*6+X_gZ&SXC_>9Zivlf@js?F9>h6NS2>q6!p7t?>W--|NJtkqw;#taQ4h(RE?
z?uWy44XB}ZCEXx&QB)_@*a#d1u)(9oXSI!6SFx;@7jg!+iK|dqSwY^qeCx}ZBq)Z9
zmj2vJp&jfaMoKTT^rBZ0??VEtC7A>St^uMMBBdxU$c&Hev)r?
zaV(!OK}CPInZZ=`Yly%U`5`_?%#FBkTjl&TdgE8`aKlyf9%j?rD
zIYf0uiqJe~7GLpa!(rK@ToaRIdc?%&9SI5rcp{;42ik{jYg8c4QUoT$L1`7Dz`|YLc(z-<28(|Nj_1I;|GMP%cZEGJ<$mGqk9i~5
zfe(Dduk_Ir_q^I$)|t{c;uRLU*Ad@B-0koayOEu0K-7cNg(&U}X7+}jq`k_{prGDs
z1+kNg?VW$mIV4;S3R3ijqWaaIMM3d2$cxj3R?zbkh$~mG@;kmK(1(h0M5RPC6j&?>9et@N?gJf!$0I=4x2q|l$*Vfpfx*G
z1PXC=7Y&p~)9-*zJfVy31DXP7(>HVZw7a-aH;2?-;%7tTrD+m<^i)t(YD<4!ZYk!N
zfxV{Z#K7xs=KC17uraFhu3C_zrK&=SHd0**Gqc4mchT<&VMVE`t2cUoa3v|!=kJ{T
zZ2c4C3P;he?r+jQ9SKF7Z3c!=L_qQc03^UFwJ-Hvx=N;s?SP8Xc2_B{!m*oMuF$~U
z*)+jpB8C+hK6UaVgb1%gtki$UQ}t1cRFhT!t7$Y+Ah$12;T{WLEl@@8;6T$Jv0%cA
z;_}-I-wU>qO0c)5y%^(6s5WvLE#269KBY<@*`8SI&OB|~lCMYo^jZd1*`9_+T1~o{
z{iScaD0D$dOJ{3ObKW?j+3Hg8NIw}3Dv&(9Zf9k;E5A`Z%7eF11zUei&7Aa`i-Mzf
zu=}C58pu{5j|x7j;Vt`l2y|U>ftR%3HHZYJs-ui=i*Zp_;zY`(^{qtksradffF`k;
zw+mx&R!%>0CrxSO#4nA9m&r-o)L394U6rX4y)yTMkyp|XK@P#&Y!|1?ti>6*0}Bd`
zf+WxAnDNT1=emwPI;wx2finmLoXD|R5$z+~Xoq)~2P~xmSF>Cf^
z7yhx=yx1$^(UzGn3-)LDre(vhg+TUCgrv;npxDfHQM<<%M#X=Xon=OlZd?OI^GS0!
zn;&{t&Q_{?_y_p<7k{dW(Z8-W6kdzN$!$reVdm-wqpy&D-wk8Fw>x7!Noerg)92xg
zeFSlN-9V#8*H>R-R)#lh=DR$&MX+{&9{lw){mg!T8AApF;$K>O`lr)@>%$PML{RFB
zqL)+Kjsxs6?NEO>D}3HC9bBj<-@^&W!q`OB29)t0qW$#b3i-pm3;3nYGmAuA4Uw|n
zlRqRvEGW7C#GhG+FMET2$6VOVD4~}VZMY0lyI5^DG1=mK8`QWqs$6za1ryGAY0}M25%Nx*5kp11#q-f$~=i+GepE~+P3r`gL69Iuf
z*9vJhY}s-y3@)L~QY#vyNG%^y^y{mkO5jS0OF(^F+RTjqvLk26lL-hm{E4*?y6((8;c
zEbV{l_np&u@`s7}#$IhWoUG^ZQ7k-~Qm~Lov$e94)#ExR)}nCG0DLwFcy4UlP5hYL
z8I*cpq!)MnnH72E=`P2*ZO)tsRvQlDB54D*rl2}3Jw>NTNgkQ_PLzsv@i0_TvDh#b
zt66X`Hg}zxTHf}d&qwR
z)I|4N0R!z2nD3^&4EoB`zd2hC$@~l!Ae1
zb03Wg@v1K_D-M4v0a?js6(%U8vOk>iIZyrwJB1bk4x8nB2Of26WE
zj0-1r9==R$-X-w3@HdWU6)bsiA*@k4eUf&qcFO)J@L)6xU?UW{Q$*{MfGW5hUkkm&
zvhWqD#7)8x!Q`S{ThD*0e(J31ym8~SvYVn9cE6!Qah_JORXCAH_zCWvCS1x7fDvv<
zU%qVv~;Tfi6S<9XYh
z>NJKHg^fgu#hfU6W-d0nJcVQS7e|doj$-zdm$%$cUOo*r7F>V4c3;R>g>v+=z8(^Z
z7fw3xlwt5l0Atu!p;2orRAzG-*H7@hX-I9iq9btEpOH=3)0>`i6z6t5axD*}#|t_F
z)8$^D-(SFGwfn&OQ{r%DSX3^?Z$w;N58cToC=r{fR`HnhPu-Qg=0r18h#NG7@RlPn
zU*yO_b^q&MPCkURI>NKM
zwQHa0yk(HKrmGW0Y{_oyUe`{@a-g>;;{ILJm-Xlrr~ccR|NqfZSbtODzie>-3n{8v
zX`zXu`#^t#@6=%y(E2Oqiz1X%JZysUz6c6I2!b~ZHaXYf#37__xR_!6uoKAJdV_q|
zv>~#3%@xSWes%JGxgV$8p%k-tkI5VvPj&K`@|qmi`+U2h`bF+@{2eVVKg8TzkWSbw
z)Xsim*Hv(8U#jmKM^jv8?S2?LZBKaY!d%!3odAEAI~VvPxwV7+7SDcEn1RmVQ^){Na+KF(lzzUn}Ej_iZf6-)t>%j9XE~(%zX3_BwEO{it2K
z_dkEtvWw)J+G>aiq0n6osR_W#l}~ZhR<Bur(6DnpPsaH`>Z>C_lssyN|g)m0KuX@yQrN
zU8+r5b5K8N8xg%q+G(V4@MK)b(&U!0U;pJH7^Wk<1${6CiXa(BmW@jYKZ#v>alM1szClUu1?QmQ&8*kS6kn&9(J)Hx`hmg=Emen~jIysVBF+v8W
z!wg4TK(NS-X&Ek1oxnvV3UvifseZn}qsg27jfJ3*SLyhbLBs-Pv_UG|*%TA5wHEuL
zmK`2K3`Z-$X9E(Q4UO+;n8{%t)ii%*pst`_Qmyn!G8TvQu?;rGVGuK~*Q(li33F6t
zLy}!?Ruc^>k*B5hIhnr$cNFTutde2SX|iAR#Bls0|RauhPSSuTp9?_bN6g&N-1lN#U_gn
zE~&<6#4?;m13rIl!mscmJAPV3I!k(wR8#orl{y88L2F7yioN)GaZ_fTzOSYwsOB
z@Rf!FKq2YkwA48NUfDx0Ijn#Bjg3IZ_EyLbe7U8JNBi=Yau1FvLv@BusSRc`USwUJ
z558786-#8?&CuiW4qwe}@?oju!E!#%bC%uh`bW8)a(VrqQIob!?mHpeEF4OITGf@R
z0|$nh<5YW7H>H##LMC`U_x85_9v=XewfBw0jnm_{2)%+Xtng0|zlMLMhDle2F8Vz;
z=}#a|)v?QJb(>06mEsstsn8aOrF!F%i8zNfoKlhD?;bkMp%7Av{%hBCvLn7F*22>y
z17gq0?K;q2SjVXQ#s@|7rd~sW4Ls9%i@&`^Ww&tKqq9#&kydjk;poJ%S~O!CdnsKC
zHHY|}DlY2|E+5FPVj_Q-D#cS_?uq|>&Vt-D&*Yi2hH57^D2>^kP~*i?u|i4&sE4C&-N`|B2?sbMuv;IPDtUEIXiy|2fszR@WOe5czxN
zw~_f&Y{5cy4&R`$j6a*G(Am2&QA?=nx)5j3f}9`1u2F+8c?0<8EjGe88vz_B#U;GO#D6cr8bE5OzaxAlPEDz}~My+)GG9eBOG+zZMSpjzzRXeqWv9M=w;Je)Z<4ER|
zWyP@Nr8Z23DDP3N7Qf`TfOpOxNy`3xDcJ{$QT7A$8{PTUhF0XKTE_J)!Yaif_vDAv
z>xb_(6u93qd1ym!1^Tm?u%q0>wc-y$ofClQLhg&mQmo_32|Ko0*47eZT1%}cQQ=6&
z&yIhTHo(GxxUuvC+K2g0B+WtD)g&q74qNMU$zgq^v)byhJ_?%(?F_TpX$xzo$`OGn
z`#t#A)u@OlCeu?gnS34bb{fxW26|@vABEBtqe8SBX!RI&bb8T2;Z~FzG$qz0N%Ib3
zX*0uNruZT$(I*efS|Mh=G@T7zv@CycF2a9*6Pq<2C+evjcNt}K%y^gZ2eEH?VViF4
zDZopmYaEa_Ml;gZllo3c4qF{V
zrFgFdv8d$yXdvUEHgH8r{w*MLXBEgVyhmSogwMDqmBI_{l){9~$faFaLa6QbjKYcU
z(>KvWZ~xhv=^V@Tu6XWU-h-d30bL!jX51qDslY;*Q+c(SUEpSg{qzF0_3t*F5Hslb
z5MW@I|JYXY-#P^R-*WB$*}Tw17e{~R8{7qx6|om&JC*3EDY-yJBQsZ5o{#X)YcZi~
z3s3dWs;Vu=r5HLNquU1>#!X@S?ti(J|KnKhWvUO7LG@);(fQfzbk*7%-u>zE2kRHg
z+q^&beDQRQ7+Djub@m?o`i)176Q${4pcQr#VB~w+9pIt!=iG$3kP{q(g|&ZZnn6KN
zzlQ;N=+R)_Fjginl8hg;A8UEUZ2}&Kh<-~ft-VlgBrB#xJ{)NWO+%QFTFlD%0GBXj
zd0$3<`1%C=uu70WT*F?u_T=hh*}6W@U^_#ksNlFfhBfV1E4;U_Dbry*sY%aY@rq(4-A!MS8Unir01JH@Z~
zS#|~LB9RtihH<==iTzQPTzls{tr3mJkzUM>(03Yqi9KQ#09y45zY0Iqc*qs2b9Lsz
zZ;7oDDI4kx#*RcGH(Wlh@fy3Rsd(Q@-dWiav|#0X(u1TQOQjxA#Y=y<8cJpD9XOE%
zSD`Vy_jyb~A8b(efd=|$ZC^n(()AJMD9C@r>bx0If)5E~Xw0}7lt3;ampa{Pk|G^kk8rvr2p6FJsM6&nH=|
z5|;kXs+Fs+B2n3mcRWvi-7J3lo!K9~d;mIqbw;$^8_CwjzJY9q@2mMO(7B6|*3a
zhO5FN=u)OMd;3U~j9XI(@O;~4;NH-1;vSLNEYj~?HOtXmR-!|pWpWInEDh*Tzb{M|
z`BtpLoZLdmv`>X`K
z?^bYlES;@#pQxlcN}dT!Bw^$yLoJ}4@D;|&4~{Fw-&+r4$7vtYcB)Pa&BdH0+uAWG
z-F$B+zt~?^;W>)Z_yu^E&QDgy#1t;Q_*(pKB&?AOTQreS9@bYsv>~P298GJ|0PAs+
z#_Vx$Ldk!dNB3PjR;q`awY={KFC=RP?7-qXrrWoK2rMkR*f?EKqit_Irng@)jkiU2
zhMs~P!-60byrpgerMV+kg?EOJuI^!+KI*awp?lZ#hDPCG{_gguLPt`bO})whQH4)(
z2@p8+(^o3Z-Ci3O9A#)rQV`#^vQ?|#nn2|v(O-XV2fD4bib-lB6J`&2L*eWgPA9nY
z@s#lDxKAqnnfIc3`sGU{LIcN;T>t(4v{XNC{QGp-ugoC$8l!ho
z#$0~YkM$2DL93-|351RTyq;|Ha^cUbV{G@RpG&&i)3HbHuiv6RgcKiY4{U0OfSLr(
z+wOnoB=PDr9yRR_+LUqxU-#gu;*yc19muIPxNBoB6*HF1J7s;*?p+o4plnwsAebX*
z*7M$NA}!WQklffWce;ikyhW;mZ-5$q2Bdy+M@&h?AQ^!$mx7=T-dD!QDNTnhMo9Gf
zGOLGv=HWi^u(zBg?eI&V5$9rSLNpI(Lmq#;tx~@)$YYktL*eCR=n0jg*2lppSIFC@Buh@EX8a$Z~aW9+*
z6VI4id*aR?e;bRKKpl6_{3YzF5dVoql>R#`VrgJx<@DD=(B9tK!szc8!gjW%7G{5f
z_7?wnprc*l4N6Ltfu*P@l@iD)@)$
z9p~qtZRx2Kq~qw*6Pda(aMG>}ABn@s{mITLr=v}tKSx{1z7Xm?N)S4LVh;C!;503{
z1Pt1-q}-aMpuOA1%J0V00m4w8^~`_M!}gv;8$ra^+UZtmFM!Vas;kp)pv#-kFh4;5
zHq_R>YJtv_=6;zjCU?Nc@}U99s;XfgO}9LBdNre#<9SYAMysk?l;HpG9#wJDYho4Fy+R%$=x(t