From 23607a3d7a8fc5dbfe81e7600fe510c9c276217e Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Tue, 5 Nov 2024 17:35:35 +0400 Subject: [PATCH 01/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=81=D1=83=D1=89=D0=BD=D0=BE=D1=81=D1=82=D0=B5?= =?UTF-8?q?=D0=B9=20=D0=B8=20=D0=BF=D0=B5=D1=80=D0=B5=D1=87=D0=B8=D1=81?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FuelAndLubricants/Entities/Car.cs | 26 ++++++++++++++++ .../FuelAndLubricants/Entities/Driver.cs | 22 ++++++++++++++ .../Entities/Enums/Car_Type.cs | 9 ++++++ .../Entities/Enums/Driver_License.cs | 13 ++++++++ .../Entities/Enums/Fuel_Type.cs | 10 +++++++ .../FuelAndLubricants/Entities/Enums/Shift.cs | 8 +++++ .../Entities/Fuel_And_Lubricants.cs | 22 ++++++++++++++ .../FuelAndLubricants/Entities/Route.cs | 20 +++++++++++++ .../FuelAndLubricants/Entities/Trip.cs | 30 +++++++++++++++++++ 9 files changed, 160 insertions(+) create mode 100644 FuelAndLubricants/FuelAndLubricants/Entities/Car.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Entities/Driver.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Entities/Enums/Car_Type.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Entities/Enums/Driver_License.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Entities/Enums/Fuel_Type.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Entities/Enums/Shift.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Entities/Fuel_And_Lubricants.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Entities/Route.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Entities/Trip.cs diff --git a/FuelAndLubricants/FuelAndLubricants/Entities/Car.cs b/FuelAndLubricants/FuelAndLubricants/Entities/Car.cs new file mode 100644 index 0000000..139ce94 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Entities/Car.cs @@ -0,0 +1,26 @@ +using FuelAndLubricants.Entities.Enums; + +namespace FuelAndLubricants.Entities; + +public class Car +{ + public int Car_ID { get; private set; } + public string Car_Mark { get; private set; } = string.Empty; + public string Car_Model { get; private set; } = string.Empty; + public Car_Type Car_Type { get; private set; } + public float Consumption_Rate { get; private set; } + public int Fuel_ID { get; private set; } + + public static Car CreateEntity (int car_ID, string car_mark, string car_model, Car_Type car_type, float consumption, int fuel_id) + { + return new Car + { + Car_ID = car_ID, + Car_Mark = car_mark ?? string.Empty, + Car_Model = car_model ?? string.Empty, + Car_Type = car_type, + Consumption_Rate = consumption, + Fuel_ID = fuel_id + }; + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Entities/Driver.cs b/FuelAndLubricants/FuelAndLubricants/Entities/Driver.cs new file mode 100644 index 0000000..7899494 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Entities/Driver.cs @@ -0,0 +1,22 @@ +using FuelAndLubricants.Entities.Enums; + +namespace FuelAndLubricants.Entities; + +public class Driver +{ + public int Driver_ID { get; private set; } + public string Firstname { get; private set; } = string.Empty; + public string Secondname { get; private set; } = string.Empty; + public Driver_License Driver_License { get; private set; } + + public static Driver CreateEntity (int driver_ID, string firstname, string secondname, Driver_License license) + { + return new Driver + { + Driver_ID = driver_ID, + Firstname = firstname ?? string.Empty, + Secondname = secondname ?? string.Empty, + Driver_License = license + }; + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Entities/Enums/Car_Type.cs b/FuelAndLubricants/FuelAndLubricants/Entities/Enums/Car_Type.cs new file mode 100644 index 0000000..a700a41 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Entities/Enums/Car_Type.cs @@ -0,0 +1,9 @@ +namespace FuelAndLubricants.Entities.Enums; + +public enum Car_Type +{ + None = 0, + Passenger = 1, + Cargo = 2, + Bus = 3 +} diff --git a/FuelAndLubricants/FuelAndLubricants/Entities/Enums/Driver_License.cs b/FuelAndLubricants/FuelAndLubricants/Entities/Enums/Driver_License.cs new file mode 100644 index 0000000..ae865a1 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Entities/Enums/Driver_License.cs @@ -0,0 +1,13 @@ +namespace FuelAndLubricants.Entities.Enums; + +[Flags] +public enum Driver_License +{ + None = 0, + A = 1, + B = 2, + C = 4, + D = 8, + BE = 16, + CE = 32 +} diff --git a/FuelAndLubricants/FuelAndLubricants/Entities/Enums/Fuel_Type.cs b/FuelAndLubricants/FuelAndLubricants/Entities/Enums/Fuel_Type.cs new file mode 100644 index 0000000..b408283 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Entities/Enums/Fuel_Type.cs @@ -0,0 +1,10 @@ +namespace FuelAndLubricants.Entities.Enums; + +public enum Fuel_Type +{ + None = 0, + + Petrol = 1, + + Diesel = 2 +} diff --git a/FuelAndLubricants/FuelAndLubricants/Entities/Enums/Shift.cs b/FuelAndLubricants/FuelAndLubricants/Entities/Enums/Shift.cs new file mode 100644 index 0000000..a05e003 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Entities/Enums/Shift.cs @@ -0,0 +1,8 @@ +namespace FuelAndLubricants.Entities.Enums; + +public enum Shift +{ + None = 0, + Day = 1, + Night = 2 +} diff --git a/FuelAndLubricants/FuelAndLubricants/Entities/Fuel_And_Lubricants.cs b/FuelAndLubricants/FuelAndLubricants/Entities/Fuel_And_Lubricants.cs new file mode 100644 index 0000000..5928429 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Entities/Fuel_And_Lubricants.cs @@ -0,0 +1,22 @@ +using FuelAndLubricants.Entities.Enums; + +namespace FuelAndLubricants.Entities; + +public class Fuel_And_Lubricants +{ + public int Fuel_ID { get; private set; } + public Fuel_Type Fuel_Type { get; private set; } + public float Price_Per_Liter { get; private set; } + public float Amount { get; private set; } + + public static Fuel_And_Lubricants CreateEntity(int fuel_id, Fuel_Type type, float price, float amount) + { + return new Fuel_And_Lubricants + { + Fuel_ID = fuel_id, + Fuel_Type = type, + Price_Per_Liter = price, + Amount = amount + }; + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Entities/Route.cs b/FuelAndLubricants/FuelAndLubricants/Entities/Route.cs new file mode 100644 index 0000000..25af9ec --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Entities/Route.cs @@ -0,0 +1,20 @@ +namespace FuelAndLubricants.Entities; + +public class Route +{ + public int Route_ID { get; private set; } + public string Start_Point { get; private set; } = string.Empty; + public string End_Point { get; private set;} = string.Empty; + public float Route_Length { get; private set; } + + public static Route CreateEntity (int route_id, string start_point, string end_point, float length) + { + return new Route + { + Route_ID = route_id, + Start_Point = start_point ?? string.Empty, + End_Point = end_point ?? string.Empty, + Route_Length = length + }; + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Entities/Trip.cs b/FuelAndLubricants/FuelAndLubricants/Entities/Trip.cs new file mode 100644 index 0000000..218d322 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Entities/Trip.cs @@ -0,0 +1,30 @@ +using FuelAndLubricants.Entities.Enums; + +namespace FuelAndLubricants.Entities; + +public class Trip +{ + public int Trip_ID { get; private set; } + public DateTime Start_Date { get; private set; } + public DateTime End_Date { get; private set; } + public Shift Shift { get; private set; } + public float Fuel_Consumption { get; private set; } + public int Car_ID { get; private set; } + public int Driver_ID { get; private set; } + public int Route_ID { get; private set; } + + public static Trip CreateEntity(int trip_id, DateTime start_date, DateTime end_date, Shift shift, float consumption, int car_id, int driver_id, int route_id) + { + return new Trip + { + Trip_ID = trip_id, + Start_Date = start_date, + End_Date = end_date, + Shift = shift, + Fuel_Consumption = consumption, + Car_ID = car_id, + Driver_ID = driver_id, + Route_ID = route_id + }; + } +} -- 2.25.1 From 42f22622a6045f369c5af8448f2075aa056698a7 Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Tue, 5 Nov 2024 17:54:42 +0400 Subject: [PATCH 02/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=80=D0=B5=D0=BF=D0=BE=D0=B7=D0=B8=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=B5=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repositories/ICarRepository.cs | 16 ++++++++++++++++ .../Repositories/IDriverRepository.cs | 16 ++++++++++++++++ .../Repositories/IFuelRepository.cs | 16 ++++++++++++++++ .../Repositories/IRouteRepository.cs | 16 ++++++++++++++++ .../Repositories/ITripRepository.cs | 16 ++++++++++++++++ 5 files changed, 80 insertions(+) create mode 100644 FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Repositories/IDriverRepository.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Repositories/IFuelRepository.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Repositories/IRouteRepository.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Repositories/ITripRepository.cs diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs new file mode 100644 index 0000000..86c62e5 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs @@ -0,0 +1,16 @@ +using FuelAndLubricants.Entities; + +namespace FuelAndLubricants.Repositories; + +public interface ICarRepository +{ + IEnumerable ReadCars(); + + Car ReadCarByID(int id); + + void CreateCar(Car car); + + //void UpdateCar(Car car); + + void DeleteCar(int id); +} diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/IDriverRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/IDriverRepository.cs new file mode 100644 index 0000000..f0ee896 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/IDriverRepository.cs @@ -0,0 +1,16 @@ +using FuelAndLubricants.Entities; + +namespace FuelAndLubricants.Repositories; + +public interface IDriverRepository +{ + IEnumerable ReadDrivers(); + + Driver ReadDriverByID(int id); + + void CreateDriver(Driver driver); + + void UpdateDriver(Driver driver); + + void DeleteDriver(int id); +} diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/IFuelRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/IFuelRepository.cs new file mode 100644 index 0000000..5988b93 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/IFuelRepository.cs @@ -0,0 +1,16 @@ +using FuelAndLubricants.Entities; + +namespace FuelAndLubricants.Repositories; + +public interface IFuelRepository +{ + IEnumerable ReadFuels(); + + Fuel_And_Lubricants ReadFuelByID(int id); + + void CreateDriver(Fuel_And_Lubricants fuel); + + void UpdateFuel(Fuel_And_Lubricants fuel); + + void DeleteFuel(int id); +} diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/IRouteRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/IRouteRepository.cs new file mode 100644 index 0000000..8810642 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/IRouteRepository.cs @@ -0,0 +1,16 @@ +using FuelAndLubricants.Entities; + +namespace FuelAndLubricants.Repositories; + +public interface IRouteRepository +{ + IEnumerable ReadRoutes(); + + Route ReadRouteByID(int id); + + void CreateRoute(Route route); + + //void UpdateRoute(Route route); + + void DeleteRoute(int id); +} diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/ITripRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/ITripRepository.cs new file mode 100644 index 0000000..87c847b --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/ITripRepository.cs @@ -0,0 +1,16 @@ +using FuelAndLubricants.Entities; + +namespace FuelAndLubricants.Repositories; + +public interface ITripRepository +{ + IEnumerable ReadTrips(); + + Trip ReadTripByID(int id); + + void CreateTrip(Trip trip); + + //void UpdateTrip(Trip trip); + + void DeleteTrip(int id); +} -- 2.25.1 From 3c820d581e70b53330e6e5a6d07d34ed6add61ac Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 13:06:58 +0400 Subject: [PATCH 03/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=81=D1=83=D1=89=D0=BD=D0=BE=D1=81=D1=82=D0=B5?= =?UTF-8?q?=D0=B9-=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=B8=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=BA=20=D0=BD=D0=B8=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FuelAndLubricants/Entities/Car.cs | 8 +++---- .../FuelAndLubricants/Entities/Refill.cs | 22 +++++++++++++++++++ .../FuelAndLubricants/Entities/Route.cs | 2 +- .../FuelAndLubricants/Entities/Trip.cs | 2 +- .../Repositories/ICarRepository.cs | 2 +- .../Repositories/IRefillRepository.cs | 12 ++++++++++ .../Repositories/IRouteRepository.cs | 2 +- .../Repositories/ITripRepository.cs | 4 ---- 8 files changed, 42 insertions(+), 12 deletions(-) create mode 100644 FuelAndLubricants/FuelAndLubricants/Entities/Refill.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Repositories/IRefillRepository.cs diff --git a/FuelAndLubricants/FuelAndLubricants/Entities/Car.cs b/FuelAndLubricants/FuelAndLubricants/Entities/Car.cs index 139ce94..5257fab 100644 --- a/FuelAndLubricants/FuelAndLubricants/Entities/Car.cs +++ b/FuelAndLubricants/FuelAndLubricants/Entities/Car.cs @@ -8,10 +8,10 @@ public class Car public string Car_Mark { get; private set; } = string.Empty; public string Car_Model { get; private set; } = string.Empty; public Car_Type Car_Type { get; private set; } + public Driver_License License { get; private set; } public float Consumption_Rate { get; private set; } - public int Fuel_ID { get; private set; } - public static Car CreateEntity (int car_ID, string car_mark, string car_model, Car_Type car_type, float consumption, int fuel_id) + public static Car CreateEntity (int car_ID, string car_mark, string car_model, Car_Type car_type, Driver_License license, float consumption) { return new Car { @@ -19,8 +19,8 @@ public class Car Car_Mark = car_mark ?? string.Empty, Car_Model = car_model ?? string.Empty, Car_Type = car_type, - Consumption_Rate = consumption, - Fuel_ID = fuel_id + License = license, + Consumption_Rate = consumption }; } } diff --git a/FuelAndLubricants/FuelAndLubricants/Entities/Refill.cs b/FuelAndLubricants/FuelAndLubricants/Entities/Refill.cs new file mode 100644 index 0000000..a67ff0b --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Entities/Refill.cs @@ -0,0 +1,22 @@ +namespace FuelAndLubricants.Entities; + +public class Refill +{ + public int Refill_ID { get; private set; } + public DateTime Refill_Date { get; private set; } + public float Refill_Amount { get; private set; } + public int Fuel_ID { get; private set; } + public int Car_ID { get; private set; } + + public static Refill CreateOperation(int refill_ID, DateTime refill_date, float refill_amount, int fuel_id, int car_id) + { + return new Refill + { + Refill_ID = refill_ID, + Refill_Date = refill_date, + Refill_Amount = refill_amount, + Fuel_ID = fuel_id, + Car_ID = car_id + }; + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Entities/Route.cs b/FuelAndLubricants/FuelAndLubricants/Entities/Route.cs index 25af9ec..3087552 100644 --- a/FuelAndLubricants/FuelAndLubricants/Entities/Route.cs +++ b/FuelAndLubricants/FuelAndLubricants/Entities/Route.cs @@ -4,7 +4,7 @@ public class Route { public int Route_ID { get; private set; } public string Start_Point { get; private set; } = string.Empty; - public string End_Point { get; private set;} = string.Empty; + public string End_Point { get; private set; } = string.Empty; public float Route_Length { get; private set; } public static Route CreateEntity (int route_id, string start_point, string end_point, float length) diff --git a/FuelAndLubricants/FuelAndLubricants/Entities/Trip.cs b/FuelAndLubricants/FuelAndLubricants/Entities/Trip.cs index 218d322..1a7dd80 100644 --- a/FuelAndLubricants/FuelAndLubricants/Entities/Trip.cs +++ b/FuelAndLubricants/FuelAndLubricants/Entities/Trip.cs @@ -13,7 +13,7 @@ public class Trip public int Driver_ID { get; private set; } public int Route_ID { get; private set; } - public static Trip CreateEntity(int trip_id, DateTime start_date, DateTime end_date, Shift shift, float consumption, int car_id, int driver_id, int route_id) + public static Trip CreateOperation(int trip_id, DateTime start_date, DateTime end_date, Shift shift, float consumption, int car_id, int driver_id, int route_id) { return new Trip { diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs index 86c62e5..a4d9d34 100644 --- a/FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs @@ -10,7 +10,7 @@ public interface ICarRepository void CreateCar(Car car); - //void UpdateCar(Car car); + void UpdateCar(Car car); void DeleteCar(int id); } diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/IRefillRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/IRefillRepository.cs new file mode 100644 index 0000000..ca33f73 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/IRefillRepository.cs @@ -0,0 +1,12 @@ +using FuelAndLubricants.Entities; + +namespace FuelAndLubricants.Repositories; + +public interface IRefillRepository +{ + IEnumerable ReadRefills(); + + Trip ReadRefillByID(int id); + + void CreateRefill(Refill refill); +} diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/IRouteRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/IRouteRepository.cs index 8810642..7a5ee9b 100644 --- a/FuelAndLubricants/FuelAndLubricants/Repositories/IRouteRepository.cs +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/IRouteRepository.cs @@ -10,7 +10,7 @@ public interface IRouteRepository void CreateRoute(Route route); - //void UpdateRoute(Route route); + void UpdateRoute(Route route); void DeleteRoute(int id); } diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/ITripRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/ITripRepository.cs index 87c847b..0f68261 100644 --- a/FuelAndLubricants/FuelAndLubricants/Repositories/ITripRepository.cs +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/ITripRepository.cs @@ -9,8 +9,4 @@ public interface ITripRepository Trip ReadTripByID(int id); void CreateTrip(Trip trip); - - //void UpdateTrip(Trip trip); - - void DeleteTrip(int id); } -- 2.25.1 From d88eccb219e12eb318197ea8761fcff69b65d498 Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 13:18:19 +0400 Subject: [PATCH 04/20] =?UTF-8?q?=D0=97=D0=B0=D1=82=D1=8B=D1=87=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B2=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5?= =?UTF-8?q?=D0=B9=D1=81=D0=B0=D1=85=20=D1=81=D1=83=D1=89=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D0=B9-=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FuelAndLubricants/Repositories/IRefillRepository.cs | 4 +--- .../FuelAndLubricants/Repositories/ITripRepository.cs | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/IRefillRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/IRefillRepository.cs index ca33f73..0160072 100644 --- a/FuelAndLubricants/FuelAndLubricants/Repositories/IRefillRepository.cs +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/IRefillRepository.cs @@ -4,9 +4,7 @@ namespace FuelAndLubricants.Repositories; public interface IRefillRepository { - IEnumerable ReadRefills(); - - Trip ReadRefillByID(int id); + IEnumerable ReadRefills(DateTime? dateFrom = null, DateTime? dateTo = null, int? fuelId = null, int? carId = null); void CreateRefill(Refill refill); } diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/ITripRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/ITripRepository.cs index 0f68261..6ceb297 100644 --- a/FuelAndLubricants/FuelAndLubricants/Repositories/ITripRepository.cs +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/ITripRepository.cs @@ -4,9 +4,7 @@ namespace FuelAndLubricants.Repositories; public interface ITripRepository { - IEnumerable ReadTrips(); - - Trip ReadTripByID(int id); + IEnumerable ReadTrips(DateTime? dateFrom = null, DateTime? dateTo = null, int? carId = null, int? driverId = null, int? routeId = null); void CreateTrip(Trip trip); } -- 2.25.1 From 0f57d551c74937ca3558f0d0fce51852df1559e7 Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 13:32:34 +0400 Subject: [PATCH 05/20] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84?= =?UTF-8?q?=D0=B5=D0=B9=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Implementations/CarRepository.cs | 28 +++++++++++++++++++ .../Implementations/DriverRepository.cs | 28 +++++++++++++++++++ .../Implementations/FuelRepository.cs | 28 +++++++++++++++++++ .../Implementations/RefillRepository.cs | 15 ++++++++++ .../Implementations/RouteRepository.cs | 28 +++++++++++++++++++ .../Implementations/TripRepository.cs | 15 ++++++++++ 6 files changed, 142 insertions(+) create mode 100644 FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/CarRepository.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/DriverRepository.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/FuelRepository.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/RefillRepository.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/RouteRepository.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/TripRepository.cs diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/CarRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/CarRepository.cs new file mode 100644 index 0000000..5759289 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/CarRepository.cs @@ -0,0 +1,28 @@ +using FuelAndLubricants.Entities; + +namespace FuelAndLubricants.Repositories.Implementations; + +public class CarRepository : ICarRepository +{ + public void CreateCar(Car car) + { + } + + public void DeleteCar(int id) + { + } + + public Car ReadCarByID(int id) + { + return Car.CreateEntity(0, string.Empty, string.Empty, 0, 0, 0); + } + + public IEnumerable ReadCars() + { + return []; + } + + public void UpdateCar(Car car) + { + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/DriverRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/DriverRepository.cs new file mode 100644 index 0000000..7194bc2 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/DriverRepository.cs @@ -0,0 +1,28 @@ +using FuelAndLubricants.Entities; + +namespace FuelAndLubricants.Repositories.Implementations; + +public class DriverRepository : IDriverRepository +{ + public void CreateDriver(Driver driver) + { + } + + public void DeleteDriver(int id) + { + } + + public Driver ReadDriverByID(int id) + { + return Driver.CreateEntity(0, string.Empty, string.Empty, 0); + } + + public IEnumerable ReadDrivers() + { + return []; + } + + public void UpdateDriver(Driver driver) + { + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/FuelRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/FuelRepository.cs new file mode 100644 index 0000000..d2ad30b --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/FuelRepository.cs @@ -0,0 +1,28 @@ +using FuelAndLubricants.Entities; + +namespace FuelAndLubricants.Repositories.Implementations; + +public class FuelRepository : IFuelRepository +{ + public void CreateDriver(Fuel_And_Lubricants fuel) + { + } + + public void DeleteFuel(int id) + { + } + + public Fuel_And_Lubricants ReadFuelByID(int id) + { + return Fuel_And_Lubricants.CreateEntity(0, 0, 0, 0); + } + + public IEnumerable ReadFuels() + { + return []; + } + + public void UpdateFuel(Fuel_And_Lubricants fuel) + { + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/RefillRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/RefillRepository.cs new file mode 100644 index 0000000..719e34c --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/RefillRepository.cs @@ -0,0 +1,15 @@ +using FuelAndLubricants.Entities; + +namespace FuelAndLubricants.Repositories.Implementations; + +public class RefillRepository : IRefillRepository +{ + public void CreateRefill(Refill refill) + { + } + + public IEnumerable ReadRefills(DateTime? dateFrom = null, DateTime? dateTo = null, int? fuelId = null, int? carId = null) + { + return []; + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/RouteRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/RouteRepository.cs new file mode 100644 index 0000000..cc9e08e --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/RouteRepository.cs @@ -0,0 +1,28 @@ +using FuelAndLubricants.Entities; + +namespace FuelAndLubricants.Repositories.Implementations; + +public class RouteRepository : IRouteRepository +{ + public void CreateRoute(Route route) + { + } + + public void DeleteRoute(int id) + { + } + + public Route ReadRouteByID(int id) + { + return Route.CreateEntity(0, string.Empty, string.Empty, 0); + } + + public IEnumerable ReadRoutes() + { + return []; + } + + public void UpdateRoute(Route route) + { + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/TripRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/TripRepository.cs new file mode 100644 index 0000000..9cd8e6f --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/TripRepository.cs @@ -0,0 +1,15 @@ +using FuelAndLubricants.Entities; + +namespace FuelAndLubricants.Repositories.Implementations; + +public class TripRepository : ITripRepository +{ + public void CreateTrip(Trip trip) + { + } + + public IEnumerable ReadTrips(DateTime? dateFrom = null, DateTime? dateTo = null, int? carId = null, int? driverId = null, int? routeId = null) + { + return []; + } +} -- 2.25.1 From 99d1bee2eddf58c5923dd2ba712002b5d77b15d1 Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 13:40:59 +0400 Subject: [PATCH 06/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B8=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5?= =?UTF-8?q?=D0=B9=D0=BD=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FuelAndLubricants.csproj | 4 ++++ .../FuelAndLubricants/Program.cs | 20 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/FuelAndLubricants/FuelAndLubricants/FuelAndLubricants.csproj b/FuelAndLubricants/FuelAndLubricants/FuelAndLubricants.csproj index 663fdb8..894afcd 100644 --- a/FuelAndLubricants/FuelAndLubricants/FuelAndLubricants.csproj +++ b/FuelAndLubricants/FuelAndLubricants/FuelAndLubricants.csproj @@ -8,4 +8,8 @@ enable + + + + \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Program.cs b/FuelAndLubricants/FuelAndLubricants/Program.cs index 9b4d241..dd083d0 100644 --- a/FuelAndLubricants/FuelAndLubricants/Program.cs +++ b/FuelAndLubricants/FuelAndLubricants/Program.cs @@ -1,3 +1,7 @@ +using FuelAndLubricants.Repositories; +using FuelAndLubricants.Repositories.Implementations; +using Unity; + namespace FuelAndLubricants { internal static class Program @@ -11,7 +15,21 @@ namespace FuelAndLubricants // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(CreateContainer().Resolve()); + } + + private static UnityContainer CreateContainer() + { + var container = new UnityContainer(); + + container.RegisterType(); + container.RegisterType(); + container.RegisterType(); + container.RegisterType(); + container.RegisterType(); + container.RegisterType(); + + return container; } } } \ No newline at end of file -- 2.25.1 From f9da0efdc994585b96459cc216fd9846461ee275 Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 14:50:31 +0400 Subject: [PATCH 07/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D0=B2=D0=BE?= =?UTF-8?q?=D0=B4=D0=B8=D1=82=D0=B5=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FuelAndLubricants/Form1.Designer.cs | 39 ----- .../FormFuelAndLubricants.Designer.cs | 140 +++++++++++++++++ .../{Form1.cs => FormFuelAndLubricants.cs} | 4 +- .../FormFuelAndLubricants.resx | 123 +++++++++++++++ .../Forms/FormDriver.Designer.cs | 141 ++++++++++++++++++ .../FuelAndLubricants/Forms/FormDriver.cs | 87 +++++++++++ .../FuelAndLubricants/Forms/FormDriver.resx | 120 +++++++++++++++ .../FuelAndLubricants.csproj | 15 ++ .../FuelAndLubricants/Program.cs | 2 +- .../Properties/Resources.Designer.cs | 73 +++++++++ .../{Form1.resx => Properties/Resources.resx} | 4 + .../FuelAndLubricants/Resources/ГСМ.jpg | Bin 0 -> 175713 bytes 12 files changed, 706 insertions(+), 42 deletions(-) delete mode 100644 FuelAndLubricants/FuelAndLubricants/Form1.Designer.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.Designer.cs rename FuelAndLubricants/FuelAndLubricants/{Form1.cs => FormFuelAndLubricants.cs} (51%) create mode 100644 FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.resx create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormDriver.Designer.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormDriver.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormDriver.resx create mode 100644 FuelAndLubricants/FuelAndLubricants/Properties/Resources.Designer.cs rename FuelAndLubricants/FuelAndLubricants/{Form1.resx => Properties/Resources.resx} (93%) create mode 100644 FuelAndLubricants/FuelAndLubricants/Resources/ГСМ.jpg diff --git a/FuelAndLubricants/FuelAndLubricants/Form1.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Form1.Designer.cs deleted file mode 100644 index 2978835..0000000 --- a/FuelAndLubricants/FuelAndLubricants/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace FuelAndLubricants -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; - } - - #endregion - } -} diff --git a/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.Designer.cs b/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.Designer.cs new file mode 100644 index 0000000..95ed9e6 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.Designer.cs @@ -0,0 +1,140 @@ +namespace FuelAndLubricants +{ + partial class FormFuelAndLubricants + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + menuStrip = new MenuStrip(); + справочникиToolStripMenuItem = new ToolStripMenuItem(); + операцииToolStripMenuItem = new ToolStripMenuItem(); + отчетыToolStripMenuItem = new ToolStripMenuItem(); + машиныToolStripMenuItem = new ToolStripMenuItem(); + водителиToolStripMenuItem = new ToolStripMenuItem(); + топливоToolStripMenuItem = new ToolStripMenuItem(); + маршрутыToolStripMenuItem = new ToolStripMenuItem(); + заправкаToolStripMenuItem = new ToolStripMenuItem(); + поездкаToolStripMenuItem = new ToolStripMenuItem(); + menuStrip.SuspendLayout(); + SuspendLayout(); + // + // menuStrip + // + menuStrip.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, операцииToolStripMenuItem, отчетыToolStripMenuItem }); + menuStrip.Location = new Point(0, 0); + menuStrip.Name = "menuStrip"; + menuStrip.Size = new Size(784, 24); + menuStrip.TabIndex = 0; + menuStrip.Text = "menuStrip1"; + // + // справочникиToolStripMenuItem + // + справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { машиныToolStripMenuItem, водителиToolStripMenuItem, топливоToolStripMenuItem, маршрутыToolStripMenuItem }); + справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; + справочникиToolStripMenuItem.Size = new Size(94, 20); + справочникиToolStripMenuItem.Text = "Справочники"; + // + // операцииToolStripMenuItem + // + операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { заправкаToolStripMenuItem, поездкаToolStripMenuItem }); + операцииToolStripMenuItem.Name = "операцииToolStripMenuItem"; + операцииToolStripMenuItem.Size = new Size(75, 20); + операцииToolStripMenuItem.Text = "Операции"; + // + // отчетыToolStripMenuItem + // + отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem"; + отчетыToolStripMenuItem.Size = new Size(60, 20); + отчетыToolStripMenuItem.Text = "Отчеты"; + // + // машиныToolStripMenuItem + // + машиныToolStripMenuItem.Name = "машиныToolStripMenuItem"; + машиныToolStripMenuItem.Size = new Size(180, 22); + машиныToolStripMenuItem.Text = "Машины"; + // + // водителиToolStripMenuItem + // + водителиToolStripMenuItem.Name = "водителиToolStripMenuItem"; + водителиToolStripMenuItem.Size = new Size(180, 22); + водителиToolStripMenuItem.Text = "Водители"; + // + // топливоToolStripMenuItem + // + топливоToolStripMenuItem.Name = "топливоToolStripMenuItem"; + топливоToolStripMenuItem.Size = new Size(180, 22); + топливоToolStripMenuItem.Text = "Топливо"; + // + // маршрутыToolStripMenuItem + // + маршрутыToolStripMenuItem.Name = "маршрутыToolStripMenuItem"; + маршрутыToolStripMenuItem.Size = new Size(180, 22); + маршрутыToolStripMenuItem.Text = "Маршруты"; + // + // заправкаToolStripMenuItem + // + заправкаToolStripMenuItem.Name = "заправкаToolStripMenuItem"; + заправкаToolStripMenuItem.Size = new Size(180, 22); + заправкаToolStripMenuItem.Text = "Заправка"; + // + // поездкаToolStripMenuItem + // + поездкаToolStripMenuItem.Name = "поездкаToolStripMenuItem"; + поездкаToolStripMenuItem.Size = new Size(180, 22); + поездкаToolStripMenuItem.Text = "Поездка"; + // + // FormFuelAndLubricants + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackgroundImage = Properties.Resources.ГСМ; + BackgroundImageLayout = ImageLayout.Stretch; + ClientSize = new Size(784, 411); + Controls.Add(menuStrip); + MainMenuStrip = menuStrip; + Name = "FormFuelAndLubricants"; + StartPosition = FormStartPosition.CenterScreen; + Text = "ГСМ"; + menuStrip.ResumeLayout(false); + menuStrip.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private MenuStrip menuStrip; + private ToolStripMenuItem справочникиToolStripMenuItem; + private ToolStripMenuItem машиныToolStripMenuItem; + private ToolStripMenuItem водителиToolStripMenuItem; + private ToolStripMenuItem топливоToolStripMenuItem; + private ToolStripMenuItem маршрутыToolStripMenuItem; + private ToolStripMenuItem операцииToolStripMenuItem; + private ToolStripMenuItem заправкаToolStripMenuItem; + private ToolStripMenuItem поездкаToolStripMenuItem; + private ToolStripMenuItem отчетыToolStripMenuItem; + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Form1.cs b/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.cs similarity index 51% rename from FuelAndLubricants/FuelAndLubricants/Form1.cs rename to FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.cs index 9d5b795..584f691 100644 --- a/FuelAndLubricants/FuelAndLubricants/Form1.cs +++ b/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.cs @@ -1,8 +1,8 @@ namespace FuelAndLubricants { - public partial class Form1 : Form + public partial class FormFuelAndLubricants : Form { - public Form1() + public FormFuelAndLubricants() { InitializeComponent(); } diff --git a/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.resx b/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.resx new file mode 100644 index 0000000..31084d5 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormDriver.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormDriver.Designer.cs new file mode 100644 index 0000000..d69f2c4 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormDriver.Designer.cs @@ -0,0 +1,141 @@ +namespace FuelAndLubricants.Forms +{ + partial class FormDriver + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + label1 = new Label(); + textBoxDriverFirstname = new TextBox(); + textBoxDriverSecondname = new TextBox(); + label2 = new Label(); + label3 = new Label(); + buttonDriverSave = new Button(); + buttonDriverCancel = new Button(); + checkedListBoxDriverLicense = new CheckedListBox(); + SuspendLayout(); + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(13, 18); + label1.Name = "label1"; + label1.Size = new Size(31, 15); + label1.TabIndex = 0; + label1.Text = "Имя"; + // + // textBoxDriverFirstname + // + textBoxDriverFirstname.Location = new Point(111, 15); + textBoxDriverFirstname.Name = "textBoxDriverFirstname"; + textBoxDriverFirstname.Size = new Size(140, 23); + textBoxDriverFirstname.TabIndex = 1; + // + // textBoxDriverSecondname + // + textBoxDriverSecondname.Location = new Point(111, 44); + textBoxDriverSecondname.Name = "textBoxDriverSecondname"; + textBoxDriverSecondname.Size = new Size(140, 23); + textBoxDriverSecondname.TabIndex = 3; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(13, 47); + label2.Name = "label2"; + label2.Size = new Size(58, 15); + label2.TabIndex = 2; + label2.Text = "Фамилия"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(13, 76); + label3.Name = "label3"; + label3.Size = new Size(92, 15); + label3.TabIndex = 4; + label3.Text = "Категория прав"; + // + // buttonDriverSave + // + buttonDriverSave.Location = new Point(13, 176); + buttonDriverSave.Name = "buttonDriverSave"; + buttonDriverSave.Size = new Size(75, 23); + buttonDriverSave.TabIndex = 6; + buttonDriverSave.Text = "Сохранить"; + buttonDriverSave.UseVisualStyleBackColor = true; + buttonDriverSave.Click += ButtonDriverSave_Click; + // + // buttonDriverCancel + // + buttonDriverCancel.Location = new Point(176, 176); + buttonDriverCancel.Name = "buttonDriverCancel"; + buttonDriverCancel.Size = new Size(75, 23); + buttonDriverCancel.TabIndex = 7; + buttonDriverCancel.Text = "Отмена"; + buttonDriverCancel.UseVisualStyleBackColor = true; + buttonDriverCancel.Click += ButtonDriverCancel_Click; + // + // checkedListBoxDriverLicense + // + checkedListBoxDriverLicense.FormattingEnabled = true; + checkedListBoxDriverLicense.Location = new Point(111, 76); + checkedListBoxDriverLicense.Name = "checkedListBoxDriverLicense"; + checkedListBoxDriverLicense.Size = new Size(140, 94); + checkedListBoxDriverLicense.TabIndex = 9; + // + // FormDriver + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(264, 211); + Controls.Add(checkedListBoxDriverLicense); + Controls.Add(buttonDriverCancel); + Controls.Add(buttonDriverSave); + Controls.Add(label3); + Controls.Add(textBoxDriverSecondname); + Controls.Add(label2); + Controls.Add(textBoxDriverFirstname); + Controls.Add(label1); + Name = "FormDriver"; + StartPosition = FormStartPosition.CenterParent; + Text = "Водитель"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label label1; + private TextBox textBoxDriverFirstname; + private TextBox textBoxDriverSecondname; + private Label label2; + private Label label3; + private Button buttonDriverSave; + private Button buttonDriverCancel; + private CheckedListBox checkedListBoxDriverLicense; + } +} \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormDriver.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormDriver.cs new file mode 100644 index 0000000..b67eb43 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormDriver.cs @@ -0,0 +1,87 @@ +using FuelAndLubricants.Entities; +using FuelAndLubricants.Entities.Enums; +using FuelAndLubricants.Repositories; + +namespace FuelAndLubricants.Forms +{ + public partial class FormDriver : Form + { + private readonly IDriverRepository _driverRepository; + + private int? _driverId; + + public int Id + { + set + { + try + { + var driver = _driverRepository.ReadDriverByID(value); + if (driver == null) + throw new InvalidOperationException(nameof(driver)); + + foreach (Driver_License elem in Enum.GetValues(typeof(Driver_License))) + { + if ((elem & driver.Driver_License) != 0) + { + checkedListBoxDriverLicense.SetItemChecked(checkedListBoxDriverLicense.Items.IndexOf(elem), true); + } + } + + + textBoxDriverFirstname.Text = driver.Firstname; + textBoxDriverSecondname.Text = driver.Secondname; + _driverId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormDriver(IDriverRepository driverRepository) + { + InitializeComponent(); + _driverRepository = driverRepository ?? + throw new ArgumentNullException(nameof(driverRepository)); + + foreach (var elem in Enum.GetValues(typeof(Driver_License))) + checkedListBoxDriverLicense.Items.Add(elem); + } + + private void ButtonDriverSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxDriverFirstname.Text) || string.IsNullOrWhiteSpace(textBoxDriverSecondname.Text) || checkedListBoxDriverLicense.CheckedItems.Count == 0) + throw new Exception("Имеются незаполненные поля"); + + if (_driverId.HasValue) + _driverRepository.UpdateDriver(CreateDriver(_driverId.Value)); + else + _driverRepository.CreateDriver(CreateDriver(0)); + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDriverCancel_Click(object sender, EventArgs e) => Close(); + + private Driver CreateDriver(int id) + { + Driver_License driver_License = Driver_License.None; + foreach (var elem in checkedListBoxDriverLicense.CheckedItems) + { + driver_License |= (Driver_License)elem; + } + + return Driver.CreateEntity(id, textBoxDriverFirstname.Text, textBoxDriverSecondname.Text, driver_License); + } + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormDriver.resx b/FuelAndLubricants/FuelAndLubricants/Forms/FormDriver.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormDriver.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/FuelAndLubricants.csproj b/FuelAndLubricants/FuelAndLubricants/FuelAndLubricants.csproj index 894afcd..accbdf0 100644 --- a/FuelAndLubricants/FuelAndLubricants/FuelAndLubricants.csproj +++ b/FuelAndLubricants/FuelAndLubricants/FuelAndLubricants.csproj @@ -12,4 +12,19 @@ + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Program.cs b/FuelAndLubricants/FuelAndLubricants/Program.cs index dd083d0..5ab9ffd 100644 --- a/FuelAndLubricants/FuelAndLubricants/Program.cs +++ b/FuelAndLubricants/FuelAndLubricants/Program.cs @@ -15,7 +15,7 @@ namespace FuelAndLubricants // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(CreateContainer().Resolve()); + Application.Run(CreateContainer().Resolve()); } private static UnityContainer CreateContainer() diff --git a/FuelAndLubricants/FuelAndLubricants/Properties/Resources.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Properties/Resources.Designer.cs new file mode 100644 index 0000000..6091d21 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Properties/Resources.Designer.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace FuelAndLubricants.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("FuelAndLubricants.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ГСМ { + get { + object obj = ResourceManager.GetObject("ГСМ", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Form1.resx b/FuelAndLubricants/FuelAndLubricants/Properties/Resources.resx similarity index 93% rename from FuelAndLubricants/FuelAndLubricants/Form1.resx rename to FuelAndLubricants/FuelAndLubricants/Properties/Resources.resx index 1af7de1..589857c 100644 --- a/FuelAndLubricants/FuelAndLubricants/Form1.resx +++ b/FuelAndLubricants/FuelAndLubricants/Properties/Resources.resx @@ -117,4 +117,8 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\ГСМ.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Resources/ГСМ.jpg b/FuelAndLubricants/FuelAndLubricants/Resources/ГСМ.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5fcd8ee13bbd27358b31d033ee5b4794671b4996 GIT binary patch literal 175713 zcmb4pdpwi<8~?q7+2+t}BWD{M+oF&h^2lw5nPFx+9~=vz5*?@vlT(;Ar6`*->0s%! zPDo)r^*C0PN~H&t%A=?pe)spE-|z3=z1M4h+=uIPx~|Xle!s8J(u<|H0FLAB>kYtQ zFu(x%0ZT6dPXL8fL#ZKAC^eM2Itq=&VX+ttmZ-f<6SthGufLqAr)OwFH8V7_FxJx} zS(7X*t>_H8ftii14b7HHqtpIp1g5U8jzwb$SS*2NsAov~|Gt)50Ub2bSzU;LnFDYg z7(xfO)BzX+00Mv`V8H*oU~mM~Uv)I}GzbU45D2&$424jGE_FZy27QVk+aW#FQ23y* zed+}B^kO;DzFF6T+19(7AD%d>N0EH{?%)}`KLbs*WJP42T)sw7>1ZXYQndF$CXN0# zHHiQH{oe~}5Skrz=;0b201k&Cp*9gnI0AsF0RRkY4~Zw+sS!Ma%FS z^5$=Cl<>sf?@PmgCe(lEH66em_#C=@;?xMwOsn7K$@71Ajia3JM?Of{^JA0Yx|QQO z&OH4t(Qg)9H{HIloC#moQ+7~UFV0a4na`x{fau{JlKw5OhKlK7+i*ig+~M$0<>U{* z%qMj4zy{Ocd?FG^t2A^ANqR|tC`otz!Bqoy1|`ax9jt|ILAYS)ZM}`IhXwsd+KgBsI$<}Vc%5B>Q7`f64da`x!*t&Y=7yBO;^-ZhM+A2%O zGduUwGn$jFY^nOgQPMV5$Mcu;ALPP*niH#O+qRQP*>GgBX|M*dk{5I;Xx;jC)tMR9 zRn}Dvpp%aPX~a$M&Tj88iLCv}AjFir+0HlNgSDGk-B+GGk6hm5#@0qVo=H)K{oLqr zi)#!GQ9I<>6^&3C9#`fsoGwj#u1(K2@Y(6=FPv}G)w{u8D`mZiPkjN_U(38*_pHIu zB2thZnL1W)T)|()9h$8T$$O?6D61QcwCsrgGn4wGVQ|F63o}u6@8^);>tCCR|eR44nL7N%!ut-l z^4PaouZUh3vkoNoap5PfAib=ndAvOP-t_6a(=BR(h0pm!)8cz8aP_g|eedKaWbRI^ zAva25{AET#w8jZtvip%e$p=?2V|~y{wO)BKx$dj4-=$Bc+*1t4Cp#Eg+aK;;{&6Dt zu;-crBl8CK;N}r8Jnyzn`C#y~<|r3v1@p4(1WoiOlH&t$*t*Dv%xi62qTO)8sX@1A z-p|~gRqzp#zqdOi{CPwF(?1fEe3-jdHRR@ykUH(;^DZ#CcH79xDojMb_t$rtTQI4! zYPH5;>ndxSC#vE$P_|aRDOL_@vuaNEd-q%lUQ?$WkhalprbNG(tyy*Gif_P?dPgJf zB`{;X$JVFoa}G)$+-bV8dU=7-mw_#etivPwMjyH#O0Derdpjl3bO}&-^1R2Qlh02o zRrji_stdtbZj^dR+$Go7)MuA3Ff_1EOMs4R&DZ&hxUaOy>Dph*`@Bal9bg>&T5^Fl z8N8qIs6f8?7k9&o;0D_duR3cB+O|$ryjzyo^7~HBKp8Zs_&?M9+0Lj71Ho#>FJ^kL ze&sNmPh3o>EUa;|{~bNFCd#8ewJBIyr%Z?lJNep@fonDwD8AVL=_{>YZ@{W4sDJzw zyDch0iim{nrnVO!W>A5KFjitNhcC6!rIoCvNyGCd1!fw?a_gXT*CLXc&3B(QNk3e; zRr=Yx^B&z$p?BvOOZtkabNZ4h<&?{Gt|t}$Te6aurO|S!<$>x^7Jp^m?@NXERCus* z6P3>4^IBXKeCZHca9qOAL2wx15fux9lTwgN>29jwjZOTKJktwou zlTm9JmDP44F;31i=S#^1bZs7YN6Ud)tH(Z1ol z5u1~KQ5+1h4=ij3q5!y{E5BQS*`E2#9&Y}eYxG;Tl>|_2tqW)UZ!+MZkN>4c*Gl)v zb8t6DR-~|AOLg?UtBjP=h}*YZVCYKK7i4s_hXWo{IX5z@fH;EwNoo9xn)IV3YQ`ID zhw|&ylR9%*C|_@{>0(lXI7lXV*&h0#0p3%dUn#&MceGpf$n?1e?L3?NN&kMX3dL}Z zza$M?-}+r^G7@n{+Qwn*^i}Ln-4sziyMQm1>P4v&{$qXABgMyA4XSzU+(a>|s^7ex z|H_$9frg@SQ!#?Ra z2K;oTY1RyZ_UqSOns_qkWzT^L6Xdl_%Si<7;1hgvrW!$kyQNC>o^)!5!`p^jRlJJDG?uBDpf?3o3m`tw%Sq{ljUl$n`9V93Yrw@dyfy9^k_#Y z8+f+oC(X6FLon0aMu3P<&&WdCrYpCQ{Sc)AabneKhWMaA=b#9oPrt!9O3>p;c{J(q z@$yEFA&QUUW#nNpYR7rn`!Om{bP3xwxP-=U3off;1SuNC4c^^Inn&%jK~ffM13E^< z7G%LI`03K09$pA(H;?L2Nz^*2#+3(oaT${v`%A2)g1Ui9o_$8Xlq2O>X6b1)GHKf=V7w1>*#R4hXb9v)Z_l&lJjn=p1~m7YD{KuR;Vc z#b@n#ZLDfxGc=DS^o)z?Dj1!#i9qV5!wV-xf?8~DdjyTvQbP)2;E!XebXFZRPs%CY zTROt$jUlkiP?HdOnpcf>kt{2ZtsWk(MXLM^dtow`=)KxmG`#SzpP-({R)ghvOV+ zP<5_yOCyd{6)Be4ipU^_jPcT*usqdu6V7y%^W_JjmOVd8#~j3PFEle3?aNE{E%Nd| z;IYxe^@3Uo?afWq^JQM(6sM#AT<>7`MFY#7F|4+d6Ke_D`B`dbD7C3g+t#aO0=lH% z{#}607~0qJG*;-nAmPN0tV~7_7RR4q8_&`+Q%PnClm4pEUpLvNV*>S1Y5UG0 z_CX2>*zZ1#L%vZ2xOl_ixmWZtj*fKw%n_Vief80P)I-`Y^1ZB}2-Hum26goiX<3pU z&r!&c?TR8~d8%OLThMgPD6?+niST1NWoA}%%o%}}jHHRrEa>}H7iNpg-1nmD>4;-MSVqQ*2^dSF3}z=qsuin`nDotX!zY1KHKVGeM?{j9!uPX~jE+U&b6ovxZLNjjZ7}+`EN~2MBuDeuWI&D*krHG;d9_d&4~@cs#KCh($To%V33ChM z+B#)?I}R11Mz)osmPKwu3xuVOIHeGkavUE3oY@?dU%8y#T-23 z-Q`Qu`imkVIfPM2#&QY?X+9nVu&T?cLMEHvs)F8>D{xsLg}~_!#fhw;z_At^ZXv5d zkx?Md1$>e$u<2YW85)<|0kAD*;;?_J&oGH>CL0DrGvzGuYLU2dh|1yB<9L#;sv%B{ zE*y{$m>JSpI+@2L)BJ(rT#>mhyxqxz*&(ZOkhD_H`g$SB*dU%*#0a7^P{$vp*Pprg^O zR3d?VnRbXZJ0*4sSS68ro6jnat()*#0?v{;pMZ{2=PuJJnx)G@-Zw%=H36aGnaqk> z*~n?(sw3oPC)U3Tr+kiZ-y4i7c=rgDf}$L<3JJ`@J!9mb-o63=M9}l8t`$jDl(_m8<^; zs&G|6@DNUzqZtKT#p>+kYewP4+(RG?U)rvXOV?wn^)umcb3(!-%#y$s!7wApP0oUh zfN@ZfgEY53t4oR#9psXTmhfmMTn8h=+n&X#H>!yVPE3uYc5{M}Tumt#X^tnDAM};0Wz8eVyZ<5CX{ec zA_`vEJ3?vaA;~bHO+lrQ4B1Rs7|rGZIC`+{~-Iax~g(vmQ-GCa3t1PdQ$ZXtu!XW2MPMUuGAKiA+FV*y|I z;8^#&$Is%H*YqswwF9bGiLQjG!o%MPMBO8{snm4e7aA*&PkXA5@y`iwQ9+kn1qxr# z52(4d4r{*Hv_Sx`MnCL*Js}8^SU22Mo}WH12n{DVS}8oI-_UYhR7pWy@b1jAml%yb zqpk;-NTWvt^}XVBOWcdka-U*6)h!RKjg0sxbW&Jd=dC7LI#IE9_yUQjQ+frVi0B5N zP82(X2uqzbn!eIvN*H?b7FYA<55Ldpc9X&|-g#AO9RoI;Q0g|&krgDmLU@CDuYv&x+6362PO{Y`v1W;1UIoc|*SLu(5sY5>!{Vx93u>bf$Lo|Eq_F7k^SXrhXk zJpJwbcmh!kMg#SP<-0H-xP9UaZ8=RpivwFfo>Kv7IfUpLkfsEb95D_6P5R+oAf}*4 zM~SneakmG-(D3nLd*N9MfFx;**@ghGB9UpDM2biTLl2>0Q1qdhY?P?jg(nl8EN_Hi$N-U2 zE<>90r-V)c2QXw>3qI8%@=`A7CSmHz){tSgLOkb)j7amXKueEEc(Pp4CVc^qa>f@( zkp5z_qda}l0utB`5hq7ZPzgY^Q1Tl*)X-%_;B*o^{V>F*m=KaHHqSr>MKfh=4_~Z< z_(VNYWT6IJ5<#(gs=G!}gD1R@gCZwisL^wO89271jvQdAHaNHc+;k-jX9*>YFVdsW z=rC4fqY)rnc@TWXTmfM2)R{$sBL8n8SAbdN{{3(sYAz6>R$)d)=GGQy#PUBRebZ9` z_|g}Q<$8Y_+Mt}9D%DIOA&Qe=t_C4TXZ?~o5@g0)k)yTvb+=G>sA3TKsPk$qLBzmi z5N`A`>a8l>L^}_7Pgi@or-%U(lRnoU2^a&}A8G0CWyi;p02eikHRL4$( zBYYv~j@_GHR>}jW2=S6L+;9ORJu&BV`Vbme*4P9WcS;vy)73yuIiriGxjBf2Xa_#m z!!ROPQi2SIY1g@50{H=Wkc(yluY)kMFc5(e-L4hEBKxF+fW0U^L;*Q#&J52@^_C6Iq&GBkqEO{s2;gsMY(Lm#NQG6H6iJ0B|>s zAkdKi;l%B@Oq9+U5c5S!vXn#vhXbi}W=3{fDNuSbYWmnNi-!u|&X%>gIw zrj_G@On+{j65x`_N@2BTH6a8SV<|!m(U|ZcV3T_mxi_a;%K! z=w~m%Wg(lJmFugnBqoZdh3Q!!Rk@$qQsHui4s8K zMA#Mt>fy?9kXILQ@6l_XHOJ~B0sc&5Adcq4)n}v6^`e3;y=nkUTqfxERI+2sc4= zf-5N@i;*BYIHhwY3+Acvhb(;+2v^ESPPa#5@Yk-vC01!7`x~(juTR33g;N z(880PIH6D`QsfAaTNud+ktB@3npg*6t-z1P;0VwgFV^Zc)e+-FyRfkI$e-<7td!<} zH!fG8_1CCP9vqhn;d4!kq~nBFa+nd>6fc~%F6;_a;M{aZ$QeRm%tMJk3xY%fAwk84 z;1CA|MV%y3WC-}$jRBTg5)8CyGZZ3x4C%-Kf@w2?O&1N!GWDhT6kNUG0XB)|A^KM1 z_*SN`zm8DejSspTq2mt}5dVMDU%m|2{60;ydNS8G0 z4?ECjER#kerM*o9dGyBUbllry!Ah~j#!9`W>9 zB8ms0BNy2vz9|#N?cz1;meXB(P-+R{kAv4z@?o^jLgv#of5L5D_ z_4%6%omkZ(nnhBa1f~kMPan0I%rf*sgJ@1%x!kKoPGP`oifKIL80KI=5Rsp&z)6Ga zh6x~AKkL(KPl+8ZLC1D)`Y4X^Jm1n9COwe}Gi?A5x2xq&oqB#lq&Wuiauk~4-1JCI z-Dsi}n#5dtuf7Xe4``J5yJ|MH1=vKQ~E->~5i$sdmD#1{>M{4EydbKGM&h&z_nE2YETCur(-$LQX@Ne|m) zhd??ZDI7<%&Y2dsL850scVKm$0tozw*9Uo-T#BX&#e`KUISPCZ0;0vW~mBVW{~hsgphk_xhVgrQbSW=9W?1t^_dX7DKRuunabB22BtGohY@p%pwJ zh}Od7*Df<_Cl-Jgs7_A}rTU*IWU*sjf2SWbXCG${wbSVAiE87VR@S6GkC zbL50E3*(Ae)%9#01@1T~;;>P+e4j=f95wE%2FHnLWDE(PDA6ItkgA18`@APOu+P$} zBqWWBA%lNW(nZ&qMUlBoUoX=xN47pxe?-cyrE!h4J{n(UsFml-sXT6%MA}GoVV2ud z#_VwX<>nz5?FEwWV59v*!K?QR^4wmJ~~?c&WLu#SivjuJMTGakT#`8blLv z*pYSij^Gj?X#kHk6!cAH8L4Snt|Yen^V`au3UpX0#3X%zof;28f6~f#3Jk9cm1hu) zMz}+G4{#%$89ZVeNiqyodD2C+#T^0!`s)yuXW9lM4>>D<(wsnhsf-CL+ETl&-h5}U zPZu2o-9O}d9u()d!z$3|QoRfjV#FQmRb#hT7%^GII?jw%SLmSi6abf!1@wxv zdKyrr{J$(mKFifGoo>h>3f=o&;*+7c+ zh5#4ZPq{8yeaKECiN!_R;=2Q*Y=i-PNEWWGarqxX_$D*-z@H%LtMFVo%2t#S29U_; z94J%;0GBAn5p5+@v`4L&rW7VZq+=_|5RTK5%05 zLy$tIxfXna6U|w6uGdlN3xy|6I?Ix)mscJkK?)m&OFU^H0GLpGdUw%=K-(ZX5i!DZ zprDmuIJhuT0vA?Ogi$;PYBQ@ImCFfI)@u?6G^HQA)TcRdxhf7^(yk@}U6^)Kj?7I* zVTCR&0W6ZzrDMQJU*s5I&S%!>tE{2Cl|&k)0zG&Pk?uh$>=N)kc5`bKxCS^bmziNJ z*)NsB@!sP!1kEozNC~U?k2QqOgW)A?^%0Ck6bM09L1j88h)y!D7IBEKGDwBEoOE(Z z62#<*nSf6vzKjfpp?!h4)XE8S0S#IQbCDFvrbFz&a1qGQ^~N&`d8eT;#FJszblcNO zLZ6S$y;~B=4uQ#U;L}43?x^LMcIV!y z?m0ii0(Q~Ah(x1yb}`ejefP@ZbMKYm zqbyv5@4B@$xVS0{#TQJ)Dlox{L>!{$xx3>=TeEJe?m*!y&SuF zfNAjgZ>J}PLb=pC;nb}35f*mhUH2ENjUruy@XBG6zz&j^<|eJr!Z_hd;r_@34qH#E zrYWaau+T4tU><)p%z#ibS4U6XR{%Z6%QH!6-(${ZC@ufc*mD&+#H5;+8K}yk?l$jE+sXw{INJID;MYOOz z%)cK3J-2IdnFg$C9U7MDf%YgUrYDqwe^n)lRna+^e5lOPBMAen=tL5Y%pP%JLV|&i z;QK$4WK%+Bw#vfvL}G281T_gsS==xjlI*So(7p~-cuW{D%j5O?QiGt4V;xQgqz}Ph z7|$UX1&L6nv5iJuct9W{SPj~?jO3&mxERaU7eF%G!=7{+I6|M|Y1w5+hbXj<*f5S& zJ8pl{z~7Ze>VsrsbdOB{(~+GZ({IN~hkzcjD_IR_PpyG!33Bg=67iY3IDD6}7t zOY;Rdj!brttbs{^XkbQEDYFd?F*1n9V2vzPj=oqlg6?0efK`j)WSX2Ua%(D4 z2huGyJf)XJT79bJY-FDr&*7w0YyvB%Rw8yk2hvW+zIBeC{Sq8;tYNEos?_DA(d8&f zp>?!#=DvoPL9B+MIv;^R`o_d$cP`^`R)ZFs!p{aGZ=3vYllZnP!=L?Bn z$UkyqR-_yKbo8q1Fl}& zH|EurYks#b+o0WGakXvhc~-*l6AhiMwfo+*TuA@E_lw|A(PZ(v%dI_=_rSD}ZdlU0 z(E!bc^3eB)qo$XafQO9E$Cn_$_Y&i!vhhdKnu09+7TF;gD;Xz>DI74aFBnwQqg8e5j#N%hwde51rd zU#t9Ij>yCQTJ62rXEf%_XWf|PCzA%E7b(MU*~<5w=-%#i;xh=V7_n{NNXC&Ax=uLDru_ ziwiMJfKlcWz^ggCl455d*QiyMlx=fsx_PzZ zl_9%#GRMHgocENW5jnBu{Q1v~HpaD3bt`ON+O_c)YtJ2U&du&8+dZNYOmzQU0<7z8 zjBEZdtwy(QdcQezo!v&Q`v(HYFZ_H~AUkdN1hL;^3FxI=FXU>NZ!n&+tK2ObBpKs7 zk@w@H_Y7_Z{%&ave7o6&{K``6xiPd{Nyk6YA`bdYUN^Ydf5&fkf6{@y{H!t$+i;)W zaNSLI14BR7_nRN!5zT{JmE!Q$5!+>{DO6&_On{1_iiJJ-XNU)5|FM`6=oZnR3W^k# zkKn@nqK@j)o1kr&T^!v}DT^lq{UsL8TrzV{QkzPAejFuCw=a_DXol8WF+!H1;c=zx z!>+POnX#+}ihJNXB*=Ud>0?Nw6q&x$KfQ?5YE-ZuFB3D%$3~+xRaDYhoMSFGw0iGZ z*a@cP9NWm8mkFwTWf+j=3)?~Az@tHb?oZIIFP)#|A`n{9M=A8~97|hqKnPTa*A(?2 zWu#CU4F%Qc$oNLmLlyadbt^qqJ?M?oUSFa2j_AB=+2y9en~o)V%gxs5t{)-od$r;0 zp+M|AZqIkEEwl}XkjXE0s6Iw-sM~xpmY=%4bE`|O#}14CZkS%|be^gU+4SLu@-?c} z<{t0gd#fHNBa(hR@&Bv4iuahk=%<)xy{6Lc9b1Nf?s@Fl&2`O_0}ltE=F|J1yahDt~g~O8R&~sT9e!K`;4Kd9?(eP0u8At9muOI7F4@Lp36FP{qUZ zg?XIx71_hnREJLFkUc>TPnSlfGlgNR1Y{agMik?-G{b{NNQINa5d$WX7KP%op}OfT zt2&G0!esN{SUl(g5obhsHBTZ;g+8r;N_;TOQx9Q049Pq}?%8WZ8Y4(S544nlh(sP_ zZ^A+%Akhn-ukr3jF2iw=sskm-upL>|od1y|0L$BD>T^bm%GVWU+9 zfhr-{_l$x9WAZt153d6 zjH2PQAbU-MYfDya#?CMA=_gE{mA*@1s(&r(JD8cKaF31txB3}Sv~lB5+$)4CwPR?v zQ_gsf+uBB}&XB%6xIS0IyrY*sC{fQ}Sq@$rNjUS!sJ{CB;@fcJg22|SUk1$Vm`Zd@+cu8DY@RrHqyd!PRk zv(bGRQ-U|rou?kQspl3UKg!noS3s7b`&EO);lYk2;0Lzj5O1|%-rHGS&4mrLm5u`2 z)C*lzc?)OOk19vFtZn~cpJoT2+J}9A(?%`P;zQ}Vfo31$1=H*6w2uBe*Pynt?^Emb zn}LhGt>sS%2!)jPt|4Yk&(WzXx0e9cinVTG+GYh>OMs30kFCY(Xc2MW{jBF#3eSb^ zeI3*0bMqZ&Hru$pCjTVqb52Q4Rncx|X<7_ee8>Dy`4TYwz2Lcd`GF1TK1P3SsO|J! z=b2Z#IN-R(L6U0sSbU;ZO&siCJZ0YY?FRSzYphZ5HZ#eYgOzVunKe~K$qDA_54>0br2HU4r{^xfXRJQnLNfQ#%MU$^EsLn!H*?6W zF=EG#qiTEYew|%E&sK(RZl#0oJMl?7Je$flms)(H9VAXfTlqC2zx29Sejw|6bjx0^ zVs-QkLJ3y<;n-k|nRXfftM^K8U!w)SN*dr#=%_N><}**%whaI6wxc`q_a&wdPU_

@dT+CoK5hMHl-62SIot9TP!^u=Haz=vOS|9WHcTH4NuO1GZE z?i<-LWnsQoq|T0aKkY=6{aA0|vN=0@;@qzWc=LJP>VpftrbQON8UwUF@8$(-`29?% z*mKB2C+N+f+12_Er>3+|3|`eCqVYu?nazC3r_S(Sn~bXKdt-mB+sQ9OJ?nl?jV@SM zeQev7qF-mRZcne)y5rhY|FlqzCY&_9TCSx|8XiHZMV)PZDF|D~-0?O@X)9i>?6rAT z^q7Cf^>NVRyro;)4>jv}7og-+e(a~S%R;cLW{#v$M(UpdDM?_({9CDi?Kf3K>Ls^p zKbqY|(K?~AX_d$RY(hC)Tvy`WiyPi!dGp`ciy2xkl z+a4vK&8s+Hv%&dwBIn(8+k5|FcN+%2{nhkjPf}D}$iRqA^Y*Ond;N2lk^5f4WVC=g!iwfJ~1b;G-V^Cusw*1lM?ue;;s zt`W zB{)y6Lur&ROOVvaua)IqBzLsbzMfuC2F?i93>dR_cNcvVU#yHzL%jeu*KP7D9vD}@ z$^F#w@>%FF=!1D9_E4U4w|6n5|*TyvR95!Vb#tlUtzMsmt$^{xhBN4gB7M zioJ4Vu*LCyW)v(mp)vPLec#cL)Zdh?(7+~j^CMN zZ4u0>_+qrK!DJg?^;+TncV)!xIY%n~ikAN>D6lHt(U*Y3_e0{Kz6s)*^JbQSdv6-u z7F_4!f7et7&)H`tS^GD2hP|EdU$fDE^oIvmC00FRC?GoYyY8#Oo}8n+V0#WR_0cRQ zGlt3QSEHNs6)WMz^uX}qBn{}CWztw6@2Se)yXc*nfVh!9yYZp-ELK@I66D39f_tY3 z#Us!uMf<9T+u{nItE^HIJUF&aZUFL~>`(K2cqi&TGLz`qh$J{Jh+oR^U^|m4iy0{y ziMnc5rc~S4td}Ay6540bt=QPi+DV*QhA3T6otQC$}6D385hUOnk zW(H-hL=4oN%HvwQ=hV0luU;fo+^<{sxe#Krn!$1V@SHjhxZB$2VVYabV!lD4YntT&-%7PDB0Oc*mbdosHU!IjC5NBLgd+?eg8dXrGIJo~=DB(;nudHPTb|y_^q4E^T{XOR-{}hZ`p1eLs1LHxi*_9?9i4aX zi)m@AGx5?PbMXe5-)tBq$9VT!0 zW?Aiid5zK8n+3VxyWO7OJBqUXx6TU}g61ZR<4r4%KyD`B#_#+rveCJ48M%nBtK%uP zFWp}PnnT=wmo4xgx4gDe@LP^w2zKl(T>_rOdInu^?kzeOwt#=spX7nwtR8eRKYDoC zVjP4~{2Q9~p7hQS{MEha8#SCzGu~pj5M$NQV)z$6_}q>qAYfhWCV~Hi$7af>%%)-O zJq>EePbWO19a1D03u-5Ktf}d3y8o4)xfo)3{zfd+v-z~i@)DovJw>$5s8cN!e>{ON zJp|&l)hTZaM;O(QZ%prDa~`uNUUP2;1@~-7_K(P8~d;RNq65D_@~la zuN6LBSXS~WF={xJxT!FG#%FZGd0XcA)tMpKDO5u9t4IClDsEVT8RhQ7zs|=0wkggu z@CkTmWaPi+LH~$6INBDiso@;oRPLYs#L51Pt)b?z&4ccuYU4o9UCQCzq5i$dzo`ZF z&(>~cnbtbYabsv=SZ$xH*Qrk5vJR5QCclVShl&SDmk&Nd_`u0Ts(fQI7M^+s9 zs?S9>Uo#9G{k_Z4#H+$9=i51p+UOf5rzt)ny$@_7*>K^CpO%?NS7ZKLvD(>Nq!B}_ zSpU!DE$w0#7TS+$0q(u1ouLeE zh0?j>pOP!qUO0(h9Opmk*cULW%ov4s*<|yceMv7LBm+yp@5k%oi;lZ{sZzF?HP%$+ zFPz!b@$`1k5>V5Vy;pg9V(>X(k@^^RhUL4Q|ENFL*i|qz@ovrAw|XtL4k@EK(uuT$;mHSZwPFVFfc^3)QWo16V=pAT8bJCD{3c9=w57H=jN zXg6u>p450>jk^V|JT>0k@_tM8v(j_B^N%l>L)G$QgzYO|lTBOFx1MR=o~Ko37`+dC zlf9`fc?rnNT2vhGf7c5Exn2YW6TeR0vL*9Iw#ZxFJvdZvF?-ereZT!}y*71zM|K7N z7H%EoTTPzxJLi%`8|Pod{6jMPVd=7rhutTv3I?w+3vHcpTTf4Pf9>NLJp`_{+-EMQ zj@sJSj&k3p9I7`Pj6PE>V|=`1G&IYt^RbjL(mFSU!7)e8YW~Q+89g zOY~?`J7D#j@8Q_(L48)HR$nv>Dl8L$(`^L?Si+P1r8||vkECGfi zIqhMa$(0KMm)4oA*!3iEhQG$}8)YKqNF!nX)SQ9zZ(6X=_qEMw?SWP8J5CHHot(p7 zz42)9-e1CUBxLd~_a%F739ygYRA2Fj8d$&O(Re-+;q$%Zc+xdD%8CTVrQflqKQmw6 z2rb1~*MWU&hbz-YVsH15cE7PrI$JU4^J9zb01ZAHEZG}#J9ka3c3Ft~FW+MWwf^Ii zscGS1d$vScQQr0~G=PD@yE7|3pIg8$TmvH zm{b35pyN-5&(I!Jx-9|QANjU#7oqY!tfcKf-v>W@zHGCde?4Q6-=8?*1RZO*{9!Ld z!zZ4)jn34jRYvS!=iA>{0&*^vniMZ*%s8*PZ~C|*dHb6M`=Vh75U+ast9tC3p7H?4 z*ziq3txv1!QsLhWA6#7Lt;>@enJ;w|_}sP&b03TTG=6_GQuY1s+}Y&&Z?}NRg8^Pu zf_*4FDBrP&G>NZ{`D6y__2vd3NrIR~N6Y9Co!83^{yq}a;;gRIxbf!|U0g`s9%1=d{mqAlk6VuleqX-LDKWGD z13TA#0Nxf%Kg~iMJ$+!zZ0DWS((tOJe|@Sb0aZK=pRULz`>5k<_9sPY^1C~N`n<96 z`}Q3AeDBQIKaumd+9xubWK$OPIr~4A?&+2%xkoRmc1Ldu&Vi=udGE209d!DLNHuT?qJ^nf^wJvS!VDXDzJ6O~ItlgUs+UI!v z)U9~--1x2PyV=*SPTuoN-P);lM^7A@sd)W%Ys8keH8Vesti3%x7d|1r~I zj+jz*)jsnxdbuv>r}`HYYxwIMDZvM4);~#hT6X*#MD;3{2mUX9V0~(En zcGqs#a_sm_eFm1`Giu3Gg zH!(9#iWa9T(4Ecw)0D6=eG3k^^Uih5437MzO~=lo<6j$c!*Z^bj9oFT%oEq?RSEY zcUkRlO4~iy0yXiRg(6HACv~dI3x!TE?37nM-dcLB^o)9t`&i8M!gT0 zPZWKdyjSG8qh=AC+&yjV9-`_Lfv>1qUGH8EQ_NodHLtqvC`QZ%m@YRrbi~XQw3qqR z7p|oX!!G}pxm35+2@Yp<9Zy#PI$3;E`J+s(QC=Ito4u;hZSw{y4ChL5}Pf_V~Q zHoC%Kt-;)x4HxDMOCCdCkPh&(>-Uj|eb8D1>5Cgg$rEvFe;`7ELt9(4yIc8ZoXR&$ zg+CoM3#hKlPoF$+@%-HlTU*SLE3Os%OEh8j&Pm*i8&1d)3$)=KYg zrZhy{GjVK7otb_0b@|icitkW(eaIkIrc`8}AO*k#NYj=Vd43wu^)PB$amfs*nYQSkGkTCw*%0b)x|F_EvG8>mhoQi^Yn($ zg31B0Xy1IBO-YyAEdk{||7}$fVlDs6Hnc1=0W9W2qAbT_uJ!+MIr&Pk^@+p_=~V8~ zYYX2Zzxg6W^eD&I!Y5#1QgVxTHa_sh?WdGzP-kwfX~Oa7&BlSFw9MC0iCz9V_v9U} z%;)+Cin!p^(4udDpOCEFZ1c@XqvS*_l#*^KRjs&u z&*-N;0TpFqkdd!Rz}fk6$75I0z5#E}lEO)$9+={R6b}mTej)^<`%s6|7XaU+>Rc z0!}VAoHbkmMhBq6*S!1WEfcXK$aBAg`?8CqddEdp+zs+vZ(d^=85F z@sBa*)+y4y#92JiS>QV)haOo|zXZ%x{kk~BY~a0mV&}7A2`J*GK;%`BTCgMJ2Uz&} zvrV@zf6Ac{()*q??S=S}W0q%Nz1jTBE+ajs-!?6UK^kkc&)(^JCRhT}@Ao47H~X$_ zJTG>ye2LT~nRab)xQ`Kt({wkxvX#5ofeQ;^OF%;cJ>b#D*hQ^3i-S=6xxPIo-M?;@ zF9ENX052t*UBw)#n_Ir8aiH_pfT^+Z#M*O^?T;mQayd3vdC~grUm5eSc}domKNv^K zuaD88yWDTTx2&z7sZVRH7Ej5=-hLNzelqYMiBgya%n}f zQA5;K-#d=^X|zM`|57)+rTLzc9JzV%7E5;3?`JY@QU2_&WXU>c?hrl)E}of^)Niph zF@ci@hJA_|-q~C`=Kta7JmcAX-#(lr5;OKD2oigbDk4?{6-3o&QPJ8uXl+5X_Keo7 z*rT+ibfjAsX|;AsX=@f$Rke%XbN`Th&_gmqt319SHwT^QB777Eo>V^SFY}=nrWe*KOAb?#@61oJiddpuLprn2 zP|;Mk9JbRG3$VBNDUXjp)aq*#Swe`{*-?WTR2ER^Y#g1 z6|H3H=BwnbtWOCEde*}#^&^VipKiZ>nN+J%?XK~lJ|@LNq=~h`XT5dyRctk}KfZNn zcu|%pA|3c4Ee0IBvp=}$>-kT6Fp0bHfsL-Yii-&UVJ&G-OR42rwaCkR7ov<6uSH(& zxXn)bup_5=Wu&1=vfWSa%O@FYIVkwDe5a7OuiDXJ_G-k3Nq=$GEEsHXv3s!OM&vKC z@oV{|!DC}<_wGBqPS%0EZ%fF{FZtUfGCgri>{ffjC)a4nk*T4D2RFXdZTU(&)5{lqJsREtV1diH=%kWen}g=5Z6CEXc_sZV*I(cp|JI z9fonH9uvm57ii$Z=ukF<(3eUxV)VFXV&Sv`$A}iFZa%WU0lZ2tjDiyESAaXrE*b=b z$%BSO5!PtfIuL(>kszS=0G-7}BgA6>28#f0*sFm?foMQ>7=dhtgcS+=#cN-g7C->` zn8<1UJ4i=hW3mB@u;!RYGOjYP@|@V?G=R9G1>t)P*`SJgG9Ao9(N$qk28MQ_z{IW} z17+N|-X$_LAOgBYv>*hHtl15CdBK9UbkMwDkrD^rg=>9^ z8}4Yc0?K>3d{7X)FQO>*DwdJrKo!;{7ip(6tygGt4Tutk1iPy0LS?90F-QH7C)HGqGp#jE)|B zaYA0c%sm=^Wu9EhvKs5l>7gl!6$^=2nvBOv zAUM0x=@Blde_kh>0ZF&w?D5sj_=W{}{Rg5R21z`l@|+z!4d=Lxg?w_1vHgjL8Wr7; zp+c!KWX@LWl^cuM_W!VOO>#WOu0kmk#<3ca@jI&XsN$wa!EuP0V1?Xb)l)W8?Y*)( zm)(zbN2y5F6Cle;g#crsbyIer^Bn94Te9SKBrA~th40|gaE9}yzksN(Jj5|hVfg|S znVsAU&K|dymMmE^D>wHsNoUyXh)aLkDyQ?yxdHc`fPp?9wo!#AJD>R>7O<#zd zmgSe%cyM#>yT1OD)mynoHy;}VO&KT`;e+ms&I2UHAZKrJyqdX+0|0L?Y_DE@HeLTp|A7I+L_l4NfcTpP52e*_NbN~CJ(>Z8$y4$lSX4Lf;v^QM!RUb3?KT!2xBG~Cg zKSw>vI+Z6?tarKV?(oO3ye;*PcQU=b+H@#YOV^Oc6Es<0YC_zR$5;e$B z%|O^ig#oEIAc~5>1FzK-It(fykIEn@KmcY>5saWK)2fQI73az!wn9!=3aAr95+w7~ zms?`%7_cWOZKedi2MCzMz*GW+i4t<)0$F2dEtaUh6vmZ-Mb{`Y zu!6MQc^qDkUbuLTf*r*9E8zzhi-=iz2u1@2Iwi#@CL@tT498X%IxK|-U{)kIY$;n9 z`v%qMqWW3VyEg24)E#YCJV2Y)k_+&NK6_NUB$pM!8bYQ&mba6~6&0cQsX)5d#Zm~t zD2#&Zy4ukj#Q70KWf2=#18AZTJ0M3TS>Y6fT}XjK&wG>Xd*RE* zcPVnsFk8(n5D>*9vvcb8a6hnk`eo}WV4R|>{B?bP#mxk%f(3Kpl3D<;j)*s7D)cf` z@$2-09L~j7wwqiZ9;_FY(g_TA=+levUK*$z0wC5nrWY_+(Wepbr$AETj+l{wG`iwL zd=E&983BC2o{4Z=WeO_*2<2f5e95>4nfgq;zu^jW}^B^<~ zLTGkF@Sals>wIOoI>Hrj|#(zW5vIA9lrk8>pcYOEyE3Rd>Jr2Rhp>_H^ON@#g!} z!%G>k95HdZ{zSn^EsL_Mg)eKlhvo)ZhqiQ27!C88<89rfsrr#B8x1oRO1n#2zy+Vv zVlF@Af_&7jw>-SD*}duQ>R;Ug%tVa;Zi_5Pu8M?|dqqyyz65dn9@<%9<#}+={aqM& z$)9-RCh$zcu5CSYcs@B%^16yL$!|0LI3PDP=3d8MZs6IG_`f4dKHgt_>@h{;=QDmj zTJ^(0=YvZcKK8x&c=JYt*_8l{|M#fW472Kwcgx{1c*j^2hM~zL3#ab+6=x3-9j)H5Fg)IU0XG zG3WfrWZp}4nIX8v5R<#MX%!=Xzuf%yto83#vlr2i`F*|ZZq+VF2eS~0=62~@WLXdA zt^B?&lbh+LOoK|>V*5Hb8Q*DhF(c>sAInLLjP&P*#lLE_#< z#bJdp9K);K5}bf*07WBb;DN|(xi?x8zQm(SKuEI#dTjJTfLdb&tz0mLfNSSw5fNB_ z19=2CxWy3*7b42L@+d_O(0L2!Xi#+&>@tAzgPP$PohVcqy+&UZjCJDjLf0Va^49b% zlF0uuV-R^Id!-bZvH+Jh7y(AmFy&U!9!iq-!e~h)1y^A9M&J%LtYS4fUsiY7KP?d~AmNL9Z2?JGGytZh4 z6E7%XJuWN2Fa)?EF)R&Jz%pfE2d>!^?Y7{9hzwGuupqWVG1#3(aEl@-D*DyXy^20V)_R*UCup68gQw+L3#Q$elfsflzF&Cu%ZZ-TkJ}K zq1ga`x}>Ow3*{5|aa=R!DCiq2y|XX7m9sN7a$Z)G;rb(LVT?_q22x)4kkt|EneWy8 zz6zN!5O=7G3-vJ=6{FP*kq*a`PMJiRf(HKn1lYT#cx+{(b|Avn{c)|Iz^02XtWn)* zC0#RePDM?6%W%E4qYv-1fOiaI7TISvB^HRV;G}|!QNU8YD2H!dz=BWk3p=LF1#$(Y zezcw|wukBWy4Xa!vB#ZT1oXmDN=x6pl{MJFqqwT!5)RSq76b=^{7PjCkRXV`)RiV1MyXCE!oZSIyY!z@ z3LS%TrgA_s*=3FqsaG`VjRIK9RhLBuTZIaB!V$o!nGV!A0LN*-azPrEZ~+i@BfMGhIEDmHZ6O-6FVw&@9=BN2IZ|m6^}?g_c4H{6f=oI` z1U-dNk27(R*S^5~-$i9&X#-K>A`efgGspxtMtzH4JwMl(rF;Zjs6-LLiNyv)VYrmI z?MPcMTlcjv%imu#TbX&h*XPv>PbvccdUTja3}5&yHX6KB5*b}H>bAc?4E>TF z`{3m5swcO*bCasCe^Hb@_z%>p1%GB&q1o`u*E> zHXOWD`B<&$pyiLO<{m?zW5P)m>J?#E#Nrp3*?WpRIoe(F?Rbr@L(VPJ);Atjb~81Z zr;d5fjl^W&6CsbVN(}k@UKM z(VL|k?b5T-+2=Pyy(9-DL6GMheGy|u-A{o~U~6Pd@RF8?CaU6+PJWJEp> z9#s5$d-~B=HSaO${2i0>DTBi~e%CA?<}=eu#n#_o) z0|ZM=Qq(@#BJM=0VEx`t6FZEYYR@dXu3lmJ-HC?4U3bs%Y9agxh@4MFGe zcbpQ894BjASE>d->@1{1L$QREKk05t0Tb+6Vcdn%hnp@~4%chQdy9ss`hXQ$qy#}s z=Sgv?i`k6OHgn%C9s^j zRZvXpZhB6P^*r_-br-NYm=%*f?cX=AmMXGPOlq9MkR?$LTiML@r&A?b&!0n3lh)FC zamuMdA<&y+do@KTTJN;K37OZ#)s&yblNR5a;z|pWtErL*wOBIa1P+H}ze}-l^b&>usu(VHe?g{DR8MV|b&C^0#1OGs zFFZk`$`lApfv|-TAqH9%gfSv0vq4V=)CEtTE#Li^e&Ls{LG)`Uydd_@zOVT^EWs^W zB+RhrUaa%spyY?A2DQUiiFLLCeQIx!td;$P_a7JXjNH7o3{sDH4btFd9v)@BXKP>m z@yqc&+aI#7UgmAnwZ%3gUF)jU{MRS@{=qYy^62IJYd%LO$67U~4@Fn+&%fhwnJOI8 zpM9&I$IQzB(@wLU@;ruF)qx4f%DcW-7rXwpYb>8>UpRG&<1y$w_reGHhL-w~u^P|x z67iX#;R4H3iH3J&8@J-6E-sx-y&qp*+bd@+v0JZUdfR_N^&(gKYPB;LJVAMgvx$Km z+_>Js7k<$3;v?6nd33qqzR>kypd7ypx}6tmk>@eLYSu6#dD^mmNn^Z!G7k0h(KL&F z(A>j*>D_3)^WB=7kIQzUzhv?N&7x1hHycujElRWHec z2=_3!n+XkEWLgWhL>?O7>YCz2B+#+qxYP!Wk_ZL{ohJoxEw5)jrQ|4~L9pV?68OYkPF)L!7@$S%U@LKVbwL55K@L}~uk4Or|uBfQaxEqe}8X9l(cEu_S4Q=0-q2mg<(;RpyOjvFfim6R6#Q6n`;s6PWOA!E- z<}IVaNEo#(%dChY4^Xp0Sa<huY<<{e;qQU)iYZ579B=&I%7t{P%`isL3}Y(z0p)jS|+Ay&5Ql ziCKNn(K3UP7}BoFe+)#Od3^=Nr&lZvJ|EgUM%ZZxRvfeR@it(6HuEv8bI!^|qkndn zNt?ZTJ;Nkv&Rw`0iQ`wxjuaY^UOTWN-hZ{w_*KO%QO0F?(e}#R1?IMqdr|>u=B)_i z$VPdoS(!yYd1mAe_LIteYxSU(y5i5w7$3h`{rn#_&0*V(`CrQ6tWB26zkYeS=aYHI z)Eyf&RHA`jUG(`-bF+aHRC;jS_UA@k(Ug-IzQWi)z|!E%Ak1Iq$+g?RWTan=4Bbn@ z@Tt_L9R9UE_zH0;?1HIuwI{z>qWuTza?SsnZspmS|7+>(ZYqQ4`5BU*b(=*t)BB*^ z_&<;~g}rejNwUpiFSP|~w7=IN%1%2~kQontyMU0)vVPv&2YkjgE2pf-w0XO0!p`k8 z|8>xnu}1r)=9jZAc%L4spFgiQFI^?x6Cs2#U2P-CO3zCa^k%@&| z!li85y6ofd@HLcKpuoi_w74l)308(~)W8z1)}w{u>vi*&>9W8B-Dy}H0pek6r?5bD zD5P(d%rU^RFK=mVgqIUJ%zQC<@-$K|`c$fb#4$k{$j?&{MuIX;bvr>dOzc5x%q9!It_} z!kZe<^+&vyYeY9sO>iw9jvBD8o|CN9y1FEHbL3}o)QK@6-uEBGZd(=3eiY3&Z<5^) z*PFjDH5E{}buzos#5r^Q_ke1;E^BaS$ld#5AR>SXnW(~^z*xGA9yeFAf!;HT7{mNTT3gC z%J?<@nsJT#*cLro4b5MxI<&c%a3%e$vqHot;$l#DQUy6QZF%4^=a-M_yt0qaC#or2 zYd%~zOaj6PzbVU{T_(5qfI4P|gX5H(d51a*(MFu;gyskT>*=JCDkkbXmfx68-hp7HSc~AkJO(PNl5H3lXDhO3! zqLZ2$9`3?InPLmXqR=(2%>S7holp!WD8sJRPBo>T9syXY2qNH4R4#*w7#D=#Q(Gx; zBLW@}Lfz3<8iBhm1Jz%mnh0s5Y1;sJx zM&iQDao2iaxi9D%cA+OMR+p>S?@hh@6cFnimfiTqq&rJD2o*tIC%yh; zMFEtKj%#S>9{xz&soMHx-W5mr;Hx3;-<=SC^I&>}wqa?zIVk2uxY6|==$o6&A(9xp zSroU4&*uT7jLwln^QWUFA{xFH6by$T&D^ILfES@(9w;7_XIT8!v> zJ0Ix>f+SNAVgNA4RV&y>07ccsuU6Pvrn)dX2kK&En^BnFd>gx@UdU@pg1|%{O>wVQ zw+)G;)F2T=Wwxg%Nl7?pNWQ(g6!|YJSu_b%I=$x?Zl5-wQHYuLsJ(_A zj^r7FSOs-1$%@q}&I}LhOh;t1;oHD>+NLMY*oUJ956T)ZvT~L8QzzvD31GKf;o!sf zK)7*QpYf4vv3}nS1@8;2vp!damgCjs-_3oxD6QhC()1N7MY+7`{RP!5ka~@z zZxJ}~IQnfwCxuS{|6Z&YpzwSO?`e~bxCIB_9=-#AjMShue%V0&v<#>fha_jQue$jSkoHI8V%9cnGHRNH=3=ul^F9h^pU1(GD>@ zM{ZPR_F_nLm}9&>0i3MbJQG$`jCNGJ#e7^%%UJ5SZS+}-C!+r}t>zIah;-@r?()X$ zAlaprwSpNDyC2hgEf!NigxsKa;yaVu4~r{@W(#k_3|km!62E35nG?Wi|qc7l-qB~Go_<=dJ_ zZ;F_6{5)Z>#yKZQZZ}%v{-p=WN_JU`_4$dIF!9;_Ya2J_8ahBd7q=K2pbD>np$YAjXw?*H(b$F1syE6GivN#vVrBeWFz!b39c z<<2k7&85uAht!6aVfVuiPgH)LrC-T+(p$v|&DYo*lc{T#-wUz(--e2be5V7xS5BW( zf70a6<&uVfQdhqnj8z@DUgns7WjW-g_~YO>QR+!JAHW{9j$=6LzY5htq?!WkG9Ax7 z!Rq2>``nlj5S|wtGES@JH|-}?Y}dJ)i>8x5B)2Aab`_h?-<@Q@XMKi}#2}YJY`^TU z$17qYiv9yV41ZtRd2G7e?uZlC)C!2_^N#=R)Zji=&By%6mQ~yj)O*=nxe0JnOv4wP zFm&lu(4%znx%}8u;5*xmB1s?4I&yViJ?v~YvY^ZdnWhgbCmu56D5}YUv>yVkBi|yr zm=_3wB@H{AV5r-P*ox+Tj)2^xdcGdv#jEH{nVzA2Xz$b3I~%IWX9bBzvfhsN^6ttE zmwIVT_xuNX*3Nl)-r_DTD%Zw;wzW5U8SFv z_796tNj_;gD>{5R+LUrAdKo|Y){4BiU6{LKuF1puIGsDcqpwxm z*1ZEw=AeeRb=C=gtWV7P>o>E{``FaorOBfn+>V(V+1m4u^NqiqAM2JEV$3O4*FN;% zs`ksP+vOL;Mke`>AL{f(v8D_gai9ERmQtTOvx8-&D`tnyuUj^Ib`1ZL4fyq!(SIz@ zf8c(%nFCOUOaBkl7ZXaaxZSan&y|cC@EBZ<){F)!4>4%J+a)INuK!&BAv3ZVjXwPK zjl1?^#4FAGjM2!e4Vs_q(t4M+-i_otes2dWS0q!UgrdMkJu8(pg`ls?<>%__d8E*0 zS3heR@X86cyy)(R28GeK2u^T0^C zd9R~ZZnpweM;2}{#ZlAG-k(hPaczk5Bv@@ZMl?QUF~8DxFw@hP8g zln1u^dy_E_eD01td^@puL?+5u#QbiG=guZL=7-GezEw_$jCV#ztNZ!S75w-IP3DP# zJfSzfgD}Mqv4P+Xkkja# z*d9R9JIzWP-she%*eFjC2{!J2IT)FjaIrY&WLNC`Rm|}vO}?d-$TB5p z4|g9}ef@YCP`7zpU;mb6@+d&N8O70k(#}%Kkq@p?CTh4T02sY>%^gEFy;NjE*#qHM)E8P7N@zm?@)ZXcNo&+JkgF8vw2 z+w}Vc>^fr8>#9|g#dbK5f|U`SPFt)j4s$B>s+#|`*J|KxQJQ%C{&Y*kbLSY>D6b2v zbwuarSgF(DS-HmO{gLwauy?fGcB8dliaD%wy=4(28_Q?cD)1Y?-Cz^ms^8 z&ZkJ`-Wcl0)sShqzt|kSl%ubr>@GOf+^D-|MoMcR=I=jMuo;6a7yfW!cv*1YOm1H_ zc`aR%T5tDDLtHzWV)-A)*c0BF0?QgXh)d;F4FFlIE4s6Nx-6m+oadeNCQLQw-Lr zl^ozqLB`+Pa$81PzcId2j@&L?MG*gJpy8n%XSTzi6!S*w=U0|J#$`?KJO%;ZP|Rh=i8e^0|S=q z*_;9mBX*BQi2s3>Ov2|F!X3nsWK`qi@a_LVv#M9x>xqHR75-u4z;1_#$BVQ-G%45S zL`eSI1^vC$^SiqDo)X0n#ybYbZq;NAjqR!IWX&OlAIBBkdm0?hMSk|8<@YA0aOX7V zh3{#;$N3Mc>XR3eYbSmqUnz-xdeJ(um&)&sGLymX+r<6{x?An(Z8l85-P^qulBDPY zU{|*`e{wm62Ryqw-0|#3%K>DP9g?lj+8jF=s|I!tlWT2QKMX(CzMQUapHqVM8ycMe zFSk2Z3(xMhXpBWC2Yp@}Wo4u9QVx|ZjQ4O=l)^QEj`Vv4s$!SFk8-*?y);kPo^p7W z+rCTsf{bh6ebdAml~}&@tyo^`|nRRD{q#e0Bvnc7N8#>~BO7M94 zU8g;TS&NKYu<2X$B+h$v?tfc>L$JyBLU<+Qwl|&bN44xDbPQUn%O~l6o-Sd-M}Zs5 zr1|#&H7S!%tUegyirM}defaY-%e&38?w=yT?x5^yU-AC1w3e+-Q{=b3_F?&I1v= zm=W0pjn_^2K6OIuxkJ581Jw(IP>IIdLc;G4QZ8kxa-scR4~lk}P{3=IzQMMt>8OZ6 z?Tm5b_dsGz+vP9rm18y<8U6?jEh_lxZWPQmG8+MDYsd>AK>60l>=OK|l^h<$_hrZU z+nAt;v)JqyJE!-m8!yPPFCQ7)0SHk4mQAlVji*uPuk}d~4-XSzd#)1Ymbr^oKC04v zr_vJ?i-&xz8m??eVEkRI(-r;FcWf|>3FW#Y3`}u5K|=D{A`nsAwQTn3Gt1y_b7>eQ zIJ*$6tesIcC{qBko|0kvVUKYX6z2Z zjSnNC(ZY-5h*R5mceSWvj||VeOItW~b~@on6OhTQ$xUzwhH6?U&F}yI6_d2>@UF^9 zeBbJo(4tsg=;q!H`R2rM_p?AaN$G>`BS~kWqt(Yx3G|P|Vo%RV-+lV`cDE+(jqHI1 zU+m!Gn&dl^ulA=dA8#jp)NI{0t}N<^{4sb`tM+B%+jNSEwE9HZ!ewRSuKHF(uK3jZ zgFhaDcw~EbPwJHsx(NK|I~yffo(#WcYEC;^D{_m!-)TGIyVrfI6s_S0mD?d}fApds zzBK55kaREaCTX2LQYrh1Z#vc>F1q>E_qeXI1D=W}`FHO=xn33@IiElASftXyv2SE? z!s`1;pmb(4`A{!!XhGI@=x58d%_kl1%#RLl2n(UEfg#5l+-o*&$oHG3uNya+8G3Kq z4Smq*&wEn#NAJt9hS>->deW?M{qMueW!+w9(pFC;&g&ftQZ;LzeiXGS;tHMI4J(M5 zn|Y<_)Rq#vR)`9#2uGg`Ghmo%P z$q8q7wc^r0J^Y)RXUd-VCFVH7yUlp^{!6=;`fqrkR^&yE<60g#RYZ1od2K zKyXPZ>0$8>=y|Xffp!gWdJ`Z;qKs5HDjj1%NmT;l>lw9+oOFAlFd(Co$5}V0xE9$6 z1zNfmkhWQz>wqzhsniK5Vf`^q45s;#qHY1X4uQ3cE`XjZuwF?A$&1>n^HWE@3XQA7 zfJQaAc@RkuL4qO}1*8VPrFs<5X$FYXs=C_D`J**^qezQg_xpwut?}Vx70+VV+xpY^MZ)f%rxBF^Qx?40738URLJ4sG_O65 zu+9|gJU?w-`oQ^gdW~gjy%(X^Vv%84L_uehkE(*TQC$j3%F`#LRvDfy1msGYs5P#) zHj=Tm){L+gM$_nE)yJ(FBpmdxC1nHOhtH7*!BnQ8Nc_nG$a!Q+AoiNZ0K^Z0=OT9y z&TqO?ORQ1r^yj9vC`6!6)HD!IWT-(tkwloJ^W)kAvJ`Z!kTaD4_N6M*{fP8I1PId% zE8vzlww4DvVH7Yf6F^hiD3B!rW@z0gAmIWA(cz6E*a9KClHe;^DZrulW8QEXTAl{Z zYTgnIJ8&Ue5sUA&g;*i(z{$cLW6f;JaJ62@3mTp?)v)FmqEjK^36UybC_LUmT7R9TMscPUDNbcX}fs6`+8o3T_?EqoV4;^Hytl|R-D%S zX|De*QPZ(jLktg!xFKe#_?|+iTiF2F$dcn>}t* z3O;vM@>%nq@3@?1p6~a&ZeA1J-A>_NjPh{D!pQOs)MZ~um)S|1lK$gA)ePoR9Zp?3 zmHq0V^Sqfeyslx$C8EN8buTnT*Jt&YT+h>sZZm&B#Q!oi-HG0z7;f4H11UM^R$zo! zljd!QttyqMD^Sfvv%}CIvvLM^+sDSnjz^!gu^VardEK~Ag*^rddn9RQIvntMs zV6`HH9G8e1RAJA>SRlvFpLEmT)pr=u_C_N8clWOYt<#az195SORJE7!V}XTN3CIBZaUBd}R*?BjHc94)!@ z_xh=Z7crV?X~Eu2(=4wj99Rxflu*o?1FbwwcAxL0?wwzIwtneckbHjGh5m59G$-b; zo^x%@v2;-cPvd9q5K{&9(w=$4Z|d8c#ssNGBWq8YF)WuU4yrn>PHHfxZhd@S(PPqh zcS)}?uWq}2_qJK?ry<#?2k1{1ewigIr+GWBUXArXq-#}j+q~HD^_{&KSL(i%UpY3r zvF^2Pp0>sLHt&9Fi1Ep@X>PVwEonEd%FTJS(Vn_)xxaaK`r@_Jn^nWMH=pr)+;?cV zP~={IGh?bL#(1%GW|DQ**XsJntJ_`r%B9@pajy~dX$-^}tgTzXfd`{Xg*s!f>IDLw z&DQej1sU#0`7kp5d51Mj)ShrI1CJ{5M>V10OUfB5K;EF}`LvY6(kdAu1cq{DqxuH~ zke|__VEf~}2+N29N^U{zDt!nTH>8y5upHqn$B4Wos-O_i7O3c)0D^{RK@?tV3o|jw zB@JW*!IBGEqrqV6XPu{}GVL27rtA!)k_(V_Q$+S0p)k?(X@O{bK_zfo*H9GDHTF~5 zm6%!xkz4r&I|X)MkN*6a#$OkR?UHXanO-}NmZ!jKuqV=oq+02Cil<;iZiyY0=1Rj< z5^-SVMQ?$gc(fwbMpOU`=^Y0tkaI^N_Q$^pnxi20Jx1hOQESz_B>@hwHqg>#coUB~ zwMYkATEy7S13j5QgrX9C)%HefzVf3i~Jm+<-E)l#CA%+TX%nKmlu^PX;C>ZC~)CUZuU7^ z1c7?$HQ{QgC;3(4NN*?eEDNaI2CQb{u^^slgfsB4G;~b0CB;s-z3D}6?5RQ^ik(G? z5bztf7x>&Pzf*h{XjaRmoiG@i4F6cG*gyOVGpsAj0nt!c3KymGvydAUz+m5F-j~f5 zq`gx5#?sD49td+pUbwd75Ie4&L(?>JL`Nc>9y8UbLl6NYEL=N9k>#z-TZn3--%7#4 z7r}yQEWwPcNO}r>3ZX4{jFN4SCwIoUmf|fCK=&YV+a+bXBr3lgMBoDYcme1P6UL7< zLb6eUhE6yNuPM$^-V%Z6p-T|FYstJQT519lM2FqSf`zCgA}8R09ybl6q0C%4Oz?=w zmMO|t6fdSA48_C1RrFwbT4*jdue`d!{nq5!7hbQP#_ANe zOE(HT+GhVeh*^1JtY3DKm8yScB%tS3*yabb_mx^H!BcJ-%cVWqFD{!7XbJqt51ClS zh6F!w%PV%s^xv6U_Ne?Li))*4uk!HlYVde4zgklN^s4=gfA(^<`bFT@Gl~7)1B4=?cXF3Pxq1{zD$Fiva zz37dxv~hm5yViTrxMj7`=3bF%S8nHR8uxRPyD6XMSB+Yy_X^^gSx}&=`*xvgsrz#` z?;F`Su^ShA?h~i&==0=YJy3nP+E{EH{Kcu4eX_l(=Vi>Rz26wfm&fIX+YZ%JA2!Z7 zm(2D{O~pUEb0a#S>(=+9#~y@^{|P?zxA2k5s(EPjTwuBJegEXX)d4%{CQq@oxF*Q_ zs?-bpnSB0XxB9_g$oz%xu<}6dr-EHuObK8q^@yXgB ziMiW#?=&u9mOnOGtC+BMYo3no(uYH3T4Armz_8s@FIQ$=JaW%TO51s~-9CP|Z#fcZ zqW7ny$*rcZDQ`*Y+_HRGx9H__Rg7$ymZTARTK`c47M@>@qRFFx{;2*?)@c!tE3$!J ziylWf026S!lCnAqzEltJ8oE{WEr=WJ)HX(gF0D=&fvo2OuVw(DWDrdN3tt)#N6-}) zuAnPD(HAl)e2|moE((h<`B;#=#xR3}3(Fut%tL7O42p2R4alYtY>J_gOJ5f;h;-}# zgWdodqLToA1(neWa3&HCtg>S+;2vTr$sNJBl#Ka-%2fK9uE!7rxMzpfK#nm) z*6}{?K)tZqcwr6xC?4GM6wcB{2)0dP+q0BK5H+!+$a%Ztu0Pk(@8uPD4^fE}o>?mLal&B7lj0Zb=R9B_Uw5@_7hhar zsa^-^15*bkQG!_85-?_ps;>g~aC8tsAOB|NJ1jv5NeA@Kjh9XQ%| zUHBJcYr|dPDno6K!CGgs18$_pV>l?kGlO_)0dv$|&kEj}S zc)W_CJ0zupP)0PR%KJ6)kn$;)$s$VH6uLiFSjffXSRhJ6CtWD4p6CBKI`4S4-v9mE zdlj`;jo4f55qkwe?7jCEo0=uHiM>)IHkG2JrKM`bs#Uf6u1%<_T2=M=<@@{h{Bs`X zoaCI>ecjh}J%x6N zQeWsz5#ZRu_~b&Gsnt!`0<{u@$7JL<_%xnM<1&u`erjbY5`h3}34oO_f}@&bLXXfC z0zfic#F)j%jYSI&ZdOl+Gtf|Y2nR>$&sq@G2lo!VVO$8!6~4MnJT(~~1H*|hEl{9&EZ`NQr;T)-~rJV63u8aGBc-^zHzp-K8Z4~qy za0VJ5bA32T0Yj@%yPtgf*KL!%%YpCXHp@S*LomH9ByTe<@jLMb=VXKSV`=+qe5jQF zF;jgX{&`+0;`zu(nGp6)Kg(HMqbRQdFo{F!3U*88$GD+Ezqv|^GAJrvbT(^MVIg79 z`|1rHe*(hix+@i5E%;6t5VrnQ4Db;><}%%LW|)q&^)(N20?)>!?FdeIm3F)2n_ON$ zkT-pvR~|0B_;{OyEN$MjM%+PR)W0dIJtn4B z7LTl16(mghlZpEsNu@68$anAB?DGVhg6w-YKGR11aXc2zk#O`8Qps*Wd~a;ix85Jt z|L(}HZ;`=CErM*!M8DRaPT#q8GOJF^KR@GLUHvX`&xH7IOZjr^c)+>+k$`yWR=!OY z$D3A_r)Fk(Ve1ROZlo{XFz>IQHIH3FefwP@$E7L@UmbNt^6SqJ=vOII9RZ$)$x$Ub-S*k6m+0K{8tCxpH+>lXX$Kbz?=Oj`Tl$8X0Vv)t+D>(+Ut zoX)D7f}qQSy%E$XCguM^;-Q*7R?CBZ`t5$DS_1AgK$%wg3U7>;fdJ9hR!!bFsEd$) zh+D;#P-;PX-+yP7&FC<~Tc@xa%9XU2q3;eqZhRVafE{xP%-0_(+|LgDV{SGqUYur4 zGKuZ^Ilhw+e^PQ(J9=BO@O!SZ@R{*b5R{Z~kXL_GQgvAh^?F^0F50nMDB!(M1TD=< zF+pyWY8|JIi&HHZQdobVTP4*&rumQhlwU!YH3gJd4;Qv~3Qc(IWV{onUYYYc(xg;s z4{ArU#1jr|!2-k6{7TIQJh1u}41VF&9hy^_AjG;O;&FaEMt9N)X?Ov%MRyp=pAD!h z%vN)!IXHA8MV@WHx>7ksr>L!YTj&N0rFRPNoSICk$Y8dO_gGs#`i|~ixe_mNCczg z<2#?D)_J<)|A)7RE3>57l(j>|=Q}Y&`~T9vBYS)_Jf@i4n{d+na#>f+lGE_xP-Eig zc`S!Bl3X%v12Oel#zk=Pb>ujfO_RygW};447r=;n(>Dq+3Jb^)k{nf)@O%IXWl#Ya z(+OJY7jY11y6__4jTVg2k2eqoZ3dXrs^Ek&9IVB8-g!Ld1_qg@}2>3q;_J z!AK(k(@&3A;4UKMI*9tc*+O}9wc@HLLcS&ZYr=eF_7djH^%krmybHyx_|shGA}{{$ zfcf%cM$alns8~c5g1tqk^RyC%QZ6vpn<5NHn#&uBGnQ|8z>UE5Qy3Bon9e>iBSip< zOnWQcO9cC4HAAR~&>+S_hVhCQ+zYv@hhTJY<;wgfs76M!3}bEbq9)-IF&rcU9Bt%A zsi)=2PYq}AOu;bw6)zYFLt~8sQ(wTLMio7*#;z%kS0V{1yo9wyL|c`5Y!A-MAYY#d zp%R*w>s^x{DWr=?wh>qs;VyD9d6N2tlaV2h9iNm@Jw}q8;SH1!EzY?tP$n(nsf*ER zY$X*cQ9Cmyqmga*LnC~Ci$$bQ#B=Wr5y{MZX`l5-6+}HzuQx!MgHq=dLD59X2=o|> z&Z!2Z9_d-dfO1{)D8yGPW(MXYZ=l^igTyQY0`uBqZ9l)3;y)m8&6?kGBUQlk7t#@b zZmp0?*6DDl5W=RBV9f((sH)*pq%5{0G=F$h6i{FghKxm|QMVK@5Llkr(Zo2VA!ksv z=0OD0gu0b@Mb!EDtI0|HEZfRb&FoBil%2K!KHoC*+_i zb{-Kor9aW;@I%)of>aNFqj6aoD*~D1sM@J)ZV^LMaE7Uc(j4QQC3Xk_C#K|$vM_@m zsDWvYNU+)+V45hPwI;@OT}2qMrn5y)Y@~p(BcT_tfWv0A;2@3`t=DMAG|xsJ)W{@A zc^Asw7y;+=2I?>};O@khbd{ThU6K1WoK!5)hDqncMH8hgX~Lr4BT5i%wPG7zW(dFB%#gciv^ zc-orMMd}MKFdqs|fI}IEBZF&({TE1uYB7oCA_Prb^u+82|3~}C{Y(>{dr|O>9{6HI zXw6_09|+ckr{?CA-~xR{6_m(`XT7G6rnfIM%svI+-NWZcm-cWKWUsk|_v2kV%T2?^ zyG-*AZu)W}z8&=C(mU?r#dXUZhWM|mGaVks2 z7dFnXkIkD+qkA@TVrV{0g1_kPof)l*b;z9}x?A)|_QPC2{%^@gyK!aKtNt$L2a7uc z&aK>!ir{v9PomxOq#WE^Iqde~TT^g?Ozsy}R8j--7fF=8hNoviu!RX@5TSe}k()8)mR=qlFY#;Y+w8!+l%iFu z*?F82_izUpe++xK#kIo}2TdKp_Py<*_ZxHP^7a*r?YvF=@7?7Te%W_@u_m$S^j6p#2%i!|Z57s(YkF7_xvrf5 zu#xk1+%iQXs|@W>3pyjeu&;cFD#KT3xNrT}pR}}SV!Oe$s6?$ZkZ%Cc7mo_B4$4=> z&-7JU%eFz?v*TD*qeLjYn_~%k%T%7r8TB{UgvT@O_0JopuN(p%!Z{t`o~5Q<(_+#s zBKiNvl@SP#6{c@edIRSfQQ4-4H|8)=7zU;z+?PK$v?1=;Dj_H4F_|(Aah3Y@7Y`xV znjiamPy7`L=ZYFneN$g$~i|WQQs#@AcYr_G8f&rfn|%sQs1Ir z9YH@4r)U?N8&Q#}ySjE)qsD1na|xBJu+Kg{fcQq3O~vLv{mZ?*{(!!x>HZ#2sJ?%J z)w$hz58YadjWIi(X~lV^9^}D?461M7|6Ya-yF}ROg9DB=hiiMVeq1UEW&Iary>pZk ziCb(d&xqThXc08q?pKvRkALF^r#hDXyE7k#g%#w&i)3TYqiwIzr*j_Z^t2_%vxt#4 z2i#Vh?^3oy72(FyiM_wJ%0QkhMF_{R?Y@g|LP*)PotXu89UP+fW=!2Ozvx=R{j(|1VP9)|NrpdLD)CP zmus>ZM6TUyZTi92n88Ef8S895@R@4j2!LVWOh{?DfR zw_u;TY&W*KAwn+F?0l)>&s)*8%!z|(3?w!jd%p9d_QzPvcxGnL+!y~=ixhrl@;ix) z8TBtQQLwz`kG^ls!Q1n%_3O`TLYSAaT!*V&jys-PVcpC0nnXnkqTQJvKSdO-%}wts zw(!0G)$O|(@FM=h593w~US+%UjHN#1yAr1r>xSyxK_$n4HkCoV)B5X@r_wSBzxl zWKprf-Pem^Z(z9yzD`MUgP;X|%@--l61_zjh@-=`9``g-Rt+8t6Qt(6W=Eizl;B3V zsj|*uLWmd_WyIjy?&BfWJqrq=;)UTxvMT(t!dLm{>;Y$-&nwP5LKRH4%*)T*$V=Vg zH692CF!|}R0xo8S(0Zb46#kOOl~bt0*G~1~;TFxE_E(Le+>`>A*qEqT1hUi|c16KigODQ@| zymny3rKW}z;G*;z%&73svJep3{JAOnv46^^w0DQ2t`$lYarKzsAvxEIsEvgi{0CLICY>RK1Rf1f&8FC$w^p0)X;g5?$v*;z))H^=G>yci}g9eHqp(;99KUEX`OpUWE#%om}?}XO;=QU93 znAr$r_i8l?V-k64O=p$qB{U@~>O@MyK%z6#p}CmA!>u78Upj->2Zv^KaSLaTC}zlK z%U+S8+!iT5a0V4)QxX?5Dv%5`f5bRrfsxfXvsdVG70+AFFLd{J&8vc#x5nPiEmfn0 z%?g*cu%7esXoN@*lQ#|8$y%YeL$4WT){Pp6d0V3o+>`(Yws#Z%z#RB8foH$oupl1SaX+7d}AE6x|5 z_X;9S7h+QpDx-iAkARUvVx=5-BPI4X8CHc|%<}_?eNsU$rO5Rg9aXlN>ozBttO%|x zHvVW?a?Jya0!*OcVi*e71NUiWYrSLWx5-pl=(d#Sz8i@LuO&7GE?$8@2x9MW8x1U1 zxPVioZ1A;*peL3Ys%%?&U0~&xU?kK7(nab))tprcJ`MkloNh3D1Ud z#&Q0mA~7k>p={6HCr{^?WQMDs?Iu85p;F?F1Xbqa%n>y}?6iG7YbkvOkZSDTdbenL6_3g25d-kxRGW&@# z5vvx>ddwqF8t|DjZ{B& zecfgc!e=iek^+i5E_yy*ek_H`)yl*swVvmz?7jD_w5RrN&R6;M*nK&4{O-nyeZ5=Y z*=tqvlE^^8Of3JB!ma5KjkY^S?)sG-RSm#eQ*(PNi z5Xf9p!*%BLc(JjFb>n6N#PNxQ@DI`CqfBU2dYw3)e3)JS@xCZ!PkKPuHb9Qv;*x&*TI&i)*)fc@R+)xGd?o_u$$vlR%$0oT=^j^Ldjz+C(8rbWb>AU5UG@?_K9uMxyi$ zocsJs{jPu7-L_nUO`?&(lToieLtK}6vD>7?Pf@%4`bsWe_uzi%G&}8=1bUO_VRpIdk{rsLDDz*@ z<-19EKl;B+^J2;Y<)@w_RBes<@Ysf;+X)G4@zrCev*zuNc~~A7#Yv5+TW{*{T(?n8 zoMe+-ZmZ!A#{`UYSyK9t*0Yj^-=*a{lqBCmQ~ekxZ7}Rc{aXz&+27S@mg%0FnBNuP zZf8(!C>i{jbMYr25?%C9^;@nP?EUeDbER6ZA1URDGHH@JUvv9S($ItPWNdax%p1v7 zsJcL7y8#u1!1kv;r3Bry(T$mI^YT9&1w_A;ZRVEg%iR2I_3@|Jymu#}g`gz+px62c zC$~8X%g7X|p_pIV98n_{sueQxe1kH{DD5lbc##T9w~iahe>HvS$1(lIuGbLeU&Qe| zN`+p(|A+T5Z*>=&W(O>!eJK^6$~^R?+bG)++a18RS>(<<`NzN-2}v|fwMmhc5;i(f z)vmeadXfF@p9h!SYpVH$*h8-C_fDTqx0Ssug0`=McMq8BX!0dO`q;z$!`y8E@#6lM zM?Ldx*FBx|hVo7-d4CPQzmpq;w{x19-^*nTBd13P<`sUKiXE@w^dv%R?DPBrM`{zt znWChC?zE2*7w_+sD&C<^=+$KN|61%+E*|(+%fa(+f`7Ih-Q&V6S69>~-pEdU_N{UC z?9{|)6?P&1x3Nxv_8{Bg

$<#s1%lH(o9Yc(<*^1o={~7J9_zFqQwc&@HwBMGg3p_tO+4Du>VA3d4 zA?jQ}&3dPW)EgoJj5;^ScamS$~p7Zdx2kR!B*&xZ&qbx6XxZp zPtDN@tj%ou;XH=w*_+R81TtzWeajcgABO^f~Geb!60TY7?L zxM+*1$X(!0EHmtz9>8!~1h-d#FN$E-3W`$p7JYqQrFo^gEU_p`7e6urUFcrnli;L)#Y$DH+(Q zMUF9PtiI!8ywoR#JcM@$nM@-mEr>}+GdO0goaEfRHAYR=_^B5Cu8(5r35s2}S&4-^VLY zh<>Ib=*p$Ye(vK<%~_OVD$+tLJ{S>09Xyc+6ybRt2*nRc4EKuxnXRI9(Fttcy$wivhn@u(1|P2CXwmbUb88>6@I992Ll1>FuKUbHDIC3Y=X8 zh*MC?ni?g7ndnZ)8H9_6u8qhm(uNu3vXXnC|Ec%ugV+DQ1ig;0ifd@QuId1OEhY=- zhLU+=xvZd|>XIz7r$g3E6W>e_n6FkI!W9=Q2~866}=1GXzr-4(tfP7hgQ zP#R60`F@Xaz6cEOA!M#Xl2zbto*)DS;LNgx4HhNuDkNusW}G}C(TD;jo)g?027WEd z84(bNlrf1;HK-5sVlAqO0uYgwmLM^Ov)mK+o~v?3Mk5erD97sTNX;` zr2f{?&XxAn11wX=l!iW|0*2=hnU>z+Ha1mI7)t?`C3FKE&z!xwy3$l2mf6FJptRbK z!AvrVbWUUiGK5>|4XCjt1^7q`+?Q3;tbN-yt(y#6qyqTtjqMx8t%C55nXHy+OtwuB zGaP*H(~%0vuhNv@;}RAr@b{P?S@cKwiZ^hE01p&D)!07I39fm9h@e2G0YbIqFhlgQ z(RRucXl5)E|n28ut6;8a`S;M5Z_-K`%e% zB@Oeg<;A51-=e#`V{VBPOzivh6XCzJ3KC2Fg``#x{d@5TuQ(|`86PN--)!qdhU40C z!o|{1ffG=f@y=f|=FWm1K8E z*Il2p=iq^%y{lIuQ~tO%>57DB=+h)4JIfqJAXUYdM0MkC3S%dsB z%I362c*&Qke#PVOHrjjdW&Z$hXx(+P=L96KJuKk-7Q+F0L8hvYwiNU>m17T}jIj@C zx~)5GrGA%@F81v?Bt0lxReV7#VP+^NC#PwBa_3mKcJ&>CJ1So8+0(B|@nr)(lE?q% zsTWaYH*H>LS5Y=n)OjZdSHnhj57h~LN4-hPib<{E7~c#_m5vCvHN26(5{64MrcG;o_rLV>9n=Oq=UD*<7J{yMM=q`jg)VLF_wZi5NAl0NDI(sr&Qv}) z?NF`wiYoQ^NNsgnr*yHS4Z6ssFSD(Z*|z|G2w#erBkqyM=cjtB!a7)LPR;%gimt`C9Uoe z)h$(gGH|T}X<<`u#wpH)elMY>D=l4&`#!-ju&WVNMTEq!ZW4TWL6>X7W?w1M)PltH z)|9FZ0q@IdBQ#LX)MM*+)#CHp>uJw2caceU+yY16$$_ubO7E2}wxe?w+9k-mte*N{ zHdiJ$L&}_;Iv0m<%>*rt%B^*^|2b z+K7fx8$OdbIsvzt{p9vuif)kC(7mkWjQsr%H*Y8^&oWB=W_{K$zlRhLt@>(fAj%?- z##Vo<-Zxci-+vH#TCKKSf;Q%d^*H9UADoGQnz|3}Z`gRPoBW4(g~e*K+`cK3qiLwi zBwKEm6Lua1Sy3A0FG*gG$e4x80f@hg!vq$(HckN+q*ASKbXd;PA1{$z>FLAqByv05 zVX{I>>Ms^ZmC6lRNc4`M&pnoI8pkU>YG||yER0S6P>4FcCoQ}^WDS**d+KMwoA|^0 z^U|@BbN&alyyG>KKE=7t6@Tu(ZSuZXq7zk4nY5ep&YVn+LwuiFz^%?LO}crl;IFvt zf2a2;@hZEH=ChR^rns%#EdKlg=ieiLjML5wAC4OuSD(eeG_2;AkeHwsK>_-%%%Tbv zAvs2QwcHGk=k#K`#p4CH@9;!^QRJ;yKO(vp$MFu^FPuxeMJeuOO)=2k;DRsNgUGRG zPmfK^CUlfk|L zDkg1BcIlZ*F`+yoJua@H>$ofW?AK1n+X+xlw5PcJZJ@UAAIL1hLm4f4@{LyKc)+_T zN3%&6zWW((fXh!L`$lE>3A$`#QhuXJfAyBz4=NHD%sPBJ|$6yK6zVI z+j1-t?PS9FH15fR_`p8} z`bBIcpF{JqWou(zcg&Kj>a|_()iKsjzLPm~DYUdOl`$*;g{;$?w<;#~sDcOWCA}cz zua5#7;a>vndFzlj%2uZzvgKD;MWOMoJ~c9N!q0Y}8*bb&l^`yx|jQ2=5@TGf|H!3xXGrOBg} zz!{kaIvuWg?K~WJ?Ygh|_l2*_S3FHIlrqpL0}f1b$UdonrWXiDE=Csw7s{6uphk4Y zwsiI>=vs%(d7L4|g}uToKs&V}>|lwaJZQqpmx-!G4cyG0j`-5Sre3C$Yh7SeR^4_W4PuS~XiqPU@IizzZz#AzWy zTvEu;Lg^zo<&O$uu2vk;3yXkMZGqM)6ol!L>y!LAcBb5L(FYHF@fTVaKerr+2?|Ei zIo}vBQP>KxkP|hdi3{;(U*e1BLuJ2~*zh1c8v~PJYj_;D296tKb@e)vv!hw~3a7Q7 z8Pl1auPKrh(?|L+7V5{rIK~TxO7p>xUjA>R^igYI_X@Ai!V^z+H+sS&Nuz7uI)3kPvdJBF#q?6u#HX+Su|I;GzT`c zg_?O~w~X{QuaM|=Bu^U3lS$wvV1tVEk>>>l3BwL~E&&yh*>FbP_w266fFB zseN~__2a1#Ff#PJyWyo-+oJjj(YRCvuA!NA>cbl7C-Z4fCLOQ23OkQX@25Ay(CGIi z1d9b%DJZZk>4wndmOFMnawJo$I`ulg6$ss7%yfvaH`TKu0UlkQ*EwBS^CYwpxiA53 zWd)CtUDx+DvspkaB$Ff{s&AGg5c(h)OT#g$ua$g;m^i_PE>J@oaoiur(>83Hg#Q zv2`_yK6s74oL_aeFELj5 z#}Q-$Z_mROQkbeu+-7ntqu)GQUg z$2)5i-*-ob5PM~d%?RZcFPGSj4t?i0P=RSPusdqK^0X7FS2H&w^RzVJ!Ng+~Ioxkd<7d9X5D|NMAe!|G?ip+->L$M!>t*}CV&Y$IIEW@F=5+((D8 zg0`%O8S-xualUBt`_j?7h65Upl3T8Za>Y(Hnj*E65nhn3R~$3fwPx$Wxn}EUtZ9So zh-3p3jsiwoG8RwWygHWy9j2hwK)C3FvgR{BUa)OeCSar!I6HBv!$6g$wO=*D>h zB2Q-{Ky*5q4slMFB9?54j+fao$kT_H@q+!s<_ozD0|#*V+$031(-&7?sNVk3fTydr zN)-y;%qK~ZSu*)lUBZUWd)(<|Zzk5Vv^??ZYu@+nxa*+#OT`r?-{P-*S%U2t2Cjo%6BVv85j{$S&v4|^H5tXKC85a;ChO2sLG+aoOk z=Q`dWo>gnG+%akR81qT*wLPAfa`WSOGmpD&^I)-I8+G#S(y4~y(1SeRv*fYdeaHxy zW~!4hNQf2Z0P+4@p;nXvL~yiJ8F`N4r&X9eqh!FMiVa&1da24-C_BTtqQAcrQ&q9X ztT+T$`m|BZu^ejju^5HD7?kau!My=#x~;Sgbyilaz1XyGYriktI4eyIb=bsnnmspX zJlG0;FrK}AFC8#YWAV?szDc_Z{h#jQ$WHj)K>}Z0-PCU8qy5^$iJ_LzL{dvRCwug; zI@7;s=aBJ#O}}blLgQ=zN@B2?T zE&AJDLgVIIb_YfC6QkLUz5q;S+PO>O8y-J4S40ks&zChhxLs|Lz5ULQWO_6Z##>pOQ4)6Dnc6TkTJitqoq( zxG7O*%CB%foUWa_WhR9xH<;Yk7>E1}xVJeYAvgme$K{@9txuQK%?OP1L#1xJ6LS9i z)IU8uua4G69MJG$Xjhy%mfm#SPbD))Em`d)8LsxH3CI641HA>ixBC51pFs&2>z*CR*|fR~||Y z&zHYHRqSK_JFCXSaowAGkT-$ZyY+r=Hg+iojk9plYmcjRKiTVKX8q#ZV%^l-b#2+f z+u%LNWz+YUY?o~)nrhYWDJ{04N&LoX0y2LzhdtU*?F`wy4^Mbz=@TPJZ%?F>Ff`yQOtXXc%&5Q9q5c16dVz zqZCZ7AKmkHsQRea9_R5<$g*NQ>f65gSWTVcV&4CyP;|Fbz$L=DMl*br6Yqd|`Ca}* z)eHwg-Yd%>K7ovvOLPP39*k9%*D6VZVvde#bEBqfIvtOpa(?-FeSo-k#NB_*bf4W| zxN6)&`(=B4|HBUIeu3@S3u*j>c-)VKR(^~9Zm*22af%RgErk&tp=_HacwxfhA{(k7 z*PCVikA7z-P6jC)sk3={o9@T{N4H~N1C54sTg^x0;Ie+ACD$oqN57JMSN$(hSjp%Q zPDOYyr_fK^iAlvoZZA|L^r!tJre@o}@85<8^>NB08~m)?yo@5mLzRdmgRW&~ z9^ZBoCl&QEJ@?hN=OQlyjdj=T-F3VFet=KB?Un!CBx3>Np66%3;6S% zLHEl!BLDe9Nb6M^Y2vR9rYOLiheG8BZbWNBG$2Mpis0%sJVO$&bO66eDt>_%5Uj#C zwPvsxt*Lh2BBE(9$m1$3IEv_oH{Xba(#5xaAXo8{GExgJJ@{&!yayZ6J8vF80?;QP zcoB-|otIxAxQ=j=4KK(IES$q?s&jzVd)6kCMJq3)mTFLS3)E;M!ELe6q42A3O`|Zj z{=oHxZ6QWb3E!nAAKD1aIx0hh8+B!~MM#s8?#F3clET1P5_$u6_&y#7jwarW1_+R% z!Q?251OW|xlVwM`XfhHliwK;>i$_PRNyHVS+`Ub@VrD_-xmf{})zIa2H|Jp&d7lIx$b75klvWGO((`dDS$;TW$C2q2;zA}-tY?nh!{;~iYN%u^+NLy zQI~{1Wu9f~4gA|}A!k>v>>m6aJr-pf zC@8x{Jo?0$xFQbe3WKaxCpKPt^8&bE;i?)1cIa< z*^=M7#sN61jm#}&K?w8-U1SB>$$5NhZ)-*6pK^J#?u3lgKt6&S5XY2tN;!9?=c_2& zbwgHEL+L6+usI5vobOVv*Vg% z0;!itoEx5DVFlh3=+vL9*p@`CCXNE#e-_0<`Sk@RJziQjRWq$R!s#F*@>9rE@g*p3 zN*LJMQ)Gl+_3%Oul)f%b06}>A6+XbIzLpS;0Hx&9>nlhSyclGuQH6yuzybt>gPU$H;3JB|Q>Op^BKdARng~Yjc-(RPC-PM4Q8-mG4~9IqLkbZx zd|ZqsNNaR(FXwABxo;tg(TPG6q!c_ho5m!&tMaX`P&jVJ07r0}7KK|{jI>oEe}ss* z8azkMjS2#_lwth*PpJPRqo{HP(CBXg$B0IxItkJcnrP1l%PUlYD?(*J3Lz2=dc-~D zK{D~Dwbi;tB)HY?wArNI@rDI2uHFUz*IH%xz?tm$r7F8A7X43KnC#X;gJFo^Sasuv zN@nN*ySF7Hv-a8RJm@iMoD1wJ47#XESHj6oZn7z7Gd?tS+ifxN;!#_Vfl&y^XbRAVo z3YZ=gT(^7*51>&$SP+l?Xw|T-v7L9)@Bin&WWUx-$PUEWptjOtXYlvpetLgz{C3NP z;+a_*YUUOQklcc*J06-abMIXB#)&`^H-w=t`iP+4#Fzt#^bz*WFKo9AHps{Qcfj() zlccBhh9G6C;JyW;Ds~slpR)D0(|=ZBhUGEbuES-~`wHkk#p|uyKPH$6Z~gJP@3c;C zz5dSMDmhy{to~JoO`>|jN^+`2iL~xK4rxuUsc8RNwy01`7jy4W{+E&aSCZtKOtAdv z*f*hP57S%Y5mzqa`-97}SXCbun#>#zO)(*_qtFlz3AE@(!+A8Zjl0}t%X@(3~v`jFSM;n%_ z+h8IGU*}jZya9cC(!yv@X#efC+gj9ro(bO+eYm@gVOX-o6IS9Ya;aZY#V4TyN~)#? zx>G6*gSh^(YPf$s;(!D)G?H94Ag5=Tu~V(R{tcb$gcD`so@zVlDktkUpP_9y51qw7 z?fLgvQIfE6;w6-JIE%{tw=yc>BJhGUd_HEk`esDY*m2cgtn?pz9;d93m!F}(CYZ7$ZdT6>TZ%n=qnRE5(+vx=8Ngmao&P(# zayS|w#a4&^)NSK1r6>m&9ew=2;8R}0g;DU{%v{T%K}i;?f^h%$5|xe_l6#_I|C*@Q zX)wMG=w5AG$MpD3B=Lc@^q-PBNd9a(SPQuN( z9VbZf{hdbo;?efHGFw=FN-}qsji^HDCmNoP%Fe{*FFK?}=Q+WS+N0mLecIi|PUTqS z!T<37HhHo23M{FcA1HTrf4Z`I|K5BqWv}FuChsAokAp^53@;hrzo#8G8#`8v`MH?0 zpdvQ@uC>W`+im+s=;Ed(qxOL3nSH2wQ_%BGv#$2w~qqo3W@&SUK!%uGW1=AN$nkz3e! zNpn3kKJD~*R;upY==T#8`4!G0W46@&OZwqu&HwNUF~4cKR)1|72mE3?YrB5a^xBs} zikWt46AoY?Z}&+kmdVn#?PigtDkF?JZBSw=~G(e29|yAVIc z+HQlocgAZVxGGg?~{Sjrkhs#2H566>wQuq+2c0+jaI+= z;u1B*d)Bz(Kl0;m!MZ09oN(MB(RN60$X{LZJS5$PqD5eV%TRqycgs#_1BdyL5=)D< zV<~(msejE%Se-NRueLF6Eq1EMIpx%#a1M?$7?b}#rkrkn7<-?#+VE_M;RsoxO@ei} z0I^c;(zc88uIVj?mxaTG%v1K+;r+7<+*cMYY4GL+f~mmd_(M;29DFcNM`S_Q?;;si zA>5KhPUWQpGvf8KK#Y>1oC;+S954j~Bd4V`Fy1~3+Q2edW!{t0$eK)07|8okI4fV6 zYO_(AzK!Q#0x#_2Q()3g58B9Y!0<_R4DB^HoaPn(#Yb5e|N-n)F5mk(3WrT2ze+hFUacp1;v` zpLsxzql^ld2CQUNw>mkW3h)4v{5YV6;0hl1A0Z_))h%usqvL<3lYydJin!LI3sY$w z!|;1aU{HC9V4l53)rN>CI+`<|&f$g9>Go13LtYT`G(KS?B0KgLAjuRZt#BilHmE=Y zQNTHpV@M9qnmeZVB2(&rRJbji>?X{7 zkwsO(WCV^bJ}Sj5=*vh)22mLHx+&cWWw8iI7Ez6$^mdpaG$`ud&s3VFf_whRwAe~I zad}$0NV$$rVo%MWcj;S;bTm6~?_L0s#INL%#%0^%O_f zgT^L~+Maled15GYScytt{e{B}Bs@)&GJPBDFOgKIK_Vn$>;N<0KQGOT3;@6%PpGBU z86EnHWSJDe{hmYx!4+Xe;-V~q1YWYRDe^UAY|j{g%78(wRKBWe4IJ8gAk#_og6RHX zD!YoiGI?9jL-^?^Z!nV_)gthn*&0KS6u}r3{UiA*qn77>Lx_5_UzB1Nn(TJ~N0Sd% zXD2e|@XVtd*S9bV% zuoiFW5}t?zY;>GD%QVCng}{*gDagf@yR&;Ar_m*0z%mXIs2~{yoKm(g?RSWvcZ4DbSCo)YA+nGF$j+pkGuO~jVfs}isA$SN4>ibHu;!03d}^7 zeg>LYLX8v8xGBA3M0f@~=c)I&*!L)w*GZIkmj z64D<0nrF}J3et&3j_F!Bw%vn1&5Um}FMBhJh$+q(x!#=i%)XBN6-uAw>Gw08;ol0$ zVk?qL$O0)Pk*qsfs1mI+rIL;Shml`7D4G98CxRCr8>f~oNmDqPcMuIcPYE}CLGw%slNPIdFfWA* zjxdj<4c`?t&V99s#V7~Kl99Qp=}n6QB#>mqsNtfJmEW45vq3+|ibLy6x-5<|oejW( zr_s-RR0-36;o7i|74uNYD(4*y8kUG}6Qb)e`U2<9>`l!EzP{G+I&6Km9EY_BHqO^> zA8*xcIHPG67LnH$9`?6oa-V)~#fj|%4m&ut!7mg)^%hE1W zeeN%>qrq<`yCWmgSR8Ng7Qzij|9BL~BHxRJ31WLM?I1%L8Ql|YYrFS1;{zL$-K`Nq zb${D@ntCoAO?>jFT4weJ^h5N!KV{Oau5Bg04NC;{ywfmiT)`1kz4o{BNE_FuCty={ z{t&3PM3{Oz3oGjQI8=;f`O(bs!PSM*r2%QLNO5}X+9T0t-YNOQv1`JqjZQ+W_JN(< z)B_5(xDHcwKdl*LtL*(Ul$k|9zn-ioz20`@9Z$7DCPDX#5Jh^!G7m%2S!;>rUiX;$BEa7LXalrc=Yo9QBxRm@{+ZDp=#~vgKp; zop5zr+yk35tz9*_$*)-aw?5?SK*{<>e914n?=OqYT?E(Mi{T7jw6p92u=FHYj-6kF z>vQo6vsV>DB>VLI*X%6?gg1t>rG=YXu|!R3uS;x*{1+~4q|B9*WIGx(O4~Os1;Pr3 zTq=gje+@lj|AOt+HaYYE60xyr*|>@MO(W3M{_(2s5}mAe#ayaRHG<>EAm^zHjU=|X z1zJW_!-I{}94YM{Wo#LUF#AX`Mwadxr z*ZCQ*8J+tc85xA4-iz6|&#}rwOdY~C^*#4gbm{;gj|2>@YTm}{e$48n#6j1K^cF=w zNy^GTM^7btiTyh|bw`korENR^0BmaCr>q@eOQqq%y4%%z7@%r{rsDMl zJ4mTUPn;M>4}I0lXF zeRfvWJT?fZ{{V)2z*tYo;EJ^D${sT`oi#_#e(BNqaILyp&Yp^IK7oBnrsYlrr)vc+ z5uyc{CY+zTPxf^G0N@E7B?8;grhQrp!}{06O#c9+FZmxMejc=ZG-}8B3c_qlV1wCx ze$72L{#G!002j?3(Ddx1&OA_405I2a0BpUQKOnU-ajK)qs?d57PVCU(oUO)qod(y? z=qpvC@5=BjerwUal=6=m;QYkhZxYcug%5P*hdIM1z+KzfQySh&& zuPDMnGrE9N2%C02!ssWeY=`rh6r{ zgh3nZiGYsD;3+{jz7-)@8>twXP1uyCeG~zcbXbIfcPIpbV2FtY5;l|r9g+ek?2AQ^ zHw9AIUh<3!q&wXgBM3mb^iLvxM1a~8+}h}XqVRwukthS@2qMKO2=)?yHYgkS3GRTD z45o6F#sVN27>l6T6SN|Gn*>kMEC^;t(Gipcpc0}3!a&DlUT_kz$c2#uWa3ahNpEv1 z0GYy)VLi$|R#hM_$^QT(qAoinJ@SnLyT#J`BNCU12!MR75MN~fcEl`m@<^!$R^oY zb_X}O!c*|i*#=Sn03k)e0#ey7_fFG`tgNR~$PiDWWza8`ibye^GJxYh4i~PEDVM0k z5+w)n+w@rav)j2zuD1Rapk*Y*jk2gZcQdzT4J3yRlIn0Ka4>u+MJ)bX6DflP?<*Xb z2HCoK!Se}3EIPvQQwK5XkULwa!bIGZDP2RTo#jw;T4XFhh`Mbzu#loa$Xr2*nDBuo z*VRUMDua(nB;19S0fU&?TTBb6ZL^N(GC}yJGNlz1UHxG&Y`L1PBs zo2T2(>RLz_A1=rj1ni;(4%5C$p#Wb#6pZ6I@|>H_d@6wCMU?|%-?EQ}4U(KdL1sW> zH%?|?g#?M4rvO|NB?_5x45cs(5)zoTq@*H6qV`jvW#~{nOeO&!Si&$n1G;T63GSrcFZ5IZ88$#5V&=hDR`C*$f)DdVceLRFK*%T) z5>jdSZwcIjfP40kncfV_Lv&0wFo0lspqvzhkWBs1COh^(F^}q)7V?mox}lRN=iNep zo9E_?iL{_x#KLYjCvNBfWZLPD`y>tXbcP}?;ZRsGWZ%j_+j&I6keIl*g(v`+>=QG2 z$Lf#-N^RJLpaKZKV`WW%E-s{tT5oyon2;___fViD7zgHeCWJJ$>m4hV0#OF1QbDTf}GP)l&`$f@kuDTpFw^gbVI>+Q`{%dY5 zGs^bCS%yrp#IA0R>%{n;mxgIwsMl6yDnoZ4&~Ci9ntiEMf4rf=sfG!UeDNkc1?QZ1 zm^J)oP-^RIx#Zw%JqF8)Al-L#zAi9Vla_Hc9!^sFaqwr>>nrPZFRiGk>Xja3xRtHa zs9HNFMX&N*WfYYokmTg;iNAEzjH?Qmut7I50HfxZ-BS?_`z9=bWCR1bNl+g&MUb=r zeG?n3nraobHCszfP4#Lxz-vU3y+@P%mYSlTrHZ{_`0Epbo5YTVa9p|1~a z2tAe?TKP~C@3LC}nHG-8G;W0( ze=%7jJFGy%psb>1-IX8_@Z0Kv11M9~bRa(>Fcpa)TqPjD?wBB2aDbkX)gY=Mc3hV) zaEjb_ic-+&9Zj`r7#(KI(cSEKQpQkoIE5;tx+=Gzwg-Z|xwUw(x|^nYacOd9R|I)I zI&P@&%55%jumDW1!^`}qtm69NrZp*P-7)*q7hUsP$y~d^n_a){8+5wnxEA~7$!~iO z>&&&9n%W*N>Y9CEtom=3*QX#lFhs3z)PA8qN!R)|y*j|t%8o;xIdpQz5T~MbV^+67 zd*cFd7g%vyoKuMEc$TU9jb&F>tm~IJ$ty^MC30wA@Ef$~9;YbpfXU z*p=vfFN*bzzKm1R` z1d>HkE@gH6Kldg49G@xnBj_JyW_cfl7YqB5`jy$ui1l4(*~GV!_)AXIN9tE)AEM`K zU+&BKXG;(ERUken!l1Rz1OGje{Z4CYm<03Z|H7CQvC zx>yp30Z+n2fhhuFJD?w;M+xi(=qiB?(YkVE$O>Z0Py>T}B5x?PAdxnYlE?rOZmvK!P}u!M)iGxk+sy7x26 z0Nl-$69mRo0^(=tVNfy%m54=2xB#XM?EzzHGw~TzPxoR~DP|@?K_rafN9N24R0KLn zGZ@)GQ6v$#?un3Xl`}t?4I`+L9#9oG&&g9rHj@EBcqe)EPiy@UrMB}HNR*~0vYxMq zT>+38H#qw$4g~mEns41$g4^$e1!TmZnxJiPRyijT^;7{M_6r&Vk^NH+wa3j#+-!k1 zf+b}|E?OG^r!q`nebftsJM5?%;uHgklXTi6bs*Xk4)|>_qCmL>{9j~_RD)YVlpY+(J7i>SZO#(KIx1904Y${5G1D9RRYDgx^^I_ z4iNxf)d0lW>Ldz|)=wj_QaupUaRS#sP&2*L5pyYF&Ic$2ZG@mzzG!X9?1DiMAtC&d zfZHRyD;{j1USTcD0^;UCLu>>DuLf?I%>6EfDA+@An2-(Z6a#1^<`50{3^*%JVb zmOnyaGGcoJbQW7oLSflaJIdpD#~aY_Z8@#3uEq?8<<9g9#x72xV<{-BXD8Go?6?kK z=H45@0d0Do^H2neOgH)VUT4jo(luJ=zLyJ~JqU>(n2%NG^|dv%4|A%#xSPoyLhm}6n4QJJh|tU z+?W9YR6-kcY*ynyyuq?EEU0?QK-mEf7EPq4V(Nd10e$RE&5zsX@dk%HYPNZF4RvO0>hgC=YO?mVT)99NE-b!#x`G$!Vy zLGcm(7UZu@As8x(8ImSb69(x6 z87C;ri8ojoln!iuh!c}!q~J`TDeeVP{S@B!eo!Q@m-(+-`2IbuuO=T*kb8+=Me}B? zX*qX@RVF`j=I6TkhPCQDc`Li&@$)I1Pcf6}j0{H-paFE;eiE_KVSPZ+B$Erh(ZP&w zgDXHSl=dJSucJA4lejLMglQRHh3P8R6x-EN^uvpcT&`17%A5;PMACl>(T4v3f{jh=Gt5XidB-%9jpHU@i>1ZwH&|2bnJCn zygyRfOcLjsW&rhHN{4YHKe(da((+cn5#gGyA)v2AS6m8J7+db?2nKtsBjzQ4Zw61q zLbzwl4OH0+XNhT@q}Nx|ya4KNEk7d*R74qF=)KC$6r;9Oay+}lj}7BGT~lNlRRg|T zuc~y_nO==L%pkI>8upNOB3H;K;j4x8&$C`3`$LoXZ9++NDf_1%EiwHU6U*ZIRLYTBxu6e+pxHin5=Hj=hP zn{53cy;qQV zPhGU6HIJ?%7B#C~9dD(N%%s_yv5?%iQ0r z&}f~*pI@gy_Le=Zrqdw$<#%so9M;V9S)oQ7+#pCP37?^<94t{mFj^E6RO~`96T;CWdmC3~y>J`7Xige*YNB2B>w;hC(1viBj~SZpbkyp zEdW5EB0X1Q7&9xaatlK_Plh$PG+J}rb|7MR3!SLvB)^lVhx=>zG6DuJ5Yl2cQ#R~U zZTzhUWY-3y_qR6LbT4P!>|^vARt@Qjvv~1XREqB{_tN09z>7fPiw5 z+Xx2c#1vq7O85gOI0*ugIkHD}DS?ImBN_#6r9Hc&oo82qjC=^Hlj>!WD%2RJCW6hQ1 z4$*WD#VL_&r8YNJ0ru=asziuDu+5UTQ^8*gHX2f>9H zI%{)$6pvI|$q^R_7ZAP2kfKe1-syt^1<0~QWbP5+!bG7)EJ%dfJ}Vh1P3+jZ519HO zEMo=`BK;*nw26b=0m3`~05k=IFm7&?#MqRu>>wFG)diO_cSh;~lj^9*P+4N*3V`q= zEM%R&X^q9@QjBD)Z|0a%+i&46qFP{2l?9g4ZcY<%oP{m0zp6#oAPMq?vb#ux+jp3c zASnb9>)kOvfe2W0i86p--zUPB{!w#rzEDrBp;1NO6p{T<*8?Q|5`)v7{)ta}l>v|w zAjyHUc~dqwx=pbVY!wDTV4DPd?FwQ+i*A5MB%eendr#_{aePh`1Ducyry|){rNAhd z#tNZud-zzxq1hyhs*4?=PMJ{rbwXgr!fvDx9e&B=NmhlA1i{L3V*dbCi7l) zgPBZbid5S- zOcMmnmNy?uZMvZ8YNRMS{)&N@d^k|qi^K#>Onnrxqa#i4gOujwW04?k6-}TS?hqCT zxs>+x+$?0kz2O20#uOot5Cq7H?0|dYuu#*nIP8ftkt-sW4)_VQh`NwOB4cGJ77P+Q z_e`0zg^b*p)X~$^FRu2mW=TYanWovaElwlEwA?m_o9dSc=juF$ zJX}YXdS^0wPp3>ij|Qe*?0e^k9-uER;yg!H#5FIitE&2y9g^a-z>~R71TN;ENsj{h zQN+)z$(!zC-ztQdApi`g;9+{t9f;Wg-5cV`p#&rZ_9JwzMpGYT0rfyYkD>s;KmziS z5rD6{L5_R+X|d07z-W?GvaZN!TN*tkqg|xWUh9n$z#LBd1p^gJHO&HBrfJ{&NBJ*T(&_1GsWzP!Hk~#IYZxJ|^a_B31~b`Jqc&eZpHY)LxwF56 zPYf!eitpH`7XC^_onvoQ!?Qk%MH|YSqHiX_DIJkFSc0S%3HzfsQbhWs->S3>f-;G< z)PwNk`XwNvK>HGhWXI*ks8R;tzk;^eQN%o!`zeYfk6UV})-e+#M+>u=<|l$G@U zD<0ez@_f&fp6u1|W2$~1r0){2vE!gd2iXRzK)ad(_{%=MHPN1am_)~?b%5%q z4Ao$s?os&NIJvJ(4=xJrWwdRJ-bc*>=f_~RKWOPdF{q+FTo(^Ro48ZBooyTSROwWt zB)RSZr_k=KamnLcLfl zce`|$^1Qlp0vFckXS)h)`8{kDb2=uV!ScPM*jE$l;kvFK<9by+;2s_Rp?Jf`!fd;b zvJHE*oZqHkd@{IoHxE&7xLE7)`j{k)^cj6TsQNLcNxG)m78*wLnN}mp`5Hc~zN`MI zw$P*-cS)|g0)e{oZ*AH!Ux8`$4gA#JK|Y~+Kp_7Bs_I_UG|sQdy5iVzr_%WF4cDVc z_T`KGo_$PrVv;^_cTH9}8-fqreJjkGVa9nMP|4~wG@`3_ zB!MgDW}k{m`cv7)ulA28aQ8fdLk%N73@%TUPAU^#%W7y!Al?%Xq-C}{ayaJrl$ zO9Bvc%huxSe+s5h{Unbjgn;A~K7Sm9)ad*t+F- zUmMnN;TlJVe3upklL-K30>)8NRLdDS@{Y^?*zu8n$5x1o6~yr#BdFpvJ?^fns=hMg zg`?6!q9LnXaN~=(qd8^CB~o@EZ|btqc&Ay8BLot$bX#>|o1QGvR>xFh7SptPceL(j z;k;Lu_-2oX*Z0n052+0!r{Rc_yuHrwn}KPE18tO;TCibQW40#D`JQQRV(LWO3E*N; zAO*P6DNUwO0oV(nz7UMFy2S6ytjW$)zGvdf1U9uYhGRBHcSuQl+RZC_Pow9afz?|`2({{8 z?6pfs*ZD8|HZ4W}0E;~;U|fXBkau2c&L7ToEmMgKQT@;idK5F4Ijp+;cA@g&D-S_0 z@?ZJ?0QxfZU;J6=1@LcwMe^r2R5iJih*fp^>%9HS^uB80{L8_(MQwZd>#BwT(#DRP z8!sQPRrTw-rDqpC#^l{~{9X;WJ5TsIUQ0IQqSYTs`!;i($($}`MJc}bG4@@YI%Cy! zUuMMr0J1zhl1x+VyG5hA<7z*-FXZcC{@N@Y#eydAq?;eACfW2WQby9uB4PjvB@<%? zd!b6-2=bz1H$XG!pel1EDe#o#0Ekfnwl{a0rC(3mb=fRRP$&7S3j|(Ln?NdN2c}YyA`*dJ&?h#9AloTT zj3pAw2K%QuD-bp@a+r3}DMc!M6PXfJbwq?x+iDnU0>H_h;=3!C{&8x@Xo34;M+&?xMY*%JcWr8c$I10;7r`=knzM3kUdHcmt+ zzDYozODYPO#n4Z$g+8eb&=zcNAtFpE2eKyREEHWhHb@CmgFX>9-pN3)KvD@ODFg$1 zB?5tj=Eo&Opr3@Q0AP@q_(hcB{{S?uMV2dq8A(zKnd%0}m6ZfAax9MuNdV>&22Zcu zLYC7Wh?55DCOm{rM2`vr=gLLag#pnvNEkL*B3YBG=2GgAM5W?Vm?!9uuwKeRGh-@R zW8{KjKtNe0dn65v;uH`036HYG79+jVk!idskTZ0BR%r_#RN(}PQy_Rq9n@%r&)q2i zTqu|m^hB7S)etPWM})e7+!YdHQU_~yR2f6X&EY8-3M5HH&x9#cX+}L1gC8{JB~UPO z5}QU62J?i3&B_p9h%%Wnp~Odonn#oc1MBie_*2zCq9hE;ln$WNBF5voQ!ybRU}gt} zQ@xL>_j?{tk^r>$l;&HvN|7X7T>-*#;|cXcHBEF$O!f3lH1 zt>Hi6@}Mi%Ats5rOCrJ!Vj)nTnF8nrKDk3ptrNOUk>sAq8Id;%&@4ECn$)VDut zpyu$PCnq1g0(`-!)lF>a=-EEPN?#t$>-ii9lOSf&7vV?tM}Q5ZowRC>fo;N`@_gy2jhc z9`S)*FhkD ziUEsFy9G@k${<|Dr^*^f{S*gWfSJ$45{j8+*}iQl?4V2@ksGGd@aEh2L1jsZ8znZA z_DEcy69(TkjRa6P{%V1OqxqndBIei%(M*E#7*xrwFnWW}tY zNVq^d>{6Ku1WoVeQy-X;bM{gQH;?sF2)sr6s=p%4tv4|Xt9wJ%aSay%eSRBL-Sjwn z!ap<~%X^G-9)pEYd$l#$?*OwJL2>ynCFbsT)$xA16dY-34T}M}9#^wRrOA?NRmbG< zYV{Du2hS%h%l^@-=(H87aRB{AY3io=zoA`Um^rUs#%eg#snJN`jV1!?&`Bhrcj2SO z2|1<7!Je};qqVRklXXxcQXeE^(R!%z*v3LJC3jye|WX2cI>UG&Oy6GMLHisS#du3B-0sycP0Z<^w8~96M z1r0aK@E+3Vf7GVeZ3;=4Fpp1|RLHx4P%c(E2E!_*AnoN!A!E&uOk*kufg{q$+xaO# zx!)jmPJ7`)NC1L>?Cuq!mI#7Lx<!Y2!E@PVYUyS4W>g3N|S03|q!^8#l8dz+_7@r@ip8T?rChnPAdJS%)Ls-<(R(&Ut z62lS}i*D#%m&hE6qvO08+RbfR&2y?bt!pAWM)&fXjIhNG**Y$t6!OZk_H{RNHy3b& z#5EtF25A%Hlrj(WBNaLuo3b&8*SA zJvQ#mZJ?~YCsOSX6VvJ`yQS3XHQGmWz{scy+G>_O2RC;zHrcf&E^emm!z~)s6Yp{%YL#!WKYy7wPpn!dgVtkaVsoq3MZKhbz+b=Y}Rnl=2o%}CHWgWt3V7YT^L3r4dG z&56Q2o3vS$47;V#&HHB1jVCx%sKE@>(q&NsFA#p=bU4c7_|F&B@qJIf*H(RMpWboV zaq;DB)5cK7qb|{}JmWl$QTH){b#XBXfpp>opQ77lniZzWdLU&ff`DUm#!??-##CiH zA0=|VerVz~G}J1#iz&CM^&BQXOVPA`$TYO&+MXd+sqETepsinH8jc;H;rhKsuT@5s zSJaM|7%&&1)aJel$8@)d(x~J7EDm?*7Y|vg%(6IR;Um4H(qVYivU1tgo9w59bc0r| zrUrTl7G5!}(bH!atEQno>{cvn+{D0NL+iP}K}$fM)9fU z8ZI(A>x1` zjYUmPnv>qz?hSEn0`yvr=;4p}OQMuRM4T@>_D`;>r{SDZgXosBl|xotAe(kx2;`jc z&fmKK0P=gDEO4A@9%=0blv~Z5NxF6hQ*A;6K!722qClKN?N5Cex}uR+2VAG8fSQ0RD`5Y`xApYPY{hs$hCAEB2Sb^c)k7 zejA1{%%{=`1>INqrVV~9@=%T0bLcW*j_DmYaL>k-aZwH^}MY=ADH81kvJ z2LAwMNKiHl(|w5XkHT@9{5q@u0C%fsbufSN8{5<`F}0Te00!4p;oL({tkamQLE@uM z)><_fy10wzyYiU>pSheCkWE&YC)Ibr(Hk#1g>>#$iI(3?T zVE+I$=*@Sk`Hf;~bp8?b8fK*nKpF;6abz^+@|y9UfeUV#uqh8zofq(ej;ZZJqg%<^ z?x8c%(d$3xzHxy+qWS~c`?`5W@iXsR^t$={ABz)p^j;x;)Ba8elz+O9r9GTDo>1Z7 zj5NoQE3<W&_WGMvz=X3?l;93#h>To+C zy3&BDF(UyYL4`k5fw@rw4!)E74q*8lf-H|a`IQxJZ;6iD^^B*)1&BD z%+#Cj__Zo$`09q-_bavHSKiJ)lXl>bra5|lV`xD?5TMDwfVnepv^ZD{(CNjbFb}fb z4l9vAxt(Y#iYOc9DY3p3f;$qN-pd*?9NeL%{#48a0%OWhE<_v?=#e)n3BS!TJ&Y&{ zo${Adw8B^k2SnS|0b4=JM8ScSi=-b3bx8hdP%9gwGZ3b8l+hqL3D``i21TM0o5_`u zK*^s)Ap9nBkae~|G4oP@_C^NkXJC}tB`6dkP31gqAx)y_>V(<~1QD6p19>)BfTCjL;<4Nw^}J0(7fMaFE2wgMnnHb6b{pb@$w zD=HyVbJ;Dg3TzF6CO7$@EEsBCR`Q~I?3~VQi2~<+)Pr*gO|O)W;63i+t2g z!HX13$O%L$VYf&+Y?pM2>4*tMC>)H&>5M22@46(QDopM|0l5l6AZF+{6Z)kAf)m>^ zRPAB(N^FHLU}Z>jdSOlG$&>R+Aj__a&)GnMCt`w>3lk|g*r_hrF0lsF2|&4n8=~`N zJyU(cK->By0;b7>e0fnKESPuIQV!+81c{6&pQ3Ukr4*?dut!y)V+Z0lL$j3$W$bfw zi>BFxnq(Q3B;R#t7D`P%ZwhAcQkaz}7uDP#n;yym?Sze{ELEUTCOic0eG~&ZOcVuo z-3G!8g(Ue%5CnY?6*2Qu)pC(Nu8}c5ih{xa0FsHDAF_aVx>DnOC=1;nd!U@e6#>|t z)gh8h9k)myos^dgB4iRFL1$7Jjgccc3R+y@ZIhTLbGr7PVu^tW1Yg$*L~cnXQMJfG zFmo1!G}_T2DU3v*KBxpp-htmUKKXR_fW$-@48b1Fo4Pklid@X z+p@>hd)YZ8d^SRsNGA!1&Fr9HL;|111wc6}fe~{BV{XQ6A0Nwm(#bvxO+O zP&Ok2vZ?s26yvH0S{z@CX?R@$S62RpI|Fi&i*Ar^xo0KZh|Hs^=GV&5(eWA@ts6BI zUJWM+mDM?`o;2JwkENp`rlS_XTOo#dC9*4%T=K>d-6nSKC&aY8I)kffs)jTPf^K~m zm~%(8YSqK&aF!ZOG7U#v%cb#tIj-W>ol{p`?k+PEV7SPOuHKu*#vfKrS;W-&DNE_c z!ZKIXR@783s`og%B&>ZhsCP_aS5+jHBbO;Ta>>~_K-~pX0c~)M$_^}n*#HcpVo-zw z$|W0J0Cvg&!f+!g(`%|YHH~weZ~&6KuPu8&*K5lwYscYq`GnfsB85N9f6R9IFGJuw14F^-254wC zj^3fWoO{aV8)0R{&*dd0SomN0JDP797;}@8Q-<)}FAdVRhK_@1({38kpX#@u3#8ML z^g$*@JFZKUZrRmQNm3{qnfj(dyc;EeNI&S2F8KutSR@i54f!dUyoFWvSDcv6Bds&Th;L}CF@3=AeF zPlN*py3pgb+os_9y2O#uO~>rFg|8)bPiZ>u!g8*t80)JHZ+|OpDDIj@tg_n%&ji)f z_m%26?nzh)fT_mhk9CdTXBsXM4*<#07v<&H3nyQAndxnq^eQ8L@bkP-tn3Fh;K z;iJ|Y9i?<0Ha`vRH-=T8?P&C$p$oqOAFAkF;62|t@H*SfAG|M4nf*`rW{m#;YJZcx z{%Ur{7tDOc@bS%Xf+DlxeMc7u#a;*Q#-+fX(o8RZh-pqp@Ofo; z)f^ClqM)!Uw!To|@R4a>Kz#Ml>HfpGkY=x0p?mF7qN7@OEzj7mV-D|vSIvITwf_LK z`LBo9Fj^{fICyu$e^vCGI|Ctn*ObM#F7K1+{ANwqw)`0d#e&h|y7p+ar>%$yh> zRGK3T@+i_UG{57>Vu?sx3)?Rr_C;?&-==4Bz7>o{Ot?TeXVfUXzJ)| zRdbzQuyLqn!uVcu<$Z32-Uy#9t&L`o#!9Bl5DJ#x3fL~aN0g?toLzIg7nQiT7I1Ep zNdA*>_k1m0!^u3O!6|U94ziw=x{8%4HmAL+I<7{;9oKfHMUe<`)N z!GGD=)A+s1blK%R1KB$p(^HIUy086}AsGXVR+D%8VthX|V)su@&on+PQ9p z15b@#zz-PUaWXGNX%y7EB2mrt2zf|@>eQH9}~i!xKCQS_envBivzrvYG_0VR4@ zvc4au)bJi)cCC#xpG~yg)GfJPBZp`|8^@^VwD)aF;+to&FtJ(Gr6~UZ#L4N}QJ2Z? zzRmb9ik~WIDnCs@^(r^s7de2Fd=f|5cG_BM6wkp%n_$`+0(weJ)6l0*m;sDvXalgf z@>#GhzEdpR=H>Fwr^ksx3MUoKHQT1(8tRX1k8xSHt7b~V8xnYPf7gzSHsrMY2tRTbQTEKlu=3-m&rSi_E zN3$D$2>H`e>8SEd$yf!}N~TPll>kAq`t-P?`2z9~J|(M+=d z1X+0>u)PZ%LtCmpoIEkUk#*~h5WZu{Pkwg352o?h_Tf+Dp)g>tpZ&2s{{XdhuZFku zUh%Kh)6nT(R;=`kG&b&WH~@EFI{QnlUs25Zw`!Ov)C2;+W;{yS;^TR&)#T;-RCOY5 zR2!K=v9@Ib>**3cbZrt6gxWt;$;==S9llDKV8EWrL4-`H*jyfu?2C$Nv>a}!tdb-EYu?NEE!rf=@w z7;kA@PbsD2)=chr%}*YaJvLxrF`Hp1x&(>J;T@sdyo8O3vI&842*ioP1EKq4sng1Z zq{mfOk6f<~{?Gy5KI`bbR~R4ieD{+6@<-FWpd*&J zaBYF0!UtgrqkRkgC=2dXZIb5 zz6zVg(vGloRUI9E|$nSlVt$U(GwX1`l*-8aTJKUh0-w6|R z6CM>nWd8uw7mS4yBG8#A3MU}|>=ctE1PR#y<~*RD%5f-YnL-p!ab&uTrPX90E2vHG zkv)x)7tQaoHZq|>0NE+FZh_$d!HlABl_cFMk6bDWn;BC*Qp9+7f2gkQU=8)%$@f@T-w+`Di4H=`BLZ?Fi__xoD>I0 zIS2~{AaNE^HZk`^?x_lsB%*I}3dbfV^-mW4R0ZB7{Ss4#f{8trMJi$-U&OtFRQT^@0e5aeDZ3_4ckH3Ql2bBVsslc`-7qg0^h?$+**uK-fPi8EJ^P}- z+HQu3CJ-)9tRN|-L5}|bL>!->Qzxk2N^^36pzIFTLySzon_Wv~*02ErB4l_{iewnJ zX34V-ox7;&i-|yX;#38+-1S`SfN!^=lHd=YDx_LMBvG{3+UfNYZH?4VNj|EZX(0aq zq5`H($n{J*dWp?_ZIfj(K_+(DIUo+{K)Jo}fF!}Zq#YYb zKt4iIN(A212o9S~l!+bF5GMFhA!SF)#G*`2B@H&0Ude(4B0x>doU8OwbK+A5C%<)Q z6nw|5pdOr^p-1o-v6WMD+rq}cSc{l5DuJ2Jl*|JF`s`H$0$nhm8%&U5BPq^ILYAEN z?3p4x5X#5Y05`^0pZiv;p{v5!9bKbYOoGM(k-e8-=Q>?A`DfYwgNGJY*MX|k3&X6@@?GAAHd6ttXlp=#1%U9l`j04= z(~JJjzMIBh)s*YpvB~^Dfv`D@WqnTdTrcwMyD$U@A9N~g-xkPRY0g<5={q}E@y8md zplSGI*mq9SPthw83EnKQqh*u`keG;^g&@XKnGw2xv3VJk99n*AM^FTlD2oI@yBY3) zBKT4aP1Be^DMW!%0QBsTCJbby)!O5_V+IVR0*&Vof!^?@BXq^^lnNLrnIwRq+j~l5 z=2C%1;`u3)urNY_V-Y0z*$^l6RHKvL7nl2J*7VcSXu-%e57r0hy*hl#@ega7uY1g< zl*pw_G!Dmg?(xvyonNuw@-y3k(a}yxQCG>8V61fy#J-^UWy!z6G(%mj6rCZkNsmR! z4prh0;RlIPV`@+YwZXY;Zwr+6U!pa&JV#VmTr~P;5C-I~%gFlfF8&i%j)#X))M?uC z!&0S4nHLbb+KoivC$rj)mY+==kXyaaCoOYbyIczNPDJPW`X{qT#p)WGdj?c-lHUaG z7Z=Xlzpv7~>$MtMR4KgKw9L)dPpHb2&+iyoawJ07Crzc6Y2`#Gmp=fLZv%Q?QQ zjhn|jT)A*|uxsO+h^|jl>kS_ff#q~xXc~<>IF|&hD$|zM0Q^GN-EFs$X*iF6#Q2R^ z{`F&Z*17wYv>ZE!X=>4RZnxJAcU4KT$sSg%J~%9k>i+=2w>;;u@OlvAJUW#Y8ruCU zH~6bIe^uog{XHHpsOHn9b1Hkbw^2>Zzfcame2VV;HoTn~4r_yg`g?-wo5VO?lT}RhHmx?ge8v9q zzFT!d(;F{!_B*fqPb``bcT=cTAa?-Ve>KVS*zO8{2Uo=8sknTcw>4FrR+CMtFJ}*N z>Z<0no}vyt7bT|STrIR%+FFJ+g1`om9v3E9Dhr7jg|7V$nxKl5DY$0sTpLYM-rD;{ zy?!~Oqe!?{YtF&9B=%T%K8~eY$6Ky!RCnZO_eY;Aa*qnpQGZ=MH8A;*VQ)k>aHj&F zx#oV=_*=N9vr9&tm$rpUjf?(KBz)J1xNW-nQ;W2Jwj2<+NcVM#A1Gc6&Ri_;eq-Vq zA^9oQcR}vcarR$9<1&3aAM$X#mM(XrgbJIRWl9B#>YSt9eT(s*#&BA^HU9wGXx-G` zEO+!Wy(77c<$U$*n~66;&AN8fbW_x{&?aps6Y~q`MgcyXub1*Ty*$mXne_fYFR6)N zu*6Sv5+fK$7{P>OKp!Q~N4cIu?bC^qUqi!Keh|Z1{-(e$BLenax7ueC98a5duWN~? zN#5z6jk4i5CV|?@)nWiBLD#!{4u)jX&RTb^l2JukMkQ3)o`3jyIIS64I>;0>NQ>Sz+R8+Plmde3e{^| z05x73-$DMX%cz&7hI033uLAXQ!am6K@GZKraA&fBN6j!z!NU2|zI5+v4-Dk(PDn3j z>bzH#D0Ok2Gw1l%ulr@FTgr`SHhp%;J^@}`%IxTO531V}sRBs1mDv4()W)7y@yw}$ZjFm;^wJ;HMqAI*ABo&Ny2Xa@iR;drOEt!rxY4JskP z`>HLU1j$}M9}U^p;Pz|gqk*1i`?#bA=q5>mkhSu@r1^vBZ)4garsWzH96l=UH3=DA z<#dij;`}Q?%A7itekY=9*+>V2Py*AKE0}*b@EUpI`a>9pO8G5BCp@xr`#!S-p&U_H z>}^&bh~sQ!K`qm>t)sJ@ztAtAy`febo^0Y(8xZQJ?Qi7051qN^N2aYxuK?l!+K!Hz zg^jdLv-4g(uGK$PUG-`>x$ZJa-E{nBo^X5QsOEV*@simSROG1#!f}~5P;6Id;*`=Q zQs3a5BDWTGcIoO-6)7{XqNBr0{5QE;FKMRtHP#@)T5gP*X1${ZnTpvlocuf{)bmEY6L2;Y7#!C5lrukn;@&_EFuH}s#TD9r>*03?)yaEWe z7bD9?TO!v-U&T1?ciG#TN0TYd^JS{tW}e}?iX`^;gZip&rj&@P!h3ZE^ZQxev}Xjt zl_Y><7+8*`lO(>Q8Z#x(vHsD~jOwUIe|RJHQ)^<;(0#Jijv1w=AD*Z3UMo$Y*8pRw zdhfNZewSAM7f(&7rCH6W;zJ%C7Ty<-GS%(hE9pFR9B|VaeNn=Qe-G0-!}lz( z{{SdkV&!RYS5FGjpZ<$K{{RrTM0kbsvtLs_h97Du8x(jOBoD%r$r7+KC`Qng&e7_C zY>A2Nlm^>>RDqO$7rlnaY>6XeAa|71*n`}v-aH{gZt=2v5_VEZ02`nfK2m_mu#M8{ zH$?U^2}y%>2vJkj7)!*>lG;olI4*W@Z!PO*9R$y4UpsLB0E>xG$v*Y79;@HIq`#+> zHT?tvKpEJZuLR(y{{VbxKl7RTh28OStW$se(Z%vE^F@F6XVbcG>}i4|bciKvSX*_k zr2tTA7Z4U}URM%Jld`%hE|@VYEfPv&(PE5>6P=X*00>VLbO`z&0AzRt0(J%x7bp3u zzhPtq91GfaKo>Ak5_2dPkV+z0$CWTQ&#GYG8QlbJxI&=m%%QuVRWABG_e-m~C%4sN2WhZ`q!bL1^hbC=0>sWdl_ZUj zad4G~g+WcYM9k08AYj1W=pBhFpb&v!a#HQOK`0L7K*>eO@QD{Y_e;tUahOU-AsZRW z2L3LE2r(%g`-F$krzDdZKnCF`x0FdU7KDZ_p$FU_RDym;2?#jC$sh;C(<1)>(Mffo zI2(kZD4Qi2lk!ghqB2E-PyvgC3l8NVAjmRP5`aT=45V*2GJzL`Y#?bp(9v@wgf!$F zr34aoL_w3h6*kC5JxVRHR0DBz#x7LPZ>j{4ZWIF~DW8bIvS8+Zr6|lGI{)mWd zeux6bWl9BtV8PpDe=XGDLV1p$d!QILGajje0I)|;y@Vvw-c z;`8!Qr3c84=?g@ZnE;*p_CfphP!t_=BPzwkwoo&$1vZO$M1aZK@~A*CJ4%emPpAM* zr_}*t0&tcO*+}nzoX9i25Tk-I^-ZS4XLNx8A0h{;nD|;}=!7y@gL@!eOu~?EZDl~( z{g9;sV>aFpJ6S*`!Y!~&{S*cK@{8UqrKA*K8~OwV2Rk??va@j8Q|$k{oPKp!xr6&Vg>;O{m|0Fr*n0g^A3M1dj{+6ozwVLj8Ed`2ZeAcEgS z=HU`x92#0iSBLZO1$PPKH49pQ4O`=;dv_lqy}+LT0IJ}*$Aq_x@LJRZN4{^zNX8sL zs`lu$9*$0WXOmfj*2ex(;Ghtk#D$WrH&UwhJVTmbg0ba&LUw$+Rlo#}6TyfH-esCbf25FtXBI1Db;zu>X>fDF>U0f)>Q$NU>pj2S zBrS2v8MdPCjk3ikB;>m}&Q{<$jz6w6Xt|AR2UE#79-FUn;2a{42;r1;lti_eCvtaQ zA<2A7uMOjxYP5}<;KvP!IbQz&PM~udWZY~Q6Us_zN-gkqd|Y9+*JfVQm?k@{Vc%F( zXC#baa%k)$ApZanxJ*98%ms`XBFTuj?`x=1!JY1ybY)`>5(eq@9pM3eQb-Vq>K;^y zB>bTr=P5w0sho|l4Kxe8pM_gZZkE${CPpbXGAY93ajmb_%Htw;4P2$Od2q(9620%nX zHbErK!p1O4eO8zV2KRJ=e?{}pJZk>{70jCIgC6j-4@)n3;@W|y;rfcCfzeIQzkt4N z)>JihHD2qNIF;A&5V^S=Z!JHiK*4z{3Chas9_tX#mEJf}N3r`O(EGk!)mQ#1?r;Ql z4TZ@2D1ZBgx}NN>^s?Xfd8Ha|Rnjy>xxGi`xUXiDLyGauE36w-JM|0aGS7R;&!xi+ ziyAk*sWx~OC&%Ti(<*qEC}??ug6ZA>qp0^orlUuV!p-eMf7xo000*?+)pia8{{ZTZ z85lI0V0jBdoS}(IE}CrJJWKF>}g4fe@5L)5#U4o}J zYxSHFyfa+yeAYNQl^ywnckZ#t2oB#iT%q=6Cd48iw{?+aAcC3EU_-lBdDr)J( z)uaVlXL%ca7eh;%)5!*SwHWUrc<%M&^RM^!l1rsk$D=2Lt38 zUrzGx5~sy@PMcXr^3`A@4UXgLzFA?5742TdxTvkeEAaQeA3^4$M~7$bxn5Hi?0fzW zuZzvLZXYM7^;u}~&1*P!2-fP~9W?1V(cHq@YnPvUV&bPwz*(fE^4Dq~@n0<;>kEgc z$LeHJJ6ZC2c-)T?)zvktzN3tn8C}bhG=h&Ra}N`HWc#6~rh5`@ev70Zh{#^2Uq|~p z*%dJWRMb7STu1nvW9dau)_K)*~XLb9HpTS%h}fA ze6OE4MvdD3E2q;l{`R16%2&`@Zd1}zp-z*v8rL*nK zG;(UQ>ZSVqGgwQj)9D-aVQ|dlUKk1MrBa~(0P0jFW@jz%nt0JtCUWU3iBb7GS0kZ& zW#bfe8cimbOmZn!F%`V}3)cy7PljUJeXR)aGp_w-%eG#8;1y6oa*oAsq{lLsB=PAkOg zR0B~`j-GxRO?ife*6Y@NcNbK9oKED*?|S}Ge;RhXig3y_v^*x8Tv}>wKQn*`g8N(m2Ms z;96lhao_H~mj3`{cq6Xv6{4T~v1Oi*FL1g}4yD8Nz>I$EN9ef^%VS^Sb(f2u{EwO2 zrPV#M+BF>5$Y~*K5JqHpUr_Ol4F>StQKe3s31hC-fp}jvaYEn4)hq+2sKuA3N38uz zd{rJ@UX%3o&Do});SZyF5SY8ZThm%t%E|NMq zbm|&)C)+xdBv5{6*?Z1;Lcq%9I5^X|JZg1yXhs7YGxuC$V1?N^4!)mH%$hT+qfVt4 zzoEjTdVrnbYs~5mn{Yp^FOq6IK~MWFM!KWF%GS@^t!GrLP)48eE{lF*e?|0R;Jh-c zW!eoXoS$^t{g%}|29}rsnrbZr`>X+RKdHrkiQE34C;msxZf6$hg56PWE*w*D3F8$% zE{|4s{DplsDKH2PZLui|Ovz}O%8SZ;K@aKQ{^oqkr_yV5d_srfsMVz>;rD_j-d7&q zgHb19y@%SZHXbLz^DQr%dM_NVN8%iFB!$z{X7%H`sOD<1dNQj%q~MMY;W|PFX)uqV zTfmdrSDWyEXgnWBpwelc_r*F)VSH``Ey{k=I6JBt_o2PW%K7Y?Y`dLBpFxjNk81jk z`VPQKP9{7q1B3Hd3*wbqOG~L?uIy8|E1f3yUU@;si6eYuq^&ZiVwkktCdWYSwhR&4&E~>0bHa zuv~kt&L0%AK}&aMBR7+H=Ho}u9Q(wyTE0-?EupBRQQ@J%t$34l;rtFiY-vM|YPa=T z4X;uh1KoRPD=vdpbeh^4kOQ4b;o+wS48rMY^qz(}K|8aZpH{PEQ);OCn@nPhI-nQ} zFfk@qm*_pK=-osOUV^JC5BxU*KKESz00!s&3&dX5I=RzSHVv&{eG2*PnoQBQ;(Z1^ zRw=F|cOvN|o2MdSV53pBSRYNnz~F+fs^xih(daT0axWf;24EZgmN}aVOgO>10{Vm$ z0t1hHta3%c@{n{`%8VIFQ!(nJs}N-dz=Ahb11P=HCKf)ZFj3XmT~L{1{ZxZ90I4K^ zNjJ(mhHcqEWDWw?l|5Eb)FBg?LY58oPHo*mHW&3M20n;OEKC?9)hY2RBy5S1Vt~k8 zBhe|mtWrdvJ0|3e%27ACiDD~B~04IAnDFKstai|m`Z+X zdXXp#n_K9S&Mc#-6SVk5zW9or|C1dODly%$eltUv4h7uOu%O72%Wah*7JlPC@_bD2~bCURh)8^y4(N$Jg_bOJ!l(t&m- zKBWZTd#LI=!ULdpN(B>(gidA@wZXFnP)CnE`DhXiIh$58y%7Z;F4~ZUW)`D%ulMdenRxA{Qu@}lxI;>O!o#W9rLAcnd1h;#7C)HvnLX46OkA52m08}>v4Ua+$ArVS^JFceo4ofWIzzAMJhyJDuDpnLdFPgK=ny0 zAtOD=3IUKrY>7F#6!L#*oCxUnhwTat{l=x=80`N5^~&hrMh?s94mZQ8@opVoM^Yl7 zhM4@W7%Rd!hL*02S6feArL}3ewZqE#FCVD&A+h$4o$@+;lis>!upQBirUE@zNal-T zf-JLXG}X0wflEzI)n0#vqE~a_oR&12XKT3iMzWg(nhiHTr}-^8bHf+h&DgL{FH3`{ z@ctjD*Awnq1vdU_k1)o1mDzYkqk!-Swxis5j;wzdNepkI;W>kgon!sRnT?^Nr)E)Q zfbx5l!!!djZm@89qxEo&igCd&rCU8KS?wG;jY@PhUI+L`D3%-R>Zx{7@U9n>S$eH+4!QJ|nJ5MR(F{FlyJGa9N!Ez}p$oIL*k zx>A|^p>sU1Q96Dl{l?&Q%w84D8Op>iU=>re{7Z^V*NE<2!Gb9br3>k|n-9Uh5PMu zwc`j<$+QC~1jLL5AjrV}sj~t;%5p5QU`A61CLusLK`|#Dh=JFApz6+(m9?k%sx&Z1 zmEc7DS6;jAcUA8AZk~@&nvUw}@!fe0_g_Wgp;)iv`M)bW%U=Y%+Ky;Pw%Po*{_&hjcx=JU$a4KJh;QDGiGMh))b&gU3mpSp)bdlH7 z13RweNuiX0187}4hd5K`?R#bm*c@Sez9!|q{n7O~7S|ua$$Lg;yyb0Jk_$j5>bV|O zsA_Wdg#Q5an{|tt>59C)uWirnNef$$bq#kZ=m{_dIKJ>oQ+R)dWp$VR9hTTIk!xHb z!h3^)upMOpKeS|e%7<|+BVapGNxn;h^CZpIzD}La9EGRiOsT2i;j}eUNp2ed0O-7b ziRd*PJ5>5Qs%4L9gCTts?lr^ONc?3H{{X3VK6$CYIG+ryRr;+d)>CY=rT+jEye_Vf zS&|JxO3}*J=;1Wy2Tbz5U*-*e1Jw%pI-d#r%yrt~*oEBqe=^eJobSRl6zRU3`aRu7 zos1kE!tTjrDI@M`qM~7Mo3)Fc_+7mTR8Xh^)$2@cj;6qROhTgbdcgL98d|y=7K^y0Le+sth#bma^mTqPH-J>98 zR7je%TI1^%`^w}d7ew|)#D5jbLr(K9(>%0a_)W+2UF*~8zC%$BnPn5~H1pq$GMZrF z8Q&^F%4B9CX*Qj6nxF3YmjS5Ujb}*tw64PT2hnp}0R%zpy5~5OEAUQ&2^!`RYv8WP z*L)&!b}MYY*#7{({g_AYX!+Bh_&4l+VboFs_isM&mhZCb8?SHn!@++Y!YS+MvR|bq zsKxqE`mYfoeJ+bPtBF5!eBQSYrIq|JA2r%NpYfmA+{LG@Q~Mf+-Bi8--{fGftu|Sy zoBA(CNGZj|`<`rbaGH`nt)~8_HNe=3mEu0wc#q4dVn|lqy1N;Gq@|4)7e&A+ri9XB$}<2fuYQ+jKbe0%v96N41^{ z?PpLb^JRE8V_MOF3xwsZCYy+Hjvu9|)J0l=R6ocq&T6GoigS&6Ed2GW^oj0lyJoY2 zY4}Gp^5&OD)`B2C!!C5(mGp}wap84CP1 zxAI>(*2(U@+uF{gY58!rOx1X3{%gW2pNVVnQECofk>w<}sQeh0boNiBHTlCz__Y?g zr1pVt)pW?p^)F%c7VxA1g1D zKCIB@2lQ~AQ^s1=^A8a{TDqq2Tz^u&l;-Nfk1uft;0i^2sSneMxuA$`o@`DgZ{ z7A^`|PQqm=>@d4W828^})dTr5lR*;7uVMOvynmZ&ekYoEi<;s?wGQ*T^$%l}J>Mwm z+;G~@b^CM==)97D5yh)KiIVr2^d)liv8_f{b+vN57}3VR^B&4`DtGpo!i+k_nhBB&L$~SeM5f>nd4s5c$+w#L8BC@(P1DowtAr0 z-FfE<;##g5sC8`}Q%<9pX_MgOEqc#$-dy8zb>p6rIWjrTTBF;KSuA+=MV_0c_OY(( z0=}0{=58AycRpL^-WkQJvV)vxY93*&fAJp$eD(}3)9mVp;yJ5E(|(d)9*fPW@%U66 zlBzvAZGKlZ8FHEQV11-q6x!ki?iMDv1Dx4Z&Y$@!(!r4+OI z41E%tSb!8sJNUXq-O_<}o&HK(Y)Lp$UEKOCI?95Mnx#V)2Rkg1wqoB0&K%*ZcC(J_ zYPQml0J^*hI@_y!|4)9Z5D~l*>Zhf4EI{R zK9QrOqfF(D0@m4Q1_T3j@w0a(&#{jQBQI9b^-HSOo|2+`<7B#^%p2ijW=2`RgoB4k z?y=8w=42^FD7)dgNEkxI#(-&DLLb|MXM_ui3vCe)dME4j73hI+PCQp@&IBkRnKt2is zA$7n39Z)yF-D8tCpFNW5Fhq|E5Xc>n5ppJN(iHPpKZ5~mQ3_(gj2c+Fh;t5HkzUt5} zd(W?BY$9xAdEH?y&5EeDe(KONOiZQ>oQz>&m;f7kC)H!)Ds2{Iz~90eVs^gE7=vlY z-647Sv58TkW>D?O$|80lV`=zIn-s%^tW-!M%*&vr9Rf;*ocQ~u2=21%wo@GvayC{7 zBRR^%9Sx9oK_HX2WhkaugJglc&J+Wl-O$;Bcl21%46bl8V)5T82Ls__4n5NZ$RGj| zC|O-rkWB7P;ZSkhk1HErGZ@Abnco-zR)InG@8wre=`uI6$2KrZ0Vf+}C>c6{#@nN+ z!WJOoa16jy55O;UqS=4mi+U=V5OHi)jFFz10KrD;Xr*1AUM#44e2$DQ+>n(*`8S zzs+M1=^dd1Fj9eFox7?QGZ#|ZT+GZ$8e9nu1dX9O1>74c(lk+M)6_7Iy)gZ$K8 zpkOp?6Op@s@>B&E5=3LVZL~~3;M9k(1N(F*Jocd)2$8jkWGD#QgkTw@RlBgCU z^IXojbS&;q3f!llu!U*@WDA9ce=Z5as{i=do9GvPyBb7(;~Hu|AVfcLn<8hb26pQ@ng z%=W?%$s`Mlrq==i2N_s{ts-QU191?5%t-IDQyDOPoGf9}*#W{LGnq;TP(;sikTHUN z6m^^dC=(|BR4I^16C=uVK8hwH!1oDFicwQD2N2V1q#Qh2d%;vP!;hk% zVA{uZ5--^kc%Pz#MVCO`4s*#8VmwE6LrzH zT*o!)e-p=bl_qAPg~Qq*eQuT;F-0TfwR7Ks11p82p>h)y_r1z!04MYqlcx|_~w$sCcam(rdVR~ zr6UC|XWDQ_zSrwt8Hd8#p~##zpXWM_Nr~ijC`Inr$Kv(MaaVpJjMqT^$eE z#|qJExq72@I%+jt?;OHhz)g>J)jgr|r7j6onvENY)72yfyZBFOUC-IO!#`<6ee8tEIaE8~0@S;4g~qpYOnJ7X3jxGSrJSC1>NbCIahWWul5<9@bG;2FX| zrZKwq9yE9FW4iN0j#ko>4X;eV@(hpWy`&lR7M1gVCuBQ{27;In& zn=ZG`KNGkpfhS(bA1kiLF|iA5{@DKjvs`}WY4OS})Nrk37q&y`I3Gw~F>0xrRi4)f zg1(~HnbKFu{o9Sb7l?C*1r)h+g>foiA9xEYbo!VprQ-5zZZF*Dc`RGjkX>#(mIG8rE=V*ryAa3 z;q+ciI0IKq*2IwvWb)m;~RP>xHRaU9^MKeD{inl^e zlV^!=j-7wB3QmuJ>Sh6(O7Hy62m5`?>;y==yj-q>?D?Men)J_sYMn)Qt~v|3{{V&_ zpbG$l8!pD9jH!G?_8ZA87Q!jvfmE}%?>#phTM^<$l&s~%7QURbY zluGDmVY3QHH(M>)n5OW1uV(fqNH>J*Y6=`Y$-< zO#`@h8rJDt2sG*zkE+{)E#{sxMtoI@GdQulER2Y{fw~yIhk)+B%XR+%g66$53!_Y2?Hej5HbI=6OEI-=6g!y(bYWX+PnIAj{yO~edC?!h2u4h)^YPI*Zr;;;yfk| z+RBIhe#^)zd`~5PFOL4w{{ZiE=Ddsj)?@zwz3_r=igqM|f<7X;M?713R7x-|ltHq9 z279kS_B}(ZkJPIY)>Aj_C3F#MuTu6YOR4($g{Syi)gLwD*Gq009^C@nnI5*nHphiT z+aFaU)6p%Ym<#2Z^$4{uBz5=1!7fj@$1jPAB*vE9*Z{#N90YZ{5GnB>ggp8aZ2;Up`RDnG* z1(E82V3J487$$P434{nH=n*-DS`UQ^Jj{hS1Pmr`goU>HDnK@ruwbFU-pK(cbpYCI zWdzvX!7O}`a;OQBh$$0j%6mXS9gqc~DerO>ckGci?cq*{ATI$^p)48y0FZ)hbOe^z zjnM}1Au<6oHb}&q-2jhr>u#J|e4;+-L5~4e6M)=tw8<|uG)>GOJ;>m3> zgcE=;fKp;N34xg?HwFj#qAWoAq9~hT2mr_yObMLIPzAAnqIN+{P40m?pR!~bNE{#l zAa_Tl&`q}=B_K`z0FnX8E;jlgWS`WaMa}G#3zY!(J(6??OKj(|JQY9!4C3heCxHaY zkZllqt6(SLk`QF=bjSc3Uu7|4B+1!8Hq4nNBk;&Dm=^v>i+zv*7n!$Yg~5%ICP*@2 zB1Mo48yEpd%o$gWt=%V1{{UnH5Jvw1G_fMd_U+`Li6vSBk)Fu?B_aqUh$sX=l_-OV znKLOw2?)5{$^rVqs0jSfYz&x$2+mTQm?_X6=m#Cr1L7AFkyQcSQx3c-6De%~$^nCN zKG2ac4(XX7_wb}d83N)E9dVEwG38X+#6rU2A_%&DR+v3FUb;MqnFL^*T`rn#ne<7f8*_CsM36mG+Q21|vbv4Li`gc+43|d1Nk7E|53+y7G4xdu$_|)` z6WuoV!p7O`08|Z$`CST`WXUH!QP(#SDhv_b1js%VEtl0|LURx%P6~l(i}!?Ie8Pwq z)C+b#H%C{)-c95v#m0W>=OLzI)(U~hAbp4_0(Qbzi{PdjV2!0Hr2^n`hd7c2hxJk~ z{p)s0;yaWDmq;;U4|PDuh%@0&@YqZ#2PwcZ3AP~Eq#bJ%iE$XQx^4WVM)rjPQv{H4 z*#Y^rwn|Abo(utW10?K#ek)AELM|>M$Py>30ZIjR7`d_CG9(;)f|~~3ZP_zp=P5;@ z^=-E4fdu}l8bsT5O&B=}0*Mm@-3%}!3!l1OK-`P%WQhdt2DK!B0!>I#^1~)-QgyP2Ny^1-|T>MdFmdihkRGS9h9~J5pmiT0lHOzwhm4El)>^( zl_FrB;>q;}k2|SAY(2%*H0?K0IDnV}V(CRH{gQ9_h0yPWeyMG-bi%}i91B=wCfFFt z8ZUAFs6D*lWDcdwJdvZ~l`Cp=^3K!_1_*7-A*nZY#uReD{j zc=(K1cwLxaj2_G9HQJ9_bsmxQIvqR33w^UAU6}c%Nih;sGsgKv=H++~d2J@?^-g9! zib(~tFcCR`ac>9;26BAD1A!*_+p?M1eu;<#(<{{Sh%`q-*T zA0a1gvH+i&_J3shGpFDNv!oi;3%)|Zc+EDF;L(!4hviB?hTu9HV=&!oa*DgZV+?3uX4NnTUZIRNJyCSlStPRc=TDi0}%qPXxuPuW|ocPTre;4lxw)z%cLF)qJuxVZ|Jb|R}H7dI3}-7`c0`+Fq%Y*wZiu7j#hWP;2I|je(ArW<+g&n z&A4Q>@^4X7$4}t-j;l>Nj%mm-buziWbkP0-nDw+;A)S3g(A{uCC4FWoZ-SS}@>yfD zZY5KwXxD89~`4jTZjzP(OHo#y_Zq=L9dQ)8$!lsUzlf7`-fxBWh}9;aAOV zG!@x)Z)dF4znJvz(9xw@y&zs2QN^wGkh;h@vhV)KY0ofJBw~sELi6fnw-lM^(noew zk4AlNXK(;e;mi{<9^zJdbUA_TA==#~KEbpn^(&qYlecRsXto#3Jf8_4Q?v4Q-`U)C z-CcZLjhlQFKwU4|Wo>?gLr+UriB{D6(o33J8US9ZY{Rl1A1m*`06HxUYlDr}{M4`8?N}HA7X#^|iX3da4sUmBPt|v8vvgG+`aTuL{6Cb)pW}&$5lXi*PV|u=eM}<;9ur;s0Nf!dw zvhYP#@5?%K=Wp{BC$6cs!WUQe$)Gei-921D)G!&Dk}Owm_Bwy~X88Bc zvX5-K6JM9;Y8uPXsATp8F9b4d*1yZ6-IE^eB0N6wRE*rGxl%l?`Sa$(3imH$TuF)Y3e*Gc7kC&3IKjFGBV=t~!2Vewt54qM2zO$hck|elCK=C3=Oi*HGWO z@pg;bE8jhpQguF6)0d06#E(VH@{+7I@^w5^Z!Mk0wkeOwV#=)Cgn;cZzH-l^2+TqT z$$&tFMqz>5e2A_yJJ|gCcUN0dnxFmage0OF?sDKk6R5D`;#0#&L zv+4kW2I)_jl-p*J`ln(cI|P9P21j%OnKC&$pJTvD1k8mrq26$Ox|PafEyix0L+WoA}pIg7*huO0;&U( zxE211ybwh@8I1xl#iAmJ+< z50U{-*S~cwBM`D@v?K&!0S5+UHryGJ3Be*F{z4-2X+S^|nJED>Gj&8s-8O;&O9C+; z$w;@5s>I$U7U`K)5RxWO%>||vM4O9u2rUK-n=8;G5d=>5L_v(opgvbf=EhW9ffmV} zB^gg1P%k}|1m9tFhSxKQ3ZUB;%0e)2-V{KP(r<8=kPo3&ZNH);B~W!pkmI@Vnd~H_ z2m<^5s51oGSG4eeJ4LruA~tGEEQ0k+MHK`1viNx+;KK{mb+AUH7~ zl~zxv*+4j(#!5oNa6)qgk=aOZc$4K(Wo+q~ z@PUADZs?dKY%qZWU`X{=fWd}Y1L8Y`;P3Q6fZ{V4Az?sb*W4mW7K@}mDFf*#pYD&* zR0P?PI6EpI^JIY_!M5-f6C%+lQ5%WvvSdVOxxJFxs&6UG$p&QsZ5}}$QUvul3nVx0 zo&hHEq66u$i9nbn9Bi0^FJZhWdFTb^IzS})D_nwr6MHFp!&+Qy0`tvRv_6MaWj!bk zAC^pv?iQ_YXmx7oDpNXUGNXY3%{KZkTF_>6=<>^3g zPj}4vcAB2-JQn)f3tp-l@ktvrbJ>+M+J&a~DZz`RFl}__HpgZ1=hP=-V9DDMsxKs8 zG7(@cA`$>t$dw8^G)>FDL~L*Y!ZLw*i(3i-i`ZQ|5ia?p&51jvHw6nt7X0BMv=5>I zgBzo&#sUG%+(8|aw8^;akPt3WBt)A+0-FTh$nSru05RvfQvYi^PgrJYj zk5s|cdY3e3@VpF_9B=$fv0BoJ(%9j3H?Vjq#!Y~LxEv_YWA8Q(ePloB} z$%>CIKPxW!=>Ya#MeS2p@3^}u2TN(T2<%t0LmkBP!6TGRBE9uXc zH#j8$sN%X>P9Qb)05jTG(Hdh-v>4FlkkAE)UpFzt5L!q+7Snawme^OR1N=pE^_oYh zYMoKh(Q4M6J6C7XUhQ{{ZSM z3!hQK99(^Fv|;i7oVPh1oW4iYjVPZ%zm9O$u=Q)SqS!S;>72F3IDUtiIJ2v2>9UPS zbv6A~E6bSLm<@kx1ypEPs`E~jH@*J=-D^odMU*^zBAVUVguIO8(^2U6w{u?x03X^E zk87-M=Kc&I9eqBT$d%#k;o9d}x=l&{0PU5Yp9JEyKPH1zeQA}e`gSGU&7ahAzwkYy z{j}g=r>kDUyoQps>+|0QU~z3{Jnal#M&1F%%z>fQ5;8h)vNM)A)l0XBY6w5!MWDdH z&;I};_4(T32Wh3v+8P|+Ux+kScABF)a3*6bcbWO?hjBg)snO7-sOqQymq2K~S3z$A z;!ff$;r{@Hc-6Q|Y3@SgwH%qpH2O-qin>7BRNK_zYBoUc3()l1bklM)txltBN+)XI zKF~Cp9uKF})}d9^DL1CXU@fQnPSTF9ofT8t_kb>w!MQ_<@m(8rT1s^N%Zvi&fj=e5 zv)RuXafiE3(ci9P?6pr%q*8mICfH}yxcw`Ggy!xv-Z{k1rL;vah6tG@aGzz`xr36m zoEJiMT8h-_FgP|DHu|orH(d=ppy62G2{y z5LUxt2_x*jPD+oiPSMu+#lG^t24VcK)-)6Huw9j)0XAJ{oc{o|;O5{rTFb7^H|;iA z%a}*~m`Cnna1neizsbR@((9=Sih8Pm4%d~~Ai?sw=P6X`)bW~N0n@E@zDh-0BqjGF zlH>d`mloj~jU`rsDm1}69g6wWjPUyWFNjytYFJrPo1n`2a0qJiziXVm_}v?LrkS6< z)3>IqWz6sL{%hakwLYBvH`6>mLrv;Oe0xWXSpv$O*hm6!7tkL*ST^-uk?d-aJa1J} zY}yblxgmMLW8z%W2Xeg^*zXdhrQ((Jm0EhW4fq^3BV+2kn%necN3TM^d0FhBh*T7d zi{s8w_FpcKs5tIo*Nz*)bsCuip|+m;FFfYjF46KPov$a~SE$;LCnjW>U6-AwU#{Ui zDVH^>``3=lZsl-(*eZ%zEe#fc8eHcA*ah#>#-#=F&jzkn2|t4mu{vNgh}0tG%@gA5 zSKA}~-xtxAk{l>U)RowMlG3JlC2dVM3SzBD>5^{H0Y6pMeY27{zMbF0?%;h_q7Qbp zo@u8Y8a(a*EJ4%0p~{I!zGY8V7i}Ykc1}Xm9cMN0+D-oe#tuG>x&0T>jK|8$=8jb3 zpRjndHN#HY?_eRVE+9#?*>`t)SJb%w0N7{&+o-Njkke(&G~l>9K0i~73>uT<_7RN1 z@SIy9Pj%yO_OGll(WIp_{8C|JcePF=@JG3zK1;y7c7KE2{X+-I*nO_ncAref3f(QM z4lIf4i!U2-lXcm7pPThOe@@DJrnBHO(i#B^suz;GIvf(kj-}bf*5!^|mljzuZIV-S zDM?=1JV$5IY8>83)zSp~TDJcH{v~Z`1OEWn{Xrj;k&ji?Y3iysN@xckc3ssTaJFf2 zI?T|&NFDpP87s{^E%ozft~r;#!R>y?TG7gkBPOf2-FBWmqh}G}TAejOI$pvtCkyBP z1ry1h%CnlfOddX7Tx@mCipWOBTNh#-SspYUz8O zU0QCQrnt2Fg0L*w?L)O%s`$Fa#6d6sL_W;I*31dx$ zHdcM1amW7vX{#KRw*s@Mi0hySi)pOW>Pp_qs|7w0{B?^ zjNw~cNl+Bb-dEBbjivlAEO6!+lSQsSHS?a8p7OmmAL4Kyb@c}dV56YZun6d5Tl5Q$ z<=@j3c6>y6l#RjFxUvV49*RWlm?senf_DeK#G=xFL<2L~0B`pw1>zCjZWAUODFNRK z0Lk#YPumuxzmAGi@KdG-&3jvj4J6_h&%V*?d+uS@Jdj6J1<~=5yvIAqI>kp(W)Ec~ z-s+ozps%GqY+~@Nl?<6N5UamsK-zsu_Ag@83wUO-scHDC06s$N$5<``_s?Z|e{ssR z2@%%kKF2awGs;S^*U8iIalE(icQ}k4&-Yx z5+V>zz)F_Ss;&GK0^D5sr3NgVT+hiJ2KE;TA0DcJ9mK*Q$?So>!U?tz z3)6JtZ>j`kD8H2e$deN=kgy^wfFfYRKZZrs055Wtwl_z6XR-y!iS$YUNrS z40m4UvhPp6CDwBodT;0$_q+F6XiUHXXYu^LYvH-2hk%cT#|il9{xIpQ=R9 zq#(q^ssL@+C2r}A0l#ztV*7VMA&;^e4$05VC3uO5Kr@o3dAxW=XLP{Xuz(1IIlQu(Oj|hlA%q0;vDgZDD1t3TcwU91l2XhznR=@{H+@M-)fDQLX2^(yH zL$p|?1n&t&zy=C2PjoayiN+wH0voiZF&&q=9uYS8Kbyc;b7_vjAPIvbt7t$m zF|rgl7ciUvGxb0q!J8@)B1#mIaXIx(#JJwVE!{7el5(oq&*>;ZzcCTw5)jiSM{^0< zB;67%GNC|ZHcgNOi2TVk5j%RSKL{c~JVD}1j1rmEDR(Efb7YHbOy3CuK71x;s!kB2#l*zjRF3zFNC+T)iN)d+ zAOXC|K(~qTjk`cgC^X00LvqQ)_Yrj`!ISHkgY+QozeW24vp|5L#>{NSG!h z0|~Xq7)mGsyKOdAx1G}Znnm-P+Ev@QB*dYKeWI*Iyt+>b4)?z)b5a;EBlxm5x#zM%Pb?U?2k zR^sa!9hHm)OiBhom2_%8l|cGrwe2zpv@Br)*-@(tgSBvubmF=SgWgs;nnNtAW`1kY zxlfn}AE8z4plLdp0n+IQ(RhftUaRb)n}1~LTnwLk^s?pa@MBoq(&X!S{YFVmMZOOA zBJ;W}-1bD`&~{9Vh>&(GgwEjNWSjcgCXiliGq%ZsWU2z){{Te*G{BjW!-yDg)tC0g1%Oy0()fMg}}63Gb4ror$t0CU!PTWBMUV&v*p@WM|4*1J(j| zoY?@y!8amMFigrY)HDz~Mb#*6+R2{a^0JZVb$9n8Zc9DHFHRQ%7_N zPlm9I`UT+J<*58e9MqdfQ5Ig^#jE}whgYjH(!y8IoIfgm9>;vS*!uA4-x_Hy(ydng|HCa2AQqyDG6O; z*)tg40Qa=9&UI7N&~73kS9_TOeBQe(o@Y;k>9km)u&xd~@ID?vjU@p$Fu)g2_Km}I znmrDQ^fdITkyuGkW&P5Uz(kyRI82YhWd0WG%Bs4z{$ySkwS2}V!yUN+h5qFTn}G)g)|M10kT=ICfR zQ<729`GLOYp7 zCY!%S>zn#u{{Z{5&yTsIt$Q#e^3w#!4{)EF?ZvC6dn+@*s{$alyMPP2fej+^u+;IE zM$8{#I9_bfjejres1ejnB1fpY`R<@Bdw~%JeK%2o?0ZPD5N7M=PGix#MaDIHcZe*g zN2r?>((yCy2QSM*shnWkLXvu4;ZacWxLv2w#E%EQ`#aZ-Z!GBvB)Xe=2=rZ|#tg43 z_Bq5r{7#CazsAg{_Ot%`>MhHGGG1KC)zpt_s$f(taD3T&{{>qgv!VUOyMJOg{d1WeQ_{Af1LCOg3!Z$g%tW^N^h0LL)stD5 zBvf1B9&CC{c;w`lXG`aP0mH{F>z>^^DZZNnm|7srt~1$31Z6!B?FTWvZ!p)Kz+CUN zy-(r!X1hdnRd8f@y42+^H>1#U{*O**YW?F_I)i8!C%mo7Q+jrnyESZr&wmK+z-NBx z%mJ|9(Qqf3D0CM$N3JdIXs#cbIml^vWk%7_>lt3CET(F+q)8cGIAN5fNgkwelQ4}YMh4Z|Ey)pibC;u?+}!8H16TpLv9v7JtX z9ZoqbpnFW>HFextpS{yROjy7=AD>mx(?QEnpRzm}xkfs7`8@~OD<4ahY4uOVQO*Of zT|3)BAGI`)Nt#FXT{)a%UrL24H1$z@;hkp!d#^yJ z?4MuO{{VTd(~5t>S_vdA8Fd)(eeR9ewD~i01!tNpgqRY${{S2IaaV zRw7qHe08)8gu|X0mBHCE;Fc#-87Vlx*)pX1E#`(mGuc%oklzYSJ3US@VFjX+|oXS#YVBVP(AXhWxFIK zf2PS2aJdIqt9+6+9n)#ZBm}n^Ks>YwQVdV>Oi17CnRjz^1}d-vi?9aE=MHeG*TwZx ze~kXC=$LB%VPzkVR0%S=j10+fTn|+}G z8-Rmpm_*+&VJMKO59XA7Deo4Yr30}Zsscdxt(8}k;UQpvBREhBcz zk>sK$B?5nhi0+#~lPClPOe7}wDvsm+N>%{?V42^t2mr=Y7(P-UM3};$PKgs>lVEP1 z(o>GmpeFE+)3U3Xj3p2u2rZm}DS`xoME60kh>29B;!kp)f-m7QG1wv`orpjzsVBV3 zqkh&vouNQ0%nSsHlZ$WV7LC8EH@?Ya000I@q#`e16&A;06u<{*KqDt~UPvH9W<0`X zA;!vs82k2B@)kkZ9?6E$P$^vIIVdXH>Xexm4JQ5HE%-I11 zWJ+-jz0;F1a+C-r{)h>T!NMZK*Y#8d;K_ibSmJ$DKzEX7=LjOgMd3KMa)I!S0&uDX z?0bHRK!Pugl?)#_@_;~?-yr~+((G)I$t6=qo97B(!3YFq<0N-SNgj47h!bg)?~+Go zKujN+4Z%NT$$)$16B7W*Kpr4o>K!sEV>lHVDUpcDrZB>E-+`C&L2$}=apgaY`ccf_PD-PI21^nrZ# zLZJa`Cg3h@@uf=sFaP4~Ej2-x4kp?&5L zY$sq{vtXDR?tnIv+X;gb59XC95@z81yOai)5%nsANo$T%U>!jUAq{D~cT505vF?bL zn1w(B3EeMQy&vBs~e^Xk0=CW0h!z+1dryf4^6{k${GPTwXG@wSS~=@?wFg& z6WCm!jP^cL5Z?Cih#?C{!}B|!GbSxKSsTA;NQ3fAC>zLc-5@5%AyC@D*#gcZVRQoN zgBzfN*)st4SMm`ulRyIE3|dqK#I{LP*6ec@Og6*=e0rw`?PUst26y!di1Y&K;0ejP zdAS$If)EI^w0@~{pF#SnA8Z77o$!D|1ZVY3h=B!DMq(|$luhDyKqA(YeB#9h1nyM{ zx!j~#awbXv35}u`o_krM^Fv2iK&A_reNES*kO4S_(Y>c=^_smFk(z1`s?g^--2!6P zmFv+u%&hZj)!~vnnYMM+0(2zDjC1w)?ZC;~{xBd>p_K4W!~x6XwWdh&WHQL=%v>2YhXdZzv#% zoFTX%q6AFsx_~dz5D!eqLBKH=MBZUgIFWp+0!-ldNx%mA?twVJ%>c-QYY!-BlK|Q~ zA-OiOKr-R{lqlL{7`VbDNe1K~0n=atX2K860DlijGJ7Wn0TUxIfO>%#^i-h}Hb&F8 zgfzqhC(3R3hkxXtE4(BuWc|`@noE#LAjFN(hhOKtNYirerP2pfG%p8vm$;Sde%5t8 z93Gt!m(-QyTUmVvi-luvugm&+V!I7$a@RDQ zg`>?NQReO!sdJhEFl5D-nh|l!B>w;>rczSH87J^}#vJ`sG;e9}xaxdYNC2Hx5rO%_ z9maTT1f71EdQ=O?wZCK8zBSp%Ojwy7srOtv`HzH#&*Sv**g8trJm0}uC-Lld)&*6L zZ=}o~NUw8<_Jj}PcnhQd0Gf}{cMVf#Nmv|oxLEqHH|I`c;ri`I3wD|Bs3=zz90PCx zA6zcR{&LcqPc(G8>X6eBMi;7Brtw3Mlg$jUQb6}FY<{>imM zwGJr22qM2&1Z-D-gA*_c*Q-^P*}F{B#;9%sd_wWRYkCiJ#wco-$YpwPf6NN@NVV>| zKecTL)bjYO2gO35aQTQo$z`F*>E=)5)vw3D3rO)(7nHyRK*~qb$Z3OVUr>Cx*f}Fu z?ib8jI=yAAFAZ@9ENs4mq(?|NUodHP4rO|77AO=KihzOB?lIBb7U+n5f z?qvcmKPA^R&J_9QRZL>0jg<)4kVsvPpny)@*H<97pM-<)=s_KXIWa3z{sjHMle7rB zpdx1A2ug7&oRy^5JIowHK$yS?wn3Oo-!>>y%{{O23PPTXMjQ!}_jH^LU3P8<%p4lF zhfXN#X$FQhoiF%Jgkf|)X`CUoIipEKMoF!$0K<)gi6i6}SmQjW#&|sgUsXaV10L~? z1b?FJba*_`cDsFhPA-X0_!7PU#I(LfDR>Ltx?W0TuD2Uw&^rKr=Irg^Xj#}yf#%8 z>ao3mnUw{{x}K*lk}9Daxj=m3i^P37)Y;2cAi zo5VUbm1;4+yl8k3?e<<{)_1z>{12NdaJ~muhtr}Dys9b}^&7|V$7SW!LnNX5Z~4mRnbbiONSGks2Nzv% zt(Z5cB|gkE?B3iu0Gvt$73u!UId4bA^tz2!zfQ{R>I`6b$8^t`VTSn=1{a!JVtI%X zQ|ULcUH6nYKM&S(&a*?Qpvt;tx~D@4Fd*9t)LqFu2B8G->K6X&v@b4iAq+A}qt}PW z&nn!R;#|MVJX4NQbzKb>nn1@>+!`fw1KE!r>5$Dmv-{A!vxRWICk&zPG*nwkoXE4K^OD+5L=hAAQ30Iu}3UqVV<)1#-NmH!Nyv*y;GJ zyK*>uoY%DtN4VuJOF{Um7O;7}*U#?$)URpw%c$t#I!Y1`T~g!T!FaH{+*V#LHH!XB ze4MW(d>}VANzfA~Fs02fx@R#9GF7x&!pDm&jj&K1_t^H2-t!^U5a^*y!R$?!xVAv@ zysy}%mnePsqM3WjnV2A{m*+BT8Y4OZK|*VA+_NuzKV&YXuw-}6rorbLf=57O)C#t;XU!1B)L z6nFee{kF>j3LJYSJIsKKE;-j6z&5f%LGj$DAkJ*0L3DUgq7*mG;1mM{i^3#ykaCxB z6(}2oVnQbOFqT0Vgaexxluf*%b`lhu#KiWM7#>HI41}k$WbS^d0gzzAk+~Zn&Gx>? zbY4|JK-hN|P7v3>XrEZFC^WzAXt_H%8sj zwp9Qwadc07qs~fS!`vuQ+9P;K{%JAlfKQJ^i1`$v577e-h)cN!Qy}JSg+gubYv2?~ zjQ;?lBmvxnZ3Pem5^NIe2uN-weN%C^5{OX28Bua$U^0PyzKF&4KmZTo!eaeUc8^2} zF>CIZa!Hjy7L*${#^E7^!JY7cU|fOnO5?Ip2f_`J7d_An;F%Xsy!@2pT{C9n!W9Yu zi@-;CC?2**T4Nib1No*ef)x0Gp71u^0D#`mm>`KF!6w)oSuzGmKrMyw*%q+@CdNdk zfPgI)D3pN00Dzo1HI;t@FXK!K(J z22YfUI|SVYpaF80Fi;F`Zy1z;lnaPR6BxpPCpY^fNwgnXO8}qMGh-2Wx2mKR+kcv5 zq)fDf`lXq+5TnRTGjByx85b5(FCd$2gc!*QGz=4eL<6+kY=><)nX&;0h@!eaNLj-v=e67dL|-lE}~_!jqwxV7ZW5IQ#LR#eN!f6fhToQ0xbaF#_6BR zCVQchKn}1?q9kn*C{Ypc+9NWU09+YJ5CH9i*-#dU078p^0wjkLRX~SGxa^RDGEgHq zDh0s65ImGc;xm#ghKVO1G`2P;vI2%C2_8`%x9o!*vGPtPdUAyb12KejnIH|Uk&$SH zLpUUO3LpRz`LDViVLRf;n-TQ}gJhc)6Y7~JAY7;@8~!N? zyQ`!SB#eWUS}rdGDIEM#fMdoL+T;QBQE9Otsss_*(x4po1a7C$+p$5x$JGGABpE7# zh=>6CDR2d(LZf|*cL@?sB?0ID)r~gkv~+`E<;BFx^GXy=eN`$$_}m*|+^+NOQmXgzR!Ag^C%<(<=WT5dq|C36>%%#M@s_-OgpU! z4bbX%jbleeMfGX{C9NAR?rf>=cJ9$qzMc@->5>wVZ`dG6$7u9ag8~Nrg*Qd+q+CVhZkw?O zvXoQGeXeT#=Ce~olA~swUsE=G^oOg4tHx4t9$ zI*tI3>bn&_MBwc*SyA8m;dq4_kEZbIZY^-QAj0nax$Og6py;Ko>eSEzJ|pn~>b!aM zxmVSWR(o{%yie)L6VWL0Zv|kHqieP$Y&Tv9qeKXC0fn@gdsLW3!WY8xf3i!SM>htTU`1eS}gv+W>% z?g04wm0Eu5uyD5;yf;q!$)?hNi#fLOMc=zIgj8}#9YfjZbsjUvbkG_bTlt$V`Yd2B zkI7^XZRRlBgHUZ7mEGnpW)#(PJNzRpKiD%dljykaVbT6Of@?IyNqsT^^0^ZN;9J6z z`9;dn2IA93$t}@n`HxV;POI8P5Mm0(KE4-V=dA$H^Cq^FKn*W0Z=t&D(UAfd*W#A= zDIX)28z$rM2G5aTz1P`Rv}(CljW;-TY2M}#drXhjcwRs&(S48c151eNbY*oIeRo1zw!`^VFnFH}HC3Y%c z^Z+y6eEhz|eGGdnyQC9^*7a=zpL8xGIwy~#rFJue_g!m@G`F01B|u;nRb#%1h5b!_ z88UTeXBh0LSxB>NfiwE8bZsrUy~0i-q>z-{jE@O8!(C__1&BQBiBme?YT9NKH1zbt zg!pMcs`MK4Dc7XtRbyPo3$?;R^X?J*?`fLHw4dFw0Vg(sy%JzaHr{q#%|mNyUdZxk z<7!Xko*ho}CJnT;SnNup9(`RpzCJO{~4a+Fds{aqUC3ZFNo`p&sRc zIDqGylDS%3mB3gd_H85O#FDxgb*lz73EO9fHiB8Ed6%>54Ak>YDpe`9^vEtPaFAho@oQs}5}I8eJenzEnuC3vJg}fP z%h`RaX*60+UZiO0Xj83HumQ}b8ej=HUN-wJ+I;@JHzh`mMhAj>Td^#feLM9vTS|*u z`i`(`M3S+LF7fP(N$>fW-#U6|(k4f9Vf@y4vU+fH_%Xwe)tZON!BgdKF;S$mhiZuN zOsoF@WO&$cZ|v_6bwfcJcNgtQG`ZzQb^Icbo8hVamp+>bw7BGWN)IdEZ@*lhukCe#$ zkbW~7_h*W6?p@b#PjmR@w0po~rPGDN5WR2PS3qYDWPC(8k4auka=MyKuQnw)c5?Mt zmMo44O&4C{>~IG1+q;^sKcevF?!DL983UI@N9L91@^AL5@_M{t{ll$tJ0se5v=9LX zwZ3cEfCO0hUPsEqquSpPX_5=8$93z288MZ~*FUZ=@Q${Rh(F|b0HBNcLCmH%nXz6Y z)*~}vvhxpZngZ+k3e4i-OTr!#YY`dSc4j^=V)260>C3&QNcwI4u zFt+qMm+3WhbrjD_={!6h&{nM2{YW^QFl6-dDIS^ap1C#jRHXEV7ky9qFDhY6LkA2>EZMD|{H>wlVM#w1gZUd?X;ZHxjJFjN;!>DNCx_ThElKCU#ykcgdHih(FEmkW&bIHo` z(4U>um2TZZ@VbXML0f%(=~Ff;x9o(oy89>6ej}PG)X%wTsp}grb{4c>y7Av))W7$h zwy*bT0re}`fwpCQ&y$truY>8lY-PjsZG3vR;Kw$P8Sv*MW5(mYn z3T)$Rt3)gi2_3g8NfVi}S?-o3Z-q)Ss`6mR^HZ@M(v>KMH#Rmz+R#*jE&)b!-6$3L zZ7G??6gMPxPDwFkh!}P4ozNX1%8)1Ig6qZZHdGF8Y@%%fWLY3=rJ{05P%ir?-AE?n z#nLAdfML=M{SZzM-7n%Xgq?eD2nrp$cSPia3TD8L>Ev8*lqdpo~cB$e8W@6$1oFAqOVc?4zpFU_x>P3QDh-@Q zZk*p1!o7jaiP#`m8IqL!&|m>4WdO;a32XveMgFQm^Wg!LIFy)nIa4wvzjP93VhRGL zCUBGz9RW<*@L@4|iS)jK3MbLv0Fl8Z&*%4u%C@^jc6bO)G2%k9Z zx|_v}6aqT2fs{xL&4{q{NM3eBpo4sON>Ak%RVx+*_9!zX1Gi)V4ZB$f86YS?7Y0O5 z$u!&!+o7YmK_Cm^WPm#ah)f*E$tzEJNDYmYYJlhBI~YXvOZa9*lHAGkQ38O;i>W#D z;W-3A`l%MMy!KfUF`Ievfq&+an~wfaT>=7>Eb6Ct26HKaZ2Xc0$OHi&bc=yMn31qH zmF_%c%uJ7>2!JBs1OP|?z~1NvYX^ZU^-0qm zQ8R>$wg<}DLlUwN*rqU4f+hj*j+vZdAq!;#(hQQ2C*?k<7&y0d_MY94qi@3Ll;Xr( zPRdMNpR%9?Y=9bKC$a=|-|AAe`nx0mz?15rEJsPb@{=}Mnn$?b;0Q(FivF* zkYJG|N&^?U`>PiO$&b}QA`PJWrU(GS0^)8&_6at8T}ZJ2i+Cuwj@X0+&CSj16K25d zpgO_C69yAufgr$8qk}RnDu99j8!0EKKsdU1GEI+U0MJOy_e_tA;WF&-$;Q_B-gW;t?JY+Y)j%luJuT{O*Am@}dI-n1o1@cl}c8i5`^*}kd!(^mM2L6d&9EhKg*#SV_KH)LA z+pZ-0Pv(m$yj$xzOalhep-KZVhZFv)0l@<)wci!42i;N*{wH}@ zHE$GjwW>J4Ye|{x7GP{mrEnbat2$m>)w!exxuKx?o2>E2bdoTflw#T9TuQgT*H@`B z9OAUb>Z*QXcO^-*udRxx(ehJwCduAct$QKU7VzCocmTSmPnZFDFcR!pd#AIVH{tnb zNii=4{{T|C{!UwP(a`a+yq0#Rk#IzyZFotu5Pr#nF(G{M^e7xeKqV)Rs%{wx+9b^Q zL9n#^kp^^rK_Z70<2qmNRxSg0J`?g@cgDFxiSU;bQi-Wc zXR{02_(efehiTj-O*a0EYO5*KVQbpgH0(smxb@jEx^B^qO%5!o*9`fkj;TVVvCd=0 z2(ewim-+jNaMIRlBUeN~hns*q72bIFBJlnq$2(6tYTI;)Y4r=uxbG=(J`!ANQZ*?I zRb|0l7-zw%RVB&JmK{cw+~`t`j|~8{$YE^b=|pf#PCfUj7zDs z`mdaba|zh?U8k1$*NE_zHibv~{U{JAxc*V$YtQ5UipKu{Chb3vx!zN~@?hxaK4E6v zK$-slG5)K)$cUd+<~)VQ=e1n%B5yaJ?4zJch0D8|I73Nq<5+$~&!=^{ONMBv$4-`meHa4BG+J;! zv8NIJ(7cnBB_`dTn8r~_9ZQ`#n?+NWb(Hj#Dn6}I?#IAD&SiApWR!(oWUo~J0Nv6t z9!xIP?OC+xa2iZ(0_vSmH-*Fd8q&Mo@eNTB*ljkSIU#g0ZH|&ndz}1@%T*NpjGozb za&%f*yLz5at(TO$CvdyhwM|F8=30yg;ik~he+!}$B;9m$G24bGH(M>)n3t^k64HT7 zU#TELEvNLl@^CM8?>@@(e}&~b6$@e7hZ={?;C+JE!FbUj9F-0;M*vNp%)Wud}4%~uSWXD&9!19An zy42Nc*eN=tsk9lUcLbc3vOFftCCj6u`)hFgZx3bVw48pfURvz0O!m-0;`%@jP;C$9 zSDLs0O8QL)_9A@Nz5eqdzE`|^CU5@$3DS51?r^t)ydW=r_EN~??I^eBdAF+5~TO`wWy zf4pS&b^idW>nqhgwrD@zGwuv zt)@cso5569?e*SD|(t)H>x`w^+bJjk7B?CWBCCD+^Y}nWgoZ z&_6K&V=ju7x;}^GZ8zchcSzS{x2x*A5IK;vI7Kl>hiU1@Nfg=$^9yubeC2$8M{{iZ z3~5FQ44c3xn_T)WeQvIvk4aX(qSWb*rw}D^dQNHK8jUlnjcqz~+DJa|!5<|f2}`78 zSl&EJGVJ;7W<`@Lk{isD zrMW|_kTShzl&~P4$?leLf%%M}J#W~>BHCKYoj;g~K8w^~-e>5%^VsD#H-XlwW2Mzd zY4l!(+ce7gO>?}`KC48l3{b?36r5xjl2C1gK^7r+&rrb^Q#a}Q!l7?PC%aAjs=x^X z0w=0$WjL9(>TV_sDhK>Y7zfoGTRWuh%kw}}Yz@-tBhf2>Bp67+HcPNpX82A{_$o!F zQY1*6-==@LQk5*atLVsJl205!(bl*5kdcL5?$6lM+n>ShJeU?g23YZX!j2Y2}= zHZv+RPlW#f%uTkH7$}=~NE;lfF2TH}O`us29K?1(G3cZniNAysAjVY#oS!O#jiAEB zCJ%neg9A271(ToZkRj8a>mFbds!WrC-54v^2-?9!h?DA^$id1GVb=9dNZm=>x|xzA zzhwb?lZZoI^Ry|KT-bz(fRqf4Fw=zup06;A%-#@W-aI7~p<*vFe^kk^#QG>E{{ZuZ zi6GASvZxg^oPgO32?A$i2WJ9OX>V+KQh{XJLW5vo*C~(6dms=5#ir1z zATZnmh)zTie^oLvhLZ#dzUazP$+#B!sV*~UNEw^JK{$mF8%&=bQYTxzA(;2OiR;#LiM_kY@oumCRm8EHrXosAyd5FIf0C+f?^Kck?L%T0f-)u zl)(@`(JKSo`9TDkoTUMnCo+9dB1kH1Ma16FlaAkH2U&5DK``4~AVJ=IrqC~MR0zr2 z{$YC&;}b?2>B3+UF?iV~$diIoX|=FBp++1G#Mq>4X5e=SCc_y_K%U47n+OA^GKSh< z*)E}Ryk5wYBtZ%RlMo!xhL~}iA4>#f^Dsgu;*tUsqD;uLM6~Q@(II1V9*K;c0Wu)~ zz_qQvst9)d_dqa81Ec0XXaN3U;Qdttazuj)VWuoTs0G&qh}}Y>tPhC$r<@q_5^P7p zWTapd8T%+(9`k8T0|NI;2F81!Ze97JB~Vt-3H3yg9u&77N3H*5p%b70Kt=a1r0ViF_Z}|1fP<2 z7>uF?V#qO&5Mm79%1|#N-l~AOB^Vc1^nwWQ!z7 zX}8rji-=I87>R&@L#9unR=B$-a;p*8iDoJFD|W65Xh?y+E5~aNOrntmVylfBqZ~s^$f*y05g2L8Hr+7}pQpJ+05p zaWwGVkuS;I%`LdwJbCh5bMju-$P|qZS<(&2F8Y|Mem19vkUNSc~Ba#`;E}xNdkT)Z;37ZX%Y%Ur*VO;#38EgdNn9E`=&Rt#smu!Au#Uw zlm$p2i^{8s*+t@en@WEX69EcQ9|}_@$pT{i(9kUgJE8?P08B~$0Gy=KAoQFdT5WGA z3h^FLJBhyPZE!?-APC$+7f=ptW;;UYp4GJloHm6JNe^)`J(qboH!(S0W$kLX{9c<* z+_s-l`LAY*JF=t6td`s|XPl8ZQb*Nabq4#draoa8MTPZR(YXPA6~ZXDPs23ySO5%T zL=CLGAC;(nBaY~)5h2wC{Fl&FKn#Gm-cny|PTz}<4n|hQkTKZ}{LptQb|fmtnOtMA zGGIs+?0`uS61bSkU`F1E4v$gv^xo0j=Q*rpO+3y97U#4LMxFe-U81cwKdGbu;rcEc zn)Fn)9Q(qk>R5f%YGI^xMCEStKP+(VKLOTNp-IiG#)8sZO6VmU$0gvZI_fhN!E~JTdI)eH}xZ;RJiN&eP#q zHiH^!ejp1hgF&XiqfR6Hp=-QLq|LRF`<_wFf3WqsYL#?4ZA~3OxB{6CKhbp>95Y*1 zld96wReJ_p){+;x^A3)Q;F{3dEdI=lEgnRq&-QkU94sgGT?{(!PaUQI0B1Wkht$bU zo*>?;PnMF`50dSC3!eC=3=F4Oja31LJeeMj%H}xVFHz!L^HWDY<&`OW#+Hjn?zlc+ z2(@V+h^OuXs!ANW-aeGUrk0l~l! zK?e}NXL~A8s6h^Ef%Ge|a1L_foGHx)r{XA#vZP5{2ZY~$kE)e5o?VJyuIA;=QWmkS4uI;F8=_|(*fgI(8C2Y7=(Kpt{nrZCRG-O7#!fI+P*&1Jo2a&R4`y{bG@N5q zP>z#YT=U=(S2@Zp{BhNBdX0x_-xTK}lWfuYmD4$G@2Sf4_;m+GekH4OCw9{Sb-8+W zf`vUUlAQ`erIgwl(cmv`tLbm${{ZP8Z8y~vY(`*Tw{+Waf>Ix*5KV`w@X_mMo%>^d zPY%(vSh}O5&6dxy-8jt)E8@Xlt~{03!~L@{?6()pC&e}K>_Z+ zfVyopq>5hb=0&HfllVuNbDpE|9B)$a?yrc6U2I&Q(zp1PV_Q>Nqm1>qm7)cefEP3LH|E*%}ijpjPO>xF6$L33ga;>vkyiKD{l$zkjG zx|$##D?^=XJMfel?*9NiOH?KUPx!nQ&2ai-PobvM(%5MHhDXU}l|;x(U555t-D3McDIGl{r7z^jO~48q@ClP|Rn<9zo;YU; z>t!d6PN07aaXw1(UOUemONmr5P*J80n@q*LtZ?YE<>f95n_Y_+4f1;D7v_E&!#}sK z(&+q+GFMLGe$(lOxw<_W>WB`g@8lPiSJl<7>8kQilCT$&NhHeZVey#azP?UYUnx01 zp;6kopPY4^bBDW4subH#s5_;jak}Z&D<(lQv4I4xjyzGsw#8C8`7+BZ-5^&_2eQTr zrW=q}!&#Fd2Np=1Wj`oDBt_I1**BTGmQKKwDk-^KuPxC0PaDxuuVrBD~}%&&B{kz`EDvPJGV0P?z@RoeFhOqgM=1v#f;fgzAj&5A@%J)f`4M$DNMdX2bQU*~oVz(MVIS!JN5DM@Su}vs| zs26lJNeC$f1-ErgB7GJ!Y$^o-@4m~J#&U*_pjq8cCvtj^^j*Vz+hx#wk?WfNRrhrq z*8U!=nIy%H=kB|0PBoyWA^N%^KgJizYNIb&U&-})X~)u!KF1+(k#y$QD}}4f+#;2o z#5B@B#VanGj`00VwuZ8U+<(LupVF0G8@)*UoT0h!0twkmUDVkE$PwOFCU<2W&|))% zAc8C~p8kjh-29V^9izHFzEE8QB|su@I^OoQXuiAa7)ef_spq5O*TbgJ$+p+XY`K@`)4$#Di?2&|tzs$H7K2E>ggO z7D2!IC2Ny16Ba-t6Kp0fcS>inM#QT?Z5Jd*szkvCC($}&LM1pJ;1p;P7*&-}}>qsdV zNiwAZjDS)Y%9$tO2j-A62*B=DK(OK1%-JrYP0T5D*u|6F$PlO~Y?*d^-9YppDVza+ zDp5?vz;{y9KOm$y36iE{p6YT71fN6`AJ?*ulO|$Oaz*x8A{I#_%93DA-67H&2JS#{ zzhnakaX8ro$h6ra?WW!m#?~c3P_}=f8hS~I{z(%vCcz-=#3;dCQDAN4p~R5e!hmji ze(4V6B0#WnKSaqMaIy6h)oBTJT*{!x4EahyG9^rhVllc{7buY#WW>kUx_v;2izp6| zc0eG5p32a%f()MtgMPvk2VBojq@EV24QqoL|LS&1{%27&bvAu@n4m0w~pUb%t5C}GltI!!R*GVY@yabD{ zgX)yerpOMo49&8u_-66hMnstri>jG7FjuVcjwH>`rs&$j;XuC8=enu3N6{!1Hjkt7ev?sTJk^sIy`zkP8>*YX!d)m;d zZDVM-2}MkxM^bYe3EgAOif|_9WG$3kW7XXR$btH#+q-NgN5$}^0kDDyBXl+Zxx6GC zV3?V|q6s}BECPicoB_lt2GKGWF}4J%!V4HAl19N%Fj@%ur7&VJ5)m8D>QE^BHjklA zqv8?M*-ut&auWm%j#TIj37D8Cboxi7l!4U|BYUb2_jiosO!b}t8NIw@+ zK*wZgra^-t07yQYsgP%L;a5m4xjs;UECBf`#i2|{n6U1Q7kB$9MI6}0jxd-Iz-wcE_FUv#%!yrF+B?g51GWaBZTDMnM|Mb~R(V!AGs$Wnj_cSxp6SgFTho%* zbwXc#?!0uLjM;miEYmc2CXSxsnA_&M{z_GiBa!1{c^f%V+E1$JUeziAqth^05>9eg ze6&FXFE;k6Tm9opNJX2~<`*|Z8_bTDvDPUwr0}YK`-y3p{px^y*S~28MH*laga8+Z z@{XM9IQEr;JyUNB+*xX13@=xcmB}N`;}u1+z`uLtG4c|3-ATMbz(P3W&_dzb1CP#%R z7SRSbI4J=o#m7HDq#JAsbG+GF1Cl|AO|j%80leeF1&9EFWhkg%O`=sc@*>cn8^{4v z!80mQDnPSHoFEd=V2LVQfMpT|;1nrf-e9C;3n>TUGmIdRK<*8tP%?fKzk(Nv`$N^8 zPcv$y$fpb+AibMWR8gT)qwvO;ACmd=is~Jy*VnA;m%O)h;{HCYfRpe-Ebbz8Plual|%PPfm$vcKO{{Y>d zNUD_4smQ1Q0EToT-`T(!-F5&3+bgVlJ%3*>Y4L1n(A^OwckWbo=;IE`CjqIc~6FM zc0AOf?&}ji@|}$N?!4QY`6|B#WA!vDirQdv5J$;&aBJ~p;qcBreGXhnwaPkx2@TZ+ zEsmw{ImT`t{{VNartO1)E9osGgY>kV$RN{cx1#x%^3~mY_aW=Q8OwS)j&!-L=y%HB z(Q*8wK9wW2;-^i->~j{hE(4s8PY=^n!DgzF2eg&W+vd9e06mlb&s1}6TUL{?{x!$K zu4wE}?Pp>Je!Hh}Ia1dGBnX?rVnpv2y27cME{ZTr&9b`ZKI)F2mNn21Q`i_jW*1=u z5(JoCFWR=Lw7Gq>TY8mi00)69Zk=9OugR-BtZd_bl<@ksbkEn;vni8GiShhJdP6|! zTwgC~nWNzPN;F}tWhRIoNA+BjOjs?xA5n)lF)wqaN|? zY>(nFw03Shd)nP#d5F@nET-A{?7KG$CqeAaquOBp712H1Nd9Z1dqAw+XEbUZLZfOm z#jORVMi*`7`tHzjR+mUD=k&Dvg6&E_w~7ZE60DhKc};goScj1-B}$9>(8A z>t4w?;C`I&+K%|yE^PMfy!(}SLE}2wnr4`Px^tR#ke>?HR^U8xmZCapP=ChLgRu+A zs)TdJSHGWEyX1aQZCAx6ypVO>oboPSu@P zk3G7sVbf_tTQCUgG9BIr^+!E%`g|LMnr%PtRa?@=jfUl6($){-n!QVjG+5*Dbi-|F zob0^AnfR4%VB@tNOc!-K-O_7D%b}&yth48&cy(FcI5fLw1*od(^&IyZak(XHcPo)aSi33AJQlHEk9-Rn*lBWWUph^ z^H!gL^2Ucxr*NyPZ2;De*2(a>zDg3vqZs#RN5;-L_ew`oziE%wRRz@PRt`Nr ziSsu+>o}P-wCCLEz>b!0>Q_$UI?B53WlH*omsP0gaVrTXEWI((#qD$LBTV&kxhOsv zmaSs)NitS4a;8B(QgwybsVdb>Vf%$ymzdVPA@ z418R6T>V~YVXcw7IyyX2%%1sG9z(}DTZ?dQBXv5;Z4}(@nQMcf`CJ7(L+QFf-z(I; zr*Zubzl2huqSUghjZ5@{A~Et@HzIPbpN;U1eO*fkeDqO&Vlsb3#i{+DQ!1gCPy4$u zJ1dlZp=x-0e-FfGQ>Tb&{x*E~3)8qSGVtCjNIy@gXeam_V1mAW<2*LM3fI-r>Ka<+ z7#>!BU!>h$x}5{5I%mGjsWuMUR;@;Z7FFs&(YFS-E-89*usZ?;V?vB(Ro&r zigO<-MLs8|cC$l24M2LW;O*#FY2lpl!S#^e#2QX;{{XxZ1#&WJXAV~@1aVF;n7>qF=%5ww+dsvFz&V^j=-8=Z;~}R(_vX(@wKY9=c(AuxVwTeGMLb+L&Sc zk7;R=OFO1P$X-dyp3!SJQPIUdI&MFl3x(=BJzX7D2G*fbwP`p@Tn&oDHlBDLO&Ma( z465SIlM~$pPEzU@J*=MH?6ez$b0SBJCo|nhH#b0t@92~SXJp-r0F*?+dtM3zNs|+S zYbG`($RuQmC~c+3?0^n?r6;%qZWA{G63F?W2EjOkx>I}I8xsU3+j;VUF9H(W_edW0 zx^DCHgam>JGm+U)f(S}u7xWfL7@z2X03aJ>8(f$hBVuCyi4MZ!)lfS@ocBmYzKD_= zdkmstVF_V576-an?ZBrDeQJgkPXfIqhk`3LVznBABfrlJCT8#Cm@4s1?!{8J9Qji z?t%7FVyhJe4d22zAHkp5y*u zP&4A@Zid;jlRKn9fpa?`oBF5*(_(LHLO_@?gaZ?7pb$tAk0?@`V{6$T#Q^m9Q0bY85UODGn*|CD+6|`atU93o0MBIu z@{uF?ravh{Sxob>-B7T(`Y36GxlDJTIZ>jZZH0(eC#Ko#pujPb6%!`g+R52M{U@d* zs)Iekkm4scK{owVpf^A`GPtfO$243u$MIEwcFY$kb1xKc3gK_mT)6x!^5x@t-BnFp zch#!$=eWrwd$gKATbVu&7OPe0@Vh-upF8lkJT#h&7x;*k%;1ve_cg%CAg^rvY#RDmHJ+o=2s!2 z=RPSy#;a-%@w64?myO7}XQn<&8|?Mr9~G{uOaQt!3FnTP?U*(&#YN z)H0iHUf|!l_uU&qG}PJ$LN{{V;&((Bx4I0gVs!uEML%u(d=QQ^qQ zAkBzgL+uw)@414rWD!gT50drQd@TO}m|h>vRekRq);qmIwD{QGM$P_8RgS(+OWD05 z{$LLu!AzN6zQGKTc3x-fwuI_6HDYW4UYZ27g@=%p<)beis}RAR0ty6NVt{qy+G4) z_P(Jp6v!T?%ff0BT;gD_T=tu(=-?jcIl$GZ0Ug5fCuMhhWGfq&$-(k-xu}sjNMrO& zi&;8$A#{#pRkPVWnrX!zTcq*;H6C5^*>>?@Z3OvUPl55S6~p)*j-5?i7LiO#L6Sa7 z{{Y*52-^)q%ywa4HJ=_#nHxy@j5#sG98+g%E&}l*bxn6s+80$E?ZIH5#JF1>22{JA zco+sN)FyVOR-e=5{{V|Nexn!sk=nrkdHoPCGH$w?dFO+zf;-=4t9XhI(-{X1QpG<+Gd;{7s*&!}5AXQPn~1-UzW>Ta`a^#dY*azf{8O zZuXU1r1a?NljYkkA3@GqjV}HLj&iuG9WjftATS+BUp0Dbb`4kt;dqa>_ADbYqWQhBA|H zv)Aka0OcUzHzLc%&$Lb~W(J&p_SPqJ{{R;x{_&UCG%a7#a~prDVMnycgWYj_!J!;O zgzEI9!F4kp9Tr|qSDyIG$o~L%i0lHy{&?e#{{ZI*@EQm5S;NO>i@ptV@;GFgI^}w1 zl~*y~hcv+*mOKS@Yd*bKRH}NO@=K3$v6zV2cjIYta2rkVC)~>QuVfm=)Zw~~Gmpnj z-B&vm(l6x)}miUDo zXAh#54U;(TysO$?soMT6r_$3uxTNlhn|s5b zrI&H%o+nd=@Mj$}%WKpjj39YkE0{D-qgR)-&IHz|OWxy>=Q{Gex+raun>?DiTwG4& zr{Vl{+FE1wwKxp`2GIb4=epS(D~UJ{d&Q~|7;8F6T;&HvCIZ|DRv)*?d1sNf&qQ&g zjs^U<%Aou0R;I6cs6t=t-iDn%rwWb@1fHjp>bd-hy4KH8__@0_>KVqb3E9|m@ zO3wwV#@6O0)1=sAtH2$HQtdv|YsD=tpQs*|1K#U{<$6Z9HPbO6guCdg+8(G@Q1Wll>HXRN&`H z#aphXz$w@K(O@0^tDE*cqxXC}Q>k$N)xZw$KkB*ee&ITvEy15lOVZ-skD%`WATD#V!pk|t*$s?tNk_3@#f!%!j$~;Zn z8<;3obTy&fH395$y<3{OpF>B2R`(jpZ>;vi15A@YqSvd^wU_B!GiH-go))C}M@Qxk zI_g?oMwXvYtzFXhm(9EZiCmwuz60;-KZ@#^@U`6(Cg8hs^8Rb1@Y)}>IGs8!s42Fi zuJd5fwt0hJQ%l5Z>2w;0H&00PFjH{?2cq}-6%R@rH`&iw?tZNKNXgF*59S?dXn-ma z_g!rIZnM4R;$BHHa#j(#_hN>~sGbb6-zOmp6_NEzggNB;tWk2NVP;~Ozliu(K2|wZ zK2W7j$(%x&*(-^<00IiTLYeN4uFw#L0y<2jW(kCK4+#m^qc;(9WJsO;_%GOBm&u{i`#hb=>2e{RA)U81KxAh5;v0I#1 zl6W?|sovnxsB-E=30)7^=CIP@nz{tqtuSNAE7$=uJ^QXUuJC4i9UYA(-1t+HJhxfO zynldHHFyrHwQ3XjTIg`~AJG~Pf8u;LvuN?{4M!Xo7W=nK9evTveJn*#J0}e^9s|_N$8Up<7A#mTKrZq)9U#L0SHVWaktA08G~P zzMB2d{2hy#x!+%;;`)j@N~}6|yWxN*>bg%cak~6spsA{NTfl+fE+W36^{P3~B$Ba` zV(YPoNeoFexj5OiQ_9`G2Etl$S24l)i-_=`=IHe`8pj*5ZR)sTf#ErY=$sVQNm=KH zNkQCM>i*C9w}^2*EOeU3vZXgPxDqZ1?7c8LM|oc|XmxdTnwD0e^2&`e91a(+a(6sX z;tXb+h&iF6JsgQ%xtFtGKqt2?h+>_ zFoI-QZ3<_)v|A|pT`3tR@pU$w{SpM3Hj;wN>NmKAI^g;wa3&OsNXaNmDW?{=P66^% zhXNfKIkFp$!ZuIjfzu(w`J@gEV*v!tB&9PwwnhgaoMj9#GJ|Bhd;m za!lXKQea=|lmUx+A*1261hNB#jO~Or^A_LLDY+Zw$ex*-l|XDSe3T0VA5;?{=HGQP zB*C&UQ9lSfcS-@j@QgxDjEj08kXvjZ8EL!_QoY0kObZc?$gz`zpa8)qBV>u*QYOTi zOlKBUf&v5y5Q|Jngj_)0Wil;0_D})1#!yM=%tD>y9j>2Hj7UH%3EmS2u|1(4mhUME z?`@A|K+W2g1dF96APgXqPlYH98E#U$ut2;3Qpgb=6Cg*zag?AN-_lY8J%R)i25gbB zJ^Lp>3Ame}MA{H{f@jed7Z*MiAVu9|?Ic<|q}vGw=HMjh5(Lj_RHMPdCol|QA-S>x zy0?;qv75L4Zjc59ACg!g-bJjG?;<|v2Z11&8!0y?Os3;5-Zr`cxdQuz0oTUcgLq0V zcJxTQAP5I!5ppK$*v}zEt5#tf&QK1zifZ67Vw`|B+1+%2Ql;9BmoxynNM@I{;5oPJ(U9j=W+Tb zF4*r03{8mgfM6Si3P0kKPpYT@N(G4)2}wSiLKHI=Hu);Ycv2)&y~0r<0X_#d*5w^)eAdzXh3y<_f?QfbH6gps$Gl@1x zI(Co}08VGRa{>Ux?x-ks>LC4+G6}ID_CUzA!cDV>W4e?Mq3tb>e+Z=Z^$^;(?Qp!l zGueBe8qqh1aNR`*0r4=z>~>xus-)^Q>QiusG{FnEPf?F)83k;T zAjw_@q}Er`ygr3j(s13T7ii(U^RA)N-AHX}Vzr^xav~k^2DR8Y(FK8i#B;|OGZ;kFVy4~X=_cKS5 zo$W`W`!01h==BW_ipA3A#scrd1YqvG-`TFaNv5S*olc5%%cQx+?j3^kI(1s%EvOtk z8D2eXU#!nwib>*JnHz)EC$eDP4pI-3GbSS9=$Y+eylpgl3ZJKx!JjH;H~#=c+anud z>QPECLCm0B$lRn|AI&FNV#DU00-pjSGjz}8b^R1(z=-e@xROQ{Ocir@*#t$#6oDo{ zzndTd+TGLzlG7$gK8ZGQap5aQbKwGKC<+90pHu^L2PznHCd!F|M~Of%C!_;0lw;48 zEO7q-L$as>Ou~o_q!$U;BxY=Gk5Zw=TjgYd=YG|-b5~8J1biU4j?2!-E3$L$sA_qG zP(hH-fFDKHjf`f?>2z@0g&#Amp8Tzo)UwiJs?-$ew7t$S02f$tOfJXBI!9_bi%jT| zO!eOuTe8p7itTTF`sEFJfrFbJ5DxCB6*rJL&FApIoDX^ai`Ux(gY!TZ*a3w8qm%Go>Da#~l2i73#hiXRnpU_E z@00okmY=hpBmS$W_GVw8!SH#P{{W+Uq`=m;4&|$fr^&_KXy{$4 z00BK=tJt8mqWgVUQ7!1_Fd%~F?b&CGTbbRnR!t5V)gz{JA18jv8gex~ZK~ke>4>`K z>3cb%`b~f1o?1uuS267whxT@wpaAq#U6X~o-f;Q`E?5f6dd$9>l4ORD52)iuL>|ps zgRF2K8!IzCnrXMzRWAPkD23>86NH5Jm|lO^Xa4|^==}~4_?~_L0O;3CC;jfUcxut( zT!BYH!!;VJda8~z+0+_FSE%GkFu0y+1n>=b{{ZO~mOWl)C2}#Ij|z)>PZ{ET6lnM_ z4&n@XaMX1NG>^*Qf1=@cHeQpc(Ecacr8mU8PUBIwymb&)n~@e>-9BGYJN9Q2Q;XB8 z_d+p$MZ3T?ZqV_KC3X@GI*oQ>(|@wk7sx|NYvfphw@F%~&k1d5pG(uI9>DQ}Btcp{ za8#c3w0u4ED25OiY5;nmZo79h@H!l8LHpNKZAwgY znbKnM{)^@%f#S-elY{Bwon^%31Bmue#NeOu&=1*^<$eyg6iW}T9jv#igxpv7qfD+*P5ZOZ+J2=|9VD3-SlCHz@|d-ya}I$({%=*s@#l(s zBUtljq~Z_BZyCLp3C?v5K3L)eU-xnIkh8?DX&UmngJ+w2I;JXf6?(M@>0=2py1yK% zYjHhIM;R`tO#Ih7$#q*u@i!ThMgbceuCuE>RjN3dl2_4UU%KDnA3K&`wH5rD^8pR< z7f3An8fLbpoi>Rta0BYSZPK&N6>g7r_I;)NH!Em?kmt9q{#Roy1Q237EnXc+QPI(- zOc2&EFnok9fnjWg@>ylNZJ$|=J7A)CSF~Ok`#YF*9_^r0t^3wMfqaG6s#O&kO|1^< zkBUsmUa9SSOQ&}X(`pO4bqs$?2X>tO*Pn844QCSLv^4cx0|}Em_+LS$&3F{$?0o*C z4&3_}x!k!ok?3oRQrS|9=0 zWH%OxnEI|f^_gWR(>oB-V~lpReB;FQ--Omypd1;Stm)k1UE~(Vs!wzW$rU)TV zb+H<$uEa&r(wMZSE-&>|mPB7RP9-zlE%!o*i)QLZ>bLNxbR!tbxw3@zKu{BDQ`6Zo zWCM6Yk}RK6b7GgO00c$VG?OX_%0t2fAV$hs+18-x`I}5ZKNrAn-Fr_Q<9bdBp?!U0$uaOS8@Tvh3(ESsS{^r~ zuc#zaW5IEWvgEnbj=ziXT9q2&bnW69tE9mLzwMz~by~oU))ve*~7s)l_y|RtLN8qjm3w7(rA~;htH|+?klvGDsyOQe|R9`mKpksq#A+ zQf!!sD1T)@$K~>#={FWm=mrmj*y7V5ksXwxETFT!a-TiwczIR+5C1quX5p?3?4#w)k~CnwTtM{>;_oq)C**OUK}T z#gCB8z0X)@w7onJd8a;rtkk`v=pnsSE9c^ZE$F<8ERY@6AJcG|FD02C*gc_eSQApW zr@Q|ERTVv<@OF--n(xJfA$YgVI0Q%NvHqEd@@M^1DeoLRoOn*ImsjF_$=$CX(Pli= z!n%lVq)6@v{Z|F-_k~e!0Hpe~Sm)Ix{X{OyTZidiN~2#wk&s8^3zL=@qc;_2TO9IA z3QWEm#xy)d&Sr~J%8qVY+rs1tX&II0zRxu6)A0@_!5vJi7wxk20dZ@S*=x;?Fq@2e zHsPC`ZIse)2@)_iL>M3Q3MTF_F0~n%9P)dRZi#{Lfj+86!@8VI8~Uh`On}ZUIZR;M z{nj3-AF4t20SRVcWDzQ7GCs;fz7s!Wbr`+-r2);R{)HnYrz2~rZ>`hnl1U~CQA=@% ziNswgtWo@fR|B&;?fiY>XW~eNPz~!WTZi#`XwSK?iB?RJxT!+($ZAT zh#^akCct(G483#HBFbbOpvkt%FAxljga%AB&F8Y7sgc<%T$?5c>AuJUNjD}1?tpJF zmdA88(~}4WUQET$bCh)+=2VE1C($C|u`+}yvMm-sfj9do>dwUk$)5;mM&sEStdF~!Hh~8Ab{eD9YPc+K#>M6ou~a0BG<&HZjmO~?w|oB zrfeq3mWekaJ0qw#8Gr?&x*B84-~~gHa_?*1}Q*0etoeNd{!!bwO9i z7{URO5ZJ*Wpf)UQf0|7_j76}aMhOQg_!sVbqGCn9xk`Q*BIk4i!I&V8lLj3b?{u@? z%BCk`1RxZM0oEO%2Jv{CDmR!Q_6iQ*NWM^|iwL|R5(U9OAdnK#0(+ue6CMy0=`$ZR zNhS=yDtc^SiR`EV>{$Rb3Arh>&8A2|yG{ZDz3sA;TP?UCdSy(@OnlK69glPg1PLA# zDBIH_P2%@RTnBYP*;X$&OCn-W0JMM;HUc;9h!~MFm^S#nh*3QP12o==i&; zwZFNnI)U@JUarw{0V{&%9vS;fgw$h1)TK2Wf2#FqGWuB)eKX6d#p+{d@z|e|0=kSW zd1B#r-R1WL7@P2R6>tI!IrBkzt@>U5R6$XXm$)U$S zxII|)xgp!L+_gMIPftwuy1gd1q@Ri6>&1ADL0eT-?U-|kQ0+xW0Mk+A3`tl?_;*)L zq*xnvW2x18=_;e1;2gtKglOMSO--Kh&XV_E?2S(}@jA|vsd)6a=(q-s$j<9?!HvDm za%oxeCABkiQ^a*TfPM8>x_gzUH7JiU+6Ii;rk)l{vGU%|$Kn5ULAsr?pPw1Ei8Zl^K@_$IQbAQ4P~KSh=`a!AH*qS@k{Vzd9PjTFp z1VLX}1-2<4CpU6zkO7s+a6T)k;QGIRqb&}IA;Limi)@2s+jw6nYPgRGX0uOGolnCJ zzUvIKgk$@iGdwYymBX}i{3qHIT<)GDr|6&JrGfHYzlCxBAHA&%^4=C8r|!trhk z&OA?txHa{TqLBUyn|c-9xKBRt{X<$cVxXfu1Dg}&Z`1Q8zXpu`C;2%pd1qHI)wqFwMac5=`uJ4?Kfpglqt0Ld z01oN|OaMyH%CGmF4^BnQMZ2i~0JZ+gzqjyRL9k(mT^;FF& z^%(0pt|5CbAX|d6pH#z*qZcd8x!XthK4R9>1Ed$10pQ(sbW^O;fyUQD@kU1iJfX)a z&t$-C71cQi=J_qea}JEKTseD|qyeR?)hFOM^j;Uqb(u$)v`%>qZ@d7LfwJ|EY}D}z zJSabduvUACYvH|L3~acbLJnD?j^~e+Vv&Q{)4I8MjKz2UyRNrKj{YBragL@v{6@3Q zI!9nGEVzyj#<<4`;Z;o?Is7A@L8x2&N6PHnm7;w{==D0jqwhoN(=a{~5A;%a)+Z^; z+}n>QsG}I2mz8u*;rtqn7q%WpQMTsty8i$Ldu#he;x7(>)(||z1>PF~i`v(P=6tv{ znx1IlTCN{blO@g$H3Whuu=HMhKUVoagKlr7!6VcG>GVY7zE@qTOOH4S)@j6S%6M3t zrQ^gfdF`75gXMy%Rgvt6zisNmn`v(w>xQcu0&&yBh% zwRKNunoWL}hf@4Tx!Q^)&>H53!TBxvd}-xeo_$2x#`rqd2_J^w{6f24(rPuW1RIG4 z%dFHgW^%b!RdqfG(X~p&(dZ#@FUh+49C4=E^Vuh9B6pcw_ao5!M>6Qy6Amu)i>?KC ze`OkRSC2laAK6nsDYC~=Ex6>&w6WclBiSk0q7A#@52zT@Oh)Ax$H{cxXk5YjJ4AH4 zcmDvqRcQo+`9k@ec-~p4qv^8bSmNZ)i_iRN+*^xOYY*;d{0tNKU4MgXU&FYbpH#!~ zQ+Rc^8;{j&@ckW4RZn;zoZfPrCE*zl^EB8F>xy++!)6=n+vXs?5m2MPYQO4&zI@VyY!XZ_<`xs*CgSN+rr>w z#PQ^DJNWXfnD?XS?l$hOC8~FNjz4wA$Xnb=-CCNCn-W%n`ix&LS5pZK*BIHP1B8MA@AY0&&S28!-WFYAec3-F3)U$Yd!DF?7z>4|cL+1Trd27U zjp7^whHLu26QiQ%MnhozLhE|}0B1ZSP}dzWtEYb5FX|scySM=?s3vOo}r)NbRVHzYNsx7N>zQ^v{m|s!Lq)JAQJ>B_beg^8NX%h zhm*?{^(#D+@wl7ggTOSLsm1j&Dd`^H^VxO^oSZmsENiv8=FX%rbcvplPRrN5(`I%H zi02L+TZwQQ+FdL))d(hhEB!`ul23(X{+|d%waY$tBKAhhnd6+lui)(t)=@2CJt5-a zdoCE|cOxjxTwR$|4xaAe%~b&y^=7G4?@5QG!%F zTq>JgESU2RuKt=8k4&5gY*&L{r}d$_ zJ)@(b)OvH;`e&r`!%MggcqBQu3&X3u#F-@Bd#5&@t_fTRM1|osZ&CBzXz_f;M$abx zq)T#Aco&4(g)Z#6=OlX+T@A1)gdhp>gac$xlmbnr9p-X?FLc1X$`u~v$hC!TT+%yc zv!(}vx%#qN;UeL6&u4?DmbA?`$@{LwP(vN*IbSEA`?6n?>oI?Ae+NzEK;gtVqn#(M z;!mRPtv$@j>HLbzYTpwzoELEh(Ym?a&6f`l0XPO`%5q?An3EevWbOPgdzGNtg*P{! zl0&}e%Z!s9lJt}VBE~N%UAIO>lPwK!KXd}QHrpr`o0LrF9#I!ENkAY;AF2T*q|ByF z0fY!3{{SQa1Opo+(Ik_P=7D{XL;>Xh6MJC;@|fKdAonR)#gGAyC&y%D-wBV`3P$Kb zw-zQafs!%`Sd!wLz%g^O0h5pp6oX^jBuBz;bfN(+!O8-Ou`vZ8XXRuA^zx9s+!X_! zt>Hf5L4jZ|KUB!QUIkO?4nN!OS^RN8O=GuaUe#Pvahqb7cR)3LRX zZ0H`IsEP~`kW~)A$xuc+LToX3lf0t?!6GfVO|X2FhD^k#fC)I<1po|}cHg=L6Kf2q zAauG7&fSxbjt&0+ngXT0P(eG`BE;^QAT-JPWljkbB2+*mh-eNsgu#K@0%G?m83hVd zUB+fNK?K@B^+S4bV=(0YF|YPfC;}Um41ic*k=-*LLO!Vu_l%|^G9;i8BKZfv zRREvnrH3{hm0TUY5Cn)f&hUZ=8+yV3kVJhDM}GK34<_ec4tRePd+9g*-mk>N{Fhpb zFKXlbE}s+7K9lU>b`g+QkLz@=(&{QvtkTyp(FJ#OdXG{R`$rF1r}X8ybj?G(kqU^- zlG@ALXNrU--~=>Y>YIaWq($sf#R5vB=#*?wP`5&$Apt=|k13`-69HQ-0~|$_%w1!` zpibi`O``{>z)kq?;U)=kq9AUBq6Ctd1vW+HFb>vB6eBw+BdD2H^8k&~7=gN2AT)?T zBrKm;Po~CD5DfNDr)1-@a3N4Z2qIG>;ulmg;Xy}eK@hE#nGP$GpxCBR7s`YjG( z(K@dbuU|?VT8&2+htd*0eU}XodoJ(n&ZQy5H5A__qv^vz!5jS7lPXwmEKgP^>eeY7 z&$C?~qfNu>Ir-Tf`>LSzjXj@aJsj&O;5St4rp{5uMN%@X`9U33(ftgYKyfLXiRjs zsDb-ZMLrp&c;)N4~Ltxc{5&_spTIIkq|-D^o>PM)v# znU9!Vq+iuDJ6&>NmT-3#b!UnbRU~;o666hi0_SNe)2_g5KPfA%YPfE%Na(MpsKPsp zFMa||{UR0`x@uMJR-0T7K^b1$eoAYJt2|jeZaICt9tWk?YBY5PT{TzIcr(<)1$Mp_ z&%8rU@ZDP(si(aBF8YPs_@60o?QdE4EvEDQOtsff;+%!7qFn7AR@QFJA{e6azQ}7S+SY+|BlDtgW4KRQGu+b zO1nY)z;wIpyLSoaE*Y+XYW^Oi{#uqFTrUPqCR}}^-;Y;|Crs?*d?XI(woDLiu+pzi zyBkuQ!`S>erb5U}0k!bF)Or^s3=%}&3!?LlcImmJhCZq3V?dHlB(CrX83dBLKRs#N zSB`L#RlQW+{)Y(iy&78eDVjAm>F{z~&&BwCUI(eB&1DC?w!yBFS0Bp!&BF9N4^Kx^ zsB0e41OQ6rc!vVe4i{IWOGT~?CR)KOt@39taLsoMHFY|1Qm*|*JX4qxGI z{{ZBu5B&jQyH35Cvu=0pj;&MLK9&e>ilP4iGlVTYZ$7%dnx#5=R*t5TE_M&ecY(pU za0WD5X&d{nm0k^@bvJ*y(QU2p1y)Tud_|bc9(K8r)A=8d=`@@R`x`>y`( zF{9RUOEi@=CZ4K^1U4kQunV8A#PTGU$D)T2YTeZvd{$nN z+5qc76u(W;e$Syvw`u4EV$Hbw61<<2G)>oWcD|)yP4ryajbXo370dGv8)G@fi>cRn z(a@;Qu7?;g`H1}&n^A$zUYuWCp1c{huToy;sPQVMmk!iaX^xt1ApDn3_GeC6udQHT zQr|E2U5k$D8&j6GHCZtFGSlGy0HWi)o>DE~-Dcs=C+b&*7aTIbli2yo6Sa(QVX|U+ zZ*M6`F0sXvCR=Y+}2=PLZtIR->-tD%wv^qQ*qZ`c$bOGuR8SPxeEm4WX>m5t0}@?!3TTC3|19 zZ86hw%_89i?l1W-2a%TCHS%;kbT2LZ9QPUGOyS%eNl= z%jvF{W=v;@?~+zrS6YrJW1kl`8-3A_?Y25#YogKN~koS zI|GCDh3y*WHm3~K5J7Ldb;qGzAI8ZZV%>%w^nv&@=bUhCcIU;wzjPG4F_Z^lNkws}{z2&c!iRRkA6 zGw4^UX0N8^)IC#x7eoWfR z8@L}uQzk?qqZ4J}J%s}!$Lf%XnHiW;EPMp)HxPTE0dHAOZE!tOIXAzmJ$68JFKcgT z;Cgls2nm$8RLEjdOdyF+oCqtlc~C6nQV*g~$UX+%R8bwfBP=@DX^K_vlu9?C}Wt01HezDkflgm+l?%C?&klr0R2Ku7`t zV|yq$0lJdg1wv96wiN&q+=)x|RTfaBxJU{D$tiS%D7S!?7D3=yL9vp6k#rDKC$f|= zEw;*~EW)9@p-^svlpsaaC|~4)i~Nv)?jFxH6m|NIO)BtO<`%&n*9XizGN%aQwP-vL z0hSTC*>-PbP9uuciGtXk%d&e-;9rg5{{W7l*{h}>6|&XLdXG<3;QD7yI5+9kmuTae z$NvCnay5T>4%AX;rt>gK?!3|0C1j(it3j1%w2;TxwsNrUSF;WUiORjt9(>-aSK29< z!cMq?h8vWhb?7|98}3t^scNj1NWg*uJOs8+7w&-pO}E(>-2p>k5LR0hmhnos`@gU(qsR*Tv9)E)Q1tK?7{1f#{U{MhS>OQ2zi@ zl+4700!WDTy1}Z{Gfhail3>l+@|v#Oa61V|vM)K_Mni|W-S ztZ2FHlq}6A{(nTU1=cz>n^Kz|#|JgdmY(X(+B@g|sY1qXBV@V;qmMEK9s42ynFa}qtYyKmfHu09>M4u+#(;mkKwhn3R5* zWWEXNN95!O!z6u@w23%eZ|$uJnXgZwh* zp><9X%vw4+Kr7YwyIhdDZX3pQ+(xUZ>H2{eCM>X)3CFZ$4Dgps<-aI5livt!-6Jt` z+tDErBu3doY)(iyT8*GVI~nergPHVAra?Oc^g#dv2m`Q}TGEMwdF*EDS}o^wO)w0D zVucyWbYHG`ONsH_BYnieU^&9V$WWhz zmhNsyRM@!r1fYOrvY8f`#gr)|^*BytTSbU4m853dq`{Id6$LbOfE)Ut3j-3Xcy)&8 zw2&sn#1OdB`V7ezUyH~2wJ5{ZgQ#Pkd3)Q9Erlhz$+NT|j zGoz7|fL7rSDGw{VX9|dfMU^I&D1`UIpd_UV*r7rIvT%StiddmS0%T?r7)umNEUFNe zS{)&BspiExSeQxUDP*ErCTG!Ay%Pceh#LC69SvO*PfTu0LrXoc;mlNu`j}+yeC&Ojcbk21@@3Q0Uy*H-RaO%%JYIN`Lde02zP8Y;! zG->s0H4VBS@VI=6;yLt|*WncbKMi=Fm|jRFrqgWrTW#W6sHEDJpHY;Z)W*D$0rXf$ z$EZtmUj}c;Z;sinPj=PIv@e5l*j;zo@eR=GSnKpxb8xth7wraxW-^x%pz2PDFJ-~` zEw5*~%2n&}AxX{YbzgYa6LJrQ0@?6{I#(edcf>fgCrzr%gSyoAlcyE zY;wT&JmbZvhkPAG`mEm2Y4tycRcuRY$ManT_UBUkfA~C3Dp(pkuUA0n>$;f+-PQq# zU5}jf-s6hBz(Z<7n;t^ztGSAM;F-Y94U=exjmKmjq5*B8Q^&$i=~1X@mqED;CSw!3 z`zoTx@f}~iZ|?;!gpskz%+6KQ*XIh_Cpqt+#{0(~U*xs@n(OD7YPz$4HE9<1oI><{ zKM2#&;&nCbFEwfibek2()aH1y%bwBO(&LU?QT#KH=SThrm7PkF>14K?4&A=XKO#Wo z%_su*KC6!QlIIQwO@at@NIlFhW0fiUo(ZL-M0Bt(6u+^5EcM6x-@-YfFlQ-=7J#P5 zXgCO&-FXq}Dg;07ASh^j@{c^ey6CD^sI! z{?U-%^8;nzTIv-vdg_#_0>`n%qUgEr0wfvPdzd49`CK0*{nNkW7wt37 zy{@v<05rT_<)X~mDDx<&8Zi;+FeVS zH)$WD@6|Ylm7kwcL~nPCt|yCgR}JCp0M!*qG5fp1^kU7L9AmS~mlhfGIy_&PxI_3i z5~-!COT%#P;c-JA7is6dFH4MZPklwbEDa4FS62cT(O{INjXCyw_Grd4YCQ}1ysDgD z5&-XnLfmTTmqGzlS|v|R6bY2v! zOaw=TK#YtesU#FIcH6q9xCoUv1t?G%I)&618San;5U44vE}oD~W)mVdE12azEl-5; zAA6{vD^Yt(9>To~h3PmCGt;OjX&XkPF7D^~FD`vYqW-Ay@_O)T)@8%w@_p=?HeQ{? z{hiYibcNo4&+59qzms@|pQzHMQlSPTrV7U%w-o*8v(e>;vDQ1FEv-)u)#;o?Z9P_z z-GyqI8!u9le51`Mwb}tNocbeTko8u~0A}eN6kM3f2!RMwzWX@fI&LFIwxduwx=aBQ zxPNFGDjFU%>RNFOiNq=89%-$>T;{f$YEgNT)1Q%AyvxPEZt+8@eKAX_(Krjk40#rz z&HbmobHwl{uejij>E|n#(C~+A3)!ZJy{s=c*e*J*o%E?Pqr@@u1$z|J;PALKtj5!2 zKpmFvFVXx*5u->^ZBpl1gup%*rs?^0m+Ro#4ym~>Hd-_4V};a@P7N%wt4#7=l5l$! z>AY)#8XP-R=J1Up2fHLbnUdcttZ?Ua^3J2KjW@HZ1LEx^V+~TAcSU>Al(dqI+S%3- z5*K>m94zSc+IMSsbvpDlKo-2dI!}|du3L(5R=yPqSW8(L%BZVH zCmXY_`#sgv(s43br>S44M@=}NRq1v3rlP2IHt@R6W27H=;3O5o`#Ry8LBlC)TF^BP z>T8e9cTxt;ye?L=EM=AP(bm#plrbdP;9SkaYUp^4PkBq-vE;dAvQO4F`^r!rkAZ1DQObaO>Ov?41GTVZN5KdILbm0KW z7f2aLN+D2+l-fl3Q4uhJ6e>Nxkm|Snn$d?i2oC*MV0CI`rXC0qyu+8cGwSdfddG1J zl<66e+%o&FbaLz6r8OJGwGL@)$Z&=8d9cUSZ+E%$m~zY0O1+HSgHxur6Qms_wQjqB zJNL@--)GtfQsO$w?yT|~@I?M&JFh`(0!(8oR;eXE4cd0xIUI-+BeGL_gcBpNiBjSR z@+;17D)v3nu*~|RU|wS(Nj=P4DuWigQq467)p__^@>n!nPfe_*9Y(8Um;mKR8K5`N6-3eH~l6>a>8z6P=cBSK{tx8sb__X)GuAkn^~)A4QC`vsZq_T8KKYbGo_U zNpZ5!t(Z zm3Y6n=1Mx6wiO3OLH+67de08kJ5#3>TmWmX(K{}7yAy^>`8paryWw93*fz2HBI0~3 zV8mc6_x>L@wKsFNR6$n&nBSn59Zg*LvM0kOFo*>vV>MGl=#nrZ4P4|e9w+Te5Z zT`U;);c;H)gDy?EQ)jF{Q%;_r-j@K*hM0#;d|8F9 z$=pj-QkUR0CTh`i5>8sYYZbxCdmgV>>e_bl;{j^xDvDY<&wTWTl4G*YTnl!9v^bYd zeI0s#z*s|^77?rD&QFGQE(6V;>s~avx}92gABFBW9;>}E;q49)1V|%w;jX1lp1!RL zj%Y0=9X3BT=^T~C{{R`n#VU^mwG+|gjf(f`w6Tm-;CQsUhbG}8o#NWZ=(LWjPLryD zF3>Q%uaEJwuhjKarvu1{UaiD+RP?$!m308RlzhVS?rzdj6-J{*@cIw97%FHs?)sPe z8r|D?X4fO?3pEu-S?D5d-D-2Q-CI)Hh0Sn_kRaQ-;`l9A($qVqp{CG?ia;FbXtubpp!6|siUoLx_7#GmaxHa?F)d@wbfiH z(*(GiE$t?m^fk<)Q3E;muk4&n8+6e|&0mJKu8!r?3qa%v}O=1`B+bq-^w9mVUunQ;Zu zB;gzrTIxJbm0q&a4pxS~psT2;_RJF^Rtj(Fs0hekK(XFEui)Uktz_JL%@;O@2L^hW z+GWK0-dC18h*W0~dy9|4X5Ooo;C#tl`ZCQ)27qCvx{j`=`^7^^#EHmU?Jk+dQjCs< zqf(@z;&Z&kRpVIQLmwnW5!?mYIY*7Uyo#?bsCFyPUtX<87gThUo8@nCT|?;WXt)wS zF@xo9%cf5iKVx1UQ&}(M_R3|>Jx(M^POT-&t2jh3uYV~+j+k(EeLMzz$9q;7L_^PDOQA^*{BPX_0{Ur+R zMBK;kszzP)N4=@MkeAgsk-D^rV)u{UP%1tM2#+bilXRhC>waY}rxA4a?3l3G0WERH z%ei|$a5|dJGl05q{KanvTl~Vv8;ZUeT!5}vli>r|1 z1Q|DlBH6eI3IIt0;!q4t&(9?za!vw$GuVJ2c|b5sjjxnE+F+ZZvH^+4AvirI{uC(s zqyTc6aRiC^B-`fDl#z>_f(jnQs%^an64=PjHchh=a6eT_hQdL$lafi1gs--COaf;4 zP^e&E5>69nnJEe0O1t#Cx`hUQSw+dPM`^~&;@0}1NN@23T0u5e0UcNLvIIz#ETGoF zx7Bf6UyIVw5XOG?yR0d%$7QlHOX`t> zcf?IzAHyr^YyLBdJLAh~?A6!(qG}r2^fa{01~;gI=L^u<$QHYBypx=(n%sL4s3Rt2eDS>46grQMDMUuB=SS2`_K|^7Xl;v0Oq%SHGh6o`L zm=-Z~;!0VFyXF)`zDmi4n7KySxJwi+n?M%qj*u`F40%9qN}y4?#(y!Dl-No7EHfx5 ztV%#)Q^egb3JM8}Lc3VX$8ox1=PHAi;G9~w3$0SE2Xwv7=?l?$dz$pzNYm5Q4rZav z0L}^D>b#T0t-c>!)HPJz(nEuV!G-0|r-nq|x$4vECyCdw?#(~?yp#j+0yDDL(N#5c zwCYdhXm{CX2G=Ws)ib*nYRUsM`k)_*+bL{Z18*sZ2(zX(N+|lFxg-;ioWT1iYlM6! z89;cQgk?$vcFe{RC$U%`s-VJ4sBNrrv$18h|6|AUT z08=*~Md6i6FLYk()w#!wXrI6}G_?AfH7dLYhPA+)-FY*d1FlzN$3ey|vybFwxuk?} zpl8aW{{V&*h?UYgi1hyeWtwu$4yLv`+#B>=>RqfJvAkhof%K3tg_Q9IggMkr%Rv%Ss9+AN*B-Fe%+q5{JjSa#CvEDrXCS09FM zW@TxPi#PmD->kyD&r2kOdq(9j=^{<{?Um-k+9To)nWo*$tS8zoqTp$1_>(ZN=yN~u zG5u~IlhfR8E|zR>*?Cn@Xgop9wJIVE++}OOpE$83gFtxqYc=EZGZ(MKz0X|+27l2v z9mT@&%DnT&pFK6{vVXfw1*-0E<76JKbxZaDeRt*qVg*Ie~M}+-s`Kl5g(l4ah*<*dX3iDc*Xv2{*6=eU-3u0GnhDA zhr`4)$8XLRw~BD;lhduzpZ?%0!0vA)9Zv@(XZK8=j{#B*IX$tykt}JnmmkfN@3&OdViSXSoxYBAmDak*S6MrR76XTpmh%?>m zYt?&2`dx*VEk0~h;#?SI&xa&F-bvJOZEYHDce@oD;ULp+cj&ZfzNVh1RX0AJMx3<4 z3Tf&p(x}(ds9NTk1RO3`gX%POH9D7ZO+8&#y>G+r{{S#_<$IfHJ=~rcq~FuQ%J5Eg z;u;r$sd?1Wu<3EQ^eeh>-g)6#pc`H8pz#2Tg5Oo;y6rdbTGQra{B0C>_*=(UX+ z%@S$U1HVf0<9~fgNl-q8 zT8wbP4k2?a=N>RAmYqpHpik9!<>P1mEcL_5L9eM%+;kI5+Ag)f-(hxgxB2{$pwmv( zgMkar_%|^>Ps}aiTG!RA=ppwKWJ2s*#msHud?bo`3hZDZ&8XraEV5vl$rnQwq7sCa zoHspbD$}p0)IHM5%#b@qLh6wcy>EzUDRE9wZC6tUvndC(ocAlqo;qAdYcFnxCg?c( zqo1wCwtK!w%SeruHpJq~Aek^0H+(K$!^VzVmZ{bpb4qCk2&gVL3*Kq}0Aw;o7f1Ga zOG~NYbn5iC-!SyPJy&>u+g*JAyC(V7bbS_w7R-0@bnj`;14pE2FiYflT&E7>6e(!w z4{@n5!HR3Idr5eHzlYHW@?5~~S9Z}ghe=8p0dqvi@U_a87}=aH<&_$4<5eI1hYZ!f zd&5G;{wc(=&Kf|RKAbib1oSUPU6D#LkaW?Wt4Ta8zGgL(mJq3 zyR8}HzAh=#JsNpzmgcPW{&M2fw7enosa9vcta=*<19G1!ehY_i%6)o@LZiMXhdc=I zyn(FO>jCMfUa)TPOekd?Ti`aGLVEyLgY+wA*CV0&=eu^(-79k!3#8N4t)p#&mm2PO z;Y@Rfye>Wh@&lvRfa3Z!fC5P%g{1Q7f=r}*Za4l`CFG{R#*b$l^TObg_vY4Kch0(< z2EU3OUk-U9sQB7O9sa9`95Y|i)A(xeM1#<7q1qi?Ho5gERci%_Erq{NrpJa`qa)9# z)a1<#vWbD%QQQKp>OO0rbCJ$+X17nF<8-TP-_b~A(JR%P&U_jK>aF3qULmKWR=dk+ z({tU~qDt9k4A&4y($*utL0%0`mmXPel&I)wwOKJoY*n4t+E*LUaXMOWz}6K@XQ~83 z<+yh}@a-QD(a|ES-Ac7xo50b_K~4z{l=QB$M~HKjnsQftsm~%I&3qS66Mkz!1$Xf8n4mU6u^?= z+Xb8bn&QoMHor+#zVq_UrC_w0X!rjBvp1{MOQd!hp3yj=9|@$#cMJN2y_|)9JH~5i%b!xeyF1`Q z;p*`XL)=U2RB`g+R>rG^aV;L5wY5}gGLaS}?6}Ik*P|Xhf8vimOt}|q&G_1*_}%qb z-Cgx3sm>$SU^1I>R>cI3PI7&*mmiW-^+B*o7F1zj)B!58B}`uGnT1FKVJW(}Q@KJ5 ztFST_6I)CHE5suuFPac-$CO0f5tNXf z8K`P1&@MD;IfRaqT4G0K4s)E)(&=ctO2&aIQI(l!)O8w-sZGVM20;t4>AA;>P}4Gq zts%HEb=9Qd0LsF6VUzDxXAHB)_OrBV`NN88sJ@L#{Z!ryNa+|{K;jjKk=kyr-8sR< zvA9|R0#t?=K~zy*dA`}sGnsgsXflY^RQF78NNk87B!@Ba5Z5ufnvG+G5Dk|J2-?be z82h9>dG%*I!nv1U!x-jis+O?qxtc!Ec%xYd-MTj+bc@|kSkFs}ZsikXHCbY*NbmZN zeRivcRnu3~x2^0fE@?ki(4TTj?tCAUX>0j#@fT`pHnD4*)&L^Qrc@m-Be7WNL3o zm7FHrnl(!rQB4?Ix<6DjSfC7*y&iTyl326F}{`h1;F)VRhidmg39)#=gD>#Mx{KJsLCUAB#8Ri#d&46(zgIe5Pe z<4>iat3{;Cnp$Mog1twR>l*wEO81ZtOhE9tx~vWj$(=1Ob&*mzuAl|Y`z{Nac%@Df zC~Dfyx*c5=2aoEu^_s%%RXrUC4|wA*KiwWy9%s`xQNT4cV(~p)ysthql#-W6qHXPN zCN3ey*mw)|npa434?#N^TbvVC-De2XS80;!W2<}M{nwV$;y;1l{6mIUlO!5|-%OZ4U66*rR}EWKH@yD_;hlgo!uzG^J&e0M{s)o7}nCZJQQ1huZiyiUu?xYoJ) z#(}G8ZmN&M`Q3XJX8Y|csS;X9vFe59T;0OyJ=Lo+tzX12eoBmj;oyrEbQ4NdBOPQU z<8eBUrOa^ar0$o05S7W+;}vx;)9Oi$RW^IK)Cco{f_$#N>o|!kB{!Ci#w@#%#+o?L z%G2QW?oi_2iqN&yOt=gEQ|Fq4_Dx=*<`N~YkA$Anvfw!$xTnE&uIp#L4TdzEtd)4P z_?ItgX;=82Omv&waGnjhn@fbw%FLyTpLBW6NiHOrN|`f>Sv}ExZiWI$u<}YYnnE9qV~N7^ps#nz%7lJ2}6WX z)bM>RJw-mJ(7PYFTl&psxTe~Aan)7A!~4EU;OcX%)n3PUO^4A<{F!w+wu{-wPz9{n+>OOyp1Kn>PFjL@Pc3r-6|F7 z*I{)h2ec9-cU*TE;w_;U3&TuE#^#>ALo5;SWvYeV$CSlA4k|evM{n=+mV7 zqoJduy~az{^V~%_qfg#8BsIH*)3_#vwM}&)sU*cP;@P;IF5=JyHq$a7Shup|Wsb+g zI(X#dt)4y3v?x;I@2RF?rB0>#4#jcY8;RB7+(MOl1j|jwb=y6pXgX`ttj7{axX+w{jBcpL+ zi9DwG-?O6!enf=MqJZ1IQyegi_JQL%`ip6-qvwCnvqN10o1_&jn^EB zuvs`J?UFKSQQ7pI(W}$xg&Iv@1V>a{txZ)Lx~gYX994$E|= zqO9}A4o-@#q_3sXQfUtAsVCimfVi0~c?UbMOVn1=y0hqMX*Q;+vut8|8b#MY;~Fo* z>YT-E4myhvp2w7oGPDR6QfLEI#(PiJ%Od|b6V}l z%H{Y~2D?<>jEZIfI9oEhi{!%(GDoX7SmM^{^u#!T0eJka{{U5%n;S@nRew|8+^#fL zr^B=jb4xmK(8FN5_b~C=)cB(*kqvA`=jON(!ty$a+?Hs;TRh?wG{A%g?0_yp`g7&V z4icYLl#v^xfWDy!>hPjOrqF<{te`$URHhm?KpjXf%6%YtKxmtw6HJ`0M}=`+M-8a= zY5GBMgCbWP8*+h(m5idKshPpJyGLal-^3a$=1%_r3eQiSwXG5EsS)UZs^R!Xj-IDa ztaI8)r%$P-a8z&|J2f0ql`5?3VK74TJUDr^(dv#|+*9o4&pPV}{=%41{@H8Hma>=~ zfL)LMo#DlyuA0xLvOsyEb43gTSZ^-lGTbzzck2h=F@h)Hn z$Ke=Whoq=qr(=!5Xe-6^fV)#kqozxQO~UmJB~B?$kPe|vplASem|FFiV-&WkHt6$8 zSG$v)A1{(%4$<9kI*vMYL;d$o`XHF<7YRF=xNBP?zgUaFUKNIIT1T_hg6*9Av|QSD zgxW?)h!|Z{{jRKauS zvejmyo1O=}VJERx{Y4hElUA4;o}jhUGfdbg;Xt#-I@ryCnUK zx<4l-41hMy6?cJYy5Qf;oGE~Ts%y^uAds*-n|O0?)brp4eHr`{)q?js7-*3tS5Lw~ zkbADP{@C!#UE{rye>!l{X8ZSilhDck02UT#e4VBQLHQ>ZgB_PuXF2EzGAc)+$^O}J z><@a;=_+~|7xwm4rL;MxjNP0lVqncX)lIN+34=7{pe@R`r>t{G2BPy5d|E;*ISK28{IyVt}ldy-7IY-C|3la0~Sjq5d|GK!pYK1$w~-I8%%I6 zn?_TBj+~HTQc%bd0Ht6P>5CvTLKA2LE`Z@;5z)3GE`ta~5bKFZoGKL3=)ZIn0l*0E zm~bA6bc5=E%M>LE?v(~2#_5*aqY9BA>VXPKKP6CM4Z0SH^tu`)WDT-yZc@x>$8^CU z&gz40D>WS@YUU|Yd%YS;IVIUtZ=;>jbAJ%h>FLp?=0h6-TPZ)Bc&mvbu@if2xW{m9 zdt21)HCDH|X$t7@9erA&n`k?ziGyn|GlmY`9+f=FQnPK`+r@4_5bq^pJk!NabuTMo zpC|EGAM9h)t*U&F#2iOcsk79TFHF7+t5E(A#mG%06dfN2cav~-Ova2o#tKi4e&fRi#XX+}{{M8&s zlPe!l*sk{9XSH|MFi4T`6`G&3#)JFKX~*!={{U24yep<2mow&%Js_RsBFlMOn#u!9 zs;Nfjp~OkuYp+~dYSH47Y11(g=#yJMRXZz^<-Id?JY!2u?Ur?d;oJn2wyO|Zog8~< zJ;Zdhkb4E3aQ#u3)7Ad~fUiZRq@vCXP3@%6MyPFYI+t;7o|pF?CPga#jk9P#WK5p zEdbW*7)%!G9xdxDn3lnlZPpXk3Y#-e=K8w$Nr~~^#gxrS2 zt$J*;mTHqWYB54MZ6loaZK9!5fHte>Q*+Hn4zj>ZS#f^VX|z?*9+-Dag@)TMZ`rXw zumCf9j)C-CKebQoG-F`beD0X!-l&-(mX_%Awz1D}3~4TjfV-!%&_8YJT5@#e$J8#L zM!iivVN#3BUfTi}X!dCH{?UOJbvH`r>TlAQ@N@LF>Z8{>8@Lf2l>Q!rnp*m7Eg}dY z5VC{uKtDtQb7L4^Il26wMM&$MQxaUy#zQjaZb>*$83Pfy;mKZS7hDO95J%B*u8 z*oElD9BNI&vqouUlv2sj7L^qSL78ckc7NdD}Or-v927p-v4 zBTHLDsg4J@2MfdbYO^VEeLuYuNzV;%VElP-9Nb0eQZQSNlVq^v~6_(}_JUv>3AVwh&qH z-FbBp+Ze_C9=$VCa*{F&8T!Hlz7cp*Ep!1Q4Rwr~L`v|whvPO2v*ROClQ`Z|UsO?z*7AntQ7F8X)j3pm-b~^2k1g>X zYuXK7k{Lag&m7e^UBtBdJ{)?%qRMZBGZ%%aq~gDZ<%)VO8w2aTfYf-nXg|$!9FxNT z00qQa`oKD)^x@)6^pby7$H?i*a{mBFYYMo=5&r;ZYT%qMpAX^UfNT;a{!f+H_#Fy= zwP-c%6Z_L0gu?Eo%{RbZKZMWiT{(+5)ojn1`L6_K-P!Gw5@{oy<1{Ib6RRy?meFt) zUJCg&zHq*P;@9E2fY9fYOxd}@@GAcR4z1C%mqW(8Qam0-Q%v`c1{nSmr7rlurZbxb z#QQ=GZ!Oh;I*XeTg_nYBwF89dg)I$d9)Z$H5LXw@`n_ZL4MtbdicBsCth^tx@ZyZU zb^M;pt$Hu`Jff`m!p5>xvBJlA^j}Jknth$8*|_TFS^?jbHN?-N_Fr{OknWHO-WQL1 zHKAUo9CP&Lq3ovVE)pQGQt9GQBBc*M2l}oTk>@QP?;XY~I&ZbwW87#e9Lt3FU1L%O zEms41>4Qmzd`jp2r;S+CX0Z&Q8a zB>2Ewd!woBa`hMuBQ3ZY8C(|)Xa4Kr0zW-Rfh(S$+`%{L?6`go-mN8SL`#dz{MIp% zl#$js(z^#JX{oe;=QuR{rFnf{%)6gBYRBO8npQePK_-1l>2D*bub|OKZZm=gK(sf_>z)Nr?|^zQn$o^78_<4xF7 zE~uromPP`0d@5v0k|tHs7MWCq5dl_{O#NP=v}s3M@itiAZ)~le4Omd(G-^7{4+Ykn zN|S9xv}KJZ>6!S~2GwwP)2FO!L#hs;27arIh+XsAPP&f}{2TPuTTzW^76!|rEm$V< zK}ublbK_X&wmlPj*(p^wQ_{B@PE&+%ZC4a!Q>18drX=+kvgP!AkHxiASyq^*(D5Q2 zC34=&I$Z5_HxbqD$qUi>b{)d0G#|_Gu2!d8JX3K;TT7$Ik_t@m?O!Kx9VJ#$s@8`* z!*Bf81Fq85(Q2wtuHKrAFyL3a^BX{RfVfB+fsaMyzR`5OJa18`z*+uZ9{9dKL3mzydj6W|_Qy{jL)2$Pm0`%G)kB}jFHJPV{CllSG z!3@@xO_TatAJjQ#MnhXD*4@~*5P(7JU>p- zVn_xSPsrp-=>_Alw?~6pgyy|}d#$&NBzws>;sp^kEo!a8>4Es$nYXqNy4lD+4E z=Q)3t^_+5>>S+rD7-7Z67bT?ReQu*wS59hEYpEE0_g$OWLj!c0uGw? z)&_p7h~rn*Xh0MDz<=be3&`a+%g5qK^6h6L>$JKT>Z(H-*$<3>EFX{{XHU zUI|v6qNsqpOx@)9T`d-A=8KfhZnF$9$taw+3E;IjhKpILYx-HIY@a8x$-}rS^*R^o zi^FNL;h#94Me6x95KB80>$bZ-A|@x z9XwXs_eLHI%5LJt<&}d2b|GZd@=a|vq)~Nd{6a&rxt>MUI+qZuPOH8GB6eM)hJ%==vHkig{LBH;5!wwHm5E9ESPlItLjGW z4IMre%QbZ2z|w6a((||>czt_Ue`#LD&YGg$5lcx-5mvDP!TPR^%v>K!qu^RiOB(OQ zRdMPwXiW}Hw&mQJj=CF?+tN7B8CkS+<-YJgulPF^r^G4M6bSEsja7|1*Pt1%4KvmxXRJsQcg6@5eA&Z5MopSsqTVe;Xuw-U~6?<)@ldui~RHD2qMbzaMj z((6vAh`qG$PcAzGxH7jU&hn&^Jm;Hq)b!ftdx!N>b;RxAM=5L0gNTO;g{^gniCp)z z3Ur?Ss&wJQa4c6B!uUNdBf?*)r&Lm{LeAcMO6=pw8R^oW@NuOV4BtuKbsTMt(`oBH z!PJYOxLWIm;v8Q|uHt5mQbjI^4g%!t3hC!nR<4BTi%Y%R%ZUYXBE3dFdW??i3|bVe z-zIr=uc|h9#Q{T9_OwGmfpx1uk9y9#v>YW`v#UJ0*((^CT^Plv(>bz|a%~*deM@N9 zsC18YIu$>F94%TLLcX2#4L6x^>GcaksGO8d)L7E&%hhbo_qmk?Kp^Bx|)4zk0`24s}N! zr*{KjxjrLR?a|ihV0h^v%+0r6dP{?Py0g!Dk5>2AZn}fI=+$X#Ovc0&vB^A2hLPHb zyvcZLTFuFo)wNop%C#t#kibkd?700tq13ej%_KqDcGjDIJ*OG!c4V{Nv|6_6gZe#^{{Tj&kBrl(ekw-nF73Eo!;-49w+CZ`fpng$-c)nGgHOabd8bwzUB4A4#{HKw zPbG&nOZYlD;_~6Nb)FBzzYy9w9XtKVtl-xci^Au%oU$LN4{cETED{>wbLza?ht{d4 z*H9uu>C^^6>{qPuZFOdFhidf0tTKAXaJ@R5ZyeUob4Hp=Bp&Z#Ieq4}eO{~s(C2ip zk&p&`7RHNu9l$YaKRouoq27Yz}Ld=~0Tgdn&u$ zFty!?gsHN%Mm_8W&1kypTw8=`#*(#DtoNG6I1Zabns*C?(8DV^j;YZDBH>76QjMc2 zV{w%;UW-YPPspcUpe=?Ab~`NEkPS|d8eDK&y3lYSm9jkYYL^@eB;__RxxfWop$u_r zx|T)=?EI^sI)_x#`=Dw+_>RFG$IG>NW5q#LwJEs3v=yz(Tv^&4B+8F>!w_S#+^+<^SmxuVd*ZRn7v$r0WslOdYAC-=R+t{?!M_W;%EQDPP}E`S zxorF+ZtIcbyhWP+64z4rUoiG|h{EfXO;|MrLL$>Eb|mDj@M_4^T_dn^*AixirBL7l z%TLB~xIJZ8YBdicNG3q=ur{|#oK4AGmjrD9D%7rT(nCVaV#eIecf6lLsb5z5;jOF( zOB>PvPeZGzLZd}8)|neDIqm6Po42G_}l|noM7x9PHv{av^Mf?AiRm6(4Ac-O%FjhQ#{U2Y8ptO!YwNgn zqeAfAO*d0<5&>L>kAiVZ^jT7kGw$3ZOQCX{^!B?`MlaIXpQ`P=vP1YjoWQj(u1!Ri zH7XeN@p&9<=(RWp7-LUcOn7{*9lqnh^~v23qjuUeRp0)Kd%hRA z$x}_8Y=^uGUOI${C1#10nI<$@JN0Z#> z1FN~Runcay{;!vG6nKW7l{#Mw=4AF4%Qj5h06>sP_CXaEonyc}Jf8a^-7r_pOH)hQ4St~M!CY`|WnBhR$Mu?0|Q zn=38sk!R8^WU}oc!!}YIV>wx24QYb{>0w021`;hI1T66)B1(vZFhZ$~rZV696m;2M zLa;5eSlVm!=E+18Y%PM#p*n2*)1N80$6ae4%%ziQfK1#e_=z@KJvYDo z5LuK`Cc|9Me+olg-E9VsnoVgkuHtPqi%JZ|<~*&Qksee#7*#TDFhpe{(r&YK$B!yY zRk5_jE+ch7U=?j@eKQuiSvHu!j4B)E>VUa`tTdB&QpvP5z01ACOMbx^WUKRtGWr@dHT9hN9id{b?uu1k{n0BZFk>Zg{KH$^@QqX3vmkn%)~G9VY?leM$9TJi zO?`I{%3NV+nBVNP)-zG(%EIww^w{`{N6gQeHexboy6oJEr}x}fuJXpnU25yQdp)Ka z>eWaa30k!>+l`xa(Yd3T>;C}UHA752x}13GvhCVBvp{uRz`5OY>Tq;==G?`36X34R zLZ?*y012QBA63awt<_9BWy5OfhVvefwthNJX(rQoOlz`D znfN1{_^v44sf|E))vJ^>1Eg7SG%K>77~)jHj-bOMdmreowLzz;?>dMb!Ig4HkqJ^c zX8bP~zjft&{=(j7s$Kj+q%Ta<)^4G#dt3;dg1qb6SdL(6$TXY$*QY?MFZw*%*Ldvo zZeFR^!L*K?Qf^M`qx(-2sG#5?M`hW0UyA651<}&{OMT#AX={uSdwMPh+GDA{j*;}- z#~F(mO*(PU&*W#4mJSYY+1ZW(PEO>mE83+q?(}bf2gD_Ep3h+LDr7~<)ApPJ;aYb) z^9qJOio=ah`y~0&*WmKk$5D-!YW8YC=0-@L-MIZ1RCxG`=lK$_qs*E@MVw1b_91n1 ztH&kyIa+yEM9*p)i-2xZ2m8J5wLcY2tR%g+?qNMWcD$HyGkX>Dds*~~NZTeuuX2|5 zH}X~ktD{UFs;nLEq5MZi(I-T)VE{DDouPW%CAJig zCivX#nEjr+tAGi-IJEqhpR{fm%G@k!snZ>F$?7qCtxiSbS`8-&eGOKjl$;)24&GNU z#yIB()$r{`o%-5;8w?wjlT(I!OWc=^cxkkG1V&Pe7%;A^2e=FQQ(yw`E>ZK(hGC>l zI-uS`UhB)6kH&CKEk_XYX@P$W!rx~~^*?8PKtF-iruR4ZA;b^5=Xn@zf@ep^&ZN^g z-8P1&73R%tN>xie+q#Q@xV%|*9X}J-aG_0_+ApZrbsJsKH$9gT$TjKyH;7lR_J=*- zT*q>|cB6^#(i|#Qr0EwKT>SE>Y-;G};ELP1GV~l{OR9j{fsTwj^jw1;(g_Es?F*@E zUBRo*O;2{{u@-{3y1MGRcR9LEeOFP-LqR42(y;F6-Ro`a=e?j;G`W7OT7NkWE5;mt zBP+A>7Zla%G@j?rsX>g){Y_-D%h!Np@+~(zNpGO!d(nn%(Jtp8th10lM4&pjz5J&H-Hr|W4xB@Q+ z!QFKY2=`o0fN4D=QBZm;A=5LTX`QyKdg(p8k==az#9PtCD}XTaKI`Znp$Bo>b>LiJ z5ydqfU-*ahT@M)fk~|(qsGi%)g{OmQTpC&pHpKca7usvXd3&bhnxZ4nu5Xv!?>H`v z#vs#deHU2vqgAJdY3bU1=T>%zUR(kD7Y#m^+PQ)x5dPO-oHj*n3>EkDg;)KmwQqzUSxAkTH1Q+{3~0(w|4-U8(~*ZrL& z_&HWPt4n#FkE-H%dHr;?EjblCu17&o9v?*JX$kr+BZ1Xx8?AA04C^G7BNEA~JfE1J z@7gt~nF5>3MD~)nS7mZsYQN$*j;a0LW9qoWGH$+~5~w76##g%|XJX`T95|mGrA6h! zn@3xm(*_5XyX^;rX?RY$l|3kM>TgrJoib#uOW8dZJ6Ef!f3yq@Z=%ump;fgxfz5C5 zwXOcE$G%TfwRK0gWMie=`?IFI7Ele9k!3S23!skyO}N=pY%Y@py%oJv7R+v2{05+A zurc-zwDw$kzbWprXhAxb0BS)E7^4t2ZeuE=-7IZc6Tujh}#zG-x(o^@kifuc%0=g~I zvzrxek4EGj1N3fXSGEm$4~yhkcaB?WZwjTnP5x_$p{E*MUk7C{EXN4>1E_iQFCx&hUV+Xp+sb{*>RA%iYLc~|n zCu+}`lBRlBvYsKQV=HMoTHQ%KT}SwbW!Jr=InL%P?s1YpC)IEqFI`hXt*2g#h;vMl z-EZ?(5~sxV?bOqsiG!=b?7VTn$Uqo)(t+ZSxA6=?FR0kD!OS)^*3LPsOJa09}Vg@o6ZK zKY(M=b=^Sy*BWeCI5-pKbNo0?iiPLkAEHZySUygv?NkrgRJ!7Q?Y@^@Pghp@no4?k zJv7NJ9=Tqz?NSc_W4eW^#1BHecQYF<*N#czIG#bZmw|U%{0mNXJXcLfU#Z}I)_~2| zY4&}i{8t(T+n`7**_wMGUA7rh%%O?)ap}wIl$b>?73EOt|j|sqel~~P0gkWdr1U?vf*ZoWs$bd?kP1C zk~_SN{g)BN%SOLLll#mqCvg5EX&K`Bmq3q*1;lZ_9j$A$uB*hV5?^OHOnF)%jyGG4 z^P5YfiT0zf>aR;rI1)aq&nM!T-Etgyv+Hph#r0iQ9RbeCg~rSk^g3)y9yJr^wHZB3 zjh>6e^&z|~gy^)+E}9K{{+L}}tygKPIglF1V2zg{%DgX8#aUXbYB{EhJ`>-<@u8SR_esikF zaDE+4js^pqLrm}XTYP7OX?SNCZ%YI8^;kn%Nrs;5h~|AODRA8tM$uy=k=EBAi_|NI zFjI{)URg_IlQ_*E1#Y5~Ty-4|B4gdT-=JC?M@ZcrUWV4|aLll`^H-yqo!vBr(0TGO1r)%I2nL;g{7(GN>p?;HD^#=NFRmKS1!QHkcy%Y%(o~_SYor>2dKoXxZ=RG_c*3MgIWj(Q^{pl{2Q~o+@WVbqX)j^;4?vcp_Rtof&gAOlyoa z#5LZMnCWP71AUfO&~-{ewKFBRcZJiwDCb3UX!Q;!U*2hG@XZ95J)pV!F|fFf4_%rr zHti;!yNwxw{D(Mhll9D@z@4q4ODff1qecznfE-s3!Zm|W#Hdo#6AZV=u2gY7jZxNl z5|VayE`Dt%@b7t1hpxe|VYK-Rrf}U@(uW4TwU2=Ij5tc|yvI_Wqe)tjaH*#v(BUm` z#k(&)Bi&UjE|6CJBsXK)&o-)6J;=|fcjEY^U&Dglw;1Uwi_}u7LaUiorLOE&c2qPq zLE!vAhZfP|2E4A*T0rzd{ zccR%Yjd1M6trY$Hy~rVxU{n^CusdS2dy17BYBWnhg9~2g;qr^1*Cx#>?rkF6x6aAy zJ;-won7FjGPf&w9rBhArwCsDG@e>8U7PQ~B)JZ;3m9^Q-RM#51I$C#pP3i_tL0y|g zt!|yv!~P~x5(jgI(lrkK<1aw5hrD{w~nCQdD;0?NQ@A$Y+VyAV(8oDeF~0cR+hLJg1h=$vB?Fs^l&ver3t$|Guh^< zl^zuK)uwDre$*csi>kT>om1%3MQjvjyRsnp_?7!UnuZk$+sh}nZ`F-?K9ue(qzPi6?MM+ zG}JO!A*aV>tEyv}UF~^`?642ay-OT>Jntlvqq@@K2lizq(&;RCAtrf7Skku3e(kT-$JG2jfn(G%}$#Roz;uTs@Gf|%D9W=jCWBcE(w*kJUT|XD^|@a zZ#3!$1Xq1GnPW&;$smFhl1VFSUgn1&lB#WRqAZ-)1xa8G8xt#%(&|I0xL13D0@ljo z6}A1AGLGXY&8BU(w@aJ}mKzm;JGOz`3)4YpcC${MRl zs$`6**|Vr~Tua-zHtetj5+H>Ds+B4vnOHtlp6TA{O_edTAVHE$CO6#djg>JZPh?$D zLKKlZph?|U=-yBW49d2Pc2WR@``*d`MEy{3jghHXYX&#wz>jfacL<qjM#AvC&jc>x z!u5=;rDG~svGq;U$K@UqwtwzPVOHKOrt zlO`S5)JqJzXSnU$M~NT8o{K*#rD)zq5fvo$2TZNKPNcen0XV5w4=rBr|i-D}k0l+tM1r_7^v zcP&o1xsc-!u=4$8{u#uOek1oQtJdNUbBPZnq<2RR;*O;)CP!uESRT{U>n6_A#dS@k zuF{zT&IFFjdquBhMiJFvX(e<{C9QROtf=EB)kxybr9`o}al(F?$|%WaNu9Tuwe)Fe zn$kgYY6BaXU0sc)?KpYX=~5AXq$zjHU{0Bv1X-5WY^bYwOVl4 zm@*}0*XqZ)q6vb>i5VUjQ>m?c^$l@10u$8h9O3zlWouX;27a;I&bfpZw(iA2sfClVHT+@h*R zGD*8euxUNKq3wyv%LSV}eHk#O z;_Ws1M5}8DNdPRRmR8o@Bg$?YO@4#6%7Y?%_gftVk=Z_r8yoJi-ZmPKXd=VrfZH9G z!Dc69%V%sWxW{3vS@lb&vf67T1be;a$+(*hUw3WN47poIl%GU4kiC`OJu_3F#mCJ< zfG)85t;aG2g2&PEDx^I#TcTYBE|~#sie#BkDVXjK%Pqus&3>ErOb@Eq6y#W0FL&!5 zlW~T_TsJVQp!dqn?*59pJ7G5shB{3kgB_Qz@a;=~XKBlwb4|JQUP>55Ny6`X4O<8Fx4}!cp#knKdrBu#Kju_#!K_D9$`K=9IXALD6iwbUQ;bPZnov5Kvh9RSMtZKAT zs@FgTwq8WIN2R__dZw(_r_|6$B2{VY``tJJ@Zn+)>bUL|s$tU7Z9*rfD;}Fv#_OEi zFolDMEW3_ZRZzP`_L%&pZI!9QYJ0vc#%%pP{zXk~Q)+274KFhWErrHuxPWG-MO0bL zVPQSO&Jp35NvpHD(s*u3?RCO)y>5;RPy=@m1TCYlqUv2ua1jfu^Pap^(Xx{Ze>9L2 z1RKbSnrT6u5dLRaDRqHaNF>RNtZxH5F8XH$#K14zcOF;Ovqz-@quM&}1g@si-LWex zX})AN(de+v1(Gz(u}#6+M{(2fEi-6w2EL**dC^X{BWy!tLezdTZPFvjU!^K$ARv-KTJ9W8HJ=>(O_f3jNU(revPgb_9} ztgzsvxWYNJzqI6k+l@eA4Aat%#FeM1=GWHNP_FGe0jIE=tQ7fXy+Rsw6dF%?Satlp zTS(Ry)nP7oNCRYyG}lP3dX``NM_B7>>R8d$Pzw{;6}g{O`IfQ??Pa3g8h;V)ol*%C zV6uM7ZNR8cqS?0xx;3e0`8TwD+pg0BDGDGRi&quLIIV6es1>yxJyFsiKwPGWf@$h8 z&aYX_jmqOV)`Fglv)sMUYqudW`a8ab$tUY=`kw|Wd_t(8DSSO69|)DJTD@9>rSEYA zVr&;_;9Mhz>Uc|QYDG_aTttUJ3rm@_8ciiCCrTno23;j(9Ju%FOOiY@*}1+BKS9N{ zx=LL-eMLq$uqo@fuCH3a-CcLpYfXcS?0lWUcy_--Ql_nrbwKNUR#DCzCqtmpvDzwd z;$mfC>tgkG*Ct+$UrTlHbqJFx=~Oh_A4rhkaux&mmiGjt%G^qWD+#3MfZ^eKH zk&fp;b(P68QRJT}X0p3Yt2iFv(7UFiLBjOq%{p3nw&>wnULRXl3#d~q?HDV=`n+{& zC%I{7*5jo+Q&stUjBZLsyUredtJXBUFNf5q3v~2N?=-^XYjDj2sr6LS(J^Q=#09VV zgctam7J_Yk$B7p@H%@9mKNK$c&U#G^Iyyn5qRMU+dP!??Jg#q5!}Nzp(&`k&fG`Fl zD|hQ7N!Mnjqmyl4N0YazeiX>56VmwfUGI^!T6(SG2Bj)*sMo_wn=mhh+p1EgDK(9x zz#MKMLdPz-LR)Cd9)Zp`XNnfNv(^YcLR(#TZhz7bcSBItfz$932blqMoCWN`m1TzH zc(Y=7q~gqVTkwO~bDXEe27<1kl^lKDT4jWJTrm>T7CJ^AvYZsvGYoQZc8^5l`g}H~ zj;r-9XTC2Y9B#XImxJgkQ|eP{0n9CxE#kDB!`yxII=T*B_gqyjEv0Q<8ck-jF{iBciy2=#3{rQ& z^baI^v%iN6^pHSZIgXu6366&9+z5rA{i4ya&Mwu`0E|lO^?2rt)~VB|Yo}D_$OjRb z^;u)VK6oVaMZV7ZYX-5!x$WI}Um0`1YU)eH{o|y3%J15qX45*0nkxcfdG`~l%G%ns z8Tm`3FMfj@pxvXvuE`mslRYbdYdDGFdS=tBOfXXbLvA}t;JM-2kSRA*@cFnPLXHp2 znte8gohLQY*23fYlZ?~iWrefw+UjD%C7$bnn=D=$zD~aT?xVb>{{RN+G79S)gSPS$ zD!Wrr)TOR%zfuh$330^9C1(N^JZ~*8%LyYtw^oPZDWZsL=U3obbU3r0AX<@)T0Z| zd3%etmko6quaE-l+&_(Jsqmo6m0H_C6L|Do+_+^KKjin~%A8jxVBxjHxNQP38yE1p z#-my^d_RdeM7hoaO{O7EgP63`cz9#n{-8-e41gtdUMRa@%AAy8i$>))je^UDGhv z$I)_pA5&jN_-C@CSmx3_HkcikRMu8~eN{@82`+IYlihgnLi0*zw=}llSj-NHDmGT- zAlnPtczuhdzl7YCG4PZh%&Cb4cU49G6#?v0K5~%CkCLtrSm64WRH4EgUJgM${X*#+ z?M;m1b-FHH@mtEn!}Wa>m;>sxgR#QU;x&zJRYw;WZ6_*$#Tt*b6*f_i2>JFZ8D@gmI~Vl_IZlKU~Bkni0{2kPBTwck+Jo{WR^ zl*gyI(I=>gE>QWHL)Nupmv}rTmy{rUFhyqf3i`~@ho2mSyMWD!C=tiQE z!ko8Bvb7W+LaV9OZ%dkBgRxl3=eV6GYjjN3g8G#(`ESZ)a5z#E+>0pf5L;FB{_2${ z?NPF|fxWg|jcTu}!znb~l!*i3#Q9cEs6|?4gK)OA8iS?PGN}F)sMTUsYSl6+ZFY}a ztyrE~(3cSd-MORZE3`LK)263Vo3j?~yt_}tIHhg`#yW#)X=#XUL6Hk?j~(JwDK?1G z)0iDDbKnKR$)=aF-G-(qS=ygab#a<6cT0;pfC6N}E0^Hf#@6AqpT9`FX3NfK@h&3j z+QRx2i@n$n1e*)pZ*aaL#D`6psBzZWLl^eJ__<( zitXIfui_e=0H>;B8$>=tI&TZ9I9ltgp~tfwGnKBM{FaDbh3wN$6sy-FHU)Y39#^As zp1<%MAT#i_9PG?yQ(E7rOWbHz?pyXbE=+NEF>yBm6WbYGfIZCP+NThDO*V<_x^E}( zM^NHA>Ys$GSFGQnBo5bHoA}HB0Blx&;PnvZ0n%G=7c(|FZ~p*CR~ALE?G$w^sA_|7 z+=bTp?^r14bngxU%`UJjk33`DYTjK+vq=$l-F2R9;&nBzV825I3qoo1&COYkqfnMN zM_jJ%x{h~pu>mdtS-ud#4g}eER|w#)S?gStrf!#)TtSDuj&@^Zhm>gP>eAGT?GC^J z*uvttPaMW&fIcBqQ3_-!fNR_ zXAsua4h^Lc-Nly`UyF@j9%iRo453Y>w86hjixt*&{8i*sq|+eO_l-TgElp;<+OD#0 zNFQbC$E9iRXP+jeR@8PLRHDsqGsC6SgNuYOLgOMUaOMC&720j$SDNw;s-BySht_al zEsmnQ*B9eDFUIixokceWRV0vPV$!r~p)XY>@OpHUkEd;zIiE-SOYv0bxvkVt9c^i` zA#|=YtZu89v=pcJ)M`Di1m9)P^Io>2b*EXQt{U%m(=2rLH*i-_;(p=UdUdJ2zWK-E zX#Q({mmdnv8kwtfdbcT`b;Fo0CX*lb{{ThieDTEF#JKfWGD|6*hV^a%UBj06r5#TV z(^98Y4MS;rhqSs6a95x4x-O%|s{6+WxIRf1Sm`nC%_lC)s>!<)QZ@DZS2DTydS>7S zuT6%XR+)k~T;8I&*7UvMpn)EcxVoS=tAW{cAvV=BohYR39lEa>8r}h?rBb0asScU$ zxn5G$H(R52hOrLlcT^FyFFK)F)cTqyr0lsq2gM)4_@z4RhX4q0b>tAdv(l}tBh`;o z?QSvgO&e%&4vK9DB3&wjb5iK4o@p563Dp zon1zmtq1*Su(80xB6G_E`80e!WdPW#OgH>MkR;7bVS%Yl*Bi2CZU1b%n%uUVpbLiRn*v zJ2>tmUadNGUe^A0&sg1X=BYJ0opMUf?M-J-kO5_(3 z(PFtC7hSKS>RO0%V$vmXCB%qZ95T7n>gm*gMBY|Yg~Y-Vremzgdx#Jw%IH-(cQ~+^ zaOp5|7c0k|Lr~gPs1xscVc;|YY(n5k%0cgln%MX^bhS%}q(3bES0hV?IB5OrSPe$L zNg~7?E)I)}930%P-J$;g-aIkPH47Zk($F^}61C=T9IlPHYJ4+<)jU;oQ>ZTYy}K?n z1+!EdRbJP8PQp(1eTK*QO$Mq1)`RVM^2jquTi`DE+2#OI+`~+iKtmZrJn*y@0>e_Xm$J?H&WRT zX)S!g@V90CtefT2HRAouTO--g_zs+FYqv{G%~#9=kDA!la`vl5UbroBWjpn^0cGX- z)VNNJc3RA;_BH{8t=$oE*_Tup+M}Vt+ss1P(Y=C`>b>z*q;#}k_gr(GIVrKk zc}E*mSjw5Ts;lo_92?Vb;oW1XdVp+4s@c-&e|bf$rpE@5OI##7)o=0b9R|~7eKl6N zxEX7IhttBta*Iis?Q%_{fF(?(Z7F(-E$5tIN<>=7!Vc&`1j1XVvH{NFBokzX&{$%~ z2PvDIB`{D8Aeu!8ILa)PgwPpwNM2HuPRfCg2_EvCr8d404>A)N^~#;Ga-I7i4U%f0tvRuMQ367RhqOS`8KN8FAvSui)`z6S)5>5U>})d6-$FA?8#Z( zL{37_Mdhu4wcP0#9;vm_X|lCsOw95~H!B+@ruj!#*+?cV5pX*x!a=>l#t%)wAgY2; z8coI!rg}PuZcKSu=~OfFT1{l!n=Gwy2E}0Fy^WD(dX-7G;|QcLbLC)Zyxf`ktkP!? zv8v$OrDj(;MS@}94`qkq&)Hi=u1dy=n=-NTc7>2tf(O}QU}%+*q9I`D*&8U;B+knH z^Uh^s9m2V_mMtSRQ%i_d)8wdWaA3qr$lJ_GShFN5Z3LBFAee*G9*S8ak>Z>GNO@a)*^qZ8Uzs+Squ?mF~13n ztgMtnM7W3^s=8q|gOQ&^z%zU$l#CV%e6`dQFw|OyX03Ho~|j z_*mI!*DNH=CRq(V)^<1M6LTir)!bdCvq0P`6#j<`Gik}q{3>%X_fv4#U> z4QH@Kl$_6p=CV=vL>w$+(_Dzgji+iH>NNp5*($aAskS2!unQsE*4K4+%le2LEBBDFRB`WhYc@#z9>wOq<~Vm;&n0PZ<(9oO(Mk*8oB46Y8T`#F+X_ z9`L!%a6cv2elIYWOOJIHo+;RQq;fjFV0NH9ADCFb97CiNJ{FJ;C=53XYR43fPI5U$ z@mLKG4j>tYi;C;Uww*BAWt|<)R*$C*hbFGE(15$?{w zbg z%gm^2UrnM33hMC+jsSI^s`1N6+u-&?S4)$7n04ZAg)h}YK>hnX*ZR`wqh5rNe@mG zc{Ow2D=DNbPWWC{QDfXJ#4-<11ovK(%#M4O>#);cd<(_W<2o%Fp;DtnR-48b4Wq7U z6VrvWTDh#!*A?NGIV_u#;P%HNls2=5BI!cj{4gglleFy_Bo*pYN14Hz&9f8`cUfu< zg8+zF$+=mh0z|43(o0G}*=B12Xg$%oDkMGs0NyEeILx@L?PGUWL@+(F1Ol+!k(ED_ zTjGf%__~q_JD6P1_ja>m(PBR9-j{TN@mdxOD)=+>+xIx24bthET(wVk1cr%RWm7LZ zEa5%I5{BP#3T}x2k=z7yk@q3umt!(v1faXbiHNEFZJy z239?7e|o_!!ise&jWd}N!*!fu_M-;*X7>+c9j0+MAg)tMQk%2@27vHBtAx>245Ly^ zO3$RLVBAODYRL;WdOO~ATB<; zy58p!2`Q(><2NE_%A9tiS=l|6=~x|IjVC2zIV*34H>+5|w69d%CeJoLWk+q-)ul&C zN~b_+G@R3DysnV*FDJQOyP7HoaGfhy$cH*zH;&7wIAwYCtLd}Rsee@g!BZAhvQ4;N zqsnAphUV%F^<7=S&dV9Pq#4~JE~{?JPI90&G_^|%3y&)mLnNKbmY7Y($|cQ0 z`YISuaS*6Sb>*%g*63&lnfGt7?6)-41u7bc5;}e1A#}bSsx&GHlHQE(dL|bEAto+L6p_wXLh61h?a6R{_K|C!z32>S$`3x`J9@txbJjd((kvS>eOA zn)2nf!KJ!eCM=P{_Z}m*a<>$xONMInx`y>O2^PeK)hfYrpjuVZs8}5aI)oL7n;9!y zF{sJQ&@82* zK|8FGgF7ED>fGKPs-e{)4Uc8H!*yT0Xg4;p>iT+)rPKkAp$m4Npwe?($zD8|ZNJIv z$C{E%=D3ESH&>_(Zdd^=!pp;T4yB@|LyzSEU2z(HM_I1ti9I1LCa>K!vv$T7mxklC z+OqRz&oS!FS}bAdx$3r8TX?x!dg|Ww^RQZHB(H85Y>gf)v)?NQ#iJ{|@aGT(tPjo8h1K|mzP6{~s^H)Z zf&?x&%%`?xY{jRBK8;y3%O_t3mc`3XlXYWy2f7k zf=nqGS0Yohn$XwNI*Tc49x1+?W}Rl(j|LWww6ov2!OnY6@f($^(g*>$gxK&}Sn@#_ zD4|Zu=W2v%7RYHZr>;mPOYBbZx{zgTqg}GPuPM#tK!oP$L^g}1pv-q!IDVk%wM{N@ z3_lBtPQ_`o{4j|# zXX$Ueb4=V}Xv7aIH44Yyu)NLh-D2bJiy3UzWeCiLzBSU-hqheoOPK*}&Z z6N&jGwip=&R~EyG=^HF=$&4T$swW;4qF7=fY|+%cjf!q_eHOMBZ8-SF;YlU#XBO8+ z)|#CsiK=>tH)t^-VAZqTxQid;veu;Lv{h~i%9>3Ynyn6b0Or_ON94`FV^|x4LSoJa z-ikLMrcNNOhPyjo?XSksp{Msy)&K|&%E`odM^y?{i$fm&0O4=&k3H8{($+NU0@DN; z3$f|Av+J5|AUHF+@MOg-Zt?VcvE`0MQ#7?&f5VUix{l85o~Kt0LxrEe>SZ z*;bgE8iv#az%wCdmlDYhtk;ht$16tn9HiWKJ3?x98KkP=k^ct99CprT{4edS$B zZe$k-1!Laj1sMht+sc?Qp5;;x&?mLji>DK5C;CCqS=gPW^d(C*y-I8 zc2$JT-9rUo-80n}%0OKbqKALxs1C^im2I`*Mg%+sWX!^ux&WC0LnMj>%CIdY%7))6 zg|JjINV85sjQCPpizg=cOkVxASlOIVg|M@O)D{-ttbp#LGf2xH4X~-A$7P62T-&n9 z*|ra=!J}kLZ{|If0|jFOX68a-BI^c>%!V@-3akdp96&b^skn`|P{_#BEw|lJbZ$E= zU=EUtbdxfCDMnUiYr0(^m0;plyJP|U)q*W0V$qUj!0jjwi)CU5%AiHNtZ2JMQ zG$u6M2w4Mro2YH)xmB?Q-D1p;^B}B&zorrc;jtN11&o!8GDrhtV;&VWOn|3oA4P2v z(*;Imki%d?7|}Q?f$#NMDUYbxVA)b7tg#!Qu-#<>$8w)e;%&Oeahi#*&^sVgGm&kj zYz9md3W$^Z({Xm1{Q_=KS%Gp^&p?zKb}%4zQ*m}0odSCjk)|UC7T-h(0@(CRqyVn+ zY&8oY?x&y=(`j3QmarB}qS(5sW-bPiXq-%T2^Rb_aUXTM8Ssc0Sjz?aMfX`LnC&$S zeyU3dTV;YTcv2bEcJC`CBORuh!T3~>do8lTCdO2j2oVc4BMqjDnoibO-As^H`Due7 zEG2>rEYyu|29aSqeN>iP%G@H}JFEmjv0D_4GKs9_*q`RL-7|ST*5y%S5*D#+4@I^t z($SBmXCWT!A61k!A}@cc%W;E70?$}Wpj~Dn36(o+va<$^PGE_I00Tdo$&{Yk?y6=D z7)S-TSpe`N68;jcu@>E16iD>4mzb4K1bQV>`&khgBncN1s9?gylXGR017NE#Kt=p4 zb$;EJN%^dG0Z5UOz%Ln9Q}V2BFl?KhBK?+L{b+IW*m5tA6u~SZUt#W39StirH(0>gU}=VsvP?I1i$O7m z5(J)QI8|SDsp{~w{%a*7T4ZHeD^w!s*~oD{TdPtGpM)GPEz3Pe z7hYDm$ynoxilkY~bGA^rDgI)Z*dc-m@U|Eh;uagq$mJsHkYgTF^-K#wMF=4h5OPp% zkuZfAH%cy^d?Uhy9WxHeTVR+yrD?Rmn8M5*Bj&J@HpIwWV6At$P4-z_M@$J=Vq)nO zNimDqXSz?xRZdjDB$btzq(Q<%37laO9pO0v^Y_jO#0?uJ5-MR8*V z0eEyQfX)^M88Wg10PL}5Ntqb(I)E`DOI}MrQ8ys~*+he4b-_MXIE~g>5JJXAK?^jf z!o~>=S=n6sxFnUXFh&tfi6F|2S(4zVkr`4AjwM6T6-bs-UAD@Ij4W{rArjflAfP?U zf+NumCKD&&xKs*mskICd3P8BJ2!fzRK^_7iO3EXq8gB~=#h@rtB{0_mH(4uCbvS!R zz(mTyO{NOm(^dC6nmwsB3zp3#(wp)1A{ll_Cfv5VA3a(mN_+*@j99OxWF6WV9H{wg_%Q zr$i*y-ztk81}+q^iBt&mN-x;}?bx6h2c}RgLS^3x3L0;8Le1Khz5I22Cmt58mOR1w zDj-L~Wn^VA@CY{DVZt-JGiqFF>8ZKyyg(4N2W7JGKrIG9TJC8AKvp~wR#i6qSF$S8 zf*e07Nu-BeWvIdc?Ui3)E)8H2gLSdfE$aI$bpXg!GF2G=0991a#0ixusDMlrUq&f% zZq%&bc4@W5u*O!AmYD?lt@_j&+G0O8>r$h7TM?bsxHar-k}(K9l4z2Mf>0)WErtdD zQz2*5>J29n1X*F}>TQw|HoC>6)fGDE-mj}Q$m;??$XS_6^vv~jU(smN5A*=lJn5xOq>F>x9$qg~xXJr*hb)=#7@om{??Wzu}DB1=RJEaA%J*De`O1pHBD zjOAnwFAz=;)*6xp-PvW)iFyj&?^MTHCkG2IwXCD8ce-$Mb7iC(@kGH1lX4ByZ#ERT zqa)wfP@d}>jLhU9NVr)=GWK-=J=N%(vjkdF3oBYfh=rQIm<9*1$V)**n$0j|EY3Y( zy4KlXh?!X^ItdrLKahn{j%!*-vBJhy+4!hAq}{k$htVR*Bq%5sM(K=rSs2iO%5BK< zve2jRC8&KfN%0JZTp)R07 z%T}NZcA#TxI5hP%jIBpBwZ>J6jFDgwWPmx8!TBR{vo!=p4iE>F#1ses$`m8b(H6=i zT_Nfr0OQI*yP&zVlywg11{<5D(l$`^hg<%42szkVwBk^_>?JAWlh0Twbi%s zl?>2_ar9Is6N^~FFWo~VhTp2p!+UmEnl7?5c387CH_5>kNP6KQ40%t+${C{CvNj=M z8!H*U%NC50lr))yz=3?JWRPyMbbQLenb|kMy2u*i*aYAKFc{orPPI?c2u(j2s=K zdw`4$VZbOsCgDhlF&Ux6M#u<(p@R6(4N^l!C=#Ovve6S2CLKyiiUOii4w%=CNj;a~kfl1$iN@#uY^>R`9|qR)U)We)2AT6Wu>N^z^UH z=s^eQgRVM6tWBma1>~id$z}U50hP!raQYU;Z19*fn!3Y|>0uQvX2y{BI?H|kk}Mnw zF3ln*D>wrJ(Ib1Y#UakPXA_gx_=T+>+TxRe1%_sYXqT2b)p#YnhIrch_P5sBA%*}} zGd7@ekON4trK;Tdvl!HE0Uz_oQb8SdI1CQ4zDcL)N~v5TQI7c!t3~>gu_0wHsp~_< zd~!2#zO=TmUlT+75qBBWQV6tY1b}uHzzu4-{_CK+H>;>y)lFyN8f!yk-}pX-TT1{H z{oTv|<+;4LMB(eQKB2u~J%kQ7E~JP5H?Nv$2N^(kRCO}1*nea)OO}+Iv`j132_D%n z=|7YEVvW`y3$vVhAD9;tA(&mtmEZhRoqatG?s=8A(RIuj8n70Dhpt z4vayqkhaWqax1h^D3V}{=5#spC5>2O?=|OqC+oe6-mO$+q4T_avT2vfj9HjdX8gXs zjmLp7$ovMddmPDpci&vQ-Zt+Ths3pPVH zZ6|tc$#-w!%EV{Y33$WAhslm)lK~p8h^Hq8z;OYBc6`d0#@6qrj9|pPra7Z50>k$O z?2Wx5>HU`3N>jPqRE!9us3M?_piN`7FwC=V<_MJVYuzf+uG!ZE5`5`6P6ihI6NeA` zgB6gjxu%%fNJR^RPft8a(BJrK*HS$Ze$>*q;%F)+>ELJKVrn$py3~}OlFQ>`EqrW=G zVMV!9E0V&Ln#~(NGwvR}pW4j;C)M`XzThcnuj$(b#I;!uK|<3fb-QR@S- zTG2wH(S%CL8h;CI<^y*p9_I8pt->zQGn{@q%A-7=j%)11_{kSNx>Wx`=YHY3gjE*T zOzSGI+qRQ1+Ef#{3}Y5>T7slPZn2B#dKVrusISFe&y9`})Q3hSlsGu?A*H=V^g%q)QWkM-CUjssV_TQ>_)!WX>iD{ zrw#>7jBU=Kq?L_)fHW3tV*`9mp4)BVvj754clCw}rCRnlk^a%ZNwURbr+d)x1f6#dS&-E3>?&P-K6bmi{sUnI*`I*^TLV2Q-!RFgzyM z*nQbupqc>oOxp~mVb?jslRunG)Yxutv8AF_Y}`}YfVF{@tD>3MZ==&z?};|~xeFf~ z)Fozan@y`~nP-=^Sp2pyZXh)|$1@vV`K{MRy(=cV_20P2lmy}eqwOo;L+pIg?uk9k z?-)xF%PU>+<+Yc7Jc?v+CBMw{CJ-7A6QOJb11S4|O|0W|;jk*VZ3w&*=3W-Wda-0V zye(I9U!#RJZ4wBV2@~E#f;1znEjE8(UJ-rp66$wRcR{A#b!xBwTbj{6DX{5FvrHm- zdrM%nV%&Bk3$RWFTXL$M@N*60J)ObKLKUmJkl&&`&93y_k$nzc>S0C}@EvoxAyC#q zJWCYp;>2@n@N~u$h&jc$#dkYz5u9H%yi61Gy}W74R3Y;AdaK z&47t0axS@z|J`%xhSREb)W+AVAaavyMYEAx$20d@&%*q6wI{Dqen4j1xa~_{kJ7^HNYA5glC}_a{Qg7#`jWx){{iCphUc~o z#$2e^7%L$4GUF$QeuHMb-{UgX*?{n+*-&WLbeXXNw$H9gnuVmj`tHB+F&G08aq^8V zahErMIY=0s*D-DEL+C8kv!j#gT*Iu_LR@i4=2*#;g?Nd|tMnAK)$^2eL99$kK0H-=W^OW$i5uiohNSZ=+xFs<=P zw8QnOK)61!O5Y^JbFTG|cJNt%7~VDX$#SGpGNSmooW@?4S3<>Q8))ZM>vc!uQM>y| z#iDs=TyaV{3SkQK&xxz#ey@VHb6=6Wi3m}rR#g|A#k+Imtlz3^RkCN3?QCr}F#8X! zv2|RVX9^`ZbHDmCxmlf&Q2MA}yH4g^F1&X~$0B9LzqL+D(yezY77JIE)>ze{v&@xs zy05u>FY$7(vHoz9RyV!+{#i}*llkZVXqCN}`7TPIQZBxdE^5GkQVTz~;j}MaOb*v2 zV_9M)Uxs!dm}VdbB-cs4(%wDJo--JJpvXxc&`itNY>K$9K+f8Hu%7Tn2B zY)^bhE_t!9lvphi@8f(rrj*Nhl<>US?GZ_&bxNmY6)6exkP9p*F2YT7>FBYsXC!hR zAYNe~B=Eu%)>@I}xl%;n{ptkx+ib<3Od0GtJ(9F=gn9E|SC2Vh-ld27tL zJkld61z-7Za*3B-=UNZhZN)FN7NR8*kVHPyR5Fja=e+8tsp4CwSMre1^_*%)ttjTg za0K&xKm_%l!AwfVWThqOCLGhJ9!sYAvkW~t{Phs(7iW=`XTp+lnnPsoG8d-{5uNvo zffw=LUDtTm5&NrH^@XX#!Yszbn|+_uBKC>7pow9MIZgab&%D`Xi0(wi+y}RHNRR0EN8^!Lca~N?$}PQ7T%q z%BL@TowwFgVqdw8xgDwUi{>@(GObHyC2z*MRFdcVfhjzD3NF>z8f5`&r5hmBW$v_y z46eH0bNXkGE*4tx-Ag4;RA=FS6C;st?6ZRtDHiAqo% zp%u%~0BDVfg1Zh$me+Rc{i!ebSW`1>Vn|MhAwc8nI8AjG zVcky0dKKj%IW0**j*}~qJubI7O=_&&&R1dBD~%4d0^k1y^&i&Z9~}>nfD}R>1p4_4 z%BB_BsF_EK&tDJ8<+Kvq3%G?79`9+E^;5Qp4dCs3<8H&D%1B=>>|Mb_EY|(aUh%w` zhv!_#xWDK;7oJG)Crg`WOOgdAxkOc(t&^WT4u9n2d6gTa z7N?fdl=!7J>^QKvmJ=FSo1)HpNUfKo4=FaAOs&pzul^5kXZ){{M0X~+yo&3brdg&} z=d#oWdN2GPLu)3q{>%RWn!^ik2=v*SgYY_DEiDQce+$373j4%VFbfD>)n@$a0XX3N z;?c%d2Nl7^70tnWWfK)5WK3#5C#pnmYj^Otc*iW+8`d4d-m^MHjrbWr*sd~%p1-?@bju95~)E6ltgT-G4ut4?2QA;q)W z@`i|1%^;SY1rw_VGm&!A`N;{4jcWn>{s}SfI_|tYWt21Q$9!_H zOH#ab(_odwT>K@I=odSYDunRh#yjf8L%$tenA=TPdFF^|E^t%$zsNGvH?EC5G4=`Z za7lwHwYn=Vwus(Ne@G52H^NQaNTKndPhL%Zp>b}_Fp^epH!cw*3lybwCJH4i{(WT6 z-BebljIK3t1v&J96kQAgy=0VIzn9;VUiS^zNnmvA`^I3nhWuP=6mOk8v~RGnjWpzX zTGIKPWkH%zp95O}!VD{Y8*2sPpE2WMu+v+z8!obKHaV4lbW%R+MS!H{%^ya$hL4}l z1LI2K#jZPQoqoymv%w?SKU}UiLt<>Dy-7-YammkB92aB18Vn)dsS;Ajp93Rn1)Co* z8<+HDX{2i;{cjWFjb@kd=*o%b-r&MezaYg>oj~Mo1CylF+v)YgJ$t-9jbHI`q_HF@ z!r^T^x;N2+{&j_*VvP)5x*45?TXFA_p8Fi73cB*x;C82(@Au8HR@*6ddtlbsF$Gz{I7P) z56hZgzWl2_Y%hCwUv5l~bl0sxKTeBb_6pa&*6Y%RXzcwGaC_7pL40^{mhC|02Pm+% zDSqRpVU%>X#mqH0KBRi!@LFdd5%DRWI8QH{Z$96@;jd15Tu+8;Oy9<_* z^fL$ZNru9$k`VHeRgYmu~Ep0VFtt|Mh-=>0S zS@@N9=$a^F7KoPe_$r}Q!}T01ttL3gEa}9sD<$&^?&P|Dl~Yc$4{@stTn)bR=MQ(=VdgW!y^C%ek?OxR(0mIywOi62UL1`nH(6~} zHEK3`&e_B1D$y$@t^FyHUCp;IX-up(#D(1mm8ih@R+YV@uPt%GUp6}IW8M;P4fqd;pJjXrDi@XstZ6;kU!lnn^O&Im<07A*D;{dLEz-uc2 za58%mSApT4G`YOv&wjX4Ju0Ps>#RSY#;96ov4927KG$ZH3||K3BfH-wLnx}Ve1;=Q zG!O1(d&r@ET!c;a(SwIv?>nY1G%ccXl0e9ZHJmoSIVYYZAEAQim}E$mL<)j2>MR^4 zOT%Pf_qA5{T!G-`iENVU;m;IwI4@3rc*-xBRZik1ij_pOBq>o8?Ah3#d6&^^aZwhN}-d zzSSzm>&aBP0agO*F$3J(TC$aMTi+~z9%}AsB`dBd!DV9CTwq8UiI}qRs)+2AsJ@Y< zlk_=x1}~ACyaXl}y?4{~Hr2htcX{^`KJlPO;kq#zdAaZm`xp0mF zc68d3%a60LN2OUP4-B^#a7QK5WYtu5MRHm~txKR9{uIfB%;W$bq@~(`{%w`WW}uY2 z1DdZA{s#=F)Tm5cdJoN5t_$>YRS7r~9-;YVsx~qW0RRz`;F^XByIp(#nl9u!U zum3_t&&TeCpHzE)y7!8`@kq2c!3q5 zJk)>vl0-jxTA+f*h4OOQO;WEX^S(?=y~i~)D&N7J7*om#>(W0E_#+21Pr&XyP6Q@2j$Nb$Zw&bLKA zBl~y>{5n-_%^T4V(yi)E<(l>c=$clHIxo7%eV$X}#SA`Wx!RVpf-lS~L*>31=b!@w z_nLW9e!?#4s1fa^q^f|GINw{l>Q+J^t-P0{?56JH)7kd1+6U{$@EiOoAXUW$75H9; zzI4(TFG((H2y+Ci3XneUUiHC|(Y41DQW4iWt3O652z+nRr-vUu>9Kv0bJ#6I(UyF} z$ND^XL%wu!Ao^Tuz-OsS*jA|jsU6YI9f*>&2OZpTB4O?3TM!v9u(*aE@V><$PpC zE((OPJ*$c6zmQ1iW%^vKdogaK78rY(ZK{ej#G8M_K$xV;iYqIj$mBXxvl4}-r?DR6 zs+w4l%FYzAG$V)&X093Z6xQ5~MnYX|Apf{a07bMU`$>mo_mJ=Lg|Mm7Si9R-nM0tY z3Faw4!0@0Rgy_uR(Zt|o{rvp&q8LT?{;p{STPC+@%GE;UV-RU~ZxYgGqRmJ*@Cn+; zPF-x5>=?Efh*Sb_B8_+tD$2rEOu}-Ea4>Nx1#>Y{E(5_xkC8qVEtU|IvJY*_lpIvg zlL-mhMOeh?0#V$4BFiS$RlKJJ#T!4x7vqGT%!jcUPU0@MNGO?Cdz7LRMYpAR>h;(yAxHMr%Zp{uq(K)o z#)pbcYWxOZ+3n+oPyI zkgi#7{QeA3(omQ#B3MA|2>}mOLf4~`FAol*fT_HKA{6hu1V~S7%@9qfPS*M2d(%@^ zqfTTNh|HH`VhxE0=8Xc=tKQ#!v5w2p=FjP<^M5TRAG%~ z5Q+8w!f(NJqV5*-A~W~)_5stSN-t`DMkopoX*hLUTR8dG__Wc8lgx>|U#unGG<#3L zW2fMfWvYb9H={(Sv3TZ{(cIqKsG!D8H>aJ6n1k4SUlQ1fjgGFMKyTG;OBWiQh~*4PH3|KBq)t`P@w&aIM)*`@Gl%6!-{(>nd@~@27DX7Qfuz)BDIK zOh0Q`TZk)45DRV9j&KIv@S5MEd<@;#ZhXbj=-zAO<=8md|Et?$@H1gJcrd|`Teb^d z_uVx*JPw;>@x|tLlu2jRMUR8$M;iV$k8^xMDAw}AB=d^ET3TM`aNs+$Z#a!%hQU#Q z(yRI)k1M7U;;6`Di9Txan8psn1s>)tX|UFETWYq#(Ze`DL`jOVbi@9oo8$a%auvJa zq==$)>^w=-r>5K8sloWJ-Xgzf$E5w3U$Lmh7mvNN`k*Tjgfw!VMn(jq2?yivJGOq0 zr_JmM_Ls4UjiZ>GyVGmyhL^l*ffueSYxB*@2m~8QdC#p4=Fl(?4qJ>2k4=^|XM+J5 zLLgAZ++p#t)noXas`HBAO+?_XtJRqD+KRjzW^#HZqIN+-l97k{wyXX z&NecCw{N>bR``+mz^Z{-UdVajgU+rJX88Kd=>0xn#z2!p2EnSE@vKRP8Tf1B=|O=; zUuttlbpe8J`A*@qZ|r7(N=Q*uhwG)1(A6cN3&3RmT8qgpU>3sP8VK+rbkBHj1dVA) zn>*AVY0F<;@4vgmc;aqeWtAxkZpWXKqu`p)H{TonQ9;P@UPU}Tv-HS;1HLX343AXy zh;V*^h31hE8|vT}Cpx<;j7iK1-f6$M7MEdXuK1>F?S1AUHE~UA%4k3*IUAl|%ga?8sf~?u7qDTEP62VM9+ke~v3bx`H#lh13fv`o z7T5K4u=&CJ^A7tY|6XvAXz-314C~kAy~pp+ydji=c@XV?{^^=GLR4+ zUFKrs&eO4~;{c4~`LvJS?h7YR?S)*pq8PgW5sIxGSZqh99wRT+CPO6edYJw!UtM%C}f*W06QNb2P!q;*yp6wh|g5n zF@s+@e5&tEKy;(&}4?|^cpa3Yu2 zfg&Yrw;KZs$<@M%W02+MP{&MB_VIat6)>3SqSlw#L=%lyU&A?vs1I@GQ6Q=gaX-+A zC0xiGl+}fisS;FPh=QBS=y?N`>ug?0rj4iLWvkNP93@eepzSiT0Nx?#Ld`%sNNGW! zAo9}76=L7RX?1gZ0FgtFkawC@LUqzQ*H!p36Q3gigL-(Tyclyb+4++W53ahKa%k(gR(rXW)?;KK9ETnUWxB&bl}MC3f!uyrRrQz1|h;(*_138OSjK0n^s(80MN% zrbl;>ctF^nczAZ$KDbbol#3K{0$<~j@UEBJettpHo z^v^3)Q@j+X&~b;0PKQXO;K;9rMYuXxugK8jwXc=k8unTg!acKe1l%#|=Fk#)z%_32 z9~d|6(&n%bsh3l)S2etNIcLnsW30dz<>gY}PM~i3C+P61a^l&wZQLM$!2iCvo9J}- zv_Jn%E>k)XaprZM7t_+7#tX9@wwtxTZ;t>oM}BDG9f<`Hzbh=vypG-2yRHd@s@Q=z zXzDllDLRFa?eO*k!v^*cns|avgIB#GiNey=H4N+i2T0R(!fB~)^e{(kgZpsmHumTc zy|e=TH7dr!XrdZjb^-kDEAJGHB*n8w*HVA3Qx^R7xPHdKn#TUp4D(0)3+g!CV{koa z<*t=5ZyLO#=BRZbLzTL=jxWqYRr6-KJN76;gF;&}i_W{JY>Z32KBZV%E3FC=d~Dfm z*Db_SQ6=z?OomC~lakKc=l>%)9)zu+4nl{V62t(@D?T<~dRejv_S3JfI0>Z1e{x&= zx%DqCfee@z0_||xEeHR-$f_~9lv;IECPv~fg7wfO+V(thh>Z3keozxaL4&7?D;HBS zt=m#TF}u61N}gMZ8UAq{ z%rr-Zu*U6#So^f_km6u>I~Be<3A+TtkRDPgMX15=*GQvma%Idp<7{)goaiK99S3N= zGsPoINLS=P>_n`2H#z63x@}ruPcv4}L4SqtAf1OE@ zP3nnz9&&#l67s6SeNPtcu>S9C9xJ}tBnqX?@jP4ig_~K4zn|eI!XBt=rNlg@Rz3Fd z4-0tq!hKF@R;ePbZ5i^yv^7K)HpMde*yq%8$wf~m)}wOFR~6AQf6_Ge1!``rBI)KM z;u}?*@mwUvpj0xDG=%K&l-wd zDMise1v8zss^{7)psve81LIoFLcMV7i+k8v^{Oz-^XI*6D-#P(BY7-hxy31^f~4b`znZ=>q$3fkQ0pcuT+(@W%;IjQFKa^jh|CfyUd2( zdO-D#E(NDHT!tJHvK(Z+-rsK!N>-V)I}JC}abF(!aYfO{Eg~@!^S$TNpKg1=)92MK zVgQ}%M^7)3daPFJL`bPm9X7_JEwxBiUfT_y1;2MmpBG%yS}4@sEtH>XHK}c`z5g1R z-8GKiuMI0%-b)<^&`i3&m|HK}xm)G<@9p=rrcE2ZK2ve2C|(Tp=38M%Ul?nBK0S%M zb1p>JLrT98~XU4=)t7Ih7A&GXvzvN_3JJCr>kFY&BMrOK;}=~dlKo%Hm_3Z}Hq z{rTo4Nq}OOhBCBda`#;3iN#mZ-WmH#HQ7*9kC>Uutm`-K!|pGa!t9(HoD!~_S~ z0)Nlf9epGrE=IVgH&jFLv$vhQ>EQSYF44DhY{)to%ktRX3tyBUp_Z9R=tPc&8x(N;SHBpp8N_L@3*SQSTJmiw7tKqO*c zkf(1(%N-Wa!_8h2(mo<|I<4ITcTH{hVznj7?L3K>Y8Hc)*DV#B8T$o}izBo_6GZWh zw_XTmsM&vz3fc=%2xoe|Y0+7H9+$gh{zI*T?^k|SRI(`rN{X^RNCU*)M|tZxn{9?p zal@k2$u;k;?UuLt2E3LF1ET|Nz~4n{OqgZx_t*bpKUYWS!$G>4Xa8g8`O!lC#U{pg zrU(KncQt$0RA8=kiQvhbI|%;K6dV$o)N7e5rAxR=>qfU5Lm^V-Gcz`JMR8T1trz`G zC<|+yu!vxo$d6L=P`c?>N@_DtObS78`hX$|jtMw*LV5;DARpKk_Oe*~enHe-(cRoL z6RDooo9c>Fj!(eOv801`2T@bnWi^8SAg6jSeY=NGo$Zu7Iz?+NjS|16pX?10A=EbC zGB5?C_f2!@)I2O5mvq&o;_PO_l0CP~#dA!q%4$+k4RcW)qE}4In2(aRZEt6CcVm(u zcbPq>lpmC#BuGqtZg+Z?0}icHh)*N^1i^2yo@4TBZ1~bm15(!x(ebqDSYKE;cO%UW5nNSp-WpYxzk6|(fPcv8yDa5=F4jSoQwq(D^d=zI z8qnjcp3V&WJNsPIO;Wyz$-Morwur%;nnJD%xZvmNx_I_LKVtmT8Y>v#v=p!e)>$=Q zC*=O!@gX5pwSkdG8Rli&5jB%Ap@@VifP>uHBgb$uZ>YaryFMA7DPP!z9Sp7`#>R9Q zbHrq@ppC5*6OCDoefOBE!E3R zKp-j3dx5@pLHAnf1%RKr7Qyp-L=o<<)+OhH|Jn(0JO%P<7P8yeCExjVCfjjUpx!D@7Z1L2dT%?2N!l5MdN>SG-XCn8BsKcft+7aOX z1c0;QEAEOO2^jMlp1Ck4Ur9HA!FYk*1M?}IRl?yZDatjd2h9Koih`crfXJ)s-lpZ+ z{#AWO&P|GDtgy8QfMnMMjqX~z=>(^D7Dm)iw-!?ec9VJ8yw|pyL~_v-*SCk2u)>A4 zoI|=Oz+EH*6`~4FEd8lsnYvx$d-b3x)4Hwgj!*_6_ne|wn!|Nz53?`&>#-n3dZNc$IFL1wk_5JW zzM&==$^?p)7uFT?tF3t~igcz?WywgSSH9$7%O+Xs6qTVVC8P&^ZF2W=TJD!byuw(no&L}1#9UeekSDD?B@bHj?iGGP z_^|PpTBoK<^$O>-hL)DBpCmcI<%YC-L%|l04mP4i*XH7wUq#FO;|-;XRNPc1R7P;o z<6G`MF3X^#j@BLeDdEi3j}X8{-R<+(Gi^$qso~F9*tyMdRG5b0FF=w{Su(B+x0ue= z&A=rt&12$XX(vj@wE@c;QXuYrGXW5>(B6JemYnS^(P4Vgex3c|UPn9kOyu26S$KTc z(Lb8&`0D>`4+RH3I)lJ|w0Wlvqze0hFN z$bwQ!wVeE%BZKkkNl@mxWw`~UERDRXi@;>eCu3W@B!Cj_ECJI3YAt}6TX%EA+-{-k z5mnyMl(TLeSkzGz%gW@WaxS{;3{yflFonxd>K5y^s@;j82t#gj$(R1U7IGqcXbWMd z=QpZR-bIyP>HVFSTMak((HKd8KeXr_DJZF`vx$lw>WHoWYx z3Yyv}x}W^Os~KS{N-a3aTJ|yP(>MzHJ^*-;Gs(uc{}^Ls=#W5_=(KK`B{!w36AOF#Z+QNS7RJid`k#-HSCTT-Mz-)=_xhBO z*YN7vl9)EmGTqPIAuh<;V$RZ&XzTU0sngp?_5jg4HZg72k-`yffnbzGlmu{l>jiU_ z7OxSqQrRPR80VIYSHY5ZlOD&xT=n$aw7=u|Hv>X;Zdb-)IWt0X%!O7A~S_;%MKh9n)RXIm?L`V3mGHt%F3my?V_dMW5 z+U>gUyI0&1aWv{GdMpDG8#E@_EXC1bFZq8=|7vg~J}t6FZ(1551ZwHMKkH_5f`i#P1L4eRH! z6D6S`ot%sl1LvQw`IBk=Mz-Xv>0Q0w&^lqK<9cazV#pN%N%}HHp~bZ^qmVhVX5yJW zT{<@A5_@@O=RP&Ps??I*Q=9LJn$Dh&+wBYPyT2Gby&j$&Ms57=O>7Q*&(xY(p1Tz% zUfUV-O2kg@<*LOo)6Mejrd8wErLZs^LFqr2WqqD#o3`cw&iaLKZAt8fZ~$?k?z}Ga z*W_}xAvvm?Bl(7c1LIY*prmDu9n{ha%|k&g<2cMF^-#;+zXN9_NBm~%p+;Ux!t)*X`zd2jjaCiWJ{|&%+NorKc|Lq@^Er6DN$z`qp~g32xCu z3onx@|>j8;?VO!!X6$k39|KY<<-Lw>4kM!@5O%>CBbeQqC(t+4TV7bFJku zgGKF&R8-;5Gj(#dyP}V%0K1CRt6HX>a)ExbP^{B^{!J6wNoz?4OHhrlC%xuR@6gZH zPYN9~E5sGpDq0t?Eh)7`6AJD$pO&#-w6_xBMSLcd*CRaXx^)uevAMC7q+PvUT=}LV zc%RoV+LoJ-qU{TYz!cSo2$7uKgVx|g1;bQ*BfttB2lD-TfweQPrB+SiwT|=kw&e_r z<_YzYJ}3)@pHNLFMoH2x&5H`;2esb==Kg{`iNV57dzBX*_|I&6jAY_VY0T@|yGG7~ zst1gaDWghq3UX-TCt}jipI@os!kXXS-=@AqCYrfW@2wZUro%uZ_~E4nPr!!GbGjfs z9Yb!Uhb?7T$^_l?p2#&Anp|GPtAfQop%zp~{96)J@C%TYZIHs-kzCurMzuZaC`B3mgq5t?|Ah(e_E!jS zwRdhtxQL$rF!8_voT5{`g`lJcd; zCy&|NerZ4F(7gXxR(#J*sOQ*=pOQi@T-Zjf2RtikELXXUI_wV4@}po^BX`Czd*Pxo zryGFrifgTRyNKd2bk`zA7!Mg4L@-tw25lzNd>$?VK7fU8%mI`6)&%!-Tvdqg-uu^E z*8(C~n|F5Ui@TA`=@~X~NsK73vAwu&^jY0IyWroD)8$ij>5NieyT*ss6bvZfb_<^S z#0gl)s2Eh@0O^UT@_*BkKoys*n{t>V`FvE^%$rqk+Nv7zCFiaT{A{@iK{M}lrssX+ z49vx)&^dvFl^PD-$$IOK795|t+PdS*GK)^ho-8YoO&{Z=*Aa{%jg}D1U}B72Q^i4X zqWZV)3CASSCYXHugvFKk#t?|GT^K0|!A&Adtx%}L-Q-qx#{LG4p(I@Y!AmdoE`RQj z74p1$*1x))v=2OgTR3tZ9}=@#%TOn^B-g1sr>5V)aJoSU0{h&H-7@_3p&JG4Y~|4K z!|B4e{tQP^D%rJ;EDZo!F7DYTroJmI(lpk$mC7qcGVY$tra1{Uw6J$O9Y&Sph zVWQodul9to)X(bf`lCxAa5kkRX>tE9NWfAE0!#b;6zL`(5mQ;CsZ_*Gx}Wg=%rBY^ zg;)U7$reNeocXbBO_BK@Afv8%XHQab?;#5~QR~W?J$j-k0pwZ76ilYUZ)$7-C&uR& zS=y$`0#T@t0$32iVlgvAY3;RBjfqz`X(hD17(v9^1=ToB=wpH! zVhe~^?v6U?b{v0Zv}2D`y$!RX{L>WO`kMhq^b_)&4u*j`U&Gdy1oBIwOn(vq2}cIB zcbJ$h+s>DV6+(wa`F&+e$m96ZBU`id*B* zg)wFrj({D%R1h5Xa#(%$3;pV1%*!#hXoc%hVknEGO3d$%nd z7omAOaqjvBkVQdJ3gNRUAgN`#dl!F42^q8$K zVjYH;?c;*9KvqS9n?cccc%@9?o;M)j;#s(=`ZmGBo30-`&!#0;WVXGbiE$EVV~XVP zg-io)vZ>Mc&aRnaM2~@kASY}18XG%y?6D2CsUlB4N{Ap7t*!x*y{1scwP*e92hA1H zp+|$SC>?zOPeGqqhy;87|MO__=rFY<6i1dpE{+EXmdUo33V$fj#+-^cuHQ_Xst@l8 z->|-HNl&}m%%fyCu4SXX@)+-De^qe*2ef+5hWPNy=C(9r@V4|__s__S?>%;k<;@na zIcig_b0v~C7>z6LM;DJBu_K7|GQeGH@_d}U{L(o&jbHntwP*Fxpkz8=(|+PP-BH4}g0jec8#Fix-sE;(Th5qVs-*K#K(eQxajnkhp`ovfh*b`#c4OtIikDG#1`;E9o%IR26i^?1H0*rO5zK6oTHfdy_`Yt~&5N{sA-wQrYe!Wf(~=j`H&bEb zry+RnevA5+1-B$liW2iO8FjhY>|*UsSJ`0^!_|z$bA5!5JWbJz7nW9)a{ll|)NWgD zcJ?Ew#ih!(4lftX5@O*eov5{# z5A#x-0`o1H$PkGAGVZXzA5OhOoKI3Saq0nQYIA{E%7Afbir-PhUdwv2ug5np+PsyU zuCrKLdHo^1bjT?lMhmS4fiVHTa6J(5{9E0JTU>mYkW-J3MM0J5d3Xni>tI?H+Y+aK zY)V`8#CP;+F8RWvBSMo~td5p!CVIXciEa-&g)A!jE%bcPpnI);Hap91TK7}oPtjx@ z;ZQCi|D4WXXWjA;d|m5O|M!T~O2(@Lidi$hf!d5{`wq^$r@1Doa|)2RgpT@PK|Qkz zn<2Ai+Q};Weuou3D*L=zfn##5GI=+Z2V#{r{T4zvUE_$RocTH1o!>!)e!Eok)6H8x zgGX_f7y3;8`|^@{%(-bP$xYt~kdBT#~R2sKH<&;KFFbe10;^>NKzd)s5^49C`R}t8Koh7%f~p& zkYR2_5OvdCrb_>RfZ_GfHY4Q!02&H+OyyvHRqE_L3fcF0*ImMiJ?jdQHA)5UMjS_@ zuLOv4N}0ul>;7)ucVqWg@BuyCyqF9J%{nF6;cQk_`zL53`zWs)Q5yOQl0rz)v-*;F zNBrluaQYU{Pfb#lY-2WHP0FJp=qB*MGMqJL}`080r0k$?@ zjv#+5e5$UHSqRbs&X1GB{UjgMwDSaWbNas@q^roxI|E?i<$?bE65Uc1ufUbl%f50GhWN*3$!)h_Jn@^frR4(lWwx`fQ=Vc_2<+97mi!4Hi?0Qo1%CFI3a?-Hdd*q5?TLKUsl|8fr)I6@yK72a!dOkeXDZQgTyTi2=2 zUt5NxW`n^D`Zlas%2!{QS%O#=+CEfM2*0Y;jTRC&?MnoqPoX%}W1q_bW!;eWJ5|p0 zmEVKHS9dTvi`rg;!+!A2xmcT|@pX^8AWI1Dx~m+cbpchT$tm;ig?T1B>Y2er>1Ih| z%m+C-73T>H5%D5IWimzjzTMtjJvVS9x>oW1W@Q9MI!b-B?c`l^y_t;*AZwT)5NUVsl$`t{_7f1y&UcRWPEKjd!G z!164iPoSHkTz|x?kPDta=w9;KpRVkO(0;@cW|7psP;?a!I_$n+L=7i&kMSgUR9sfZISs`VtJKg;a{vo9ktmP;Jaz+^X8toy}2p==FVDPgC zcXWqzX$HCe13lhWmdI>5nohXP-aY(?1t%Fbcq%n^I$^Y|Et(593*%}C7t$T=E%m0F z45%ew$>gK9skB{lN(V^WsE4ARkai^TsTxG7AzkyRyya|L4H#m>i{aY;#{bTvJLkF(uW)MSeH2-S!-JqJV2x&Aur@c~qVA&9PM_u`n5& z*V*vIEG;Jknr+W1A5oktlyGhR2`b6(DnGg5q6s_kb-knprDR-nvI)2~dfgRUQ}nmo zP1VwCMHfozvZ0iKx3TwHR$asiJA(-=mA6w%@(wY#YcN(9;q6QKyrycZZ89j}Vie{0 zE@u|1F`mq!b`$pcdmmc?NP`=m#&QJ1jfq(nBCMgFuZon;S&RniOld6P@?QTvCsdr) zM~o))X+2e{g$9rW#OQP3{FyZQTOj4%M}9VyM{AA5D$vM_27dj7JeXrLRbZ%7{#wbt z58?(5%vx2W#h&8Wpd0a=NgG@}*c>a^)SHRpVgjp`6W^~e#*Nvn}RQF7xg>1jRgA9|4J>n zU90uVwc)>95ZZ>jgl-L((O2WywT2TgHn&W;!c<+hHMZ{R9I&wV1{CUiy1g^qyPnFf ztY42U$ucQ7_imW|dQUXwU2PlKa4*YSD1?z2p3vA&bkM62r@rx-3~zVcRgL3Zz#2Wt z$%mW%2`^eao7XZ?+v|Tavf)+p#)Af>>_@cgbWNudU)-Nq;75E{by7`W(et@qD_ z4v07HTI%le$rW>07sM9;Nh}E;@qHzpODxxP@VEV+lx{cO-$_rMCA2lEdehV$&Y^86 zsDAWLSjff17^LWxO!tTF<9Rc!PG|1t?R(q&e)NRcbxto$G{gkFas1hwn5E%5%caT9 zS53&87&i6=d_qO{FH1o#@xY}=^&&tPsc%FBF18=9gz)%x-S9xfSWe?11sNj8*L7~E zUFc~5^a=sqYjVooE+VSJbd8Q7!l-rfPd6!kkfE6D!<&L#!xwV;vI;F)Dmkb3lSlsk z@Z|{c?Zbch(@TQ~o@EMrSB)(`Qc2ORXfHL7L~2NByHecZ6s?9NT_)zYL=@ zq=57DZaqL$n<|v)|DP0x019-AZNJYn7LXm#RdyPNUsAnpdIm1m+u7-3%(*#Rqq9uW zVC-^4f^&xZooFlaZ`7!sJ;MDrQ6#?Y@HakS&_$;{+FM_q5@t&Zgs z|C*QZSsN!#GWP(jg95R-+dP+0@spN@S$})g!epOAwkm-g8g9&<5cRaF#B}qMuZeO4 z&~5H&r7beV3; z+9FX#&W09=&;(R&K`*%C{>?03^n2-{9zAg9LHMx+U(znuO49iGbai;RSr#~je|x?- zw(F+s5fbmTr%{am9j{Quzg&(Ibxe<0c^ym22`=5SA~$}_BJ`UDo{)DP@{5i!zzOC| zRT9iaZowLL`;K`rP1hZ9rpEc-~H`7!~beO*|XTDsLIG% z_utNc@rCF`&Q5q%I|n=Xz}(`Ah}BdEt;el%#B*La+aelLFhqld@>%_MrhAqcp7|eAKEuQL zFFFoa#J=@y^g3AmI=uZ#s*Cy;Q6HM_G5_`b4=U3ERx{9_eqn0HF9F`WV?zDK(B z^334+25upCe}1hihuE9=KdCXEIczdvD>|N{TtE|>h(#J z%rs+qI#KpGF#mA|>NX`=rKZ)WZyo!rY?9JbHzMYimKt_eHY}Z!uxFcwwOuj^gNhD+AMx z$tI*q&UCbexd1EM06)p=NTl39uJUGu+VFwpi3|K%WsuN%Ye+n~8lQ{PKI^DiESo2; z*vAV^yE+^=I;Ecfh91|UIY01D-z!_7b2>~Zua_q`nuqzjTgowDLv`vPW$#BEGV zciOI;l%4#a6o^&|spoo^H>}3_{H<=eDMPaNhbSc0kEXB0SeaY_UwklQ*|uE`lPR&f zQUU+EOyPj`^77MleXNY-5D$J zgxC`KNg64`+RsqOa{62Z2O!@2$`QFjz4<9LBxYrNgW2^&tN8KP@~^&L{XeV;TG*O5 zX~#ZO5TV27$rK3OO4IwC^)HwW;Kf>`3!^Ypk|P_D_>7$9dpGz34SiP=U?;&s6wSoE z6uFST+wqUAUMI`M$%&rk>F9YW7RI#~y}3DTRoDnyqvoAJ9GtVbcruupD_=7H{Ia<1 zA@QTYZC|<~qWd3V%HE${KGAOr9Z{9nR;Zz5P$BSJz)9WjAQ+6J?e$rzzt)m!vj}(5 zn@X;i&#QC^VGu-v?U(&D7#mFKWs4O=T$U3Qo66_rT57KPC?Nh!B7bUh=7Qj|_S}4)fy&3LdH8re-?z=VmH{^S z(Yd2X-TPhn=GW%@>cCA?7P}^#&)e+jfAq59Lr%enDNZP_eCs_w!W*Y)~YVGrg0Uv zMl;*w47}5GOV9SR@C}MMsB}EE`5lFHu-lUp5%a}{(%fxZ{_o!bQhG-*Fxv$;=I)nb z>AVoto-Usr99tGU#BmA!9x(4{Eoij;oKPI3wsVQ6gDA6c&a1?Cod7x=UhQP%9wBal zS0=X_=9!n?)R000m7dOKc#41vF<0m#$ch`!d>lBLDzE;itMtfh_-h+HXEonXe2G4r zC&WSviZI&JWA^Kt=}S7MDaB4@uQE0}d=mq%HszvVOu<%Wj7&u0)p-Oz_EZK2mVh&I zmjetf`aU8mz*R@<^&rhk`h{!GMEM}X0MYZN6k|z4x}cFX;y0eui_!YRyLBx-?IuwC zz2Ju{YV*E(EPUXT-W2#0R@EOsPyX7&6;8@!f$^hypQNZp-W|sAN=MRqozzy{c~TB7 zx*j#Eyan;oJjT$V4oA=!B=LWtflL7t6gC^sNsZxMjQ*z8<~)#aqr;-Z0tLo4*}CAF za?O$+zJ?yoIQ2E)Jy+N@Qc?HW_G7IHkIQt!d99BWo!e2ymrk3v_qu)tCijPV&7%{# zH~b{B_QTBuIcqU_)UM6B&C$dr73Cb=@4z**W4A2G+s47b9^;>$qmA7Barzvw_D7*l zoRg#=Eg*4@dy4i~IKIRL>v%ly|7)cAJZftH!Tv*o@#w+Yl=5F0WfFAElI|&x8I+Uo zEP~CfhW-5iR(H5KHC7>^zEF?7ziQG`l7jcegdDEjBOIJ5@$BSUu0>qW1tFBqMel8% zJhM?5=DfNLSH6^D1bMr3{o42yOoV68C#OGeksE*vc$S zoE{D4f+K0%9J;rbWLE=XFbm46v3H$o-V1V>ov!NBpR_@z3e33eqN&>Xmb(T4z~8-m zdO+gI&9d{kX@%GZHeN((Ez+Z3fL2yGFG0Q6ymQH0qbE}a+&*_qF(%dY{RTUiL2E^vFB*; z^JI_rOsD%dJZ{`JXK*N+*>WG0tcQJcf>qS)DD>I^As6|d`vfDc>+2n7Vi_#Yl-g~T z`yDKO%PPw2^)#(r>7D+VK8;x<3`x=)qIDC9XWf-@odp%M1aV$qgqoIlKCP@?f9GIkZj3q&7AJEDgq9;+J$PCgsu>I8yg z+NZZQtWHsq>l?UsWi5hJa=4h6v+o^4C)xSgW6Kq#u)`I80$b)FIGF_U6bq0HY<=>@FW{@dt`<+L- zm#vkn|Tk<%18p2j!1q1ms+FG&|?>CJMYMP%m&sU>Q*VOI-E6b zmUB!_Q-{lnsZ>k#!d~~X9}rg%WQC~dy&uJ+n_-Vz92IE#Z-)0}7~xg)C;eNs)Q!-s zmsbUuT8X-h`oE+*Y-Dd*m$U_|7T+0M1(f)G+~X%X{9pK|Mm6&^c5W!{Cp4n?u1bP z!=9l|&`)0&V9b=?J3I_jsbz66?ITeFp8^2 zM3Uj@8$McdTW9?@YsTV_t%+8J!|_BMCGms3y&_us z3LEZuxTOq?Jsi5yb_um68`M-c?Qk>jhRvqzL3W07)0sUCV@wP!^auB zPj!#yHk>}csNb{8dh0LUIWW**geUjNbGr@!IzEz@QZx9|^wdi?ii3CN)EPLc++aA9 z1G(l}t#N;xWmNk`X>nx=AXl9MChNFuYAf&Jh`N?W-I*!iOdZGak7;*3#9_-G-A9`e ze>i)LN>#(>Oxj90+gUG=vwdEs{pd?w)ZHqf##s za70T}tkb;&f0`{PbEAP&x#N@LjUZuoE>C6;-hV#fs}Hp^aU~5+-WrEW(L-AR!SDz- zch_yDg@z+;7nJ%3zR9LyqH<+107fp>*Wz7k+8M3D+E5+INK46O3&PjHMQhhe<&LyI zigFs^7yFjn%YOcJ)yLyTF;UN<^!hleSUe|d??O3wpjY>%s_NO1Ah#!m)QdhTjYrKN zlp?id1@}{Z+M>qnaObO^rl1Sg%MHRpqf66GMr9�p3;Rd!*VIaNR3mF%Ka$uOwbh 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 nUysE$9u;(yUa{tb#NakwolUzRM3&QObad5%g%X Date: Sun, 17 Nov 2024 15:18:54 +0400 Subject: [PATCH 08/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D0=B2=D0=BE?= =?UTF-8?q?=D0=B4=D0=B8=D1=82=D0=B5=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Forms/FormDrivers.Designer.cs | 127 ++++++++++++++++++ .../FuelAndLubricants/Forms/FormDrivers.cs | 103 ++++++++++++++ .../FuelAndLubricants/Forms/FormDrivers.resx | 120 +++++++++++++++++ .../Properties/Resources.Designer.cs | 30 +++++ .../Properties/Resources.resx | 9 ++ .../Resources/Добавить.png | Bin 0 -> 9055 bytes .../Resources/Редактировать.png | Bin 0 -> 11070 bytes .../Resources/Удалить.png | Bin 0 -> 12343 bytes 8 files changed, 389 insertions(+) create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormDrivers.Designer.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormDrivers.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormDrivers.resx create mode 100644 FuelAndLubricants/FuelAndLubricants/Resources/Добавить.png create mode 100644 FuelAndLubricants/FuelAndLubricants/Resources/Редактировать.png create mode 100644 FuelAndLubricants/FuelAndLubricants/Resources/Удалить.png diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormDrivers.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormDrivers.Designer.cs new file mode 100644 index 0000000..91aa935 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormDrivers.Designer.cs @@ -0,0 +1,127 @@ +namespace FuelAndLubricants.Forms +{ + partial class FormDrivers + { + ///

+ /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + buttonDel = new Button(); + buttonUpd = new Button(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.ImeMode = ImeMode.NoControl; + panel1.Location = new Point(660, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(89, 264); + panel1.TabIndex = 0; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.Удалить; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(6, 174); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(75, 75); + buttonDel.TabIndex = 2; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonUpd + // + buttonUpd.BackgroundImage = Properties.Resources.Редактировать; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(6, 93); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(75, 75); + buttonUpd.TabIndex = 1; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += ButtonUpd_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Добавить; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(6, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 75); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(660, 264); + dataGridView.TabIndex = 1; + // + // FormDrivers + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(749, 264); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormDrivers"; + StartPosition = FormStartPosition.CenterParent; + Text = "Водители"; + Load += FormDrivers_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormDrivers.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormDrivers.cs new file mode 100644 index 0000000..4d773e5 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormDrivers.cs @@ -0,0 +1,103 @@ +using FuelAndLubricants.Repositories; +using Unity; + +namespace FuelAndLubricants.Forms +{ + public partial class FormDrivers : Form + { + private readonly IUnityContainer _container; + + private readonly IDriverRepository _driverRepository; + + public FormDrivers(IUnityContainer container, IDriverRepository driverRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _driverRepository = driverRepository ?? + throw new ArgumentNullException(nameof(driverRepository)); + + } + + private void FormDrivers_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + return; + + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + return; + + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + return; + + try + { + _driverRepository.DeleteDriver(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void LoadList() => dataGridView.DataSource = _driverRepository.ReadDrivers(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Driver_ID"].Value); + return true; + } + + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormDrivers.resx b/FuelAndLubricants/FuelAndLubricants/Forms/FormDrivers.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormDrivers.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Properties/Resources.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Properties/Resources.Designer.cs index 6091d21..9d3b463 100644 --- a/FuelAndLubricants/FuelAndLubricants/Properties/Resources.Designer.cs +++ b/FuelAndLubricants/FuelAndLubricants/Properties/Resources.Designer.cs @@ -69,5 +69,35 @@ namespace FuelAndLubricants.Properties { return ((System.Drawing.Bitmap)(obj)); } } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Добавить { + get { + object obj = ResourceManager.GetObject("Добавить", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Редактировать { + get { + object obj = ResourceManager.GetObject("Редактировать", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Удалить { + get { + object obj = ResourceManager.GetObject("Удалить", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/FuelAndLubricants/FuelAndLubricants/Properties/Resources.resx b/FuelAndLubricants/FuelAndLubricants/Properties/Resources.resx index 589857c..f20a0d8 100644 --- a/FuelAndLubricants/FuelAndLubricants/Properties/Resources.resx +++ b/FuelAndLubricants/FuelAndLubricants/Properties/Resources.resx @@ -121,4 +121,13 @@ ..\Resources\ГСМ.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Добавить.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Редактировать.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Удалить.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Resources/Добавить.png b/FuelAndLubricants/FuelAndLubricants/Resources/Добавить.png new file mode 100644 index 0000000000000000000000000000000000000000..ecc20e3375e2e7135b68c818c1cd494f03fb7482 GIT binary patch literal 9055 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
*hNo;_(mVg2i?&X$Fu;YYau0ex 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 literal 0 HcmV?d00001 -- 2.25.1 From d796e00cd763cc151e679ab24f7a1f57263d6a25 Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 15:43:07 +0400 Subject: [PATCH 09/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D0=BC=D0=B0?= =?UTF-8?q?=D1=88=D0=B8=D0=BD=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Forms/FormCar.Designer.cs | 189 ++++++++++++++++++ .../FuelAndLubricants/Forms/FormCar.cs | 91 +++++++++ .../FuelAndLubricants/Forms/FormCar.resx | 120 +++++++++++ 3 files changed, 400 insertions(+) create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormCar.Designer.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormCar.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormCar.resx diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.Designer.cs new file mode 100644 index 0000000..d41e33e --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.Designer.cs @@ -0,0 +1,189 @@ +namespace FuelAndLubricants.Forms +{ + partial class FormCar + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + checkedListBoxDriverLicense = new CheckedListBox(); + buttonDriverCancel = new Button(); + buttonDriverSave = new Button(); + label3 = new Label(); + textBoxCarModel = new TextBox(); + label2 = new Label(); + textBoxCarMark = new TextBox(); + label1 = new Label(); + comboBoxCarType = new ComboBox(); + label4 = new Label(); + numericUpDownConsumptionRate = new NumericUpDown(); + label5 = new Label(); + ((System.ComponentModel.ISupportInitialize)numericUpDownConsumptionRate).BeginInit(); + SuspendLayout(); + // + // checkedListBoxDriverLicense + // + checkedListBoxDriverLicense.FormattingEnabled = true; + checkedListBoxDriverLicense.Location = new Point(107, 97); + checkedListBoxDriverLicense.Name = "checkedListBoxDriverLicense"; + checkedListBoxDriverLicense.Size = new Size(140, 94); + checkedListBoxDriverLicense.TabIndex = 17; + // + // buttonDriverCancel + // + buttonDriverCancel.Location = new Point(172, 232); + buttonDriverCancel.Name = "buttonDriverCancel"; + buttonDriverCancel.Size = new Size(75, 23); + buttonDriverCancel.TabIndex = 16; + buttonDriverCancel.Text = "Отмена"; + buttonDriverCancel.UseVisualStyleBackColor = true; + // + // buttonDriverSave + // + buttonDriverSave.Location = new Point(9, 232); + buttonDriverSave.Name = "buttonDriverSave"; + buttonDriverSave.Size = new Size(75, 23); + buttonDriverSave.TabIndex = 15; + buttonDriverSave.Text = "Сохранить"; + buttonDriverSave.UseVisualStyleBackColor = true; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(9, 97); + label3.Name = "label3"; + label3.Size = new Size(92, 15); + label3.TabIndex = 14; + label3.Text = "Категория прав"; + // + // textBoxCarModel + // + textBoxCarModel.Location = new Point(107, 39); + textBoxCarModel.Name = "textBoxCarModel"; + textBoxCarModel.Size = new Size(140, 23); + textBoxCarModel.TabIndex = 13; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(9, 42); + label2.Name = "label2"; + label2.Size = new Size(50, 15); + label2.TabIndex = 12; + label2.Text = "Модель"; + // + // textBoxCarMark + // + textBoxCarMark.Location = new Point(107, 10); + textBoxCarMark.Name = "textBoxCarMark"; + textBoxCarMark.Size = new Size(140, 23); + textBoxCarMark.TabIndex = 11; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(9, 13); + label1.Name = "label1"; + label1.Size = new Size(43, 15); + label1.TabIndex = 10; + label1.Text = "Марка"; + // + // comboBoxCarType + // + comboBoxCarType.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxCarType.FormattingEnabled = true; + comboBoxCarType.Location = new Point(107, 68); + comboBoxCarType.Name = "comboBoxCarType"; + comboBoxCarType.Size = new Size(140, 23); + comboBoxCarType.TabIndex = 18; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(9, 71); + label4.Name = "label4"; + label4.Size = new Size(79, 15); + label4.TabIndex = 19; + label4.Text = "Тип машины"; + // + // numericUpDownConsumptionRate + // + numericUpDownConsumptionRate.DecimalPlaces = 2; + numericUpDownConsumptionRate.Location = new Point(107, 197); + numericUpDownConsumptionRate.Minimum = new decimal(new int[] { 1, 0, 0, 131072 }); + numericUpDownConsumptionRate.Name = "numericUpDownConsumptionRate"; + numericUpDownConsumptionRate.Size = new Size(140, 23); + numericUpDownConsumptionRate.TabIndex = 20; + numericUpDownConsumptionRate.Value = new decimal(new int[] { 1, 0, 0, 131072 }); + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(9, 199); + label5.Name = "label5"; + label5.Size = new Size(93, 15); + label5.TabIndex = 21; + label5.Text = "Расход топлива"; + // + // FormCar + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(262, 266); + Controls.Add(label5); + Controls.Add(numericUpDownConsumptionRate); + Controls.Add(label4); + Controls.Add(comboBoxCarType); + Controls.Add(checkedListBoxDriverLicense); + Controls.Add(buttonDriverCancel); + Controls.Add(buttonDriverSave); + Controls.Add(label3); + Controls.Add(textBoxCarModel); + Controls.Add(label2); + Controls.Add(textBoxCarMark); + Controls.Add(label1); + Name = "FormCar"; + Text = "FormCar"; + ((System.ComponentModel.ISupportInitialize)numericUpDownConsumptionRate).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private CheckedListBox checkedListBoxDriverLicense; + private Button buttonDriverCancel; + private Button buttonDriverSave; + private Label label3; + private TextBox textBoxCarModel; + private Label label2; + private TextBox textBoxCarMark; + private Label label1; + private ComboBox comboBoxCarType; + private Label label4; + private NumericUpDown numericUpDownConsumptionRate; + private Label label5; + } +} \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.cs new file mode 100644 index 0000000..9529bdc --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.cs @@ -0,0 +1,91 @@ +using FuelAndLubricants.Entities; +using FuelAndLubricants.Entities.Enums; +using FuelAndLubricants.Repositories; + +namespace FuelAndLubricants.Forms +{ + public partial class FormCar: Form + { + private readonly ICarRepository _carRepository; + + private int? _carId; + + public int Id + { + set + { + try + { + var car = _carRepository.ReadCarByID(value); + if (car == null) + throw new InvalidOperationException(nameof(car)); + + foreach (Driver_License elem in Enum.GetValues(typeof(Driver_License))) + { + if ((elem & car.License) != 0) + { + checkedListBoxDriverLicense.SetItemChecked(checkedListBoxDriverLicense.Items.IndexOf(elem), true); + } + } + + + textBoxCarMark.Text = car.Car_Mark; + textBoxCarModel.Text = car.Car_Model; + comboBoxCarType.SelectedItem = car.Car_Type; + numericUpDownConsumptionRate.Value = (decimal)car.Consumption_Rate; + + _carId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormCar(ICarRepository carRepository) + { + InitializeComponent(); + _carRepository = carRepository ?? + throw new ArgumentNullException(nameof(carRepository)); + + foreach (var elem in Enum.GetValues(typeof(Driver_License))) + checkedListBoxDriverLicense.Items.Add(elem); + + comboBoxCarType.DataSource = Enum.GetValues(typeof(Car_Type)); + } + + private void ButtonCarSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxCarMark.Text) || string.IsNullOrWhiteSpace(textBoxCarModel.Text) || comboBoxCarType.SelectedIndex < 1 || checkedListBoxDriverLicense.CheckedItems.Count == 0) + throw new Exception("Имеются незаполненные поля"); + + if (_carId.HasValue) + _carRepository.UpdateCar(CreateCar(_carId.Value)); + else + _carRepository.CreateCar(CreateCar(0)); + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private Car CreateCar(int id) + { + Driver_License driver_License = Driver_License.None; + foreach (var elem in checkedListBoxDriverLicense.CheckedItems) + { + driver_License |= (Driver_License)elem; + } + + return Car.CreateEntity(id, textBoxCarMark.Text, textBoxCarModel.Text, (Car_Type)comboBoxCarType.SelectedItem!, driver_License, (float)numericUpDownConsumptionRate.Value); + } + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.resx b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file -- 2.25.1 From f3befed5dd025f96f7a68daaf7592a15483adfed Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 15:59:55 +0400 Subject: [PATCH 10/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D0=BC=D0=B0?= =?UTF-8?q?=D1=88=D0=B8=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Forms/FormCars.Designer.cs | 125 ++++++++++++++++++ .../FuelAndLubricants/Forms/FormCars.cs | 110 +++++++++++++++ .../FuelAndLubricants/Forms/FormCars.resx | 120 +++++++++++++++++ 3 files changed, 355 insertions(+) create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormCars.Designer.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormCars.resx diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.Designer.cs new file mode 100644 index 0000000..c3a7fee --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.Designer.cs @@ -0,0 +1,125 @@ +namespace FuelAndLubricants.Forms +{ + partial class FormCars + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + buttonDel = new Button(); + buttonUpd = new Button(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(681, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(99, 259); + panel1.TabIndex = 0; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.Удалить; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(12, 174); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(75, 75); + buttonDel.TabIndex = 5; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonUpd + // + buttonUpd.BackgroundImage = Properties.Resources.Редактировать; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(12, 93); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(75, 75); + buttonUpd.TabIndex = 4; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += ButtonUpd_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Добавить; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(12, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 75); + buttonAdd.TabIndex = 3; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(681, 259); + dataGridView.TabIndex = 2; + // + // FormCars + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(780, 259); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormCars"; + Text = "Машины"; + Load += FormCars_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs new file mode 100644 index 0000000..3c036eb --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using FuelAndLubricants.Repositories; +using FuelAndLubricants.Repositories.Implementations; +using Unity; + +namespace FuelAndLubricants.Forms +{ + public partial class FormCars : Form + { + private readonly IUnityContainer _container; + + private readonly ICarRepository _carRepository; + + public FormCars(IUnityContainer container, ICarRepository carRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _carRepository = carRepository ?? + throw new ArgumentNullException(nameof(carRepository)); + } + + private void FormCars_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + return; + + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + return; + + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + return; + + try + { + _carRepository.DeleteCar(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _carRepository.ReadCars(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Car_ID"].Value); + return true; + } + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.resx b/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file -- 2.25.1 From 123401c6193e961591bbae6092b246f9337e985d Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 16:16:03 +0400 Subject: [PATCH 11/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D1=82=D0=BE?= =?UTF-8?q?=D0=BF=D0=BB=D0=B8=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Forms/FormCar.Designer.cs | 42 ++--- .../Forms/FormFuel.Designer.cs | 151 ++++++++++++++++++ .../FuelAndLubricants/Forms/FormFuel.cs | 72 +++++++++ .../FuelAndLubricants/Forms/FormFuel.resx | 120 ++++++++++++++ .../Repositories/IFuelRepository.cs | 2 +- 5 files changed, 366 insertions(+), 21 deletions(-) create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormFuel.Designer.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormFuel.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormFuel.resx diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.Designer.cs index d41e33e..aea1ce5 100644 --- a/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.Designer.cs +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.Designer.cs @@ -29,8 +29,8 @@ private void InitializeComponent() { checkedListBoxDriverLicense = new CheckedListBox(); - buttonDriverCancel = new Button(); - buttonDriverSave = new Button(); + buttonCancel = new Button(); + buttonCarSave = new Button(); label3 = new Label(); textBoxCarModel = new TextBox(); label2 = new Label(); @@ -51,23 +51,25 @@ checkedListBoxDriverLicense.Size = new Size(140, 94); checkedListBoxDriverLicense.TabIndex = 17; // - // buttonDriverCancel + // buttonCancel // - buttonDriverCancel.Location = new Point(172, 232); - buttonDriverCancel.Name = "buttonDriverCancel"; - buttonDriverCancel.Size = new Size(75, 23); - buttonDriverCancel.TabIndex = 16; - buttonDriverCancel.Text = "Отмена"; - buttonDriverCancel.UseVisualStyleBackColor = true; + buttonCancel.Location = new Point(172, 232); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 16; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; // - // buttonDriverSave + // buttonCarSave // - buttonDriverSave.Location = new Point(9, 232); - buttonDriverSave.Name = "buttonDriverSave"; - buttonDriverSave.Size = new Size(75, 23); - buttonDriverSave.TabIndex = 15; - buttonDriverSave.Text = "Сохранить"; - buttonDriverSave.UseVisualStyleBackColor = true; + buttonCarSave.Location = new Point(9, 232); + buttonCarSave.Name = "buttonCarSave"; + buttonCarSave.Size = new Size(75, 23); + buttonCarSave.TabIndex = 15; + buttonCarSave.Text = "Сохранить"; + buttonCarSave.UseVisualStyleBackColor = true; + buttonCarSave.Click += ButtonCarSave_Click; // // label3 // @@ -157,8 +159,8 @@ Controls.Add(label4); Controls.Add(comboBoxCarType); Controls.Add(checkedListBoxDriverLicense); - Controls.Add(buttonDriverCancel); - Controls.Add(buttonDriverSave); + Controls.Add(buttonCancel); + Controls.Add(buttonCarSave); Controls.Add(label3); Controls.Add(textBoxCarModel); Controls.Add(label2); @@ -174,8 +176,8 @@ #endregion private CheckedListBox checkedListBoxDriverLicense; - private Button buttonDriverCancel; - private Button buttonDriverSave; + private Button buttonCancel; + private Button buttonCarSave; private Label label3; private TextBox textBoxCarModel; private Label label2; diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormFuel.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormFuel.Designer.cs new file mode 100644 index 0000000..534b377 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormFuel.Designer.cs @@ -0,0 +1,151 @@ +namespace FuelAndLubricants.Forms +{ + partial class FormFuel + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + label5 = new Label(); + numericUpDownPrice = new NumericUpDown(); + buttonCancel = new Button(); + buttonFuelSave = new Button(); + label1 = new Label(); + comboBoxFuelType = new ComboBox(); + label2 = new Label(); + numericUpDownAmount = new NumericUpDown(); + ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownAmount).BeginInit(); + SuspendLayout(); + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(7, 40); + label5.Name = "label5"; + label5.Size = new Size(78, 15); + label5.TabIndex = 33; + label5.Text = "Цена за литр"; + // + // numericUpDownPrice + // + numericUpDownPrice.DecimalPlaces = 2; + numericUpDownPrice.Location = new Point(105, 38); + numericUpDownPrice.Minimum = new decimal(new int[] { 1, 0, 0, 131072 }); + numericUpDownPrice.Name = "numericUpDownPrice"; + numericUpDownPrice.Size = new Size(140, 23); + numericUpDownPrice.TabIndex = 32; + numericUpDownPrice.Value = new decimal(new int[] { 1, 0, 0, 131072 }); + // + // buttonCancel + // + buttonCancel.Location = new Point(170, 106); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 28; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonFuelSave + // + buttonFuelSave.Location = new Point(7, 106); + buttonFuelSave.Name = "buttonFuelSave"; + buttonFuelSave.Size = new Size(75, 23); + buttonFuelSave.TabIndex = 27; + buttonFuelSave.Text = "Сохранить"; + buttonFuelSave.UseVisualStyleBackColor = true; + buttonFuelSave.Click += ButtonFuelSave_Click; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(7, 12); + label1.Name = "label1"; + label1.Size = new Size(75, 15); + label1.TabIndex = 35; + label1.Text = "Тип топлива"; + // + // comboBoxFuelType + // + comboBoxFuelType.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxFuelType.FormattingEnabled = true; + comboBoxFuelType.Location = new Point(105, 9); + comboBoxFuelType.Name = "comboBoxFuelType"; + comboBoxFuelType.Size = new Size(140, 23); + comboBoxFuelType.TabIndex = 34; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(7, 69); + label2.Name = "label2"; + label2.Size = new Size(72, 15); + label2.TabIndex = 37; + label2.Text = "Количество"; + // + // numericUpDownAmount + // + numericUpDownAmount.DecimalPlaces = 2; + numericUpDownAmount.Location = new Point(105, 67); + numericUpDownAmount.Minimum = new decimal(new int[] { 1, 0, 0, 131072 }); + numericUpDownAmount.Name = "numericUpDownAmount"; + numericUpDownAmount.Size = new Size(140, 23); + numericUpDownAmount.TabIndex = 36; + numericUpDownAmount.Value = new decimal(new int[] { 1, 0, 0, 131072 }); + // + // FormFuel + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(256, 136); + Controls.Add(label2); + Controls.Add(numericUpDownAmount); + Controls.Add(label1); + Controls.Add(comboBoxFuelType); + Controls.Add(label5); + Controls.Add(numericUpDownPrice); + Controls.Add(buttonCancel); + Controls.Add(buttonFuelSave); + Name = "FormFuel"; + Text = "FormFuel"; + ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownAmount).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label label5; + private NumericUpDown numericUpDownPrice; + private Button buttonCancel; + private Button buttonFuelSave; + private Label label1; + private ComboBox comboBoxFuelType; + private Label label2; + private NumericUpDown numericUpDownAmount; + } +} \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormFuel.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormFuel.cs new file mode 100644 index 0000000..ae8ee7e --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormFuel.cs @@ -0,0 +1,72 @@ +using FuelAndLubricants.Entities; +using FuelAndLubricants.Entities.Enums; +using FuelAndLubricants.Repositories; + +namespace FuelAndLubricants.Forms +{ + public partial class FormFuel : Form + { + private readonly IFuelRepository _fuelRepository; + + private int? _fuelId; + + public int Id + { + set + { + try + { + var fuel = _fuelRepository.ReadFuelByID(value); + if (fuel == null) + throw new InvalidOperationException(nameof(fuel)); + + comboBoxFuelType.SelectedItem = fuel.Fuel_Type; + numericUpDownPrice.Value = (decimal)fuel.Price_Per_Liter; + numericUpDownAmount.Value = (decimal)fuel.Amount; + + _fuelId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormFuel(IFuelRepository fuelRepository) + { + InitializeComponent(); + _fuelRepository = fuelRepository ?? + throw new ArgumentNullException(nameof(fuelRepository)); + + comboBoxFuelType.DataSource = Enum.GetValues(typeof(Fuel_Type)); + } + + private void ButtonFuelSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxFuelType.SelectedIndex < 1) + throw new Exception("Имеются незаполненные поля"); + + if (_fuelId.HasValue) + _fuelRepository.UpdateFuel(CreateFuel(_fuelId.Value)); + else + _fuelRepository.CreateFuel(CreateFuel(0)); + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private Fuel_And_Lubricants CreateFuel(int id) + { + return Fuel_And_Lubricants.CreateEntity(id, (Fuel_Type)comboBoxFuelType.SelectedItem!, (float)numericUpDownPrice.Value, (float)numericUpDownAmount.Value); + } + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormFuel.resx b/FuelAndLubricants/FuelAndLubricants/Forms/FormFuel.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormFuel.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/IFuelRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/IFuelRepository.cs index 5988b93..f02721c 100644 --- a/FuelAndLubricants/FuelAndLubricants/Repositories/IFuelRepository.cs +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/IFuelRepository.cs @@ -8,7 +8,7 @@ public interface IFuelRepository Fuel_And_Lubricants ReadFuelByID(int id); - void CreateDriver(Fuel_And_Lubricants fuel); + void CreateFuel(Fuel_And_Lubricants fuel); void UpdateFuel(Fuel_And_Lubricants fuel); -- 2.25.1 From 35c3afde61795503c20536b440c866d4f808dbb3 Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 16:21:45 +0400 Subject: [PATCH 12/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D1=82=D0=BE?= =?UTF-8?q?=D0=BF=D0=BB=D0=B8=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FuelAndLubricants/Forms/FormCars.cs | 12 +- .../Forms/FormFuels.Designer.cs | 125 ++++++++++++++++++ .../FuelAndLubricants/Forms/FormFuels.cs | 100 ++++++++++++++ .../FuelAndLubricants/Forms/FormFuels.resx | 120 +++++++++++++++++ 4 files changed, 346 insertions(+), 11 deletions(-) create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormFuels.Designer.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormFuels.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormFuels.resx diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs index 3c036eb..797ff16 100644 --- a/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs @@ -1,14 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using FuelAndLubricants.Repositories; -using FuelAndLubricants.Repositories.Implementations; +using FuelAndLubricants.Repositories; using Unity; namespace FuelAndLubricants.Forms diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormFuels.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormFuels.Designer.cs new file mode 100644 index 0000000..a665fee --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormFuels.Designer.cs @@ -0,0 +1,125 @@ +namespace FuelAndLubricants.Forms +{ + partial class FormFuels + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + buttonDel = new Button(); + buttonUpd = new Button(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(531, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(101, 261); + panel1.TabIndex = 0; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.Удалить; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(13, 174); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(75, 75); + buttonDel.TabIndex = 8; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonUpd + // + buttonUpd.BackgroundImage = Properties.Resources.Редактировать; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(13, 93); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(75, 75); + buttonUpd.TabIndex = 7; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += ButtonUpd_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Добавить; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(13, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 75); + buttonAdd.TabIndex = 6; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(531, 261); + dataGridView.TabIndex = 3; + // + // FormFuels + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(632, 261); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormFuels"; + Text = "Топлива"; + Load += FormFuels_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormFuels.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormFuels.cs new file mode 100644 index 0000000..31bd21e --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormFuels.cs @@ -0,0 +1,100 @@ +using FuelAndLubricants.Repositories; +using Unity; + +namespace FuelAndLubricants.Forms +{ + public partial class FormFuels : Form + { + private readonly IUnityContainer _container; + + private readonly IFuelRepository _fuelRepository; + + public FormFuels(IUnityContainer container, IFuelRepository fuelRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _fuelRepository = fuelRepository ?? + throw new ArgumentNullException(nameof(fuelRepository)); + } + + private void FormFuels_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + return; + + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + return; + + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + return; + + try + { + _fuelRepository.DeleteFuel(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _fuelRepository.ReadFuels(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Fuel_ID"].Value); + return true; + } + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormFuels.resx b/FuelAndLubricants/FuelAndLubricants/Forms/FormFuels.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormFuels.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file -- 2.25.1 From 101d7da28d14589438bf41746962cbc7dd4fca14 Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 16:32:00 +0400 Subject: [PATCH 13/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D0=BF=D1=83?= =?UTF-8?q?=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FuelAndLubricants/Forms/FormCar.cs | 4 +- .../FuelAndLubricants/Forms/FormCars.cs | 4 +- .../Forms/FormRoute.Designer.cs | 144 ++++++++++++++++++ .../FuelAndLubricants/Forms/FormRoute.cs | 70 +++++++++ .../FuelAndLubricants/Forms/FormRoute.resx | 120 +++++++++++++++ .../FuelAndLubricants/Program.cs | 2 +- .../Repositories/ICarRepository.cs | 2 +- .../Implementations/CarRepository.cs | 2 +- 8 files changed, 341 insertions(+), 7 deletions(-) create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormRoute.Designer.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormRoute.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormRoute.resx diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.cs index 9529bdc..3258c8c 100644 --- a/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.cs +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.cs @@ -6,7 +6,7 @@ namespace FuelAndLubricants.Forms { public partial class FormCar: Form { - private readonly ICarRepository _carRepository; + private readonly IRouteRepository _carRepository; private int? _carId; @@ -43,7 +43,7 @@ namespace FuelAndLubricants.Forms } } } - public FormCar(ICarRepository carRepository) + public FormCar(IRouteRepository carRepository) { InitializeComponent(); _carRepository = carRepository ?? diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs index 797ff16..aea072b 100644 --- a/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs @@ -7,9 +7,9 @@ namespace FuelAndLubricants.Forms { private readonly IUnityContainer _container; - private readonly ICarRepository _carRepository; + private readonly IRouteRepository _carRepository; - public FormCars(IUnityContainer container, ICarRepository carRepository) + public FormCars(IUnityContainer container, IRouteRepository carRepository) { InitializeComponent(); _container = container ?? diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormRoute.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormRoute.Designer.cs new file mode 100644 index 0000000..2c1d86a --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormRoute.Designer.cs @@ -0,0 +1,144 @@ +namespace FuelAndLubricants.Forms +{ + partial class FormRoute + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + label5 = new Label(); + numericUpDownLength = new NumericUpDown(); + buttonCancel = new Button(); + buttonRouteSave = new Button(); + textBoxEndPoint = new TextBox(); + label2 = new Label(); + textBoxStartPoint = new TextBox(); + label1 = new Label(); + ((System.ComponentModel.ISupportInitialize)numericUpDownLength).BeginInit(); + SuspendLayout(); + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(10, 70); + label5.Name = "label5"; + label5.Size = new Size(102, 15); + label5.TabIndex = 33; + label5.Text = "Длина маршрута"; + // + // numericUpDownLength + // + numericUpDownLength.DecimalPlaces = 2; + numericUpDownLength.Location = new Point(117, 68); + numericUpDownLength.Minimum = new decimal(new int[] { 1, 0, 0, 131072 }); + numericUpDownLength.Name = "numericUpDownLength"; + numericUpDownLength.Size = new Size(140, 23); + numericUpDownLength.TabIndex = 32; + numericUpDownLength.Value = new decimal(new int[] { 1, 0, 0, 131072 }); + // + // buttonCancel + // + buttonCancel.Location = new Point(182, 102); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 28; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonRouteSave + // + buttonRouteSave.Location = new Point(10, 102); + buttonRouteSave.Name = "buttonRouteSave"; + buttonRouteSave.Size = new Size(75, 23); + buttonRouteSave.TabIndex = 27; + buttonRouteSave.Text = "Сохранить"; + buttonRouteSave.UseVisualStyleBackColor = true; + buttonRouteSave.Click += ButtonRouteSave_Click; + // + // textBoxEndPoint + // + textBoxEndPoint.Location = new Point(117, 39); + textBoxEndPoint.Name = "textBoxEndPoint"; + textBoxEndPoint.Size = new Size(140, 23); + textBoxEndPoint.TabIndex = 25; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(10, 42); + label2.Name = "label2"; + label2.Size = new Size(94, 15); + label2.TabIndex = 24; + label2.Text = "Конечная точка"; + // + // textBoxStartPoint + // + textBoxStartPoint.Location = new Point(117, 10); + textBoxStartPoint.Name = "textBoxStartPoint"; + textBoxStartPoint.Size = new Size(140, 23); + textBoxStartPoint.TabIndex = 23; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(10, 13); + label1.Name = "label1"; + label1.Size = new Size(101, 15); + label1.TabIndex = 22; + label1.Text = "Начальная точка"; + // + // FormRoute + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(267, 134); + Controls.Add(label5); + Controls.Add(numericUpDownLength); + Controls.Add(buttonCancel); + Controls.Add(buttonRouteSave); + Controls.Add(textBoxEndPoint); + Controls.Add(label2); + Controls.Add(textBoxStartPoint); + Controls.Add(label1); + Name = "FormRoute"; + Text = "FormRoute"; + ((System.ComponentModel.ISupportInitialize)numericUpDownLength).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label label5; + private NumericUpDown numericUpDownLength; + private Button buttonCancel; + private Button buttonRouteSave; + private TextBox textBoxEndPoint; + private Label label2; + private TextBox textBoxStartPoint; + private Label label1; + } +} \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormRoute.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormRoute.cs new file mode 100644 index 0000000..3e7b40e --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormRoute.cs @@ -0,0 +1,70 @@ +using FuelAndLubricants.Entities; +using FuelAndLubricants.Repositories; + +namespace FuelAndLubricants.Forms +{ + public partial class FormRoute : Form + { + private readonly IRouteRepository _routeRepository; + + private int? _routeId; + + public int Id + { + set + { + try + { + var route = _routeRepository.ReadRouteByID(value); + if (route == null) + throw new InvalidOperationException(nameof(route)); + + textBoxStartPoint.Text = route.Start_Point; + textBoxEndPoint.Text = route.End_Point; + numericUpDownLength.Value = (decimal)route.Route_Length; + + _routeId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormRoute(IRouteRepository routeRepository) + { + InitializeComponent(); + _routeRepository = routeRepository ?? + throw new ArgumentNullException(nameof(routeRepository)); + } + + private void ButtonRouteSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxStartPoint.Text) || string.IsNullOrWhiteSpace(textBoxEndPoint.Text)) + throw new Exception("Имеются незаполненные поля"); + + if (_routeId.HasValue) + _routeRepository.UpdateRoute(CreateRoute(_routeId.Value)); + else + _routeRepository.CreateRoute(CreateRoute(0)); + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private Route CreateRoute(int id) + { + return Route.CreateEntity(id, textBoxStartPoint.Text, textBoxEndPoint.Text, (float)numericUpDownLength.Value); + } + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormRoute.resx b/FuelAndLubricants/FuelAndLubricants/Forms/FormRoute.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormRoute.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Program.cs b/FuelAndLubricants/FuelAndLubricants/Program.cs index 5ab9ffd..3f63e1b 100644 --- a/FuelAndLubricants/FuelAndLubricants/Program.cs +++ b/FuelAndLubricants/FuelAndLubricants/Program.cs @@ -22,7 +22,7 @@ namespace FuelAndLubricants { var container = new UnityContainer(); - container.RegisterType(); + container.RegisterType(); container.RegisterType(); container.RegisterType(); container.RegisterType(); diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs index a4d9d34..195e20e 100644 --- a/FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs @@ -2,7 +2,7 @@ namespace FuelAndLubricants.Repositories; -public interface ICarRepository +public interface IRouteRepository { IEnumerable ReadCars(); diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/CarRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/CarRepository.cs index 5759289..e780ce9 100644 --- a/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/CarRepository.cs +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/CarRepository.cs @@ -2,7 +2,7 @@ namespace FuelAndLubricants.Repositories.Implementations; -public class CarRepository : ICarRepository +public class CarRepository : IRouteRepository { public void CreateCar(Car car) { -- 2.25.1 From ad9ddd281c5bfcc27eaae01e5acdb0e9bd8e610a Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 16:40:58 +0400 Subject: [PATCH 14/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D0=BF=D1=83?= =?UTF-8?q?=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FuelAndLubricants/Forms/FormCar.cs | 4 +- .../FuelAndLubricants/Forms/FormCars.cs | 4 +- .../Forms/FormRoutes.Designer.cs | 125 ++++++++++++++++++ .../FuelAndLubricants/Forms/FormRoutes.cs | 109 +++++++++++++++ .../FuelAndLubricants/Forms/FormRoutes.resx | 120 +++++++++++++++++ .../Repositories/ICarRepository.cs | 2 +- 6 files changed, 359 insertions(+), 5 deletions(-) create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormRoutes.Designer.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormRoutes.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormRoutes.resx diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.cs index 3258c8c..9529bdc 100644 --- a/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.cs +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.cs @@ -6,7 +6,7 @@ namespace FuelAndLubricants.Forms { public partial class FormCar: Form { - private readonly IRouteRepository _carRepository; + private readonly ICarRepository _carRepository; private int? _carId; @@ -43,7 +43,7 @@ namespace FuelAndLubricants.Forms } } } - public FormCar(IRouteRepository carRepository) + public FormCar(ICarRepository carRepository) { InitializeComponent(); _carRepository = carRepository ?? diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs index aea072b..797ff16 100644 --- a/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormCars.cs @@ -7,9 +7,9 @@ namespace FuelAndLubricants.Forms { private readonly IUnityContainer _container; - private readonly IRouteRepository _carRepository; + private readonly ICarRepository _carRepository; - public FormCars(IUnityContainer container, IRouteRepository carRepository) + public FormCars(IUnityContainer container, ICarRepository carRepository) { InitializeComponent(); _container = container ?? diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormRoutes.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormRoutes.Designer.cs new file mode 100644 index 0000000..6bc8b9c --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormRoutes.Designer.cs @@ -0,0 +1,125 @@ +namespace FuelAndLubricants.Forms +{ + partial class FormRoutes + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + buttonDel = new Button(); + buttonUpd = new Button(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(681, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(99, 260); + panel1.TabIndex = 0; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.Удалить; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(12, 174); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(75, 75); + buttonDel.TabIndex = 8; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonUpd + // + buttonUpd.BackgroundImage = Properties.Resources.Редактировать; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(12, 93); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(75, 75); + buttonUpd.TabIndex = 7; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += ButtonUpd_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Добавить; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(12, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 75); + buttonAdd.TabIndex = 6; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(681, 260); + dataGridView.TabIndex = 3; + // + // FormRoutes + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(780, 260); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormRoutes"; + Text = "FormRoutes"; + Load += FormRoutes_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormRoutes.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormRoutes.cs new file mode 100644 index 0000000..312d332 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormRoutes.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using FuelAndLubricants.Repositories; +using FuelAndLubricants.Repositories.Implementations; +using Unity; + +namespace FuelAndLubricants.Forms +{ + public partial class FormRoutes : Form + { + private readonly IUnityContainer _container; + + private readonly IRouteRepository _routeRepository; + public FormRoutes(IUnityContainer container, IRouteRepository routeRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _routeRepository = routeRepository ?? + throw new ArgumentNullException(nameof(routeRepository)); + } + + private void FormRoutes_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + return; + + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + return; + + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + return; + + try + { + _routeRepository.DeleteRoute(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _routeRepository.ReadRoutes(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Route_ID"].Value); + return true; + } + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormRoutes.resx b/FuelAndLubricants/FuelAndLubricants/Forms/FormRoutes.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormRoutes.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs index 195e20e..a4d9d34 100644 --- a/FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/ICarRepository.cs @@ -2,7 +2,7 @@ namespace FuelAndLubricants.Repositories; -public interface IRouteRepository +public interface ICarRepository { IEnumerable ReadCars(); -- 2.25.1 From c429a9c591185e1edace13a19ea9a7cba795928b Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 17:12:27 +0400 Subject: [PATCH 15/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Forms/FormRefill.Designer.cs | 174 ++++++++++++++++++ .../FuelAndLubricants/Forms/FormRefill.cs | 43 +++++ .../FuelAndLubricants/Forms/FormRefill.resx | 120 ++++++++++++ 3 files changed, 337 insertions(+) create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormRefill.Designer.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormRefill.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormRefill.resx diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormRefill.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormRefill.Designer.cs new file mode 100644 index 0000000..6fd5a9f --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormRefill.Designer.cs @@ -0,0 +1,174 @@ +namespace FuelAndLubricants.Forms +{ + partial class FormRefill + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + label4 = new Label(); + buttonCancel = new Button(); + buttonRefillSave = new Button(); + label2 = new Label(); + dateTimePickerRefillDate = new DateTimePicker(); + label1 = new Label(); + numericUpDownRefillAmount = new NumericUpDown(); + label3 = new Label(); + comboBoxCarID = new ComboBox(); + comboBoxFuelID = new ComboBox(); + ((System.ComponentModel.ISupportInitialize)numericUpDownRefillAmount).BeginInit(); + SuspendLayout(); + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(11, 70); + label4.Name = "label4"; + label4.Size = new Size(54, 15); + label4.TabIndex = 31; + label4.Text = "Топливо"; + // + // buttonCancel + // + buttonCancel.Location = new Point(174, 135); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 28; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonRefillSave + // + buttonRefillSave.Location = new Point(11, 135); + buttonRefillSave.Name = "buttonRefillSave"; + buttonRefillSave.Size = new Size(75, 23); + buttonRefillSave.TabIndex = 27; + buttonRefillSave.Text = "Сохранить"; + buttonRefillSave.UseVisualStyleBackColor = true; + buttonRefillSave.Click += ButtonSave_Click; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(11, 41); + label2.Name = "label2"; + label2.Size = new Size(72, 15); + label2.TabIndex = 24; + label2.Text = "Количество"; + // + // dateTimePickerRefillDate + // + dateTimePickerRefillDate.Location = new Point(109, 9); + dateTimePickerRefillDate.Name = "dateTimePickerRefillDate"; + dateTimePickerRefillDate.Size = new Size(140, 23); + dateTimePickerRefillDate.TabIndex = 34; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(11, 15); + label1.Name = "label1"; + label1.Size = new Size(85, 15); + label1.TabIndex = 35; + label1.Text = "Дата заправки"; + // + // numericUpDownRefillAmount + // + numericUpDownRefillAmount.DecimalPlaces = 2; + numericUpDownRefillAmount.Location = new Point(109, 39); + numericUpDownRefillAmount.Minimum = new decimal(new int[] { 1, 0, 0, 131072 }); + numericUpDownRefillAmount.Name = "numericUpDownRefillAmount"; + numericUpDownRefillAmount.Size = new Size(140, 23); + numericUpDownRefillAmount.TabIndex = 36; + numericUpDownRefillAmount.Value = new decimal(new int[] { 1, 0, 0, 131072 }); + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(11, 99); + label3.Name = "label3"; + label3.Size = new Size(55, 15); + label3.TabIndex = 38; + label3.Text = "Машина"; + // + // comboBoxCarID + // + comboBoxCarID.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxCarID.FormattingEnabled = true; + comboBoxCarID.Location = new Point(109, 96); + comboBoxCarID.Name = "comboBoxCarID"; + comboBoxCarID.Size = new Size(140, 23); + comboBoxCarID.TabIndex = 37; + // + // comboBoxFuelID + // + comboBoxFuelID.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxFuelID.FormattingEnabled = true; + comboBoxFuelID.Location = new Point(109, 67); + comboBoxFuelID.Name = "comboBoxFuelID"; + comboBoxFuelID.Size = new Size(140, 23); + comboBoxFuelID.TabIndex = 39; + // + // FormRefill + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(257, 165); + Controls.Add(comboBoxFuelID); + Controls.Add(label3); + Controls.Add(comboBoxCarID); + Controls.Add(numericUpDownRefillAmount); + Controls.Add(label1); + Controls.Add(dateTimePickerRefillDate); + Controls.Add(label4); + Controls.Add(buttonCancel); + Controls.Add(buttonRefillSave); + Controls.Add(label2); + Name = "FormRefill"; + Text = "FormRefill"; + ((System.ComponentModel.ISupportInitialize)numericUpDownRefillAmount).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label label5; + private NumericUpDown numericUpDownConsumptionRate; + private Label label4; + private ComboBox comboBoxCarType; + private CheckedListBox checkedListBoxDriverLicense; + private Button buttonCancel; + private Button buttonRefillSave; + private Label label2; + private DateTimePicker dateTimePickerRefillDate; + private Label label1; + private NumericUpDown numericUpDownRefillAmount; + private Label label3; + private ComboBox comboBoxCarID; + private ComboBox comboBoxFuelID; + } +} \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormRefill.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormRefill.cs new file mode 100644 index 0000000..61140f4 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormRefill.cs @@ -0,0 +1,43 @@ +using FuelAndLubricants.Entities; +using FuelAndLubricants.Repositories; + +namespace FuelAndLubricants.Forms +{ + public partial class FormRefill : Form + { + private readonly IRefillRepository _refillRepository; + + public FormRefill(IRefillRepository refillRepository, IFuelRepository fuelRepository, ICarRepository carRepository) + { + InitializeComponent(); + + _refillRepository = refillRepository ?? + throw new ArgumentNullException(nameof(refillRepository)); + + comboBoxFuelID.DataSource = fuelRepository.ReadFuels(); + comboBoxFuelID.DisplayMember = "Fuel_Type"; + comboBoxFuelID.ValueMember = "Fuel_ID"; + + comboBoxCarID.DataSource = carRepository.ReadCars(); + comboBoxCarID.DisplayMember = "Car_Mark"; + comboBoxCarID.ValueMember = "Car_ID"; + } + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxFuelID.SelectedIndex < 0 || comboBoxCarID.SelectedIndex < 0) + throw new Exception("Имеются незаполненные поля"); + + _refillRepository.CreateRefill(Refill.CreateOperation(0, dateTimePickerRefillDate.Value, (float)numericUpDownRefillAmount.Value, (int)comboBoxFuelID.SelectedValue!, (int)comboBoxCarID.SelectedValue!)); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormRefill.resx b/FuelAndLubricants/FuelAndLubricants/Forms/FormRefill.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormRefill.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file -- 2.25.1 From 336cf711ba003813a73b022d86a9f72ccc56dab9 Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 17:17:19 +0400 Subject: [PATCH 16/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Forms/FormRefills.Designer.cs | 97 ++++++++++++++ .../FuelAndLubricants/Forms/FormRefills.cs | 51 ++++++++ .../FuelAndLubricants/Forms/FormRefills.resx | 120 ++++++++++++++++++ 3 files changed, 268 insertions(+) create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormRefills.Designer.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormRefills.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormRefills.resx diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormRefills.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormRefills.Designer.cs new file mode 100644 index 0000000..e3ead8a --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormRefills.Designer.cs @@ -0,0 +1,97 @@ +namespace FuelAndLubricants.Forms +{ + partial class FormRefills + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(692, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(98, 279); + panel1.TabIndex = 0; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Добавить; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(13, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 75); + buttonAdd.TabIndex = 4; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(692, 279); + dataGridView.TabIndex = 3; + // + // FormRefills + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(790, 279); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormRefills"; + Text = "Заправки"; + Load += FormRefills_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormRefills.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormRefills.cs new file mode 100644 index 0000000..f2c7f72 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormRefills.cs @@ -0,0 +1,51 @@ +using FuelAndLubricants.Repositories; +using Unity; + +namespace FuelAndLubricants.Forms +{ + public partial class FormRefills : Form + { + private readonly IUnityContainer _container; + + private readonly IRefillRepository _refillRepository; + + public FormRefills(IUnityContainer container, IRefillRepository refillRepository) + { + InitializeComponent(); + + _container = container ?? + throw new ArgumentNullException(nameof(container)); + + _refillRepository = refillRepository ?? + throw new ArgumentNullException(nameof(refillRepository)); + } + private void FormRefills_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _refillRepository.ReadRefills(); + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormRefills.resx b/FuelAndLubricants/FuelAndLubricants/Forms/FormRefills.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormRefills.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file -- 2.25.1 From c1d186328c94275aa1d4d2f746f8c9493609aefd Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 17:43:43 +0400 Subject: [PATCH 17/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B5=D0=B7=D0=B4=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Forms/FormTrip.Designer.cs | 241 ++++++++++++++++++ .../FuelAndLubricants/Forms/FormTrip.cs | 48 ++++ .../FuelAndLubricants/Forms/FormTrip.resx | 120 +++++++++ 3 files changed, 409 insertions(+) create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormTrip.Designer.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormTrip.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormTrip.resx diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormTrip.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormTrip.Designer.cs new file mode 100644 index 0000000..dd45466 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormTrip.Designer.cs @@ -0,0 +1,241 @@ +namespace FuelAndLubricants.Forms +{ + partial class FormTrip + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + label5 = new Label(); + numericUpDownConsumptionRate = new NumericUpDown(); + label4 = new Label(); + comboBoxShift = new ComboBox(); + buttonCancel = new Button(); + buttonTripSave = new Button(); + label6 = new Label(); + dateTimePickerStartDate = new DateTimePicker(); + label1 = new Label(); + dateTimePickerEndDate = new DateTimePicker(); + label3 = new Label(); + comboBoxCarID = new ComboBox(); + comboBoxDriverID = new ComboBox(); + label2 = new Label(); + comboBoxRouteID = new ComboBox(); + label7 = new Label(); + ((System.ComponentModel.ISupportInitialize)numericUpDownConsumptionRate).BeginInit(); + SuspendLayout(); + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(9, 100); + label5.Name = "label5"; + label5.Size = new Size(93, 15); + label5.TabIndex = 33; + label5.Text = "Расход топлива"; + // + // numericUpDownConsumptionRate + // + numericUpDownConsumptionRate.DecimalPlaces = 2; + numericUpDownConsumptionRate.Location = new Point(107, 98); + numericUpDownConsumptionRate.Maximum = new decimal(new int[] { 10000, 0, 0, 0 }); + numericUpDownConsumptionRate.Minimum = new decimal(new int[] { 1, 0, 0, 131072 }); + numericUpDownConsumptionRate.Name = "numericUpDownConsumptionRate"; + numericUpDownConsumptionRate.Size = new Size(140, 23); + numericUpDownConsumptionRate.TabIndex = 32; + numericUpDownConsumptionRate.Value = new decimal(new int[] { 1, 0, 0, 131072 }); + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(9, 73); + label4.Name = "label4"; + label4.Size = new Size(43, 15); + label4.TabIndex = 31; + label4.Text = "Смена"; + // + // comboBoxShift + // + comboBoxShift.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxShift.FormattingEnabled = true; + comboBoxShift.Location = new Point(107, 70); + comboBoxShift.Name = "comboBoxShift"; + comboBoxShift.Size = new Size(140, 23); + comboBoxShift.TabIndex = 30; + // + // buttonCancel + // + buttonCancel.Location = new Point(172, 226); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 28; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonTripSave + // + buttonTripSave.Location = new Point(9, 226); + buttonTripSave.Name = "buttonTripSave"; + buttonTripSave.Size = new Size(75, 23); + buttonTripSave.TabIndex = 27; + buttonTripSave.Text = "Сохранить"; + buttonTripSave.UseVisualStyleBackColor = true; + buttonTripSave.Click += ButtonSave_Click; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new Point(9, 18); + label6.Name = "label6"; + label6.Size = new Size(74, 15); + label6.TabIndex = 37; + label6.Text = "Дата начала"; + // + // dateTimePickerStartDate + // + dateTimePickerStartDate.Location = new Point(107, 12); + dateTimePickerStartDate.Name = "dateTimePickerStartDate"; + dateTimePickerStartDate.Size = new Size(140, 23); + dateTimePickerStartDate.TabIndex = 36; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(9, 47); + label1.Name = "label1"; + label1.Size = new Size(68, 15); + label1.TabIndex = 39; + label1.Text = "Дата конца"; + // + // dateTimePickerEndDate + // + dateTimePickerEndDate.Location = new Point(107, 41); + dateTimePickerEndDate.Name = "dateTimePickerEndDate"; + dateTimePickerEndDate.Size = new Size(140, 23); + dateTimePickerEndDate.TabIndex = 38; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(9, 130); + label3.Name = "label3"; + label3.Size = new Size(55, 15); + label3.TabIndex = 42; + label3.Text = "Машина"; + // + // comboBoxCarID + // + comboBoxCarID.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxCarID.FormattingEnabled = true; + comboBoxCarID.Location = new Point(107, 127); + comboBoxCarID.Name = "comboBoxCarID"; + comboBoxCarID.Size = new Size(140, 23); + comboBoxCarID.TabIndex = 41; + // + // comboBoxDriverID + // + comboBoxDriverID.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxDriverID.FormattingEnabled = true; + comboBoxDriverID.Location = new Point(107, 157); + comboBoxDriverID.Name = "comboBoxDriverID"; + comboBoxDriverID.Size = new Size(140, 23); + comboBoxDriverID.TabIndex = 46; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(9, 189); + label2.Name = "label2"; + label2.Size = new Size(60, 15); + label2.TabIndex = 45; + label2.Text = "Маршрут"; + // + // comboBoxRouteID + // + comboBoxRouteID.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxRouteID.FormattingEnabled = true; + comboBoxRouteID.Location = new Point(107, 186); + comboBoxRouteID.Name = "comboBoxRouteID"; + comboBoxRouteID.Size = new Size(140, 23); + comboBoxRouteID.TabIndex = 44; + // + // label7 + // + label7.AutoSize = true; + label7.Location = new Point(9, 160); + label7.Name = "label7"; + label7.Size = new Size(58, 15); + label7.TabIndex = 43; + label7.Text = "Водитель"; + // + // FormTrip + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(259, 266); + Controls.Add(comboBoxDriverID); + Controls.Add(label2); + Controls.Add(comboBoxRouteID); + Controls.Add(label7); + Controls.Add(label3); + Controls.Add(comboBoxCarID); + Controls.Add(label1); + Controls.Add(dateTimePickerEndDate); + Controls.Add(label6); + Controls.Add(dateTimePickerStartDate); + Controls.Add(label5); + Controls.Add(numericUpDownConsumptionRate); + Controls.Add(label4); + Controls.Add(comboBoxShift); + Controls.Add(buttonCancel); + Controls.Add(buttonTripSave); + Name = "FormTrip"; + Text = "FormTrip"; + ((System.ComponentModel.ISupportInitialize)numericUpDownConsumptionRate).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label label5; + private NumericUpDown numericUpDownConsumptionRate; + private Label label4; + private ComboBox comboBoxShift; + private Button buttonCancel; + private Button buttonTripSave; + private Label label6; + private DateTimePicker dateTimePickerStartDate; + private Label label1; + private DateTimePicker dateTimePickerEndDate; + private Label label3; + private ComboBox comboBoxCarID; + private ComboBox comboBoxDriverID; + private Label label2; + private ComboBox comboBoxRouteID; + private Label label7; + } +} \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormTrip.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormTrip.cs new file mode 100644 index 0000000..fe5800e --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormTrip.cs @@ -0,0 +1,48 @@ +using FuelAndLubricants.Entities; +using FuelAndLubricants.Entities.Enums; +using FuelAndLubricants.Repositories; + +namespace FuelAndLubricants.Forms +{ + public partial class FormTrip : Form + { + private readonly ITripRepository _tripRepository; + + public FormTrip(ITripRepository tripRepository, ICarRepository carRepository, IDriverRepository driverRepository, IRouteRepository routeRepository) + { + InitializeComponent(); + + _tripRepository = tripRepository ?? + throw new ArgumentNullException(nameof(tripRepository)); + + comboBoxCarID.DataSource = tripRepository.ReadTrips(); + comboBoxCarID.DisplayMember = "Car_Mark"; + comboBoxCarID.ValueMember = "Car_ID"; + + comboBoxDriverID.DataSource = tripRepository.ReadTrips(); + comboBoxDriverID.DisplayMember = "Firstname"; + comboBoxDriverID.ValueMember = "Driver_ID"; + + comboBoxRouteID.DataSource = tripRepository.ReadTrips(); + comboBoxRouteID.DisplayMember = "Route_Length"; + comboBoxRouteID.ValueMember = "Route_ID"; + } + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxCarID.SelectedIndex < 0 || comboBoxDriverID.SelectedIndex < 0 || comboBoxRouteID.SelectedIndex < 0) + throw new Exception("Имеются незаполненные поля"); + + _tripRepository.CreateTrip(Trip.CreateOperation(0, dateTimePickerStartDate.Value, dateTimePickerEndDate.Value, (Shift)comboBoxShift.SelectedItem!, (float)numericUpDownConsumptionRate.Value, (int)comboBoxCarID.SelectedValue!, (int)comboBoxDriverID.SelectedValue!, (int)comboBoxRouteID.SelectedValue!)); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormTrip.resx b/FuelAndLubricants/FuelAndLubricants/Forms/FormTrip.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormTrip.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file -- 2.25.1 From 9a5597fb8546d420ecf257b3b92bd4e26be804d7 Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 17:47:32 +0400 Subject: [PATCH 18/20] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B5=D0=B7=D0=B4=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Forms/FormTrips.Designer.cs | 97 ++++++++++++++ .../FuelAndLubricants/Forms/FormTrips.cs | 62 +++++++++ .../FuelAndLubricants/Forms/FormTrips.resx | 120 ++++++++++++++++++ 3 files changed, 279 insertions(+) create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormTrips.Designer.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormTrips.cs create mode 100644 FuelAndLubricants/FuelAndLubricants/Forms/FormTrips.resx diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormTrips.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormTrips.Designer.cs new file mode 100644 index 0000000..8e3e1eb --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormTrips.Designer.cs @@ -0,0 +1,97 @@ +namespace FuelAndLubricants.Forms +{ + partial class FormTrips + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(689, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(98, 291); + panel1.TabIndex = 0; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Добавить; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(11, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 75); + buttonAdd.TabIndex = 5; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(689, 291); + dataGridView.TabIndex = 4; + // + // FormTrips + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(787, 291); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormTrips"; + Text = "Поездки"; + Load += FormTrips_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormTrips.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormTrips.cs new file mode 100644 index 0000000..186da3b --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormTrips.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using FuelAndLubricants.Repositories; +using FuelAndLubricants.Repositories.Implementations; +using Unity; + +namespace FuelAndLubricants.Forms +{ + public partial class FormTrips : Form + { + private readonly IUnityContainer _container; + + private readonly ITripRepository _tripRepository; + + public FormTrips(IUnityContainer container, ITripRepository tripRepository) + { + InitializeComponent(); + + _container = container ?? + throw new ArgumentNullException(nameof(container)); + + _tripRepository = tripRepository ?? + throw new ArgumentNullException(nameof(tripRepository)); + } + + private void FormTrips_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _tripRepository.ReadTrips(); + } +} diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormTrips.resx b/FuelAndLubricants/FuelAndLubricants/Forms/FormTrips.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormTrips.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file -- 2.25.1 From 93b8827935ac2c24d6e0a074e0fcfb1b98e0487e Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sun, 17 Nov 2024 18:00:01 +0400 Subject: [PATCH 19/20] =?UTF-8?q?=D0=A4=D0=B8=D0=BD=D0=B0=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FormFuelAndLubricants.Designer.cs | 106 +++++++++--------- .../FormFuelAndLubricants.cs | 94 +++++++++++++++- .../FuelAndLubricants/Program.cs | 2 +- .../Implementations/CarRepository.cs | 2 +- .../Implementations/FuelRepository.cs | 2 +- 5 files changed, 152 insertions(+), 54 deletions(-) diff --git a/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.Designer.cs b/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.Designer.cs index 95ed9e6..2e506cc 100644 --- a/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.Designer.cs +++ b/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.Designer.cs @@ -30,14 +30,14 @@ { menuStrip = new MenuStrip(); справочникиToolStripMenuItem = new ToolStripMenuItem(); + CarsToolStripMenuItem = new ToolStripMenuItem(); + DriversToolStripMenuItem = new ToolStripMenuItem(); + FuelToolStripMenuItem = new ToolStripMenuItem(); + RoutesToolStripMenuItem = new ToolStripMenuItem(); операцииToolStripMenuItem = new ToolStripMenuItem(); + RefillToolStripMenuItem = new ToolStripMenuItem(); + TripToolStripMenuItem = new ToolStripMenuItem(); отчетыToolStripMenuItem = new ToolStripMenuItem(); - машиныToolStripMenuItem = new ToolStripMenuItem(); - водителиToolStripMenuItem = new ToolStripMenuItem(); - топливоToolStripMenuItem = new ToolStripMenuItem(); - маршрутыToolStripMenuItem = new ToolStripMenuItem(); - заправкаToolStripMenuItem = new ToolStripMenuItem(); - поездкаToolStripMenuItem = new ToolStripMenuItem(); menuStrip.SuspendLayout(); SuspendLayout(); // @@ -52,60 +52,66 @@ // // справочникиToolStripMenuItem // - справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { машиныToolStripMenuItem, водителиToolStripMenuItem, топливоToolStripMenuItem, маршрутыToolStripMenuItem }); + справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { CarsToolStripMenuItem, DriversToolStripMenuItem, FuelToolStripMenuItem, RoutesToolStripMenuItem }); справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; справочникиToolStripMenuItem.Size = new Size(94, 20); справочникиToolStripMenuItem.Text = "Справочники"; // + // CarsToolStripMenuItem + // + CarsToolStripMenuItem.Name = "CarsToolStripMenuItem"; + CarsToolStripMenuItem.Size = new Size(180, 22); + CarsToolStripMenuItem.Text = "Машины"; + CarsToolStripMenuItem.Click += CarsToolStripMenuItem_Click; + // + // DriversToolStripMenuItem + // + DriversToolStripMenuItem.Name = "DriversToolStripMenuItem"; + DriversToolStripMenuItem.Size = new Size(180, 22); + DriversToolStripMenuItem.Text = "Водители"; + DriversToolStripMenuItem.Click += DriversToolStripMenuItem_Click; + // + // FuelToolStripMenuItem + // + FuelToolStripMenuItem.Name = "FuelToolStripMenuItem"; + FuelToolStripMenuItem.Size = new Size(180, 22); + FuelToolStripMenuItem.Text = "Топливо"; + FuelToolStripMenuItem.Click += FuelToolStripMenuItem_Click; + // + // RoutesToolStripMenuItem + // + RoutesToolStripMenuItem.Name = "RoutesToolStripMenuItem"; + RoutesToolStripMenuItem.Size = new Size(180, 22); + RoutesToolStripMenuItem.Text = "Маршруты"; + RoutesToolStripMenuItem.Click += RoutesToolStripMenuItem_Click; + // // операцииToolStripMenuItem // - операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { заправкаToolStripMenuItem, поездкаToolStripMenuItem }); + операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { RefillToolStripMenuItem, TripToolStripMenuItem }); операцииToolStripMenuItem.Name = "операцииToolStripMenuItem"; операцииToolStripMenuItem.Size = new Size(75, 20); операцииToolStripMenuItem.Text = "Операции"; // + // RefillToolStripMenuItem + // + RefillToolStripMenuItem.Name = "RefillToolStripMenuItem"; + RefillToolStripMenuItem.Size = new Size(180, 22); + RefillToolStripMenuItem.Text = "Заправка"; + RefillToolStripMenuItem.Click += RefillToolStripMenuItem_Click; + // + // TripToolStripMenuItem + // + TripToolStripMenuItem.Name = "TripToolStripMenuItem"; + TripToolStripMenuItem.Size = new Size(180, 22); + TripToolStripMenuItem.Text = "Поездка"; + TripToolStripMenuItem.Click += TripToolStripMenuItem_Click; + // // отчетыToolStripMenuItem // отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem"; отчетыToolStripMenuItem.Size = new Size(60, 20); отчетыToolStripMenuItem.Text = "Отчеты"; // - // машиныToolStripMenuItem - // - машиныToolStripMenuItem.Name = "машиныToolStripMenuItem"; - машиныToolStripMenuItem.Size = new Size(180, 22); - машиныToolStripMenuItem.Text = "Машины"; - // - // водителиToolStripMenuItem - // - водителиToolStripMenuItem.Name = "водителиToolStripMenuItem"; - водителиToolStripMenuItem.Size = new Size(180, 22); - водителиToolStripMenuItem.Text = "Водители"; - // - // топливоToolStripMenuItem - // - топливоToolStripMenuItem.Name = "топливоToolStripMenuItem"; - топливоToolStripMenuItem.Size = new Size(180, 22); - топливоToolStripMenuItem.Text = "Топливо"; - // - // маршрутыToolStripMenuItem - // - маршрутыToolStripMenuItem.Name = "маршрутыToolStripMenuItem"; - маршрутыToolStripMenuItem.Size = new Size(180, 22); - маршрутыToolStripMenuItem.Text = "Маршруты"; - // - // заправкаToolStripMenuItem - // - заправкаToolStripMenuItem.Name = "заправкаToolStripMenuItem"; - заправкаToolStripMenuItem.Size = new Size(180, 22); - заправкаToolStripMenuItem.Text = "Заправка"; - // - // поездкаToolStripMenuItem - // - поездкаToolStripMenuItem.Name = "поездкаToolStripMenuItem"; - поездкаToolStripMenuItem.Size = new Size(180, 22); - поездкаToolStripMenuItem.Text = "Поездка"; - // // FormFuelAndLubricants // AutoScaleDimensions = new SizeF(7F, 15F); @@ -128,13 +134,13 @@ private MenuStrip menuStrip; private ToolStripMenuItem справочникиToolStripMenuItem; - private ToolStripMenuItem машиныToolStripMenuItem; - private ToolStripMenuItem водителиToolStripMenuItem; - private ToolStripMenuItem топливоToolStripMenuItem; - private ToolStripMenuItem маршрутыToolStripMenuItem; + private ToolStripMenuItem CarsToolStripMenuItem; + private ToolStripMenuItem DriversToolStripMenuItem; + private ToolStripMenuItem FuelToolStripMenuItem; + private ToolStripMenuItem RoutesToolStripMenuItem; private ToolStripMenuItem операцииToolStripMenuItem; - private ToolStripMenuItem заправкаToolStripMenuItem; - private ToolStripMenuItem поездкаToolStripMenuItem; + private ToolStripMenuItem RefillToolStripMenuItem; + private ToolStripMenuItem TripToolStripMenuItem; private ToolStripMenuItem отчетыToolStripMenuItem; } } diff --git a/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.cs b/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.cs index 584f691..5ec2c97 100644 --- a/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.cs +++ b/FuelAndLubricants/FuelAndLubricants/FormFuelAndLubricants.cs @@ -1,10 +1,102 @@ +using FuelAndLubricants.Forms; +using Unity; + namespace FuelAndLubricants { public partial class FormFuelAndLubricants : Form { - public FormFuelAndLubricants() + private readonly IUnityContainer _container; + + public FormFuelAndLubricants(IUnityContainer container) { InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + + } + + private void CarsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void DriversToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void FuelToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void RoutesToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void RefillToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void TripToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } } } diff --git a/FuelAndLubricants/FuelAndLubricants/Program.cs b/FuelAndLubricants/FuelAndLubricants/Program.cs index 3f63e1b..5ab9ffd 100644 --- a/FuelAndLubricants/FuelAndLubricants/Program.cs +++ b/FuelAndLubricants/FuelAndLubricants/Program.cs @@ -22,7 +22,7 @@ namespace FuelAndLubricants { var container = new UnityContainer(); - container.RegisterType(); + container.RegisterType(); container.RegisterType(); container.RegisterType(); container.RegisterType(); diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/CarRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/CarRepository.cs index e780ce9..5759289 100644 --- a/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/CarRepository.cs +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/CarRepository.cs @@ -2,7 +2,7 @@ namespace FuelAndLubricants.Repositories.Implementations; -public class CarRepository : IRouteRepository +public class CarRepository : ICarRepository { public void CreateCar(Car car) { diff --git a/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/FuelRepository.cs b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/FuelRepository.cs index d2ad30b..54b793b 100644 --- a/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/FuelRepository.cs +++ b/FuelAndLubricants/FuelAndLubricants/Repositories/Implementations/FuelRepository.cs @@ -4,7 +4,7 @@ namespace FuelAndLubricants.Repositories.Implementations; public class FuelRepository : IFuelRepository { - public void CreateDriver(Fuel_And_Lubricants fuel) + public void CreateFuel(Fuel_And_Lubricants fuel) { } -- 2.25.1 From 69131f48a9679b1b171d99a613f5bde289560b77 Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Wed, 20 Nov 2024 12:53:50 +0400 Subject: [PATCH 20/20] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D0=B0=D1=8F=20=D0=BB=D0=B0=D0=B1=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FuelAndLubricants/Entities/Trip.cs | 6 +- .../Forms/FormCar.Designer.cs | 68 +++++--- .../FuelAndLubricants/Forms/FormCar.resx | 4 +- .../Forms/FormCars.Designer.cs | 30 ++-- .../FuelAndLubricants/Forms/FormCars.resx | 4 +- .../Forms/FormDriver.Designer.cs | 47 ++++-- .../FuelAndLubricants/Forms/FormDriver.resx | 4 +- .../Forms/FormFuel.Designer.cs | 48 ++++-- .../FuelAndLubricants/Forms/FormFuel.resx | 4 +- .../Forms/FormFuels.Designer.cs | 30 ++-- .../FuelAndLubricants/Forms/FormFuels.resx | 4 +- .../Forms/FormRefill.Designer.cs | 58 ++++--- .../FuelAndLubricants/Forms/FormRefill.resx | 4 +- .../Forms/FormRefills.Designer.cs | 20 ++- .../FuelAndLubricants/Forms/FormRefills.resx | 4 +- .../Forms/FormRoute.Designer.cs | 48 ++++-- .../FuelAndLubricants/Forms/FormRoute.resx | 4 +- .../Forms/FormRoutes.Designer.cs | 30 ++-- .../FuelAndLubricants/Forms/FormRoutes.resx | 4 +- .../Forms/FormTrip.Designer.cs | 156 ++++++++++++------ .../FuelAndLubricants/Forms/FormTrip.cs | 24 ++- .../FuelAndLubricants/Forms/FormTrip.resx | 16 +- .../Forms/FormTrips.Designer.cs | 20 ++- .../FuelAndLubricants/Forms/FormTrips.resx | 4 +- 24 files changed, 408 insertions(+), 233 deletions(-) diff --git a/FuelAndLubricants/FuelAndLubricants/Entities/Trip.cs b/FuelAndLubricants/FuelAndLubricants/Entities/Trip.cs index 1a7dd80..83e9614 100644 --- a/FuelAndLubricants/FuelAndLubricants/Entities/Trip.cs +++ b/FuelAndLubricants/FuelAndLubricants/Entities/Trip.cs @@ -11,9 +11,9 @@ public class Trip public float Fuel_Consumption { get; private set; } public int Car_ID { get; private set; } public int Driver_ID { get; private set; } - public int Route_ID { get; private set; } + public IEnumerable Routes { get; private set; } = []; - public static Trip CreateOperation(int trip_id, DateTime start_date, DateTime end_date, Shift shift, float consumption, int car_id, int driver_id, int route_id) + public static Trip CreateOperation(int trip_id, DateTime start_date, DateTime end_date, Shift shift, float consumption, int car_id, int driver_id, IEnumerable routes) { return new Trip { @@ -24,7 +24,7 @@ public class Trip Fuel_Consumption = consumption, Car_ID = car_id, Driver_ID = driver_id, - Route_ID = route_id + Routes = routes }; } } diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.Designer.cs b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.Designer.cs index aea1ce5..a17b551 100644 --- a/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.Designer.cs +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.Designer.cs @@ -45,17 +45,21 @@ // // checkedListBoxDriverLicense // + checkedListBoxDriverLicense.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; checkedListBoxDriverLicense.FormattingEnabled = true; - checkedListBoxDriverLicense.Location = new Point(107, 97); + checkedListBoxDriverLicense.Location = new Point(122, 129); + checkedListBoxDriverLicense.Margin = new Padding(3, 4, 3, 4); checkedListBoxDriverLicense.Name = "checkedListBoxDriverLicense"; - checkedListBoxDriverLicense.Size = new Size(140, 94); + checkedListBoxDriverLicense.Size = new Size(159, 114); checkedListBoxDriverLicense.TabIndex = 17; // // buttonCancel // - buttonCancel.Location = new Point(172, 232); + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(197, 309); + buttonCancel.Margin = new Padding(3, 4, 3, 4); buttonCancel.Name = "buttonCancel"; - buttonCancel.Size = new Size(75, 23); + buttonCancel.Size = new Size(86, 31); buttonCancel.TabIndex = 16; buttonCancel.Text = "Отмена"; buttonCancel.UseVisualStyleBackColor = true; @@ -63,9 +67,11 @@ // // buttonCarSave // - buttonCarSave.Location = new Point(9, 232); + buttonCarSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCarSave.Location = new Point(10, 309); + buttonCarSave.Margin = new Padding(3, 4, 3, 4); buttonCarSave.Name = "buttonCarSave"; - buttonCarSave.Size = new Size(75, 23); + buttonCarSave.Size = new Size(86, 31); buttonCarSave.TabIndex = 15; buttonCarSave.Text = "Сохранить"; buttonCarSave.UseVisualStyleBackColor = true; @@ -74,86 +80,94 @@ // label3 // label3.AutoSize = true; - label3.Location = new Point(9, 97); + label3.Location = new Point(10, 129); label3.Name = "label3"; - label3.Size = new Size(92, 15); + label3.Size = new Size(119, 20); label3.TabIndex = 14; label3.Text = "Категория прав"; // // textBoxCarModel // - textBoxCarModel.Location = new Point(107, 39); + textBoxCarModel.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + textBoxCarModel.Location = new Point(122, 52); + textBoxCarModel.Margin = new Padding(3, 4, 3, 4); textBoxCarModel.Name = "textBoxCarModel"; - textBoxCarModel.Size = new Size(140, 23); + textBoxCarModel.Size = new Size(159, 27); textBoxCarModel.TabIndex = 13; // // label2 // label2.AutoSize = true; - label2.Location = new Point(9, 42); + label2.Location = new Point(10, 56); label2.Name = "label2"; - label2.Size = new Size(50, 15); + label2.Size = new Size(63, 20); label2.TabIndex = 12; label2.Text = "Модель"; // // textBoxCarMark // - textBoxCarMark.Location = new Point(107, 10); + textBoxCarMark.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + textBoxCarMark.Location = new Point(122, 13); + textBoxCarMark.Margin = new Padding(3, 4, 3, 4); textBoxCarMark.Name = "textBoxCarMark"; - textBoxCarMark.Size = new Size(140, 23); + textBoxCarMark.Size = new Size(159, 27); textBoxCarMark.TabIndex = 11; // // label1 // label1.AutoSize = true; - label1.Location = new Point(9, 13); + label1.Location = new Point(10, 17); label1.Name = "label1"; - label1.Size = new Size(43, 15); + label1.Size = new Size(54, 20); label1.TabIndex = 10; label1.Text = "Марка"; // // comboBoxCarType // + comboBoxCarType.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; comboBoxCarType.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxCarType.FormattingEnabled = true; - comboBoxCarType.Location = new Point(107, 68); + comboBoxCarType.Location = new Point(122, 91); + comboBoxCarType.Margin = new Padding(3, 4, 3, 4); comboBoxCarType.Name = "comboBoxCarType"; - comboBoxCarType.Size = new Size(140, 23); + comboBoxCarType.Size = new Size(159, 28); comboBoxCarType.TabIndex = 18; // // label4 // label4.AutoSize = true; - label4.Location = new Point(9, 71); + label4.Location = new Point(10, 95); label4.Name = "label4"; - label4.Size = new Size(79, 15); + label4.Size = new Size(99, 20); label4.TabIndex = 19; label4.Text = "Тип машины"; // // numericUpDownConsumptionRate // + numericUpDownConsumptionRate.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; numericUpDownConsumptionRate.DecimalPlaces = 2; - numericUpDownConsumptionRate.Location = new Point(107, 197); + numericUpDownConsumptionRate.Location = new Point(122, 263); + numericUpDownConsumptionRate.Margin = new Padding(3, 4, 3, 4); numericUpDownConsumptionRate.Minimum = new decimal(new int[] { 1, 0, 0, 131072 }); numericUpDownConsumptionRate.Name = "numericUpDownConsumptionRate"; - numericUpDownConsumptionRate.Size = new Size(140, 23); + numericUpDownConsumptionRate.Size = new Size(160, 27); numericUpDownConsumptionRate.TabIndex = 20; numericUpDownConsumptionRate.Value = new decimal(new int[] { 1, 0, 0, 131072 }); // // label5 // label5.AutoSize = true; - label5.Location = new Point(9, 199); + label5.Location = new Point(10, 265); label5.Name = "label5"; - label5.Size = new Size(93, 15); + label5.Size = new Size(117, 20); label5.TabIndex = 21; label5.Text = "Расход топлива"; // // FormCar // - AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(262, 266); + ClientSize = new Size(299, 355); Controls.Add(label5); Controls.Add(numericUpDownConsumptionRate); Controls.Add(label4); @@ -166,7 +180,9 @@ Controls.Add(label2); Controls.Add(textBoxCarMark); Controls.Add(label1); + Margin = new Padding(3, 4, 3, 4); Name = "FormCar"; + StartPosition = FormStartPosition.CenterParent; Text = "FormCar"; ((System.ComponentModel.ISupportInitialize)numericUpDownConsumptionRate).EndInit(); ResumeLayout(false); diff --git a/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.resx b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.resx index 8b2ff64..af32865 100644 --- a/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.resx +++ b/FuelAndLubricants/FuelAndLubricants/Forms/FormCar.resx @@ -1,7 +1,7 @@