From e2ddaaf3094a283e1f2b65593364697699c9aef4 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Mon, 19 Aug 2024 15:42:33 +0200 Subject: [PATCH 01/49] Started planning out program --- .../java/com/booleanuk/core/domain-model.md | 13 ++++++ .../booleanuk/core/gleek-class-diagram.txt | 44 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/main/java/com/booleanuk/core/domain-model.md create mode 100644 src/main/java/com/booleanuk/core/gleek-class-diagram.txt diff --git a/src/main/java/com/booleanuk/core/domain-model.md b/src/main/java/com/booleanuk/core/domain-model.md new file mode 100644 index 000000000..9fc1cb24a --- /dev/null +++ b/src/main/java/com/booleanuk/core/domain-model.md @@ -0,0 +1,13 @@ +| Classes | Variables | Methods | Scenario | Outcome | +|--------------|-------------------------------------|-----------------------------------|--------------------------------------------------|--------------------------------------------| +| `Basket` | `List bagels` | `addBagel(Bagel bagel)` | there is space in bagels | bagel is added | +| | `List bagels` | | there's no space in bagels | user notified that bagel not added | +| `Controller` | `Basket basket, View view` | `basket.removeBagel(Bagel bagel)` | view.removeBagel(...) specifies a specific bagel | specified bagel is removed | +| | | | view.removeBagel(...) returns null (no bagel) | user is notified that no bagel was removed | +| | | | | | +| | | | | | +| | | `order()` | items in bagels | order sent to store | +| | | | bagels list empty | warning given | +| | | `removeBagel(String bagelType)` | bagel of bagelType in bagels list | one bagel of bagelType is removed | +| | | | no bagel of bagelType in bagels list | no bagel removed, user warned | +| | `int basketSize, boolean userIsBob` | `setBasketSize(int newSize)` | basketSize set to newSize | | \ No newline at end of file diff --git a/src/main/java/com/booleanuk/core/gleek-class-diagram.txt b/src/main/java/com/booleanuk/core/gleek-class-diagram.txt new file mode 100644 index 000000000..cf9dd0cbf --- /dev/null +++ b/src/main/java/com/booleanuk/core/gleek-class-diagram.txt @@ -0,0 +1,44 @@ +Controller + - view: View + - prices: Hashmap> + - basket: Basket + - basketSize: int + +changeBasketSize(int size): void + +View + -scanner: Scanner + +validateManager():boolean + +mainMenu(): char + +addBagel(prices: Hashmap): void + +removeBagel(List bagels): Bagel + -listBagels(List bagels): void + +Bagel + - type: BagelVariant + - filling: FillingVariant + +calculateCost():float + +Basket + - bagels: List + - maxSize: int + +addBagel(Bagel bagel): void + +removeBagel(Bagel bagel): void + +calculateCost(): float + +BagelVariant:service + Onion + Plain + Everything + Sesame + +FillingVariant:service + Bacon + Egg + Cheese + CreamCheese + +Controller-->View +Bagel-->BagelVariant +Bagel-->FillingVariant +Basket-->Bagel +Controller-->Basket From 33a6cf4eca856db397afddefde43531363d4305d Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 12:04:11 +0200 Subject: [PATCH 02/49] Initial commit --- src/main/java/com/booleanuk/core/Bagel.java | 11 ++++++++ .../java/com/booleanuk/core/BagelVariant.java | 8 ++++++ src/main/java/com/booleanuk/core/Basket.java | 13 ++++++++++ .../java/com/booleanuk/core/Controller.java | 21 +++++++++++++++ .../com/booleanuk/core/FillingVariant.java | 8 ++++++ src/main/java/com/booleanuk/core/View.java | 11 ++++++++ .../java/com/booleanuk/core/domain-model.md | 26 +++++++++---------- .../booleanuk/core/gleek-class-diagram.txt | 2 +- .../java/com/booleanuk/core/BagelTest.java | 7 +++++ .../java/com/booleanuk/core/BasketTest.java | 7 +++++ .../com/booleanuk/core/ControllerTest.java | 7 +++++ 11 files changed, 107 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/booleanuk/core/Bagel.java create mode 100644 src/main/java/com/booleanuk/core/BagelVariant.java create mode 100644 src/main/java/com/booleanuk/core/Basket.java create mode 100644 src/main/java/com/booleanuk/core/Controller.java create mode 100644 src/main/java/com/booleanuk/core/FillingVariant.java create mode 100644 src/main/java/com/booleanuk/core/View.java create mode 100644 src/test/java/com/booleanuk/core/BagelTest.java create mode 100644 src/test/java/com/booleanuk/core/BasketTest.java create mode 100644 src/test/java/com/booleanuk/core/ControllerTest.java diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java new file mode 100644 index 000000000..115692471 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -0,0 +1,11 @@ +package com.booleanuk.core; + +public class Bagel { + private BagelVariant bagelType; + private FillingVariant fillingType; + + public Bagel(BagelVariant bv, FillingVariant fv) { + this.bagelType = bv; + this.fillingType = fv; + } +} diff --git a/src/main/java/com/booleanuk/core/BagelVariant.java b/src/main/java/com/booleanuk/core/BagelVariant.java new file mode 100644 index 000000000..2689dde81 --- /dev/null +++ b/src/main/java/com/booleanuk/core/BagelVariant.java @@ -0,0 +1,8 @@ +package com.booleanuk.core; + +public enum BagelVariant { + ONION, + PLAIN, + EVERYTHING, + SESAME +} diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java new file mode 100644 index 000000000..a6a3855c7 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -0,0 +1,13 @@ +package com.booleanuk.core; + +import java.util.ArrayList; + +public class Basket { + private ArrayList bagels; + private int basketSize; + + public Basket() { + bagels = new ArrayList<>(); + basketSize = 12; + } +} diff --git a/src/main/java/com/booleanuk/core/Controller.java b/src/main/java/com/booleanuk/core/Controller.java new file mode 100644 index 000000000..9f795a9d5 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Controller.java @@ -0,0 +1,21 @@ +package com.booleanuk.core; + +import java.util.HashMap; + +public class Controller { + private View view; + private HashMap prices; + private Basket basket; + private int basketSize; + + public Controller(View view, HashMap prices, Basket basket, int basketSize) { + this.view = view; + this.prices = prices; + this.basket = basket; + this.basketSize = basketSize; + } + + public static void main(String[] args) { + + } +} diff --git a/src/main/java/com/booleanuk/core/FillingVariant.java b/src/main/java/com/booleanuk/core/FillingVariant.java new file mode 100644 index 000000000..57868ee75 --- /dev/null +++ b/src/main/java/com/booleanuk/core/FillingVariant.java @@ -0,0 +1,8 @@ +package com.booleanuk.core; + +public enum FillingVariant { + BACON, + EGG, + CHEESE, + CREAM_CHEESE +} diff --git a/src/main/java/com/booleanuk/core/View.java b/src/main/java/com/booleanuk/core/View.java new file mode 100644 index 000000000..4efce5369 --- /dev/null +++ b/src/main/java/com/booleanuk/core/View.java @@ -0,0 +1,11 @@ +package com.booleanuk.core; + +import java.util.Scanner; + +public class View { + private Scanner scanner; + + public View() { + scanner = new Scanner(System.in); + } +} diff --git a/src/main/java/com/booleanuk/core/domain-model.md b/src/main/java/com/booleanuk/core/domain-model.md index 9fc1cb24a..d5cccad63 100644 --- a/src/main/java/com/booleanuk/core/domain-model.md +++ b/src/main/java/com/booleanuk/core/domain-model.md @@ -1,13 +1,13 @@ -| Classes | Variables | Methods | Scenario | Outcome | -|--------------|-------------------------------------|-----------------------------------|--------------------------------------------------|--------------------------------------------| -| `Basket` | `List bagels` | `addBagel(Bagel bagel)` | there is space in bagels | bagel is added | -| | `List bagels` | | there's no space in bagels | user notified that bagel not added | -| `Controller` | `Basket basket, View view` | `basket.removeBagel(Bagel bagel)` | view.removeBagel(...) specifies a specific bagel | specified bagel is removed | -| | | | view.removeBagel(...) returns null (no bagel) | user is notified that no bagel was removed | -| | | | | | -| | | | | | -| | | `order()` | items in bagels | order sent to store | -| | | | bagels list empty | warning given | -| | | `removeBagel(String bagelType)` | bagel of bagelType in bagels list | one bagel of bagelType is removed | -| | | | no bagel of bagelType in bagels list | no bagel removed, user warned | -| | `int basketSize, boolean userIsBob` | `setBasketSize(int newSize)` | basketSize set to newSize | | \ No newline at end of file +| Classes | Variables | Methods | Scenario | Outcome | +|--------------|----------------------------|-------------------------------------------|--------------------------------------------------|-------------------------------------------------| +| `Basket` | `List bagels` | `addBagel(Bagel bagel)` | there is space in bagels | bagel is added | +| | `List bagels` | | there's no space in bagels | user notified that bagels has no space | +| `Controller` | `Basket basket, View view` | `basket.removeBagel(Bagel bagel)` | view.removeBagel(...) specifies a specific bagel | specified bagel is removed | +| | | | basket has no bagels | user is notified: no bagel to remove | +| | `int basketSize` | `changeBasketSize(int size)` | basket has fewer bagels than size | size is changed | +| | | | basket has more bagels thn size | basket is emptied, then size is changed | +| `Basket` | | `calculateCost()` | items in bagels | cost is calculated and returned | +| | | | bagels list empty | 0 is returned | +| `View` | | `AddBagel(Hashmap prices)` | user agrees to price | requested bagel is returned to controller | +| | | | user disagrees to price | no bagel is returned or added | +| | | | user wants to add a bagel | all options+costs are displayed to choose from | \ No newline at end of file diff --git a/src/main/java/com/booleanuk/core/gleek-class-diagram.txt b/src/main/java/com/booleanuk/core/gleek-class-diagram.txt index cf9dd0cbf..db37a5ba1 100644 --- a/src/main/java/com/booleanuk/core/gleek-class-diagram.txt +++ b/src/main/java/com/booleanuk/core/gleek-class-diagram.txt @@ -9,7 +9,7 @@ View -scanner: Scanner +validateManager():boolean +mainMenu(): char - +addBagel(prices: Hashmap): void + +addBagel(Hashmap prices): Bagel +removeBagel(List bagels): Bagel -listBagels(List bagels): void diff --git a/src/test/java/com/booleanuk/core/BagelTest.java b/src/test/java/com/booleanuk/core/BagelTest.java new file mode 100644 index 000000000..1115e606a --- /dev/null +++ b/src/test/java/com/booleanuk/core/BagelTest.java @@ -0,0 +1,7 @@ +package com.booleanuk.core; + +import static org.junit.jupiter.api.Assertions.*; + +class BagelTest { + +} \ No newline at end of file diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java new file mode 100644 index 000000000..38214a822 --- /dev/null +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -0,0 +1,7 @@ +package com.booleanuk.core; + +import static org.junit.jupiter.api.Assertions.*; + +class BasketTest { + +} \ No newline at end of file diff --git a/src/test/java/com/booleanuk/core/ControllerTest.java b/src/test/java/com/booleanuk/core/ControllerTest.java new file mode 100644 index 000000000..2ffa5f3ba --- /dev/null +++ b/src/test/java/com/booleanuk/core/ControllerTest.java @@ -0,0 +1,7 @@ +package com.booleanuk.core; + +import static org.junit.jupiter.api.Assertions.*; + +class ControllerTest { + +} \ No newline at end of file From 51e3e9dac2e563693bf72396d2b9fb809b237d54 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 12:32:44 +0200 Subject: [PATCH 03/49] RED: testAddBagel --- src/test/java/com/booleanuk/core/BasketTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 38214a822..2ae913488 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -1,7 +1,18 @@ package com.booleanuk.core; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + import static org.junit.jupiter.api.Assertions.*; class BasketTest { + @Test + public void testAddBagel() { + Basket basket = new Basket(12); + Bagel bagel = new Bagel(BagelVariant.EVERYTHING, FillingVariant.BACON); + Assertions.assertEquals(0, basket.size()); + basket.addBagel(bagel); + Assertions.assertEquals(1, basket.size()); + } } \ No newline at end of file From 3e6bb363e8b282bcf3fc43ab8f210b8ead155d21 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 12:33:19 +0200 Subject: [PATCH 04/49] GREEN: testAddBagel passed --- src/main/java/com/booleanuk/core/Basket.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index a6a3855c7..c2c3eca91 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -6,8 +6,16 @@ public class Basket { private ArrayList bagels; private int basketSize; - public Basket() { + public Basket(int basketSize) { bagels = new ArrayList<>(); - basketSize = 12; + this.basketSize = basketSize; + } + + public int size() { + return bagels.size(); + } + + public void addBagel(Bagel bagel) { + bagels.add(bagel); } } From 09c679ab91ee7340c58433d950bb192d9dcfc000 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 14:15:50 +0200 Subject: [PATCH 05/49] REFACTOR: Redesigned Bagel and how the data is stored and added a ui to access previous method stored --- src/main/java/com/booleanuk/core/Bagel.java | 10 ++-- .../java/com/booleanuk/core/BagelVariant.java | 8 --- .../java/com/booleanuk/core/Controller.java | 40 ++++++++++++-- .../com/booleanuk/core/FillingVariant.java | 8 --- src/main/java/com/booleanuk/core/Triple.java | 4 ++ src/main/java/com/booleanuk/core/View.java | 54 +++++++++++++++++++ .../java/com/booleanuk/core/BasketTest.java | 2 +- 7 files changed, 99 insertions(+), 27 deletions(-) delete mode 100644 src/main/java/com/booleanuk/core/BagelVariant.java delete mode 100644 src/main/java/com/booleanuk/core/FillingVariant.java create mode 100644 src/main/java/com/booleanuk/core/Triple.java diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java index 115692471..9e4a8bced 100644 --- a/src/main/java/com/booleanuk/core/Bagel.java +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -1,11 +1,11 @@ package com.booleanuk.core; public class Bagel { - private BagelVariant bagelType; - private FillingVariant fillingType; + private Triple bagelType; + private Triple fillingType; - public Bagel(BagelVariant bv, FillingVariant fv) { - this.bagelType = bv; - this.fillingType = fv; + public Bagel(Triple bagelType, Triple fillingType) { + this.bagelType = bagelType; + this.fillingType = fillingType; } } diff --git a/src/main/java/com/booleanuk/core/BagelVariant.java b/src/main/java/com/booleanuk/core/BagelVariant.java deleted file mode 100644 index 2689dde81..000000000 --- a/src/main/java/com/booleanuk/core/BagelVariant.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.booleanuk.core; - -public enum BagelVariant { - ONION, - PLAIN, - EVERYTHING, - SESAME -} diff --git a/src/main/java/com/booleanuk/core/Controller.java b/src/main/java/com/booleanuk/core/Controller.java index 9f795a9d5..d412b768d 100644 --- a/src/main/java/com/booleanuk/core/Controller.java +++ b/src/main/java/com/booleanuk/core/Controller.java @@ -1,21 +1,51 @@ package com.booleanuk.core; -import java.util.HashMap; +import java.util.*; public class Controller { - private View view; - private HashMap prices; + private final View view; + private static final HashMap> privatePrices = new HashMap<>() {{ + put("BGLO", new Triple<>("Bagel", "Onion", 0.49f)); + put("BGLP", new Triple<>("Bagel", "Plain", 0.39f)); + put("BGLE", new Triple<>("Bagel", "Everything", 0.49f)); + put("BGLS", new Triple<>("Bagel", "Sesame", 0.49f)); + put("FILB", new Triple<>("Filling", "Bacon", 0.12f)); + put("FILE", new Triple<>("Filling", "Egg", 0.12f)); + put("FILC", new Triple<>("Filling", "Cheese", 0.12f)); + put("FILX", new Triple<>("Filling", "Cream Cheese", 0.12f)); + put("FILS", new Triple<>("Filling", "Smoked Salmon", 0.12f)); + put("FILH", new Triple<>("Filling", "Ham", 0.12f)); + }}; + public static final Map> prices = Collections.unmodifiableMap(privatePrices); private Basket basket; private int basketSize; - public Controller(View view, HashMap prices, Basket basket, int basketSize) { + public Controller(View view, Basket basket, int basketSize) { this.view = view; - this.prices = prices; this.basket = basket; this.basketSize = basketSize; } public static void main(String[] args) { + int bSize = 12; + Controller controller = new Controller(new View(), new Basket(bSize), bSize); + controller.start(); + } + + private void start() { + boolean keepRunning = true; + while(keepRunning) { + int chosenOption = view.mainMenu(); + switch (chosenOption) { + case 1: + basket.addBagel(view.addBagel()); + break; + default: + keepRunning = false; + view.printExit(); + break; + } + } } } diff --git a/src/main/java/com/booleanuk/core/FillingVariant.java b/src/main/java/com/booleanuk/core/FillingVariant.java deleted file mode 100644 index 57868ee75..000000000 --- a/src/main/java/com/booleanuk/core/FillingVariant.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.booleanuk.core; - -public enum FillingVariant { - BACON, - EGG, - CHEESE, - CREAM_CHEESE -} diff --git a/src/main/java/com/booleanuk/core/Triple.java b/src/main/java/com/booleanuk/core/Triple.java new file mode 100644 index 000000000..571e719e2 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Triple.java @@ -0,0 +1,4 @@ +package com.booleanuk.core; + +public record Triple(A a, B b, C c) { +} diff --git a/src/main/java/com/booleanuk/core/View.java b/src/main/java/com/booleanuk/core/View.java index 4efce5369..0a02cff85 100644 --- a/src/main/java/com/booleanuk/core/View.java +++ b/src/main/java/com/booleanuk/core/View.java @@ -1,5 +1,6 @@ package com.booleanuk.core; +import java.util.ArrayList; import java.util.Scanner; public class View { @@ -8,4 +9,57 @@ public class View { public View() { scanner = new Scanner(System.in); } + + public int mainMenu() { + System.out.println("What do you want to do?"); + System.out.println("1. Add Bagel"); + + return getInt(); + } + + public void printExit() { + System.out.println("Exiting..."); + } + + public int getInt() { + int output; + try { + output = scanner.nextInt(); + } catch (Exception e) { + System.err.println("Something went wrong"); + output = Integer.MIN_VALUE; + } + return output; + } + + public Bagel addBagel() { + System.out.println("Choose a bagel"); + Triple bagelType = displayPrices("Bagel"); + System.out.println("Choose a filling"); + Triple fillingType = displayPrices("Filling"); + + return new Bagel(bagelType, fillingType); + } + + private Triple displayPrices(String filter) { + ArrayList> temp = new ArrayList<>(); + int increment = 1; + for (Triple t: Controller.prices.values()) { + if (t.a().equals(filter) || filter.isEmpty()) { + System.out.printf("%h. %s: $%.2f%n", increment, t.b(), t.c()); + temp.add(t); + increment++; + } + } + if (temp.isEmpty()) { + System.out.println("No options available"); + return null; + } + System.out.println("Please write what you want"); + int output = getInt() - 1; + if (output == temp.size()) { + return null; + } + return temp.get(output); + } } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 2ae913488..afb679755 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -10,7 +10,7 @@ class BasketTest { @Test public void testAddBagel() { Basket basket = new Basket(12); - Bagel bagel = new Bagel(BagelVariant.EVERYTHING, FillingVariant.BACON); + Bagel bagel = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); Assertions.assertEquals(0, basket.size()); basket.addBagel(bagel); Assertions.assertEquals(1, basket.size()); From b2610504ff9673103cff007148e13de6ece2e454 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 14:37:09 +0200 Subject: [PATCH 06/49] RED: testAddBagelToFullBasket --- src/test/java/com/booleanuk/core/BasketTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index afb679755..c1c3f2c3f 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -15,4 +15,16 @@ public void testAddBagel() { basket.addBagel(bagel); Assertions.assertEquals(1, basket.size()); } + + @Test + public void testAddBagelToFullBasket() { + Basket basket = new Basket(1); + Bagel bagel1 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); + Bagel bagel2 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); + Assertions.assertEquals(0, basket.size()); + basket.addBagel(bagel1); + Assertions.assertEquals(1, basket.size()); + basket.addBagel(bagel2); + Assertions.assertEquals(1, basket.size()); + } } \ No newline at end of file From 8b7f9c293ef92561bdc292cc594d6fb71076ee14 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 14:52:34 +0200 Subject: [PATCH 07/49] GREEN: testAddBagelToFullBasket passes --- src/main/java/com/booleanuk/core/Basket.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index c2c3eca91..501e958fa 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -16,6 +16,8 @@ public int size() { } public void addBagel(Bagel bagel) { - bagels.add(bagel); + if (bagels.size() < basketSize) { + bagels.add(bagel); + } } } From 98b5ffd561152f176d17aa3528cdfbb641b5ab0f Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 14:52:46 +0200 Subject: [PATCH 08/49] REFACTOR: Added warning to not add more bagels into the controller and view --- src/main/java/com/booleanuk/core/Controller.java | 6 +++++- src/main/java/com/booleanuk/core/View.java | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/Controller.java b/src/main/java/com/booleanuk/core/Controller.java index d412b768d..a713db3fb 100644 --- a/src/main/java/com/booleanuk/core/Controller.java +++ b/src/main/java/com/booleanuk/core/Controller.java @@ -39,7 +39,11 @@ private void start() { int chosenOption = view.mainMenu(); switch (chosenOption) { case 1: - basket.addBagel(view.addBagel()); + if (basket.size() < basketSize) { + basket.addBagel(view.addBagel()); + } else { + view.basketFull(); + } break; default: keepRunning = false; diff --git a/src/main/java/com/booleanuk/core/View.java b/src/main/java/com/booleanuk/core/View.java index 0a02cff85..96431816c 100644 --- a/src/main/java/com/booleanuk/core/View.java +++ b/src/main/java/com/booleanuk/core/View.java @@ -62,4 +62,8 @@ private Triple displayPrices(String filter) { } return temp.get(output); } + + public void basektFull() { + System.out.println("Basket is full. You cannot add more bagels."); + } } From 8361604bce154f6705d8e8de28b3b3304b313955 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 14:53:46 +0200 Subject: [PATCH 09/49] typo --- src/main/java/com/booleanuk/core/View.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/View.java b/src/main/java/com/booleanuk/core/View.java index 96431816c..3de5139f1 100644 --- a/src/main/java/com/booleanuk/core/View.java +++ b/src/main/java/com/booleanuk/core/View.java @@ -63,7 +63,7 @@ private Triple displayPrices(String filter) { return temp.get(output); } - public void basektFull() { + public void basketFull() { System.out.println("Basket is full. You cannot add more bagels."); } } From 641e5ba3458f21d051786ba758dd96f41068207f Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 14:55:29 +0200 Subject: [PATCH 10/49] RED: testRemoveBagel --- src/test/java/com/booleanuk/core/BasketTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index c1c3f2c3f..cbd66b485 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -27,4 +27,15 @@ public void testAddBagelToFullBasket() { basket.addBagel(bagel2); Assertions.assertEquals(1, basket.size()); } + + @Test + public void testRemoveBagel() { + Basket basket = new Basket(12); + Bagel bagel = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); + Assertions.assertEquals(0, basket.size()); + basket.addBagel(bagel); + Assertions.assertEquals(1, basket.size()); + basket.removeBagel(bagel); + Assertions.assertEquals(0, basket.size()); + } } \ No newline at end of file From 7aa15c229b66ed85dd703dcabfe36da46910a0c9 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 14:56:59 +0200 Subject: [PATCH 11/49] GREEN: testRemoveBagel passes --- src/main/java/com/booleanuk/core/Basket.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 501e958fa..216a6ba8f 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -20,4 +20,8 @@ public void addBagel(Bagel bagel) { bagels.add(bagel); } } + + public void removeBagel(Bagel bagel) { + bagels.remove(bagel); + } } From 280c64f9c50668186270dd32dceb3a582d0611eb Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 15:07:08 +0200 Subject: [PATCH 12/49] RED: testGetBagelsIsClone --- .../java/com/booleanuk/core/BasketTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index cbd66b485..aeceed386 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -3,6 +3,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.util.ArrayList; + import static org.junit.jupiter.api.Assertions.*; class BasketTest { @@ -38,4 +40,19 @@ public void testRemoveBagel() { basket.removeBagel(bagel); Assertions.assertEquals(0, basket.size()); } + + @Test + public void testGetBagelsIsClone() { + Basket basket = new Basket(12); + Bagel bagel1 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); + Bagel bagel2 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); + Assertions.assertEquals(0, basket.size()); + basket.addBagel(bagel1); + basket.addBagel(bagel2); + Assertions.assertEquals(2, basket.size()); + ArrayList bagelsCopy = basket.getBagels(); + bagelsCopy.remove(bagel1); + Assertions.assertEquals(2, basket.size()); + Assertions.assertEquals(1, bagelsCopy.size()); + } } \ No newline at end of file From 3967409dd0b7cb41847e65da68f7b049557efb80 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 15:07:22 +0200 Subject: [PATCH 13/49] GREEN: testGetBagelsIsClone passes --- src/main/java/com/booleanuk/core/Basket.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 216a6ba8f..b339257a0 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -24,4 +24,8 @@ public void addBagel(Bagel bagel) { public void removeBagel(Bagel bagel) { bagels.remove(bagel); } + + public ArrayList getBagels() { + return (ArrayList) bagels.clone(); + } } From 5b8688397246b7fe907c7f18f2685412eede12e5 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 15:17:56 +0200 Subject: [PATCH 14/49] RED: testCalculateCost --- src/test/java/com/booleanuk/core/BagelTest.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/booleanuk/core/BagelTest.java b/src/test/java/com/booleanuk/core/BagelTest.java index 1115e606a..abcb1d459 100644 --- a/src/test/java/com/booleanuk/core/BagelTest.java +++ b/src/test/java/com/booleanuk/core/BagelTest.java @@ -1,7 +1,14 @@ package com.booleanuk.core; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + import static org.junit.jupiter.api.Assertions.*; class BagelTest { - + @Test + public void testCalculateCost() { + Bagel bagel = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); + Assertions.assertEquals(0.61f, bagel.calculateCost(), 0.001); + } } \ No newline at end of file From deeb7dee45cbef41c0a837715553d5b2e3f2b494 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 15:18:17 +0200 Subject: [PATCH 15/49] GREEN: testCalculateCost passes and made a toString() --- src/main/java/com/booleanuk/core/Bagel.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java index 9e4a8bced..7ff8265d3 100644 --- a/src/main/java/com/booleanuk/core/Bagel.java +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -1,11 +1,24 @@ package com.booleanuk.core; public class Bagel { - private Triple bagelType; - private Triple fillingType; + private final Triple bagelType; + private final Triple fillingType; public Bagel(Triple bagelType, Triple fillingType) { this.bagelType = bagelType; this.fillingType = fillingType; } + + @Override + public String toString() { + return "Bagel{" + + "bagelType=" + bagelType.b() + + ", fillingType=" + fillingType.b() + + ", cost=" + calculateCost() + + '}'; + } + + public float calculateCost() { + return bagelType.c() + fillingType.c(); + } } From d6776e2ebe1a099b468e89d38cc697e7eb5adf60 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 15:24:09 +0200 Subject: [PATCH 16/49] REFACTOR: Added ui to use new code in tests --- .../java/com/booleanuk/core/Controller.java | 3 +++ src/main/java/com/booleanuk/core/View.java | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Controller.java b/src/main/java/com/booleanuk/core/Controller.java index a713db3fb..b972ebe50 100644 --- a/src/main/java/com/booleanuk/core/Controller.java +++ b/src/main/java/com/booleanuk/core/Controller.java @@ -45,6 +45,9 @@ private void start() { view.basketFull(); } break; + case 2: + basket.removeBagel(view.chooseBagel(basket.getBagels())); + break; default: keepRunning = false; view.printExit(); diff --git a/src/main/java/com/booleanuk/core/View.java b/src/main/java/com/booleanuk/core/View.java index 3de5139f1..6186d3f74 100644 --- a/src/main/java/com/booleanuk/core/View.java +++ b/src/main/java/com/booleanuk/core/View.java @@ -13,6 +13,7 @@ public View() { public int mainMenu() { System.out.println("What do you want to do?"); System.out.println("1. Add Bagel"); + System.out.println("2. Remove Bagel"); return getInt(); } @@ -66,4 +67,21 @@ private Triple displayPrices(String filter) { public void basketFull() { System.out.println("Basket is full. You cannot add more bagels."); } + + public Bagel chooseBagel(ArrayList bagels) { + if (bagels.isEmpty()) { + System.out.println("No options available"); + return null; + } + System.out.println("Choose a bagel"); + for (int i = 0; i < bagels.size(); i++) { + System.out.printf("%h. %s%n", i + 1, bagels.get(i).toString()); + } + System.out.println("Please write what you want"); + int output = getInt() - 1; + if (output == bagels.size()) { + return null; + } + return bagels.get(output); + } } From 31591d21d8607bf4291caec735f73d9dd589e296 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 15:52:53 +0200 Subject: [PATCH 17/49] RED: testRemoveNonexistentBagel --- src/test/java/com/booleanuk/core/BasketTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index aeceed386..a368853b9 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import java.util.ArrayList; +import java.util.NoSuchElementException; import static org.junit.jupiter.api.Assertions.*; @@ -41,6 +42,15 @@ public void testRemoveBagel() { Assertions.assertEquals(0, basket.size()); } + @Test + public void testRemoveNonexistentBagel() { + Basket basket = new Basket(12); + Bagel bagel1 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); + Bagel bagel2 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); + basket.addBagel(bagel1); + Assertions.assertThrows(NoSuchElementException.class, () -> basket.removeBagel(bagel2)); + } + @Test public void testGetBagelsIsClone() { Basket basket = new Basket(12); From 92d4325b3dc810097d60be4dfc90065dca72f1fe Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 15:53:24 +0200 Subject: [PATCH 18/49] GREEN: testRemoveNonexistentBagel passes --- src/main/java/com/booleanuk/core/Basket.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index b339257a0..ad8790fbd 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -1,6 +1,7 @@ package com.booleanuk.core; import java.util.ArrayList; +import java.util.NoSuchElementException; public class Basket { private ArrayList bagels; @@ -22,6 +23,9 @@ public void addBagel(Bagel bagel) { } public void removeBagel(Bagel bagel) { + if (!bagels.contains(bagel)) { + throw new NoSuchElementException("No such bagel exists"); + } bagels.remove(bagel); } From f64e572d472168c6953d9fdd4d3083daaa0de384 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 16:01:02 +0200 Subject: [PATCH 19/49] REFACTOR: fixed unsafe cast --- src/main/java/com/booleanuk/core/Basket.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index ad8790fbd..84c893fc6 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -30,6 +30,6 @@ public void removeBagel(Bagel bagel) { } public ArrayList getBagels() { - return (ArrayList) bagels.clone(); + return new ArrayList<>(bagels); } } From 4e3b61039de9834911f4425dc5c767fbb46f75f7 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 16:04:57 +0200 Subject: [PATCH 20/49] RED: testChangeSize --- src/test/java/com/booleanuk/core/BasketTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index a368853b9..7c59f7c70 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -65,4 +65,19 @@ public void testGetBagelsIsClone() { Assertions.assertEquals(2, basket.size()); Assertions.assertEquals(1, bagelsCopy.size()); } + + @Test + public void testChangeSize() { + Basket basket = new Basket(1); + Bagel bagel1 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); + Bagel bagel2 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); + Assertions.assertEquals(0, basket.size()); + basket.addBagel(bagel1); + Assertions.assertEquals(1, basket.size()); + basket.addBagel(bagel2); + Assertions.assertEquals(1, basket.size()); + basket.setBasketSize(12); + basket.addBagel(bagel2); + Assertions.assertEquals(2, basket.size()); + } } \ No newline at end of file From 5f5a227c0d46fde3bda3ac317716029f1768aa77 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 16:05:09 +0200 Subject: [PATCH 21/49] GREEN: testChangeSize passes --- src/main/java/com/booleanuk/core/Basket.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 84c893fc6..d35f38f71 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -32,4 +32,8 @@ public void removeBagel(Bagel bagel) { public ArrayList getBagels() { return new ArrayList<>(bagels); } + + public void setBasketSize(int basketSize) { + this.basketSize = basketSize; + } } From 6c281a09f4a9067d38c54f0b4d0d0369a981d36f Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 16:07:53 +0200 Subject: [PATCH 22/49] RED: testChangeSizeToSmallerThanNumberOfBagels --- src/test/java/com/booleanuk/core/BasketTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 7c59f7c70..3e3e04283 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -80,4 +80,17 @@ public void testChangeSize() { basket.addBagel(bagel2); Assertions.assertEquals(2, basket.size()); } + + @Test + public void testChangeSizeToSmallerThanNumberOfBagels() { + Basket basket = new Basket(2); + Bagel bagel1 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); + Bagel bagel2 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); + Assertions.assertEquals(0, basket.size()); + basket.addBagel(bagel1); + basket.addBagel(bagel2); + Assertions.assertEquals(2, basket.size()); + basket.setBasketSize(1); + Assertions.assertEquals(0, basket.size()); + } } \ No newline at end of file From 0b23a8d18920e66482a39039d4394de213f3c0b9 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 16:08:05 +0200 Subject: [PATCH 23/49] GREEN: testChangeSizeToSmallerThanNumberOfBagels passes --- src/main/java/com/booleanuk/core/Basket.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index d35f38f71..26fc46c7d 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -34,6 +34,9 @@ public ArrayList getBagels() { } public void setBasketSize(int basketSize) { + if (basketSize < bagels.size()) { + bagels.clear(); + } this.basketSize = basketSize; } } From 094f60fd15534a0a36bab39f9d88d958c1c99c9e Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Tue, 20 Aug 2024 16:11:07 +0200 Subject: [PATCH 24/49] REFACTOR: Added ui to be able to change basket size --- src/main/java/com/booleanuk/core/Controller.java | 3 +++ src/main/java/com/booleanuk/core/View.java | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Controller.java b/src/main/java/com/booleanuk/core/Controller.java index b972ebe50..e9cc1d678 100644 --- a/src/main/java/com/booleanuk/core/Controller.java +++ b/src/main/java/com/booleanuk/core/Controller.java @@ -48,6 +48,9 @@ private void start() { case 2: basket.removeBagel(view.chooseBagel(basket.getBagels())); break; + case 3: + basket.setBasketSize(view.getNewBasketSize()); + break; default: keepRunning = false; view.printExit(); diff --git a/src/main/java/com/booleanuk/core/View.java b/src/main/java/com/booleanuk/core/View.java index 6186d3f74..1aaf3fa04 100644 --- a/src/main/java/com/booleanuk/core/View.java +++ b/src/main/java/com/booleanuk/core/View.java @@ -14,6 +14,7 @@ public int mainMenu() { System.out.println("What do you want to do?"); System.out.println("1. Add Bagel"); System.out.println("2. Remove Bagel"); + System.out.println("3. Change basket size"); return getInt(); } @@ -84,4 +85,10 @@ public Bagel chooseBagel(ArrayList bagels) { } return bagels.get(output); } + + public int getNewBasketSize() { + System.out.println("What should the new basket size be?"); + System.out.println("WARNING: Changing basket size to a number smaller than the current number of bagels will empty the current basket!"); + return getInt(); + } } From 008e42fc25e6e8d7f8b09ae3b091c43d58bc9a27 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Wed, 21 Aug 2024 14:02:05 +0200 Subject: [PATCH 25/49] typo --- src/main/java/com/booleanuk/core/domain-model.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/domain-model.md b/src/main/java/com/booleanuk/core/domain-model.md index d5cccad63..714b943d3 100644 --- a/src/main/java/com/booleanuk/core/domain-model.md +++ b/src/main/java/com/booleanuk/core/domain-model.md @@ -5,7 +5,7 @@ | `Controller` | `Basket basket, View view` | `basket.removeBagel(Bagel bagel)` | view.removeBagel(...) specifies a specific bagel | specified bagel is removed | | | | | basket has no bagels | user is notified: no bagel to remove | | | `int basketSize` | `changeBasketSize(int size)` | basket has fewer bagels than size | size is changed | -| | | | basket has more bagels thn size | basket is emptied, then size is changed | +| | | | basket has more bagels than size | basket is emptied, then size is changed | | `Basket` | | `calculateCost()` | items in bagels | cost is calculated and returned | | | | | bagels list empty | 0 is returned | | `View` | | `AddBagel(Hashmap prices)` | user agrees to price | requested bagel is returned to controller | From 7a1621b33798767bcd3bd84123b006c41cb08e22 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Wed, 21 Aug 2024 14:09:35 +0200 Subject: [PATCH 26/49] RED: testCalculateCost --- src/test/java/com/booleanuk/core/BasketTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 3e3e04283..93f063041 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -93,4 +93,15 @@ public void testChangeSizeToSmallerThanNumberOfBagels() { basket.setBasketSize(1); Assertions.assertEquals(0, basket.size()); } + + @Test + public void testCalculateCost() { + Basket basket = new Basket(2); + Bagel bagel1 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); + Bagel bagel2 = new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB")); + basket.addBagel(bagel1); + Assertions.assertEquals(0.61f, basket.calculateCost(), 0.001); + basket.addBagel(bagel2); + Assertions.assertEquals(1.12f, basket.calculateCost(), 0.001); + } } \ No newline at end of file From 28fcd7f665338d098962d99d4a9727041f690407 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Wed, 21 Aug 2024 14:09:52 +0200 Subject: [PATCH 27/49] GREEN: testCalculateCost passes --- src/main/java/com/booleanuk/core/Basket.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 26fc46c7d..6730f681e 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -39,4 +39,12 @@ public void setBasketSize(int basketSize) { } this.basketSize = basketSize; } + + public float calculateCost() { + float sum = 0.0f; + for (Bagel b: bagels) { + sum += b.calculateCost(); + } + return sum; + } } From 7837a7be3d6af7f2b0ab35542086aef119a49a3e Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Wed, 21 Aug 2024 14:12:24 +0200 Subject: [PATCH 28/49] REFACTOR: testCalculateCostOnEmptyBasket to comply with domain model --- src/test/java/com/booleanuk/core/BasketTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 93f063041..70c69ab09 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -104,4 +104,10 @@ public void testCalculateCost() { basket.addBagel(bagel2); Assertions.assertEquals(1.12f, basket.calculateCost(), 0.001); } + + @Test + public void testCalculateCostOnEmptyBasket() { + Basket basket = new Basket(2); + Assertions.assertEquals(0.0f, basket.calculateCost(), 0.001); + } } \ No newline at end of file From 05e8763173101fe2a9c69a267756723ea9352b52 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Wed, 21 Aug 2024 15:32:47 +0200 Subject: [PATCH 29/49] REFACTOR: improved ui --- .../java/com/booleanuk/core/Controller.java | 14 +++++++++++-- src/main/java/com/booleanuk/core/View.java | 21 +++++++++++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Controller.java b/src/main/java/com/booleanuk/core/Controller.java index e9cc1d678..ba78d2958 100644 --- a/src/main/java/com/booleanuk/core/Controller.java +++ b/src/main/java/com/booleanuk/core/Controller.java @@ -40,17 +40,27 @@ private void start() { switch (chosenOption) { case 1: if (basket.size() < basketSize) { - basket.addBagel(view.addBagel()); + Bagel b = view.addBagel(); + if (b != null) { + basket.addBagel(b); + } } else { view.basketFull(); } break; case 2: - basket.removeBagel(view.chooseBagel(basket.getBagels())); + if(basket.size() > 0) { + basket.removeBagel(view.chooseBagel(basket.getBagels())); + } else { + view.emptyBasket(); + } break; case 3: basket.setBasketSize(view.getNewBasketSize()); break; + case 4: + view.printPrice(basket.calculateCost()); + break; default: keepRunning = false; view.printExit(); diff --git a/src/main/java/com/booleanuk/core/View.java b/src/main/java/com/booleanuk/core/View.java index 1aaf3fa04..088453e87 100644 --- a/src/main/java/com/booleanuk/core/View.java +++ b/src/main/java/com/booleanuk/core/View.java @@ -15,6 +15,7 @@ public int mainMenu() { System.out.println("1. Add Bagel"); System.out.println("2. Remove Bagel"); System.out.println("3. Change basket size"); + System.out.println("4. See total cost"); return getInt(); } @@ -39,8 +40,16 @@ public Bagel addBagel() { Triple bagelType = displayPrices("Bagel"); System.out.println("Choose a filling"); Triple fillingType = displayPrices("Filling"); - - return new Bagel(bagelType, fillingType); + Bagel b = new Bagel(bagelType, fillingType); + System.out.printf("It will cost $%.2f, is this ok?%n", b.calculateCost()); + System.out.println("1. Yes"); + System.out.println("2. No"); + int ans = getInt(); + if (ans == 1) { + return b; + } else { + return null; + } } private Triple displayPrices(String filter) { @@ -91,4 +100,12 @@ public int getNewBasketSize() { System.out.println("WARNING: Changing basket size to a number smaller than the current number of bagels will empty the current basket!"); return getInt(); } + + public void printPrice(float price) { + System.out.printf("The total cost is $%.2f.%n", price); + } + + public void emptyBasket() { + System.out.println("Your basket is empty."); + } } From b83e9435c44441bfb230e200ab0c786f4dde34a2 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Thu, 22 Aug 2024 10:42:15 +0200 Subject: [PATCH 30/49] REFACTOR: made bagel into product to more general in preparation of extension --- src/main/java/com/booleanuk/core/Bagel.java | 2 +- src/main/java/com/booleanuk/core/Basket.java | 32 ++++++++--------- .../java/com/booleanuk/core/Controller.java | 4 +-- src/main/java/com/booleanuk/core/Product.java | 5 +++ src/main/java/com/booleanuk/core/View.java | 2 +- .../java/com/booleanuk/core/BasketTest.java | 36 +++++++++---------- .../com/booleanuk/core/ControllerTest.java | 7 ---- 7 files changed, 42 insertions(+), 46 deletions(-) create mode 100644 src/main/java/com/booleanuk/core/Product.java delete mode 100644 src/test/java/com/booleanuk/core/ControllerTest.java diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java index 7ff8265d3..8f4c4bb6e 100644 --- a/src/main/java/com/booleanuk/core/Bagel.java +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -1,6 +1,6 @@ package com.booleanuk.core; -public class Bagel { +public class Bagel implements Product { private final Triple bagelType; private final Triple fillingType; diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 6730f681e..89ebc9f59 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -4,46 +4,46 @@ import java.util.NoSuchElementException; public class Basket { - private ArrayList bagels; + private final ArrayList products; private int basketSize; public Basket(int basketSize) { - bagels = new ArrayList<>(); + products = new ArrayList<>(); this.basketSize = basketSize; } public int size() { - return bagels.size(); + return products.size(); } - public void addBagel(Bagel bagel) { - if (bagels.size() < basketSize) { - bagels.add(bagel); + public void addProduct(Product product) { + if (products.size() < basketSize) { + products.add(product); } } - public void removeBagel(Bagel bagel) { - if (!bagels.contains(bagel)) { - throw new NoSuchElementException("No such bagel exists"); + public void removeProduct(Product product) { + if (!products.contains(product)) { + throw new NoSuchElementException("No such product exists"); } - bagels.remove(bagel); + products.remove(product); } - public ArrayList getBagels() { - return new ArrayList<>(bagels); + public ArrayList getProducts() { + return new ArrayList<>(products); } public void setBasketSize(int basketSize) { - if (basketSize < bagels.size()) { - bagels.clear(); + if (basketSize < products.size()) { + products.clear(); } this.basketSize = basketSize; } public float calculateCost() { float sum = 0.0f; - for (Bagel b: bagels) { - sum += b.calculateCost(); + for (Product p: products) { + sum += p.calculateCost(); } return sum; } diff --git a/src/main/java/com/booleanuk/core/Controller.java b/src/main/java/com/booleanuk/core/Controller.java index ba78d2958..20b99bea2 100644 --- a/src/main/java/com/booleanuk/core/Controller.java +++ b/src/main/java/com/booleanuk/core/Controller.java @@ -42,7 +42,7 @@ private void start() { if (basket.size() < basketSize) { Bagel b = view.addBagel(); if (b != null) { - basket.addBagel(b); + basket.addProduct(b); } } else { view.basketFull(); @@ -50,7 +50,7 @@ private void start() { break; case 2: if(basket.size() > 0) { - basket.removeBagel(view.chooseBagel(basket.getBagels())); + basket.removeProduct(view.chooseBagel(basket.getProducts())); } else { view.emptyBasket(); } diff --git a/src/main/java/com/booleanuk/core/Product.java b/src/main/java/com/booleanuk/core/Product.java new file mode 100644 index 000000000..36ea1ff29 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Product.java @@ -0,0 +1,5 @@ +package com.booleanuk.core; + +public interface Product { + public float calculateCost(); +} diff --git a/src/main/java/com/booleanuk/core/View.java b/src/main/java/com/booleanuk/core/View.java index 088453e87..c03bd04a6 100644 --- a/src/main/java/com/booleanuk/core/View.java +++ b/src/main/java/com/booleanuk/core/View.java @@ -78,7 +78,7 @@ public void basketFull() { System.out.println("Basket is full. You cannot add more bagels."); } - public Bagel chooseBagel(ArrayList bagels) { + public Product chooseBagel(ArrayList bagels) { if (bagels.isEmpty()) { System.out.println("No options available"); return null; diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 70c69ab09..cf51798c3 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -6,8 +6,6 @@ import java.util.ArrayList; import java.util.NoSuchElementException; -import static org.junit.jupiter.api.Assertions.*; - class BasketTest { @Test @@ -15,7 +13,7 @@ public void testAddBagel() { Basket basket = new Basket(12); Bagel bagel = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); Assertions.assertEquals(0, basket.size()); - basket.addBagel(bagel); + basket.addProduct(bagel); Assertions.assertEquals(1, basket.size()); } @@ -25,9 +23,9 @@ public void testAddBagelToFullBasket() { Bagel bagel1 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); Bagel bagel2 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); Assertions.assertEquals(0, basket.size()); - basket.addBagel(bagel1); + basket.addProduct(bagel1); Assertions.assertEquals(1, basket.size()); - basket.addBagel(bagel2); + basket.addProduct(bagel2); Assertions.assertEquals(1, basket.size()); } @@ -36,9 +34,9 @@ public void testRemoveBagel() { Basket basket = new Basket(12); Bagel bagel = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); Assertions.assertEquals(0, basket.size()); - basket.addBagel(bagel); + basket.addProduct(bagel); Assertions.assertEquals(1, basket.size()); - basket.removeBagel(bagel); + basket.removeProduct(bagel); Assertions.assertEquals(0, basket.size()); } @@ -47,8 +45,8 @@ public void testRemoveNonexistentBagel() { Basket basket = new Basket(12); Bagel bagel1 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); Bagel bagel2 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); - basket.addBagel(bagel1); - Assertions.assertThrows(NoSuchElementException.class, () -> basket.removeBagel(bagel2)); + basket.addProduct(bagel1); + Assertions.assertThrows(NoSuchElementException.class, () -> basket.removeProduct(bagel2)); } @Test @@ -57,10 +55,10 @@ public void testGetBagelsIsClone() { Bagel bagel1 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); Bagel bagel2 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); Assertions.assertEquals(0, basket.size()); - basket.addBagel(bagel1); - basket.addBagel(bagel2); + basket.addProduct(bagel1); + basket.addProduct(bagel2); Assertions.assertEquals(2, basket.size()); - ArrayList bagelsCopy = basket.getBagels(); + ArrayList bagelsCopy = basket.getProducts(); bagelsCopy.remove(bagel1); Assertions.assertEquals(2, basket.size()); Assertions.assertEquals(1, bagelsCopy.size()); @@ -72,12 +70,12 @@ public void testChangeSize() { Bagel bagel1 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); Bagel bagel2 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); Assertions.assertEquals(0, basket.size()); - basket.addBagel(bagel1); + basket.addProduct(bagel1); Assertions.assertEquals(1, basket.size()); - basket.addBagel(bagel2); + basket.addProduct(bagel2); Assertions.assertEquals(1, basket.size()); basket.setBasketSize(12); - basket.addBagel(bagel2); + basket.addProduct(bagel2); Assertions.assertEquals(2, basket.size()); } @@ -87,8 +85,8 @@ public void testChangeSizeToSmallerThanNumberOfBagels() { Bagel bagel1 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); Bagel bagel2 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); Assertions.assertEquals(0, basket.size()); - basket.addBagel(bagel1); - basket.addBagel(bagel2); + basket.addProduct(bagel1); + basket.addProduct(bagel2); Assertions.assertEquals(2, basket.size()); basket.setBasketSize(1); Assertions.assertEquals(0, basket.size()); @@ -99,9 +97,9 @@ public void testCalculateCost() { Basket basket = new Basket(2); Bagel bagel1 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); Bagel bagel2 = new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB")); - basket.addBagel(bagel1); + basket.addProduct(bagel1); Assertions.assertEquals(0.61f, basket.calculateCost(), 0.001); - basket.addBagel(bagel2); + basket.addProduct(bagel2); Assertions.assertEquals(1.12f, basket.calculateCost(), 0.001); } diff --git a/src/test/java/com/booleanuk/core/ControllerTest.java b/src/test/java/com/booleanuk/core/ControllerTest.java deleted file mode 100644 index 2ffa5f3ba..000000000 --- a/src/test/java/com/booleanuk/core/ControllerTest.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.booleanuk.core; - -import static org.junit.jupiter.api.Assertions.*; - -class ControllerTest { - -} \ No newline at end of file From d81e3015e6c8e37646eb4a3c888051bfe3b935ad Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Thu, 22 Aug 2024 11:48:52 +0200 Subject: [PATCH 31/49] RED: testAddSeveralFillings, testToString --- .../java/com/booleanuk/core/BagelTest.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BagelTest.java b/src/test/java/com/booleanuk/core/BagelTest.java index abcb1d459..ef6ce6f96 100644 --- a/src/test/java/com/booleanuk/core/BagelTest.java +++ b/src/test/java/com/booleanuk/core/BagelTest.java @@ -3,6 +3,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.util.ArrayList; + import static org.junit.jupiter.api.Assertions.*; class BagelTest { @@ -11,4 +13,25 @@ public void testCalculateCost() { Bagel bagel = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); Assertions.assertEquals(0.61f, bagel.calculateCost(), 0.001); } + + @Test + public void testAddSeveralFillings() { + ArrayList> fillings = new ArrayList<>() {{ + add(Controller.prices.get("FILB")); + add(Controller.prices.get("FILC")); + }}; + Bagel bagel = new Bagel(Controller.prices.get("BGLO"), fillings); + Assertions.assertEquals(0.73f, bagel.calculateCost(), 0.001); + } + + @Test + public void testToString() { + ArrayList> fillings = new ArrayList<>() {{ + add(Controller.prices.get("FILB")); + add(Controller.prices.get("FILC")); + }}; + Triple type = Controller.prices.get("BGLO"); + Bagel bagel = new Bagel(type, fillings); + Assertions.assertEquals("Bagel{bagelType=Onion, fillings={Bacon, Cheese}, cost=0.73}", bagel.toString()); + } } \ No newline at end of file From 3442c215933c97f803a5469a5794976c5405d62d Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Thu, 22 Aug 2024 11:49:06 +0200 Subject: [PATCH 32/49] GREEN: testAddSeveralFillings, testToString passes --- src/main/java/com/booleanuk/core/Bagel.java | 20 +++++++++---------- .../java/com/booleanuk/core/Controller.java | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java index 8f4c4bb6e..c1031bea1 100644 --- a/src/main/java/com/booleanuk/core/Bagel.java +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -1,24 +1,24 @@ package com.booleanuk.core; +import java.util.ArrayList; + public class Bagel implements Product { private final Triple bagelType; - private final Triple fillingType; + private final ArrayList> fillings; public Bagel(Triple bagelType, Triple fillingType) { this.bagelType = bagelType; - this.fillingType = fillingType; + this.fillings = new ArrayList<>(); + this.fillings.add(fillingType); } - @Override - public String toString() { - return "Bagel{" + - "bagelType=" + bagelType.b() + - ", fillingType=" + fillingType.b() + - ", cost=" + calculateCost() + - '}'; + public Bagel(Triple bagelType, ArrayList> fillings) { + this.bagelType = bagelType; + this.fillings = new ArrayList<>(); + this.fillings.addAll(fillings); } public float calculateCost() { - return bagelType.c() + fillingType.c(); + return bagelType.c() + (float) fillings.stream().mapToDouble(Triple::c).sum(); } } diff --git a/src/main/java/com/booleanuk/core/Controller.java b/src/main/java/com/booleanuk/core/Controller.java index 20b99bea2..a508b99d1 100644 --- a/src/main/java/com/booleanuk/core/Controller.java +++ b/src/main/java/com/booleanuk/core/Controller.java @@ -27,7 +27,7 @@ public Controller(View view, Basket basket, int basketSize) { } public static void main(String[] args) { - int bSize = 12; + int bSize = 24; Controller controller = new Controller(new View(), new Basket(bSize), bSize); controller.start(); From 11eb1782caa083274e43c87dec6aff63e0ec6357 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Thu, 22 Aug 2024 13:20:12 +0200 Subject: [PATCH 33/49] REFACTOR: Can now add several fillings to bagel through ui --- src/main/java/com/booleanuk/core/View.java | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/booleanuk/core/View.java b/src/main/java/com/booleanuk/core/View.java index c03bd04a6..730ce57ee 100644 --- a/src/main/java/com/booleanuk/core/View.java +++ b/src/main/java/com/booleanuk/core/View.java @@ -38,9 +38,20 @@ public int getInt() { public Bagel addBagel() { System.out.println("Choose a bagel"); Triple bagelType = displayPrices("Bagel"); - System.out.println("Choose a filling"); - Triple fillingType = displayPrices("Filling"); - Bagel b = new Bagel(bagelType, fillingType); + if (bagelType == null) return null; + + System.out.println("Choose filling, choose None to stop choosing."); + boolean loop = true; + ArrayList> fillings = new ArrayList<>(); + while (loop) { + Triple temp = displayPrices("Filling"); + if (temp != null) { + fillings.add(temp); + } else { + loop = false; + } + } + Bagel b = new Bagel(bagelType, fillings); System.out.printf("It will cost $%.2f, is this ok?%n", b.calculateCost()); System.out.println("1. Yes"); System.out.println("2. No"); @@ -55,6 +66,7 @@ public Bagel addBagel() { private Triple displayPrices(String filter) { ArrayList> temp = new ArrayList<>(); int increment = 1; + System.out.println("0. None"); for (Triple t: Controller.prices.values()) { if (t.a().equals(filter) || filter.isEmpty()) { System.out.printf("%h. %s: $%.2f%n", increment, t.b(), t.c()); @@ -68,7 +80,7 @@ private Triple displayPrices(String filter) { } System.out.println("Please write what you want"); int output = getInt() - 1; - if (output == temp.size()) { + if (output >= temp.size() || output < 0) { return null; } return temp.get(output); From 0447e1c2d8bc69779f404cfd89cb7c00775b5453 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Thu, 22 Aug 2024 15:22:46 +0200 Subject: [PATCH 34/49] RED: testFindDiscountOn12Bagels --- src/test/java/com/booleanuk/core/BasketTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index cf51798c3..6a2a7ba3d 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -108,4 +108,14 @@ public void testCalculateCostOnEmptyBasket() { Basket basket = new Basket(2); Assertions.assertEquals(0.0f, basket.calculateCost(), 0.001); } + + @Test + public void testFindDiscountOn12Bagels() { + Basket b = new Basket(24); + b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); + for (int i = 0; i < 12; i++) { + b.addProduct(new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB"))); + } + Assertions.assertEquals(1.89f, b.findDiscount(), 0.001); + } } \ No newline at end of file From a1cec462e0a56b7215b74358a3f9f88426ce1441 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Thu, 22 Aug 2024 15:22:57 +0200 Subject: [PATCH 35/49] GREEN: testFindDiscountOn12Bagels passes --- src/main/java/com/booleanuk/core/Bagel.java | 4 ++ src/main/java/com/booleanuk/core/Basket.java | 47 ++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java index c1031bea1..b2cc10b90 100644 --- a/src/main/java/com/booleanuk/core/Bagel.java +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -21,4 +21,8 @@ public Bagel(Triple bagelType, ArrayList products; + private final ArrayList unDiscountedProducts; private int basketSize; public Basket(int basketSize) { products = new ArrayList<>(); + unDiscountedProducts = new ArrayList<>(); this.basketSize = basketSize; } @@ -19,9 +22,53 @@ public int size() { public void addProduct(Product product) { if (products.size() < basketSize) { products.add(product); + unDiscountedProducts.add(product); } } + public static void main(String[] args) { + Basket b = new Basket(24); + b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); + for (int i = 0; i < 18; i++) { + b.addProduct(new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB"))); + } + System.out.println(b.findDiscount()); + } + + public float findDiscount() { + ArrayList bagels = new ArrayList<>(); + for (Product p: unDiscountedProducts) { + if (p instanceof Bagel) { + bagels.add(p); + } + } + // Sort and compare bread cost + bagels.sort((o1, o2) -> (int) (1000 * (((Bagel) o2).calculateBreadCost() - ((Bagel) o1).calculateBreadCost()))); + if (bagels.size() >= 12) { + return calculateDiscount(bagels, 12, 3.99f) + findDiscount(); + } else if (bagels.size() >= 6) { + return calculateDiscount(bagels, 6, 2.49f) + findDiscount(); + } else if (bagels.size() < unDiscountedProducts.size()) { + int coffeeBagelDeals = (unDiscountedProducts.size() - Math.abs(unDiscountedProducts.size() - bagels.size())); + for (int i = 0; i < coffeeBagelDeals; i++) { + unDiscountedProducts.removeFirst(); + } + return 1.25f * coffeeBagelDeals; + } + return 0; + } + + private float calculateDiscount(ArrayList items, int num, float dis) { + float sumCost = 0.0f; + float sumBreadCost = 0.0f; + for (int i = 0; i < num; i++) { + sumCost += items.get(i).calculateCost(); + sumBreadCost += ((Bagel)items.get(i)).calculateBreadCost(); + unDiscountedProducts.remove(items.get(i)); + } + return sumBreadCost - dis; + } + public void removeProduct(Product product) { if (!products.contains(product)) { throw new NoSuchElementException("No such product exists"); From 77902ef5c6707ae15a6c90413d65180ad76a10ac Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Thu, 22 Aug 2024 16:22:55 +0200 Subject: [PATCH 36/49] RED: Various testFindDiscount, with and without Coffee --- .../java/com/booleanuk/core/BasketTest.java | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 6a2a7ba3d..10558cf45 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -118,4 +118,90 @@ public void testFindDiscountOn12Bagels() { } Assertions.assertEquals(1.89f, b.findDiscount(), 0.001); } + + @Test + public void testFindDiscountOn12BagelsWithPlainBagels() { + Basket b = new Basket(24); + b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); + for (int i = 0; i < 6; i++) { + b.addProduct(new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB"))); + b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); + } + Assertions.assertEquals(1.29f, b.findDiscount(), 0.001); + } + + @Test + public void testFindDiscountOn18Bagels() { + Basket b = new Basket(24); + b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); + for (int i = 0; i < 18; i++) { + b.addProduct(new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB"))); + } + Assertions.assertEquals(2.34f, b.findDiscount(), 0.001); + } + + + + @Test + public void testFindDiscountOn18BagelsWithPlainBagels() { + Basket b = new Basket(24); + b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); + for (int i = 0; i < 9; i++) { + b.addProduct(new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB"))); + b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); + } + Assertions.assertEquals(1.44f, b.findDiscount(), 0.001); + } + + @Test + public void testFindDiscountOn19Bagels() { + Basket b = new Basket(24); + b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); + for (int i = 0; i < 19; i++) { + b.addProduct(new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB"))); + } + Assertions.assertEquals(2.34f, b.findDiscount(), 0.001); + } + + + + @Test + public void testFindDiscountOn20BagelsWithPlainBagels() { + Basket b = new Basket(24); + b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); + for (int i = 0; i < 10; i++) { + b.addProduct(new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB"))); + b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); + } + Assertions.assertEquals(1.54f, b.findDiscount(), 0.001); + } + + @Test + public void testFindDiscountOnOneBagelAndOneCoffee() { + Basket b = new Basket(24); + b.addProduct(new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB"))); + b.addProduct(new Coffee(Controller.prices.get("COFB"))); + Assertions.assertEquals(0.23f, b.findDiscount(), 0.001); + } + + @Test + public void testFindDiscountOnTwoBagelsAndTwoCoffees() { + Basket b = new Basket(24); + b.addProduct(new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB"))); + b.addProduct(new Coffee(Controller.prices.get("COFB"))); + b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); + b.addProduct(new Coffee(Controller.prices.get("COFC"))); + Assertions.assertEquals(0.66f, b.findDiscount(), 0.001); + } + + @Test + public void testFindDiscountOn19BagelsAndOneCoffee() { + Basket b = new Basket(24); + b.addProduct(new Coffee(Controller.prices.get("COFB"))); + b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); + for (int i = 0; i < 18; i++) { + b.addProduct(new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB"))); + } + Assertions.assertEquals(2.47f, b.findDiscount(), 0.001); + } } \ No newline at end of file From 6c020e05695fb7b6a3c6e5685d93778312203f0c Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Thu, 22 Aug 2024 16:23:13 +0200 Subject: [PATCH 37/49] GREEN: Various testFindDiscounts now pass --- src/main/java/com/booleanuk/core/Basket.java | 23 ++++++++++++++++++- src/main/java/com/booleanuk/core/Coffee.java | 14 +++++++++++ .../java/com/booleanuk/core/Controller.java | 4 ++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/booleanuk/core/Coffee.java diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 21ee9ea54..083891e8b 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -49,11 +49,32 @@ public float findDiscount() { } else if (bagels.size() >= 6) { return calculateDiscount(bagels, 6, 2.49f) + findDiscount(); } else if (bagels.size() < unDiscountedProducts.size()) { + // Sort so Bagels are first, after that, sort by cost. + unDiscountedProducts.sort(new Comparator() { + @Override + public int compare(Product o1, Product o2) { + if (o1 instanceof Bagel && o2 instanceof Bagel) { + return (int) (1000 * (((Bagel) o2).calculateBreadCost() - ((Bagel) o1).calculateBreadCost())); + } else if (o1 instanceof Coffee && o2 instanceof Coffee) { + return (int) (1000 * (o2.calculateCost() - o1.calculateCost())); + } else if (o1 instanceof Bagel) { + return -1; + } else { + return 1; + } + } + }); + + int coffeeBagelDeals = (unDiscountedProducts.size() - Math.abs(unDiscountedProducts.size() - bagels.size())); + float sumCost = 0.0f; for (int i = 0; i < coffeeBagelDeals; i++) { unDiscountedProducts.removeFirst(); } - return 1.25f * coffeeBagelDeals; + for (int i = 0; i < coffeeBagelDeals; i++) { + sumCost += unDiscountedProducts.get(i).calculateCost() + ((Bagel) bagels.get(i)).calculateBreadCost(); + } + return sumCost - 1.25f * coffeeBagelDeals; } return 0; } diff --git a/src/main/java/com/booleanuk/core/Coffee.java b/src/main/java/com/booleanuk/core/Coffee.java new file mode 100644 index 000000000..5fd497e69 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Coffee.java @@ -0,0 +1,14 @@ +package com.booleanuk.core; + +public class Coffee implements Product{ + private final Triple coffeeType; + + public Coffee(Triple coffeeType) { + this.coffeeType = coffeeType; + } + + @Override + public float calculateCost() { + return coffeeType.c(); + } +} diff --git a/src/main/java/com/booleanuk/core/Controller.java b/src/main/java/com/booleanuk/core/Controller.java index a508b99d1..958d3c17e 100644 --- a/src/main/java/com/booleanuk/core/Controller.java +++ b/src/main/java/com/booleanuk/core/Controller.java @@ -15,6 +15,10 @@ public class Controller { put("FILX", new Triple<>("Filling", "Cream Cheese", 0.12f)); put("FILS", new Triple<>("Filling", "Smoked Salmon", 0.12f)); put("FILH", new Triple<>("Filling", "Ham", 0.12f)); + put("COFB", new Triple<>("Coffee", "Black", 0.99f)); + put("COFW", new Triple<>("Coffee", "White", 1.19f)); + put("COFC", new Triple<>("Coffee", "Cappuccino", 1.29f)); + put("COFL", new Triple<>("Coffee", "Latte", 1.29f)); }}; public static final Map> prices = Collections.unmodifiableMap(privatePrices); private Basket basket; From 81a7af7ee0552d5b550fe9585a4454f12ac76f05 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Thu, 22 Aug 2024 16:52:40 +0200 Subject: [PATCH 38/49] REFACTOR: displaying cost now accounts for discount and you can now order coffee --- src/main/java/com/booleanuk/core/Basket.java | 4 +++- .../java/com/booleanuk/core/Controller.java | 17 +++++++++++++++++ src/main/java/com/booleanuk/core/View.java | 17 +++++++++++++++++ .../java/com/booleanuk/core/BasketTest.java | 2 +- 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 083891e8b..589a568b2 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -6,7 +6,7 @@ public class Basket { private final ArrayList products; - private final ArrayList unDiscountedProducts; + private ArrayList unDiscountedProducts; private int basketSize; public Basket(int basketSize) { @@ -113,6 +113,8 @@ public float calculateCost() { for (Product p: products) { sum += p.calculateCost(); } + sum -= findDiscount(); + unDiscountedProducts = new ArrayList<>(products); return sum; } } diff --git a/src/main/java/com/booleanuk/core/Controller.java b/src/main/java/com/booleanuk/core/Controller.java index 958d3c17e..52fff4d90 100644 --- a/src/main/java/com/booleanuk/core/Controller.java +++ b/src/main/java/com/booleanuk/core/Controller.java @@ -65,6 +65,23 @@ private void start() { case 4: view.printPrice(basket.calculateCost()); break; + case 5: + if (basket.size() < basketSize) { + Coffee c = view.addCoffee(); + if (c != null) { + basket.addProduct(c); + } + } else { + view.basketFull(); + } + break; + case 12: // Testing case + basket.addProduct(new Coffee(Controller.prices.get("COFB"))); + basket.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); + for (int i = 0; i < 18; i++) { + basket.addProduct(new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB"))); + } + break; default: keepRunning = false; view.printExit(); diff --git a/src/main/java/com/booleanuk/core/View.java b/src/main/java/com/booleanuk/core/View.java index 730ce57ee..6b60dd614 100644 --- a/src/main/java/com/booleanuk/core/View.java +++ b/src/main/java/com/booleanuk/core/View.java @@ -16,6 +16,7 @@ public int mainMenu() { System.out.println("2. Remove Bagel"); System.out.println("3. Change basket size"); System.out.println("4. See total cost"); + System.out.println("5. Add Coffee"); return getInt(); } @@ -63,6 +64,22 @@ public Bagel addBagel() { } } + public Coffee addCoffee() { + System.out.println("Choose a coffee type"); + Triple coffeeType = displayPrices("Coffee"); + if (coffeeType == null) return null; + Coffee c = new Coffee(coffeeType); + System.out.printf("It will cost $%.2f, is this ok?%n", c.calculateCost()); + System.out.println("1. Yes"); + System.out.println("2. No"); + int ans = getInt(); + if (ans == 1) { + return c; + } else { + return null; + } + } + private Triple displayPrices(String filter) { ArrayList> temp = new ArrayList<>(); int increment = 1; diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 10558cf45..160d0a62e 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -110,7 +110,7 @@ public void testCalculateCostOnEmptyBasket() { } @Test - public void testFindDiscountOn12Bagels() { + public void testFindDiscountOn13Bagels() { Basket b = new Basket(24); b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); for (int i = 0; i < 12; i++) { From 9210134f4645e72e388c26b1d23cfdf89c973302 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Thu, 22 Aug 2024 16:56:14 +0200 Subject: [PATCH 39/49] REFACTOR: cleaning up code --- src/main/java/com/booleanuk/core/Basket.java | 24 ++++++++------------ src/main/java/com/booleanuk/core/View.java | 2 +- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 589a568b2..d4d0e985a 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -50,19 +50,15 @@ public float findDiscount() { return calculateDiscount(bagels, 6, 2.49f) + findDiscount(); } else if (bagels.size() < unDiscountedProducts.size()) { // Sort so Bagels are first, after that, sort by cost. - unDiscountedProducts.sort(new Comparator() { - @Override - public int compare(Product o1, Product o2) { - if (o1 instanceof Bagel && o2 instanceof Bagel) { - return (int) (1000 * (((Bagel) o2).calculateBreadCost() - ((Bagel) o1).calculateBreadCost())); - } else if (o1 instanceof Coffee && o2 instanceof Coffee) { - return (int) (1000 * (o2.calculateCost() - o1.calculateCost())); - } else if (o1 instanceof Bagel) { - return -1; - } else { - return 1; - } - } + unDiscountedProducts.sort((o1, o2) -> { + return switch (o1) { + case Bagel bagel when o2 instanceof Bagel -> + (int) (1000 * (((Bagel) o2).calculateBreadCost() - bagel.calculateBreadCost())); + case Coffee coffee when o2 instanceof Coffee -> + (int) (1000 * (o2.calculateCost() - o1.calculateCost())); + case Bagel bagel -> -1; + case null, default -> 1; + }; }); @@ -80,10 +76,8 @@ public int compare(Product o1, Product o2) { } private float calculateDiscount(ArrayList items, int num, float dis) { - float sumCost = 0.0f; float sumBreadCost = 0.0f; for (int i = 0; i < num; i++) { - sumCost += items.get(i).calculateCost(); sumBreadCost += ((Bagel)items.get(i)).calculateBreadCost(); unDiscountedProducts.remove(items.get(i)); } diff --git a/src/main/java/com/booleanuk/core/View.java b/src/main/java/com/booleanuk/core/View.java index 6b60dd614..32082004e 100644 --- a/src/main/java/com/booleanuk/core/View.java +++ b/src/main/java/com/booleanuk/core/View.java @@ -4,7 +4,7 @@ import java.util.Scanner; public class View { - private Scanner scanner; + private final Scanner scanner; public View() { scanner = new Scanner(System.in); From e2040ed1d9ce40489994a89966859d0bb7ee62dd Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Thu, 22 Aug 2024 16:58:34 +0200 Subject: [PATCH 40/49] REFACTOR: intellij recommendations --- src/main/java/com/booleanuk/core/Basket.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index d4d0e985a..d2759fc49 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -1,7 +1,6 @@ package com.booleanuk.core; import java.util.ArrayList; -import java.util.Comparator; import java.util.NoSuchElementException; public class Basket { @@ -50,15 +49,13 @@ public float findDiscount() { return calculateDiscount(bagels, 6, 2.49f) + findDiscount(); } else if (bagels.size() < unDiscountedProducts.size()) { // Sort so Bagels are first, after that, sort by cost. - unDiscountedProducts.sort((o1, o2) -> { - return switch (o1) { - case Bagel bagel when o2 instanceof Bagel -> - (int) (1000 * (((Bagel) o2).calculateBreadCost() - bagel.calculateBreadCost())); - case Coffee coffee when o2 instanceof Coffee -> - (int) (1000 * (o2.calculateCost() - o1.calculateCost())); - case Bagel bagel -> -1; - case null, default -> 1; - }; + unDiscountedProducts.sort((o1, o2) -> switch (o1) { + case Bagel bagel when o2 instanceof Bagel -> + (int) (1000 * (((Bagel) o2).calculateBreadCost() - bagel.calculateBreadCost())); + case Coffee ignored when o2 instanceof Coffee -> + (int) (1000 * (o2.calculateCost() - o1.calculateCost())); + case Bagel ignored -> -1; + case null, default -> 1; }); From 881c02fbebfeadbacc16ecc93539f2beb4691290 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Fri, 23 Aug 2024 16:49:26 +0200 Subject: [PATCH 41/49] RED: testReceiptInfo --- .../java/com/booleanuk/core/BasketTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 160d0a62e..929e4d671 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -119,6 +119,15 @@ public void testFindDiscountOn13Bagels() { Assertions.assertEquals(1.89f, b.findDiscount(), 0.001); } + @Test + public void testFindDiscountOn12PlainBagels() { + Basket b = new Basket(24); + for (int i = 0; i < 12; i++) { + b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); + } + Assertions.assertEquals(0.69f, b.findDiscount(), 0.001); + } + @Test public void testFindDiscountOn12BagelsWithPlainBagels() { Basket b = new Basket(24); @@ -204,4 +213,16 @@ public void testFindDiscountOn19BagelsAndOneCoffee() { } Assertions.assertEquals(2.47f, b.findDiscount(), 0.001); } + + @Test + public void testReceiptInfo() { + Basket b = new Basket(24); + for (int i = 0; i < 12; i++) { + b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); + } + Basket.ReceiptInfo i = b.receiptInformation(); + Assertions.assertEquals(12, i.fillings().get("Bacon")); + Assertions.assertEquals(0, i.remaining().size()); + Assertions.assertEquals(1, i.deals().size()); + } } \ No newline at end of file From 41a60aa4aceb55e341ff97439807e7c7f8b406be Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Fri, 23 Aug 2024 16:49:44 +0200 Subject: [PATCH 42/49] GREEN: testReceiptInfo + ui --- src/main/java/com/booleanuk/core/Bagel.java | 18 +++ src/main/java/com/booleanuk/core/Basket.java | 136 ++++++++++++++++-- src/main/java/com/booleanuk/core/Coffee.java | 14 ++ .../java/com/booleanuk/core/Controller.java | 17 ++- src/main/java/com/booleanuk/core/Product.java | 2 + src/main/java/com/booleanuk/core/View.java | 46 +++++- 6 files changed, 220 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java index b2cc10b90..4d2c3ac93 100644 --- a/src/main/java/com/booleanuk/core/Bagel.java +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -25,4 +25,22 @@ public float calculateCost() { public float calculateBreadCost() { return bagelType.c(); } + + public ArrayList> getFillings() { + return new ArrayList<>(fillings); + } + + public Triple getBagelType() { + return bagelType; + } + + @Override + public float basicPrice() { + return bagelType.c(); + } + + @Override + public String name() { + return bagelType.b() + " " + bagelType.a(); + } } diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index d2759fc49..5b3ebc8d5 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -1,6 +1,7 @@ package com.booleanuk.core; import java.util.ArrayList; +import java.util.HashMap; import java.util.NoSuchElementException; public class Basket { @@ -25,15 +26,6 @@ public void addProduct(Product product) { } } - public static void main(String[] args) { - Basket b = new Basket(24); - b.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); - for (int i = 0; i < 18; i++) { - b.addProduct(new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB"))); - } - System.out.println(b.findDiscount()); - } - public float findDiscount() { ArrayList bagels = new ArrayList<>(); for (Product p: unDiscountedProducts) { @@ -108,4 +100,130 @@ public float calculateCost() { unDiscountedProducts = new ArrayList<>(products); return sum; } + + record ReceiptInfo(HashMap fillings, + ArrayList, Float, Float>> deals, ArrayList remaining) { + } + + public ReceiptInfo receiptInformation() { + HashMap fillings = new HashMap<>(); // to display later + ArrayList, Float, Float>> deals = new ArrayList<>(); // T< HM , price, discount>> + ArrayList remaining = new ArrayList<>(); + + + + unDiscountedProducts = new ArrayList<>(products); + ArrayList bagels = new ArrayList<>(); + for (Product p: unDiscountedProducts) { + if (p instanceof Bagel) { + for (Triple t: ((Bagel) p).getFillings()) { + if (fillings.containsKey(t.b())) { + fillings.replace(t.b(), fillings.get(t.b()) + 1); + } else { + fillings.put(t.b(), 1); + } + } + bagels.add(p); + } + } + + bagels.sort((o1, o2) -> (int) (1000 * (((Bagel) o2).calculateBreadCost() - ((Bagel) o1).calculateBreadCost()))); + + boolean keepRunning = true; + while (keepRunning) { + if (bagels.size() >= 12) { + HashMap breadKinds = new HashMap<>(); + float breadCost = 3.99f; + for (int i = 0; i < 12; i++) { + String bagelType = bagels.get(i).name(); + if (breadKinds.containsKey(bagelType)) { + breadKinds.replace(bagelType, breadKinds.get(bagelType) + 1); + } else { + breadKinds.put(bagelType, 1); + } + } + float discount = calculateDiscount(bagels, 12, 3.99f); + deals.add(new Triple<>(breadKinds, breadCost, -discount)); + for (int i = 0; i < 12; i++) { + bagels.removeFirst(); + } + } else if (bagels.size() >= 6) { + HashMap breadKinds = new HashMap<>(); + float breadCost = 2.49f; + for (int i = 0; i < 6; i++) { + String bagelType = bagels.get(i).name(); + if (breadKinds.containsKey(bagelType)) { + breadKinds.replace(bagelType, breadKinds.get(bagelType) + 1); + } else { + breadKinds.put(bagelType, 1); + } + } + float discount = calculateDiscount(bagels, 6, 2.49f); + deals.add(new Triple<>(breadKinds, breadCost, -discount)); + for (int i = 0; i < 6; i++) { + bagels.removeFirst(); + } + } else if (bagels.size() < unDiscountedProducts.size()) { + // Sort so Bagels are first, after that, sort by cost. + unDiscountedProducts.sort((o1, o2) -> switch (o1) { + case Bagel bagel when o2 instanceof Bagel -> + (int) (1000 * (((Bagel) o2).calculateBreadCost() - bagel.calculateBreadCost())); + case Coffee ignored when o2 instanceof Coffee -> + (int) (1000 * (o2.calculateCost() - o1.calculateCost())); + case Bagel ignored -> -1; + case null, default -> 1; + }); + + + HashMap breadKinds = new HashMap<>(); + HashMap coffeeType = new HashMap<>(); + ArrayList coffeeList = new ArrayList<>(); + + for (Product p: unDiscountedProducts) { + if (p instanceof Coffee) { + coffeeList.add(p); + } + } + + int coffeeBagelDeals = Math.min(bagels.size(), coffeeList.size()); + for (int i = 0; i < coffeeBagelDeals; i++) { + String bagelType = bagels.get(i).name(); + if (breadKinds.containsKey(bagelType)) { + breadKinds.replace(bagelType, breadKinds.get(bagelType) + 1); + } else { + breadKinds.put(bagelType, 1); + } + + String coffeeString = coffeeList.get(i).name(); + if (coffeeType.containsKey(coffeeString)) { + coffeeType.replace(coffeeString, coffeeType.get(coffeeString) + 1); + } else { + coffeeType.put(coffeeString, 1); + } + } + + for (int i = 0; i < coffeeBagelDeals; i++) { + HashMap dealContents = new HashMap<>(); + dealContents.put(coffeeList.get(i).name(), 1); + dealContents.put(unDiscountedProducts.getFirst().name(), 1); + float coffeeCost = ((Coffee) coffeeList.get(i)).getCoffeeType().c(); + float bagelCost = ((Bagel) unDiscountedProducts.getFirst()).getBagelType().c(); + float dis = 1.25f - coffeeCost - bagelCost; + deals.add(new Triple<>(dealContents, 1.25f, dis)); + unDiscountedProducts.removeFirst(); + unDiscountedProducts.remove(coffeeList.get(i)); + } + } else { + remaining.addAll(unDiscountedProducts); + keepRunning = false; + } + } + + return new ReceiptInfo(fillings, deals, remaining); + } + + public void clear() { + products.clear(); + unDiscountedProducts.clear(); + } } diff --git a/src/main/java/com/booleanuk/core/Coffee.java b/src/main/java/com/booleanuk/core/Coffee.java index 5fd497e69..017d6c85d 100644 --- a/src/main/java/com/booleanuk/core/Coffee.java +++ b/src/main/java/com/booleanuk/core/Coffee.java @@ -11,4 +11,18 @@ public Coffee(Triple coffeeType) { public float calculateCost() { return coffeeType.c(); } + + public Triple getCoffeeType() { + return coffeeType; + } + + @Override + public String name() { + return coffeeType.b(); + } + + @Override + public float basicPrice() { + return coffeeType.c(); + } } diff --git a/src/main/java/com/booleanuk/core/Controller.java b/src/main/java/com/booleanuk/core/Controller.java index 52fff4d90..759496931 100644 --- a/src/main/java/com/booleanuk/core/Controller.java +++ b/src/main/java/com/booleanuk/core/Controller.java @@ -31,10 +31,20 @@ public Controller(View view, Basket basket, int basketSize) { } public static void main(String[] args) { - int bSize = 24; + int bSize = 50; Controller controller = new Controller(new View(), new Basket(bSize), bSize); - controller.start(); + for (int i = 0; i < 14; i++) { + ArrayList> fillings = new ArrayList<>() {{ + add(Controller.prices.get("FILE")); + add(Controller.prices.get("FILH")); + }}; + controller.basket.addProduct(new Bagel(Controller.prices.get("BGLE"), fillings)); + controller.basket.addProduct(new Bagel(Controller.prices.get("BGLP"), fillings)); + } + controller.view.printReceipt(controller.basket.calculateCost(), controller.basket.findDiscount(), controller.basket.receiptInformation()); + +// controller.start(); } private void start() { @@ -75,6 +85,9 @@ private void start() { view.basketFull(); } break; + case 6: +// view.printReceipt(basket.receiptInformation()); + basket.clear(); case 12: // Testing case basket.addProduct(new Coffee(Controller.prices.get("COFB"))); basket.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); diff --git a/src/main/java/com/booleanuk/core/Product.java b/src/main/java/com/booleanuk/core/Product.java index 36ea1ff29..8f36079c2 100644 --- a/src/main/java/com/booleanuk/core/Product.java +++ b/src/main/java/com/booleanuk/core/Product.java @@ -2,4 +2,6 @@ public interface Product { public float calculateCost(); + public String name(); + public float basicPrice(); } diff --git a/src/main/java/com/booleanuk/core/View.java b/src/main/java/com/booleanuk/core/View.java index 32082004e..a57724e9e 100644 --- a/src/main/java/com/booleanuk/core/View.java +++ b/src/main/java/com/booleanuk/core/View.java @@ -1,7 +1,6 @@ package com.booleanuk.core; -import java.util.ArrayList; -import java.util.Scanner; +import java.util.*; public class View { private final Scanner scanner; @@ -137,4 +136,47 @@ public void printPrice(float price) { public void emptyBasket() { System.out.println("Your basket is empty."); } + + public void printReceipt(float totCost, float totDisc, Basket.ReceiptInfo info) { + Date now = new Date(); + System.out.printf("~~~ Bob's Bagels ~~~\n" + + "\n" + + " %tF %tT\n" + + "\n" + + "----------------------------\n" + + "\n\nLone Products:\n", now, now); + for (Product p: info.remaining()) { + System.out.printf("%-25s %8.2f%n", p.name(), p.basicPrice()); + } + if (info.remaining().isEmpty()) { + System.out.println("None\n"); + } + + + System.out.println("\nFillings:"); + for (Map.Entry item :info.fillings().entrySet()) { + System.out.printf("%-20s %4d %8.2f%n", item.getKey(), item.getValue(), item.getValue() * 0.12f); + } + if (info.fillings().entrySet().isEmpty()) { + System.out.println("None\n"); + } + System.out.println("\nDeals:"); + // HM, price, discount + for (Triple, Float, Float> deal: info.deals()) { + for (Map.Entry item : deal.a().entrySet()) { + System.out.printf(" %-16s %4d%n", item.getKey(), item.getValue()); + } + System.out.printf(" Deal Cost %22.2f%n", deal.b()); + System.out.printf(" Discount %23.2f%n%n", deal.c()); + + } + if (info.deals().isEmpty()) { + System.out.println("None\n"); + } + + System.out.print("Total Cost"); + System.out.printf("%24.2f%n", totCost); + System.out.print("Total Saved"); + System.out.printf("%23.2f", totDisc); + } } From bcd082be48bc50389bcc29f2add0d80f15d75ce8 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Mon, 26 Aug 2024 09:39:42 +0200 Subject: [PATCH 43/49] RED: testCalculateCostOn2BagelsAnd1Coffee crashes --- src/test/java/com/booleanuk/core/BasketTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 160d0a62e..5da436831 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -109,6 +109,18 @@ public void testCalculateCostOnEmptyBasket() { Assertions.assertEquals(0.0f, basket.calculateCost(), 0.001); } + @Test + public void testCalculateCostOn2BagelsAnd1Coffee() { + Basket basket = new Basket(12); + Bagel bagel1 = new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB")); + Bagel bagel2 = new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB")); + Coffee coffee = new Coffee(Controller.prices.get("COFC")); + basket.addProduct(bagel1); + basket.addProduct(bagel2); + basket.addProduct(coffee); + Assertions.assertEquals(1.88f, basket.calculateCost(), 0.001); + } + @Test public void testFindDiscountOn13Bagels() { Basket b = new Basket(24); From 08cd4aae49a2d10d42c7f7d9883cecbe67a87df3 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Mon, 26 Aug 2024 09:58:32 +0200 Subject: [PATCH 44/49] GREEN: testCalculateCostOn2BagelsAnd1Coffee passes --- src/main/java/com/booleanuk/core/Basket.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 5b3ebc8d5..b5115f770 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -40,24 +40,22 @@ public float findDiscount() { } else if (bagels.size() >= 6) { return calculateDiscount(bagels, 6, 2.49f) + findDiscount(); } else if (bagels.size() < unDiscountedProducts.size()) { - // Sort so Bagels are first, after that, sort by cost. + // Sort so Bagels are first, coffee after. After sort by cost, but coffee is sorted inversely. unDiscountedProducts.sort((o1, o2) -> switch (o1) { case Bagel bagel when o2 instanceof Bagel -> (int) (1000 * (((Bagel) o2).calculateBreadCost() - bagel.calculateBreadCost())); case Coffee ignored when o2 instanceof Coffee -> - (int) (1000 * (o2.calculateCost() - o1.calculateCost())); + (int) (1000 * (o1.calculateCost() - o2.calculateCost())); case Bagel ignored -> -1; case null, default -> 1; }); - int coffeeBagelDeals = (unDiscountedProducts.size() - Math.abs(unDiscountedProducts.size() - bagels.size())); + int coffeeSize = products.size() - bagels.size(); + int coffeeBagelDeals = Math.min(bagels.size(), coffeeSize); float sumCost = 0.0f; for (int i = 0; i < coffeeBagelDeals; i++) { - unDiscountedProducts.removeFirst(); - } - for (int i = 0; i < coffeeBagelDeals; i++) { - sumCost += unDiscountedProducts.get(i).calculateCost() + ((Bagel) bagels.get(i)).calculateBreadCost(); + sumCost += unDiscountedProducts.get(unDiscountedProducts.size() - 1 - i).calculateCost() + ((Bagel) bagels.get(i)).calculateBreadCost(); } return sumCost - 1.25f * coffeeBagelDeals; } @@ -96,7 +94,8 @@ public float calculateCost() { for (Product p: products) { sum += p.calculateCost(); } - sum -= findDiscount(); + float discount = findDiscount(); + sum -= discount; unDiscountedProducts = new ArrayList<>(products); return sum; } From eb5373ccb0a8fc3f8a87e58e2ca69ded7be0045c Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Mon, 26 Aug 2024 09:58:44 +0200 Subject: [PATCH 45/49] REFACTOR: ui --- .../java/com/booleanuk/core/Controller.java | 22 ++++--------------- src/main/java/com/booleanuk/core/View.java | 1 + 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Controller.java b/src/main/java/com/booleanuk/core/Controller.java index 759496931..a6f85110d 100644 --- a/src/main/java/com/booleanuk/core/Controller.java +++ b/src/main/java/com/booleanuk/core/Controller.java @@ -34,17 +34,7 @@ public static void main(String[] args) { int bSize = 50; Controller controller = new Controller(new View(), new Basket(bSize), bSize); - for (int i = 0; i < 14; i++) { - ArrayList> fillings = new ArrayList<>() {{ - add(Controller.prices.get("FILE")); - add(Controller.prices.get("FILH")); - }}; - controller.basket.addProduct(new Bagel(Controller.prices.get("BGLE"), fillings)); - controller.basket.addProduct(new Bagel(Controller.prices.get("BGLP"), fillings)); - } - controller.view.printReceipt(controller.basket.calculateCost(), controller.basket.findDiscount(), controller.basket.receiptInformation()); - -// controller.start(); + controller.start(); } private void start() { @@ -86,14 +76,10 @@ private void start() { } break; case 6: -// view.printReceipt(basket.receiptInformation()); + view.printReceipt(basket.calculateCost(), basket.findDiscount(), basket.receiptInformation()); basket.clear(); - case 12: // Testing case - basket.addProduct(new Coffee(Controller.prices.get("COFB"))); - basket.addProduct(new Bagel(Controller.prices.get("BGLP"), Controller.prices.get("FILB"))); - for (int i = 0; i < 18; i++) { - basket.addProduct(new Bagel(Controller.prices.get("BGLO"), Controller.prices.get("FILB"))); - } + keepRunning = false; + view.printExit(); break; default: keepRunning = false; diff --git a/src/main/java/com/booleanuk/core/View.java b/src/main/java/com/booleanuk/core/View.java index a57724e9e..5b34a434e 100644 --- a/src/main/java/com/booleanuk/core/View.java +++ b/src/main/java/com/booleanuk/core/View.java @@ -16,6 +16,7 @@ public int mainMenu() { System.out.println("3. Change basket size"); System.out.println("4. See total cost"); System.out.println("5. Add Coffee"); + System.out.println("6. Get receipt and clear basket"); return getInt(); } From ae3a7bd8480cf8cef0d3e8cc1284518547997df9 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Mon, 26 Aug 2024 10:31:06 +0200 Subject: [PATCH 46/49] REFACTOR: ui and test assistance on choice 12 --- .../java/com/booleanuk/core/Controller.java | 23 +++++++++++++++++++ src/main/java/com/booleanuk/core/View.java | 4 ++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Controller.java b/src/main/java/com/booleanuk/core/Controller.java index a6f85110d..6fb6f04a2 100644 --- a/src/main/java/com/booleanuk/core/Controller.java +++ b/src/main/java/com/booleanuk/core/Controller.java @@ -81,6 +81,29 @@ private void start() { keepRunning = false; view.printExit(); break; + case 12: + ArrayList> ingredients = new ArrayList<>(); + ingredients.add(Controller.prices.get("FILB")); + for (int i = 0; i < 4; i++) { + basket.addProduct(new Bagel(Controller.prices.get("BGLO"), ingredients)); + } + ingredients.add(Controller.prices.get("FILC")); + for (int i = 0; i < 4; i++) { + basket.addProduct(new Bagel(Controller.prices.get("BGLE"), ingredients)); + } + ingredients.add(Controller.prices.get("FILX")); + for (int i = 0; i < 4; i++) { + basket.addProduct(new Bagel(Controller.prices.get("BGLS"), ingredients)); + } + ingredients.add(Controller.prices.get("FILS")); + for (int i = 0; i < 4; i++) { + basket.addProduct(new Bagel(Controller.prices.get("BGLP"), ingredients)); + } + System.out.println("16 bagels added!"); + basket.addProduct(new Coffee(Controller.prices.get("COFC"))); + basket.addProduct(new Coffee(Controller.prices.get("COFB"))); + System.out.println("2 coffees added!"); + break; default: keepRunning = false; view.printExit(); diff --git a/src/main/java/com/booleanuk/core/View.java b/src/main/java/com/booleanuk/core/View.java index 5b34a434e..6e341c39d 100644 --- a/src/main/java/com/booleanuk/core/View.java +++ b/src/main/java/com/booleanuk/core/View.java @@ -114,7 +114,7 @@ public Product chooseBagel(ArrayList bagels) { } System.out.println("Choose a bagel"); for (int i = 0; i < bagels.size(); i++) { - System.out.printf("%h. %s%n", i + 1, bagels.get(i).toString()); + System.out.printf("%h. %s%n", i + 1, bagels.get(i).name()); } System.out.println("Please write what you want"); int output = getInt() - 1; @@ -178,6 +178,6 @@ public void printReceipt(float totCost, float totDisc, Basket.ReceiptInfo info) System.out.print("Total Cost"); System.out.printf("%24.2f%n", totCost); System.out.print("Total Saved"); - System.out.printf("%23.2f", totDisc); + System.out.printf("%23.2f%n", totDisc); } } From 2da3b480eab9347ff992daaa9df18ddb2687f92c Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Mon, 26 Aug 2024 10:39:03 +0200 Subject: [PATCH 47/49] REFACTOR: ui bug --- src/main/java/com/booleanuk/core/View.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/View.java b/src/main/java/com/booleanuk/core/View.java index 6e341c39d..b3b6d71e9 100644 --- a/src/main/java/com/booleanuk/core/View.java +++ b/src/main/java/com/booleanuk/core/View.java @@ -17,6 +17,7 @@ public int mainMenu() { System.out.println("4. See total cost"); System.out.println("5. Add Coffee"); System.out.println("6. Get receipt and clear basket"); + System.out.println("\n(For testing) 12. Add 16 bagels and 2 coffees of various types"); return getInt(); } @@ -114,7 +115,7 @@ public Product chooseBagel(ArrayList bagels) { } System.out.println("Choose a bagel"); for (int i = 0; i < bagels.size(); i++) { - System.out.printf("%h. %s%n", i + 1, bagels.get(i).name()); + System.out.printf("%d. %s%n", i + 1, bagels.get(i).name()); } System.out.println("Please write what you want"); int output = getInt() - 1; From 82dad2813796a4aed5ccc513d1de391b1a2a3bdc Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Mon, 26 Aug 2024 11:07:17 +0200 Subject: [PATCH 48/49] Diagram and @Override in Bagel --- src/main/java/com/booleanuk/core/Bagel.java | 1 + .../java/com/booleanuk/core/classDiagram.png | Bin 0 -> 240492 bytes .../booleanuk/core/gleek-class-diagram.txt | 44 ------------ .../com/booleanuk/core/gleekDiagramInfo.txt | 65 ++++++++++++++++++ 4 files changed, 66 insertions(+), 44 deletions(-) create mode 100644 src/main/java/com/booleanuk/core/classDiagram.png delete mode 100644 src/main/java/com/booleanuk/core/gleek-class-diagram.txt create mode 100644 src/main/java/com/booleanuk/core/gleekDiagramInfo.txt diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java index 4d2c3ac93..f76866fb9 100644 --- a/src/main/java/com/booleanuk/core/Bagel.java +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -18,6 +18,7 @@ public Bagel(Triple bagelType, ArrayListouO^@tm(0e+@MSa#9A;J$v?$Usb$vZO*DUTrM;6+|*fTmwC8nFA*^bCF{TcP%Qi1^%3oZ{r~NEtTJy5WwJjs{fD9Ok3>jF z5Zw&_d0ObVUI+G8k?MQ@*Cn#Hu(Bdetp3w3a8ol76Z2S;|Cb$u-^zGDH1^53^xvst zK}m_uKKCC92v1E;^oX|bz&{}3B|yYZ+;acZxPOTF@8#mnA0qyH(fK2Z{~qlAsPn%^ zs6Uwa?{$j!k74=uw(^g4{`U^Y9~b98cx``NoIftkU!#OS*7^UGbG`YJm zskiL8>uKb+8E4gzRW$kK<8KCC`W`m8#nUmk_GL3|ceZbr@%>1t$Z#4LJua=!?S(pu3#<;% zu9fYM3Fz*wRqf_%%vJ36c?Vkw{tc$T_et|_FBciH;_bc-vD!}GZo!7<&Z6ht8HE!f zHux3jlROTu+L^TL*V;}uOG&TDc0{}q_}g&CTzjhm;*)}8v6k{S`!99r&907$wV~}u zbgeLcjyCGG`LYm%fRvM)Ubv_};TVGUULKVCz7;Q&YQI^c|M zT$a2x<3@13?~znAT-|ReIgh;hsyQuk;)bCcABGf(~Pz^cHtRj zA?_#8Vm!#4X;tH80{Ikt_t3cJP5*(D*Z`sJ7$y4EgYCvxc=lJm;Gx8%1ufw#On@U3 z?VnU&jx<5yZAgR{GZO7bw4!@)GvgLZj{vko+9hJS<#qKi2|@+qhTlr#74VS5C!dUf z@2{SMsc$OXO2AHSyb9=5lI3+AFa5+k(}Yv73ZlUa+27>hjf6uRxxcQ0--thWs6uLa zoNyz@!A2UMf4Ty1WER?p(Y~{Ikpc;ueFVRkF-C$HOv-}fvHRlS1GJx5h{Tau@F;i~ zNz?jUtl^algO!J$dErkD4eK=k_C8&H;5I%S1DTYAgwk4>4PN-@av}&84Lv}d*3q-h zFma4Iz{9g=l5XMYfPJ^}CXjCqE$*YIvBQ?oQKGxu$s6&K0`f!@1i#m=yYwFx?bR1-Pb?s`4DW_i2z@GhIC= zxDO{7AU!3CryFjrC$yAk`p!NJnAEKhsrlm?aH4n?8tp0@A7L_$<0Rl(ldn7Eyw7^V4NOsYI*+f;!Ni}@@;Tx&Hf9gluP2q+SHWJPK9Ic zU2keuK`XGO>k(Z;1pG683>I;cH{c8`>p6f3PYZ;{w5zxVDdq^_LM~kM(}sw(&slzn5d<;&!n z&)FiXo#}f2$&vU(*A&C8hAi9Z5GIDvnW;<;{~sar#UzVss}&pSu3bLWSzFaX&zuX& zNKZ*tCECvZaJ3l|TXnzfPE68&28g=uKNEFvI=@T4=d+B`Vk_Ki6L-uWzM1&3G#M&p zNTSIob@x}WLhD_*tJ&GI@;Mh=!^CI0Z&hB%U`3lQWFy`X{A` zN3Z=1njFr`(iK8dZK(I9aGEDwdipk9rnTkD04;~jxDEr_Z)Sm2$wgJ^#uVnlO9m^2 zhm{gQO2)41rvLUFun02`NnDZWZ5X5EIl&q*&t6e_#gJBOv6<4pnYn4Ik-*_bPtQvIVPz@6o-rNubhf`Ly4O5F&8HRew-vG2BM)it z>uaw_yfjIyT}^8+#_}$w>%OiU^;7_vc)@sD)X56*g0G$bD4x% z#68(&$e&hrKabM54mH}(Mk$n-N9lP!TedY&n_FFjlZ5)<1it<8B?w+R2M<_!Piv%@ zmm%?_nm_WKMrrTK{6jyy3OQxTn9ySLUr%(@85vcWU0uJ*aJnj>FvV3YCn16_U5h9W zLNnDfe2)ob3?g~hl}^0Oa}it3m@Y<{4GGzm*78}(I6G_ojaE4nflNY+aO&vZ@#F8qLu#`*K? z*r{GYaCB4Ie2CcPsGpY?4m1nxqv>f#$cL^{&Jzc`HD6?{)!;Nb+e2% ze---IKD@FvW@Y52QMT1{(N$Vqy|n%#?ZjDU%9ArEk7zscT_xijF?oWD_rc2aW9Qlj zs*6{*JHOaRU#votP|_;_0N-~>Q&7q_p0dH%%_OrK! z^G?Ppdo$Rmqy2RKt3Aw|5>Mr~+%`>uMf5;^(H%X`xST_T)llg)nrn0hYBF5{;4Q9Z6mUCV5Ce*U?$ZoBW* zzomUEw|Dm3wi)YoH6fRISosrBR9=_*C?Oz30_ABet$e9~RUQltp#L>3BOLyFeF5)? zIxN!Qbpe*HZf!svtqaYt5!(+Sg*W@>OBL9oc&Y{--ajqGMzFP4?}0!x9=3MIj{HU$ zh&}(gWjXj2%5D|#&e`+ozx{RCsZa$Z5`D4Ah@Bnz28=)yXxjj-j-#Kn7WkTTf`uasnQU;_NvN3>;MCtnem zIg)k&LEZH5LSdm{( zWCY{q#H~F8L@`0QsD}n1GmVxd>>7|z{sb9@g!6h#zawcFBlSQ-zzJLo!v$OuuD7kB zIO4QK0ZQ2Ai*x+dPVXfu0BaY;)!qLKbN>I&5QM12ZvEMgANvlbC(c#0s`@gmP>-*) zri`a|Ww{sUjw^@k-kcl9M|T~sx;ogxGU2fL@0kslA3i{Mc+uZqDq{t$5V&RC@^dBT zb&N7jP`qe9=ZbcjOHc1e4KzPNw>9j_l40ofYt3e+wlve0JB1D_bAm^JK-#xg@!}n6 ztaKP(0F3*bTJQqS6=VQ`D&$~vKPX*1rGc95o+xv!4dlS5{>c?!9Vwh zJSVjATXOXD)~Lg#^c@UoQZp)f zILqMG0hkc~G|hoD@}?KB&#HHtj6KL2&eY19S`%KqeInQweY&X{jE^|66Ep|=yP(_E zixp#;IwEBs}ySwyBU{x*Ek1bH7(thkGgFP&(~AQ_ zt$Qy2l%_C5pEzsym1;AyC?knqso_HzoQT5xu5b3_M<;c&eTTygid zXQdUS4xC!jppzjP44E0`au#D}l3bz6+~>UA>$@o(pzAo|6=?H_cH+?S34ez7 zwfvnOne2LS{>mB3Qzix@2=kO}P%N&N(TK}a-T>M%ep(Q(LNce3CP#5@1aAL-60ZN6 zaK&-1iqsXhO}{Bd1|><*MPIQ$s7wM@ki$SK9G8o@4JACnFY6Ju6{^Ss76>N`Yr@j! z3WQ^ztC9>a9RK61;vJ=btw@mRmM?}#Xfa9M%@*I-;rU43`$JLs;=KfM=bskK_{51q zv-*HTlFM>@N;)ognE5fxZZ0ioIAqQ}-(|jPxC5^@57eYR*AzOAIt~sN*A_4>b$>tT z$duN^bkV(zM0MGZT-IQ6@`Yo2Z9(0wSx2T-{RU+EO26n-?^w?>=dOaDq$aHl`|_RB znUXufdPPP<73ZJyhbM2|8R*|G1@e~AucVCKD}F<)Ej|FH=>j%jkM1y#Q2NXk*>cJ$ zGaaoX2;vYFNcW|Y*mU{OZu~On7{`QO8t5HTo4n2{m!2Xtk3rJ@&|9??2vW)=`c@0Ij`Gqp%s2RPku5=zBen#hY~oH@wz;qb&= z>Kgx$Z||gbHa3_r^KwIwvk=2A{MJ}b;?OA-jICh=^KQd87sHJux8;ojiq$UBx`;%! zEvoWhBeApfoHy&U8#qw0%0UsOEA;4k=?c{oZhn#%BHYi_3-|{gq(c9s*LEa87a8Lq z;9K*-F%SvtTl1Cwct$k2JhIssbYkP1bYV(H|9kbIt zyIEBM!>CN-$l=dlFYM>Ryj#3+r?i1N?sIPn4VombLVBxBx}2}FVAANRO`pJyQSKlS z2uk+ZJE>kN9+#5Nm2wl<4iGr>ae~A=c<1gM@#7^PySUY^r3LAwFhgCc z9Y=${(u%vJvTa6dzHLVk+Y&LWqE!J-X_tGA44mR`&Q2Iv*Lm9JDjMnS{1VtMm@J}j ztLS7e_Si`mSmnL!#}=pGu+=vmhB1if6wPSBL^Pq?I}8LUy^kkvo_#_e`+g~KvOlM7 z^CP-9E>+87Rl)Ot$y|?)F6y~EkzIivEt<qTUnX1*xkCy+_{bYR<&JZ6Si z5@9PNx8(c1) zwo47Eu3ipwwbi)s|%^xsynWwEn;tGBZ zqICP7d(0|LX|MM1uQNVz*Iu=rU}!6QF5Pzj_0^q{_;&V~@icLY>%*;*hQ z5hB~Jr_gpC&8=k}OPj?bn2`K9QBKyH^%q-Bc8ficF8Wmgsk$v&1R=li9pIB_rN3H- zeG(>+$awyvF2WtfdAPdrlH0^_qdQ}4PnUdLCX9%Ed(JUc#WhP1i!4MuGbqph)D;;L zR}q~a{>6y>tw6u>_%|9Au0x0sD?f+ef=}w``YsLO-Di@mE2q5Q8oV~#8#-5n5{T8E zX%;k0bugghYAU*^j@51M3pu6(m|nM+THc~@AB*3XPnFsPDNjk<3|ic7$%puClS$-% zK(#8lc=xqhwdIC8Vq-3)kW(YyW^l~$z=)jJ|E+y|Jm^Q>a#@W7g|*r4H5W)!lB={z|iNkD#4Xkj^`v24l5 zlb*-ZGP2@lh}9?c6Iay_aK(5=Nm4US-qCm5s7~t@iCM{+2^_yRt|RcIt8C4nXnY~g z@i>}mo!9OJ`e#W~U#D1OR#KB}XR)n%`^@}%w0jgVW#6w2%uPQVG*5p-YvXBNU^BSl z_@Te|FrqOdp%ZRM!TSehAV{Wn^=S-&ccLhhJyc?9&48w#tPXfaDUT^w*wav$q6_Lu zir&-{Yg2|KnXg?N0>A&%SZx)S>|w9yWus`wkK9c&t`RR099*gnZciI=+Q#G*xzFF2 zlo+u*0Pt%;ykkF4ug8%^qg8`W=ROAC_b=Mt&oS8LV#yCx!(P^_o1fWs?`*f*aBDcn zX44n)bN5_tk2YvakhcQ`1^jZs2PD+Carv-a4-BnGy-pwC5w#Bxc(-76VA4?KWi*m1 zHqi4z^zNwJfO5t&x{&nFj-`eCpc>3w8RnNrl-?x~Zs)5p&1EBUcW>wpD1R;v7F=nN zRY=c&YneT?(6yT*?l^s4=X@Pzy{PA8djH4h-5tAaY^B!q%aDt1%uUTA=|X6CrIVw! zQQ{HPHT>QHK}Y+I`~+G=srNhf=VVs|M7 zO2Qx)><2anI^Mc#rku4qg%nyO(r3o|(lA2^3J!vXz`M)sP4c`IYnVz^5m)XeK#r)U z+gdl;sf~C#afrb_daK=k?Hd2m{6XEp3`6&y6WntG2biBo2~6GF%d7m zsbGNLFyHC^(!u*#^AC{ZQGR((Axah6@5fV0Q~l;a8QW_%d$V*-aAoOkxj)~H{p2Z- zzwTZ-d+KSBXt8eqz{Y@AA_O&>y+kn}d2?Sr^(2SR#@Js^?>AR#$XotO3370w>dVg*L4Lj6Ji3hn zYL%)L)oi_S!CHT?+ap}uPHTAS?CZGb@UB$VAlV9=snYfWJ6BV=eA`|JOM|{Gsmwmz zs9CG#7a-btu5Wpj(3{7A0Ql!+O%_;A*#H*a@==>h+a0gi)LyP0Se=tZIySpa1Wt+F zW9C9GcWpcOVdy4N0$gnsjq1AnW2567RRMyC9bti{_p{v3pS>?~{xP`Jnmf@OECE)$ zW3!^zlUY)x(-t^`sZ?OYx}%>K&1GbR@~ikXTGcJGjr=5O`?_hn9*R}(xj?@Ukh7}Us(`! z0?|DUI~pmrJyUlW<-1WaB?hs}AUH$E0aD7E z2tfg}&(SaY@1(k(lDze1w%t3MGj?+%V{+z1#A>0!n)2FRoll_NJ9D#yw?M7WxF}}Uso z9=kpw0e6>j7Z8*u_8wEtY7?z_r4&?j-K;H7+0d0Gb^{Ft&p!JX5QJQfKiyJ)>6S`B zAHWBlMlraSk_gFmlXR&%Pbfp$cb?x)q7TG6xh^Z^bqsNyGl3Lo5z?;a!#m0>jCq<9 z4Ea#n%4-xV_!g}o;2a^I;w8Y|cL$Yd!r7Zsz_tDKsdHR;^V#twp&g1@aqXCk4>0)D zxAI%fzS{=b>=OAi^ryp5zVI$*5@GY60?G+gRu0#0Ox;)=n zZat!(u|Z!kWn7~i7n@~RvGRlIGiGT`eWiRA#N;+8;ac%5p%WQVC2?@orGJq6M8VA+z%mbQ9$?V)V}uX#F%~iyT+v z;gU-@C<}4%T;FKjVPW3UhopFwxfIvYR1i}g&d|y-mLj?ZI-9o35zD%C4ERK~!A0M0 zso)r22Gee~7=4$aE3Y=w3X+>^(q&$&p^+dG6CyQxAy#mXbUX8&p1F3RLq2RUZb1O5 zrbiHE?D5J3HU;ynodUa3=U{X z=DWXDRAJC_v`}cFMMlDgUF1_=rw{Gr62Vn1x@OU)oGfFx=w=RiliXxAo2Qp6rlJA6 zrA}aHmN^erF(5YSgSF1TUH|8hYpY}l_ZdKKptqt}C3{#UQS9V5s#`v+E5xQAVG%=) zrf5|c+8I`8OM0&Ne+%5+()OcguUGd}l-*}i3sT45qMVr1{F=u(wcD5bmUURuPc1G# zXYi3yj!_D_9G9$SaQwxLa0Vol#tmQ{%9-T_1QoMNen5=}@wO_kENMcr^r0qV1=VFx z9V)|ouiiCS*YUA&je6GBJpo2dmjQVO2EX`#C1O7@1PNObr&f{!$>J7>Lsr!@esYUY zW)WRKef;C8seG+ON-2K_UVH9yqz+uD$xjvom~FU8_@8u&f;7NdYdOCJmAZ7j`a3_# zab2bA&`U0)@)jlB5*n?dPpCUHxH99@TV%)(?LKNBZoF3WRUGfRNz?lrU8Y(h3ih3m z?*EU){3S@57!B1CjdhtP`54fm{i+^`AgR=@SZpY%+xev!jMyx;akbvPBo;R0Uow}q zz$zP6DMO!?-ckunA$|I+cF48FrF9*()AB#op}AEzA|7KKD=S$6(XqXRgn9uKxSI@i zQK15DjiYwd0iK1UJgwPRTu9|SzR2k%Nlb^u8B)pa6Dp;WJp>%J^o^`ON&}w*pcQQ5 z921MDySuan)tJs5n%>NN+(M-8`Sz2a-mUFRWrJqog?fl{l8f#V8ptp(Rq%Imxajqk zE4$jbh6DA2C2h!RI;MDnr^(;Gh;c- zTmGjX#P6kCOZ;V>s--I*HGQEO8^q=UF?y+Emku}8!aMtW125D}s)bh^GUw}wo%@!!pSK=my38Vk%u&nbr)gbMVMyXa-7#ygJ+piRWzdLO-n;;#%V|&~_x!E% z*bo1j-Ilw)KBT-!`9{%bX`J&+^|yt)auUbc%0!2(n3V9n0H^X*)pPxt$A0+!+QziV zY;3<}m7mU=a0wNm2{Y7ey#<1PK$2@Ih4QI`+$kK1xiN{f*d=g5pzF{YK!`r~!NR`2 zNb1DE{y z1xtJf6RuK@p$7h}(lu$=pWO>|;V@V3X>4r2mnad6Bi;Q~@b!5(IeQzpZ9;jE^p0RB z|EUF>A$0?HJZ60YEBzFWgLj;i?IkjR;(^ntEZCK0?*SOLpQeWzPAqtR1)}h@{0axY zaR6T0SwNOo*Dvw;V(GF3tk>6+%yN7#;vX808lnJee|Qy@KY=vK8?hh7cQnAfjsz=f zM8A0nN6;HkJDHa5AYMI$!AgZWvFQ9iae$02Ad|t>NqA+vGJxuPmx*EMKNZ!q8NnSd*DZlEA;a{eEP^9Gsd^TszJ^JaI4 z%Ca&MDg3czHVpXsz;OG5Ifg{=xmdnU-j`CudVY-W3M?Qo0G`CzqzM`+_Yw_&?cASA zJ&)xswvRk_VTH%=-DU8>fO^vL6*3{c!!W*GgHtKHYwiXzD1 zYxP}~=waJ7@gTb5F)FX+iK+^qzx&RWqcFs*0@wVWC;ftDaMNOW$h*!i%2C40)F3;- zHfR0CiHTG?)XbDx3G)1SxB6X!(b(XKW}dCNU-;VcH@n{26ze(*STlQpJmxR9z9yuA zHK-xwWV{)Naq$tPV*yM?8x^Y^9h1P`RSd@;Whv8i-&$TSo9ps9)_Tyin4Ll=$tJjb z_mhp;2uQlWzHITlDC6+`#}7_U&B!h$xu;C&oi4D+PPo}*zh&c13l*6Slo(c! zv=V3fgkZPqch5T^-TDB}t$BXJ2RX7?A+N+VCFM*~idvFaAibU+oA=iJfNoL4cuhJ= zKa;?%E55*9-)2g; rv!Z z+3EmFw4!>c#p{T4nch2~n;MX$4@9NbiR0I?g7AAmE#PEDLRlmyjFqO4)lg#bCP(Qa zpFbx3z%}pklu~1D;)T(y&q<}Md_`|sA#F{^*H=iaMyh;@KL|EASFGRLZ4Y?%UB*LF zVVZ{`2z?fbvbh>{Awp-W1fg0L(4Waaa&4&XfmAPCMg?VeQdh!r7$pB%=KJ)CZr_3R zLsUN|oQ5tlivl01OQ|}XWufImTBzLBK6*oBQ9|(()kpg#UNBkK-_*%A?dV{)885Z9 zS#OSdM2qT58QF%ph@KDnb_jZ9d2pKL>onuw(l}-{N(ItQiO;>5Ort&gC-kk zYmjBE$%ho(3j*(HrEkRqQ)g=fmM0^=VPKIw08no*-i85PuZ~vyNNu^sT1Gmu{(0Os z9l^X(udeO~6y}>>RnXFikIr_NO%SM?4HVF?FFLm*ok3Fdo$D!#ap>dYM}9@9xI)bB zegTjsb0mnc`$riR<&bwqGorBCVa*D;M+a1Nn5`8z6=jbIp+jSpsQPNd`6fMHuISQT z^Bb-U=Y74weMqi4=k+7nbhTH&J`cBlxzHpOoozok)FZzl>R_vX5j3WoVmVt0MIH}M z+ub0LFJu~6%QYUm0hr|bAo$5&;tt07NbgEGPClhnF91!=j}Ca=T^^Y1@QwYpIWBUa zQvI%lcn&+$#U}?Q$HJvq)ThgKxEA6 z9YW;OwqcKXJpdj+4v+IN&KSegue=7N`=y@q6l~T{Kv|mjdw(U_g za#X9(3TMPe0c%GQdIZbZ;{`<}7>)LWSPO^rgJQIJvurkEu2z{VZRhBmi`ftCZMBm9 zP>?tIQi7Ah(&PmSIQd7-*ErdC0C0pMGE! zbO8^)M${AI{VQ11Z-dFt^1K^`T_q_XdK>K>=W$NW8(@_a8n5yY=n88KP+U3PXB)7i za~SyZNSQFcFxZ^YL&wv8D&KrWur$H5VDd=X_Ip_TmWczCx=&8RI!?)|0c8otl3-sM z=e2_7QgGfOf#>Qryt4g34S3(wzr=ZvPoa}`OQ(e|5iIQ$AWKan>75JM$=|4hNu^NB za4M37@{bq(|D+fGM{WKuRU4>l|KmZ5l?zP2L(AJI!RfCrLj?p~<~T$U2g%%@k2N`A z+&WGKoY{~;hh|~p-+lkt$(5VuZE02knt(%4I1IxDbw9zG?S!N9F)*6kBFQI5@XFTw zK5Rg6^!K;d2_h~0Ipjax^?1|s=ePqt5rQ>ld%XV79Ct`7{_)pL!H{`v|1Y0|vFO;c zxt!WF<@od3_0%3aze3VDXUi+Zac4E>?l)pjHoFfmFuCvG4hYY!?Ks4hq7*g_+NByd zA@{b=&fw|bNcNcrbPn9dFHW~Xjq#uyc*gRZYg8+$ZhIMbOmkUEU>_wbw#Gf*S=$H` z1*d$*vB1(VqSJNYLYg7uQJV9)$MXyI1e&Sy0VMO&q*@3fDoyW#wd+XkOz@WO^ofb7z zT_)uWHZdC2mE*N@-VVv^(HvkykCXk*HCs$%j( zO65^q^&B35MbtCi zhz>30_T6~qe%DM5iqqtIr;TEGb_?bxtCBaZz4Qp^)Jmrm$JQ!6D>6ynCvBdYVcm)C z?r7kw+0AVU-Q)EQxY#b7qOiC8n}@~VB-Mu}xIdwDS+<%PfZ!4J>w(j2?4|s~VLLu< zWSmLOb#zVZ6EyQ#KicRra%M16Q?aTa_gTi-tF9lSo!?w-7i;gqRnNET2xd&utTW#mXMul455Qr6h; z=T1yS{(8e9%ed2fz4DteM=6GSKQc(|j(wg44Rf2iJm}sM8$;5RslYDQ=Qr9YYt`{t zo{8Seaq0a-uNTuC00c3TWWK4pcAyp z3SV6{N9$@aA!bG~8uDAwHEq(98(%yXlBR+SQHD7$ZKPz)Hdp=DDOp=UldjzPU>7*t z`7Mvh09KN(_2TN9FO20DIs61J^_AW|Qg*IP(U1;ZpOp-{L+0!|E#pvZA>I5GRw4$+ zpIJSotDnjwvJ|&un@hKJceXI;_`LC~(5Ca)Sa)IhkI1D@!AtqUI&6=0bOZBa97K%h zrY-X5`oy2Nn|6$|6;SL(`%3q|PTJ(#cy9RPnbe6@S2xkwzPD5Nhw|26rMkBrI+^Na z?BmIH6uN8|@4Vm^{r9Rzw)u2w>*jwqu2`Ea^ZD-`Yf9_tW7zyG>>#ZFI~9GWlx*&ei}w7 zDI#qW&p(pqFWc52U^(yv5L`{`SJFrX3N6>KJ5eA4E>9}GvmqH85}E0$^D}j3F5=la z3)zR2B0&1zUO%6QuWG;^+XRp=m7)i?;bPJO0J_C;hSX>hpxhnwQ{_PWCX^?ZoMn}!IO9L$}L{U-GRz^b^e^^+6}&58!t+`t?Km%#rd?_ z{pbg#9Ddb;kVOw%gTZ+4M1IU7y&77PE+@@aHZp0kXRJD)*m1DTIoSnjXKlOsLCS5c zRUqx|wo2Qa*VftZ)d8rAGoZfe1-jio#Qs)o_yd81iM?A!e^ehF*pUWJQY__0tJlg; zA#*0P+RZ}aL1$FD8sodEyi;P7ok(iXGui*Z9mSF$Ubi)h8o-#AAq>tu3+@^zoP6xR z=4K0$&SG__s_0giq;ox^I;^S{Yf5TgettX^qu$TyOqseAf$~t2BdZqKW`4KH6eivt zV@o~$%*J@(cgj%eaJomOzA-Ji5FOyQUNLRAw&;Qo1wtYtx+d8 z=hv}US~!ql6pD0_Uul4xRe`182iksNnMPmmvPdOIO^ue@Bk zc*AyiQdWJ?o>WGnDt@9m0F%zqI`<-z@71~eJlBda;T)!_i2cT+>q)=QNx zlbd|$Gu%&I*DOteLVX@@kGQ&VSnTO>sNX*C>)hylCMcOb^etfXe3p5Gq2IFVmsTEQ zCAE+q3n6B98DoNbjPTLG-|h;Mg|cfrbrp!_I185s%w%tHi-L=e`~a^gxK$)nrY&tD zqDa+>w7D*#0V*_dlZ)nGH*))NqiYx6-LVrgnaSAT&6;E1&^y`t*2G7IbF?7`^< zBaW`^7tRwC)FvZaHLh-&aYh$f-Zr<`?JS%prhyJ?>8$2T7-=ydL(-vwb{4YSahrb)==_qVdNxgO^6*Iho8kSr&zpw>Oz!J`*>#yBU@rz-CSgm6#WYAH(V#YktXR!=aIH`gUt{3vddG!K zF2luVao2 zMGUJz_FW(*K6ZOP6IA%TssQR9;5^TY{n0B36z*G@kKvZ}|NUv?JPTZL{bY_(m1!Oy zo1tpu74Z2^g2H&F{MU!gmlVwz3Dk2Fg!sGz_Z;j;G`n;TUIzG*;&b)oj3Hfu#| zd@lgRSCV`r=%KJyTe+zFq=T@iEFuAlO@)9Tm@&BsT<^#*;U z;!p>b*Kx?R%6|9q3PFVN`^q0ILO)do*^Nz?=ftd{$593qP?dLM+uPUfVmy1S@jU1| zTfXN~%Q3~}Tnp@?QZFQamC=ywXscQg%FY=`cH))B;5@55IJ;(_PKj;NvtwEF;Ox4M zJ}hIcx1qCL8<(7-Q*Hm@Dpj24;;obvb8F0#)^X4|pA2{8y$1vR_YQo>uuy?+njcsE z0N~B)&U`w5evZTx9~^n;-&)L;EzUf-tEB$?_hEHxARCz|jfR@DO0-%%hWnu^D3gtu z=LEgU5!7Nc%MpH1b>IDV13JuQBi*#=XJeMQ#r+(32T2?dEAh~z`y(z6T&G1GN23L6 z`8J^T(p0)5L0*|P6hs`|M`3Ni_6qT(f#66&JB%pBM?_^zC?al9|1Ugl=fu zL&^WlIPK% z@M~h8PMx}D?5zA?R)^Fi)NhQ$N~<=I*091-XC_3@}&wk0Z6$bA0qhA8WQia(KyL4R^7Z-3l(v9N_>K@~EgU8T{ z`xv0O%jV-@1lgK$r3NHlf}{YRHJ?|VB1~dj0z^5?U6>3fF>Ig!@z6_Ro&=Of>lF_d zIjwAV^4m$xA_n_~UmoT8fce;u_fxsc4%{4=V4P11q1?D@T2mN@XolEX84ZRQyJ27j zANqzRdykh8kp8DR++#4-$a6#5F9;4ATb?mPvK!h_c_8RSktibB(mQ5tM|p-8e`x!G zJKszz*<#G2_>QZml9+@*DGeVhnV~aB=V^j5+yIHK*AYNwK&fC)({fh3IeARzJu`h;Ty z;>M~4zKvvvFvT)L#sSDm+N!{yLBf*udK3Am9ruhl)vn=s=HZf$w8?j6*Tasx&LF8O ztg=>L-bugDs4x+^pf|j{astieqrB34+{|(9=Bn+{7vR8R-o1#m_q*%8Mo%JQH*$^T zmRZytA(@t`1#<{X$&3g?L;z9Ded{=o!y<*IJw`L)Z zf*XC<-2iI|wPiDYYdJx%pNEwmV4#)6Q9~@OYd|j0mfM~o10Jb1lz8c{F_vkOvHnl3Y=2K0Yw^|$3de3oQsFDU4%*^q65B7 z-8u%lkv*Wvu)ecY8wZ&qpkp1R@l_Oc?cG| zpAqwtfHrSZ!MCcTMPk@j>R*Ca3dfT5;8$3oI`VpSI(+#Jo}8>@;M<9qpifwu%S-~s zTsu#_AD5`v51nZJ-cms5+pB`E6ASK&8km=b;Fa8S0v%W)?TI+mp4kH(&h{H0RQ?af4 zB$V|~GpE#e8ey?rF$;X_VxB0B9ViqE@!Er~T!LX!W-m}0QnCAdgi50YzJ2}4&K`b+ z54>XiMY#a?3RK}=xS(r5(2p}co50Ow*I&E_8xht}sKD>mq@zplN+@*NZmCKB z7WP|K6p)706aJ5I8u)*)%CH_mY|XD%(Dn9(jOAS-tBXL-wlX?c3v$Pb;7t2^&5?EuLA0?-s9x4|reb|N2>8J&ff=F!-H#`s> z80bBHA_tCNPY+9UU0~e#8Me#S*u?j^=ft9khlz7@@X%d3>RkGthchx1gulIC_}d;G zfCj%Fw$*|6conQvC0O+-lS#{r&C zaW}39$sPk+L>i_t=33Z*KUi4kgj)h}myW|B5Eyt3Tygh70e1z^JKzo_+~GctgG1s; zj=Q18a?V0LJXR(g-x`K$-TZbjtsR}6F6VDj?dMe^z20u~(vT2fdw|1UUmL9rrzEa{ zltfs75Et(DVXopz6K~p4x6hi{L$hkfH0#-WI}%z^`5Al{_)i_tBU@UfxnZ+^C=IWo8RZv@!WPJbZa$6Jyo= zLYDyk_WU>d_r|a);NGX2_naI=Y4E|Q`|v4Ej?>N=Qq7rC9pn>FG~l~| zlLwsKvO@p$&GOYF2JHJX@?h`6!d$m-iue9l{hjOtH?FfR2O)&99n1t=mHHa_n0Lr1 zhNAT`;N2y>rQlmK9s(EL%RkO zlM}NWVmH5@5Dz|lon|R9%La!aSQHe2?t8RcItKfjJ-|(@|JJCD)ASK_R&^jR6V(@W zt1lu?)%o=M$sT)Q-qq*8PI`Tb<5J*oUGL&~VSc_@jGW7FnVX5b-CEUS6TqXkr)a~8b>@L`2k^t-& zv3!j$E9P=*jDW2+ik>g}pyGBzacOF7t2K65q6aX0_6cuquU?+`gWvxd1>WpYu-Vss zc9!sF&wTc+&c;pF){fP&1^Nhre|A!zkRK=q!M^0Px)9%3SVr-Pc?3uv zN@iIJ9!nRDRjP(C!j1J32qLpYhJKOggUiPb2Yz<_CLz*I2as?(;PNqGEN@Pne1rI_ zpio+50~qkG;)5xW3zFqwqZ6sPe-Tn22p%qn-!Q76_2E4Rz~xv3f?JB-mm3)MEi0~# zQG(!PFHs5DiW}Y`NCSVQy}gIO{_l+~Sopz21N}hRV~bboO)Z@ZhLnefFDdN}4BuCF zP`_S_K*b2nHlaxeQ7Ci|X@}B``{1WZ7l28gd|7Cn(wvNpb3Ik;SVP3j)Q_glE|X;JuM!fprzm0jPwI3z)JRSUrf)D-q6PMh7v6Fe`=GQ1< zJ{MQD_AGik!bq?k65!i3q_E0QfVC;^KGntxun|yZp|gfJZd`qk1K@Y6NR*qu*M18L zHXcGYF*|FmVuHYd1uQFGPe5=j65am@OH$SnK&+mam`^zD+=77BG!2{!nM?P(l9 zcK0-xx^6zG`QU;nc@TW~f=8*OWKBBZE%j-TuD<>h1TP2N($)Oi4O|D?{t|a7ne>?f zZ-UX;uWH8tgr*{I8qN8~gvtS*;J#=AH-Rz~s{?P!7w7E!t2YJA?)l!=rE4oQ7cZ6| zt1ktXWqR$z3f|8ZIHZ?fP|$hPMu3nF8(?ScbshRx!praj5xaK*p^C%R;}9x0RTdT& zeYDQ^mMe{_0mjkw7_%>r5?kO&1-;z1H%fTvgm$Mv2`K-FOfL%N$}zCJ0*xh{WBRc2 z2VlgJ@h)`AdC?-E{ELT`X+QhP(vGqP-tM>qpVq>g{$dc`f8hMj+k8^ywB1>&R&Q!= znLLDGt0IuKt#YWeYi}Lb7B9R6MtpFO>lybeV^<#xEEd#!XG`3c)a&r5B9tsv$OE& z4oxmn@$xbI?+L9PzZC&kSR=BSzgjI;Iqa)l#nRPZ2*+u88Bh_Ky(es=nejAx86Y4d8*13ox-AVJ(MOuaHiP8J784@ z51n7%MwRtP8z~VT%hPNzb+Aewk}Z=oaFjjvHOs87H{CS{mjJ`#IX9qE+N*wC3a1(j zA$1TIX5a!rYV3L73)*-^{=Rm7-Nozu;3A)atCgk}+0sDjMDuP~{WYz?N)VUH zm;te17`CRx5xLSE{Ou-X>ec5sJ59`cJ8^(_1*4?kLl!el!N)gEU~0ZY$FUD;F2Y_c z7q}Kk?$SZLpTVjF9;PxVa0m4C_NoPwMn;w$2lByf0OGu7OuR!eyazU1uW1&s|8>Yv zTCiEPic$=AgRJ|(5NGHgQNus+`T%xIvvcy7%tK(m5<_dgP|lg=WEWqX|MtI#d&{t> zzNl|l5u}t5FlaGIMWuTT!lDHPDM3LHDd}>Q5Rgz%5G4eWE=fUJ6p@xjy1Tocb!HgE z|9!vDb-kaSFDf!~&faUU_^sS}6Vg-eT>IB9$=Mu{-_0%*w$Sb3<_9;%U?c?YL6K}! zeuV2PZ9q`aql_;OGox+x8Qx_bpb(X+qs!FnXy>P#Ny=9Uco-(|KWe_6J{oIW|&$B)$W>0z2e zyO#P_<2vVgTbT9}+LIc5)ZINcJO)$}0MRXrraXj}GPF*v$u%L*X2ojf;iX!n`;LjkZ?gRhh>mi?UYwjR!M zmq>&=oOsyfDW_+>qdIuiBQm2;tv}n0DcLfcG!?LaFh)tVZ7&}^xM`KYfi z=>ucqXxy4GDB}*O{QkQyLa^AwhjLj}pp$rOK$=_N{`rJ$e2Gt_Ouf8NSL43b-_JTs zVHjUD?&B63$~8Go`IYen*!X>i&1*|`M={Y{ARGF2_C{EWA3SX9;BPX9QcpA3PS0rE-)}4sP}GJNN*@-?~}4=d6(e{p_g8{H2+}e z4OsZN^e-GLUH+lEX|?>l%I50MqIoZNPc3R4*!txbZd6k7=H#>)+Q+Brr2csx0j9%; zgE+-&Tg^p@)ecBr^se^RBX^104yI#I^*>>#>v#g$O{GUVSNhK7Wxk32+=#pVr#u6t z@$02oVl>~^`G%mP9s{NF;e1ZLO?? z|7H^t^CM-@umR zlspP8_n6FG&L)hc#`=IeUG!`Oj# z*i|5Pz8`G`uVEt+c87w!omnPI{gT}V1{xjOgq=q9ZD-S@XB* z-w%?^d*dQDOvC&GFTr@MrHmDa$c6XWxrZ?Uxh2EcBzVnf5;pH4VX|YVMAM zx3A>g4zv#8C`>ygeA-~SFY40%RR+I4yl(7hNd|bOSk`^vT+EP-_^eJXxk}>r_A9O3v%Un)RAjL*ToY9UK59`$KqmCN+!R|5W%J{XpGiCGlcNZ(H~uL064arbx^G@tX!_A5mIG%R zAuN0zNciI5jW1YbScM1fV$ZB}^QEs&rYns{Hues>Ny~b4hEY8@t8KE&On$rr;qPyG zYL!60KW#0EY7;*MTCwI~uIczK_ewf?Hy2pzCH z1avvp7;!`;5r~Jp_qC48q0P!R?V1~vmXedqQ+_`~bvJYWk~mILf<~I8e7>c5QvCEu zGPUtev6RPp217Gu9KxsdZOxeJB|2sQnX|D5NwbzCLGQ34kA7A3$H#5D=XHXv-MtCM zzz@X*`axdHbV2`woOl&=oHkUbQ-jHWgXh7Su(X+XEzTG0yCJLhCY#~;+Vc9uT`C^s z4&d~HsAx1c=y0DXF}Z^zC<-OH{#$3D*)!Q!-@^<18mkd_mX~v4A z5n!w&

@tIL^8}o(OaIr5AdI&ru!9P%RfFd>q9bglC@GTfcmzzJ0h{{%D?H$S-le z?bZL`Hgg)3I)veK7CBXFY6(7D0e$oF;HXQE?z_zIKVFAzENcB=`3$F$u9H(=m_yBb z;kT|FkWUexXLtmr6O|6s2oc*mhNZ?J>9;Le9x;a#tz~zutn%+(oH^_G6XMVRF_K6u zd}up`*P^6zYE`PwBPgZ>jH|=s$e0*qb+`ys?-pX_ng7XxfSeB=>5aNHIjNuKw6^Hv z%_!D(SoRd4V%JHkP#^XRY{mooL@~V|+FJ`e0O@;Ei%m>JqJhGZpu=h-2UqOv@ z^XlwtK8ra{+u)+gKaQWTmyNb1IXn`h+t}M*CM|WzcYHOvTZjS2;s_>(9EPnM>l$r zu@c$`XmYvlUn3d&h)s}Ubfq1*`{i?w7qAL|ktH?bD=h)X>C*L*SuvaMx?Y0HlpdV_ zI;m!=I_3}V4aNEknx(B7nM%+Sa7|9$1-!YBZrApNplPxECvzs2B8!}ecq8g?(k^lB zioxu`qPmwKHVUdYU{5mnIN@us!w4Uvj8hfK_WtWRDW-HNnP?6%9a9_`9h>m=B{?=- zLqEds0h{K=Y*`twtpeX`I;_qT$A9$a&H<)7VI+{KS>k=%^OC1${mbtaL&YQTwpeBg zLe8^3awoMt_vz~$kru*%7P2#`S=Pp|FUUx&bv7ee9nkc5DcxFkdo}tH(qM7mQNmtf zBslBIvu6tk&xwkYeZ%S4*z6*omApK) z8#UvZ-jb??Lw1a zRe2Tun;=zy4W~;>dS|Oe{OBKCwT=_Cv`@W1W{ch2wp0_*Yw1{y5$36J1x@g)*;{@c z)A!#nVAW14*VUPGIT0jm z7glUP-WoLPo0812y0eGD3cgMT69$osX?-TXzeWh37NX8|I%dDHAW)t3p{c2dP1hFN zjhfD{Lydk~f^=Yrk{2vGAxI5j+#5HluC$xfoLUHHI3~NPvxEO--eH-Efzsm4>d>3a zOpT@2%@7>|&mU!>ECT_*jMpiQf8YBBDHj<~!`d-P%3y6ZvMH@xiyDD;dxzW-wT$bM zOPi~RE>0ZNpm|9vJJp_Brv;N**14$Wx_hh!Jdt$K zwh3vM|Epfmm5BT1>`IGJ1sw@Hkd$_L(d97z<4bx>Nz@T3uWOOW#0XI+;3*;84se#o zqrO^7!eKZnmwz7|bTau?yvh?J>kfD@y)6jk4tK0?};rLj)|drM1>b~nT)f1agj zj!M$Kt_o&i`kS7gYfrJWKBA9PJ&=IO_7xZYgy=Dzy7R{sitak=jucq?W@Wnlj){6A ziA1drnE&NjX4p)zSDTTGc@fOrSPuII=bJCcNr1QsK(jTt+Rwbi5QE{07 z5R#BjAF$U1P47X+C8YP{lZ)pL`7Vm)4^6wsRHMww8jUS=ttJSM zuOE`OxFLhU$j@fGHez-THuCI?9k$?wSGhZ%{B%h}D)CseJ4EZ`lzVL1$tQ#S@s1UC1&ii3%W#rLo zfa)AMuo|iYKUuDe$h6RAB`iM7asA~m`5w7XiHgX46DWnlqD{s5ZM2!RA6KwO5sOBB zs!TAzm@b8R1`Suw5LoMu!@KIIvzMC zoy2O1NnN=q^B;;g&G_5OBC}&SubaeSySNaJMj_Xi8dZ#7Yooe#@JtJM81LU7vSAb# zs(m-ET-Rpbufsi$0il0bA!$f|I_6VA*VM#>tna?Rg1e6DUaj=eC-jDrh&8od7dfA; zl{oIzA-2EB4jl1qzZN5Z^b=nuPYjDfM4ZhqLy+YKX&CgsakEMrRDq^o(;Sg!95RKwfy@P2V792b|J zSe^G-lUcQwyCUs+z@s=Ie^)5A9|p*?swsR9R=XeAPm4LzPMbBjJ(hop- zuGB1NPGpxqhlBk)nmwsPd;XN09c4U}I{jcLzf&F#g1&h_9y3;5<_qjo(s5pzJ`tm9 zP)-DskMx|DVz_Fgy5=RsMCH2(^0#xU%>GJfh;Nr%p-zUhJIMN%m|tOG$yKLKx~y=Z@MTjA)Cqc!N>^+d7VIe(0S>hl^cXKe0h*7E$K*$Q>wwE6KW2YV9;vK^@o zC5tlfur!Uhh?RBVa7QE@tmm7HQL)q{-!vker!s9ySCf1`=7Mk8voaJ$bmq(%_C%Gd zf0YZe`3P|c$Z-Cg3APkCJb61JVa`_2W%34O%@S%#I&ra5_?Q&Xi0|n8r_)! zo#X;TL9eTT8@Bc5`AL3qm(+b! z0IBm)QlLW4OJA!y|2mT!_zWUWqHFU}J^d)t!L@pXXxL|B{vntMZqef$#{u=0w$6f~ zTLv`;+`NaR5l6N3Y!7xgA%Tqyy2yt`F(5nm8QZCx!VxqO|MT1Q$pB>8d=W7fHn$s4euIBUxx~OoD z8(i+&UKE-a2?d*T7$HUhU?W&G4^?d!)0oYdzn}HYq*=b5knVxcmIt8d6Onji1}`=q zIT$CFkLX}ze;3$O=^02ZRw^3LIq3C-trE&DO78XM@olK=SEj+utNKS5fX=hgb`an? zn{<+9e#zQnD9kC*vr!Er!WD@9W5m&HgeExb%Q5jBQJO~`Z8gULGv4@S{o(B&e5KGLyjk)||M$bpB4O5aXk6hD5Bl8HSqj(hn z3AQ6vum5?~Yy!Bk8SO2twe6OXo{hJ6hFV4-Nma?Pf=)!rBJSgjjnVapxXj(pu^f_} zt(N9~;c98Haph*!lYGP&@KHSXGY(l_em9?AmwajFZ*T)j^N6{)&Pq$i3>_s3ufayO?9gDwo5|G092k#ES^y7`hf|OgSF?WMF#wdYQ!4xwmp+twH>Hg*Xc=){~Vastdwn4s|nz&{AbICwdL=Vi9|f}y-#;5_Cr$npPE z9!<+e!L;{tmNn;X^Zt1qTgUM``&6_4bGvzYAs~&hpOZ8L&D}o>ruzYTBSpFUhIitL z{}jsWYcg+sl3lL~T^0uKay_X=w2w~sHdFlSU+)@O>T5jj>zq9sGoGm#8M#W@(m&Ep z-hs+Pme+ioJ2;Y=3C?jPIO;62ImlE0;xz6_DO_5tu8_OZRW4*Xs!zp{hT$XS6X(wJ zQ6{QF$rE$}B{T)meY?^-3($8K9(w@8*pomj|%o50( z-bTw}-c*b?rM1d-C!haaqHt{&mH0}f+B42nj4v`S4WZ&YUd|=w3#6poOIph6Hbf_P z0^ewA;>ya-15;mJP62lBjH{S=&ra))P1OVKg^==yR#Ya&P4=P8$xJ&|uo09p#kCk` zz(nqppT%JEqTm)R;a@}#_Dluc*tl@=4kZ(%VlITfN_ph89^Wuf_xOYh#G#}>4lf7` z-b3IB#O=RxYadiSoqS628`?`y4dYd#A0sIZ2l05EBS5bl;VAucnL$&NK_RF261Y0f zwW{{mOIc7dEd3Ly*|1plky9eXSvS#ckl6 z5ML-)`#<4(&_y0aSLSQ%g1)obgglV2=M|l6aI01^fWvbxo)`1JevdaRON{E7;UJfa%0-k2(L6`t=Mt%ko_Qi8){m&Nlm|Q zT!iGX4DG`Q53ZKbIMtb(;SLNwLkRIX!RH|c2n`}q@w%KQI#P2oUd_8~N6XwYYq6~- z*hd0wWD<%hM%9-$>4HjI8c+cH>q;D8>g-m$l=-0r}Mxk&?P$!^tm47WUq-i+-DPA zjP*A;d_P7C_gHmA&0ZkJw0xrC33}6SZ;j^J`0Yi^QTWD;+$k)|M2`dP(Kk@xz-8ZWiO_tZC;pVNdd{<)5&P6Vkr@5jMO zo0^sVEwNe}PV~bs^9bq1Z0ym&+t(n--6HUo5X0++cmqSJWMSi^;kKi9>xkz6?RCYs zI59msHs!V)oU<&9Ik92GNA|zB3u1r~oZ!Sp`$jRYtN#h~l+#vzYO3uL-B~#?XK@I2 zlq=Y%;{e0K#K9lQV~(Vv9Qv`Ya*?akK7b)nxtLj@bOm_Sk*-U3xo`nIM``h8fW~2`hn=@=dD{qZ(M%YXqJyo#yNbQdL zRYn)Er;rq|tyQ(#(W()9Kwt=tem;x{Om{cljKJ+))2wf*h;(I(&s7#{4_-xB(=dKp zUK-9}lDXtb^!=SXFb8;GtiSb>&H#-_hCJ)ZE zjrF5A_PGe8o%b*cxO#Agl6gh}o69Nx1fSs_`ecL?3o-mhCJ)_Bw+6<3CbUQDp|qCM zhDOs~U>YW|+yp}nSy-PnVB&5K(%n@y;sbz3V6;C(FUtZ&!4HTD5y2Tbu|yj6+Xi!gDAfcbjThwAsCwFCs?Kx z!*7a0l@)qFrI~4@H6dLM$Rb#{{U648duX|>x!~}90|U;cuaKB|^F}2grA$Jm?)UFZ z15@sT<-14e=_{3|yl`rPA{J>aoZ!m$M5ttO`ka_0&)0=XkE^O1PGUV@?mjhO?7z zW&nPdyUG+3(bsNf0wg1OKsSMALKZSe+Dm(>^-VaEYZ zZJ`Dc(VdnX|J{Y}^3v$S)kzHqsfyk1;R(0D@Hl)pvCl{g`^p`E=w7w&0gvCM`xdn7 z*LIA(BJ*^wH@Ewg)06{Ya=+i!vR`RSaNkAp1H%__OiBitz~bB$j5Y$bup_csnkzz;GWu)&add5>f36fsttj#lykE!oe-9~)D<1SpcSZ3Yo52ueM%DYAX zylT6*Y7hDkQY-)HBQ3_|QYT7GF?DrWYBoKYg5=$t*QLXf%8c_d!`efjSF!Gj<4!~< zgv+c}lXG09uD|#;uA9dH5SXXH1DB2=r{I4UgF3*!mGc^%5TX>{`1#}atq3E8>N;JZ zC)Q5SVPp+{W){FBY|SirMDyiXp%m^|b{8F^7zsWlSGg~pbqdU|UTye^0QLT~n_}QT zM9AX|&B&MkX=pYk)pfJIdL8*6<9u-2U`VBwx;kRQJ0$F84;(Mta9sB=JyPT63ho?D z{Y7jZ6sPl0%-ncun8n$>%@xNjE)(EQtWQ)n!jRDS)@eUfdQQxN2f931&${+}*nDpl zyB$EpJx5*?ZDf;_sv$WePA800U!strDH*~}!&j!TU07Ix%&6k*>ml(Owc)9;!Cl2I z7+UGyi3mZc{&MCxCw5!{glY(Z>cSEBm@Db@wYyUamaNro-@Z<}@-XmLQ?!%)} z;^|qPzf)h<`m)E&-j=zKfgQIJ6jY#+w;|_9NV$NmLWQqv!C9|_r;%Z7!XCV>#n)4A zA~usJ<(wCPNHF-)KM*R?5XD^8{NNCj^8=QC^=jMw;C&r~O(-BLbU(>>rm@v(wN%4%wvP*0>SF1iY^!@O2W7_y&@L4{K7PF1xuqSbr9c43smxmm! zTMahM4?Iz%g?xez^9h|GB=WR8HkBW`J_(f})0e}Yy)a3=eiTx%c0=|iYv}x@E4ertwp0X}>#|u94v3@HPfnd_*!{0963gafrPau{oQ;WSlalK4NEg-Ts;a(hd<% zZD{;}7|O~{6*5Y6Y7Zzq0+$Lk0m{h8VB{u7vZ=ryibh}zYsb8#MBO^re zA~vSTVN9SzB6Qt*dSW0h^q#tgZ-eF4DIC`W&k~^p4`o>mS=Sr8w9ibxetD!sZb?Gx zc_-i1C;wE;p}a83_AUT7ighR#x#fNyJ@$B6_8rncpkB^@+gxILBma{=hh=4rf;5Ru2>=Qi=rZLpE>ZH-(@kM3;J>oE=6 zkb9S&bBmaQ?FATqU8y7m#5%>QbhjbjY!e_32+D)V zj*U&=d$FA>bmCmE9V=A**0iu=j8Rb2UMRGhT^b}O9vUA)4d+?_Y&y#)*MVp`)It1Y zDG`;gYcswy29XS$VX1nO2bJ>?pSS7=k~~IAevbbw`JtEU=6-X!gxh&K#>39d0H+jS z<$@oJUcPxVJ%ElWbrD#dVwkKjVocSi1l<g)U-5(nNLuPaGXr_ zo2oW6unRd^)C4&#riUM#n3%}f+2jA1MDVw}zaOce3es!D1kOZnbjLW4#+3Z|^QZKY z!*H{<^U6SNN5@9(+8@kDk#+k2+i?Ws-sxv#_6CyOejgHoQKGeY5_3EfRHs>4OQF(= zY$4gyWv%@~QqqL{)HJ3ig;xrjw=AHG7eVrtmn{gQ?6aBNnOG?ROdsrZF2~uu_3STXC9pbY>UiU z_?2e#H(aL&OFu>zY(cEA3Rx5nZ0A$TlTh-Uxvt3 zpJUanE`0G|R2Bug1pH>|`wg@^Xj&!>4$sRYiWg4^S%2NROpF;^qgw9h+UTIz5-z`& z?e#3y4hjBLA+{;Gu#vbQiS+v^HDV(D7(Q+FRw~ie8**JhP5+*j>N71_r z01=6u1Bnlj*hfRb_7o^X`6*Ev`KWC~k+U^oUdjLN8R@Pt*lwf$|Mg7-<-i(o0yPh3 z^3mWh$8moH;3-i#Ra4|Q@|h?;1Rq5j$s*195YOF4J&NtysOPm6hu0nmo3x~{h@>mB z;~t1|h8@g`XoOP!QxIVovi-aVeQ5}18?kKHh)vNl93z1uG2>Y+C{T*X0eY2%=2!2? zWj$Of_%iHvtSc%Ed9bKvK4MRb3h)^-5OA<4If4vL*eP*D-vE7~Z|~@})96v|351m0 zA9oOs9cfZrc@l`p*ZEM{)*|O<_=i3bFecg_{D6k*O%BA=&}tT$lim!FBa>?RPR+`6 zrnk1^FzFAijnT_faSI0vg=eXHg51MMwZrYstPeJDW;#1P@7i)~j+?fea*7(9TD$}+ zqK5N{l=a0M>>VFA+4IwLw+cU*OKn5~q94oT^udE39W*Dx}>)_%vtI@M$ zP}p@Y*M2{zv-xyD52t}PQI}>uOo>YMREJWyub>$Ftv;`^_@9Myd|Y*z4|!p&KK6x? zKQE_=Zl4izG!U7c;l*c&-Ug!B)yz#SPa%VfloK~>s$IlkiWAq0`U#t45Xc7Ut7)(o z;L^yV(q>^mpy2XTv@2rvau7X>LE=7d<6dnuRP6zH_x)In09X&PGF9Sphs}T=F8rch zcJUwbRA7MezP#(np)Z#gOE;Vb{j{Db} zPImhAY1FJ=5_HNK3p1c6e%0!iT0%@Ag9ctAagV^qBS1Rwiv0TyZw>flmm&>0-#&Oj zmjp?DCjSoa(w>^`pFvNT89EGV3oTssQLjg0C5E~1kl)e}DZ;m4mN!Ygo5BD~AddT{ zz^KMXenmNVsRo)pw7;y^R|j#x>MqlB`?~Oa{c3ABw3&~`7)^I=iBzS(`&j}39=;+n z=qKKs%^md!q{Bj_EzhUwVUl}Su;Z!qk@d9?r&eo1hb4AJE*B0h_ayW56dqggoc>uo zKe5QOomfeN(ljKoGFsN14=0XXX~F!g>GWPaE1KBTY6>KBFC}21C+vO;b9~UhDBtZ22H6I1|Be;ac9+!23#!iO;)Mq6^ac zufO&^#LmE@SapYhGhV?0xxqOeDfjQJ2nC!0qpy3rt>c_$hq|_;Y)!0A3w5>aZO+~2GPw!c;YE1(c;#W}1sFoK=v{Y3+v8-Xzp0Ka`*fh6AG#f_BPnDM z&A?S*^O22!^V(F`M&YlnTj~jl!;$qw6KXH#$g>vVBw~T6m%p5mf*cM~YO)cKvXLw= zDQl2$23~?32I>v|=DcS(xtz`WO2wZ@E%NT>LjULPwADy`1g36%Krp5eW9Q95Ggl__}j4y5mIHCoku`f z@r;}tBzH=R(t}~saU=>+jdTd~-i{T?h;F z*l`2&Oh;P3>AZr4|3d4JL9Ls`s^e1TyTIWsu&K&r{ioquqVf?TI+7z{%aQ|m(t*BR zEl$)j?EUiUIrBFjsCv#$Ul|Fj&*NYqP%OCb=rSUf=Tb;L-?FjUaon#fd}FiPm*%z6 z%u6JAi{5~Tj@SI^0FHpBgI=9San9Fv6_aAZVGrQm&Kp&(W4|pux3*nM`Se;Yu;>Uo z<;MY}fnd~Z?YGk0E`|s;a;|Y_{(_~^?-noyPmRs()U`ZCQNz&L4lY>HAqfpF%aslC zv1rkZw6)HTe6dPw4?{OH-%$J@Fd9vC#jarYZs{*|IdiP;2Gf_pUyN^o_@ zdt-kBcIlRfuX*&&At>k&+QW_V+Kp}fz9OD^ttM!)!&u-&y)V@OcYFTYmG#Vgh+j85 z53LVP5t{@SCS_5m`5HI;e3qHBz_XFiyn(_OSok+=2kyoqqYxh>Dt6 zxs|8|=XtpiLAwa+Fh>Ea9AkL@nV2FLxrLA8v;YF=vG_4I0eDc;E*~yB@I!X6tN^yT zM?Mp$+sb26aF57#R`uohPU&bjG7-z8ZVn_I$1!c-)--&t(*WlQnHNJQaU3|5KK>1k zeUH%qVOgSFA?Na+(Ms?P667ZHUa_%Ybopgr^B;FNLI}glWCwHm_-LSjZ0}^E5o9M~L?=&8jBXhP2h7v^Z z9sm!^{5ol*27{9hp3eu*s)00+@YHw2=@>ghaQ>PAiHc}oCGtc;=*B4funZ}ge?n{+ z3hq>2K_Mg{btn8xZlLkvr%stCFtX{a(qT^Z?B zpob;)>pWLSyj8@hCBqRE2^sBnYK7jzh*dI=c!(4*vQ3K&NiY>O2rSn2p|0g=+-bi< z%>8wRP#FPr5qt6es^hE82GZ`OBR%N-L~2j>phaPk{dT#3hxV0w0YOwwN6X^1B5hNP z>l`ZF+X@LRmt*pf<8oUW_vs~3LsqZ)^UMgo|FVSmVh#)hpV!L$J9J-|ip`Ps%-1Ea zHLW$i43CAYko*?hU?Qvq#ptx|X;g$E-UCt$nv}w3UVRUn&_gA0#CKpJzWoc^BhL_q zBm|5vxF?KsYaOulmW?5NSLP~vUt zNd}=9bD1Juakxd{dt9t1c&ns=Pf7Fk9gMcR{^LntL4j)R2kL^B`~b<3&1I*V&aFikl|6gPw7@^>3}?%G8TjMaXwyklgaRHR zvC6ucwsurSI<9aEIN}EBdgHp|tp(Em+hTm%o;SxmrZ1n=xf~6-CF|F0PGV$A>)u}k z0;0q!p3z62xZ2w%Zp}ocNOC98oM9>S_r+>RcYV(4n|tQr0~moos5@hN&{?bgEZFqS%!O-x&OQqM*&dRmJ81|^fkA#H>af4T&9 z9-F!bUBwD*p^?-%Eye;q4SP6{)Q=Sf=z&PG2|Gw05dep?Efb>t&I62tcgd6;rM}3F zm{1}5G#t;zA8K*>BR%q=ekzD*N&zk*COp*}dOH3~ZzwBbt4o7czgt_Evu#W*8=Lz_ zK@Y=t|sh z82BZR_zQg3kpIPK4+#5cgK1t}wHMioXM<6|S8)m$AZ@hfiEDY1-^jnC5$q}=ZT+oq zDFS@g%g4yoa~|``d~GTWcHsF6GY~F6P<@f(Tk|+nw&{=4fvb&GImnm}As}XXF-0bX zZ^D3@;`H0P8We5_%%-YaKNkB0MF~j2Lhv5Waw(sg{t`CVV|=9WXhEL6SnHX{jD#z8 zwJgpEdVgTxT~9{c$fe#E-MjU5#d*1+^~j}>*7{s%fHM~x_~EZSr?rIG9PV8zh|K`Q0;2Z_A;2F@?avzox%9^?m9iEp6Hl@uX8t|J6IMGk3Xcv zxVS^wJ}@P7%{V%gXR&Rsp7zZz$XKPnbq6S9;?Aw}UvOv=mhd+T>4*$&EA@Mdlc>cr z)2x154=wOz9DVXv8`r|RIMoz#)2O}JT&A}@qOPT62;Pt#D->F&sBZq{N4)a-7xzRS zA#xWLGdXg`(Ah==Ne$w$pXh>qK?gxe?Tu9 zF7>)_Ef&C$BC^Wf9=4rPYJZ1sZcnLRxP2!zQat%@g?p+C(01dU9oV=37L`$yBlTC# z1_?ZP4%LM`mt1L~ z;PTJu*Xi7@+TrUe%Nwmz64P~x+IlI@Rub3$SWf90%qEJewSxlp~vTx+CTJ|h#B*1_~Yu{r!+Un@F{}R;pGqf zCXbSTkTeV>kL2DM=t{gqlajwxGkJ!;Nhm&=kn^KcSJ$SL)nxAqjgnI8rHc8qd!9Bo zz6bw~TjAPR|5;~Bmu)t)=w^X^dOs0Zj=D%LJfaL5*sw}+cON8@L541-{xhN%ZT9z>5)%4Izgx_FS^#+c(9~TZ^&OyX()wmuUK}*h=Bli@~V0^!_|tFk_nf%u;mi% z#H{q^D;laMe!e~?&#Ycrq*0(`Q(5>`7;8SA_k7zXbpJ;=Rbs84m56`AV0yK8u285* zcyw~Ekfs5&ln6JaP25~FJ>h!=Io{xBuqUAxEKaBhM*-<0wMm zog(1eKg!a`@}%e~0g*}ulcQ4$*IvTbc$W1#kJ{OxRc7_z`Z&F=i7Iu7M(tgDKdK*4x3E^swiw7gS!AOl|45L`5?3Ims zR!@&G3J1N%r%jg0)U1ga_!xP%m?R}eKy4<8kTF?He63$|Bi$s^k|&c!=Ao=rXpLfw zjqFgRL0t9&S%Fr&$~G5cvy<3$KY-0t0tX$v40!u!#fk7|I%VbE@5ykdjACX-r9Svz)G(gi?^w8|GV)kBW_^SvDmx9=H1RUdbi7TDOIHzDc|_Enx2F%xqMoG=oKThp0h4rUWOwn02Rp}7f)AI?KP(zKi$_X@Y@ukO*o+HBA%38Vu&#%n zj`l8*s*S(O$W;G_oQG)2_PdwIOsEoNLPZX1Jr{f4ByrtjqfTq__X#EP^)ZzK8KIa> z(MG9*NwEo=*$fgBE=FV2a;e{{1Mbu)3o_GOky&VTKRNoHD+}-XyA>|W{N$9L_tnHI zwnG^LYLxaFx2>YbhMx3MA}RyIR;hP|^lr*gs>Q(4twzZoKYB{DuUPTS4oji3;1>@s zkfHXViHQMxOQ>13D-OS#%RO|7>tqDEjgo1xF@sCq7I|aW#O5s;@o#V5{1}}UeO~R9 z`kup7b;5sf{@7=kg%cT>CxS`zc#|q3tX$i#xT0y;V-l3UW$k_0Wpg`?MM3 z53okZ^j<%3;MXbYP}}+trE?w;2Qt4$x0-z)C6CLQn%)v=f9HLSP}pk^UMZ-T-^Qdv=8ib7Y|E(QZV6)QK$;Ia->zUkhJ#iCM0UmNm7iAY-LZPPs+?K z@0EGc%gLpdG#RLtraDb;4FSuWZCev&2i9Bg8O@D3C850%qIU7zK|zBV-;x|^UiJatl( znS4g?B7xI$rboBaEPM6ujWt9(NjhOQ*|Kl;lgHqPyGF0~rdWr1H+%@wO+C)4rjT8N zZlZehn?>)eMB&P^`of<$=>)R{!WB*JViIGTxk?5q&}2&+6Q+OCqdg7W4kkqb#qHuu zmMTZoy7YkBgQ36KMTDB=e4RD&E&7%^5p>T`x|qvv1Qm$HuzO%u_5_rVo3!Tz zBIep#z&EPJcz!^q?ugoxJ3{aQ5rRj5ay2!@1l4`MH4T0@5}|NL_y|%voNZ$x`?T%K z&vIUIm9Q>*p6k)P`o<~ol)8sF5!o-9h~7A#{0c~;w1<>G8zhwbQz-n$eXrt>Z_-Jf zUq-_v?$=AQ+>Rd->P#1VF8Pes%Oo9$~;27GxRA%;}S{sO2X2;UI&KO{MSJSS0Q#>Htx zqfu`uRO|H%u@|QHwhZF(N1H}RwAl<46g?X+wco>&tm?x7+?5g6b@ zeCCplFY+D1c;t`R$Hcg21;+v_dy>&tN$uGiw5OQlh*AcG*cYvp#Om{I{#0I*&f8Wg zI!^HYCWD%{lxnXK?)L?zJVwT$c?o0S;E&TBU??K@NvBhyicUcdN*VQ;E2)wB9Sy!2 z?QX*=$CbwRO-N!tjQ$L`BT!5{gADxzRBZ4snGk3At0$uV)DBBV?$*mExAijBt>{)F zW_d4Iz~YIE*rzw7y|JFk->7d0k#oSU6`Ul_)8}M(DbdG}=NB`(Yr>^lr5B^G@7UWb z1lLGZ#+mM}IhcbY?+jP|V2~T_@x;oE*oU+5^++aZBQPNLn5P~8U!UfAs2*0srUqK0_}S&( zxTWsJKa7Ba^OtW*Q>rDvS!B+VTUtD&Da}#j+>tu0!R7G<@f?8#uo)*hn+?8e1ax?l ze>8~cPJCFQMNe2);Y_AMLMRn$LVmV3N5bWO8G{<+qIdE)dtP@MZB`5k#FP4oD&21X zWbPl}_kh7z&vegAuT}oVtXo4f2sUp%zZfPF^T(!eeqq$jqxzP_*Hx*73ZE`k@`=9m zRx8oqnhj@z{z|F}#8*K)9*Yb%?>%@X2=0B&xhx1hIpkzFFJsvf_H`QerMpkohEgpU z_Vs!HpSeBC>g(T_oVD`TeiHuhnd<8?xqWCUORAKhaHTJEbi_t$BI%3CGnzE>;UtBN zl6nN3?iUtwWNf~r2J&M~hDYi?>#1U9BmCXI|8w`_R@I6F?S^46s{aDVoE zkV`sA{MW@ziM*_qVezQkMtO_WOKpo_kLf*9M7ubzht$+JhtqFlS(64mN`Dpw5{k}vj# zUfF|&&UlrK?3-fG0|~$NcpXwyaSqF$SGVeUY2Yijy5p~HEsE}GJVP~ZM4Xm2tTC)^ z_nYI0?nNUdbRS~!MB8;*Z_3fDYU`8S+c1sq z!%JdP_3k=sf0dQJur2G8l}7P-48S(50t9w!-r(Wa_!a5>cww<7A__w554Z(vJfU0 zKVdKKU>bWpwWP0=cPNvGHsf6ETrf$AIH@Un`&rcF~qjH}y*I2uFW6^NMqSs^M} zV|*x@Smnmu;QP(xxuhB+TWWXWz02_uZC zzw0!esOz43CXMi$eHC5ue1r?5)|?RqimBe{ON$Zx=L^rAWTrA_a%IAmG|+~5B{Uo* zoAGZ=Vw`e9ppvcelu5%(z?P}%=jpZqIN@=IE@ZobYo1;{#vP-SR@Lk-nI!uNKV+*T zUZmT_(<|wSBW%#ID9|I8m|A5`9|GIs4=)v>-5*kdx;^>+lPIXsS`|>c8bZF8A^8Sp zDWp!tem(Ur%RauS`)%*o(;C_5-RtWYQ$y=0e$!wzhB_%={v7i$YpaEB!^WVbDxXGc z=5+*AXd)ueJSX1rhR3jVy2oJoN#@Aj*sQFxY9Gjn-(_vq=FZy--1*7km=nsuy5L$k z*Ji8PPao$|X))R0O`*8uU?U#CS>xj5l$n2}@=BE++>h2u=^N8T<1Q*{t*9zXm;b$U z=H{`X>X_5%(@Swe+S#*`6+#O`ar`6s%nS}2rXtR5TV^-f_j6i^Dp`v2Eyg*w6n$>gwSC$_^Xpp8oQ>+h|4kZVVy^^p6C>sf5r z=}A#IV!_X`fmuU!Asp;&&-C!uv9I^uCEv`<1h0H}D$|ieUtvk=>+3p;IDs#v0vq`o z3vU9lzO~V6R7>zj&f=B*G6+vB@#xFyd=ItaJp9gDd4(NY9-~v%TNNErexWvwja;`n zMZ()0Llie^g=idBPAv${I6Ie^@Ru~Id}PY4l6^==vEtOO<3>NWFz!(1)v(NEBJM$! zs8%-^@asJITCTux$Ccx#_Tpc{SX#Jdd6tmx4qobHRbcAF@$XNwn6n6D^J5zaD8lpS z+eWKMHar{OD)C!?IF_KqZFcIGi}O_bYc2^63H#sQ*4%xUdPVpzT%U1-pwtRgzzM8P z4o1UUjvZjp1a0{d{wepMgfPjfIcrtq|8V!+@l^Nk|96rkLM1XoQprkIW+Vy`b;ur- zd62y&tCZ1H**lwXWE?_9l96?CLbAs}X7=xT8`XW^pWpiazJLAxxo?k79q-rcb-k|f zyq?$d-RML3`lj2WWh!V?Q+u|tqP)O5QCMQO!#G?|h?M278@gm5fl2o+&6}luxP*2A zhf4aWI;(?cI#gVc|voqT2#v34^tUWT9r96w0S?P(cV?#DS2CeBHY}>`CJBV!1Pc^my>Io zIE8xusVLXDteLA*PCm z*!8wK@9DY5iU%YVyM4K?)GCMa4P??PxK^Iyy2* zZpPEarSO`c=*A=}*}7{Rk^XCLSr9IuMUNrt0bLUF z>9N8J#}Vv4hbG(hDy!XmH?k`%!dfn5%!0L z&4uhWwT*=jh9*Z)c)$cr;6FHA(&V$&7m2~))9&*PDs>2$KL$pUv(KU7{<~?|kb0Z? zJ*a*Pb2{RC*si8Iqf3&DPk-wXK~F-#LV%Y4!Vi}ObpOIsfrOapG70{qUBv$S#Sj>SZ*7n?(g z^Up!^y}_|QG`3b*k;y@7(KVXqN`@{Ub{l%Ki3MQ9FuL+q*=&qXi`J1WDUPo-Mg>{` z1{hj!ZU5vlSjIn!|&v` z%Z=LF`a%MRXvD3G%=)hcIO^l$g;O05%tyFjjo)Lp%G#sEq*v~Vt8H@uP<(=auSPq` zoF@+CXN31{MvZ%rLmBA(y>qj)gR*BuA#tiQRJzNYyf>Uk)H=-h5)H?qep18RXS#8FM?DIBSp;vW@r+xSM2z{mH$0kJKa&1y7N1+26cp^X0N` zP$i};%fL@}gdLNYis{Ns@J{xMg3*Z$t3QEQ{fjs3X!*aqPs8SJwZN)r6*9WddMb*r zBUS3V{qV`D+pQx4M14?`)AhJd2>`OszHi|}p8WdMC_@{Uu&39Gd{Lc@vp?T^1KwlC z8HZ2987k(hdzvg1qyyPL-JNx=dcGjfBZSac^uLNk^SvefGw)jJeNaP*acS@@Md-&;vTe=1wsz*!?U)YY!epEhs0C&xfG zx|~cjAhVr1Sej1tdYs8xdOzvrcMbw*WW?O3zzaig*gr3ND;s0(4R-EodZn}d= z5v~J&<&|Uq0!830^!DFOg@{Psg4=of;`lFc6E-XcqBqGvqAfAiPo$G~`0}oQ0ib`l z*k}D)E;cUp48soMOVoh8*C{kX7iXgr33kr`+pal1+~P!B4K*l#)SRgan;dBI124#-Z)ou&ubp> z>3RvTHSEW-qU03@eK$;}=@B|D!@A5N-jg|5TKaUlnk<9j73gfty` z7*$I(F$+L^8;*QRwi)J;J=7xmGv9ymuY8~3H13;O8`V(9xA)d-&Ka&tks6cc)gdgN zajxdZykGLBUPuy=GY5P zGQ*RTP{gQJ${BBED@ZHiA_Z-boWUEgu47{MBmM{eg#^L}XKfH8(t*FDqtq-TOUz)a zCGdVxz1*86V(}IN@;@oxL!q}a?W5Q>qruZ}Z>)9`>Ou3jrdzP;6R0fsQ+nfaNR?o5 zRW|~7x@`Vsz5hDgS`vn}nFcTM?qhvZ4K-~Lw&QDt>-Nou^^#HbK4(Z-GAbvd5P2Wm zJncFWt+%c_7w@CbB0Ny6zvMbsAv-i-UXUr>d@%ikE*5P%_=}lv{Ck{Rj+I2P|B5xHiE@jM>%6%9s zeAZcPCZt8-b1S+&G-8~WFBBV9GCPz%na{n4gy~K1s{#hWcK{;K-yjIi%fdIZ*-E_C zWkPBop~>&zc*ug@{3iy-y&nU&MZO@_LS9%yR|1Q@MzFNr*M=UILmFAg(>FN^?kXPj zrO+`oJ(ne1*>)l?y|jsHFR3YxO{ck>ge!rzs8fb6wW+U?meFXg9qmBv_9$jTj=WJ2 z({8qt`Eyu=&`_{}Wfj>T6pn^hjbOwTs)OFP_d6QUAkhc}PC=6#_!L^KObCbOmFjo1 z)DZFpPGDPvRVuwHz*K%Un=S8wpN_a>At4q)2jCZz9)Z``bG_INMW#R8 zBL1iHlDmPS_V#PN^VIv*4_IxF`~*dc!|6>NXB0d4CyXS8)a0JfJLzi3*PPV4pF>&|uN&ao+BodH7SJBn`x zP`qr_HSR!jKgJIxmHL&b?1KJJvhNz&-4-wJvgMC8li;y#28&@Y7+8X1HhvIdBMJ1r z8`jxu7+$mS!C-Eap6BSeJld;>LOqMAnTvF66-*Kd% zpz*Yr<(DE);koOhqwK2R!*iZ)#t4H~umwq?R(bS0h~42wNe42YeW@A?r=@kXWwIy; z`A*}nR2q%54Cm;%8Ov?tcDZ3Wxzxnr4xH4HU>8nk5)z52`Eo?2EB}_c#laCft8fp2 z)m$~eiK~u7ioCJU#$bVTvM=pm&yma%R#JKnO$KkPCpROw`qY%3FltN}zBNw4Z2cwa zj(4{znKii!KBB0Z4eeoWJPD=UD9Ll(eGU%|YEAwM5J)5k^at+pvmm#o6=hNQ{^b@;b!eT$_t$Vhqw5(R%duzYLPaCrZnu=MP) z3vXLrQ>fy;-CdoT(lj$mPbc9TbyX{%M8A#mPyRHY^aP#T-9%>HIUH>vwnR#oH&Wmf z@&5E6%NQJxnhDG5{3p#zn@l7=W#me?9873~cFh~uxB2)3Bn+0yLj9@*pOW-st5Ldn zb5)u6*_EXVnN%K?<1&rU$WW~re6cnDL-+Hq<4yH#?*&O;4!4ts_kL&6ZFT&%eTp4q z5#Y}&MFIMge4R2NjUFjl)yR+VSnjK;6xPr-c^|yjy6*k+`PQ?QZ=&v;YYAe6~9j1B3=>?TFM z-<@xf&8BnVs+IG~>hgMC(d`4p{QFC<#S7bs-wekPUCek*H80*i=(X}Q+qE~=u30F+ z&^H2meVLSQws}%B`sPK=)tMJ%go0qR77d^7ucPrj%0u55Hob?^b%+p8IjFCV|{*{5hj?#|*tywqa0qsZCprO%>S*mc5F#(aD&=r#*h!_MLC$ms&{98J#pF zWuq~8eV`ysV-WM@04~(dX%EWxc?vX(%n1Xk;+L`5%wiWKJR|=a z^SSr8gPOqz9LaOZox@T@eTX-xacRv3^5JdaU0mY~{PX@7Egg0?o;>K0srjgAPrsR6 zI1QILKKLO`I;pj%%hK0dRb(pBHyM|P3#_ZvHo17-X2_Kn5ih!?D^^r^S9~+(T|V#( z1;+uelI99LOh&(1V<7ed%%M z7;1@b9*;K>#e{e+-#V4JnLfNoLb{2oK4Wc(AD6jmxAN|m^NGlPeh52lD?Dqe zP-k#++Qn6JlMof}fZeljpU`_n={A-_q5blu@N|gsgUaI-Q2Pbd(|N)b?hkl30%OB>2>3q;Y1`k8S;6oqUe27&NkG1+wW%$PSApdDXa5YcHlwCWB zM`0`LZTykqGbXr|qpRZRp>(>GJr<&$)RwV_EH7_VBiSN|FMm*(TnU-RTllx-_dx?; zD+Phm4}yi#-#-pNNxER`l=X;tKcOmYSp@Jrh3r0PHHL6P^JP1dU9=CSNC z(hjRnoKz$%=v0SzZdjv|IvC=anjpAEcT^y@HQrbI{h*}ez!Ef4&>e-65phJ7g-8hW zIV&CJxiWR24Ka(hmC7{ht65)vuKs1hm0XuNUmQUl!?E!dpzo%clSiFgMtTa!Jymb2 z!@GZ_>ZDKMo8#(l$6h0?SB4M2UYJ!`{desN{R&3ruGCDXE}e@}-QB5<7-7!TOF)>2 zIS6a-lK&o*C814-5OL9v>%~0NZHU9mjE+8(5}EllTBsg!EKMon`)k5@E?Rd6P4I2VLroGk6HNgOR=M<$Leg zHp~mR2W(7rWdF9w@Lhq$9$*qd`o}!*BTv$eSpEvK6azVPE+uqJZ)8ZC9c`o2*thq= z69O*`Y8)TlJ~S$cm&%EaFWmeMr}SWtzbF6o7wJPlnT!q&-d2&xHqxf8Ngi^@II?{q!=$@!pDnIHk4=%hP;hiI1xUwJThd0=4!-O{En zkw&-zb%*zA-F+9au?YKrEdsd|!d6|GnaqqCM+=06QF!kuB(1gwpyN?{+Fq3Vf}(zw zp7Zcm-Q6F_sHby*y_TqbVYqVfSH(9ig@XKJ$0d~jn&UY(q#WLt<0LlCZ= zF(v!%Y!9Z=f{x*U#liM)`bA9%Eg=lez2q#{5+?1{+)3TFYjaBh8mUS1PKyzCTlF#N zQ)D1;g+I=ZwEi6IF5?CM;hp7yw|6_F3-eZwKkGJ46&q@Di|@1xu%@FhV-;@dPg251 zbKvh^*C@kGFm6!IR5OvNVf)PVFcGN|k~q2cFOi`Xn%L$Kkg(4d@t@*~^{tr@i=;^p zJzLRsrov*K@2FuTL$O}4A5lLYh5PW26x(SxZR^X~6~?%ON_1?Ry#xzgO-^$Amy=0A^8#{Rl%6v4Z}HK;2iP=*M>x{GmhaI(iLN%^iWLXqi5#_ zzPD~Sgf1=>1ui>Odg!!Pw5~*DW)k&YdMG{JW3s%MG1q-|6^-6~zE`7EbvM4?tASrl zcH>x4QigQr?6pYyc0c28lV$l8`rfOX#(Sg*A!##Hr4RvS2yE-je&sCqgWENh4e&}| zJQO`LvL96VHFJ)N9d@!Zpb%V6p@mH61wvpQ31O80o6dtD8!cx$-&&QvC)%mD21Jmw zO11JpzE&20`dQbb7@7bQ{v~o$Yb0;G7lo=X*Y)8`b3;qqDh|Q8t@ngH!Vdx!=@iA82EZ^V+scO^mko zhq}d1+?T$hCBZKr3T;qhzVk8J6I>hXD;eU>cAGgrRaDl;S$e!hA2;XFm|ays5h!)& zS1uFBQj`ZiDxDIc*mRq_z>OVuwlSqA5dv^N@n~X~qjK=JswAPjTwLPAKAzU1DI)Vt`XL47`&M&p`~o$JGS1$xQ zvfYtpfG}m2pJZW$6?(KT;q+rAHEv3)%8d}$VVBd!AUGS-@kF`9^7B4y>6?z$ZnU)V zz^tUq&uLj_rdKDEJJzPlwB*OdT~{rcO8hbYF+#d3!%Sh6C=tJuar%JWGvnRKq-oZspKU zd~e0(@0b(*EJbuIAGyU(n97je^kx}l7DSr?&>O-XHOu1nq4`WkA&VR9)>JKnrc_6G z3N71FT+Ez*2QJ6JCy$#(tHW-@!9JY!z__4uIzhCf(Lx{z3D&|al_(cbGy&iWM@oJTLS71HsynM>T<>!q4YnUv# zK|>;tfHjmT988hEpI>`;=4_>qqniHsU{uGX^}>4WQgK(A?UxY>p6jd}m}?J%(V6mA zi-$euHufnJ|BjCCj5EgCr|a@3eK;qw1lt^wFeQ0I1sy}8+BZfWl7rD*g6`%d z*VmJlMdx2hwXInRJd57~Qe*64`x8T`2(kts!oxMlAM7-D7eQ;rx}(foW6+J?JZf3+ z@onw#-uKs+JEc(TH6!bV{F;UuwF+G~nx^ESvpjxF^^))*@+qkFrXhf;VyBu!HALQ7 zL~x;NTWPpBy3S3jGDb5tNxDlpv8fGueEQNw}cgDXg)e{ ziF%#K6POsw_39hdwt)m}V0&M~b!uq?giF;YVs~f@qeQAUc>M&5PwMZ0wd7RNs$OLQ zb6)$@CwJ>?nP8Q+!)p!NnVHFk#kSo%BV3w~T83InQ`7=TF3h4|zHl+;)t(fY&;KsN zAU0w=D$=ME8X8pMO@oi)$a`Yv0xm|)L?5CD?`HH!Itsz;QoNitwe%4{pZ`F(kV`m> zjIFFEwch)SXaQjb_ol;KA46-BfgjJv;Y>^nWuk*i6A^larTVJH|}J^yV*fG zq28JIsH3!5O7LepeRrzWI4`rsC!zDuIrtZ^L!Rd<=A|0qq~IxO$W4toJtjwo@^c%M zJ@v#=a(ShClEXH=ygCwJ5}V^PNRNaq*e$7_u_C(sROp3C9*Qff+?!EQk{ATMe z-ULJkAv;%)_zwPo=%~S$u?0k4X6Gw{51T&(NU@d&_6CXW+z3CVv{X$JtF(&~bu=21*rVXyTOH%E(sV3Hj@XVa0WHyS2REeciZ>zW=dG zUEbZ1rWm%M@wnLJ@-;UTr#~=<#D~O$%_bb;cQg^Co+CukL*4+1{e9O%9FN_liN9jU z_Inj1@PQIFBnk)xKs1EM<9Ac|1u~bB^6((xyg?^CSdxTibNm0cnS1bevtQZ(f$V&y z)kKL%R}gfXJedeOE`J{~L9*`Z418OgPyDm~e+()W4d31_XAz@VMc}BKM}XSJAb

2>ByC-Z%t=@FSQE(y=J{?%N62wWVR(^r7|MIpo%Z^SCbw*B)CJi zo`*ogGys7Zt|S2zLMPjDJqD%lM}uORS#s~k5MrL5p_j<_GmujWy}H?cLoRL;tW(ZJ z<|L$k$T05TW|xuSL}IQ(0t(a502qNuB+^5+n&kPUiiZK-1i4HB`oHx8=u&r+JHP`aB*x z)nNemXOA@<)BI89{^J2QGCJ`0se$`>x4yi#oH;?gH7Ru#F32#c=J#G=u1kzGoxgZX zr__-swKW>jCOy76=%qUt(_{gOmU4`8c3i;|b?RSH4K8Imk`GeGzmU)E3hyKLk`!x<`j5~a8+N;|oiI9D-h9c{!p=CKiBt-S2MGU3cUEMR{JG(WyggwtvwaHO5aq#F z8Tkt&C})3{^7!#U;AzaSX}G_LJoc^>Ec7&{zWL{j>qTh|F0r&yBJD;apeLs-Ic2EX_Ml*R_Axa*l1vT z_%MU;t{cxA)PBxdf626Io1)j8+V2FMwKtDTA2dTTj}X0D^A-q`GjqY)~*v=BlMwoy} za8g<69cn9%cIR`J$9jx>rjn@HZm9swzx1&z#nX8%X!IFFnf|KYU26a^B<=b;*viLd!GewhY8fTwsV)3!NLS(Zu6 ze@GRbtheRI zvITquK)nFuS@ z0|ch9xX4uYpzAo;VV3}Nr?nW510kEn*MHv0kcqkMY}naG!_pnEx9#XRZ*~wlXa7Fn zPrCYa4sg?9MZfDtUA4aY^zFlB9{!WUw*A#Xr;1%cI_L7v&MK73DFVVijqEHh-`WtQ z_*IjS@?_6On0X_&tzfo;c^2O}E|``nNfo7>>BI3erko5=)S3h7q*kj7M1pDIYWBWj6av*Fucx0s>Cz)L5JPp9);O08ukE^ zvrgbz?1-x&_VXvrD+~d@cfWl|^2qd5PdB3(nFg*v>JmAsHt3*RuAENy($A?(;Sk#| z#W*2?R5@;)!Z>`PT6~De`k%52Xu~y7c1R}=uxVDt%6o`z%NS8llQdM_f$ZC zh($lgtWN5$P^QsxiF?K>HoV{+3cnw;IrR3~+Ga4Y#4T&75SRH$NIJF#$1T*aNx}CX)0|zF z+c97$T|O_@`2vxG(VwI>byM$no0B0aa{&Iv5^nZzpx^27Kw3R1(GZ6ZKP=7JH$h&A zJX>Sv&91~rNDK8O`?KcDz|BifDll=+PcM54DEV@wzp!(jpJAbcAB~ZbtH4nm`m5Hj zO15ZIOibYhRm1%e8@JxTAK@R|s#Sz>c7soF!zCH+0EfmVjf?_FT}cKSvOkv>)>B*; z$DcG?e8;8k0sY^iJN{Tl<&4^x(?zF!HpN`NqGw@3FjHIoCSjC11ig?$hdXmm7wEaHCz4g5Idh7oR~UezQ51` zXp)$#XIGR4#nMiz;cH%BOM3P9R#R`Cl(MJI67Gh_wiKYWjg_da+UPM_j%%JOkh^8SrwlR)L|wYO!f z43dNjrd$cm^p^|%b*{t(Z`k1kM ztG>b>mY_;+x9&*uDqHc{B_>BXQf}kM=%SZ2-IghCJ3nAPy6se0<{YAIOe}lQb##5%FA;k=l&3{ z(nI|M;quJVb?Dl4WW0&#NO%2|e$!anZg?*HsRtqo5*VU9U_W;kH+n!>K*-@?X*!j* zU-Mc6p4QBGyhtl6x>7Q!fkm$+Df6~5mz@70$7_wpl5vv+34fcL)LGH37P_|L_`H|K zTbb`~{J{GJQszz%b990X*uE#lJ!#!%6wr9;wL&KvKiuiq6dJCIXPibu+2w)2srPhv za?Z0sSKN!7)oZ>xG9)#*$7K#kr(NdM^CE6L<2P0vYyHhWhXYt3yb7CgHGD;XhG?Iy z5IxL{TxTS;W|N45@1Uc~#@lp;kG~QkN3G1D$X=#NX{@=Mf(TEN~yH57TERG`D5~`fU=8 zYJ{%X<%G>sgiiWp3bM^Sy6N~I$ZP7SE!>L%uY#l~F_)o4Szc_m53-Uaaz!74z?XJ& ztii_NL6YtCGOSKb-~55{VkCBLcAf(xk@!N~`TN?nh4GIE9fnjgtXOMsP5vei8nWFj z9YTu^$6mEY-LF=?t<~0c(@;Z-e3tv8}zLW%FW|`p%Q@ zFxNtIItbm@#LyBs*F=oUI;0*fwsk#u^o%c0zerH2i_ShA`>P4V0l)IN*%{NlL^B&S zDX<*qKESx!{IUBU57~9Y^vLID)W3VHz#_|_n2l*g>do~ zSx@>tEPksV_kgb*R($N*&K<)gwE_cH&nyMZy(-W$9bKq~ZL&4#f3OWQmY<>JWLQ?} zy{AmG4PVo6B`naNZ@PJf5Jb(8?hHAOlONx!{u1x|nxe(gsk(2@SgNE`ETI(X&X}2J ztwaGA^U{_Mo52Q^ZJV`ow)h`vfIO~@+OO_>RdinIZ_vd*9RA4IQ@oM}I=CCeo(*WjpCsfMm)l^hGR7ls#liQ_Y9>y)4zsvLl<-^ z8#5Ybw-t+$5aeOWSb>si>sqMYVgOmfyBvW|6exv!!?!XT7EMQdGLJS7^m@UNhG+ps z>MM(2{+$1FjbNLbd+^aViou#q=Nj2-%uLzxr+qW~sqvtHp0gtay3-hzoDAKim*}mL z#CPrpjOS!I0wkoXz(T$CCs%O{ikF-<{+L~)r#7l<`IiW`;xMTD`PzvJs(bd@6?Btb zi?5MUDU(d;g-zf50ujD*3FgAe{N=qp+=9U6|5L^%C@k$Aew?oLEB!_6onOR?l<@Wgfyo_{x1o{ zOyM10zE@^yv8G)snfqZl2b?i%q|Y`|W}t&)oZI;SUt4~#rs|s|{1P$v##{!qv%jFS zBYfxJj}9=NdG+ueF>IoeP1CDaO4)H2@AZV8oZ1p?ypg{!ueeD|gXxA$np2n1!h|gh zA0Z}@-TLpt#gdxIKBNY~oKa@QlI+^-ZDyC8m`~5cruSDMGD40Zv8@xBxrCDs4>&`} zoj9w#EF&&-e|B^l0wqA)Tj1 zMN5gDPw4Tn4IKrFRvsMn17C&0RQ0+nwX1)YI79~IG@6BpHZAORj~$~+lJ$&!%BQhx z3beR?QO=Hun4USjZ4xh1{^SpQ{>L=Oa9qcFjxKXie_ql@ms!K+?b_e&a`DMA7X|Kt z-+aq89(03M|EqmdIDhR>b9F%*)^&;YoeMll#z2gUijvHW%#A9-KRpaOd?2_R(re;6 zJd>X@G4q0_$I!0eqUiefw4M~^;>lTwGUn67O<@i_(C z1j8-85H2lLKyf_NVqb!<67fzSu^kS$Av(j2YG+6vwv9TbV%?=|*WOvMhrtCOJ21FE zopiaY!+F5zD=mR+z$_8o9%-pt~M5P-Xd-q&J#ECROd@=K6S7twm)Df2PJtAx4ZiAL#jaMh^ z>A!oU(1 zT|9FojV9h+OS^+#X`sZT@X&noI93$oo;VX_fToKyF?#bL_5BA;7w+KiY21XDCFNuu z+PW4?BXd31q|W|y$TM>J$+U(ORvBZqITOk0kRBnRvl^Resk=OD_?G*Ch+ab6p zL(880M)9*5x1LPL%Mm*HBflkU4RgFQ?eeVFI)!{^q~`B5Go&ks3I};SF&W=!UendU z(HPNYOgJQT!enl?UcfBbAq=gjC+==1Snc>REMoDvgOJCe(Un;pH5EL!cfTh7R-?0^ zM}b15)&)sUOb9>M2^PFivYA!knr+a*z>LzSS?rOr1)Ohk%kCkE9?@Pp+*u

siCG z{0DQ_C7(>Q_h|Gk#4O|<^o+`rSbAw`oZ*nS8Zp=)ysDS8?szXqqyB8W6gTa1an)Go ztaUg~X1Az7m@PEtPCuUAxvfT*p#_?(H2BxMKPU$SSKYQl6uW*;QSb~Z8AdHnPKSsu z?oK#monkhCVVY!rq}?%yA$%9viUP->_bzw6@0q1TPsYzd?d{v!P9bz?U2=d3DR+> z%^rF@NuHOR6#i1`_YtvLOUZzw8tE}^6%^L2`6B8@JIj*_oR?H!Xp1sq>NjdkJtSfnY zC((2~LvHD5=wNNgT4%0b67`Q>=JlHJb}Jowg<2n(7DWs67@ZTGlvsp}y(T})ORT>> zs4xs_kp=1`ukCK)a6S#(g@N(>H$^v#OV;o0W$3?7rZl>5y?1>p*U6jE4>Ryf{*=K` z?Y$KgRiFM@!$fa2F0Y`@0F^EY5rvYt1sWb6NA^pOw+B$?JUd>o8#90InNCl8MqQJA zRK)HZDZAa32?sJ-=dxXWxvmaJj|pOjSo0%lN}0IVnJ}V`lx*T*!I@6!c{=8PAsEUx z`GlNnRO4@xEazAqEd`(A_#M*Z@7)jfURlSH?d^@WSPmZySo(6-VZ7gqu=g~m>U8I1 z6+0b}Y$C^7mK}aIX!%pL-B`V$+vQMN2MK*=z5Jv}>_jfJr-eV|bK^AW_oZf)jrJXr zhnBId>-s*b?e(4{4*NQ#W*Rbtyzt4TPT{4rw$(EDfz^f&i*A*fdQH`sjF+nur1-Jb zQ(wwtUzOI_PA)nwMqnbX4X5}z+L`qiCWDj8_F}z+^IldKdc0C}0oLx}i%Z_pUm!29 zV~$2;05due{nV$OIz80usFbJeQ0876>~XSnesQvj=*y3nL&kGDt6a8<)EKWn^NGl> zn|dO6uYeS45YL0U@q2D>rdy?kq95hA{>I8S>Q~I>_&rG=M0Diz{2f^zdgY-HF4BV@ z%||Sw^CTQ3P7#zcULP51k?0L)R!dWXnN56C-dsTYfS}T|C$1Ge`9JotbO%tjsbO+x zSn{k-G!}*F&%S6C;&#A)Y5mlr`Pcd7gY930G#?4fpHP`xp$rONvn8z&9vFXVq84Vk zaHW7qA>6=kAy;+by0z_8sq+8@%DGHCL3asD-OZ~c@fQaD>7}+ZNls5P)Q~-U(bY1I zZC9Nd7Bp$`LVC7JbVu&(8aMKytSQY^N0Y8ceJmW(7B-okiC&6ud}-a=6H-_T7S`x= z)$-Lq~+19NbjCSb-4CToRxH*dBG(y;+8qE)Mtr8$o}`5&*a*oW=(pUlkh-zUaqa z5*t>uNG(aK>?hMn!gWJwiEdel3zbkBqHf1KI1*{{OQZQ(!KI5<*%iyzn><}VQWhG? zH8?$pWXQRu4q>2#la#hWWAdx{jFa6-O=`)Q;9cq^#<7HHPbrs=bB6eKrQnt}D@!+Q zbYiRdnUu*KMvF#s8HeZ=%nWz_+0c%+@Mh8~!G)fE-Sa#tjKDVu67rDS5(SaMz1)NP zX$p^B%=tig%?(XB16@KMSwZT&vVy_nse5>_82Dj{bUfjwLYXpyl}Y zui=4V^Y3{~`x}cfUxZz^=7awv2vC^lBElg@~eT|&pS;sO`@1U#HdWxE=A{Ap)G!X z(^7_)MvhBF+LTsTOXfcgWMmK^-+8M0-9_AU-0g0cV+#{&u45KHhn=0V(GQCo&)FWl_L+#$D9h_tcH zweiU)j8}-Cl|#8`$Zb%3>}WIYob~u_HltPtSbLp9iwbc&!gj;1`9ws5*@248qoSXo zdtbw#$OOzRuTkINm8@({$$P`2$$D`L7a~!uZZb+FGEdnGc&%jTID^F21n-@9SBYU> z>FZmE;v!d@yg2+nSg=}+2hv}=8CY0gC`ZTf1Z8dSe(`T3(=k1G$q{v3hz0N3XF|`; z8zfsj3!3V_D>zRt^sHq!Mu?BfZKtH8eubD&ickV`oL?GG!Yw=V2Z1(ip{=;Qmn`#D zQMlB-ATQ9_Az7_A_J)`7i)jDLT>j-EQ2*{>>hyoCk)AzMzRW~71BkwJsdhi32W+if z+NT~khUvD^yEN#s+(a4&FG}Gy3%6#6Dl%=2E~o3qg{y%z+H+-kp>7dtt>MaxZ8$S$ z9k6nke;xW)^awUriMVLG)!0yl3IU8TN5jxGj%^dG+IlRqCQ}FbGVgY;-)po zqhY6-cF1P#+U@yHz{I%cXiA^>j1sd}9a(k``a)}_8CNK7sAm~_ZQ*)Y;rf&K9u$nd zc_fz&ii5U{_d>DUP&Y`223sxmejz*B#yYv6!c=<|2F1&Sm&h}mIWL2=9`awYwuINq zbl5@UDHYCx4B4zc&a5=CIxfhfq3310PFcKBZ1Pl(kV6k=w-9e4T=&F>XI9S}U?Kdp zk4e>j*@Jq2U0t#H%jYG^!XhtX|MjbQYdrPDfPz9cLE82 zN5F!(tA`~^T#cS%bGo(Gs2pm{AuYMZ=Q+-)hxYv;Z>?C zNon&jv`GX=W>{I&cu?E_?8o&^fwMdB-sFSXH2`Y==jIn)C*1Mg~aoo9fr ze|Mu=Lr-O44})m5I)063CgbA+|5%HzGO^J$9(RDAO@DHM|3nW}>x8g_pu?j?ebT28 zeB;u83?~W_bA5k^0NoPZ<5deiW$P-)Xu2h%u<{zT?<(HgK%SPXuM?KoSX~lhMx3+L@vWVYaAI+QZbsTklo8qzL zhG%Bze~q`$)i-Ji_@q4DyXp&imU#c{Oq&M~h;&64Bhl)#)?;)H&!9TLBY~+it-sne zo=PnWny|Seo>#|jG7;oKLNP^Pkd{IIx+t5D*%6a*^(f_;#c!ros zw|)MnxzCf#%L^JU5qr7_PL2@SgB==%^2U0MKTApI|6H7EsBFr&%1n?f?q$6EZ11{N z?QKGz*sVYZD9FCQZoajVNE*2sx8sc99W&?Ch#agNTRGMV()>7|h=x#b zg$tl~>`G#;c9~#k_ zFEa}^nfZ~5`-z@Jw+`inl-1amj4$XmIEpTL@T_yK^9(Od?#nXM)|gzF)v2RKC*U4v`oxJY00pmg;J)jiKG!6#~O3iL_E(q zl47*e0)0yCCg+g^eQtw^c}oO?j1p+kLfo3l`hWr*NuBXv&_{9X95^Za@~T!RdoAh+ zGe_MP=7v-kTNChU=e}&Fx*z{Sm|F1GVU+#%J_F(lG@-&HEK-H)E3!J1LLBkmZ=WV6 zp$c^idvmEA09ta@<(1U;Y4{hTm!upP>WU-1<2yFV8t)dVH4)L4!@&aOWIZwMySNfa zD41|<$H&zkEDdS#=tQZ1>?H71!|YrgeacPg#E=}0Wp~$T?#j+v*0QMdsgvrPFF)}f zL7GKtbf0$;Qz^iY298JgxOcdSCbeGU8hL(H&d+P?xFE$~UwA=le$LjzO zUi=_BHkwzy4=+j3Po+=})J3Jgwy^sHx>iDH=y}x-+JWSSaH7O{FR^D^?eN$mr@#NY zliT>>Touz|?tZ++V;VGqZ`%^z$Pa<^gmk(e$ats91NZEsSH56y7ddnhQ)T62pa}bP zVVUm?tF=%GuqRIH?5WWE>*HZHYue#MOlrr-O@{dk%LA`Q7P;RTzpE3HQyvn5RxSdn z0=j{L>CzT+_5VbuZrc_9#|e2lM^y=JOL9Ds7oq5+oaIZ!Jr}lH;d2@a7q@T#=_3f; zQ0`XCiD3A)Gl0pP9*z6;y%a7J_yFAe}u9}QMiZ$l4F5y{t%452ppyLHRIyM=jO zL)6bFI2qoO0Eywp6EP=lhxsmE(B2)bzPiN6N8Pryq<42#H0EO&Na){`~Fl{to!> zDNnM$?z~G!;B;5#k?k%!Jo$Nea-|zFrpJg50G`hOW5+|mXahMfpOa}4;`upF8h$xw z!6mUiKEaWBjyFryFvASQVwmZsv^#D7i<}Iz{bWfnP4HjkP$HG+wr14htr3v>sT+dz zoAaT!oy7VFh>9JOOAMwEfv}*}E!=GGcw}=MfArQ^drXI&|7v?3!7+K>H-~WUrr$?I zj^0MQRgZ!G>Mebek-n7^0ojzY!G1LswKFPaJWuC|LY?-F4w;*$b-E57y9u?i_X#-Z z{}eC|{yq@8jXA0n9r^blX`G$$$gm-4(;t*lnI{ND#O^e}DdTCLfLv4N4g5VSk zoat>>Us9RQLuX3B5-28LBW9oS&a8jth&% zk?r#k_N)&WDcXNN)w*-i!OG=ic?dAXX5Z+ZC=X1%boi+xZJvj*JIV5r(t(ZE9KTaW)LhtAXFfOnw<-`dsJ=3v;|47D=4-L=&cbk%~>g3*;nypBmV z>bYhhEr^<%*uLmjiH@fbg}L;oPMkJPMtDHIALkR6B_6wTC)*lRRxR&4wJh9a)TY&Z z$E!kbq8uON__tq&8fz>1oQa*=6JR+N@RAsoswZCX~j}oaSIc26wfUM z{c=>7anIEw?R;9jH*#5;C*L`7X(4y?nDz87(s>woeqY83}vc%_nCcJ9uHZ@1h zdC9!2NyuPBUG=fu&K40I_oflkG}LnJJ-95CLqAw@NbB8sI1L02?j#nc)L2n&^m%>M-QCHWuQmSGDA<*_1%{B!M7c+n=sgAU-XPH7@?#P(l|+M;@$Ro{I$u<4-H;} zpXtP|XZvAmyrOTB_jyeLfo&wXMq>9Y2YB>0&v*Ds3X;njUUi*CoIP&&)J9jA3goe;{IkkeYY&uXY zus~}p!HpfC_P>Pl)Ou-rj2lX9Bi~=VcG+Is>GzDj?Ty_<i;|Bzz6}35e7s=KugVZiy6~-ElGY00-%NT=XRF+=->X0M%7%}5H7e?^V~@J9 zuYH+_%qoR{2!gVZd(g78wkH;orNNG^58>Z^Md6H&LyoJCP&NJ^;$8s@0LxiFL zcW2vB>l1;U2hSJTx0BPmojqKV+?THUxvqn!{SJQj;!{Y$(F{|>RxfG8h@Pq|b7R|p}cFX`1Q@QQ^V-S`)&%wEf)X$NVeQI~pQ%V~(AwW;e zW9lQ)s)w9s&_Y*i7nq)6^tt1wgh}n}>zrtc+PAkQ7YZKfpW*XJJ)Dprpm9z2{?}FI zv8m{s&cd%uhmx5Xx;fMbM&W`PJn)`59`EO+`MP5$k!nJfE zOIFW6BGz0DQ+~c12D0_sMwe#A=-1osbQ5P^Htsw-5^;=QtCt6xmv}>;YNR{%F%yU4 zYSY`Fub+%xI1qi(>2$cTtyY0eOr2I|kNpujtbn;dPugpI&k(YQg40&P0yZJcAcYWA zheKVI@EIrlfl^*55s@|M&hx)5qif6~kw`n)EA>rHzgzsFNlK3+w?dM)OSD!*en2v5 zbMo6^@f+C;+^<%I0pq*7ezZAF%VhgY(&MT9ugvsAyO;XCbbV9REEbOJGs>CPSo1!i z_bMj+E5&)I)F-bSHEqu0PEh=_MUHLbHa_hsS>)u3D=^&_O0v=#iutSg3}2l(q?QMI zvzwZ<62@aqXjX4JDpoPOp|whG~B3ypP{%vYpf( zlrl@N$_+MEicp;=g^CGv)$`JBDP!J}ye06Q45Ni|&)g-i2CaUp6>Ym&S88Z>eur@8 z*u2zmnc;cwTonqWonzxH2~-Pm-oq`3!2SM;v7&HGGh4!(O@4xy0QuxF zdJAom`k%y3VENe|M^rp3gCd0^iuyBw7~>YV?Py^-?zH=DNz^IL!d)I?jTdoJ2;Mvm zY_WY_1J%{JB00+d?Kw}7y_&+H92N}>HXJvsmf&1oF3R5{G41K~7Oei*TZ~5=tuU|K zI^AAbH+vF$HikDp`x^3MCE7`M|$JlxCc>oXRRGIbk{Mx(*s6y;&x&|s(>z|3YpGrB%4Y{FWdA#RMIJ79)vL@D2y+sqfHFT|m7h3yX(%(z}oGR`1OG#Cr2^ z-P5lTti3re9aH)4UB?m=4~HEOE%RAc``As?czzkX>a8`KIwZ?`26d@CqvWaL*h|Zx zk(`)cdR^fk(fAt_RdNtF860K7gxg9DhZ;N-o1v@Hol6 zd73=yg==>UPi8|mfcm=V?ogMd6V+Jp`&4eKRQFA`hn@QRz33T@O+qg!H@sD>C9Eu= zVD*uhL#92Md8%i2Re@0c&t3Mt9sOb1mRKj=uR_c_6GTs5_)vE2+Wc^3(E$qSSHB`y zyoHnu3l3{x#wNB0A}8@I0U*abW1j_SL~Td|ZX1MiM?1+cS|+!?jd#A24+;kMn<-YNL&S|$4f13gCIK2U4U% zClw)2_)PzJWMO09iQ>>LzA&u4=YivTQ`d?P&%h2i>Mh43#3HvY@>}|_N@Z0FNWjU5 zZ&7>>+VaJthSu7WrJOBxciM)IryBdb{kezlqEQu9@6}fthgbCVvwi>wboQYNzgX&S zkfPt^lcVpSJ5 z2^{^)e`2{@=`=FTRKNojC^1>BXFFxAy-TmRaul%m2kNBhm+f86 zdz$~^p{~;UMkWVJaAVV^i=FJH^YZhrz!}M5AEn&^#a@HgALTbXS17l=RMTj}maapE zk#0ME0rdE$h5+R!QT!Vy9*z;U7xaGBXktLS>z3CXHeOfLrq zCGH!%L}z?p*XbIcmy~DwpN1}lcT(#vUeJ8)m*3I-%7R>@X3Ejg=Ou})_HlEm0|imT zCU+USTTfYw**lDwYp8BGx@~Z*J{)mLxPw&kEB^8caWZo_JVG11(DPQiCj8+}2;l#7 z0p3yM8n$aYe%$~vGblJyVd1ucrmY{U$oO+7N)ql*Z3tJ@(DcjVQ6izud!(O#VeLfg z&c!I}Wn(P;nzoi^*BpCv&f653QAN5guJ`x(fvbN-Wp6*dc{(jVL%O#QtiT(wg4|a} z2?P$99`44{>YI=vA{9eftHa1y;-<0tIu-Oo4;Of+5Gx@KJ+pB95U-lA4URJT=a$IL z);%(|EHBXe5!M|#aO=PZ>+^JDOQ?Ap2cF_d4|~b2@V-Fch4%c=9$eSoLmEPQ`l-CE z@OKa1iQ8Qz~1o0)rhMbR~g_5rXrXM?%ZM&yd>`m_sV|QeL_WDr@O0WAFER< zxpw*wd^R9KxLeSS9jQ{uq&dK8kmSe_{WTJe&}B%-7^Q)((wdoUb|scUI`bK4U5>#P zo@hREOSsV;cZ>5sH3W9He|dsSGT2lgwf7H}xmy4VjNH+*v`^pLlV+($=;kfQ^v*fi z3}?gj$xr&epFfj8o^9jVl{yxD$$Rl#LT%|&>hPJ~ND*;tTW{#@s{ZQO?R?F9LCOEA*}1AizWsjv7Mu^x+>j3& zt;zmIuC@?QvuTX&!^?Mv%Ap>o21=Z826auL{p;w2>~2g>SQ7xma4R|yRWl@Cmd z*bj8Om(2@(Ix4{y0&ec;>rd7#nGfr`^vHTFR?LpxO&g10UHmY)Fg}IV*e$P-wJ`R= zwkx|*uB|iJNP0;lamX`dQFgtp?q*I~^Tb$W-|9Yo@$E#!WDZ;qu973+$OQ{oNVHhe z?^ttdU3n~XJY*a4XKFT;?PyUF?l29FsvkdYrHKm*Gk=^9P>bF1S`H!+37jB0B9nT8 z`D;O9pRVCduI(ygaSTILe0YrTtV8*w3G5qJG7WaV7K-y1UxxZvF-&L~vvbR(8cCn4 zw;f$IUHJ4eQ8Io~y3ORLvB-eS!MCwHk(VYN15&Gm4bprf*omxiaPl+|rn|@Oknu>| zhJjI%{DzA{BF?kEHvjcQ=h&V=pXAzIQAZ?hOK8F`0v2^hxPvL0$`_W(_b4lS9(rVp zWuXf5NG*@T8eUA@>*3{MS^8Y2@Kenhv$0|7T5;8rYd4d`lxA#ej}*B??~^x_Q|=*W z7nYe>m>shHShz?2V7_BJ)AVTm<(n08PQ0@=e3%+RA%n5VwUtVTh2NuRr-EpG2fY*5 z#l*@jl=6dSQg+uVgr`?xEN!$`gFA!E5|%?(PMp5f-c^s%%>kLALVkLrMM=fmb1crE zFbNxCo*3Tst$st?T-)IYnEYl_vVINlVTI{KC8yr`*N=_LBlAYS(WndG=yqca*oOAl z1)C?vW!sFT>BtsZ^q2e4!Hp876myt{5g$@UlrGcG8ey~ehxHhjp-GuD)13Q%w}n!S zq|&^S4hI3T$)_8+#mKz#msyrENvPUUOR}odXW?_drldPEuFt!-+hjyce)zJl_;71z zv@FflL3S-nlJZbdf)s1rN^p#{Nt=jsT+A`oBY0*atC{c!BRdUfxcglC{2v>&(6m zMzAv_G*S7^=mk?9Z(=>zy8JkyTR_zfbrqYb(N|dPSvnOS@TBaSRgP^uRftY&=TL+D z>FU9+>f<+3dzRhGr%M+~NAd>h=B)UhS@fic`sPm?qr{p|^ss&DtTKo^8P!4?MTPnB zpyb4ju0W|$s_(gOnm0w>`ExmSMeb5VEZ}Bl?oRHwy}@>pGvy(zB$k@Ca%*BNqH=5L zbDm1KZi*K@?y7$taEJa1YKWq*_S3c@6Z29<$y<-u< zui$Qh)#&4^Zo;ceBB)4%RyNnn$UWO$RV!8Q9rC_Btn7Y~kG=1;m4)fmiG0nrqWr#R zUs5q#M<3|V^e7oTGjk16T^3J_n#KsNg zex-zvWU#dU_~bFY*yQv#7*ZF&AKAW&iUZ*6Ds2mYp{=|InDTy;qA}0LM>eAzUbUL}Kpvy>l zY&l0Jb8j;!sC}Si%BuG7rQ$Y0*HsOsM;3I?YnD3scAa)$Osf$td{uwKYu0A=%JRjq zvaZX;%D1$;`&yz!#v+62r?4VTqs%u7oePd3dUy*g=4on-nG{1qR1m8V=}Z zA^N(IGGN`O*3UR7s>Q|TFX^1d<>g3|hznLm*RgH39 zc5~!oI^y{xckb?Mw;qLIhwi$$kq^vFo?6=Z(FJeKZA)#fX5$k}_vg0irOYsg%~lP$ zjo)2hu}JLcY6~~~LlPfP*%nWZ-I8T1n z)UyFo{~U9g3C8Ht9MVc0+Jxft?toS=_~SPEfZh-%yXAszA;`sE6z!2jF>w(bjNVic973-y3>^jPwR7q=OY)2 z3hvU^X`sH)lvy~u7H|(zJ*kJOUwl5xXD(tAHpVEpZfeLXfn(JKTFJ`!rdV0k3RLF;d7gDCdEzcL)u;Szl7lYh-Oq0`#JJLyq zJ&m4vsI;ckcjlh{JeO{1#V->^b&t{Kst$|5i_2q+SD1d(oT)xho&cL+CNskf49eSY zB%?(Q2`PgZc0LmDa^yd9UZJ?P;HT-Mx6G z#%-9VA(GFfX%HJW`$%{39L0}>^*t9E$kzr(=Oesy^O}2}!`HWXaAH zeb<+BcO1Zpz8%z?5K|m0fF}CGZs|Q1^|PW&d($im{3UOdC~2fwv^8|b@VWKqW;V=9 zmgJkGawip1&EINF+zg&Kz7gV7FFUX>#$w^LRyZ6QLkoaQq6l!_r!K?XBaa!tJC!)Z z`8twmm{vhMwenI#`p{#^-xKm|hg@k{SoliwOmivJhaTRjT^qVBm8y%*3pXC~iIyq! zf-t&xn{#oU$%m(Dk9IYP-|rXZOF`=x?{NAn%y7Y8`L6ub6YP$!$AZ06DU)AG2^dCu z9-S6Q2rlCb*A&U;V~ppwYZ}&j;MHA!bHsC-n)^X%6SGw_#jvH6?q&_v7LNNvR69mi zyRVPwi!|)eUV7Gjbk(E7x+mwnue5z;;WcSGQ;XU8L!E_l&T&z&3gcZXrNioC`SzdO zZ1|Rp&ac+JH7uHcC&<<@>{_l)eafvY=-|*cxW=SF=_g!fmY2i0kKtKgrL3%P)k4`5 z>yRvZ0A!4ykLSesbV>(o95LmXPcB3AsR0JXN4?ua<{#Bs{XBuhw2NmI%Lg(&4ZjY1 zsw~YKioCns*{(ZQGG}%DTWz{TaJylC*btj@Sc5>g&pQ#@JBx>oGyHFvdv%KV4Dn#$hsy#j{8w#118&mF&* zF{J2p6x>Rp6m9YP{&Z!12v%@w)N>t2(78TTI1RBWAHe-6{HlTJaH(gmt86Pv8lyD=`JlfL46@F@r<4m0mUtFDDbSWhKW*>FapaT9?0b ztlod49vh3v9@c-X;GJ90A zi1v;UlVu-J&#@IIo;mh8@kjZQ03zz4zP9ev;yI_oLyS5_^JCHm7fAP|aa!~}RlF^6 z6r6y9f}?=ttgyi6k#^JXohYW&v4%5d@kY`!I(;!LYd*8OxB1;BBKOb=yj_(les|mL zLemNR@oIni2d-o0C-MvLr7}$V%_%A{9(dJ*Wv@;dGcWe4wJLKnyq4t2qdk%D7S27V2I+`&euj5`V2B{$3wRTBNQ?ga9PI+@!7! zO0%HDbGdUAn>*z0@avG)-nus!pW3uTe$Zg?6I%$Lhd#|>?xoC(u@nUBQVP2|-pclj zODgWKTPUp0E$@>*d6#~yt!zI5=!g#%^&j+j9iNv?00@M=Un&3!eup+{12jh|09A)%+7JN=hlUJQi>UAoCIheRxrC^_Z%7omQ4 zNF3YVc&+}8hx)P1F2?lm7imAV%U+mAJh2yz2uVkP2wM*bVsSiZnCz)E0Fe_>3UyLh zhjmpU_VuGa_*;A&%90Y!Y8*bS8P{6xGnr;0V>44M-FhQWUZe+jU~8);6RUt|$ndXpI1As@ z$`Uf=c-wRAJ(j5aJWpZK$Fr5%#f3!jW|4Z&Q}i9<=7AYrU%RH-78g+o` z-_YkL0=lmyHLjgd14ZjBcftZD=o~W1L!}m}{S-POWb1yD`>~T3DdTJ^PFV^rsfA6S z5OR*|L1!|%akX?G5n+rscz)8eOu+46>bys|2U*PZ(8Lq7&pabQTAyrCK*sMj0M9@9 z>#lg*!}`1XCVHmg+P#Jv4#l;5%L^8I%hs*e)K9I<%lT|@2Rb0h{3kqQ)PwM=IQOb= z0f3^@IkfN6V=RU^&W8v@)_!;jj}E4&4zSE96@03<|5Djl42WlS&ihvOanF}rH!b+g za*d?9u^PQ-2Qm3}UHyB?zqE9nubQK@;+%?2*9To5s1_f(qminZm%=0Llxy;OB44*y z54B`oEB!I;sJun|+)5I|FN^k99k!@e_fD=yk0Xogc$*5Fi#I?McFi zc-t~hztncr>_BdZPm0ACvw{HTVDC)lWnT@3UaM;BmiED(=0c)mXN`m)!%V}v`u8$e zfwSqW1&+BU1u3OY`9W#bilk>P2Q-U`nYc~- z06J}ThI#JlLgI8!fV}&GG>ZY(^lsOd5hLm1S$1@Ir~1*HXwBNl;DJatZ>Aj4>Q;L> zU(Y6|E3t={*bK7bTF*8IdBY72b+sDAWOS;q`p-R8`EZmH0`UMxd}>wBJ@i-;fp|`@ zAHIdsNX6x`aHY}p+^TYFamV(xg~WUYYXrd?DxmU(WyT(bP{`#oG+3QX<9} zA)AiiYCj^DI_r4XR(n6dd^>NUzOsFmUa(kCvrnVsWH-w%ylkOn9-o`tF{f>1<@m)^ zI@p17mRAs3tlYlMq_EVM<#U^y8_{pW*07ssmL@`u8=zq$Z=?Bi+`Fwie_EtT>3l9R zcbti4uTWY$I7v5+<&u^lBWaOY_5o>BO(swWznL{AoDW|XtFw6-vZhPDs<;xL+e6jB zydGyH{qdRJ9r^<=tz~XY9D?O0@8Fk4Q0@l3_EZ4`V@k=#LL`K^kQ*j%k6+G;V=9dq zwL1R3Td<8OfuW$b(9cR!e$cR0W;|4)r8qIM%&4~20BtiVs6J|bGP;WY4XQ}kgHA{5 zjnip_4(dIaTc4KgQ-cnfo-%Kb`8O0Zt5)iUGJ$1L2h(38&UEQa z*#%N=l@DHX!$Q_sQJ)4d!J&?pnp&UC^HYY^koOlYP8++K@kW1o|1SF!pAcp!Z&VgY z5iNievJJfgSh+uufeT>- zHxw@^119R|Zu^UP=W(b~$c=4h0ci^~@l9X4Vsk z`j2S_f7)w>8ppRPfi-hjsG~z*&4?8FrHSa_s@?qx)A6Uw@`k%)$|o+DuYbW>y>NOI ztZTKl=yPLx`@6`>KuO%&XSCsG4Hfr~NwC4sIC~#J5vB5VI1Sz;Vq=M1$u&--r`_*3 zOOf3_Sfe87wjgmqJrn?t0T|29<_AuaJ66+@oIbo4O)qN=d}1VhzJbOBuS!gZpgOk~ zcJIZyK?LF$Ei#hc6=8V^al$Zr^c`}be6FZSUZ-VyYyv`lcP=riQKFn{X+YNNv}l?8 zNYH&!DF-^Mt%6O{sSJDBh~8|nk>$b0Oipc_k(k7I+12ETCuv7k;tWF80wa#|Ha zY#z;f$j94Am!1t6lCL|g6&F%|V?X8YFmchw;OK_JO5(Uv<;+V@^I3A$(K zv1;fGhD80ba4b+Ds9-VFo%NAbBrN*G{v#bH#WWn!a@%?HcZagi%2s=feDcA5%wUOk z$~eDbH&t*-Hg{6qZQR?-Sa=1~G2v?-=zaR)`ts-822&2kX~-zXiF^% z8b3KA8qAu!){$MZKzy?Z9LVY(rh-T+kILsZW-r_?FL^ZJ7h~(=dt$=}IPyVTUjROS zZD`N57w2tAs9_uuAy4IEi4hgCxHd+I1Rph39OD6Adc$b(PUCW5;2z&8&m$!2>ipY@ zTwx9t-yQ(BV4C3HSs_VtST1wh6(&Zxxpe)m!;A9{Du+4*#0=CNbBHd|@XA3#)X>B& z*K(hExK0r28ZN^v&8VpG0Grw;UyhXO$c&NiuPq5)8X@7f9N16)?8~vG9@vhT|M??M zUnK%zm2Z7xPT0$d5IqmVUnofbtp7FZ|@*%m9xl!gc2zJSV#<4?OXp~0Hp$FcpsTOs)k z$BZ_L>#sCREc)qSpRjiN6`IZ@=gZK|bB8|tZQlTXh*!WS{hN+E(r^~Q5VMyx3*EqX z@wYz3S=@Fa62zDONnm15<-_57yh{RaOJ#VxgwH)TxcO2$gwcoD(w6cnQ(96fkF49Q zpKbYh-TBA0{6nFJt~6^*L3BnqNx45T2fg zu}FB7#)l2Wxj44R0!Tb{yeLNe34Gj@$};kQZ>W||fC*2II>W&X8cs=?D6l7B@4_af zk0i5idqOPSWc=WW$oY9M4fW37joX`@FK;Af=-E3N zg2$mmDlifrzDHFKAx@oN_g^famX0=MuKB)ewRre_Cxt6w8@dFcIL0rA8A%IpYnYY> zNV{f!&9Jn8|e{UR|JCd%{YZ~g$*)kO>rR?MFx|T4hJW$Rw(N>c@XPz%p z`)x#sBURg!GBGcurvb?w5l6|y15O&lV&_5BirAuY49Q>i2OcdpKo#um1!x!JSw7eZ z)ych!wk1R72{Ca~@14#@2^!NRN=kM#+VqP|@16dyS6FHbW4a#y1B?_C3j%v@|XF^ z&$is>4jyYN?6AnYChZVu+Un<4xFk1s*;gp;CYDlz-Tp@285!5!aMCDus`1U6LSf7-EPMKvWyn)f zAo~4===kKB(oA8X=}+HI?7fS!0g@CH?Y#F5#a08>_8B|i1KBq8eGs?O9wOqM5V=p2 z{oD@iO4lmB?*V{>8$+YY76_H$_~X0Q^YF+Nl+e{;hCd%7L;;2NcB2Pb@ZhXf6= zf}jhOvbQBNK>2R929`0*OR9HSZk0?Huls9D2__rdte-=8Q|bNN`y1%eD!uERQVIrn_qwOa}B zi(T6ekzk__6-g|9gjvM;AWIo84HyY2>&)o1xZph)tU@OPM7^Fb2Z_n@PJ+nGw8!UR zXr2%0IgSSb#N=F$6OBGJeX`Wj(+lLllgob`Z+`;qFd;diPRfC2g%;b66Yqo$iPM53 zXcqabYep@52q1^8QF5!2y5N-*ItKAd8WTlWRbsN4i!hgCk9HoCi1k4vqP+Lt222G7 zegZIoCIlo)Ec?wExecug%ETcG=fM0UbomF@dFFJ-<_h1IFa$KQ^vTMOh}Z_O>C;Iy z#IH6pcDgNKYk1ZBG|u?&MBi|Dw!4Lt{g>J<3AdhiZ?k?j*Af|x=< z`I8h<6`%gM(zO3O5x_{dI(O3}1V6Q%$P<9fAa~}wUDR*D@m#4?h4TA9LUO=jNGN~! z@G~SXgLeCS1g@&6BM==|zL8|vG%0m(>q)of>!K>YgL&*U7t1;Vhmk+(L=#XG>|23M z<+OmexI)915A@2+%oM62v`a|Zh`6P|;1_NHATU-}`Zkq~+QJYN-}9_HXj>T=)v{Sp4=}OwJXhK9FNi$@Di?Yq z{{cweljsJ<80aa=IcpUH?LW#b3ZoTO< zBw~?X2+yB{_Q!S(0u>Ba1^w2>rIQcuMRngQn}g3Z!!}3{uNvI;loeB3>*CF@uUp9tXfCiQwW8%;N=9}ty}P*wzdnK3Co?9o>4Tm!0W%EdCv9{<;czz&jlU2Bl5ivZ<$jwur1fNZ-|@$IF{vB?A$-c~ytqs4Dp*}G zO5n!kYD5BV>rXrM>5$4*_!14j#@}e>KM?__${)(-e~4hWF!ujUzWuM#8vE&is+li( zdQ&+5{iQczpO-)&+~Oje7Dhb?y-w1~`za-FOHd#Zi9Y=QnvMNyM*M%{wSCM0I>okw z8J6zjJNU=kacDdjP#G@#g)NIg_SSQlga)4saUB5%@IoVk6MYFhgIdnmQAI+M`S>hI zEt2n|5b-6*+pbi8{I`tT|J2R=Cs`sOX?z=zNi7D`d#cR#)qj@OT(ep8cpm-YA$PQ( z;J(*KkIf*djXoHZ!v}M?hk+1~#UP0p+!cQT>=Vch$QUmE2R7#OSs>Gw_M~^|y|ZTt zWq@tyxLqq)6K?@1U5GMV2bzolr9zCpillcbQAec+OY?`cB0mZP$+~}?XZ~6DLbKh{ zZ+C5hLY6-YP)1fVS95+hRsc2h`Rmx8w|IV`H~nYX#RBPVToA8DCL!d);$;17FLVA4VyY%AQ`~M<0SSHue}?5Fq!`# zhDS2l5`dY6EWDm2yMw^i!T%^D$nMh(xJL=;8GE|Wf^5<7DR)~}cyl04=gJTM2uA$# z*qn(lq>LuI6Xfd+Q|s)b-%9wLXOANZbSZ*oLSNn7oCKKz@L`yuC}@YNflp7mQtWig zJg@VuG%u3CQZz$EX%5V8p zIySaDV1WHf-}{2>HG^T?Y$}fEQtUYSG3PPLV@?4+#f8=le7;7~8Q6G1A|F8BoTga1 zO(&#s2HqLW*Wy6d56Js)V!)M6Z9&!%N#WBIF=W(a7qTj~2?X6g)n2(AI+!;H4PQnm zP6QvG#^FN=A9&V(W$wLnoAp)#k>tPzO0zv&e{%uJW}uuHR~>u*h(s*ZWPNBi^Era$ zHlktGNG+WHJgX6@TOPd27`P4n7M4wEH(@f!GdYka#-@LTq5Sr63XUFs!-Y z=|2O&!+jPo4Tsxi41b;_hMZrqy&gBlxZm2bdFGGlQF{U%}5kZZ^%`PCBdR_O=WRhgwdca z!J(<8_LyBZiU+;nztny6&nu|+L(TPrL=np)2@d!p7sf1vkfBl66oK^WnO=z!alq?2 z<&P+C5it4}$f+Li<9~xqm?KOGnf~pK>4QG#E#k}5+s$7>L(6X{U*cNh@q&*{fj6j+ zmAKOGPlGWUm9hkEt_kh~=Z1S@yur9B79WK0cUY!Vjy(lG_PG%X0@?C%;D1CB;Fio} zxv3IKDKJZQ5!-I!ov>7=wQOZKsb~BzFCn$+V43ipn;P*FG=jWK`~xi~LfsncB&ZOC zjsFUpGQ8e(_&%JUf`3Q~64hJlBLvXzK#6v@VZn?xNA{HsjW3w8dg8Kxj@V1gVcQ71 zWPbhOqD?`64?8Q55&I)pBGMrF=^vq>;igI)L*a4{U(I}o8NCFvriOl7l1(WQ^CR6? zeeSVDMCw3!B}qQ3d$Q#zps?)!EqsHd_nWgI2cG^)#p~lQB{~r8_?J3I^9p3m7XH*5!NMNqCYMT)8Y}e+XsX4nGW_jNJNh zg*V^Yi%G*#?`wAh$FqR5K)NuwqWG2ntSUVNe!t>1AG|{SIQ&`}2p{6L#18{i>vnUt z?tGD3B0F^rTh{gF*OOoMm#fN!=A6%3qiErA4#50lqGC$7SRp1O=#ZFUU@K zh^(-3+tTH^0pm-EES%95cSU3?y}cLClO1y!<1v`xIw}#1q`y8^FYau4)*w<8pygWz zek8C$;AF{xwc2lnz7ztyg}D)^E#IqQqfS@3+1D4;$FrX68RWCRRAGL0^g1%a8HA4# z2$b3M3ji+$HeJ-=B;)u7ngR6?I{|Ew-a4Qcmq{|xtT6%|yP~0xZ#!cu2U}n~(P-iBOXd9Ov z!@IhtQfzO#H0d(@4pOD3%Uu89e`}`o#KsHO;RTBmPsq2dD^6n^NxH>zsm*$X+_4Sg z-S(O#mp)83cD3N%kES8N2zCEdHTc&BZ(4UDtnGi48~?}B*s|UcqI1SI2bBB@^sX@J zJ*fhnjI~G4^Lk_zT>4Nvav6Q>2#c5p8*`Cu$uxRwbC)Y#alb*n()(&tjp4U6MEERP zwB5pWCAs#&r7u|aUDTYZVZV_pt0g z0u@R`0n}8!gR0)Vy#ngtG6!p@*O+r>0DT-WJ&AR2yGypCWLtbizXYH`QbiRgY_sgr zD|Hep8>{}2PI0uB&BT2oK#G1mvwLr9)P|rXjuXcjeR!A|X;3cqwJlw@GDJC&4C4(f z3nCA6H-z7r`X;%p57#mRP8H#MxS92J56;6DOrZ>o8}N;V?1~QXXQBR9?U|V&U`#xF z)J9pE-Vurbeww*%<38tJc}-ha{${at!x9()R!=~uJ!JbDXm z?s+spscQAopGVh&BA?p`M`oadcj;-B?$6XaEt+>MQqZfMp8HapVKd?u&;jt|uL}p0 z{t7zOY+1agyq%7hX)e`8ux74fGxSB;i0FNP&^wFbroEkLmN?GtLv&a1J+4S71cNMM zsX&cACHMgNZIK1?2Ys|vdxoz-PdLRuSa&h1{lVSkAG+Swoq5S!hfvCYy?X{$CXUqa z{uX7!eZ%31o!5}0i#;mTKUFg`or>18Z)UAls<-=Paq)ppJdl)-Cdn`?-9j*IXF%ldLMvK;jm z!$l85B_}`wiDN_zCq3y5Jjc@Q7C*Hv%&~#Gm4q0N;?)}=M(wyZlmjOTm0jS1rl$(? ztUG|z~cudB4i6E!Mc6q*NczkckF z9(4SOs9)w;H`L7^z03B7g}Az?gaIh_@6H2`e?mN4qbkJX=v$1B;8YcoZr6D|myt1N zTc+#lotK2G+awKj3vGsOITRB@lBA%!4M)jMH>ao{m=LOay)VTq@Or%m%u!e(mtxCm z{@I0^MuZ^=9F&y({WZtc9=y`R8YV}nqXhp`N*X^K(p$Z&4|{7oNq>Yc<8=m&l>UY7 zb77z2rh<^r5};CwYtRc)WdG7YBqT{RTs-aQ76N% z`S!Ay#6&OLGuRS|FsKV@YEPPfaU!HBF*yPvpKBc70wOnF$C*-5G(F)X&@D=9(_K;| z?juF|@kc1vraI$Cg!TaDqQCfj$|gj^>mfPssk6n@^-$e`D#`QKI(D98GOOo%v@)XDWK_ z8oG)gN(FsN@?`3+Z1vhR(@ zq9xpa{laeQhwn)4ekPVZR2e>81vVX5zrQ#hwc#wOIddvNq4r?>=`kiFZ9KiT$CTc$ z&*Enq4iXTQBA7YICF!2TOu!U^!!qKn7zB9SbsrQ&u%jvWE*SAB+#H^L;qqXt|7L&L z6tY!>GP(K!!B0Jq$h-O>x1p3VQ){o-956<-R6SJq1_Xow`-hYmA_^wBu=%Y0lpcP6 z87`viPpfce5ciX!Z?|1pxF$U#xK{Bbt4Hh$DVB_o*D!7bLT=5`j#6%BZ3-`$UV^d4 zLc-^B_8xB5$o$Zk06eS3)g6^Lk|L=;S<0YPIyL7;86jXx9^+zh=FwZN?3bQ5?QqKV zT?sw7dL_?4276mjWJ4el{IH_dN(GxWFYs>P!R?XQ#{S;buV=J2dQ}h(-FFMc7TP|P zqL-Q2F=qfsm0$^V|N984zDOl!d3(>>regc{!kJbrF9vBl-Qyw`aOU zXB0c#rv>LeSdR0zFqt?qy^@(L9`4k5-}GGxX+0v@VqY6-9V>+{?Di5UnI12iEsdw= ziVNk6gTti=ODs+O#%omu_)7}&hV*-~%Hq`bedp+2TJvp?yl6C%-95#=BYd4;DLG^a z_DEG{53=BkZ*iyyL4EI!D5NOEQk@vC=CbabXpqa56J7 ze?1I>9yo8R#GY{7nAWmv_o^zYgFGE46n$~3kQ7`2tv)WZ`Gr4@%N7znu-WwkkJ45E zcvp68*b;7Bz#_y^ku$)S(;{g7t?sG(jo4o?(L<~GgWjt%qf0iJvGYpe9^S=OUvWSc zdgDdV0&NC;qurjG&jkg;iaY6W0iGZB{alL|`M$6@W!N`#k?pOyox{ZU!M&a;f_y@! zANL89ZHMk?Iq#6O;jN8gm_nf-AH@j%Q1f83Ex~JJBL51PL8Z_lSDt1tqQa;3VQ+$F z&u&)lm75-q0EGF-Dlt=F3s7U&)07+1+cJ)RDL_Q5p0L;8k6L;nq|e!`-d#_%zTbVw z`thazNW1O(+;2tpvMvrhYT5P!b2JT|1U#BTaq(S~^FV_St&O|Jtm?ZJWKE0|L7q4M zk|)QCIW(!+v#=Z>m!)D&dS9X#jBttKOM{n~Q{H&|v=mjzla$W8DxG)Dhrl+*Ld-$Y zHAL$^xSL>;pw-43u@Oh|z~5s6!?xx`8+QJQ?3-TkST&WQ#}ULvL0SUA|g!^}~~V-Q(l*r_vQB6gNWKI53@d8e32XPQ+J< z2A=WWQ?>n)w*J}Ecg|-y=-{=@=S5Zkdai2Y(X9j+%O&7Ui|g>X0ZwCJ$ChOerS=QU z(uY2{0b%?(L)W^G%HNi7CweAc!tAxs#MJvSAmY4NnbxwInF9sE`)mTaScHgd9V>l7 zKp7B2o>t%+0~%a$-Ec`QD~iAeSreTs@eocc^FH0}(hk{~YLMvu0u(kJWv=^oY)e4M z-RruF{#)F+4l;J)?L_IsW@ZCbFN!|Q)*W2#-(fr$Etc*yP4KW_!@LGdoF}4n_h7tP z#TF$vepv@^EGQc!Om@6m#Hg|hJp84+4)$FRC$dVMieohm+^sy-GtXX!E8=cJF{ZeAb&N^FxPI@0>cDB7Z`^E(`y&vXvK^c3 z4C>x9P+!ilZhA%2{VgWBgx`Sj@Jk@ah>bLFnqU(yYFVxBw5Q|KLY`M$S(Gzcb!3bpg1bhbqnoq(J>Su z;x0yjX>U<25PA~5Uzy|LDr?!k41>~r>w}H&vhA#I5z!I8B|(cGQp8&;x=oqd(XejAa{D-fDD8cQW+4vqk~GbOP>z<4cP zoWIM6-gwKus@fn+*{F-A5??qay57Vza@XrOt*UW^k#&h#cC4T-$Kh&2lK7oIH4(wv{Bci{Ob=XyOYEa6!A-Z^Qi+8~}X&pdRdF(mc z|59lc2lN1hD{; zu#;ySC^gFZLLhWIR}hD_dCePodL9+;eytc$31MlklXVY&R^MhXAQWjKA0cbE{YC~0 zkXh+aw*l0+5Yx-PAF+jcP9gtN7ej@B^cg%zPr3SB0R3rK$-<{0JLB1Fq7%z|#;E35 z#k7QW;KK``*vlIVkFa+?5`un6iO%*PSrvYYE80}t2Q+NGzjVi+V8M1u4z%@xrN}_f!^U_%?rcx6Yru&tM>4D*idfZH3mjJ%fcKCVz;amOD>U zm-hHqLf!>QzTnj4>fMu-I9^AB6=A9TthU-eVys4e#7d>&wDsVwD4>Iw@u1uH$&d7X zupb}i-e@Q;7H)rVhaTzPgYYo5?uz?=WWV9lAnfK9}A{miwpig&b~X4%KrVoloe8$WfnzAT2gkYG>I~@ zg;Zo@W}K6RBD+F1m9j@D2ggV@m5_O|WgMGx%-?k%qaM}s`#zsPp3kS{zTfxzeZ8;o zx?b0H?M+|y?tc0X3~=;vUzfoY(sJ6?BQVYAsLMNiZ!XrpJ~tl^TI(2jm0%8wmVL*d z?VV-4ag6U4lvOWoKnS%47R95Hdq)_7zjkf(>WUZbTKp>{pCg)?#`ntwB;T^!$Iv~R zo&X$<4Oem$si7O=_pZw|x?MR_9hzRvHr(tI;;mKqjGarHxv5v0dxMhrOmp1!Y1456 zF-EdBpMNPiO9XeN#8CUn5<*G(l9j~kF(w4_8FuE%&Ct?(t9I(`trbTX!7Ib&^5aGz zI`05u?*@+h#6pDE;wvd2XMA9dzT5I~!ef6H3h$?aKrf7bC>z7db!({cHX5`T`v={h z86usF--}e_ia}sFLAXsQ+utJ3`8_EIGH}@`tw*^4X(Ja5@?B>_XLb*AJUba}C*NOg z8|@MpsX&4rR*tQE+V-wgL;1)%^-g*yyq2&7Ah~%a(IMlk5=mYEmbPB}no+*w>G`7J zg7TP-0`U5_Nlsl3uh910vurD$sB&k~m2{PZ*P5W--js4`8Kp2li0v{gm5Ww_bgHDo zq^dbIl;|iks!D&YpgJe+>kuEUEm{c|6ED4h(^!?zyh?%XONNqqEX z|D7R;yZq$ia5W5 zyjHS}KEKMuZr4RJ#oA-xq&fZM z@n2RqF0-6JcU$5iO`EgoZQ)KnPWGeep7@=1)ps@oJYDPu-Q{4pmf4nsHiIri(jI`H z#5HnXC)t~q$OfNcyZDpTv&KmobZWwb*$`=SawPF#J6|NyPHl|K5S$&C58aE`ze4KG z11sWxN5Yp_l!ZQ~*^YxdZhJ#M-|&S4NgZ#3d9J_i(+VVWRl(_yg@^8SYss*=c}Jc$ z!aCVKdvqI@z7Vi#BwjyZDe$p(PULM;gWjpg@v6OikM#hF8GlWUbD&Ob4a0q zDVwG(f-An71FpUFJh_%bS7o~CDbywwyV-mm-GxBO#t!f&4{D5$yWW(5ImZ& zgx*B_VaL>rdLueTzTN~W}pDZ8keaJT>Aa8BFmFrFNd9w z3)EJ1_qMXVh7J_JW5!)vyx~VLQP?GXC?rul6{YJPav;3ShpZ$vqAnWIN%xeW$ zU2nodsLRY{LM=?8u>#LewK7C?pd#z4w%lu@|ag0=J;HD8{1i5N(^Vsnia8aAkQUMnz|;TCgK`w z&fF%7VaLSUGEx1RqK)-(q<^Ku1M%CD6DG_jx36*4`SJMk_F%60}kv#UF6p@v;lYS9#(J4U7@ldu+o3m|_8<*&|$-$h=%FV{h z%8dI{f;3;8vT8zJL zd(2_MEvbmIIfeN(VL&Z;DJVg_0loE&r0-^{;gLoB6em1l??etS)$o#*OulK^+c~%7 z$CF)2I0JYI7E!#m^(_*P@nlxua9SEpPE8E4!?_*HAAx_Cy$C;f}+meOggU>(x zJWe2T9EY%oN>h;skR8*?DmR;M<_=GK`NwXhJd~+}Hw2dD-6@w!pR`QJND+QShx|FJ zfsKyGMlcq-eBf8teP;I_d5MUKt3z%*g>_y3RDA*d@>9hWwMY%UpmJ?b%0l(#ahV zLWvCH26j|;n)jV$KW9_PBk3F^fp}$K|89PgwEkW)LwZaeH+hu$y^{c0a{`dL(c5t} z|2SuB%E~LAQ+-uOgkEkdveEp`;C*b(y0LNP2p1)O2bp0vb0PTh;!Vz!ldhC_Y|@TH zr0AIRjR)3$A;~+d#O0mH(Y%FYzHwWhX8G)vR6aK!SyFfyokx#y`z^@K9cBL}_1wSg z$qKV;6ZH#~gk&`r3z82}hH%cF$vywoG{tCdNOQUfdqdlyBvi;2==^_4c-PWbAQ$&NLtwBrCh*`PmU`jE zvZc<%)8w1EKdF5;&0RS6&Tc|2yNwh$q`aMtO(NRo?`!xW|s7oVLWxo|u9 zh{~6O7b{w-OwbHyIfa$O=HjK=+p?r)TO+GooSP<}*ne3U7OGQpFP~$%Hw7X;o&ZFC zW3`dp`RTk9n}~@kcD~hP#OJdJ7aDKjJ#oiY4}!}bPFRgl>V-iJj+(|OPHCC+0pI!h zc^W4Nmk7mn()$ka-n2(S~S?>NpG`?ismnK;q8uqtR?5fk#$ z<^islM26&$pfJJw?#z_u1E}xpOuqv8=}*!+H;E@~CnkajF+5YP4B%kzMk2L$GT)`p zGeU(}bw~T#+w~)tut<^^T9F@dyV&N7nRHngbHb`=v(+lM~f4#^`Njd}jx{=+PsK$(f?fgdyf!mieOhEQJ^2lo(@f?)e!J z21~!aRRoQ93KncThsFn4mA0y`CZQpcdCBaj*7`5<`- zc6^o*pCH`d=3T=j73jjS|QzUp5zHSVW+F;>je?7fd*2j*8q_MxK%ED7NG2It6w9p7wf~sh{3wH zvGhggPNHEMc26Y>Q};`kRTk{QAdo-%ZS|8YJ2 zi$RW910ELn4Zkhahd0{}70f^;ET%&cGMh+-GY_#GHt?lKcdw{Us%Gd_@Okd)cGb^0 zk(+=1@h1Lz@P@U|Uz{YnxW2o3pG!^6&p$h*kWz2ju~@gfPc7ejou3@Pf!+ zt36sz#Yp7uhe zN888B;1Pu|yHQ^x0+QtVJPfx|0epmqnwM8f)}^t?hp{ln_qKkbT3N~BF8~)q7(Ka= ztQgr0G=?o<(*rz?;?E<2Y=-n<@WsSfFB>K&6o6iqLU5Z`pCFR%Rn^Mfq=IC$032nC zxV3W&_a{ z(+`kRL?qBI{1o>7Q8qj~$lF()TITH`$Wd_umn)8@S4^+A-?9rQ|ZYFpFo z2U}Xwr;@b2YBgu#Oy}wvgY(}kX!Yk_jF!j_hQ-F;popT+h5^cd~AKnRxpKI=&FqDO!$bKZhF1_y2SNU*X%rR zeeeLAmyBr2krMdN^;g;&>9ZslZ3m}@9>`11?ae8yvA1!3DuDm-`zoLZSdgOe>xlZs zlzew+)n!Zg;W$$e9PZHUuX9RSYG`=Mkp2Nylz1oU=2rj>@}fY#KcvyD+CAxY>tDSx zEO?*fy@hq_)(!ox^@k&j1c4|=l|9>+Z#L*5r1-ce+);e5x-}ml3sg@)AE~m!=_o|t z_t6sjryXrvv?vAUulHvb+PHm;w*GpfU9ASRj5E|hY?hi@{e_>_IFT4Yr%{|wyml^?P><4OT)|mSDuY=}Q`_HQJUfMBC?5Qs>)wUO#E7vT4=3**2 z!-}+<`sFRKZwGT9@y+kx=+5+>)jMi8Q4q3yp+*M1Z8Gtj+1OM}k|y=cM(m}tm$P$~ z20Kly`dGZlO06Ff8f1lB7{ax)w{AS!$5cosBr#o>Y~E0&K3(axes|g}CCt&uR32$R zHYRWO-IJfHk{|WURYUZJRD;br{NY4a)(l8iOq=JN>=$gjMvAz2jt%ASOOE3Z7_};6 zM>!0rwAHhC<7O}CDmP4=rD|unOldm*#(!EV-@TK{zmv+VU0(9rew@y!Ehv79gMKre zGMfjXHU?ciE%^MfdCrfZHBR|}pFa$@S$#Kd+{^oMsHTnZ=<>}NwmN#Z+v-PzNm61q zU+~iG`zOlX9~vX=3-OxtClF2k5;Rc}WD6L``zQoPk3Zy%820ZFYCYI&%;(XLOZAbt zV~z^&7?^H1p&Lw0x{QV9>Ek~1qMgN0=mjnBFrLZKJEbTl^(?lr)T+T~6l2iY6M4fA z_cHocjL)t_2?+-7{YR18V88DfnL6%F>=3e-RRtMHNFnDH|@qn$zf%?G02 zPJiqEyg%15Ue-ntNEj#pdwbok9;P63=KFLuIjWD}eJ_=QIG(4b0`KcWk=ozSdHeIt zxmY+|v6GDU=jX*}G%H}}1hehy4Ixip5(&?lSlTp>{bgkA&Y8D71J^jcLeyh*pw6l6 z$PK@!M#LCMd$0H6klHGD0TrSQ)dUvb4rWCDVHth=KC>z8O7yb~DSH_&$qG>m>DSjw z)J4@GG8D@#n-WfhlED*fFf$}IS|RpAA7_K2;YJO_1x0FU9(zLrzvo5L z7Z7Oz6d$%=IBAXC@GcNAIGqD0#{*g}?b`5_TA8<_tYFi^9o-$Xodl0eT45TkD;((x zmOmyYV7pU0M9V&6S;dqYZ7TVnI~q;Y4UY}tsF!rmrw=b*L6tKF)GqEojgkwr(<%Mx zhp&a5p$p^{+`_-vb}Y{xQosT~v?uYXqw%>mJ6EX?6KIg^%iVyB<(y`5-q0{%iW)U1 z%+Fv$3YD!KVkiPDdRGsq-^`T+Zn^^aPMI{iS z`SCvv--!Y&&S4$Dw`U?wexDG*QL9K2_s*3sS+q8wNd3AU&<;GO9-Fr%i9!_Asi9kA5k+yU*!{)zc@(jAS=q&04xG!iO*$C2cauT}+vyZu;)zI9`HvYdVvvHWYCu17a1aXh{G%V=u_(~-8r*w83vaZ#U&{h z#qVG}F~->bKE}qy9-m8tL~naQ3id)jjpzJuX?Jkh@l#Nbq6IAY@ozts_s895I;*2Q zvU7{2q*&!ci6 zb_KNIP&3ME#K|U88uVxOu2 z5tL8@<+xdEz9s+dXsUsYD>x|Glr{=LXhb1Z;xP?}nL)WA+^X>FHL6hhAB9-j_&<0D zB;Ut^<%^u`Y1e|RHetG6HIMZa>fh6j}dYSjZ1Ns^9*8uMK}avE+&^tWH~juX(uUP1bOQ;t*X=s%v3>(tO^=YPvm4(R+(!C@ zjow4s43TU44332v2(rs=@_YFGNZg6lXS0plY`VhoD60KR;}6$~Lfxik7ni?x;H!%n zp+#?Z0hGYmS{6^{Qyj2^u1>I?w>$5wkaF_YAPbbw`lAV>UoRJajHT6a;iTH#4rA^< zU$>0O@B3f~?k`e9GPxi}NV`E>n3nt}7oW<(vd@_Cy;on22(d<6KIKO{GnSojF%hT^ z_57mV3Jt3lanQ0~{B1QC!ZsFrp{*WNKTDz0ovEw*O`Mm46icYH+@YnodbgG&x!5b5 zmT#AooB&^>JFi9?LY7Vd$%$S733A0uk>Vy9b`T+Hm;uRl7dY z^S>FR7c5&ym`tItOgKg6ENIp_*U{E-sAhKo5B+UAwt9N{BM(0_aDReHjZuQWG|0!0 z9!&uaTX&$o{EJ1RVn%!`JN? z&VMSv;dv!FiYM`l$Ldp9TH5f;x*?bI0lCu)dmAw`ZOPMG^wRcu@w`sCTY3+xrWjT} z&)tSau#-h$p>@rh4+`?4fN3e4ReluxWudlu3%*FWa?xPk&X9m*0kTF$)4;MYx9?vJkJ!?fH@Se zYF>TMgB6Cj4#H+OQWM3NRZ|`}qCl#DQy_3vMmrn!n;Rb-v@{;O!HSctTe>Q!sgG^L zKMYkaKQIipJG>X$ga2=;=`d0{x7Po~DKc^(GfFWgYR!qy4T^-dGU0P)_92Z_Zve!p z>$I|)oBn?FmVGv=*-0D9!k+rvGw7L0LoON{LG_PF36CJ+d;G#H_^V#{J|6VLZ1%&O zw>5PAZiN|w!P`EiGgH%MtaulvzD+gb&3Zy@X#dkKUY4I=TrN{0nrNU#^v)eQ`L4sO z$^L&*q4N`6b3kinyV-@F0w1FZe2iu3UiJeP)z!ah^nEnE=I&_6ACxK^nyy zaY~NHeO%`Bb8kYFrvM}sh5iwJdTt7Q9!A|$rFq7lV+l%$GQGHk^@@{FqBgxy&K+)! z`B0nY&6AFLQxS@+B2WekHs11Hm*R?Hb%Ko4!|+>T|5rys<$GhgP(e9XERYNU8bjOp zhGI&V!V>CDuc14qLU0*r@(t-4uY<-Io2437U*1n^!01t2@MEU#T%U+S31*KrHvKTg z=Nerld_3emf<*H_eUinqV3md+A)H+u>izWgx%q}041rH$$}WetsFtvC=?QBrLhRaY zIDy73?-#WSTnL>th+*T?Tx}Wu>PM)2_m`KVNt&AvWz;DewJ$g%k7w7Q&Bm35|WLmNHaxVUDN2opse7Kw9peF<$nO<0Ecu7Z<<(h(MnMUDHOWsGM3d>t+$ zyE;6JdV`Pp~r1P6J_m$)J>-`=7tl`MxDor6au2cy$;IHx&=m!j^QGq$8v~} zCLq{4$Z(+ci9ec!ti5IiM^s0qVXDm2w0!p%a)GS9@$63XfC%+gWgj`F>idAkFO)ym zv6HLta~wv3iv z9)H47xI^`GyxG|;)&$I<8B+?qYmy%RYNhhEpLgG9I*_FW#3!eD2qqqe!|<3txRJ2V zFgoSz5v$~DwZ_TqyYt=m(Fn*!NWli1gw_{rP}axn>BQ`&V0ACn-BAf&3!=8DGUDkTN48}%vp2}_Z zTNAl}yH%Qb4?5iCV5(Xvo}@DX|=z|r}Y<*{UYh{xm-iEb8d zHT84lE{_o0ErSi!g&Px7{yO;P>2d4mcHgZntSXr2gR}mveVjN&!&ZN*C$qd`?DmXj zG-u+Ivic+OGpJUY5*j2m8v#8Fcc9Gw5ZNq7PTIFAB@P~BtfNc1Nphavkp=8SZ$T~8 zVRq-mDhU)^mKQ(xj`g(MJ?Yz^HPqiQi>fM2-V?(qFkj=B)Tq?HOuI{8*L~oj_iQ>* zlVddBJq3fmD8o?HA)Ok^;a6`^-|5U`HB-&`ns57kxYpHI!=lK$)OK&=AJRDD+Bsbj)s*jkjg_}Q!5AM`clzolzV}DCZuMGf zSlxm_tx@PL+_7oQYL3HCEA2DkB?DsS{hf~5Gcq`m(!2ySrlXE1b-Ap*rhfsjo${GV zC5R1WiFxI?AJm&irJz+Rl=FY?44I~ z>)BwR4|;zXy>bX)_8NgWIaJY5yTkrd=mU||h0vjNlLcbvhS8*IlypQ1+` zpVHUxqWeE2+cKUpH|b|5PrcM1=|AO&spdo@ltL#GKU+i~_YYCsvd0~gS9D&bAegfC zJlbL?N1)Ij!_|#oe;H)Xobfl(`=wn~tU6C~X4Z<7kJZ;Yt_g9BlXyR$B#(W@xm6*? zyHiU^*R5Tq(IFXurfceVN)bCw`QbvdtbtfHr~QmVAeLD*cY&AHPvU`)tMuqxhNyew z;EDO^`|S!04gIm!@A)Z2Qz>VPE*+1f{898tw)OpKP|jIlC=R)cS?jaZLIbm>iZ_Cv!x~3O6sk2~qYXEAvYV9*xSVcV>E5DI7RQ`GS&I!N$IXo$bDIwC_DTibo`5pn3z{lB%r&H zpJW}cnr3J4ZR{O~0ELY(>oKQk*Xu4A(g|--b>JpEaRS!Wc0YZm{Ac@J;Q; zt138fhqK@yUZjfO(Iq zf}utW*f>2wUZWTFprojkznYiVS+q1q? zkaPD<;vljy$@DgM9mTa)d%rgpac#Fxw_SjrJbb&@-CEaM&RVNi-_Xn0Q)!UZufnMI zz)mZv@PHG^*ChKRTV`_c1Wi)m#RR;uPhClK_aE~T22M1G0t(el(M<8IYH54KM*yi0 zc=VL#QvmpvnR5LnC@epjJt!1+x#{ZrbOyMu zNqw1pbOGWz^J5eC1-XSnF9P(FOw;{O9dJmw1Tg&!uVZ~^hc%aYi}(iK_bQNU>C>2K{!z!emaV)r=2tx5u*Sc}U}Tg{bMxKzIJXaZI2z^$5+BEvamO8_ zf^%&ib$St{*?<=c%{A2^RRSa+ewqsO=lZoIAb53~YF9r=vNsMwCtdPW9gAPaZJb{gts~+JfBlG~}62me&?-OKsz1lX z)feD$+0UroOW=KmX612EIa!>2xkGxbVu%+7W%Ykc7rl) zk|qZy+S0-7z+;%U(Fo5;f1|;=-G^QoaD62+n@{Le%?s}N?!4Ti1%xT&E*$oIeM`fW zy@KpW}uNGVhllDS`%h z>zQ8nV(rdjX*_2}vFE+++$=C*3iXPkDSs_=&aB_#=3ywdqk!fKJ5W)pefo&CWHHqj z+&cK=UWS^eO0j3$Zum-qJU~{eDj&$m!Z5D*U^?Xi7#Y%Bq|>=x6v;=fDStV}%-X4Q z>i(pNI+i0>%(8#8rqoRD%VCc<&SOV3HwX>Xn@==8Q%`cK1+PKc2Dxk;tKUru@Ur&q zx55{IYpkkf)lzclTe_b8Pkr&(JMGqm71SyP4mRcf_SJ@WNxy$z#Ez4o+z#Rr*bt@}8&o1AD~@72YgapLOL5gvF)I`(EnPJ$%a+FBUY@2b2g)w!K`jeEh6+*ATOl|; zL;yo3m{QO3dnOZU2U~xZiFf}dSn|39l@u#YyFLN^=9HVx&VZ(rRoWBeTv&pkDiq^m zEqc&CK5r$8_D*xU&}>4jde7j< z;@Kb8>Tg}nPQI-F_?V|VJ$+lX<`d7%TXZ|0Axw-$H0q8vRl{B<>iVwxQ^MDCor2yE^RP|tG3xU=#X zv#oc#(q{?Fo;Nox-S(r7V3*U1jHYOAnFis48BMF9WDubx3O0xCc&>-UgS9)Di zDQDR(dhMyiZ=0@J+xDVtEClN4ls}AriKEmiE&S1Gn2Spsvb;b;+~4fQ6j~)`lUPj| zU1l9~=00Vqyt!L|R>BDWaV&}{-+fv+A#q^b!fLyudRF@Bfc9^G?|bVAS!rakagY~O zdxt@SdWqE+@n4hxbp5x%dxl6u>(QbFyM^&j;jR!?pOSbj&v{{2q&r%2;dlbik!#&a zY)OOT+Z!D4$8eNdXH6lHmhW;HznmO(6b3L7J?O}I zdxcwDlTn6C`%s$cCqvxxYMbymL0qABr~~oY+Gi4<-ps5??#tI6`G(*&&08MuHyz0( z++JvJ5)5+F&-Ct$Q58bpj)R#~wMOx` zmTa?ZlGZ!oC;pkC_HAXH(+0(^ylDCR>r2-KbgGXP;rMXL^WY=w3AiR{tH6Aw1Ro&P z9)Vw%mr98)ayv}?n0o0%s9R!b|ETPKeXBCBYbCg7x#XxDf!UJO$&AiSkBC4d>-pB* zlUNZkuvSI!MeVw5QN2)kDE$|eipVw$eScmn*z?#>VC`PXz{)ywkinh7sX9s9L;L+} zODHKte_(5K{2C30-izX|5?;riZU|0-$G3=9NL2{7M)ztQ@#+)~LSp`_-{WGFtcOOj zhI~n3a;>599fwPy6Z>)KDP-3t#E8acwfyPfTyVzkjV40SV$5Qy3c_y0k=m_INkW|T zgLOJF7A-#}4ElK&uKF$5PhP#`5MFn+#!6x|yrn_y%}kIKP8gSz!~i(bpBabyXqv$S zBd|esLb=T)=qQZ>#O2+tE3P%l5(EK?qp5BpL^taMue1D;18+7&KFL|=gVCTFMdqE@?IAXmsBro- zjM~8yTFpuk72H3f{ZlgRsGeo=H_=74OrO!xw(gXdxRBqX1LRbu~X! zdlttp5|r@508v)%kcBXJTKC``kjSo=lW~l*`WeCX+HPG$eD59 zb*x?2tSl>f#pOUON_!xUa4(J^*xfm;Up~_rGXPoUDI}&&5|p$}OjWDk5OAk&1ul$% zm;qzYzJhh6-0 zw)~e}q>xZmcpE&Vz-`6(_=%&DJ&*{Md%pB=eK1H*b2C+Q2P3TX>=M)F3Y1KYJg| z0uX^r7D6l3`S631@^QJuoKGOJZjFPSs+nx+-P+dT+@Q4I7?{6=H$ber11Sed@JcgdD@9ZlroOqhi#!&i13bpPlM9v6 z$SiT}{&%h_4g|eE&d(|9^EekTlWHxyhY@==WGJbI(vH}|sOA`#0XYd#$ceFIdQ%6O{`q7Y{41f@V(YdL&+Jy9fz1rVjX-j-Qnl_34VQO>1Eq#ZiuD48e7$Mda{F;9vCclK1z=iDsI*$X~CljS$ zQ!qq9!wrQw?S-F^ANN$wc*1|E0GpjnSHMLd;1H+qAZ}m^f zap~;JnIle1WDeZ8lr2AsBXZEEVl(X{o;$9SvVW*Dd6C$D)O|s-XS+kol!1BtV8PlV zx8AX@%_p!EgCb70B4;R|Ng*srB%n;UCUk4(y;hAFwFIu4KEZ@S=MZTe6YbVz% zXAchbjD3xsLex8UIpwA19dA%e+NOQ2sT8?XLF%2OKn?y9rb z8*lpXO5q`C))((B*KHDM9skMp4?}$`Z!e| zqkSGy4U#omicLICCC4-;pBsmEFL0D_9q>aVe#1iBha|DllB74Fy)nY`s5d;2DfC|* za4bc%1j2yj(b3kCw|&!}ArLD3HKHY4t>oPFbkNo(No(>V0VM5g!t9an2B85GCDpkt z8k0Up-zYS1$&NQUn4#bE5MZp3Tb$hw%OhD^e38_}>=#-8;p$6hk@46MCV`%ZLj zmqTuq0}O`ujGeM=nK}bd%4{@^L zZ;6W~mzJngk5^z0gBKkVk^)pMDk9KfeFYVQlhiD3+@;_I1vskME<;Ge># z7~)0meh)uZ(Zlak5rvBI}&blw^rt}^4i!`;Z_7l3u|}&_97GbnL?e;=R+T? z^~*W{W?^VVu9e5?{}kp2#}$E`E@ zsbvY_#Tl$dMG`Zzh<)7mmlp!cW^k#CiWX_rkCwM=(K|P-9y!q~9%0%&K;M_$W%Gp} zPwO{0zJyW`YDdgUMF{?;(rU1 zgKJ}9wn@F!n&WR?ySJgX{JDO^kGz??#-VEO!lYsJ#SWCjYQ*ZVgijUdGGW%!T0;E+ z7#|;c1zYO7xh^qdYjZ6zS|L>w#IM zR(u5#&k!n5SrcnA$?qeZ;U~aZyxbSS>R%~6tba`#R8a_QL~|?#YLG25(CwlcM~Yxg zyC+`CqFDiQ*t*O~pX%PF89Qy*&q*(pW2#N64br~A5g-5D^X6;l_`FsG#$|K4)vm$M<@$#0V!!tmA@n_b0O^H7ctqK_hW@+0ofA2!1HZ8j; z0nu}41UQLS5vrJxw9`jwg#JL!T>n`mmo$aHL{-V8LG?Rz^n zZb%QV&{P#sJrLg5V3fr~3-xi3VC)>!BV)HJhFqaanH32%j<|~`0E=C}gX@9fcaL0P z556GA(Imd@W2QH$ObJT%($bEfjr z?T@f$WSABl=AG4KjVoqOYudFbZdB$a`CcMD(GW^)zgnV64IqH;d&IUdq((^Ju`HtLz|pV;BwS##Gw&`O9u#i+!Xr3}T^LExcG1=r4|5f9mukR` zO3c=l2AIB&-%E7~JZ&b`66;4LCYIBUPu1`5zB=c?qa-G$U(Y+{Gcf5p+u2`Bt*oC^ z$wjHy6%y1n6wsV@t7;TqdO!&6IGt|kH71*T<=D<7!A9PxJ<~gl_@qn|W>f9c``*vR zNK=JQGul_o`n6mg?bvN`cKW8(Nx8W6(Cmx~5u)bk7*J8alQt09VCu?itGozWEZT6!+ld{nmQ%*j=Imw35?=e$@aUl&3!%+j{IsyQ9VRa_D=UGbE%!T<&;6qLhXO|so2zoJa994Jni0fV-#Rt{h zw*d=|weRUqAB*d#!$<2#N)m_9W>op-`szr?(HCpJ4wbBFkW3b2n*e7{w}UZ9j}WnQIMzGl5dy4`a=|MQtJW7MUNY! z4^bcF^ld(79}zk`l*+;E4rmZ93!p)iO(Zl(bKR)0zgmOH%$RKG2dLAs)-5SuCQ>#U z90_tb5TY<}OiBh&$Wv|u=}J`%IUd`eR2;Kc)lwE&h;W3EYM`~Ke9zsv&}}i^8ZRpkO&lL7D1J2?d)CFu|RUdRpok6r+&=S#<}(>lc%K zGzd3x=(o6##IP`MQg>!Dx^5G18?o$ru#N+lfZrvSDA+`d9B7Pnn^%&R<`qt@XXMgQ znahnW9@uU@X(lo=oZ2*h%)aC!d$N37gOAkdwvS00a{Mp3NH9oWbz~&;#S*UZw zGa3}%<3)Qnr0l?6KCT#77TW}Tkesb?ci7OM*;=!2<2BX@AX!aSKNY*oF?fByq z(l?IM6UFGxea(@yE_Qc#_o}bgBg%2hxi_Mtugao~d!AftiA`_W!>&MEVhJ^M6OGDZ z)r`(ujzoHw;|Lv48c8tmfwTC}=yl0)?z!&FWQrKQAV4Q~EgQYO2ucC>G*Mi%bf5Tx zeKXw)4)>WF;V z_N&S5NYKB~QW7lzbdQ##@GguR)j!~UjHFTe)2hS%=K-}8CQN4z^$R@??^PNu<}7w9sb zJ3Z*JO)jjltvsZZOm#@dg)-}nHzp+G?wAOhHsJjBU)XYPx7c;wGy%?hKXxI1ZJLI{ zDF@G3`+%!T#GO@Wo9k%A!F=r|bAME}g8TDr5RiWV$8#;$SGv+C9|KuWMx|8B{w*Cg^hIW}gs3Ub3hSFX}8^IFJ zSw4u^Cpl2MRa=mqV6zzsGuVC~0&@3CYYQm(v%ao!xRSHg(CN|Mqdr_l^Hg3Cl3j$z(@m8g4J zQ+=bJBuec_wQSRBFA6;P^@|1LJ`919=mYHH;=c3OZ3p|HDPV^KT#Utn7lkI8RLagl zYlRX{sva9pq#*CGpVYp{_>|NR?$prDWnKr)++y?|=8p@0EZA@?>K%j3e2EtlTwmoX zwNlD?TZp$#-tk^LH>rItje|8+M`mQGv~V0DF2}kJHcXUe8>?mPnX7hq_p-0m0CUo^ zFsUr_sgXeVz>VN|yx0k`ebIruZ9E_z9#%!eMztMOFPl09R})6oWxmstO3! zu1Vg?%zcH#z_kXl6qZ0VxW!b+)F4BMl}vSOZIBsme+c;pzzn>$UL8!eH_*G77&Ii) z3*zmEa$oBkJ3l&EDvWpwo(lX@>is34A9>S}-kDb6u`Wy(pOYCe}7Exm2Op&Gj} zIJEg;=xDzE+VCr4nQ)I)sq^<#j!n-Gk%ewi%_3{?-9OgiV(`Q3f+1pU5Kn_*^=>SO zz)NN8H*3>nrd**uXW%DgY}#CTp+B&X^YRzmhSRd#a@=UzGuGl4ln*rJ??8W$Z*IvZ zwPAbaj>JJ1{$>$?la{>jeUX#qBH=CdwM&d2h8#&jG&J53-)g7vuw~D*g_q|oU2^y0 z$j%{2T=Z>b>-BgTwYQcm6#kXvo+G5R=Q z!K}>pc9DS@iw~zyMNE-3Y}`*2n_FUKPtJGaN%#>B3{l)Hzi+h*y=17%RV3+52c-Oz zHPi3hwY^pC^^Z6F|Enqh#Y1X&f`ZONf}v1G_eN#xl4~%y;@|h+hnp{Z|K}&KTosME zSvA|P^voJuvtxbgu%{ts$0F19KGW?-i)1-ur}p1Ny7v#H7~0<;7i8&B zj=RwHQp8kw&fn4A-i#8dr4)fXiV9Zf_*qNo3M)nctKT3u#0Yx*G6vyh&tTaM-u+#{pN5`2};=h!${INp-6dGb32M3Y1B#IAA#m7|N z%_JH)(_I^f8b)w)Zk+EVTd50LOX|yEx!UjfwQv`yR(6;1;Bs!>p?;X7`87_SO%S1OjA`x}x*Y3IT%PWr!+I14M?PwEd3?X`K@eJ7Mz9 zlIZ_-)L&kF3tlrl>bHV#L>3{)G(ime`9F6FlGa(spDL^+(mcDLSZP#0Ko^!O-bhBMS^eU?wV`LnLG z1*t>{08ZNKQzI$aBrH+#pg1%uI;t44w&qpQS{B+ygXGPkS5w89LQM?c)&bG_z;;T@v+njVAO~uO~haOAV_+>+|+-% z?t!Kl=RKrz$N#Ygen}w$SK1Bce@P`|U!RCg?iq3W-)hVg9iSF!u9D|w7xaLlmLF+dp>M*nwttxSSzhwTjTbO`-2AE5-oIR>xNvQnr0hv+HDV$L>4P+; zx-52|ZYH;v3L8z|Bz#;^8GyiI!-M|64;8}B9-M75#hnwtSvTEo!%1LcmMcti#K#FnG#|(jsC<42Bzfo>-%1YdePFmL<+}|q;3g6 z*8K3S*Ps-Wk1jtG99twf{9~o}pF2(^Wuy2ta;EQY7-_D-6iC?M$dQ`tr?58WpAA!; z{@UwcS&+9liA-`)2P8Q>pYM7jAyyFkwEP&Nd7*Nupndshz*T@8zz&qsYKQS>zyTeq zNLodkt0T?6-dT6>Q%(qc+$E%Z*nH)T|D}8w_`W#t4f-9^y0T7(b*kQ;;of|77M}v8 z_9xs&fbd$-o0YEfe}Cels^cAQ{lHc5rsnd^3Ac|!^uZ#D{hvdh?1b_Pu%gqt%$_UV zej=KXQ;k~f%adeNV#`tMS^c92h~{dJ&=o?re~!)GlFtAf1xmzG2t1{?vQfQADQEWU zKROED>*t3*2bql*dVlHD3$Cx`?6A=G#=qDLDih&y)2H2_U6HXCQbVFYXBT|IM)ee6 zhQiOpnF2T3TKsML>TXC&&v7zAz;=(-)&x!sseh}ecnLj*+9LPAy{@#_G^Xb|4r7Y7 z81J9LKOg>9MHvAH_kWj!U%Q1=aq{ga6{+8YlALlV$(g$Ruy!hu*4{>n_J5SqYRMV# z?CFn@<3cvL^t}!pLB&V^CqdmltgU4?)~!8H00(}u$wUvvZ8#|+=KO!tw?TPvNn9Jk zHKB68+A!SV@Lp|{2-2i|x!2sX@c*TK3CZgJ+PM$4r@iq z85d<5dSPsahLx+B`N)ZXl5yf0;-crO#*6yTiqC$3mVC4D4E@k6XkvR2lSI zo^Y&xj$Ie!osls7;f>iWeN2s*aSmD!=_>R;J?7}d$ot_|O1>{*#!G_w-?|z?=eDoo z7XpLcKLPSN;v&S8np{YOYCyLs9yRNAX4I?fQ__Xz5>ANKd;{*H%StzC>A$;+fAkMF zomnqAH-3xIGDIK4I@Ro`VvGNwNm4lg{Ojs29{|jK_vV3AciaDXkH}P}3?(8Fg{a7sp(IL$2$@qM zbLLqmp~#db$y^ySCYgsw8jNMid?K0WnZs|r&-)yCp46N}?#q6p21tnhWu4(! z@7V!x+8nM@(EaBtqO3}N)?-2K$;!Z4x5v;)&o^z}W@M86A-HFEL4%%q1~!nW4QF6@ zB^NY}{S!c2MFJhwSh{dMC*2;;4mbNng;);%pO#?}(xjDVCmEYv}N( z4o<++!|F>&JAT+H1)VlBMa;$OpMff#@5vaHoKlsX(v`g6P1iAa+f^**?6eD7sUf!e z_NA}r)K2(l*$KSS{Ud525L!mA$XlV9So_ks9kgnz+u8@Rg6wwC-J}S=R^Q*f&acdP z>G@ki)|mQN9kCVw-7!Ef7*ZJ-DfZwZ=VQg~A1Cm3n|YwtS{|B^A?FiTcKdxkGvs_X z{&~KCr)FdM*5R(D;cH*Uw${lmi*qB)f%vXF{*ycXv+sJ1L}+cyD9>p$a7Lw0X3;lL6M6GVI!p${4PO-`Re;p>l!33FxHG9k3 z>pS~j-X=#XVl4G!NBBawR7WsVYEW_)UgR#+;C7>{|Q0Jyt&>o zF4DP!(ELWgh}>G?X4wUZ8?;l7B&<(W#8e`1OUpl_VwAy+Fk-YtEC&q=?sqw&QF}d! zbB_}#g@6LE#tU(NxAm7~+6ZR7u=Af_3vrz*RVu#Q!xO(1T6g6gJSO6`_J3RleO6o= z)8)80RalX&B2!Stp2rR;DQJOXyuUUen#c^K%z&|SdHoA24)^yb=nEM>Rk}E;i(Ptb z`0_C~JhL={_GFlM;0Wy)Srmi*ZRo-nJLH%T{{^`Leg3Cv49@y9J)_XM%RW0UxsO+Z zid%x=JuUPL2IF$5b=n5tF9PrW+jpbH$cu(d=IOSxo)eBn<_=f+jupU|R3<%WHBpK{ ze(m>IVO4Z7IWb_}A54FM{0ORdK(*&HFTm2>9=x7SQO;fTbJDqm6;uboCU?VEm#j_& zA)qaOwb)%qoD=ZRIOh*J3vN}#o+dFGU&QY&b|CccYI2Q$=A{GbKr@*r?TU3~xr0DF zKa>ssXkIgwNX9*Fxt=X8=(){SY0@fO&Z3}IhkYByAIz-rp&$U%>A{mD^=4IvGi zOI?4;Elhn8`bHD|bem@C({0*-y%-6D653+l6@*WeAh#KtgP@L7^#8!GP(e6}L8{K4 zNw~|58bMrW8nXHOn>(F(qJNPDLg<_IWNC~zJBl+?14&q$p8BUhgg&wSSKuINFM_U# zJM?M04F)jH-!`2aOPxO40=B{*j^-(z?DxB;6XM&P+wo7LfoS~Mc^INv>3^78K09p4 zPCnJQJ><5#R$9{Xg%;=+rHHI865+QFq11~4X9PKKqZh|m5>LfHeGFX^ zH89dPYo2)yxapT~Gi->$`xl8cw1~}u*)Pr=P2p`m7c?@BRZZH&*NrH}*1WR8?>4VZ zi3<5ILt4M?7!sjkH%^bq%2@|nh)CHqy9-~-lACKF{j^tXf5cS0(mL-qEM~2`&fj2X zHG5VI$F{9?*RDk?Ad`2wV;`>{j3D#M@;#lj=Wl=Gh*6HrUn`l#Vyxx`gFZMMzgc#R za>XXmfKpa=T65tr^v2v#uxmZfA#e%PUSWk4lVQEPm&PAkhMc<&bwB%$yioalP*i$f zl+7##VtcT6XPy?0m+*V^4(h+BpxYsgSz9hA$9hYyuF+qGiP!xmcKS6Z?vyV@2%zRmRNY|R6j-VXo}FgfK%rloBXCdo+_Y*IikhcgV(ScZl4H!wn_HN8I{5C z_LU0@HeI+n>^Gs(9hqUf)(5;HeGtZqM&~9fgM=z%rDqb6uC&?(h^Iw%l82~a5g}h% z*Zl)%+QWQMEKQz-RFZkY(kVAU%hWmTqgQlW_TE&T{Gwh-0|*kc$?miBdpS+Lu$`Lz zQnUNc*zXNj%NzY1{Zg(nzML?D!z%VqnhWjU4zA9@4L`Yqg4hDyA(hZ%60;-sIKz&U zn2K?)9ku79RQ$cVN0xEN$LEjhZTWDP(_`vq&IE@_3ES#)zO%JCcl(~@^~4fqy$y+& z32k}d9pA}P$J}?D;q)OFC)Dx*q}I5{9GPCtguC? z=bK7~AEZdnDHeGwb~@4Sip>|(fTdN8M$((GSwDx%ukfF$c=Ua3G;tXuxKr#Rez-46 z0}Kx|%*Z0;RZu2%Ql*O?yu!z`d|cDSViS`u#+v-WWOJVF?WV18zK-QyQQ8h~c0 zC*DBh%nUjvTt;W%5{xCXy666hRlpEGeN!K7Jz71ck=+}Y<|%RBho~9^co54Yvday* zQ+)cyLHPpvKjhZvG$k?ZZ8JAB6U~14=jWfwDT*}&#X-6RRxiHWq|pVT4>DptlV$_Y zAw~^T!UU$k?1`jUcyL`hlc!Y87JRxLY~LQ(0guQ|9sCZ`fiw<57xrw}!K2qi80D=v z3Zv+J9vuqWggHoAtyjc0$KkPNB3h{FK&gqJ0ft zHB!N*6ij-?YeeTztHrwk0;6wRDzedGAd1}HmPw2%JNEbW`>eDrD-c!%@eMC%cUM#=;e?AP432GptuY?zmH$u zwZbpfiy_AI$ipq`#*@I{Z{S$IvqWTSpm;rdWa9wYBdAo1boW*#kVG0h)PX~pQ|qc0 z{iEzF9gybh6LNh5&)@_Rgs#FLdSv)?Kpcq_V6N`YY(UIPnH*4b>wA%1kdOP@I-$rN zL6!5qk+#K6$V3eMVwi(eY>}O5Ki-d|GkvO?ON*?4roj5C>5TYqYqJ4=Ro-ykIN%9? zZSM8uz%Wt6ge6%H{Cm5pmU3#wX%)YQQS{*gF>HmdjiFXK@m$2?!Z6 z7;qSOBn=+bChh^5xq&=@K>VOhgrbXgmBMx;n-5OBYxp$Lker=N^a&iw6t)s)Y}QL- z=6P4?&PPX|p_UQx@@_4e8)$j&Fc+zQg}VJ_ zAw6g2Rnn3?FX@%Bpb9KBru-WH3|D;h<*B{sapX8Cil)c>vDJ->4%|{4(Vgs;jblch z!fAf^;{b2&Sm4=&=XX3&%Z!jK_;73&52k=5(WF#iv1=rEe|8Lbaa;K{JJjcYrvD!O zNrzyWFpfg2kW8k;;@DQ&G!sCjf%>e7v@GlwLFbF2+%yCWH>%lf!@Of~86KUl@QwH~ z7^|r0SDqmCmX`Tu15xattl-0{bHz{onCA~;pv=a0JcSAE@{GvbWzd?;&F!5i2cQ?t z{WlfNe0_Jvqp}MO$UqqwEVEkk2%bhWWI_!fftteJFhEL{QKoRoRi`IE(Fxkj=Uc2+ z7Tw4Hy8u0+mJZXyd;;PZ&_9?BdTxp}@_w6bl!qrOSz3^`ooCj%`%K%{>bi=_ zTO2#*;|x7Yw~JP4upmR*Lo7NA4lBV`|b%yyu@e{ZLYqYCdZ- z;>6g(UYL9(WLEJ)Zq)Um6h}{sL}xeMpd;#4-|j`ddjFP7p*fK8Bo*oYTcm%Hc$AKP z*KO;0_u;Qh+FA=)8TT!FDO=ssx|ddt?*IPlOODexg;@8SsI5dPEMp)&s9(TVGGG2> zGMwK66A+U|#;=EGu-L7jJFX4HixR|}AVd%dGv9Gay#v5gy8C#EsAX4UZr|iFB?3v4 zQpyICk6;yris^+)Z7K>T)aSblE>aC61Gg~u!4y15jeE3yVT6ki5t{hQPhOsUcRvS- zh{`WYf(Vw~E1TS&SPqkf+1I9nbeAfka>rkw-#vpg6AC!014mxpS0LrH9Wh(O!^b_% z3a-V<&e+T)Hn1F-wkNsBAnrcqvG9eXm^od)kXgvRCHP(D+M~Dw^xB96f-qd{HB80c zaX+kl!lbyoRIZ<=yK~O5mw(}TQEoTHtW))58wpW=0~6MeWozrwhg6#XHsOiU_7ev$j5UN&!lnov_a5dIgIO zGG(NOxl&bS8cg!N#1V>C0|W9ga*kx@gH`-Wy=K#P-o)i3_&ANe337Dorr<}KCBhxN zrZ@}T=*cw_EJmL;VQp4sqAu;WM*#=E+YsCAX?w2p`=-$=izKlrmS*jem>R2oAbU}Y z;W@CI^&_K$gwM&vkp>sLA1?ChvDM4gFQsadtVAwBZVPCEtx5#atTPX33a_g7sfCy4 zc9pAi;4njbv|*$J{$Dv0$|7xoZZ{-cne248>DuW;YxQN}c{_UiRZv<}-Fu0nx7U}G z2Jl^Gm)C+;MqPDLn$x}d(cG>MpEGBP@2)qdj%xXrigtF*MH6v+f`_zK#)X8|EZ-o>8z_1_|7!ty?epFJ{9A*Ac5n+AGk)^QI_S2x=9VxHzsCOnOy#1`bYWQ+BB+5tc#WscGK^I6fNlRs{=^Su z8;DHO-%p=Zr1Bg%*skZy*x7^bM{bPlyh;?MtlMBvUM-))l9+dYdPhqt>I~MW!a~`` zV+8g_ej+xMq{_Vg>plqlyCr-0LQgoUHITXq+1hy=UYUJmQ^WWga{0FHtDVI{XUPah zhQT34o(tOIGqnvaPHR?;3HzSlJqJmsHf^|JynUTR2!C8-5I-!*OtUqlTHuq!k84Be zIfQ?xp(>iF;P8iL@b5!9Z?s1XyYz0Wp}~6LuQ${kM4}^C3A2IF$oJ&BNaNXU!Auy4Ds$IvWza*_&_$+cTlGk_K{;BWUiw2^NVJBx#6gzUPz`kVVM%u{k!Nufo?%)Y)_5Q5%g!WMHvy6A?XPr9d806)i2bPpW99YVY=% zv+3CW2)gDY{r{kj0EtoGq~!?zJ_qR#=)oeuOdWK3R(u1oKijf6P3xj!B8JAK=6o@` zjyk%T_Y#*cI56Q;>Lz`*v{bicEY9lkc#Tw{Wa%gT+2nFzp#ni`nGI{ZaoLV6EL5v; zw&&7_Q$6R^7v7JVqDBUF$T0VHEK*MzC&=cz)J>Y+9j9KAgR4mv$~zN&Q$k%-sJ_B{rMkCUioWaE!g&~p$FJ4w^eXR&K*p#J7LD|- zfg$H}_fPwm8TEI|8XLcZa<%cLW)Z5XE(PZ%)1t~qW$4g;0=LCp#H@{z%hLSnmYo`T zBrR2OuJCP+~kl5dFzRN8Yct!CS=?-26S%Flj*A zHU2=<+w;Gfg^6XyPIhW?e??<54l~V_YndJ-(sX%Fg72{b+j)6SOuFAXa&~wP*GMOQ zctE%xOh0M7ssdyBopj(+-@@_MmX1whh`S1Nyb*f4Y<`GuB1*W$qaa+C=f}9@VzWsy zIKpc^alw9(d=dewmjVPHzb<(4Qy z!Aos&+SKthk)a9IF$IvrZ(uSB|IN#s^%g{L%%I)N+i>)(5mK_@#sjWvr?7{agUJ$7 z?a*%B$sQlNZtz1{FiU&otOvSxjOE*V8=O%`EBFRdz^ZBGpZlkOLg%8=Gmy0%8{{)y z{UZ+t8u+cw!WZIR2Xdf@AuT4I{jb;W=sAn60~Zmdi$!pK>04q1VCA>pYc$e#(q%MA z9&tC1?0{%RdgOcYW*Q2#eg%uOcT zE%8gANxqrZ`nH&J=siouiRN#yDcaLvAjNuhaq8#Amsy12yHI$qu5MaEYv|@_(w~;I zc5t!B%H2)%?tWB8yg){#zEMBiKwJE#nV9k}v}gU8ZL4K!0Cmxnds#m(%}GRQMhhV{ zqSYY9rIoIi?0cY#!n7_rB(Ys}c|0_x=-1}*=*}`RJZbxo+arg$tX(F_%}qV8Ipxj@GOm`?nxtT5+D zO+v!)p^Rd&af(9!w=C9zR0N(4*gG+YO~BSmwQP4^#NYRU4?CbyxF&*oEN2$oDf+sVhcPhxb+I1tX|$5sGc^P4`AZg zoOvx`Pf)>ROyc(adV(4^I8PQ{RcI-2v?%uvETE@1xbJgKeMD{j7(*zt^4;vNiTNe70oG zd$;w@f%(L&sqVuNj%D5{TbyR8h_or*4t{QQzI{{5!^s9t9~rjERRRt7V@|~d(2jJo zJ6X1uqrMTHHuMiJ=idOg%JGn%I#pHv4jbl@CND)^QBo}bP&*eat*RF$mzHCjf0x8j zi#V~-HdgEJ*{@atb5Ec|$9`s4?H4dK~9pKVCve8|A~5Jt>J$& zah}fXbkEnHUvA_XkGy}Mdc&HvjoCWi)l~V4`x64GU*1$zIJErI99iq%h|5N|ZSw~| zZaGd45DpRPh{KVgLEEfrj zd6kbsTtM<*_7Q&Olq98T!Eodpl8C{i*F-}BRAf=T=q4oW<{&_$jhDSAL7wBI23fA* zo&0XydzkRokC~%}Bzp;SiVHuuqL)o<;{xWScHuJ$DM(11=B4{j)24a|Ga&zPz$`R8 z(FB+nB%&g^(k6E z_1W7*75>q;3_+tNM!y$oS+?cv>3GfCR%|SP5E97fnKB(Plj@1Rs+CQzv`n|;PtO%& zKM3NKIU2+9^tmY~z^RQ@Ad(YN*$hOFt*BXWGcL|MTX2HE!6lGe&gfCucl%$xo&52% z216NfQMwgfk8PKt6_>!H5S^qSk1}ucx}6{#C=xVM8|n4+i~@Xo3ThI<##fV|Dd-sW zGii63B1bckXQ`tD>fYPBS~J%>SC&4 z?%U)W9Ry7(fDmmPYE1CI3Piib^w2CDggcWI;~WxF^;aMSTQ$duEx*4O*Sqm8JxzH> z0};L#BQ{$um(-b96-1z*-015@dL)+8DudQveY^S* zCM))$JsuOA-R&;K9Y)pSB2epdi#k8ie^@sX0;i3P?GAJm8=DV}r2cXq-EnU-Gry*Q z;n%#~gwM9^7541c1BWfQBBCwK;1koRu;Z6#{n3ar%b%XG3v7QF-+uodnZ6VdH z2PBvFN|L-MC>00D4aQG@FxemssNrPP>{)0{c9{>LW;s}^BR_NeJYyy#n5-_hytKt{ zqMjOx6J%Ev7sl6crBEs2c~ro#WZ{r5xu0S=h-buwmUMmgc-6|6LA%`4N+eLPk_Y15 z1K*tjf5!o;(wObN;gFj#nmS*?3&drW1cxft9hkQ>`zUH>(9=sZ?nuT_X87dD4l?NzjF)ukher4s9dU7@r^o0{ITNk)Onvoy!j(LT^4?t0up9ke zym!?(m4I#H`!Lyb)cg)sk+~LtL2R{_B!M5N^PI3Bh)TeY{OOa%!R5-V3yA*rLt2jyjy)!q3uqeyq8+gnix8tVOS?Z>;g~ z>M8U_)4+nhIWXY5fxsxGF}9Omf7<3Tr;FP;SU&nN_45m;c!0VS(7fdV{)uE2&jTwN zYqO=ydTTh@7qT>4HbwY$P5S)E!ofC8RyyY$l z^J8;G-$ujsw>0nn3Ust+(fC>!j}L5FNg#hmK`Xmr`?B)@Lzu30KF_hq_uH|i-gBm} zFjpVquNz|2TTEnT_Zd)!7_Ys|^g-E5o;`cMa&`|B`1HpE@Z7h_)~rw4 z#k8+eB4lKDnwXu=+V!35wmsgPjoHr5hBp?)I2?XS*~rXgk`L^Ri{PFMqV>+;^8;YC`;5kBmI* zT8dnM>I16mAW{@U*(QRVj?>oM_yCRe+34tK$N8r^Wn5HRTboWWqk2iz0kbw`xT?HR z&QenU_3&=*mB|U+(pg=>Anaw7iDMmM`Q~jwL}v&wIe&pYqpIiT0WVtufj@e0R)V%N zN%O3M?9xk}GGoB9KSyW_BV>4>*wdiMv8|$_LQrTR!Ze!FdwzVi^HJ3yythKfndt!Q zzi4+wlgM~Ag&~3MGbUX+!y^}KN1_-U>>IYXs$!9v#Wc-xv`wch{;hlE`M&}`7jI`q z^maV8$8vi&&01f~O8CpiS>Oy@s`6VY7g{;7uuvtt+qx7t_p)k=@N@Mt@N;vQSnm@4 z|L{T8LEOd{-hw)y~c6`(SYLYr=njWwEV#? z;6$PQh7YFu!p8@mml>}9H1z9U2W;MZ%T`NDubGrq}?;V zRzEi(wAO&bwyb`S@zd&-Y>G5SEEa~0v}Cffbi0Aa?8${+hPdPV5^cN&v6+rW`Y+u( zQO!*;a~`y$^PI_V4?`|CkO=r3>m~TxET&?}n=pzu%AAr%jjzshieE*d>`N7MU}ZVz zUt6h`#p`!wfLuBNzJ(G)WZmQM?hN`=6~Sg@bkvfO+GiM)YI?>CZPa5BIVQ zyrt=?#~#?)eGu5)=`<@;!v8%H6NRYXd#}_s=*N!{U^Hu4qTo&1w zVMVVWDhCc4mP~cg@5x~o08M%H)$<$+O^6EgrM6VOzV>BGHJ!B!Fy@H^ply+?&1;9R zl6b}`gSQS;HiYQyw+gr^H;Av-2xeoaRy4f3pPwUcR)Pqe$(`dmsFWFhM_>KO zUnD`G1B+PD9X^8{{v3IAksu)G?(kG-B#pmv{Qk{K-@wNv5hn{Zw>CLtwqAnfJZ&}Q zO~^63zDGttYsHOvf>Q{Va~-^mZuK`Yfqx_q2)m7(1UZHn@mF>BmF1wzJ$~n~A22oS zY43W1kSx(oP`L6464N>1br2F=E%y0`0l-5|PblKUW{Kcur6btj^c>wVDOx8cMN%0|!U z{%S)2nF6!+d9Zf{qB*Vz)j1Q9pttv?0z=U&p(9j13V#LinPG>Dfa`t*)xf@x`Ah}9 zmMB(NkBs274vgH8jKM@h>SN}1=X3ZuzT0KVcaw$PECrs4OGqSkZG#B%ufQlNYk~JV z0Xol(6x5^=tw~6~0x7%Df)~~Eu%O*sQwp8~P_in4p>e?%7#khJAg`6O<)IM2wDX$Gm2O4%OCV=E18RD*aXmE$@Ep|Jy zrmE;ZL}9F}IphyHEE!T^6I{fR35lcfXR{r7*X&!fMn4GKR=h0F$Z4Slp>`y%R=Fux z2()bDxsJ#(c+oImf=&y0@3V1aEpg8h9 zm4S#4k-mh552YySKIX!umnVc)(%0O${<6%227PeK?97 z4K33_+Uz=aS8fpc`h$eBCGOqUgj}1x{4O*mc~4SRb>24tQK-U(OFFqu=h!mu1XEqg zwDv3BUMT-!kbZHH9_p`-VGe^yLcGCguAqstg5 zQYvvit7OFzsQma~UHQ7pAeXX(JL($y8r#KT_( z1~Vn+J0=F?m&>4wYbvX-LVuaOK+?2@Su5@?Km?7J%1A8* z<_!G2MoK61hQN`)l%eF9`Cv*3dVc{{_U*3$^(YFgd<%sTe7U`%u;pjsV%x87(>zJW z!6D1C+jVL&y#;BWF4R9FX{oS}F*Qjk0fj^l@It_y|40|_9OFqzybQT$QfA40SE2B1 zl75fcN8{19Cf5UnX*u9RK0MOm!}Bh{_r&%>=NaE$GHXUf!3HCG4S}KZLjBdVffssy zfJfeO>;Lz(|Part$yEKouT=8amy(90kI!%g|4JCvwvycS2 zbc;z1cWHe1y^cG*-9Y8DsLUfK6mZuhc-i{17KNb7e?V_}V5qw&Yp$sZ%`W%Bu3mh( zQN|^?uMhBJd-IM=Fa1`7_IJirZ!wtwUFxOBeUFDHt4#c3xEj)Zt0N&^5(WcTRMt+5 zdpJmPV|~n60{^>1U+wqA?wubs&-3}f%TXxhF@wcnrG(fhW4z{kC2AHc>Q+4R z?AJ!Fc-|KkO%Yo%z;#rPI*IbLq$Zhkr{M$H&rpo3wz^w)5AlY86-0>={&q*3#E!X9 z_8(|6!cIuo$vFP4Pvs|Juc4V|I*$RD;Gk#l6#&<%4yVI>Ks7VIe$*mm;RPxGZkH9^ zNw(QS$wqRf`#mQmxx)?$P@VJWZ6`M^iMq}6bzULP&um50hv}2fugzzMPLm&xUnb*! z>Xv5bIK74ghtz9k=5|V`N6{hgm*hlW)B$Q`<6m{`TQ4*QV}kU3D84Tygq-1x zd{1?RJ=RRnh<^0y4G4NAk^)4LXjSbD|4r=ZQ#f^@Z2*#=!qZRQICdnm6ITi)=5M4Z>GN*v)rHyk>{`+ z+iPu5lXXLuPR8#7OezE1y&oAVc;4iaoa^PUD`peQTV0-2yna$v*(v6U(34QoefN7M z?|Y|n$f})lqBDbeZnt@vU-3qidWi-1Erk7W%5Qr}t*KGCrim{&_zC4Hd^R>|>k|w? z{3XFH%-D>O>cKfAs-V#>k~-RDdtJz7`O)- z`0^T(JOLZ=N>+!XJV<=3i83&;#EAIA>vrc1m#~u^7tN)6F_O}z3SS=iwjJ6tP9|{F zsw4Cj6A&YXon3I>7d6glrcfT(0AJWWEshdxJ{VNd`Webo$)vwpFs2R+ShO^~gK3zb ztq$XP0{_Y|T`iJWh_cZMcP52$7!GoQV0PJ^;NTxN{aO>bWWFa5BYri^UpbSDR)669 zwkR6S>RkDgN2D}?cE9xbh6TVnjix#xW<;(DY;(%$7H!!Ll8X{o?mFT^X;N$5tJ)I? z>7f2pB=a~vZhVNYIYYPobp=c5Lgj?L?7TfT(R(Q|l2sWV=B1zL?npLLu$wuRu=gZa z=1dXwDBt9#sxcZ4PZ#fxFt5k%>_=wS$OMzcAV&WH_;H{CE_)MKrSk>IEVhrr2L1~nN~lX zC*!|wEAP1@em6fQs8;{J)eKp0PLH4Yk4^LU?Fm}Sx}T}w>B8m8mtVSS8dSb>HvG8{ z<1Hp%?;KNR*mbml4kezJNk}{;vw=xeDTx}@-$n8;i=6jXgm1zCou0Dr?VgP z?OFOarRnDG>#8(X6ue45Y8E!Tq_s9==({!(v-+)iG(>jQWdUmG)6RxaYhE=zP=?tfPxR$(d;-@F}!2hK0n7xuH&+;jK$DkW)P1HS@ z<*et@_vx2%!*I&M6PfWTQMnKZfR9)RKH_&NOV15b_8yd@0os5-SgYs#!d14{;+K{! z5-gURF)l2DHId9+gM;;P^4R3WXsQOo;fw+I5b3$r_!*>f{9(TzP?aloX+nN)=1dmb zr*wuv_k^487022|pCqy!rz~;rsp(Vs zZrBS3Ar8g?NS>(;&gmXoXIKpK>_a25MH3I5*FZ+ixr8}$2W^!(L=RHn@}1iy_8y6# z5Wq`9b}eLWQr53~4c8qriyJ7hXi4|=o)lVDaG7{V&LVIoGk!6eY4+~=EBFNJrS2wp>Gr+Fzgizi+!Mv+E zBgoqeV5W)p+f{CtE(DgEi7x{dUQxQ*vL@N#K3+Vn$*bMq_hBbE!+LQ3zW8kcXi#N^ zxT#Xfe{GN!^dCqm7!7-78Y32-gz}lGwYwPCib60XZZ!EdP?iEjVCEKe7ockkLt3S* zPT*2aK==3`r9zqz?IJ0eF7)>QNPDY=p4yMkfm4Ve4lehT_CIW0<6=)=^0ylwe?Zap zlb(qJ#(-#2fzy|R}U!KGn)LRe) za=*FxOAWs?s*MBo3LlbS2dv=7tz|KrRL@zaM3;vs6v{?*FC@gDH`;}(XldxxIjwox z)pxQKND@JE`k9f!x7)k%@%}9)39Ear@uoyB5U4Fk;kj4@)OqwD!LoQyvh@BU<9}2=aGZqH4v>hjY(G9Uym|vKzv9n@ z`fW&waCXBlE{=r^;Uh^GlC=enwcZIts|zx%a;#Q(Q*f;GkdyK2T$ll8+!Y?EeN-1~ zM6F>PcUNn9FrQ<=} zw*rvYOv4u6Vv3*uPf-p7TcK(cAXEeGga7xm%#Qd{X9J{*Nugeu@PQdCS(!J=x!?)&`x+Eh@GLc6qP) zzxDTC3>l*>ovT|FDOzeyRv33iytD$)nhjPrrU{`VP{^U`yTAthzHXV1JAnwnrd4je|Ie*qf*TmqWC=F3Mpj}Zzk;$5WGi4R&33M$hPlRmuu zXwv7AaDXCuS(x+4K2J0~A*Gl(0bgYq>PH^}MS+SND9YNo;Z8qdK;UVf#u7|a2!a#% z{8u;ur>ZKj?X9Edza!6h(bpY_g0=$)=RtOc=7w4yIe1i1&X20}DgOFTMwN5jc@MgM zU)|e;DW_mt_PH2g&XoG`eIHr}uZoN?FV8vq?ho|-%!7Qrxk~6U^%rx1e(#n|%IZX1 zH+UCt_N+Bpg5V1e?fLY+F#b#399)tfNz_)&2g;w}s~-`o-6i!Ltys?#f!}RlMz*vtZzQb=; zP8ZzWw$In$#ef^~dRyK@9mN4?;F2BaTIx64P#-ey+Xki&2GGIz#+5F;$A0vt% z74k?5@AzUAfIdZB_|L@td)SypT-JG^N`icTGy3`aK$VAl^;Pg z6ujKx7)VHUwr5^Zu<(jT!AV!x>_-dJ#tnQ^^9ynveIi}SzFx_)RLgj=p(5e$?g11>$# z>Y$7e?(ZD6{$czdoTWgD#nGV8P>PKt*Cd3TQFe|8E@XV6K16&tOk^+Q(xAIm!2P4m zuPHPDMF5wR?B>&=E zpPN)(q5u6Z+^+NQwqgIE+z(xH$pfcaRvbgR`QOTPBvwAMO z082cI??;=A?WqB=fk2l6+WNadA*~wQi z+N0$Ae%7v-nLUe_6PKf_zXf;Yki}N`fO6T(rT6OsCJv!UuRt2+ z;&JKRg@q5fv>&EVIyJP(0@S4(E#{Wluq4Hv`tfzwBj$(M{$%`i&2&FepW(MVwyvl9 zkdA)cI5lYZ2d%e|5h}Sj8=i^!vp>_|T(rN2<;ey&Dd6hd*hLmPyNiTqyc@?=!$yoI zlZCuWU$9FJx!0eOeLCna<`v%$vDvr?KMc0qV@Q;(y{Z0l?*w{Xb)_jtL%>$|87?6 zaOZNIJ4?!Vga4c_k^o87{rb*lhMwhm$W?ag(S=Oaq&?DJ342d})eJhp7MRAfGoc}U zC!TE@{OA3bL`CeZXLczkxP~vY);zpc+%O$jtQ(k?d#{v|O7lV1t7f!()-c%U9`r%vLCo+CX zQVX;pOg$1@?-nbY*86Vi*qMGfZ}2lZL+cT(J^9oXed z^SbuinM^KMr>rHesKwy$C*upjeaoL}nZxQlFuuNCIG*0>+~rfot$aP9>3bqfOLDlY z9tyl!R>G<6R$lbHl9eF$Iz5-YSoaK0!3Bmup-~=e#SE!dc0Hm(+zQc?Lv~qz3Uh#* z|2}OJ%a7DGRar{a=OH#qPITG>@{3o4`!=um-eS7+>pBn2oPPRkR$;z|<&-v`Fn!a} zqh1G*OymbeO#%4F7rC)XS=hL3_#ub&$Crw zSDU!mZ#@~;Qe|ZRSRk)tC!i=v5!O|_r`Wv`F3eyYu73GqX_t^RPOepQqU$_Ab+PXB zY`R{lPmMv4kwQeFg%z?h)obue2b{axeglLWfUd@$sCf%*+Q2=77iN{Sj|5?$%Genv z$~(ciNu^&onuXpJRuU7NmrL0BpGG7$oToc&yO*6WsWdlYDc-H0dT%579%i@6U$2r^ zBe*@(I2xbSx$j9>I<#xCI``3YA!>Y5pkVEicZ1NIE0x9;X9VIoKiS84+xFv%0LOQ?-Qy+!9k=#Gl3-q1&iFBCQKCT^BhQH?0lV zaZnh#j{S__JR#W;dW@sy$-RbwinY{fZjKq==~KP?dauFI&}1Q2`x4<3hrQjNU2VDJ zme|*2Ry1>P`>gCMT0w4_=`H*dkg8RL2l3kFu7SyT zYT@|WUT!IQQD!B^W(LH#;mD=_(;V*f(kwwz3#*6dLyj%3RL=}$~8}=KF9hNg-EpvsX-{sdys9AlFtPhF94A-K!q5 zdkF7)5Su1|v}H=Ri{6lGMgw0^mBflYB}&r!`ukZ&?dZvNe)v%5>r2AP!^yY80QBxY zL5-@bZ9x5^9r(*x|33Q13{rlcxU#P<0_p}Uqn61{M(4stUc(OWKYM7nXa~XM8r3Fb z70kbTxQ6V7h)EXm(6LXdl|thcT?L2g&tS{qba|ebB2Da-Z%?CLBR(PzoNISIKemD3 z@BoJZg1lx*Q|LlEGTH)qXm-ly~+6rgY*xqWPSNGH3DU3dB=DeVWA`7d;W zjTDmGt{=jm(&!YRY+p89CY0m-`2{0#GA<|50Wv%^uUG+ zEF((fD00(io#eoM`1s@4bI=yN3P>z@-V&|fsNW6}5S88*3W4@>gOdoaIZ$Gw-<7Kb2|ds}G5>fO z>z?Z`bj;D)1rpr8Dl$&a3m-iT%lE3tbTi-Ulv*lB^jNKS%+infig|-$N5|RJ&Qarz zxlTkHx`|t|YqPYBajAl1S zc3N;l(LU-af(}CaVfl_V)A=H4WMK>cfUD$zl}-<}lfGWPHxPZQ_vGc^ffQPYlWQH8 znel}>Cj7`{hZVfg#Pei6m7B|GSvSVu_@9rd!V4Q9C1LeIW`3Vh2t%JbZHyzc_Xi)^np*FwF> zCEw0mnA}%se8LNTIvD^7FSY8DWE8$cd2AmUfyoz=32)%{DcVY*XRhCmn2gtfWc=|x z#~q{>7iFpIJXhaEkP~aUtXt!+KK5JUXddsUtJyiadlJ%=RI^oPjsCRv6NKUqeT}=l zbR#_L{=IbFfYf+y!3Jh%)^CAqda-ld2`V%y6BX;~j zxUv2a>^r!D6@9Y%2GTh#*4sPUkPGK-hCOlYQ?ydBmv1<^`)eM=6^sh~d z`Tyuqz%}s+H}I9wOHV`1(j_U?lk+c1AK!}_VN>HcXtqx~>=;K7i|-y9@U~_UC*;o1 zxvlY`iVg~%Nwk_*N0o6mcxEekR&OzdH8O1_)&c~+6=)HIG*N+c0IHY&RzwB@Q4T66BVgGLIEN}l5q zB!?^51DkYmx;X;gLK5J=a3&BRdnly!NyevHj%MEZMCU7JCR+a79ib2kc+|(x7*(@W zn~AiXC{#V!d#}mKb>aPy?rn(ooKd)Hc3;zAWhRUJllGwFscz_19!7Jknk7{`RcN|q zdsApDDDSVcU9$Yz4a>WeP^063z_!~{KKubVil03v4YnW#c-cIo0R{nqQP?? zra@IX$z!3_54+TiOA-XX1_qd)cgi$lv{o8Z8T;h+K(U!6Z8hosOxAv2#IN&p_#K?4 zWgTq|qba(o|9E){DnY_Bypqtu`8Ue21^xRUHe@o_Eu+zCl8ZE&&)>a0ZUg-4f&8xvy**A{BTZAWwZE)?EJ4sI=~QzS(EdR zXg4(4(EAo#%8XYXy@0-^{fJ~XBR-=(*ZSr+P#6cbj83u(eOH|QLu86%-&j-yBrOSG z{02&{jzJi3ozdgtQWwwV`@SD+G%Rv&F-_N~+l2GP-fyb#>_pJ7Q-4ACz zC~;&>5(-C6P13LC-a93Al$)xdsA2YFc%2wdnL9!Va1XXmPrqV)t;zU@(uOROGITTJ z2jBi00*#=TBafQ;SSzq^RtX|>MAZ%w=*mpQWf%y!%#>bw8>(Vnz+qnJx|d|iC+P1O z3L&{JA}{5`)UcqoZCXD>8pn&BXc%0mYViEjF}NIlQ{I!0YuI|nC+%5m*s0m)6&#h*d8I5ppc>NG#$&ms+ICPzpV%ju>+)vy>Sk#i5lsPqSyJifh4l0H?b|17y$d|P~{G;>?c-sQ+2wFYnz zGiSPr@Vp1DexTreRunZzsL_%@is(=8eSmuEtVsT8I7jIOZO{oCHM*;oD|#L$PdB9t zR6WvNpC2jH zLaKEm+;@AL85UisAXb?^WO(7l8#EKl{)vY9nt}KJ$fr6Fj1-s(Eb&aOssQ(Vz^U`; z?~n~IQ^-a4A(Ma=YX*$>tA)mTwFHGOTTvtVgFwRWp{t-2K?!u z?v0!>3FE+1CR(4xe>TVejI@1Xhd*t}3<|)uX$x>a5nqblQFN|yvjL4|ncU>Tj|lNN ztZDut)14bEvZ%kSNyE+W(y`Y0&&B8a-(;Vd$|iRR_Mj=GLq94g^3()2V4Unb<~y-n ze?l<(_Q|sIAFDhdU~&t^a;&C%Y$s_OZH-5_4zKWai|b{Qo%!0_9?3AIKb#fck$y_y zi+jP+8;_x8PUOvQjoqvD0m{Z$5GlS`C)S@e?$LjiLn}l|>kF8!wS9X+li;F;C9oIy zzt7!+^vx5y$e?~?{n>xE<*ibmujg90GCf+SN7p(%S(tfVb#2m?jSQ#|`o~%`E91{! zX1VMnG*gy~d?(x>K9#NpP4=K6$Q=lTgK*~ZdW|?TfB<%lI8AV?Y=q1Ikd!}qe6JzY%eGoJdwZ>RO=T@`a=sy&WmvutFFH|aX5 zH+{Cyv$B3O9?%+xp%D>}XTMXpHaIE3;kl9cULDc)w(U*!HQy%!Hpx7vdeoD{1NH5X zt$L=)%^T|gq5)PvVsJ!*xuK_a7V4(2t$3OPq2m8>8nNHoe7oj|soRjxRS%CI3B5Th zs33Nq)!>sT;&FN5aQ3LZ*U`Zs%iI~6X=T}^iEf5lNm5gz@t4>dQ+Toua%?#kde?_` z=JOYZTM22OjxE&ml-}C~u6Mw_y6Epc#${K%zaQ_5o4S|F)~B$qHIiX~9@XI8E{J8X z2$0!lm>(j|+V2o~t-Dd~`SXGxmQaH{e#mwIyXBfykz$CyJb$ko z8l!K?taT?*z|cQY*mU<;bDcmuW3#0GovrmV&s-BiR;ho~ux;>Mr7|?*2D+#f(bi2*9YXd(HM}HPDUAQHZ;1GZ)<%;xXfREx0pZY zoaUX{e*U`rq3gV6{w-zP9L`4v6=@mna}yStkojaMXL=&^?qa^o{?7t!{%Mao^T*e* zc-PJ^JA+Rw#k`^uXCtK^jrKc3T=#zV=bUrAE01x#o|KFwsd6j!s-+u)nmw3>BNQ+r zpbHa@(^!2xS>P$IU)Isa%hfykeLQfA2V5GpgAm%l3wFfV&mL(Lh13iX*SAxCg1hsT*1%amx3 z?cvT6&J+2^#d?Bx+ekJTjAW8Y%Zz>2QCh)QwfAqWVRiD~&{}dL()zwr--@kX-eIEN zi!=WGVPP9|F4iEmD?_-g>U-nCZ5*s7&^5zl{4B!^o^i8uqgnEW6s<>_<242L`|~-c z_9(Ba*11izO{ z@C*Hh31G!@y{hxz>vOoN*;70_E=1d_%iEA*AQx$H;=9u&m=pxfL(bnf`pO#!v8o-F zeZaS$ zYz`6-E==Ooe$(U#k~LSE1r5o9m7Zg(|1B2Q#^$XqP4a3NXPqW&Y6}9rWip34eOO3M zXHD-8YWHM5n6=yAK*PHrxM#K4{suYT4@tG|_VJn~x)ZWqH&~GK{3$xhdv>>`{|gbt z9EIcymn=eY!F>&^qf#f2YAg!zyX7C=34~I|9(+KPNm|uSN^TU~*h0tA!fO%)zaNQ= z(p&>KhKH8I>WbMyvt<|Ol%>X+1OK@n!ok{r?lxUqgUtcf11Rm3Qa8fZd+&tLF9clfYL78osA+l zSn7kxNQ|Bk2vSY;iTO3)=9joDgUfp*mMTLSL7w%sWY@Y|vp^^ne$=b(?`3a(Ad?(-771ITw3r+yU&75Fbj%+0qfXov8sMFVnkdMCi8@$h@A$R8#eYIw>M z{RB$)Kscv%@6L^JsN#HJQ5&p3=yri|&k?zKX?Sl29-Qo34ogl;lB<=R$s#Zq#7pOM zrt&8m0EqSt+W6a%K*;JQrz(}FtJw;;@~6J-b)>$4>@3{D_^-N<--}Z4s-HyqBMQ#d zLt0D&>P#GkqrJxZZ;qU!2%46o=u&0A7S>Nsme>$LqD#Wtxl5BkMY=jgzUrsq%6D*@ zE;>EsLCd+Mjys!88K$-CSmRe60a7R9wEb7<_piR->jYOYd`27D17KDbg8H-3Bcqqf zfrlb+JgWLvaoDnd zO;rI>YJYc^1#S~F!{0>M9uN7QSFukWM<)2^cUr7OI!F|#CHFqU?1G<2jX!zi=Rf{W z4nt6+BDc(PM&d2AiXGR;=yWCszj1DtH&hc_!u2@zTjC&}SR_xWY%>MF5_QOE<=d=J zlIbWbR+;P|m%}}s8O%@HfTECcS+ke$4rMeDXIO~*wtw7QcsTqOjd}2^)r?P2S?`Pg zC42s^Z~o^OoC;h|S|8?tTQ&-CLWy!yK%vS;)s=E)r*ZdL2vt`yHLCr`%V5*pht=W9 z|3|O`@IKPuYxnFZC|k{F5(!tqzIQFI-mkz`{3DG7&=Bo^eTcvU8;kvFXS)4&5=I4M zKS`0|AH-kX`jp*w&;yQ2-&I8(;=y+y)ZwMq4pAuqFS=dYT6exuf8`nPo|gPox8#C` zL!8*L6w#aqhor9W_v3%}hR9)ZKV`#4pLPa+qM=b61E)CW!Non+*Uw!z@y=kCJoVox zx5QN*rAQODsivzNYCo!OJ{2d%YI;6}wYDgh$15#a)26Cdrn)OZv1Ovk=~3&k&G$=f zTBfeKRqbGH?sjX1^o1i8y%<|@QAOhjb>uduol9$?!~*?s4kA7Rv8(m%%D%s;HbFqW z)XL@|4uc{AVT_)?s$NjsSf|1{dkdKpRUhBcDBtsSk14x5&zy7$=P^8g`E_*FLzH(t zvYdAffQN`_Fi-ilN;v`btAV2jAnSB$> zW?w35R|pM?!v*y3l!9l1xYxo}wgSP-{_HwbgI%0De}D|7N|BKQQo}Qk|Nr_>Y2cfp zijw5a)GZp)68pB?_OS2zS%6)Fs!T1QnUhctrz&4Az{X2re=ET5qLcHYrQRQ<_D zF8b3CHt?~fIOFfe0iyQD_&k2P0iX`o_NrkM)>=qr!%t`6cN4E{#+yg+ zzT4oH+X&&lAe&s?is3M~N1@4;M^5MPuc!#O->;9rn}-9|dyzDZCRT-AdwxFFkBhQ? z_+S$g1r=Q$xNU_~Y#9P;}2ihd4aK!As-KF5|V=g1a; zA+iXzd8+_mAP2Z$wkJ$*G-tnKaG(?Ea;g+xT^7LQsC+wAPkRSIEkW8buecVo9xtLh zH|Qrx_Z+B)(ary zR1&#UPX$%zzp`)1{-rb@o;cV3{eq^Bmd`RF1e|zt1%E4h^j5gGhTMjnsa_=>N4SRK ziHg5zYl6ZuDR3HGaNc#|q>}CaP%pA%!Ep#a!}#fOWE&MM8sWjDOQ4*e^O@>U2;+Sy zd>>;kfQRqn(UTko$&V}UWxyFnuuvQ*0cT#INUI#+DIr(V)ynk((4DiX=yCO3*)2by~qQBZQvOZZ)}1Kv1^XQP^MUFAry9%X@$7ZKbKdY0#4 z#rnTYO!-CCjHRfA(ManVBSu@v+pU~Nl)j4OO0H7R+yPZUo`jr2&-yIE01ei`k@BL5 zrd2pj2;NAexSOJrn&=4I8l)#nHDXtnQ~O64BideEGhF1MM5k^TbzmpF`C+2{4HhSR z^R;fX17aP4{5~9X{GsBTSFTLA*S!0I%m^09$~pZ-lj2zowa#7aYS(hPd2>Zz;u&k~ zC*gOfd^z2%($`0eJ1w5d&0R64021x1i7AiD1@swh^&xk$*3h%38}rSz#YZ~*t;S0W z*DGq_G5^v>aP;)qX8_4aag#WeyEA9nb~(a`sSBA-LyHZwP(4zA*^5WzGFotV5qycKdbpx#|+jIj9RA;VT+qm{UQgSqr8=e2MQVhZy3 zWBYPUnGQ>bau1i3e5kA4y~A}?YF%=?YHIYX{j=M6u|kpMLY3_1 z#mS^4kKvnN#5RWxp?t--R``Q+a;Hq06OZZzK6Ezkuif4Lc7sCkh7BH0dAxY*8`Kkk zc**#ig5O^-YG!6_WPSXoBhANWjYoTVlmR&-LXe>9HWGf%K%=3dQFn6Ku#4C>Qhu|r z=kN0qP~fA)b?^9f!Vpb1j6aUm)5~Y83@+F>bV1c+%|HuF0cU3$k<=nwc@KZ{w}_!E z@^RD=?BfCt-u!5Cei9n!{a9+R4C~A7{N<_6rZ|sDGd(HDW|Uo(YtucLJ@aneV4U;k z*`r_coQ#_#z#jU{`2e)V3L<3G?w?9(%|u_D{1#$YqX6y66WoW{=XC}OPo2b{_Be{F z#QuifI|_vQFk?y`t3l|cKf*8{!Lc(@w;;>nm2`2AprqQC)wGkoW?Hw-$<0ddgZ9BZ zrXKrbo)|~_!Q*`AtanH`Pg^zr6QObQ$lqQG+O5+akKj&l9N(->A1Ow3C|Z` zZwlDW?G8oUd}_Vs*=w4s)pXX7T3^?^Z)+o5^ze*q*Sz>R+Grg>S3C>`LaHtd8x8y<(Qjbg~=`nmcnGhT?yySo7ZFXsWYUg?#E4nEXn- zw|ab^Ce!W(Qlx@)=C`IFU3TkNXlJ}jq74+c7clsz98aFlAZx?8RgDa2N~y@g`Kg9v zQ*+d=nK)c(cGk|Yh=GsnmpW*j*#X2Tv3)n5fiNNJp%43TsIOtkqlcf0kVS-xGD zOO5lpiAixr6Yv2dTqHFpib|IaX@S%?FFw>21&)zK#~5l8#(LUUSVv!Y?_;iewgAR_ zY+MWTj#g67vcw;K>2w+|GG26ZJx!k=RaOKv};Ip!x$;5vuw zP;5=Mve~=Kby%1UMnN7PFWZgJ5aCwQ=bm*MGviZXS}>m2EAc7{B=Y)*0>zwb%W{1D zba-o_r{O@iunxe(#>K_;i${dD0~94WiynReK3AI?OmS-jB^smd@5SRE&2$#tPHR4S z8eH0Y92x-8C4An11l&BgP(w__?AH_nCvnwl8y%j%IxV-^qJ;6%<)eMIE>vy2+<4i)GD34bjG1mDYhV>CO9QBg|{S8@3bFk2+Y2DPOk6mcG!dh z)mdODMPK{GJFYDXl4sSpHoRX~BB^QCoSmj{{3V(05OwQUsZpe92<#v$&BL>>W_`Nd z$*HL@^QVA00{lDQrnCl`>w}&QBHv;Nrq< zGHRkcDz(`guc!MAV(6&$*J+A7GnB`)^KPV_V-&aIlKL@KTwH+10W23VrtQ)*2iY zYZRF-Rlk*YEh`?v2dc+1Uso>bRfrD1_wgx7TKFm|{&n<8b0)9}yXQN|;L%fETdmHk z{l9sMFb7{*mT z;Sn3|Ab64bA6~J4sBG~6b`77q$mgml>M+umonk-umD6qg%EUf6Z~i2iYv zc|gzl>PH_1juq?}|6f7wPuy<_4kGfx8Uk#vKA%oG?uNh%-+$;l$w^&I+(=t;2kl zo9^@xhJ4QW_;_t2=4kQ7xBfiB%~&}Nj2i+Pd!MrvPeruR8c?#1cy(rOP*>(y)717I=)^Qkn!38)#VoIF zG-?w}u9|4%I+cL5p?`Ji15Tm7;BjOMQjnE^Hz8Hd@yeQY>mC|4kEs95yoRC7bMnShsG@n8hr7bDQ5;j-nRGxs`8vsTe30jFwk>n9t9Ck`B6 zK~aOhtaXm+w_WH;;}Qu_DY;3D4v;sx&2hp5S6Aczv=ucuZ%MwYSzpF;a3$?Z0GOX9 z-OLjx+=7bO{4!LmX<9Ku;%E z?`qOn>rBM4HF;^LGv7T0NKW-Zp70TpsakKsyu zz_Van#O?zx-#<`YfCAcuxF2}xGZ|^r_HnJ*3FAgZ3JF1}wn0=a!CM9wXPQJ_qD~|J$*9DWuYG&lAm*Y3H=VRn}#E zHny(=td|iXmd5n8`|!%rto54U94Lk5F(&He%zSM%2kc2JD{hT`RjdS%oKVWR^6Q~r zpknbeIlECJG;94GnKDV6$qV9c?W5V*k##Odh+yP%;TDLWF;Vexl6$WRTTyv=aoR<* z*8GH5P9;~xrP5`q6i;JS!w(^j6~XJBj#m`n)L)eCcDMV1>L7+nS$g9QSZvd2TpvJ0 z3U-4{RXoD)WBBaI0n7{}Ca!97OFnh&K&iVGBG(QMQ1|OJe|$~J6CB%!-}`^u5dQMi ztIT+Y&%GG6x@07zlYPa!`7BAYo8Omf?cp4U5&VAKnUS+YyKAr|ryxC_NF)wdccxf9 zADtD%tSGUXq3fOQDk6RJA`0O(B%x|ibPS7f86v_w74?mxY6RS-a zG3ok}#jm`DUhnjoueI7(7lawNl}o$&6B(DSO=t6S?B7ieG=6Iqe77@cl{J2I@gOb@ zeZ`WA^hL1Wy#U3vfFt z#$L4t_|8(895uZ}ze~8)OMlLKV79{UG>4=FE0}V2{f|-=_uw$vfSFojO5dJ${0&b- z`;LPVjNjDwbP!Jn)rMojUmy`4#oEb~GKQrF0l!QRB!|N5;KLfW0DAMps-KH=fv_Tpi^t{U#gi8|UE{coqAiJxo7X=VY%jUMNcCv;)bum=Tl zm9cq$#8dP~l0rT8=By3cCnY=}6ytN4g=~+Xvmt&MtLvz{DRnjZmHjuBE;}Dm+#zt| z+Hg|C@FEUot)^h)9uHVqwz>jxlf=>0!9jUjj4CS=w5LPcn@6I|6eia_W_as~{XQXx zYHCRKj{e$xZWHganL>lb*KhabGPhBCj3>D!!Deo-v7t=19%Ke@H&cBA+}w2<5L5#S zD2;s+(v=gC@WGg?@x`}gUQ08>L*~Sf^e~e10E|;fOiZlV?9LJv>d5n>B~N5*LJ%7! z>WPMs+>_D5kwlhx3{e{)jQV>7tqf?hNCn^8onR{^=1z8K-m#Cf!ie#2s*u$XmtiZ| z+}SV@WV*t<`4wNVV_%t7=cmQWl@53q-ULO@SMx@Z|AJDrMYCLW^BS!$XYHcz&%gMX zZi)_jnWK;_8a%!wIa=nO@0K-DJ99M1#>!J*txJ8I{|tG<_+gFjmT#YV(lV&m){04` zN=n&{YTilb$03vdrs`eQl$*xf5+cL(XmD53NyY(27I(oP%mF@Gs^}rO!KiWguK-TV z5}PGy@&`Dc$5SkDaJ50YBSQ|pEn}Q{LwU1Lz;=GQ-Pg`xAH*0jIbuf>QD>QVdbNg5 zwzGNjRHT($>P>fCjoG4}>&A$8IN{)|`v7C7-3G=T4cp(n-^oz0ec#!r2t@GQIaGC) zO`Z-hAnG&JJ1avPi%$m>oL=_>YE{~I;%m^b+_~YS`X*vl{ECU&#VJqz;@Sjly6npz zke^R72Mu;ng1=52bs<+hkeV8b&ws%i*nu=)}K32+)pJ-xS zgz~hy6Dj;IO*~MU;tV;p^ zP;wR0IUA(wz}W}v8XLBx+YZV}t$Oni6TAA@lS48+U_(hP&Q-T*g!HpG3pN|t+1VwO zr`((?5{U|3vqF1dPe6O^4utp>h=S+NUd(uv5N_vWP^+tRCaz_1Y50m8dVQ;<;-&80 zwU4>OS*gZF5@G?T>Ja&~`*v9w&sfY)O@kwmw$sDI-rZQ4gW+(%k}XE(V2uIis@mX& z*Ka(v6)deiq~a$%&rV$V(JaEObf)DCr}RTyy#Gx#!zk`zBotg=buHm5k(gke$&d2(iczBvb(UGGOezHW9shErw>72x2FsR%? zu$8x7z#U^3Sgc17rMxM3hvfY1ZpJ*1g@LI`cfm2S+T)uxZjAnMYA@3|-+>{AYv0LL zy%LO>*Gyy9CyH+vY{@GSEuZ$kIbxxP%S;>r{8S|cVQ|+`k!lB#Rk&GR;kJ2qXuriy z6ufKRkm)j~v?W$Edu*|liIie#t1NCedN#c37xP`NY!(%6;U|Hg{MhS}%>X!1e3wi%H^I^s7oN|)>4C<<}jf|Ywxos4r!rof3BjnKrQ zH@SzOyveHn5WxMtDZ6!3gjET|3NPW>8ghdWr26%M_?-wmf5XrsvmsF@FC{(Q#B@kN zt=&$=-7G^6|05rWH|VYfy3=Pjo|`mpcV`G$<3znrG98=xNv zD6otvZ(XN*_sd&?jtw*qU?bcJjkCW0t|vx$_{WYOTCUmHMy}al#^)BU8rNgSlKUy?prjeQuR?D9q_ToxuePF?f}ZekM!4{*227y9rgDk@Vx4-{jgogKd=q z;l__5AT$n*NQ%gzwMtR{!JyX5bH6+(>ISfiO%y6n zu~ezYn}HI^5&Pz;L0L_~=^11G;=&b?Gn&_7Xak}I;zv60hU0IEMHLq_*e9a+?DR0b zvb(ONgJHUnJE8!>6nK`|mY0uEd|}_tK?y1LMU%CB%QzsoCcq9$J0&3RA zGkUp+fDe32Kn;Yj<+ECH!}N8+5|(v<1|;w;lyhxxTc#Y@j6O2j*tkOMsAQ=Xu0qA2 zu3p668n%vPO1R%q(j8Ug`pom6iTVq;P?9lq zBHU59`OjiqZfW9B{)h#r9BcC%-C-eXXc_Lk6no~sth`u=^fqJdd4cr@yugYms=jMr zhQ1cw1`Ehl@b)A;` z!sQ%mf)_V*UOjLeR43sYjZvlEnr_g z(34`3pIkTfg7pF762dH;rI$U35{zsO@&&_JA4fm-0KEos2|p* zkPTuBb^3l}iEbav;=x$Xktpdf_^u!-DBTm3_`Z2mz3{LdoberWDO9 zZNThwV#wnd6->^a6>y$Q%P9UF(sh-|X=;tTNzTA-?etCuRWe2iHQiRLiH3is7qvx9 zO%GoCrg`<-*JuC4SMZ=mZu5YP83f#4jJ^=JAKwP-vlw+J0@YjW?@tF9!&RNSZ37Nf zw-q&7+&pH$NG{T!9)5k^WU4Y(SaAXWQ^Fx?{B49261F??9c8ArLzGRh22;-Si=rS| zVg3BfDrTi~kVqUJ9G^+EleX!*ij45~+DnJX%jMJL&*eE3R|I*D@IWRck@`?r+0+d+ zEOpQiYc?_d+Vb+Efy|I*cb$H1xx@|b+PewlM~6xr^e@w5A?x{v+T4y8>ofAlYBv`_ zhIe@ctLNtr_^d=qExsIb}{xeLVEeEE!T#c zw1~peOKM-mviWmp0I-xy6HHe-DtfIJ-od!}#<61IV0>5u-sHGpHzgszTQ=8ZtZ{Sg zcz()L5xA63T*Mj$-=Z+r{<-#+1zN88CKtJrb+ix=R=hQW4+w30lhe~bsk+tUazH|?(WR^y83Z~Rc%R7Ou^`Me!w}lFb$PkTa zS|p{}g>-^_mAN2s(W2NAA3TQtE^*gto%}1(xf6r+na`o?QQ2kQeUJDazZdIku<#9z zFx`b=+5lCfHyYiI)QtJxB>Q+=20nUolUA_3V6lFx2ps-zMS9K_JAbrhh-u5kE{_%a z^!!bjhJAwO{5j~YeD7(}jT?!br$L{Gxtzvbe)9TgW8qd*HACB4bBqO?$6rLzXUNl& zr9k;Mt84kMOiLuWerTmk+|(7kHUGh8h2{=$W>Bb7O>+10Cx2R0e)`0v*{D|fDK4oy zY{Ngkyf1D~S(wqiSH3KHS%|W30|UvKSNYSEP2IH-hUyHe(y|;a0%q9TX@`RE{+<3VM_r05eeJqOY;V!G{17@< zFb3+2_yAitbvtB)tp}RZ@u2sYgXR~OYXLM&SBPUFi&HGqwGJ(GiVlxD4nokt{qD%& zm`Y=)Y{p)YkVKuYTc7rAk`}&p&|3TiC)ZF-^>-{cDuh~RFmTVp z8i!@Y(2v=v+(r|IJRq(3UL$|_*@Jel=SAhMF}T}t)LE}T`u$hQ7a=?fz9roy3T5}y zTI;6=*@tcgWjy+38tO8O!p#LQ`a_nJxTV=|dPQv7=iNV82a<*)NJCOM$@&6wxH`T# zMZt;`<;O==+dyix2f0n=rESt%>{L7t>|C;G?Xs8EllSJ^w~*oPq&yDgT$tiCJQ}4( z2c-;?`HUi%($$6ynx|w@R(DC!p;|t{#=|*M_9_(sfUgRJcH-JYfRH{4xNJr%H#Mfr z;QWPo70UI>;|Phjz8DL=T|Xy3rB3zYv>N&|ZhqM5!AlSKE%O5T^M6yxF;7?a58cwv zc>L{!T+SI7gNH}cfNbTMGaW$Ne9y=)NKaLE{V|hl^B$(`)jWk2$pF*UH?U1nGS3Xt zwD8hI+OU<~0ikIH*^vvVwnVlhZW+|(Q^Xr~OC^tfF^dunY29larK(9QE~$R%MY0S% zm)q|HiG69v?#$I%vODvh@v-x$3yP23zI=3j~&cfS!E_h*tnNXIlA2{3le_C z9+Msrco80V+>QPO?+W2hSoRcvIl;Ll7f(1>;>8o(Se3d9Yo`5z(R2%g()%+=#^p{2 zPu-i!;(JLBaGYYjqeo=TquVWEKhOlyVO!M;smOM8yWyyqpjl-o-qlV|2lTQ+h?HbaPkEphRzcpJ&o6%7NQVQ z1HkgB-QQ7{^Ya~6i$z^lvmbS&Np{asN)<|77a7oIJf z8z0}zX2wi9c9aZ-5pBz2ic!EFUSLOqnLqj}H&(mUBYw?UN@}mQxUnF>uHlRnZU^IW zh20?&`;N^AN{EzBN|R=}6VWo{MutYipA-hB;puZwlh`m0RSyfhN}Av&0`6~KC_XN# zg1+oqV9QnO4)yh2j-Fqd-njAWsi|BAC|4XA85yoga!q44!jY}fED0zi9T;wyYVl%| z*qVz$J=ccE+9Z<-HlUb{;%uo`6e z>e^jPi$hDU;&y#%+I88>64UPt5vB8im`b`h@Q@TK{!uJuIz@x~lDYQROHvZ2p=Nl9 zuHX-K|MuHEu@Ma*JdU<~4(M+OGya_c1d_RsmQd)(!py4ApyrR()%8%&Bt@g8VVy_f)^h_X}M9#X&t zL?iozWNkSE1!FRe%&=xUO}S1#kX>@ky%Qpt;i0@(IyR%{*9R++p#!1yhJv6lgXZjd z6C-p;!x)3hWWVP#qh`L7@O*Dr!6t@0bE`e`U-|V<7;HAc^yFh;qipI+cYmhgIfOI?B^P^)Xnh%j=Mz&&!A%9l3BCV6*NRExN_ynBK>*546&3vCki4h71eA!ef)Y^X2Qdi z#w-`h#)aX%Cdw^bhtQdb0JQ(I0*+!JEaS~@9T>ku9Y(|Jfgo(3Sb_}d<&uk;KIk2VuKY;QzQ=7^|l zCiWrfQGJ@OjkgmCc)ux_b666ZFHf33{=R=9YH2*|wzBiL4II7(SOwL86i)hWgKum( zpcn)FsPf^C7`wb2z{_R8qqbU@ofrC9%i}}fBK}-*pZ1P5+xw1 z($n+_O?5}I6$!k~BS z*p(EqrB=Ur%67WOK-hys^%xizKPkX==N?Hhu9wC}9p@pzSybJ5B{_(cfRtfgS$&Xwj%Wp8Q z)fuP*IAGrh#OeXe-4pSrhQES3;h_m_U|30AwjgH7ZInDpLfMu~tvGusa z`pD%QyG*@Ua$1&UvFOuzA=po;JK;6jDi7O$8jOYDgCbFZvw)X~ktxQ7XHkjIz`Stf zyj#0$vkV)jl-5ZHo}cT*QZFv16l`=IY@xKI~ zFzq&X(~YyTr66FC7pNO&3$@i|Yqg7(Y=>tU-33u1rPPZMiD`hxO0f@Mm;@Mq4--0S z@p>do1iYmZ6lADVmlf~PZEDVC0dX6135yH^?QDW;$IIMnsYM%*v_0GZ&=LMD8TuEC zIF?BSXNTV!&j{fNONq5GSm`>!i2S#Km;C>Mza0itLH8hvIVA8R5>W8k^W+oRvciW- z-8dKmaqd;s7@d7gl}9zNe<(e;<^Sb(UqS#1>8zIxkw||?fv9eO`IB|wc+6N2>bK8V za+f^>=KjGN9vVPAG3SK8fY(Dk%T~hhD#pYHUBSg+hNV4QWSqsT6i=agB|6k?-!rL2 ziJp0PS^6(^<8HzAFX$?SE^H=4P?{VMH!1Y|GR0by<6yZz&7PkLX$DK@4)*puht{=K z(n~tiU*F5<-IF^DamJM~t(HiKcayEm;{uEe zGOssty6a1g`wt5$$e#I!IKK;OcxCfWK@bMJRkU#qFw$(V*S&oK<5jp1k{h9WVhN!) zS=&*2Ue447?zH3v$sZnR62ISqxI>>)fLD#ugbEF`6ZmPX?S1voJjAQkW zeIaB}kcUUlDPByFbr>!gHhr%rM2a0tQ3E8{@nZo$-vkMAtN}r2_xs3usKMx&E{9Lg z=w%41PodFVz!INKiBc;CWyU5oipQJT^Iq=b!vDYDHlptj8Ro^Vn1ZK~o*z_WVQ$c@ z8O7Sig~e?E0=O1%RyP7n!8b6LggAMi&57pZ4 z4mcILO@C??=43)@Br^-NvZ2Co*p}#A1oD2# zcSfBJW;yBNr>E`kP=Hnk)h+YWEgkJ%55mmFC#p>gz6=MuhV5Bs*Y{MM9@o}i9W}Ij zJZH-o^d;~izCN^>98W9-7#xr_DeCwB2cOu_9)IWZT#>s*@#DmNlJCBtr>9{e>2`jm zeQy34OMBF*KL+qw!U$7p%!Sa}Mm;2+^ z`763!tul+f!y6(`k4(LS6dOd~EiZZrC&NaGL8h0mI|xVZUiD`Ae{6bHCrl3G(E#*E z$P7P)MvoN>g)w1tT+J@xUvgkP>;9T6{|DRsix>gAhdCj#_AvJ?BWOoRWGN6^a-6Qn zvW$YcuG@M!v1{}=nvv6RIJUHyrI9?@Fjg%BaJKzfE^73%9EH+eRr(l$2xFl7@O2LTw`{9R~FWm9z zJj200@DJ%yGEdgx7fTnu;QWkFR)zNQCPzD|sj^V7+{H#_a$tHtw5OMT-~GpPq1tWu z$r%9s4&Q+~aF2a@rs}tK#uerVxaGUZAm%K3L95u_B~~!6X@2Zz$JBRyhJu4r-qUks zb$xlR&s)B2uKB`z=K+|Uzjp(K)58Vo5>A|7Rp`mAvX(-E{W3?jR}w)axQ(@Wjl@aC z-ed}**>rzwTQToO{~v@AdJ(rR`L6vxHV>6?L|XUoNC2G_NGuw(cfZ$b*mKYSqyLX5 zTQya0OV)1w0B(rtyF_g~c`T5RtR*J^2>zWme?P3z4VJQlX@wrV0;+R6{dgJunf-3@ z#TMu-IQkj}H;hCs!R+?S4%yLcO;DW?+oiF0z*!Uj0sN$!buW^m5KgYc=6 zm~J7q&@ZfsXmNvocT5>z=XqVq&0roJtdAW_{8VyL*g zDt~?0DUOKf{OuA;kvR-WfI>Ly8aW&Lo;BX2`cNyspEB&idGcfp^(c?u{G!U7QyG$H zi9*jruRfh$_nK6fBasDz1WQqZa(g47^S`QRJF^_*Mtc0>a$mf!1m5S6Ep<4{15idC zmJ;%xP8sUPxLXQ}g1>WP2*=%V1G8!N@aP?QqA(o{sG# zS@DU}BT8B%l6ULL`>i&y4h^2~T6+4M^^!*5{HSkVbnXv||3g5PQt><7yR8wrpp*MH zrp~oH<;8XeanXiNk)@)w^4H&dhgTki9{%hdez&$?*0)xdRG1Ky=vx^4d>piLggxy& z@BEhXua$f#&VUS!kUtdazYUEDdZYxDP2oF2(wcO_1v6a{BAQ@M?FNaEy6U?v6}2dH zw5$7Bk@I&u?Y36r$Hq@O1Ue@DRUa>%cHXxyL?ohr^Fm^E-;4!her6FQf&P-W5!=7D zAUNyD#ghlTkfY~skFMK+gWV7!9HvXj{GLX#?x zIeJQXk=-vfG8u*jvsLGIa(_0lA(GVfXknf)y`SP_K&mCW#Xk-{7O8vSK8MKta|&_Y zY%yWA|6rp?>wkp*@ty2l2>m9)Ey4hrn&y2YQOR8M>;3C-O@PCbDOK_i!cz!hAl8{H zqg~IGf?>LWtp;u-CS~OEKX=|)PRtvhdbNKS~=Nhqwr!ru%JiF_7vpVz(d^0OO z@LR-YE$MyX0$76u&Y*wNIt3&xvz9;7TO)PeP$H;Vr5L4q3&37>Fns%0ro=a#yM zL&j|~;CAu$q=`F9CvGt3HKat;*9F)bu=(6(R02O7pb$LOG$lFJk|PZMS+Q)pgBPaH+o#AD}a;?W=5Uu{20{b6b({nXB3cOqIdM75ay))s{^#2j7%JDH;XkUzA zAW(VEB@}OwKy2|*I3W%M-~9v2=`!U01a3eG8CoYL9n7k9T&@WnP3Ea;M(t8%M`wDM zYXQLMD@CJPW#(R9raH@dRIi(9(-0i-B&|F>#*RZ$lLYoUS&5?53?rEfW!< zI;t+Zd3)psG}&o{?$2H>W~l+0lC3Q*`yo%2owyGSXT#TxNRs{DOY0{H_pOtrn1Xu` zj6kgJCXsTW_6c^G7b3r1zR6g2t>$kJ$GY0v2ej%_cs2`P3n`ViJ5%uVdB~VZ-5MGu z0n{NQ$}arBQOua%M~8|5?}%zq6Hm~YF`qLTf9hwrH%Vsdb$e<0v$Qnx@mU}Bn=I_! zTrLZ2MvLOk3$^vxp=lHQC1f9*RAnZv$Bt0{KR*KQ_a8vwJD2aj6ed*nF)nQ2KyU$W zTbj{}g^~wJkVmK5Tw%qz)=wBotw|Ug@h_>R%SujpjYQ)quZRyK51qhDzB1K{QYR2w zl?57`eP*GAD@AT|SSi)LkzGGILRw6NLWBE>Aj)U2y`22bATqL-)esa0vMISUs9Lo& zO=9iAZFzzh@RC!(L2Ebsp&T9qt!J;%648k(^xTl+5T)%$B3r&qbir9RQ85hwe|q5x zSsG#AG!q3=_m6YIZR|6tu!4bJpA+7Z6J~@>aF+5<7fn$o>EBdcaAl=NRUmPGw?+JJ zylDnd3HjzM11CC>hYm*zJx3>7P)Q72M*+HypAf{{C*jch?HaiNng8Di4R2`S=`3jQ zTL1|LZTGBV60n?MXw+-@@@~xYYRWr z4m+G2VJ8A?{wp?go!||TOspCR?!5;UxFwZTkfSZ*s5^HCVA~Z34=(4l5Q3uU90-lyZCEg0mixY|@n{OEYg4&2jH%C> zvz)+LlM7Z_P!Z!NQzVRkmTM>)@D~0zrd%n4pUwu-_?77Ve-t^vzcZYP^3&w-t^n$X z6wTTBAKU-UJ;cL2QhH;+6uge75_z`VI&?bR{y`HG2%XIL76m5{iL(Y1oNDGxPo2mDd(Bwh)c1d zp#YwI+5%P3<5vUfMVR=9_%Sh?p^b9g>1;dIzHG;tI3EhDygHE;wpJm1tveX9{E2ND zzHSopZ+p~E*UXcOY*8rTsYHf8zn!Ucno>f1)B{uPz^K`#2a@v09Un~j;6~Px36ej2 zhotk{r(%VB-aBep3v@IreJ^AyPU3LN+Io7lJNL1)*<}7@&D;&E)TqlD<3E{@uf-Ye zsQyRRe^@%p7Kkd@0(opKFl7Y}_8d^<*Jw85hkF4ux}r79=HUEzj=pw>@{Lt#`mNEj zdCmf@ebT3D(~RL4`dn%*Cxz%M0i#}-Y>vgn1PPw-RsH!tOi|mjz=$8h4-~^B#K{T( zWo{{tpzS4%j0WjjU^bcSTfxQE-0#TGW9+|Bv66W-GW zY+Zj}4Xg_VSkAfZdae?^rU!CaNmquqC8+Vi)XmstRy>_@9JO~>s6!1~7sHU<~N-Q%Ni9kQ&ht^mbQc=vKQud~X+=Eo6Ie+iE@ zjKOrk#rcK7fT2Vhr`ZXcH@W`;zcE9Akrk2vmGYnRIQpF2hwz$0&jP2;j&^?esBe40 z(`c~j_AnG9_LYe?+Hp$^VV=C(K*ezR>oEEnh7S++-j}$)#1XO-WYek{6cMPLShtet zzDH)7f!xjQ480Gu?$4l*k;>fD+dZZeKJo_?>W-)fowcYO5@K2k6KOT;yo+ekI%=HUkG$$X^qQ6Q^&V!obB zl32D!&_c1s_cRAVO;smli%G{P6|Q>b_WFEooDun=bF+a)Lw|R(AcUT2>2wUrf?Gu% zNWsir_m5lHv8pN0!OgrnL^3^U&*5txsRnW#E&L1uk+dEV$DB@~kD#4`cL zsKvmFuc* zCW=QJuEpvrllr8arj;8QsszRwa+u=3_JrQM6?a&rVm{aL%3KSI(CgLZ%TFE3V>~Ok z;9zkO=~0q#9Ii(%VtVxbA9|F)tpTLw-FRl9Y^aa+b`8-h%yr6igiv<4w}IBH=Gm>P zFc-e+#i5>tK967^3qyxH4Z3{yllU19Hm+6Y?WmT?O=?~n!Qx?LY7t*Bv#H{TCX=^H zUbhr#{8~2YsY}TTJMQg$Ge%RFC8utgdLpo|cvmfQE8{R0tr-H7 z`(Hs!+?VXI=VS1TlYJ4QQ*+|URtd2gTetD>5ib4N*V8a5SW;cm?oQdD8TG`G@2F?#iCdTuq@>4X6_ zJCMWcHl{JiYhSzCdJN#W6xItxvuT>tZq>4ZY}mvN&a{ODQHvL1X}|)eVszbR<5ALC z8nOB_pZd?qiA-5dxoRy~J?DWvpOXUwvf6w-#&}Xy9K?k!nm$}=+V<`vqNhox=eUF* zgxkTh)K)lJLlQ*z;csa+I`8p}ZI9DQxt)aMZwnUbAOl=f0;R6{zKeHl(_MJ; zI)p<|be7t2BJb<59F`WNdb_f{%pK06r4B_mR$8_`={xZpZ}`(%s%h#;XGZs%P{!&yZx-H%SkaL$pkCx;NvK2#X^|3=Wm-g05~(C(9YiV17-H-*5>c|0lrkY}g_$7? z2BWN%kYx-8lO;0tbr{=w-RSxCef0Z&-uIvP^ZeE4iSGNl&*eCe^El6|0);(cYH^Ha zb;_{*BxNg@lea?q??sd8;{Y_in#<;OCgjC!@wBI2cVlYL2 zE;5XX;0<$1ag}?gtg#t#m@|Ii)x_sK@?8L$16tKV! zc6aN24Uy~i@}2{I2g0sI(oU&tTp%oAmEVTd0;uxYJ$J0kt1x z2=|2`dqDH=+J#?CDAq2gvwHLb?lOaQs`2FLgwQY2TeEoj`tY~oXYRze${OVc8236E z(%O1M_=D&Bv&P1fUA|SCM%51%43b9yE)FO5z?W3-U%`6nrb+Bg)$ELUq zVbnaude7$<I{`H9kz~BkH9d;Uo)?eFtCrnpAG08CG6+3y* z&}^cL`%4y;F$0u=Zd1Poi$}5*@4gd3#Ye^yT}PXrKrg2NGoq=-`Z8zs8tF=|zOU~3 zLtPA9v@5Tny1gdn;+cb>>y*NBIE9h!gp%Yt)@`C z*)f0T!W*`0YFCd@0WnL?Wk4Z#4VK!28kZvpp`D$A>{H*r+B2lC;CdICw?$}9I=v~S zAubo|H8e6jVSHQYGCfp5;Rw@r+t-{)CZbx=NppTE(Ue7Onn`XFIVFQzbiv0f0PPY* zXgm-&e~T_~P{kN#Q1e(5<~dbh_$y8zD^cNs4(<61{dh+JYT~_f7XT{q>gSgWE~}_x zRpd`9O1z#bTX*4I6!zGtz>&*7vG&irG?H4RjCk#GT3|30J81 z;RUwXPfX|+nCfP1xrOiq><7M0zjCt4y$R~`SedOLEtU{L0ZM=3ZMltWga)|5aQqNi zKKb(ex_*|Lfa7a%TP;JA!|oFgq7RyQHA8W+XPOQ zUbc3iQZ!TqN&=hvj~?MtALiGUJR23XA>uqS`x&84)iXoiVEL&qx3fKXF0h)Q&@=GC z;}{nF-fia3mbYdPGWYhaTjjBH)59HgebeMkIiJi6Omrhb&&`J|Bf|dNJhV%wV7=50 zjiL=%g{}gNj};9rI2ym*;Y##^LH&e+sZRS45vXM3B$rx)o%0+{f2u2{w}WNWTWVBl zWR)@{=gVtOgV;4_NIH3~K*|HwEEPvhH$G9w7IPffvWwce^vqdzc``liAq>lV^|h&HQh6^6W8<7VPp!R740GQm&AXz9f4nzPd!`~u$AYN)4eZd_4! zX(F|8PIl$kG(<(%>jLKYpW6%}mgBtRP~gpj{>}GPN8fy4uXej@Kalb{ETE3c^FpX# z)Bc?)F1PP>^-+1Uj89~fbth~z%91f|W%OMSm(lfsPCp&bY#6vG5huh$tsqU>1FxLUy*|{Yg%!UJ!m;`J z0k^1r^}1ix4~E`?ZHP~!kq7s2!JXrJjFz~EMY`lJREgWCtoUHELxFG+5%C`T@!=eo zgAak@EYSPC7xe&Y^%DK*HGKj$G6Zh_a}0)r-_@B358~=agexL@Bb!y%R2S^RKC zfJ#HX(XQzFl8wOtYTtMSehCgQxk+}`_tAn?tL-_Xf%7S+;C7j_Oqx~?#YdSx5SEN22g`YffnaG2+8O^D zEPb|fKugCInN`Ac-IuZXYJhq8y%w2+4avY{rW?9jf7LOvVw$h0Bge0P@R(HR34Ipu z>kDCx;THJ*vw`~!(sT^OHUbom+;7=+0$?~YSO~2#7~|m+qv_tp#ooR+p` z|7NTpSy3f}^UJ~S$wZC$b$1J{yrp6X7H$vCTOK?yG?Nxuxi7Q}Q6g6?dLeL!HbPJ* z@zSI4-K5+kpEVLb58s_xrFdXd&U%hwiSHlI80}d|a5UbxW>faP?>o+})xUa}7ccyV z+xYmqwY#q>SWBFHa$YC=qE6C9c7NT7#5MUtj9#~{n!_>AW5%4SD?@L)fd8z_xOVTy z6v|bH(r&vHrbMxntHrehBSPzXI*ED_3#R`1h8OeKI@ zy@&=n$0EcCabo(Z@3`Ozt6wGYODevyB~#Du3X^D3jU|ZCx4`QW2XQ9x?U9W=xe=6} z(CVmJj71DBu{;E0m9<98ErDhlgFjQd;B7ccK2hRiD%1%Iw;)vhWgc){+`AM1QGaqs zgYPGiwgnW&#p|?R^BXA$C!Or%VP-3-N=|YYxm{IBw*YWdS=zSDOI@o%mgdk z?hK++j73`95IXB(Yt)P-h$}x$H;xFkOlwb)dkpK+&mLSr7^ihiWrXs#UJ79zfJOHm zuHUZ8S?eXkWr?y^_+^xrgxxdTxFO({D zt|(7-kn+25aa9gs2)RzOd48~js?~rAEvR;q!BmUJNNUq=PGJyNB`DGlsMf0Yk_qbQ z3EO1XUkfw}>-t0@jgnPWM?0|%NT^?0-QbW+G8BmagGs*kF%@D}zEaUnq?@IIAELV* zujh;Hw)bFo&*8H~l`dP0V^nS;ZueWZzC`9d%BVV?SJg{y$g3I}n~{H`>$>(Z)-9^- z-Oh^K>YRY%E-^iAtm&L!+q;KoR9;#)shKym@x}P$%tgjNrP5SH6K0&G zih#}7Y!ptvwQt(MNn6beouXQgu)Hx#-vqCxo}N7-%p!l<tqGe;7YGK(7r2F6-ults()#Vw-(*y8U|(Jxe-z|rHo-EM9!`)OH? zQuSxRgoUsXSj&8HaW@t2QCv8b?kIxre%5KiwC@T~tmQr1qPj;xvxnY&4Hj{d9%g&{ zv-x>JHF|!eY4yyvtecldUJ{+AEXtRcC#hw{HqDof1=Z^4xIxd18bYpr?M z;UFoFh&q;0U%i`Xk8-_d5SbQ6rll#F@R^~Qq!Y<`1h#2)NDNqSSSk;=3E4`r;Gas5 zwIGCT-W;iL(4b~850r$hu$dwdqP*&mYis!ec&0>7-tGS|hoMtqUog&@^{6$ECw+V@ z(3a!8HojL}b(UAwUTABXsIv2BOCHZBJt{min*(^B;Y6&5;|8rR_RF*y#f_^qkbd6l zE8BKj%a)-H$8e61N=F(F;a-Cw-Gp16i$iq+i*xeZ1=?o`qxq z7UvdUv+az3JGnZKLabjpZ}|ZyZGWd)S}xgE9Ixj#kNFYFLX1S#p@lO~qqGQf6k5gB zP;g_sgpzAOQP;m_3X{gsKxbYtAyH52UoQ0sXA0BW+re>qTngrd2P1! zLRWnTQu2vX|Fx}qA7)8xg!@_2i}-r8&*;*o#^m=r6)H*Zk-RRC(8csbnr?8cLNaUy zn`iPX_RcC-IezXz(45{5vSv=Q2x)5bUbbX$T!zzg_Id3BsBdLB&yhw7 z-81~qtf9tUo;#TsHMtPkLRrT6SW*iy%kuX@i@IEB0mzm7k~|BP4_% z%lqjqFu)Q^5rr{yY(&Ez@6(64;a%u{whKF{9OZ%3p7#0_cu2pzktNu6wl`+Y`j@ox&sx`4iu*IVX3`@*VqbV}Rv8f;F9sDa(4xS;59Tp9b_ zB%51fYK{yPjnR1~>3exD$*+@S!oPmDjfkdauG2P+A7>BbS)8wvJKBm(xOwYIZ9z4i z&^a#d&geljNnUKy(Tefx9h0?5q}}w2R={ts$qduBOX;0RkT< z*ol^ZT)}YtIn;AECUHIQi<3m82?K3Bg(MfXD3+Z*Ckp&YY&KIC0lu(xgF47uXxTr- z`<&l2%^5&{$q271{249axam_Mna2=ke=La+eW|DRHdkQFn=WzB*01aPKs6v#F@3yN zC^>!LI5CMTtcmJUTz5fJNz49Q!_I~WI<+SvQVn!=rM}B+e-@yl$PF(^C(6{qi5NUDMWA>i~77kPwj86-m?jw950O*u|*!{G%=lo>Biy0A>F0|ZR5~kIzU$Z%>PMq-i;B@=az;V?|-~9-!>)D7d zG~;l}DPOBHRbCZ*AoMp3O@J!O`jh07%b7nn1kGl={^9fD;9o8uo;4_Eu zOGesTL{KCYE3x?;k&CHHegY4tLK;j1cF`K2r zTc!p#aXUAapfE5gC*kri#=}97Dvi4ftqJYwOlDFKAn>c(yv+2n*PQDOZc$dBPRIE2 z*PIF(h_IhF=%h3O0LX-!eeQX>Fch}x3@xipp4O;OPZoAx04QhkM855ZCV+aCMdJ~z z3Olj-ETeGB<*V*Z#49;JX8ryIoZVs4^c65Ee#|* zmn{o2D8Y+j7+81N&%-Q2tK5|<$FYa9;?CzLQ4n~Q_4R=QPfOk?g>kZtC zrs>)9hJLZ#stuclV?DTO_|1IfVWuqbX5;Q{XlmLZs~ektxK&NLP`tD6ELOXlrd4Nq zt+nrqK{W$S2*#WMxXtV^GJ4T)%pp}wk|7H6iqdyWZJ9-FgP_5W`d{D$0dV4avLC=JPe7_hk+mPhsx!-^lO1 z#zv3f^PY+pCbnfJYEd3sK;+%9zwz^7yuK*8A2*CSZAnMaE5Z@(DwCX{G5)Mda}zI-~hq<>AUPlbFH8 zvu}UZvm#UTqH#7aDbe)^eGKt-c?2-IaN`rpO6r$jwMVJE?ScP-3Us>jKvQV+x8*N%z5Rhl@J`_8O#5ZN=?bw6;bqC@#N1 ztneyzUbns?dW2EIYz492dYO5CMExf)}UXwdHf+}PM?+tO&FCz!aDtsLe0H&|cgV+daT z+glUITmH@^g`=$plVu7f@za+qK0Zx?VaJ{;t?#$u)7}VAH7mnl+dw@+E3|lR2sW?k z9R7KHi8?aByqHp7tVpT6F98Q$n)>xt+LG__fxq`yBL3pC7!1g#O66rXu5iUYMbQaxrLDQSkM3JDys2AneKPfwePQlN7n<-|RvM#n zBfQ^ru5yW??FSk)3jrp3NmRg526}LU#%=|Z>m(bToR)=*i)}ACz!L~&o8RZ}WZNun zugJLunqqp(6TnA6Q_Lb#kN+<7f-AD-t*U-=UW-rW1D5U-9augYJFuGDg5JSi9;_t+MQb|u&v^{!Il!F$T=c`i z3Eg8Ty(}yhWj*0hD5^CU^<~Kzq(|d2{(L6LA#&FJfBoj>;I)0uW^{8%mQ7HX zn>Y@MK#7>LtVA>bO2kt6l*226@IKCbbo+o7-qdqAlFy@&A-+y>GJDc$Y2Ml8KpObM z-eYgEHv0MOWiYpX`xMQ4{6Z;yBYe9qa^lRVK>Xdl-^&RX{iOn!rhyfra_QVJ8JdgU z=hvNtK?_5GiJ0#O59??GL+Yhj=$`HQy;orI1kW5WXy3bRP9zZP(vgmH%jFCmbP5~& z?=C0NqrHp`?5lDjs1lDkHa{np>)A1-Ai|M%SZ{}$f(INHd=lZkNRX}3zw)BUJt0M3dQw)@YO9&=iH_&0h#`cM?Z z{a`+-q-*(p9CIru<{f#tBIbcSbB1AFilCXPq)hKzym1ArS~%?!ft@Ojs{&2Lm%Eq! z`Wtjik-)|NMdGbqld<)eQ0hx+*XHGAw=co`SLyx=3uyNTu&a;$;NKQn6XHxZFV#qk z{9|X{y^qQuSoG^=RW2>Syad{J7Q4_#e+Oy#*{mNf1=pXX6bGoUI~a}cDlPfi+>c-#alOM{pI@|N3*HS2N9R?Mg^Ud zxD-p*R#^w0nO0CTVQGy1rRXgUMekU`m8HWqw*$W{{Q=F^EY0FH?Dn5!KO~KJNG<5XYH)z`Kl~PxN!eC-U(D&++%17^u8PjYC9}O;3ms^ly}3HB!i!%TAsl7G^o- z#CQzCk_BY)b&f@4g&ulU!6iBu3e-@8+o%zyGY!cx=B%z$q+paO zW*xQXvUj4NJ>Igpd#iT@0nT@7BNnhQF7Z-YszU92B>tuZ5sWy+dVoFt6M85xRVZ7z z>wm+I$tLTUG`u@Nf|g|*d$C^9f^$z*rqpI$((})vyyxnYR{?^}AxI&H zOv`u%RiQ+G4Ctt6}k6ZRt#Uo1tNLSU`u&pol=jtII#@kA#2b1;W=Gz9mbJ_is zEWO^{%-4N{c`~-s5si8N4fdLWMxrZSDb?5a9Xw+WsWEgk+XQ96^a`SGXF%qmMjP;{TVKF~dLNdYW(b^#s5bjj&S z>S@iyT$pt?Y1%s_zivk};YH)+I;K!fn)Ht+p<fAuX&O#^f*3c)kg}mxNIiSB)@UpKHUn~Z^RX!j$1|EBRXg5FVYIg8}g7>0p zw@*)UJFfE~;YQO#-PRUL8R#@ui-TdA6Fr?=$L9@NbX8#xJWg~)|4 z2XSR(@ZXB`8H9Jn65P#$68;0W2WApT*IS>+44hz4Vh%w&7SgqME1seuAfJx1Qkt|TefJx33d;&Od^Y5uAKs?1{EpLG_0e3~pGE(9IB}@=v zpff@wdF$s0k_LR`#+hTk<>t&9`=fQx~1mI6z@!h%JJOGtca>d zqTk;Jr)IQFsQbDNfiPXd(^s6WUVM$lBYXlb>^+&Too5mi!}x6A>fTTB-5KYCnQ>ME z5J(fG6V31>_e(&_IgavTvt$uxV{Ij$An}mjTzwDbMlP;OxT)~)`xQ>Eb1BjRIZ_uy z{66cWKI;>IZG!iElm;gCNk$D>mMiND7qGuGFV?#t6{z-+)ykmJXubu?^QmDg^8A0) zHrjX|J~xS-)8cc^7z49f@8jaw&#lg0^lTBWnO`RfH>KOvONm~rM@%gu#+GW5<~iE( z3UYOFBx(-RI$OR49{$ZW{^AK}4X6-+ICh*l#dYBO-Y{@{es30qn9qKXL_g+rn1#ZR zwj_MK_w8W8)y?)@KKI8Pl{>jQt=V+kda>rO4f09juLUU@zPq&Bkm}Yrw6eC-BQ)UF zN?51+C^T#1^f=qgHGA{3m7vr}h;gP&XHnsK!pfD-+V?&NfvlEfsI=04&i=r2q0DS1 zntf?O-;3uJ4;iH6no(Qbe#v!c|CwGI=7tOE<7}bVT^kT$N>V+a|Eb1h>`lT#=6YOx zd;-z!63uHS6AI>>K~R+TXSy`^Z-STL7N(QejG%r9m|@85mR_RCroCP5{%+Wp+II1S zL$|F}M&{J}VVOd7$&K*vAeqdj@od;+O!hYYV2!8-cgA+%$nLGGf(zrJ*lczYB8Jkn zlNg?K^g^9U$H@CzSZd;@hiJm*Mb}pG?zT-aFHOoazCBw7){8BAH;69(a+#&NUzGUH zfldwBK%b25TGRMXB8x$pk}zk?I-1az=q4RQwba8Fo}Y$(x>mt?R2JOy1%eBQ$Y;}B zilq+P8|BHCC1``!O#pUOK@sWrx_bHu&VC+dow-i3=){4!F1o4Tm}*{oftgzZ9s6?# zH;T_6b?k0`>a5i3iA!?ypB(*RtsjH-sU}TYx@95PrIT4_kWSXkf%_;6pL?Qd1p`bO zcgFQ&4C(UPW~rH1HZK31Z8vfg+|K^p@-W@f5K?~uAe-FN_Rg)pmE+J{va}iQA)Fo|>+z8~*R)-6;uL?)5D^H?$-t2lXI`azKO>rv*O(L&qaNq+0{Y3|{vY^BzYxB-mr zMU{~u_g^q>Tfc?Y9jTm!GCR#)UunLg%%hrNRK+rRh_+ac6SoPt#nA7&IfF+>!ypjbXgNW+sR*q{&OX_r0 z$d{w2r9$JF$xYS&B-osyNYb;1BHEJIOP)&=<>1zEA@v=;v^9lBE2SId###^cd!d7K zhxkRhK~nYi{P`VXl@tL$Z~Ru>#Nl#?w=Lzg!>?brQZOZ}?zF-W2JZ?^f{ZFzkAkY!q&ZS~KqvE%+2@^-XQ!PM%z^cQ6KGG^!=vq#!Y@_lPfU!eC#N4-zb)uv0S> zG5$JVWI3}9nDPG1kG_>Nf&RG1ZBD+tyAEGIe-hG6O)vY46CbFUeHpuu5} z%iRQ1d0scLXv;v@NM5(-{Z*iyWD%o1lU7bWqMFw6n=&qt4<`+rAj27VW?XJH_kbq! zuShn3A&Lt={tDIR%4nVt$=L>Q$x(=nc$gC@p0>_sD*9-C57$|0K*;VqyLFGHHlGy$ z5O29|yY@F(!hQa=zE+h3mT7whxFxr?xJeC(2;UQKjzfjbFH&} zN-ezAJc$pH^{ulq0|(oFh0giASb9Q2vXKXhxFXKJ6 zJk;|D{;dUwwU!q18@aOZ%QZ!&WujLrdgK^tlaqYq0g)J^?klh41=FjzG(ofaCM8B? zEDO*ob+zr2nDs zE3hq!5lQ&t7JK%^c$%_EDer(d2+kVLJHD8)o+Cy=09o}h2OQx4Fw>1-D!bIaCC`ID z_1D(XCI0F66zwlyM!)uxozGzRskBn|A`cX<7C{xgH8!co8}QL3dJoz!@K#+c-qr4% z4PIeLt4yFgZ1Pz(O!T&K3&S@6e-< z>=r5;|0(*qzn?r%VAbL+Qo+J-Z!TPb>JI5tpFDGH<%6GS|fJp6-9+}h$~vjHOXVV>(PhxyF!w= z{F4G2@CnpRykXrL4oStsPoF_SA2Q%(=XfxQEPI$(wiE~;+K~5U;K%oMM7T`8vyH;* z-^~Txoy~j8#0=6O9*ZpTU(>$690GBZQuR4s)oHK`u>NLfP5)xMsNl#9U`QT^i``W7i3uSstBw@q}YSCX~|O3XWSS6JGAl6=({%u`W`RTn;LKtBVi^9Kxh zT6G)AOi~ID59vVJ_fDa>0$KfxKza}rAI@JU;wvz{!|p!6+I6@Pcp5=4Lu%pGiS__w z?S;zaoyp*v0q*89_&+USi!9{CG-pt5DBEj$5Ofa#9c))=3>gzFa0d3VV|)9^n9Qsd zx+D66GvF&a2OfWOuGUk1VDdyJ) z@s8b!cr6F^#E?o}vNdij}(C~D@Sec<fzkdv$`0)GgiU5bhyU((sY3s<6Z#tVywEUxY;n2wp` zSL2-CwAGP6P|1PMTSQGXy_LkT*umt1`ifHDe?5(E;fLR8-n1Vn$!&9vu4JHdEuuvw zNRHdpIT$Uq9c*JgV=e|2Zbv}h=wC{!zcm8K4q1{*)$88X;U-3=ycGPEQ%;sRsO9^J zqQ-kx2PK)SBg~K~SN&W}u|54Z)Ic&`dDQ)_@iV(?U%ZUN8sW;-!($)|i*Q(Pf;&?a z-^U#Fzq8LE{US9=>)yxOMXYjTMbiCSXR%wi4DHMBnCN%B4k*YeKhKM#epXxU?zU(0 zIZ>h}GwZzRgQML!_s=78#6(0x54C=c&us36ADAW`0@-(VD#`r3KEi^V3Ge^BRwi-m zF0|5i@*;49Na~KivCQB*>g6tz%txR;BIVYR)=de0>#^H4iaByM!M{%5EoV@(BT{0c zS*mfn;G56c$C_Ny_VU>HO_#_Tq+7HyPlm4Y!9etp)$^4WVg6TExhghsO1s#>a_^Cz zSzxME@{DiKSgz&eirGrP*?B1Fw5?=Dy`2NoM4CwzJ57wdF2kdDL+w%*|^FQw4$$D%(4Tq~Kv zCgJDE>GmK6PR<`8YW2Pr2D?UlFko@tORKEE93Y4azguEa*ZRa}hnI=lLcZp#WMKKV zn2NsUM_OJHgZ#<|M3d)BuAxWYSXMXTPd#FshPcIBcL+#3(azR zZ>N}H7e)?G@-t}l_(oogT48&7RkB%np#v5n>UepYxeG{I65zdpwT=;~v+2RMI-*e0 zfDrHYlxuqbjfGa3e=`SSH*unUDu=q0Ffnz*s}OSt)S z#8}9{BqBY|St$f+t@=P~A}c5)3NsY{}f$)Z;H#4&RhBVq@94+NSrDFL* zQjC$3v(gmri)ws{DK|>6d2sgEV$qR&=h^gyB-RagVRn6@wP*Hmu>1oZBMdH^H5Ubk zl4N*mg&Y1+G7OrZpM`f+7Y^g7k32!`bHQKm_vgtwyC-@=5Nl|P0c zOMR%pl9Nw|v_-1k8;_E!x$gu2Z{>fD?US8XUN2|i36ke;Lg|)v$q757h#%u%Qouz| z7sgqJiK>Cxn|Hy-{b{-lWB+5r10bVSTQ^d0eJW3-B#>W6$(wOqz(T^E5xzk-vWQpv zx&0;?`E`1AEW7r?a+Wk8dOKc@u`+Jh-9U$uSRX42K2$=@%UdAk-MUOy2BN(G=~qK= z+x+$tZ_j{u``euc7UkeCf{+2!N;^h*3j5Zq?L}`Z<{wd;8;+dgz zWoF!40~)m%`QHj}8ID#~$eVlzqNz4P4b-vB(`K50r`l4przMp$^lE^-fsRpxb6%LU zNeuv*kBIi&=k9$BheDudZu?mySM#8;1E=GoKghx2pDxQl(r#v zhw}F%NZ)Zv22ZiuWU;4?@*FKeA(B#b{T?6YzNX|cT9UXRj1}-*(_6WaNfcDQ)9kCn zV^V@LEc<@pOTZ6YKd6p*PuCv2s&5c$OC0_V-&KDH)R+mwPkkcT z1EPvuyr}P=r;S=OBbfTDx%$+bL|9+v$h6I73>^Ki-Ct1gA&fo7lZ3m!6OGBjtMWCw zPe)}?i>p;k^QafFH{_+#TisXR+R#;DTW&_ftYQG6|Jr@pp8^SF`H5|1JJyOJ#GX*L zgg^y|j|aRc-R zBQI<5N}4eef5|VTYhV7!FPzZeZu+a3jO=~9jDvoxU1C8yNvKov{g(7zukwNtmVfWj zQI^#yk+?w!=3E3efAK})-&)ZBM#TM~Hl}egzUB=ui-SeOVGo2O;i(`mxtjs{if3KW z&eS_x+TngO4Fyb#dwY3efkF~AQuc&=%9f$w31h&L(xSmpc-Vurdy6KOwA9psI>`SX z61Yuac}zt0Tp<{p_NWM^1`JZ1euzxw0m3|a*D)}LCKtATVe>6lbd#{0P=DW#%YvbP-cT#*45gKNq%$oopWy>e|uxt8MWimlK}W=)VTp!+wpGFWM3H>j6UkB zyw|>XCb6VQ7BavUY9c5&uap#TJ~G_ghk{po&6Mh;z*^nZ&_e+#$CsP4!(iJ*#bf7C zCTe#0IkUY-)C?cy2*KVyf&m|)xlz6CpH`V0|4d-YEhuRa=XpaoL(!Amp>q$$`q&RY zJyyz31CM9(JVZ=58+3dNw?v)>XdA57Yoz3gEE%HD2#5t`Fw?giKxD4}y&HTn$M-{N zOX?Mn!lCL8Z$+mZO)&PU&r-Sx6n~;+-^Zt*zD)sus8nLHWBSnSl%RvgQuHU)4r{c! zjSgQ>5*POFS0SX0NHQ>S>{?p}x!%MyKpFkW$?gMK+=~@C4hc!rKqa;L{d=jUU}Jt5 z_=N8JlAoPW3jWV&nibLjP~&F}IjvR6d=VgN@otYlXVGDPwNwMX3nKKug*@pJUSFQ+ zO*`9P3*P+fE2w?rp?G@Iu&T%tjp|TLKuoDaF;L|;-WEBx(UL30GZWukgL$y{L>z4J zNaOst>X8x5MK;9(7mxB_z>oQlV=mT>pobEfA+0xeAF#xq5+_{SQ6|_u3Q&_RUcEsv zW-9Mm0J>*uHJ1~6l;^U2bI=$#<}?N1WOyAGQv+--i}3w30-SjRRYfX<$ATX3xK8-- z%$q@o_Hh`-Gu-ak2b6d>=%6l>Z|*S6k<$iz*R@pl<#EFOR#~%6WrEtFm;445OEr)2~y&ygc{jr_5v?vREW)L18%)I*!a?s69#a4IHg|BEt|S;Qb1oZCC{jj{na;BThh~+nny4jYU-Ye zywSxmsSOnm`~oXH!)Kl9yNf4@-Pywy^2T&Bxzu#a%V{cuc{ znRg$5l>e$CK&TqbPX_QQc-8?+vC#wk3rZ#WSryE0N6|jN zBatMriW{Tp^1->%sk|Y`O|m7=MQbO^!S4EC*f+Ud;SE6c_p&D$4w#Aml{8vZ1laFf z_b*{tsTVO2RJbp1kTq3JD)(@&DtV$xIeA`5(SJ4b{wi6!r^K62Hi&jOx)1MJzq*zJ z+T+tXMY}ssv=_dOeM-J}q1T|pae5O!+9@REsRG`Luk5+~&-AM2v@Cv&-TIVG>hcfK zNARwK@%S?h@54d!`{jLL(A$$8ehU6Y>O52cykY`;c;LC?=GAL-0o(S{ zLN6IW%70OY>vur%V5+|N%qu-e50d0Dyp6Txe^HGQX+2;Pg^ZhWyyfflAn^DHFRq6< zwP!c4FX?(Z`jBS!o>Ro%eF}sxUf_wvw z$mlyehV*V8GV0-=mE|#F=)|db6oBi@1z#^3?xTS~F zzNMs)v*6-7!3_Nzv7P5auyCq_uX(G@3BV0NioI{y$$<4C4=8uotZPTv(|2r@P5qul zR%`WqHhbGT=DkNN#!j=XWCh#eW)}Vd&V13j3=+AILH(H&F z8%2&gkAL7l+>w18H)$m^AX(7+0srx#5Jw`_5zrI0D$f=DHtNUMl>k)bhf| z?)UakU>kb^SO*t|pC4Rg5To{~l*NIRg!}p8+WJZg7tFjSdYMjd3qROo_hEDq zR89TVUve+*Jg=4_G(0sr7vL;1eZ0=R-61xz9{%&xf(J-GxAMYHz7cmlqaj{>*sh zZ;4a=Ffw;xSN^Yzz3RV+T^L=un`Na|pKx%UBK`ip3XI|_aC4Uv6i}?FDkM~Fk zOgf9LAIeZ!(tMvUG%sbGU^_+FZ_SjdF=4ge1!<2R{LNvVVis+?*XL^D%*WiW^=B!2 zFDM=Kx)U?_Kse?Ax&o=}Vrt~suk_uy|D<`M05)8$C-b6l*K2@SN=*<`QB8{(&PYboe z40Kr7ch(ipyuN7<@oRzpG(2$#*P&;$HB}-?-?~7}vqo{2ML^zoF%xu5ZVg8_sFGwW z16OteIe{DRdoyqS46Hx}y=}EUUTfvN6GX3Px90HllscSmt@LTM$NCml!(_&IqO|Vw zyU&cgcBZuZ&JG_3`p3hfW_7UbW8fR;yT&JW;UcVOz^k%>B!=Q{Xaq)!Mofz{fqYO2 z_(``REIvBvW1}QS8#EPwCfLUsI43BER-mM#P@>{|=iLl8T!LcjNn*<75)@z3r+b3e zKI^~z%;G0NR7aXZ_NwGRUoYP5WsoXf?nAyW3xT#xhOLJLcHH zD?wopG`p8-w!fX*70AarN?rA(M7@V8%#S`P>c4KO;9APf&(r3s+BG#Ij6&Ld$+u#0 zFK|`FB#<#vj(E*~qa|-+Db?moT)^75U7*OjC@EvzqWuMGpPZxfM=xef&Nz@Uz4#w{ z9YIP0(icEvy9v-VBKjMEuC?-{!81rH7X1aGWdz$9K%!#>W-j*$uMunq7g$`|Sq}V3 z27J?*Yt~~eNoU+b!zgClL#|M>CUEFH>BJ5UL{6JQVaw3{Z*C2MVnosQKlGLCW*W#! z_8sN?0+E!BFHx)cvWXI{a;Ji%x#hGTY=T3HXdHT5&NNCJGoIPG$l*+k{OQ zi-WTtsy&qT=q8KL@NphI!ljIc6^^o0P5{SUN^Up4{3J>3w*aIQI>5^~&_VX6iq^~} z84_8DWeF;2wzRO;ae_VlDfysQ>)}1qj>wdU;YzFN@YFjveRdvi>hZ-rBHDf6IsRoz zOXEE=5Wi6Au~KTnxrSIUZ-pM|$V+(v2<^^AA^TE9d7ePmEy2xyQ4{=iZ_Yf`Qc9^m8d*_KsO0 z&eAnvQ5WVnYy0x`DR~0C=4h&&#i_6``-+GM#MnfL0+=U#dkrY7%-;jc(ZZ*?FG{+7 z<`%m~b1Nxs4j-b*gb8}GWm>O7bfNJy6^w8Of3Ls-ky#CbC4XiF6ubJbdEqG!L!Bj` zkY8Bd+e0#Ry+lD?Xg$2cG4bK-?5y|#c*O7Cy#|pXT*w5U=Z#i%@ZGX+o~)N)r#|Fs z9@+%YtORs%Lw;sk`sMd$jU5tZlAWPRi^b?N#NG*LibX1AQD7_y?%nGtRu4ShG=?Kw4spcgrty$XSZ4_=Tv8lM6(;zh(5 z2}KEaH0|-WbHB9!D}WAAWHV-?dQxC*N_jTZ@uInTP<6@Y(Nql$!DI~T#-L4}$4T>U zy}ucBlqWwRuO}&sb}sVm72wyK@bz)}4HQvkeV=8$En{uzmBFc|VP-C?h06*WvN9+G z4Z>yu`A8er!(x>=!N!~={=C)(?E?UX<11zT&KmE@u{FoNrc+(&hWZE$hkhB#xN$Je zYYIbm+B;w?;B+_(Y}Y9t;LQsf)f;81_8^d{V>7jVHc=#2`)&~a;D&!WY`1Q@3>+AA zck)k9mDx|sBq5YwY{Z=1H9%eTDF+w^@K8k|_{P)S8Sn%ldaU{ewhX!k90P2uv4_cu z@ys7--X4C3ZXq=e2jp9?#3-p4ZpsoRXD!m%3bI|3rfPnhGak~fsW@rcVqPI;SC!KzKEdUcWbKRF8LrkeXIYf7aqCw7zz!Mi>@^`HNdVGzV_f?fDi7ZX%8)LvXUBc*!AwEc#bi> zmKP3dy<&R6y46Iwf_-14NfBD1!4?tYvQCnH2RUQ__0#*7r#P0F^~Ye7j)9%EfNXkf z#0yi7z>83OU^Vd7F)0g9Nl1uPK#^H!hi$i=q=NCDUAW%C@Y0n(3~5@Cc54}! zAh`A5diG81>l-fc8++n>QQ8MAZViYA54XhHl|l!zd%%WHk9ja)D&*M z&!4D>RJg)TE?S2cM^-<&7W!)%=mxr(?mI=1s}q!~d&Bf|z$%L;U`YclJ#&loTt{_X z&uu!IKW1Bdev;HHO&f{~U@b0X)c)VTH|Xht@ml8>?dl6qO9t%D%xj8h%a_b;%C1rr z)t>XGsCfbiK3zF`e26Uc1hUm*Ox1PTVh_k?)bdAm**;-CwU4d6?bY6xgiA%Q4wd!g zzp)$QVQg%~a(G2zrP1K-!vOHYqPXwgtxjS*tIxl6@S;4|u1h%w)YKLG3Us1b&rnxt zSSJu{CaKy<^f1VeCwJJ?Oc?DTej)WGk9$bt=W0Wt0htGX3+>QQ5f~WBBfE{XG67Qr zUr_P~eH6hm9myqT@C=aGpUD~KtUElBTkKc9u{wwF4 z*Xud%=RF?xeLtRptFzwvrH{|GpJAFFp5BgXFNDU8`QA^)D@&t0r%mle>hUcFRQ2t{ z-43gcCO$Ubga*d~6{}jK`@4gn+15v5@S#v|ujbiofE)|I0@ zCf1>*)z!vp+NN?T)s^88ybh)Lsv-}J zFvH#X7adJfD9*?vi;YvEVuyIB?@0i&Qp_|a!#~*Y%19>zF0+&;XmXe4S9@Ea)f4WB z(zR?a3^*V5Pi3OCSfy=RBqS@tyAb#qjqqT@xx=00Oi|Yd&Rq2&>UCE*fv_masmACFH z#@$&RR=oParM=Yl+r6{c^)DgV%(Zr1NmYR`I~B34$s{l97Zw@;O-hz~p^X3QRbQy; ziiF3qqr$==AScjwGaOH?5tA}C3Wkz+6vbNV0Ky&S{))TyE5MEr(fQrtjToP^0lDqZQy9OgKd2^vwUM%Jd z^kOGzM!H94H2XaG&gmY$`i*7Pr7m0|s5H@|eWo`waI(GmU_+sY_A{?X2bWPjhVK43 zb!U1<_o24jV-SwpdsTU5uvy~F8@rzj)??#VRZUWz6??lz-a{#qKjMy5PHT(j+mN+6 z>uv%P!KJ6w{4pm2*`rYNv;+e33FXxw!$26u5BV8KK>y);wSV;q zLEl3FSGm#pHtGIc{&qEiHL1#?`6zJN@PL|_i>U9MEsCA3_b9#O(S;3hcYFZlGH)46 zZSNIg5|61r+DywA<)NF+W(Wl$d{@(t&Z|Ma0j!Bg3~0TViu%0m3n~`p~qVVow^lMB48u>xG9derFEf{@n#)ZiPD9$9@afW zbhat$ZM-aHvl6`Xn0e+5JgMKZMDj|9W6W@+1@slHU$)6I`LdpOuUbQ&D`ip;!opa? zm3}p($5At8-_%472-ES3zZ55-E-Og#Q6(f@?%IT?+}vtCmNd(Ovv!pR-r?3lGkf1J z;SB=3S_U@aUk0@RrY?g%ke2_;TBs@=)GrfuGmal zV5ADx0fNfeZ7Fut`5uq-ih^vG74r)t+w^e)QMwB@h0vryAAFhS9K)@MG@=< zM3v_kD3rr80|v)Ng#wGxwvVi~o76n0pO$_Db^C8`cG<*vyMJ(0_&(&AMRCIcbF{Fv zz=pZ2jjUL4ld z2|62=WV5x+=Awl2GEYUna|gx_41h}zW~gNtXRj8uB33iAaC@ml@l}86uuS{Pl)IA0 z+PX~4u)~Pk`?C$;cf$?lnO#pDFj1vr;y}H%x2U3Xz9e&D2|Qd2&Hq);jI@6ow)eD; zo!IVB%s;SW#X~Z?u}b)m1mk;@c^E`t4PB1gs@}5WjF85+-Zw=UpW*w3co1~vm}jhB z8)}46x=fLUrlB%ng(L0s(@(_~D=NYn_80U^ZSB(YNZn$Pc0mQJ4ngddif(#n_YMPi z|M>cyH|xyzZVy3gsf!K2Amvv~-}%5P$~$^}x$}-*rz6%lKto&L+37C-EgoP`ULJjTGdeO!8b-6Ap8?2QZ3lP=; z`1-f2b_CsJ;FX8CX_zV~2fp>fU_R>#K<7{r)lxjtD~7bIVEvC@F)q%Jk-+j>Ej#IS zEw)h#&)jObF@*K=mkeULlf?2)P&{u`f?u&&LDK)kM3F_+P-)`ZF;BX%!o4PeESJ0~ zeamc{IvR7X`SwE+IYnQXZNY!SdE&I>(Bn_~y6C4(MalukFO++Eg?(^AZcv*~Xc{@L zP#D-P8FJP1ljG?!9+#X+uKNBv)_pewql7|hS_YphxH&eD*eTwl9Ud)w@$7y1#rhJU z7M=dM08#dTWd^FxlNjPA%u<10q{0&SO8JwnKC~GGyY^(6E&xkvfu2J#NgJxY4rTU@ zN2V4(k$I8Jo$a|&X!Lq7v?@Cv6_yaG>v7QT}R3Q`_2bV1t)8con#7i#m#vr zJy@8&di@?1WAuti%&^2l&x9+4SY??~9_xRb@5j|$F|L^+Zj-C2b4d0Uan9vNEvh0w zaV}%ZE+@R#q8%St!Xt@Ij&3#o}jefabODqH!Fa8xdmBYG>@N z6lNH%L=v~`ELzXKDj6NmX4*U(PqI2%*yXgJePRa6_GUeEtTtL`#?b&=oo_EWGAgoG&cKPhei+8)Ac z81(Uy{nL>>*vycW`n@!@3tLWVuK>vPq`X9;utp&3=~cOc=H?NICHb|Q*9wq|f{4En zzw=-s2CH{zszbhf01CUW7gWf0C5-gmg>z(WRp-|>E!fvGS$Zpa*#YWM12a}`mjS5w zQ?aW}cpl1SAw@iSqhF&viE?2E!|)Ro2Y`W71+W3yAB{qFyNMp(&%`{kYE9NQw`*{L zG!*DnbDrx&>?Gi1Kg{6e?d9};=WvdoA0EJFK=+Q5BTyG=iZh2$3pD3NvOaIIlc>{8OLXg@RN9x=MFqW2E%$xkhFjh#uQfGOj9 zdNex-aO!yuujqXJ2P<G24uDZ0Z zY%~V&kx~C-m>c<-1Ec^9Ly5TB$iW<}-K)BJD1$sYXjK-+w9?$`d-dMg28cP@-6NZL zMi!>lUWI81O(+Z>?7d{gAWicMsd48ki9!{%<}*4!H&N3+xALoZHS_0K+OZFZMe%{TYPK=Ctj$It zB~o=}gj{p}j_>xO%?fn)Fbw_f?$MP+x=;Vz-Saku!Nk*El1Z8Vt2w=y`DyRH#!~SL zXDN^6lbyP_JaM|grCox>gk0<%?$wM2ZD~)YE^oZeha2B~1j2)Z5^a^23rhuT>Zpe! zx^k>&A32Btl2K@Nc9pNG=zR|OW~GIz(NOM-B%g}T$PuH(bcl9xD*M9Cc4_**OtT@( ziI6xS_eFYE<7Og(Rr1ii&YzL>)Af#}yfS@$v^S0%#l48TFOW{%V-C$}fhPiwPH@Jc zB$`&Yd%(dQ@%HSxct9UFA7$d{9&Vy3~XF2}d9sVGT&SGx+?3 z_Q}9BO+wBE|511fd~)_a6e%`nq#>Q9g^TC4GRV_3HtOQb7(pB8tP5wV= z#DYm*YqA=8jh1MPZ4`?HcC>p6@@VH6&YkJSQ7wL5nZ#oNX(rfJc?`A;cS4Jpj9Q5^ z3We2xTL6vUVNPyPFd=r*@msw(U=zRTf{^XuKZ#dE(Lgbhrpk2IPQ!8a)e6U%*SGcp z{bID^X-m9t@teW#g|(Wy2~$RMz<(_a82+}E@lx6aZ1=eL>dp06Ev&Vh*uxha_Y@E( zJPT>e@5A4S*CrYb~7bM(XL;>C~FC{s1nrRG_fa514I=k74QZjcEa-oqkQ+RRP_1yi zz1j=X+o@(nIJEeWK1ks!C!&|;AEpKOI}Gl@RIsdl-Yq9SaTw@s{@0ozdAI+dEs>*f z8EnkMAdZFxC34a|X4##Cx_dnZ;LbD_$1@59Nh6d8)@b9WyagSHqyio@7BX!{%kZml z3EvlpIHX8E+w|0c1toOQ^~{|V!9NJkoOM(a^PKP?yukjwksCFRn_=|h@%|jdj#Y%C zuD$%o|FC&~lEP@q98x5bufg)x3BocwJay;@L30oe0KTevVi}*UC#S+wwCzi?R3fbS zZQB3d&o=}e=`v&O_~rHeQE!GdJx9=C{+|YOBY{uM$)holpa2n4LO+d@P*R0V*+>nh ztVq@%3;`dbR>r27ng0eFyM8w;?TMF*so*k z8yLHZDG`{|5HhKM)oij;l+Q0mVoqZ{Z(tO(GY0x8z3jd+hxL^k)#Z*^0l@+?7C%@= zwRAruOO9ykNHAyC+-IAXz%MJdB=Bz`d%6YfO96D?>_Uv063fA5oD#67pt1fh_mn@k z8mS(|*F1n^q{8{!pWfX9wU5$L$w<*EjGzLJlIs&;G=Al%!qL^rhBK9;>$o3Y{C9&V zyQm-^nAUGf;7Gy?kQ5t2Go7|gOTS>3mdi#VKT#d7!SryA&xt~F3F)(p5d5odpHLR| zuQoF3>jFd$L{_B6W9TTfBK&KGNlg*Ok#>{Fkfx0^EwH^a-$xW1qq^gnu+>+dzGdBH zkXZQ80#t7Srwnenj2xj?eTVR?o{cCD7v~Ayo(8 zMh`L&?IK*@S66y-Fq(4{0U5zAW>;HfRb3IEnK+=uUOrOKkcwm}cLq82NJApT$-|!@ zyLe0Jt0BlqkX>Z`y5N!jYDcvG=QE;jIV+cEQYE+_zL4~^D}?O% zF+`u2h}3WRN`#oAcz83%9^Pf(;G?=jd)SDY`LH%M2^}*INiY5)8tg_I;!aDN5#^;F zUx}svmm)AyAVKW(C~&@LA*On{rO#Otp%+Yy4#Nb%5g4^NLpTBmIgWkGa#u5GC#wzQ{u9FT?cz1ARtE z=DAL3kl7R^YFL3(d*k!)00Z;RSNdmyfm4;wBb-rt#7wCb_!IR57bIi3LV6}4m)two zNt8VNVct)(xUAN!VTPs9yeCht$q2D4sl4!nUvAvnjamS>1?d0QUKMivGRku zg7rMCIFZ2f%I|td>v6nVsD2Li>HmcIyqc5@d^)Iw{9t)a9#xWq2#S*3({^T{OUfTJ zaUci@!VasDo+?b#lZf%z{u_LIMYUEyVtJeYU5k_@ysw0RM7lipsfFO=bhcpHgY!JelsWZn(@Nb;RP)Jt_x7M?@X8NfiB-W{&8 zjW7&?u7*0#FZ2WfA^ksP3`O7Hw^pK=E7+WB__4ikAf+}tt>WawJr*rj&)w3wx88_|PxVr4Yx;bwjQ5%}f%fW!q& znA1*#4T{BgJa<80_AgaCF2$OzdE+OgVWzDM_RDCJq}K}(;Adv?H;&c^YU?~(glGXK zJA@d5;Zb~tA_zpw5yU~T`nxLVzxe!QpSB*s3(*#YLfAMW?CZEOzSYd|va_?ZS>WA38>5^p6r0wYK$OfBby zCDPuAY%3M=id(#YyWfGN=VAvUt7hDhGA#@_m?%TX&(#{D^o{PNKp3r@f#+2qB|nac z_^}WHO2SUCB9}G|%^}P8=VdUWG>fAs$vmA5HZci@g(wUZFn{`DKGa%ZR3|oi?I~Ww zj4mL0BQ>c6??i1S!P8TB-T8Z0RXzjZs0Li~10?w58u#q(%a;LXFwZ^0(dtGhFbeDD z2$2xEHNuF>@D8^EK^tmlH({LkU8m#w)gXsC4rH*3bDudU^%wnxVxo=ehP-u%$8#BE zb#~^a0Aa=Wk&B`&IxoOZ|H)_Q#D%W{dMoK(QaTqZS+z?Ofx`C6pAO0-;~7%rOd#y7 z0+<8s%YuzWTj>K+ZZD_%OFRA-U*jg%{0->qq+1vM+BYJh`X9uY2)PH5WEl44ArjNj zT|aex(?XD6LYRI3r+>-=N0t8Xqq>t^uYA#VuAZ_<6T7~~fQe!$&L{=q`27bl0uMGz zfOaly$m29CTf#1T;dPSRU!og+yV^Ng@=DZF|5#e^CnBG9cy&sWFzKf6RzHTHhwACu z6TJHs@QY41_WX^OlK!q!pnr?rrlrxqQjQ`?h!~>Uyw(bI;U?Jw!_iBIsa+>33%=%t zZ}@_7FlO)D>`{E$C-thQsFZ*$=L4}Qp zl7w9~;viXno57N`*3=pk`PO{FEF1!7HLKG^6M?8Jqdn+sow_<_Y{6yO2T?|K^asM! zh-xf=bm(CEqNKsP(wy`9kM|6Xy>Ia|yIq}2ww4^T#DFoZ`jUBF`KEUsc)wR$cOxW* zgm1t<)Q|u`N7kQkXWel_qrg{w&YrWjb6qhjoET^9l1Un*%k~KZE(PyvQD7}ET553= z(p(=uvF29MWdFknWV>)M{lM=>f|@~ij9R}53giFCe*rDLormNr!u-38u-QIN+D;_A z9@qTb6@)9p7>c;B*zSm1(18}}1Aj2KyONhr4}Bbcv*&@^^Bk530G-K4H4<*ExOBlN z^Oc{`BBhd~DsE7#O7N(X3Bs=cvvWEERed}f<+`|(~eG9S|U@xxgvcy!2jwF zM=y}#$+f?^VY84HXYoZ}w=|%&uQ>{ZP9EjQWi(7*7W8KE7#!yK6mU64t{QFb5J67f8f2bQix8>*aVoEy}Ghu z?*kyf54al(lQMRzq4KA%GVN zuc>vlen}SmLicl874Fg;#IRaVilNLZ-L@3)dS&zKRtnACJ}-|EWG42!k?$+NcwbSU zE$BM()rXvwH!S$P<`!`epN07%vi~m!6?p@{U-i`btM{1u3wLPohYm@PjhJKxfS*us zv!3WDAle4ob4YkAi6m5>+8sq6CIJ#K^D-oO6E-1blnZ}+!W)1l1aoyTmE(o^9CAh| z(#o|C`>>(q>7c$mp_wzPFyar0p$pVFZMs?FFCor^G1*CI3WCvP?||pIsa#Xra1buZ zz{hO&`8V4$@;}`oeq~TCw>leBHk22>561-Kzv;N5qjn)m95M0;i8n#reCHLKbP!Yf zzN*%YlbZwb*(81%6QX{amw^=BT1}+HWgKpS1^eVsB*(_tum1Cr2K=!x-CqAVvH?MzQf4TONp-M}CwKe8LVdi$CPxwLkbJa?vtjcDfHQJ;6Mis;IP-v?lwB@Wy0h z2@9+i*q_h}TJ2vKd=N*^PFRENE$D5M(@!u3lDA@)hvX&7Zhs7iz;}iF$BF30`ox#( zn8Af9p1ZfeB{rgi4b9_v^3Nuz;TOb{=ino8P)`V#dQQ*2YgiVqb*PnFD+2zgsog_F z9t!IV)n{0B?{ot3Kms@@{&HzoK~i=j_a&Wux&7DDL677CC{UtGSRy7^v zbvep&#d?kt6Ey$r6#oV*`wkMXnKwD3RaG-;qTjECfz%yDI>*l{@PZ5zIok_1lVG65 z_bqmrDQf}mo0o>ia0UzN$-o9h-ocBk*6TN><-IQB0vIM!*Lo>e3r1U%4aC*kdyp=a zPBMHDGgNXQ?MKX)Y2+}>o&5d?*@Sms-`{005((^x%JM$RdgJ@`(&d<{g^t7ouiRzd z*Qc2X&?L+EOtk9BN1SOW8tyL zl@ff91c+u8W((g($3b+s+hgZ$yv`v0jhlSj)l|9kN6pRoR894(vW@61=zkzg-+k_* zAn_|~yDl*c2P;L3^mXr=D4eru`~GH>ZEt%x^6}>faKLQ;Aj191`bZOCHr5@)dt&zNH1|@hj$5RiGNyZkx96DA8#rBz;dX5DmZy+<14?u`|BTQ zznwC5nSITZRv#=s<}$R^h)!j7?^ZiDgD24*uR!|(?6vCA>-34e`+8q98&4E zdM)8{UF|$C8Pm(Fhy{{@Uc@g3zqba-!jRV%vOX{rjxf&BJE|YHMH^1M`nk_Pzww-& z@ktgW0tg#ZibdiSSv^`4V$uegW^4z^6M3Z<+a7Q**lUZP85l{poR#znIxC-&oS2k+ z9>^q#DV8B^J(JF&`|kZnW0_trs^d z73#%HBUSW$fjj!B=iLgYLUgNyxOIK~$Dn^VLCugyUbCQZDth zRC4uatHbi#>5(r{3tFC)9GhF;w~}O#Q0E8nvfFqKA=fQQErDJiZR1D$4%bCOrE(mYqH$szZ%2cxjF8<(`ka0j{zX@c<(ZIu=fFfdOeI_KLS0>l$ z3t1wkx*tuJ+M76XTA9KWQjkgpMYA>694XnixX8Cd`BIjg$zf zdpvAn^siKRAnU0PfJ{97m^mR_COqY-%ICzepd_uJ==0M_y5(Q!RwhLVGa>GGtQbi{ zV2q{p9CfefS>%)0QdkI#zV2xP4uF4O?B@*y;(rr4v#_gof_i@Z@gP=`pNQ7u2zqXA zZB_^p9*1A>`=Bbg%ZrnU=@$Iorpb&M9=Wjd1-iVp7!KU2EJEw`(f`pF^mEdIZNB3_ zo|-A8loIV&s2;09O?mOUo$EwL$A<#8BP>^M5hkk!lZ_a&)ZDZnPtUWaYSuE?@9!;o z5yBH1X8zS1I>XRw$YZ%;m>R@;&m`{|Ygis@`AGZ~dMkOp7K?v|)IfoM?Ds7{^zp1l z5Ck6FSN?vJ2Pwt6|4nrFJjZjlJ6q7D;1+h+)HR0TcR^jAHBCEbDKMbWA-yRVU)MDR z*&sXnO*={4(%lHA$2HD}Z&xEFpXIUx>zEHFGq1_-9c==8n%lS{{-PukCXBu&kk5LD=FUr3b$XEz|ozc z%2M0Q81ej8#y(x4NtYk}`8Vr+);W(}LX;m@28_cZtf_kQh*J@T8zA%}*8~J6e{OO* zRjG?`kLrempG6P7(>Ym8j+Vo~Rkg2qL$)G5F)K*mwyRFmo3twVEJq8pyp*HO6dv`j z<`csYyZ}l`lH}}p(_R*>toqV;hKZrwd(I@l%NZ|e|26rYq|t6yy#_5(QZ&EpDc^TI z{P3oYR=J4oo(CQko`8&lkwM+@Cp|gy^sgKX!^FbG9)Zb}&3rDh>15oNswA0y`cy@> zGRc))D)ubNw6mVmVp-H{Fm`t#ledN3cp70bo6VJy?JAOZmyhDYx|Hs3Le+FKr`cCMYhP=!;?0alKE3^baW#)<4 zFN7?@J_;ElkFL{hrlwTAx2^k5^>;7V5JHX~5T8%`H$9Mw%eOkZVu#xJbR<)B68GEJ zhagb3M^vORK_7rK`9Wjpguz3ZYGY6qsU&-i59=Z3@+d_1T+;)Gi1*Rq55?R*^GxmF zM)zUq{n06@T{cFAq}<^0s=oXta0tI9DreD)Ort+|l(GF0ZbAB`m^20DZLm zBY+HOV^P4vKY|{zlNHktthDHRBsY)?Z%`j zS!%0$Lzq(6O2m;T8RdZRJq)pj+X#M7+WQCwO?m$$wYx^9dh_TTkcqn8aTMw9xL9sWSjE*_`S z$R6HucJ3=^ZWFZ(mkM9PCjn7Ys}G%Fe;xa|LV0LPDMDGI<{tken4?p0Noz z+Df89_lA3^!u6|*iB%5yvne>P+{zz6;b(}roYJ+<7MmtW{`D}`QCnxpGL-4mXBX*d z^h#mk_4l@K65KqHHF--Ku^_hK-1+$A7(SjSSHJwZ4)>rvXE0f3i0;)cjaBZFPaFsh z#(xAHTS;&f`Bg6u9<^iF`vSw43MPwKpY*d7h1I0JRa{TB47)F|z7C%_{Goe|J$1g0 z8e8TuSepN(P|)I=-#2OcM7%bZ3IS0L;^ll6;KHGvZ(q}-6}QH`q;pvAA?qdeq1w2yQpdsRK#t5r)~ zHF(Jy`*=pffsiOEMXK7GF7Rw#?x#AesaHM;;_ihZn9UJ6)P_M+rsZI&Jww)YT3MIQ3J$33v;J^2;9yRczZ_;;fh#lQV<(5M*7kZ_U^2-eKh zmN@;KTwf0~*%V)mHft9W-=VL7@YxbC(Ifm;T@MUsu%bQDM))=N%x*f;T&YrSTg2*1 zuHv*y&3cF8_kJu!K8+oM=LlA9y%a+<$^>nc*aB<}=5t~t${+u{sBcT)>adBGoJR@~#cz0#u^_$eCJ~8Ws z$I|N~B9TiQQvpa)oufTNM575y@PVC5*=NGj$*>fJ-k~ds0jX6niv1n#nLb?$-1m7e zL4;ygNg5>w^FEHdo1c4AwyI#Y9T8o`0NaH1*KQWwGAXfR%qW-2Gq@vH7^h!oi^(R% z%l1v}p5f$2E_-=(rHpWo?i)2$&oCcLnw&=Y)fqVZ1r98)-YyEW&>oA|sRMUf$g^1` zj=Nc-EDDJzD9tPgeqy|_(kgC$1E3xCp)$nPHYz5W&J*^O^IBhgD~IuI zbhds@TiHMNAsX~^NIoK#HaPl_W8P)gGVyrpHiY0}ORmDkoAA<_PSO~1{GG^-!A*`! ztSCA~F2`!Y!Q6N`=3|bN^$|sDY+Ktu$rtJR^#38K3l$~Urkk0>WIwX_@K~d_WCO%Egv+EQ06XYin*1K8JU`1*v_yh7hkTIob1( zl9E=Gj~9wkQ6@6kSsY8QAaCdTwG(4eV`D|iV|g_s13aZDJl+>AoDvpFD|es% zrZ%KJ@#S_-wUr-KExSRJp>4s$mWH$u3h!RX6%-G3VXYeE+5q+96*y7hE}&m>^JvB) z2Ag{^8i{tpcri!2!<2vC=pYt95Vpng*oJ93x!_i4qnQ&Q>WsdyA3_ZEinkK1^h{U! z7Pq`1D9_R3R9lA@Kf2r!VWfWLJCsmjtmiI%Za?Kzc~z6%5FwAT9pU}rw>+>J*^+W3 zV>4>4be;heh+g-;%+ghSa7a9R_7sewp4=XAaD}94+rRiJ#rdYlO^>$j4`3a5labcm zBZ$&W#79XWMhZyN#B6=$Z<&I{(AjnE=-Oaof3Hx+f$WrT`bKT|l|y!Df`mHSoKi-H zwwRnph$W}dz`Cf*{aPGFD&ZT|MzD_C$0jU){Q&-va$ib4)#q|uqr7^4x9frn?-1(o z@6S)6Q@+mkynX5Lvt#6$A5G4EdG*9Mfn7?9iQ;aQXVy-?rm^bsf6?2Sr5gO&hJb4A z0)AE1NB_!JsVlNZ7eC~j%4I)C3+&VCHcdm)x1~@d(;YTW0$#-(x+io9UcWJgzyprl z;Ql-tdj;8|#b*b5(cmM~C2`H)q{q9j9SE|YM1ku0JxIu2+>uSMg86ZA&utZ{b2T*6r%oBsm50<^AGr^Ll<%vZQ`O z=`4}LCk+-PD#n(ctq1ad84^9Si|NFrG{VKkTtN3Mdo}d66#m!5L#}cH9cCaAvA61G z`m}d0@43-}c~b?XEY|J>US)hFgR0S!F`%K(BZu+2<@9NktjWV5RoY|kD!Mw8RPuM0r7pzQHZiQ598VU*hPPz$Od#Yn4$F zg%-&cV8a^rK$wFt4B@!u{_c`i=e($irfj9$tY4)?`;Z3IjC zrJ>NNyJ{b#O~+ZzP%E!hxX#M-WP2XBsc!#l5K3FS?Uuyw2;=0a`; z%!M4)*;JMEXPI(HuHepXX`K^cgzAYJ*qVb$l~zOuk@#|Xw2Qr4*QEF{w+&nKeu5?_%@^5B`d7m+)dXQ~ zfd%oFn|e*0CSg&sA4!dy;lLJ-0D1thmT#y~$zZ^bMc1d-oxlZELJy@1NYru<)6*kW zfDq&#{zU#&NfE~injLPQc)fUNW;SzJ*ZV;4`v8AfQTYbhf3*PMKpe{&}6&=jWKJw|F2ZU)$C7al-5= zcFG(?QUOBeXg{_d69^{bkwfW6X)0>PYnKf*`qBJaxGa$V3O|d@PB0LDAMg=shcGeg zdfKA`6Lt&ZmC(4LM!2N#JJ`o~Hy&OXtcnoYrQ*OV-}ZJ4mu6O_aGh1f5c|3PjUhoI z6?Fc7bg7Y;iKdf=cp=FaK+f1;s@8_c;MY?79NJ|+4uH>RoPC3r@wjh9CK5XWSP9+y zS9sV#Vyaom;_2%EV?G@=P80ElTT_P2FL=a{CV{=^()tzgH&;vP2pglq4yT2lxA5g3 zzKA8sG|ga|d|)!7UzsTTMXd}cU=5=RuuhoWA09|O1NHr`9A8%nWf(H&=MjhM+38{W zsQd>ey?1HfhxR>U?!V>ro-EIjc3OPH?EEV=LKG{08oUdu!8_oS%-D5l>Se`MT(?U7 zKs+hA1D#KDFgq))yx4VXtef*L7<1~07RJL&f;_Hiw2-%ADv{mTpO4D2%;~O-lD{qGOwtghH7lUQbh*nXc$RJxsp?eUW^%&Tv(B zd39J4+oe~zSa%}H*Vngl*$x;x!Hwf=Q8Z^G*vQ};LS(k# z;vTP%5=u-B^Q6g?id`ldZjMo&@|bcvpkFZ1H|6QPTqC(!Gb;V;Fg)0siwfDwqiz2c_;cH|_s$>iU1?V90D_~hQ;?a<{=HY6?RcbM;m0#Vy4fOC~|Eq|k~gQ#Cl zkwbE(aF=gIMZ$B(8Ng&*rU%k(WZv-1F`%AzdHAbZr&^}71|F7&{+l}I}!_6ox=v8ie^B3%zZmP!YNP@1|9Q`_vOyb zG0ANy1Cr$ACV}}wL6r0ZE|72vprp@bPt{}e{Fah&?k7o?aw3^)hEAN0Y$9sM6Lu+9 zFm_S2&I`pbFGj_!P^_>OEvc)n+lfaHfaDj%`_y` zx#oK{Y6aud=RtfK!XD!4gf5|Ib0I-7PjBc))?#*))b%Cu&ZD89jzFMxft6%G^>ZIT znrYXBC38x}TC2woocpnD90m=~qnBUJT0PUHkMlGC4LojA^_zTUsfSYcxY_ht-2s(| zR~6~~=XSL<+BQuSK=w(bFeMW2od68pPp&Rg9Is~1)`O&V5RxMg z&n2V9y>@J82v@2-Dx63%@SiBcZK(^SkgPk;sT^hN9=oq$+k%aim`w!J^eY9i43See z6>{~@U!cSAuh503S>Cs#^=Kc3faoxJZS&9h384Y2zIz<;xf+@QYz7qY+WAo}>F~!2 zzf5dC7>VMe8)uIoqt#nTb8*e=Vy*7^Q&G&l_mDh;%PGu1vF}KtQbABuztIW_kzn@u ze7>gX%f_u{U1>6yesMo_x_SQ)yJx+!HTE(udEQ2WO9ucz@f;L35q}&2l}l&{mXgS| zuE~oP(66LXXwukM_;X95=aD`7YL*6&z)xx)6&dRqYRSmnwDWML&)S)v(l53YUi7 zWo$4(gJzkD>+_OL8Xgft@=(OWU|S;LF&P|rQGCbUtV}8E=99O+)_x!rz0Z+*X1by~ zf@ckI^2_=(zcbC+DqvXuVcWB@_C&e)LB@9W#?P-K^@WF3EyYqbVQ+6SxK%VzfAI?r z)@?)bed1rzz?E0Gk!?&ynn^YEFgHIOd+noof8fJ2`vBg2#1JAe+Ns6vp+N-Ss-&}F z6ANbgNXI%|z`b^yx51Kr1AmFth9}hNP$q1M8gT){DP+0_Anl>s^pMjkP5afk?D*l{ znw_NEk=j7JpFR5gB=@O3wJTB!PF)m=^Cjo5Z~j28D0BWsogZz;9`?@3dj6{$M}HqA z%#I(<%-n?5B4IKs>40>6O}p}EQ@6T?_5xAoOZj5g8ElZ!noj?KLiMtPwTnN?y^Um} zBbM2S&a=*ffwFQGAV5({)6MDeGH!{!i&u&ufkc<8^iK`BX^M>Mg6O-|jW<=m$($WZ zB(x%JxEEAh=~C`0G#DN}gYs}hTb^o~Pj*R&r~}|EZ1OI!#l7zL+%9J%2Nt_ATN}M7 z+}ZukWVyLVke#>J-eH$wZF5fdGPmf!s`$#@Gu&5d3$;~4UOO>A)Za7w%OnZ_%vH?t z=iW-~A$3Aj>OGWG?E@uI=JKNJL({k+@u7!r*tAt^k#^+_*o{da12VSr)V=oCLc#`C z$;kszIzsIl_c#FUUH#xCU*~Jy&Y1pvuC(WO@c3O5^n>oPiGRJ%mu%ny_Ow}3;*_#h zzRwm}cWsOT1|JYfbof!e40V0~h|+7ZW@K$;N|^=sUA|qn|7U3Cb-1TEsqIlUA@VbP zLm|(~<~dm#vj~J!%g-Eomj&~<6#+~!X4|MzdH)=#gn&ejWZ_S)uQwS8opTVvAO*}J z`a1hJCy~M4M3EVLEr;-6j|W9FO(>Hzbg>&zU+D%Mz%_EG$tmg)<+N&Z=Wp7Mqq? z&XZip3vHL2dDi?QW^E+KAY0*;ADOQJE58FgGw#GIsU1`rN5JTIrMS>&97BT3fnoWX zoRyCryuI!KFDX%eD#}PyOjfCv;v6vkt-Obj8h*Dw2eg&sG|9)%!<@-QdwnS@B4R`W zrzRk7Z#`4VOv`%)o0BtqbG&Lfttz4tH-T!tyxxb!_06s=RC)Dd;9+_DxGKSsnC?pH zqBf25J)2eGC*x+$cE=eJvv2zV%goOqJD;$xuG@TYSWa?lg+W6Wk-i!%KiU%_z-3wo zxC80;AOXVjm2&5ILIR|`J_wNBhq6(qj$^AN#h1S)jC?AwXNvS(9b{2vS#EhSG%lBI zeE2GsliwYd=1bN;2J9|3*1yoil@3|%!zY*4n>)}^HN;O*GhO}CAR!q>F^(i zpIv=hM)WZ^oGq?rQq~84;s!a9^ea94)U5hV_hKi2r36mt@A7o`8ag7Grfa(N^@(y4 zb{&VEIy*C#S;nVd=ERFz&RTa}UW!>?3Iy2qqEq`pTV5p0%^3%W;v&s7XW>sD8?l~k z)Qxez)|v2g9sz(+0@zH4qL!{qxZ734bQ6!bMAX@!PwGh=c8|lE#p|d>- zuO$J%reVpwF7N(^PJ=gh(Ajg?xvi^eZH_E!F*wNmh{tRKOB6;4RKCa_^4>d-^N4PKnbaZ`$v0pEi}sv%@|`T-AdooOSqE&i68aQV*+%Ij9| zodIA}0JrkfV$a(roD99UFDWTGU0<}9T(BQ8VOh~u&;=5_?*eT6$b}toKZW?1w-%)^ z)2#c0b&N93Y>}BUcNTM*O5Y;)oaM0aMsyGF6#*sIacizI>JJ~0{5V=lJ@4$TpALRr zaw%+SmeZ8$KPX2AS=L>YwcNi3%eQe#O#42whcOSdhgYk>;J4Q>Uj^u1c?Tz--bDa* z^Y5_?Oku%!DclXIO7s5cV@*Na($fXBJer_t`QHz5{}RKaaN@Z}ULQL1r)YBBm2$TW z3kg|IkX%lf?efBPiBqmXlxVozkt~5ZtDGHgCc#N{uo#@&w#V|ceu%10Rk z-0^e+r0zwL-=wcf~uNB5{C=Rk-rZme!>TRs;gGtSG_P?`(`*frX%V+d1-yY%S#Mr zXjs;xC8@*#S1o{8m(B$IkRfG8^3e9@NO=Go-q6ho$yXwepFMf%=KBwY3Vr(en^W_y zpoYH7D(L=k=ppB(N@BS9`am0^^7uwS4LzB}O|J__xh>{YuC#82>;aHroh+I_OFs$V zra8c8U}^mg{QsP>XW{`zEij)x8oIWlKA{ElF({fzrb4#4`NUJ=HVpi4Ka{P+V{;mw&FwgnB z>u#>2-Z2wtES!LY=aV?@(HsYO+;2iWH$g4Y7xAzGHWQ4H(Kep##N?%_9-kQfzUf3j za}c;Ua(`SRj=WW>i^OZe*(=O*YQZyWY(7mh<08sqOt-x=LsxgL{2MRoLPN8j!uo{Q z^Rdzsdv;PCEUz}cOIzkNVQGD6c4~cXYUE{d^hKdQhxX4qBpYZ=RszWt^~zmxazfyl?19(!DMoS{ zm=(N05@RyUCQIwFv@t86hTBB3OHHqK7msj*P+SDk3`^@*tq72SPqbnZINL@wgap^p z5ljJmnjgZ&tiMLNm1GH&%~w>a{GYNR6?=g-T5KIT;Il02(<~$Ny(rX9wb}3^qKbc!lKB2D^b zYkj>T(|x$`vyY@%b2MJhw@rXGY&D}EWye1E>DpGVP z$$p#~+w0y?f29{ady39xlNv|~1z)A0v)%g7<&{cARyW*gIyaTNCdEbNsUL0C+$8OY zzB8`^R`iBog-zewNKP`}i@ql)TZWV4?9h~cVDU{oiwRS`$lf;dN~1dGs+B&u6yxe>{W#ug*Nl0F0bzx-L!9>m5~h19a%p_RK4qLW>hZ$5b|2is91(L1s~Dhi9+Rf|fi~SIw$@By=2_;_ z`e@b~w+*(kf;t@B6Ywbea&dB`Z1_qKuc&hff@(nusBsXO$`=Jza->|P24tW;e)+rq zsbN*@p^>v?xG_^e$PsH%zeXq)=bh@tw=Yz-EW86Q>>q=c4 zj7Euu*scwKKcgM|alx&^wqD@F8DMX;>dH)PV0Jq$4qlr0p0TjCp!L(@KjxiZkgL?T zLQI||o6WZ3xw-(6?MSpuq+4kqA=^*XSK7#J%ZCqRH#2P@wt5#7h@EuKX6t2R*G(rE zmeF`X&L^Pd{6^waP*z$ehL0|{>!1McewqLnD*cB}nV-QtZ zn(~gaQTK*JY1}Y{)A3nJsiIeYBAV&lWzHye^&Awo(g8Qum7J!P#aAmlgIiziUr1j6 z=7qzWuDMNgpO1igr*ErB+lsEAf8eLKZjx)zZc{pGNa#o=`mYYqu+y6H)aeg%2S%+0 zRPqo|un*)v*p|CRI@w4zAC<`;e1F@(Sfj3n!!FHhhE~|X1Y!6SYXmA{-cCCC%!JSt zx&iZOUCmeVz5FsWpL(QOW<0Wb87d=&}OImQ*&TpF_WeB3}F)jStkP>`8JWROy%5OgQ z^|@Dm@|E2^hMkqd*)7cJ-#g4^#2AlCE^$e7U)$+rt)pP9X#QG(|LRIs_ z`gp&b`Xd#Om{esLr2P&a5sh=uywx7fVCKail~uq3L;;%0rRJ zO~+(=Tu7t|0*qUOl?X!*l6OsXc3~@<5z29gUdIW#i+iCx1Ha&%c_LM3ge&`V=m{Ce z3l7N{ANKXvcYdD56XfKwe~x72^8=P$Dp35pNzD0JW+}r{$j77Yga_+~<$E`^_zzv{7&0A$nK#rpRDa*+ zLzBL10>!CMqZ3NCM&E12BX^~(x_;D+;qkehn$j1^9E@zs7aRRV{mXUAiA@ij>=)|o z(c%{KOUR@zPj1aV^cYVG9CSFFd}+t)__D0k-MJ3iRz=J1Q?}4b3SUpm*@{5r)v-{L z^w{;I^A(|K_e+fvWxu`*Q#3p3C)Z%Wt6+YzDKsT@s8H(S4Fk^xA+zj?ua#31z^5kx zM>wCi4c?Cw3p^sm$|fck;`z_r`dI8~sXR}CPvvLb( z3knd(HhFCgQDZLs8GY3jT3WqL_CJL9KU`><8APXbR z!V;wzlyA*Jfr)w#U|Ha)gw3qtRqKBLkSJi=-xylZS-$p4h}SI*@erL~BytjN+sWUt zD!^~O*s3I8aVJ27QG4kyW$YzmzOgc~B3y|#qd4=~rx9~#-`hJ_*Po{%bmvXBqlHIx zb=}p`w~I!_Nf$0${jD9{zBK6p;bz-A9tEZ+LZ( z^dAH_hu{*1?ejX-7<8qa%DJmM5>5_ZYR3K2>l(o$)>*MApyDs{U0n=2(`N;>H7%a| z&mZ49J>AoK zL~V{xbM+3XB;FEFo+4p~)}}SXFNPhC`e`ycy!0Fjrup5wv;Hxfm*vU@pm}F=;bfBV+o!XX0Rm*>)*~rsh8?MB5zdyW5*K3`FqVG}(RGf733`PGTbf)XkDZk+M_g zCIcORwpS912RcwKXaHdoX7lkGJyPKjslfF}COncD_VTSA%0~PD{1tDxf&E?PmkjwexxoasV$r7?JZv6PJRHEb3s8R0psYeh=QQZ+hnsT z*NcIqw4#b0gZuGi^F)$=Z#bipuu;WArRyzo$kFkJ600|kwdQ651#Qbnb^aKK*F+LT zNcwa+7o)^Om`HWw&+r2zB~Iel)t#QrUMg|fw{r5jGq)PQEHv0-&Y@>?QPMeqja_ZSMHG_$Pg#y@OAiQ2 zRSB5%J*suKd=MP-GzzPO4*;zB^KfUsw#Q;?FAKbNNoJ0OfTs4vB8lMUV*Du_B`oPk zsHEtrc6^n_$+)n+%k76lElkR7%0x$P78>3mrUZV;zIfpJXd{nGQJ)y)(!FhB0t@rz zeh(SRX@&6|6A^0-)8DxNcp0Vv5yERLh@2HVe$F`f_^ES6sZO3tO5A(-*kXh7V0*iZ z`rie3Tc;Pl$-q6q6V^s#^R*p`8F>*$Yk?N{u2w~y({CK=LfM}4#d;zEmo2Zl5bPq? zU$TNrM8ETEezp)e{eh|&K?p5WgB_COP-1+EIwct&aQrd#D*gRVAh2mWMzVbmfdVYG z{PFzM;&YI8*nd+6ZYV|`eh^Hb%|Bus)!NUZ$CHUnS!0)zf67y@L1)wAD0T)Q03QVr zJy(4$H__2qQ=_{Uyy!^`BgD)D(H8hOa{)Fk| zL`fX*z6jLRIBknrF76%r0jBm`4$UX*A!_|QSSz4smfoJr&## zAOY5nDu>mL(7Bc@?nN+|N;uldSx`it>uB*54=#)x2o^B`{WG?rc zvg4qHA-R5Jg9W_ujFa0$0n&sJ&P5SORXZZqd?On$1bHv5LTPP%@+M9_HJN>6rD(f0 z)ud0Ka)pRxjy@wSs#1ji%4O{>N3!a}MZH>j3S7NApZ2zuCnhuNg}zMF_u5Qi8x zS*|)RJph)@u@4cS6&#i&2R>W)#QXS0uO1D#BU`$RIw^2pjf*;Q1?-#f z&5_+gV)r)Rq7O2zuE{;C*&|fG7XWigXNcIN@Fv3k-M!c?CNM}CRCUE@!;a7M-}%2w z-A2{{plxJ#W*=YQGIVFe3Ut3X25;ceiPVJQ7u$WThe>UdzD)j)fl14utrxYJ-Jui7 z0iQgIZVB4xbNxQ=Srj!`)&GH({<)xq>AJo%=HAaWzIQ#QQLX!uK(=MR%}b|R0UX2| zPYdTexf5pRf@=3sNKGp`t=~%6xHL(?srdrI`ndTn z(2ul4`ieD%Sy$j}nyRd46^j`|1RHl@aowQC!OR^yFlr1L@enONX^Sb09;ed+)HNz_ zKyg>B9*CeKMHv&>ibeUVai+37TzHG5iHA2BN(gqdHvWvqkjDd6{}t)kVTKTn9%L6` zn!%b}=EuQx?(B)jfh#Oiv`0h+Glsqdi4qkzM2CqDsboRSwzoJE?7E}*L|Q-Qp=~Io zS~5>hs1+4M>d6$bAsjOGkQ;A%^%;&!WzlKGEZ+ve&!s*jsLE%*?(dG=R#3rrS=?<;^}R}RT`pf@FvVXrYmh>Q18 zL(Q{+U8TGXgl9{1;UakUVsueqWJKK0hL|z*B_u0oOy6Ec1!!1zZ%P?CTIgBWSgqIg z3|mu-3PHmRBiOkM;Od}wVX1tmFNW^pvOEs%kHL$V8C@xYGB79SHGQUq_&RNPkwim| zvaceniQ!jz9z)|&pv)EP#06J4W8-fGRarEnDl@7wqbig7<@>Ky6<<=e`SsC0X3Z-r zJ1ink3+>|&qqS7^RNKCYC`Q4VS&)BM!;p;QBTgy5HWUU>p(WoqiNKNzJGe&Z$Tild zO$o|R`&6tf;5or`XD`rT(blM62J!Ee5M=0y)XTi zx*;fH^6|zNZm;y)CDBlPB$VCL`5*Ws?hfp%+3AXLSN?{nDBez$m9rK7b_rY~xR1b2 z`sH?vNuNp_Hk)q-!-@#TrRv`u5TIpnpSw8FN45kFpKL^dDyY(f_tT c>N_U3i9YA<;^DW;XTjgj?fTj&_=Bha1KmC(fdBvi literal 0 HcmV?d00001 diff --git a/src/main/java/com/booleanuk/core/gleek-class-diagram.txt b/src/main/java/com/booleanuk/core/gleek-class-diagram.txt deleted file mode 100644 index db37a5ba1..000000000 --- a/src/main/java/com/booleanuk/core/gleek-class-diagram.txt +++ /dev/null @@ -1,44 +0,0 @@ -Controller - - view: View - - prices: Hashmap> - - basket: Basket - - basketSize: int - +changeBasketSize(int size): void - -View - -scanner: Scanner - +validateManager():boolean - +mainMenu(): char - +addBagel(Hashmap prices): Bagel - +removeBagel(List bagels): Bagel - -listBagels(List bagels): void - -Bagel - - type: BagelVariant - - filling: FillingVariant - +calculateCost():float - -Basket - - bagels: List - - maxSize: int - +addBagel(Bagel bagel): void - +removeBagel(Bagel bagel): void - +calculateCost(): float - -BagelVariant:service - Onion - Plain - Everything - Sesame - -FillingVariant:service - Bacon - Egg - Cheese - CreamCheese - -Controller-->View -Bagel-->BagelVariant -Bagel-->FillingVariant -Basket-->Bagel -Controller-->Basket diff --git a/src/main/java/com/booleanuk/core/gleekDiagramInfo.txt b/src/main/java/com/booleanuk/core/gleekDiagramInfo.txt new file mode 100644 index 000000000..0d2dddc10 --- /dev/null +++ b/src/main/java/com/booleanuk/core/gleekDiagramInfo.txt @@ -0,0 +1,65 @@ +Controller + - view: View + - prices: HashMap> + - basket: Basket + - basketSize: int + +changeBasketSize(int size): void + +start(): void + +View + -scanner: Scanner + +mainMenu(): int + +getInt(): int + +addBagel: Bagel + +addCoffee(): Coffee + +chooseProduct: Product + +printReceipt(float totCost, float totDisc, ReceiptInfo info): void + +Basket + - products: ArrayList + - unDiscountedProducts: ArrayList + - basketSize: int + +addProduct(): void + +findDiscount: float + +calculateDiscount(ArrayList items, int num, float dis): float + +setBasketSize(int basketSize): void + +receiptInformation(): ReceiptInfo + +clear(): void + +Product:service + +calculateCost(): float + +name(): String + +basicPrice(): float + +Bagel + - bagelType: Triple + - fillings: ArrayList> + +calculateCost(): float + +name(): String + +basicPrice(): float + +calculateBreadCost(): float + +Coffee + - coffeeType: Triple + +calculateCost(): float + +name(): String + +basicPrice(): float + +getCoffeeType(): Triple + +ReceiptInfo + + HashMap fillings + + ArrayList, Float, Float>> deals + + ArrayList remaining + +Triple + +Controller-->View +Controller-->Basket +Controller -.-> Triple +Basket --> Product +Basket -.-> ReceiptInfo +ReceiptInfo --> Product +Product --> Bagel +Product --> Coffee +Bagel -.-> Triple +Coffee -.-> Triple From d3718a5950b026467ed1da30f6bc88670724c210 Mon Sep 17 00:00:00 2001 From: Iris Flystam Date: Mon, 26 Aug 2024 13:41:02 +0200 Subject: [PATCH 49/49] removed the specific @toString because it was too much and removed the appropriate test --- src/test/java/com/booleanuk/core/BagelTest.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/test/java/com/booleanuk/core/BagelTest.java b/src/test/java/com/booleanuk/core/BagelTest.java index ef6ce6f96..231736afc 100644 --- a/src/test/java/com/booleanuk/core/BagelTest.java +++ b/src/test/java/com/booleanuk/core/BagelTest.java @@ -23,15 +23,4 @@ public void testAddSeveralFillings() { Bagel bagel = new Bagel(Controller.prices.get("BGLO"), fillings); Assertions.assertEquals(0.73f, bagel.calculateCost(), 0.001); } - - @Test - public void testToString() { - ArrayList> fillings = new ArrayList<>() {{ - add(Controller.prices.get("FILB")); - add(Controller.prices.get("FILC")); - }}; - Triple type = Controller.prices.get("BGLO"); - Bagel bagel = new Bagel(type, fillings); - Assertions.assertEquals("Bagel{bagelType=Onion, fillings={Bacon, Cheese}, cost=0.73}", bagel.toString()); - } } \ No newline at end of file