From e827d6d1d0e3150e5d08c6d925b3179ba4f1ec29 Mon Sep 17 00:00:00 2001 From: MetalStormGhost <89945461+MetalStormGhost@users.noreply.github.com> Date: Sun, 12 Mar 2023 19:31:14 +0200 Subject: [PATCH] Swedish Military Assets Pack v1.10 support (#90) * Added a pydcs extension for Swedish Military Assets for DCS by Currenthill v1.10 (2022-11-01). Also added shipmod decorator for the ships added in the mod and remove_ship function in faction.py * Added unit yamls for Swedish Military Assets for DCS by Currenthill v1.10 (2022-11-01) * Added missing RBS-15 group yaml and Ag 90 Sniper Team unit yaml. * Fixed swedishmilitaryassetspack imports. * Renamed some unit yamls for Swedish Military Assets pack. * Encoded LvKv9040.yaml in UTF-8. * Encoded Grkpbv90.yaml in UTF-8. * Encoded BV410*.yaml in UTF-8. * Encoded CV9040.yaml in UTF-8. * Fixed Strv103 yaml syntax. * Encoded Strv2000.yaml in UTF-8. * Renamed some unit yamls for Swedish Military Assets pack. * Renamed BV410 air-defence units. * Added Swedish short-range air defence groups. * Added Swedish medium- and long-range air defence groups (LvS-103 batteries). * Added icons for some Swedish Military Assets units. * Added faction files for: sweden_1997 sweden_2020 --- changelog.md | 1 + game/factions/faction.py | 44 ++ game/modsupport.py | 8 +- game/theater/start_generator.py | 1 + pydcs_extensions/__init__.py | 1 + .../swedishmilitaryassetspack/__init__.py | 1 + .../swedishmilitaryassetspack.py | 418 ++++++++++++++++++ qt_ui/windows/newgame/QNewGameWizard.py | 4 + resources/factions/sweden_1997.json | 71 +++ resources/factions/sweden_2020.json | 78 ++++ resources/groups/LvS-103_Rb103A.yaml | 11 + resources/groups/LvS-103_Rb103A_Mobile.yaml | 11 + resources/groups/LvS-103_Rb103B.yaml | 10 + resources/groups/LvS-103_Rb103B_Mobile.yaml | 10 + resources/groups/RBS-15.yaml | 8 + resources/groups/RBS-70.yaml | 10 + resources/groups/RBS-90.yaml | 9 + resources/groups/RBS-98.yaml | 9 + .../layouts/anti_air/LvS-103A_Battery.yaml | 53 +++ .../anti_air/LvS-103A_Mobile_Battery.yaml | 53 +++ .../layouts/anti_air/LvS-103B_Battery.yaml | 53 +++ .../anti_air/LvS-103B_Mobile_Battery.yaml | 53 +++ .../vehicles/icons/Artillerisystem08_24.jpg | Bin 0 -> 9358 bytes .../ui/units/vehicles/icons/BV410_24.jpg | Bin 0 -> 9424 bytes .../units/vehicles/icons/BV410_RBS70_24.jpg | Bin 0 -> 9297 bytes .../units/vehicles/icons/BV410_RBS90_24.jpg | Bin 0 -> 9297 bytes .../ui/units/vehicles/icons/CV9040_24.jpg | Bin 0 -> 9082 bytes .../ui/units/vehicles/icons/Grkpbv90_24.jpg | Bin 0 -> 9455 bytes .../ui/units/vehicles/icons/LvKv9040_24.jpg | Bin 0 -> 8890 bytes .../ui/units/vehicles/icons/Strv103_24.jpg | Bin 0 -> 9433 bytes .../ui/units/vehicles/icons/Strv2000_24.jpg | Bin 0 -> 9039 bytes .../ui/units/vehicles/icons/Volvo740_24.jpg | Bin 0 -> 9461 bytes resources/units/ground_units/AG-90.yaml | 6 + .../units/ground_units/Artillerisystem08.yaml | 14 + resources/units/ground_units/BV410.yaml | 9 + resources/units/ground_units/BV410_RBS70.yaml | 14 + resources/units/ground_units/BV410_RBS90.yaml | 15 + resources/units/ground_units/CV9040.yaml | 12 + resources/units/ground_units/Grkpbv90.yaml | 13 + resources/units/ground_units/LvKv9040.yaml | 12 + .../units/ground_units/LvS-103_Elverk103.yaml | 4 + .../LvS-103_Lavett103_HX_Rb103A.yaml | 10 + .../LvS-103_Lavett103_HX_Rb103B.yaml | 11 + .../LvS-103_Lavett103_Rb103A.yaml | 10 + .../LvS-103_Lavett103_Rb103B.yaml | 11 + .../units/ground_units/LvS-103_PM103.yaml | 11 + .../units/ground_units/LvS-103_PM103_HX.yaml | 11 + .../units/ground_units/LvS-103_StriE103.yaml | 4 + resources/units/ground_units/RBS-15KA.yaml | 4 + resources/units/ground_units/RBS-57.yaml | 6 + resources/units/ground_units/RBS-58.yaml | 5 + resources/units/ground_units/RBS-70.yaml | 12 + resources/units/ground_units/RBS-90.yaml | 14 + resources/units/ground_units/RBS-98.yaml | 13 + resources/units/ground_units/Strv103.yaml | 16 + resources/units/ground_units/Strv2000.yaml | 12 + .../ground_units/SwedishinfantryAK4.yaml | 6 + .../ground_units/SwedishinfantryAK5.yaml | 5 + .../ground_units/SwedishinfantryAK5GT.yaml | 5 + .../ground_units/SwedishinfantryKSP58.yaml | 5 + .../ground_units/SwedishinfantryKSP90.yaml | 5 + .../ground_units/SwedishinfantryPskott86.yaml | 6 + resources/units/ground_units/UndE23.yaml | 11 + resources/units/ground_units/Volvo740.yaml | 5 + resources/units/ships/HSwMS_Visby.yaml | 4 + resources/units/ships/Strb90.yaml | 4 + 66 files changed, 1221 insertions(+), 1 deletion(-) create mode 100644 pydcs_extensions/swedishmilitaryassetspack/__init__.py create mode 100644 pydcs_extensions/swedishmilitaryassetspack/swedishmilitaryassetspack.py create mode 100644 resources/factions/sweden_1997.json create mode 100644 resources/factions/sweden_2020.json create mode 100644 resources/groups/LvS-103_Rb103A.yaml create mode 100644 resources/groups/LvS-103_Rb103A_Mobile.yaml create mode 100644 resources/groups/LvS-103_Rb103B.yaml create mode 100644 resources/groups/LvS-103_Rb103B_Mobile.yaml create mode 100644 resources/groups/RBS-15.yaml create mode 100644 resources/groups/RBS-70.yaml create mode 100644 resources/groups/RBS-90.yaml create mode 100644 resources/groups/RBS-98.yaml create mode 100644 resources/layouts/anti_air/LvS-103A_Battery.yaml create mode 100644 resources/layouts/anti_air/LvS-103A_Mobile_Battery.yaml create mode 100644 resources/layouts/anti_air/LvS-103B_Battery.yaml create mode 100644 resources/layouts/anti_air/LvS-103B_Mobile_Battery.yaml create mode 100644 resources/ui/units/vehicles/icons/Artillerisystem08_24.jpg create mode 100644 resources/ui/units/vehicles/icons/BV410_24.jpg create mode 100644 resources/ui/units/vehicles/icons/BV410_RBS70_24.jpg create mode 100644 resources/ui/units/vehicles/icons/BV410_RBS90_24.jpg create mode 100644 resources/ui/units/vehicles/icons/CV9040_24.jpg create mode 100644 resources/ui/units/vehicles/icons/Grkpbv90_24.jpg create mode 100644 resources/ui/units/vehicles/icons/LvKv9040_24.jpg create mode 100644 resources/ui/units/vehicles/icons/Strv103_24.jpg create mode 100644 resources/ui/units/vehicles/icons/Strv2000_24.jpg create mode 100644 resources/ui/units/vehicles/icons/Volvo740_24.jpg create mode 100644 resources/units/ground_units/AG-90.yaml create mode 100644 resources/units/ground_units/Artillerisystem08.yaml create mode 100644 resources/units/ground_units/BV410.yaml create mode 100644 resources/units/ground_units/BV410_RBS70.yaml create mode 100644 resources/units/ground_units/BV410_RBS90.yaml create mode 100644 resources/units/ground_units/CV9040.yaml create mode 100644 resources/units/ground_units/Grkpbv90.yaml create mode 100644 resources/units/ground_units/LvKv9040.yaml create mode 100644 resources/units/ground_units/LvS-103_Elverk103.yaml create mode 100644 resources/units/ground_units/LvS-103_Lavett103_HX_Rb103A.yaml create mode 100644 resources/units/ground_units/LvS-103_Lavett103_HX_Rb103B.yaml create mode 100644 resources/units/ground_units/LvS-103_Lavett103_Rb103A.yaml create mode 100644 resources/units/ground_units/LvS-103_Lavett103_Rb103B.yaml create mode 100644 resources/units/ground_units/LvS-103_PM103.yaml create mode 100644 resources/units/ground_units/LvS-103_PM103_HX.yaml create mode 100644 resources/units/ground_units/LvS-103_StriE103.yaml create mode 100644 resources/units/ground_units/RBS-15KA.yaml create mode 100644 resources/units/ground_units/RBS-57.yaml create mode 100644 resources/units/ground_units/RBS-58.yaml create mode 100644 resources/units/ground_units/RBS-70.yaml create mode 100644 resources/units/ground_units/RBS-90.yaml create mode 100644 resources/units/ground_units/RBS-98.yaml create mode 100644 resources/units/ground_units/Strv103.yaml create mode 100644 resources/units/ground_units/Strv2000.yaml create mode 100644 resources/units/ground_units/SwedishinfantryAK4.yaml create mode 100644 resources/units/ground_units/SwedishinfantryAK5.yaml create mode 100644 resources/units/ground_units/SwedishinfantryAK5GT.yaml create mode 100644 resources/units/ground_units/SwedishinfantryKSP58.yaml create mode 100644 resources/units/ground_units/SwedishinfantryKSP90.yaml create mode 100644 resources/units/ground_units/SwedishinfantryPskott86.yaml create mode 100644 resources/units/ground_units/UndE23.yaml create mode 100644 resources/units/ground_units/Volvo740.yaml create mode 100644 resources/units/ships/HSwMS_Visby.yaml create mode 100644 resources/units/ships/Strb90.yaml diff --git a/changelog.md b/changelog.md index 096d3218..7e4eafe5 100644 --- a/changelog.md +++ b/changelog.md @@ -11,6 +11,7 @@ * **[Mission Generation]** Enable spectating & F11 free camera when the "Allow external views" option is selected * **[Cheat Menu]** Option to instantly transfer squadrons across bases. * **[Modding]** Support for IDF Mod Project F-16I Sufa & F-16D v3.2 mod +* **[Modding]** Support for Swedish Military Assets for DCS by Currenthill Version 1.10 * **[UI]** Add selectable units in faction overview during campaign generation. * **[UI]** Add button to rename pilots in Air Wing's Squadron dialog. * **[UI]** Add clone buttons for flights & packages. diff --git a/game/factions/faction.py b/game/factions/faction.py index 4f1c0a48..5af19858 100644 --- a/game/factions/faction.py +++ b/game/factions/faction.py @@ -431,6 +431,45 @@ class Faction: self.remove_vehicle("SAM SA-14 Strela-3 manpad") self.remove_vehicle("SAM SA-24 Igla-S manpad") self.remove_vehicle("Polyana-D4M1 C2 node") + # swedish military assets pack + if not mod_settings.swedishmilitaryassetspack: + self.remove_vehicle("BV410_RBS70") + self.remove_vehicle("BV410_RBS90") + self.remove_vehicle("LvS_103_Lavett103_Rb103A") + self.remove_vehicle("LvS_103_Lavett103_Rb103B") + self.remove_vehicle("LvS_103_Lavett103_HX_Rb103A") + self.remove_vehicle("LvS_103_Lavett103_HX_Rb103B") + self.remove_vehicle("LvS_103_StriE103") + self.remove_vehicle("LvS_103_PM103") + self.remove_vehicle("LvS_103_PM103_HX") + self.remove_vehicle("LvS_103_Elverk103") + self.remove_vehicle("LvKv9040") + self.remove_vehicle("RBS_70") + self.remove_vehicle("RBS_90") + self.remove_vehicle("RBS_98") + self.remove_vehicle("UndE23") + self.remove_vehicle("BV410") + self.remove_vehicle("CV9040") + self.remove_vehicle("Strv103") + self.remove_vehicle("Strv121") + self.remove_vehicle("Strv122") + self.remove_vehicle("Strv2000") + self.remove_vehicle("Volvo740") + self.remove_vehicle("RBS_15KA") + self.remove_vehicle("AG_90") + self.remove_vehicle("SwedishinfantryAK4") + self.remove_vehicle("SwedishinfantryAK5") + self.remove_vehicle("SwedishinfantryAK5GT") + self.remove_vehicle("SwedishinfantryKSP90") + self.remove_vehicle("SwedishinfantryKSP58") + self.remove_vehicle("SwedishinfantryPskott86") + self.remove_vehicle("RBS_57") + self.remove_vehicle("RBS_58") + self.remove_vehicle("Artillerisystem08") + self.remove_vehicle("Grkpbv90") + self.remove_ship("HSwMS_Visby") + self.remove_ship("Strb90") + self.remove_aircraft("HKP15B") def remove_aircraft(self, name: str) -> None: for i in self.aircrafts: @@ -452,6 +491,11 @@ class Faction: if i.dcs_unit_type.id == name: self.frontline_units.remove(i) + def remove_ship(self, name: str) -> None: + for i in self.naval_units: + if i.dcs_unit_type.id == name: + self.naval_units.remove(i) + def load_ship(name: str) -> Optional[Type[ShipType]]: if (ship := getattr(dcs.ships, name, None)) is not None: diff --git a/game/modsupport.py b/game/modsupport.py index a5413e3f..f0f9bced 100644 --- a/game/modsupport.py +++ b/game/modsupport.py @@ -2,8 +2,9 @@ from typing import Type from dcs.helicopters import HelicopterType, helicopter_map from dcs.planes import PlaneType, plane_map -from dcs.unittype import VehicleType +from dcs.unittype import VehicleType, ShipType from dcs.vehicles import vehicle_map +from dcs.ships import ship_map def helicoptermod(helicopter: Type[HelicopterType]) -> Type[HelicopterType]: @@ -19,3 +20,8 @@ def planemod(plane: Type[PlaneType]) -> Type[PlaneType]: def vehiclemod(vehicle: Type[VehicleType]) -> Type[VehicleType]: vehicle_map[vehicle.id] = vehicle return vehicle + + +def shipmod(ship: Type[ShipType]) -> Type[ShipType]: + ship_map[ship.id] = ship + return ship diff --git a/game/theater/start_generator.py b/game/theater/start_generator.py index d4e98c40..9e6ef410 100644 --- a/game/theater/start_generator.py +++ b/game/theater/start_generator.py @@ -71,6 +71,7 @@ class ModSettings: frenchpack: bool = False high_digit_sams: bool = False ov10a_bronco: bool = False + swedishmilitaryassetspack: bool = False class GameGenerator: diff --git a/pydcs_extensions/__init__.py b/pydcs_extensions/__init__.py index cf304267..19d2271e 100644 --- a/pydcs_extensions/__init__.py +++ b/pydcs_extensions/__init__.py @@ -14,6 +14,7 @@ from .su30 import * from .su57 import * from .uh60l import * from .ov10a import * +from .swedishmilitaryassetspack import * def load_mods() -> None: diff --git a/pydcs_extensions/swedishmilitaryassetspack/__init__.py b/pydcs_extensions/swedishmilitaryassetspack/__init__.py new file mode 100644 index 00000000..bc823d73 --- /dev/null +++ b/pydcs_extensions/swedishmilitaryassetspack/__init__.py @@ -0,0 +1 @@ +from .swedishmilitaryassetspack import * diff --git a/pydcs_extensions/swedishmilitaryassetspack/swedishmilitaryassetspack.py b/pydcs_extensions/swedishmilitaryassetspack/swedishmilitaryassetspack.py new file mode 100644 index 00000000..e3b5915b --- /dev/null +++ b/pydcs_extensions/swedishmilitaryassetspack/swedishmilitaryassetspack.py @@ -0,0 +1,418 @@ +# Requires Swedish Military Assets for DCS by Currenthill: +# https://forum.dcs.world/topic/295202-swedish-military-assets-for-dcs-by-currenthill/ +# + +from typing import Set + +from dcs import unittype, task +from dcs.helicopters import HelicopterType +from dcs.liveries_scanner import Liveries + +from game.modsupport import vehiclemod, shipmod, helicoptermod + + +@vehiclemod +class BV410_RBS70(unittype.VehicleType): + id = "BV410_RBS70" + name = "[SMA] RBS 70 EldE 70 Mobile SAM LN" + detection_range = 0 + threat_range = 8000 + air_weapon_dist = 8000 + eplrs = True + + +@vehiclemod +class BV410_RBS90(unittype.VehicleType): + id = "BV410_RBS90" + name = "[SMA] RBS 90 EldE 90 Mobile SAM LN" + detection_range = 20000 + threat_range = 8000 + air_weapon_dist = 8000 + eplrs = True + + +@vehiclemod +class LvS_103_Lavett103_Rb103A(unittype.VehicleType): + id = "LvS-103_Lavett103_Rb103A" + name = "[SMA] LvS-103 Lavett 103 Rb103A Stationary SAM LN" + detection_range = 0 + threat_range = 150000 + air_weapon_dist = 150000 + eplrs = True + + +@vehiclemod +class LvS_103_Lavett103_Rb103B(unittype.VehicleType): + id = "LvS-103_Lavett103_Rb103B" + name = "[SMA] LvS-103 Lavett 103 Rb103B Stationary SAM LN" + detection_range = 0 + threat_range = 35000 + air_weapon_dist = 35000 + eplrs = True + + +@vehiclemod +class LvS_103_Lavett103_HX_Rb103A(unittype.VehicleType): + id = "LvS-103_Lavett103_HX_Rb103A" + name = "[SMA] LvS-103 Lavett 103 Rb103A Mobile SAM LN" + detection_range = 0 + threat_range = 150000 + air_weapon_dist = 150000 + eplrs = True + + +@vehiclemod +class LvS_103_Lavett103_HX_Rb103B(unittype.VehicleType): + id = "LvS-103_Lavett103_HX_Rb103B" + name = "[SMA] LvS-103 Lavett 103 Rb103B Mobile SAM LN" + detection_range = 0 + threat_range = 150000 + air_weapon_dist = 150000 + eplrs = True + + +@vehiclemod +class LvS_103_StriE103(unittype.VehicleType): + id = "LvS-103_StriE103" + name = "[SMA] LvS-103 StriE 103 Mobile SAM ECS" + detection_range = 0 + threat_range = 0 + air_weapon_dist = 0 + eplrs = True + + +@vehiclemod +class LvS_103_PM103(unittype.VehicleType): + id = "LvS-103_PM103" + name = "[SMA] LvS-103 PM 103 Stationary SAM STR" + detection_range = 160000 + threat_range = 0 + air_weapon_dist = 0 + eplrs = True + + +@vehiclemod +class LvS_103_PM103_HX(unittype.VehicleType): + id = "LvS-103_PM103_HX" + name = "[SMA] LvS-103 PM 103 Mobile SAM STR" + detection_range = 160000 + threat_range = 0 + air_weapon_dist = 0 + eplrs = True + + +@vehiclemod +class LvS_103_Elverk103(unittype.VehicleType): + id = "LvS-103_Elverk103" + name = "[SMA] LvS-103 Elverk 103 Mobile SAM EPP" + detection_range = 0 + threat_range = 0 + air_weapon_dist = 0 + eplrs = True + + +@vehiclemod +class LvKv9040(unittype.VehicleType): + id = "LvKv9040" + name = "[SMA] Lvkv 9040 SPAAG" + detection_range = 15000 + threat_range = 4000 + air_weapon_dist = 4000 + eplrs = True + + +@vehiclemod +class RBS_70(unittype.VehicleType): + id = "RBS-70" + name = "[SMA] RBS 70 EldE 70 Stationary SAM LN" + detection_range = 0 + threat_range = 8000 + air_weapon_dist = 8000 + eplrs = True + + +@vehiclemod +class RBS_90(unittype.VehicleType): + id = "RBS-90" + name = "[SMA] RBS 90 EldE 90 Stationary SAM LN" + detection_range = 20000 + threat_range = 8000 + air_weapon_dist = 8000 + eplrs = True + + +@vehiclemod +class RBS_98(unittype.VehicleType): + id = "RBS-98" + name = "[SMA] RBS 98 EldE 98 Mobile SAM LN" + detection_range = 0 + threat_range = 20000 + air_weapon_dist = 20000 + eplrs = True + + +@vehiclemod +class UndE23(unittype.VehicleType): + id = "UndE23" + name = "[SMA] UndE 23 (RBS 70/90/98) SAM STR" + detection_range = 100000 + threat_range = 0 + air_weapon_dist = 0 + eplrs = True + + +@vehiclemod +class BV410(unittype.VehicleType): + id = "BV410" + name = "[SMA] Bv 410 ATV" + detection_range = 0 + threat_range = 1800 + air_weapon_dist = 1800 + eplrs = True + + +@vehiclemod +class CV9040(unittype.VehicleType): + id = "CV9040" + name = "[SMA] Strf 9040 IFV" + detection_range = 0 + threat_range = 4000 + air_weapon_dist = 4000 + eplrs = True + + +@vehiclemod +class Strv103(unittype.VehicleType): + id = "Strv103" + name = "[SMA] Strv 103 MBT" + detection_range = 6000 + threat_range = 6000 + air_weapon_dist = 6000 + eplrs = True + + +@vehiclemod +class Strv121(unittype.VehicleType): + id = "Strv121" + name = "[SMA] Strv 121 MBT" + detection_range = 0 + threat_range = 8000 + air_weapon_dist = 1200 + eplrs = True + + +@vehiclemod +class Strv122(unittype.VehicleType): + id = "Strv122" + name = "[SMA] Strv 122 MBT" + detection_range = 0 + threat_range = 8000 + air_weapon_dist = 1200 + eplrs = True + + +@vehiclemod +class Strv2000(unittype.VehicleType): + id = "Strv2000" + name = "[SMA] Strv 2000 T140/40 MBT" + detection_range = 8000 + threat_range = 8000 + air_weapon_dist = 4000 + eplrs = True + + +@vehiclemod +class Volvo740(unittype.VehicleType): + id = "Volvo740" + name = "[SMA] Volvo 740 Improvised fighting vehicle" + detection_range = 0 + threat_range = 1200 + air_weapon_dist = 1200 + eplrs = True + + +@vehiclemod +class RBS_15KA(unittype.VehicleType): + id = "RBS-15KA" + name = "[SMA] RBS 15KA LBASM" + detection_range = 300000 + threat_range = 300000 + air_weapon_dist = 300000 + eplrs = True + + +## INFANTRY + + +@vehiclemod +class AG_90(unittype.VehicleType): + id = "AG-90" + name = "[SMA] Ag 90 Sniper team" + detection_range = 5000 + threat_range = 1800 + air_weapon_dist = 1800 + eplrs = True + + +@vehiclemod +class SwedishinfantryAK4(unittype.VehicleType): + id = "SwedishinfantryAK4" + name = "[SMA] Ak 4 Soldier" + detection_range = 1500 + threat_range = 600 + air_weapon_dist = 600 + eplrs = True + + +@vehiclemod +class SwedishinfantryAK5(unittype.VehicleType): + id = "SwedishinfantryAK5" + name = "[SMA] Ak 5 Soldier" + detection_range = 1500 + threat_range = 500 + air_weapon_dist = 500 + eplrs = True + + +@vehiclemod +class SwedishinfantryAK5GT(unittype.VehicleType): + id = "SwedishinfantryAK5GT" + name = "[SMA] Ak 5 Granattillsats Soldier" + detection_range = 1000 + threat_range = 500 + air_weapon_dist = 500 + eplrs = True + + +@vehiclemod +class SwedishinfantryKSP90(unittype.VehicleType): + id = "SwedishinfantryKSP90" + name = "[SMA] Ksp 90 Soldier" + detection_range = 700 + threat_range = 700 + air_weapon_dist = 700 + eplrs = True + + +@vehiclemod +class SwedishinfantryKSP58(unittype.VehicleType): + id = "SwedishinfantryKSP58" + name = "[SMA] Ksp 58 Soldier" + detection_range = 1200 + threat_range = 1200 + air_weapon_dist = 1200 + eplrs = True + + +@vehiclemod +class SwedishinfantryPskott86(unittype.VehicleType): + id = "SwedishinfantryPskott86" + name = "[SMA] Pskott 86 Soldier" + detection_range = 1500 + threat_range = 400 + air_weapon_dist = 400 + eplrs = True + + +@vehiclemod +class RBS_57(unittype.VehicleType): + id = "RBS-57" + name = "[SMA] RBS 57 ATGM" + detection_range = 5000 + threat_range = 1000 + air_weapon_dist = 1000 + eplrs = True + + +@vehiclemod +class RBS_58(unittype.VehicleType): + id = "RBS-58" + name = "[SMA] RBS 58 ATGM" + detection_range = 5000 + threat_range = 5000 + air_weapon_dist = 5000 + eplrs = True + + +## ARTILLERY + + +@vehiclemod +class Artillerisystem08(unittype.VehicleType): + id = "Artillerisystem08" + name = "[SMA] Artillerisystem 08 SPG" + detection_range = 10000 + threat_range = 25000 + air_weapon_dist = 25000 + eplrs = True + + +@vehiclemod +class Grkpbv90(unittype.VehicleType): + id = "Grkpbv90" + name = "[SMA] Grkpbv 90 SPM" + detection_range = 0 + threat_range = 7500 + air_weapon_dist = 7500 + eplrs = True + + +## SHIPS + + +@shipmod +class HSwMS_Visby(unittype.ShipType): + id = "HSwMS_Visby" + name = "[SMA] HSwMS Visby Corvette" + plane_num = 0 + helicopter_num = 1 + parking = 1 + detection_range = 180000 + threat_range = 30000 + air_weapon_dist = 30000 + + +@shipmod +class Strb90(unittype.ShipType): + id = "Strb90" + name = "[SMA] Strb 90 FAC" + plane_num = 0 + helicopter_num = 0 + parking = 0 + detection_range = 46300 + threat_range = 10000 + air_weapon_dist = 10000 + + +## HELICOPTERS + + +@helicoptermod +class HKP15B(HelicopterType): + id = "HKP15B" + height = 3.4 + width = 10.83 + length = 11.45 + fuel_max = 686 + max_speed = 311 + chaff = 0 + flare = 0 + charge_total = 0 + chaff_charge_size = 0 + flare_charge_size = 0 + eplrs = True + radio_frequency = 124 + + panel_radio = { + 1: { + "channels": {6: 41, 2: 31, 8: 50, 3: 32, 1: 30, 4: 33, 5: 40, 7: 42}, + }, + } + + livery_name = "HKP15B" # from type + Liveries = Liveries()[livery_name] + + pylons: Set[int] = set() + + tasks = [task.Reconnaissance, task.Transport] + task_default = task.Reconnaissance diff --git a/qt_ui/windows/newgame/QNewGameWizard.py b/qt_ui/windows/newgame/QNewGameWizard.py index 4bd873e8..fb8a4d2c 100644 --- a/qt_ui/windows/newgame/QNewGameWizard.py +++ b/qt_ui/windows/newgame/QNewGameWizard.py @@ -194,6 +194,7 @@ class NewGameWizard(QtWidgets.QWizard): ov10a_bronco=self.field("ov10a_bronco"), frenchpack=self.field("frenchpack"), high_digit_sams=self.field("high_digit_sams"), + swedishmilitaryassetspack=self.field("swedishmilitaryassetspack"), ) blue_faction = self.faction_selection_page.selected_blue_faction @@ -835,6 +836,8 @@ class GeneratorOptions(QtWidgets.QWizardPage): self.registerField("frenchpack", frenchpack) high_digit_sams = QtWidgets.QCheckBox() self.registerField("high_digit_sams", high_digit_sams) + swedishmilitaryassetspack = QtWidgets.QCheckBox() + self.registerField("swedishmilitaryassetspack", swedishmilitaryassetspack) modHelpText = QtWidgets.QLabel( "
Select the mods you have installed. If your chosen factions support them, you'll be able to use these mods in your campaign.
" @@ -858,6 +861,7 @@ class GeneratorOptions(QtWidgets.QWizardPage): ("F-105 Thunderchief (v2.7.12.23x)", f105_thunderchief), ("Frenchpack", frenchpack), ("High Digit SAMs", high_digit_sams), + ("Swedish Military Assets pack (1.10)", swedishmilitaryassetspack), ("JAS 39 Gripen (v1.8.0-beta)", jas39_gripen), ("OV-10A Bronco", ov10a_bronco), ("Su-30 Flanker-H (V2.01B)", su30_flanker_h), diff --git a/resources/factions/sweden_1997.json b/resources/factions/sweden_1997.json new file mode 100644 index 00000000..8f238cde --- /dev/null +++ b/resources/factions/sweden_1997.json @@ -0,0 +1,71 @@ +{ + "country": "Sweden", + "name": "Sweden 1997 Swedish Military Assets", + "authors": "Khopa, bgreman & Ghosti", + "description": "Sweden in 1997, when both the Strv 103 and Strv 122 were in service. Requires the Swedish Military Assets for DCS by Currenthill. JAS39 Gripen Mod is highly recommended.
", + "locales": [ + "sv_SE" + ], + "aircrafts": [ + "AJS-37 Viggen", + "JAS 39 Gripen", + "JAS 39 Gripen A/G", + "UH-1H Iroquois" + ], + "awacs": [ + "E-3A" + ], + "tankers": [ + "KC-130", + "KC-130J" + ], + "frontline_units": [ + "Strf 9040 IFV", + "Lvkv 9040 SPAAG", + "Strv 103 MBT", + "Strv 2000 T140/40 MBT", + "Leopard 2A4", + "Leopard 2A5", + "BV 410", + "BV 410 RBS 90", + "Volvo 740 with KSP 58 7.62mm" + ], + "artillery_units": [ + "Grkpbv 90 SPM", + "Haubits 77 AD SPG" + ], + "air_defense_units": [ + "SAM Hawk SR (AN/MPQ-50)", + "SAM UndE 23 (RBS 70/90/98) STR" + ], + "logistics_units": [ + "Truck M818 6x6" + ], + "infantry_units": [ + "Soldier Ak 4", + "Soldier Ak 5", + "Soldier Ak 5 Granattillsats", + "Soldier Ksp 58", + "Soldier Ksp 90", + "Ag 90 Sniper team", + "Soldier Pskott 86", + "RBS 90 EldE 90 Stationary SAM LN" + ], + "preset_groups": [ + "RBS-15", + "RBS-70", + "RBS-90", + "Hawk" + ], + "naval_units": [ + "HSwMS Visby Corvette", + "Strb 90 FAC" + ], + "missiles": [], + "requirements": { + "JAS39 Gripen Mod by Community": "https://github.com/whisky-actual/Community-JAS-39-C", + "Swedish Military Assets for DCS by Currenthill": "https://forum.dcs.world/topic/295202-swedish-military-assets-for-dcs-by-currenthill/" + }, + "has_jtac": true, + "jtac_unit": "MQ-9 Reaper" +} \ No newline at end of file diff --git a/resources/factions/sweden_2020.json b/resources/factions/sweden_2020.json new file mode 100644 index 00000000..fe00785e --- /dev/null +++ b/resources/factions/sweden_2020.json @@ -0,0 +1,78 @@ +{ + "country": "Sweden", + "name": "Sweden 2020 Swedish Military Assets", + "authors": "Khopa, bgreman & Ghosti", + "description": "Sweden in 2020. Requires the Swedish Military Assets for DCS by Currenthill. JAS39 Gripen Mod is highly recommended, AJS37 Viggen is retained in case the mod is not installed.
", + "locales": [ + "sv_SE" + ], + "aircrafts": [ + "AJS-37 Viggen", + "JAS 39 Gripen", + "JAS 39 Gripen A/G", + "UH-1H Iroquois", + "UH-60L" + ], + "awacs": [ + "E-3A" + ], + "tankers": [ + "KC-130", + "KC-130J" + ], + "frontline_units": [ + "Strf 9040 IFV", + "Lvkv 9040 SPAAG", + "Strv 2000 T140/40 MBT", + "Leopard 2A4", + "Leopard 2A5", + "BV 410", + "BV 410 RBS 90", + "Volvo 740 with KSP 58 7.62mm" + ], + "artillery_units": [ + "Grkpbv 90 SPM", + "Artillerisystem 08 SPG" + ], + "air_defense_units": [ + "SAM Hawk SR (AN/MPQ-50)", + "SAM UndE 23 (RBS 70/90/98) STR" + ], + "logistics_units": [ + "Truck M818 6x6" + ], + "infantry_units": [ + "Soldier Ak 4", + "Soldier Ak 5", + "Soldier Ak 5 Granattillsats", + "Soldier Ksp 58", + "Soldier Ksp 90", + "Ag 90 Sniper team", + "Soldier Pskott 86", + "Soldier RBS 57 ATGM", + "Soldier RBS 58 ATGM", + "RBS 90 EldE 90 Stationary SAM LN" + ], + "preset_groups": [ + "RBS-15", + "RBS-70", + "RBS-90", + "RBS-98", + "LvS-103 Rb103A", + "LvS-103 Rb103B", + "LvS-103 Rb103A Mobile", + "LvS-103 Rb103B Mobile", + "Hawk" + ], + "naval_units": [ + "HSwMS Visby Corvette", + "Strb 90 FAC" + ], + "missiles": [], + "requirements": { + "JAS39 Gripen Mod by Community": "https://github.com/whisky-actual/Community-JAS-39-C", + "Swedish Military Assets for DCS by Currenthill": "https://forum.dcs.world/topic/295202-swedish-military-assets-for-dcs-by-currenthill/" + }, + "has_jtac": true, + "jtac_unit": "MQ-9 Reaper" +} \ No newline at end of file diff --git a/resources/groups/LvS-103_Rb103A.yaml b/resources/groups/LvS-103_Rb103A.yaml new file mode 100644 index 00000000..5c1a6229 --- /dev/null +++ b/resources/groups/LvS-103_Rb103A.yaml @@ -0,0 +1,11 @@ +name: LvS-103 Rb103A +tasks: + - LORAD +units: + - SAM LvS-103 PM 103 Stationary STR + - SAM LvS-103 StriE 103 Mobile ECS + - SAM LvS-103 Elverk 103 Mobile EPP + - SAM LvS-103 Lavett 103 Rb103A Stationary LN + - SAM LvS-103 Lavett 103 Rb103B Stationary LN +layouts: + - LvS-103A Battery \ No newline at end of file diff --git a/resources/groups/LvS-103_Rb103A_Mobile.yaml b/resources/groups/LvS-103_Rb103A_Mobile.yaml new file mode 100644 index 00000000..55608fc7 --- /dev/null +++ b/resources/groups/LvS-103_Rb103A_Mobile.yaml @@ -0,0 +1,11 @@ +name: LvS-103 Rb103A Mobile +tasks: + - LORAD +units: + - SAM LvS-103 PM 103 Mobile STR + - SAM LvS-103 StriE 103 Mobile ECS + - SAM LvS-103 Elverk 103 Mobile EPP + - SAM LvS-103 Lavett 103 Rb103A Mobile LN + - SAM LvS-103 Lavett 103 Rb103B Mobile LN +layouts: + - LvS-103A Mobile Battery \ No newline at end of file diff --git a/resources/groups/LvS-103_Rb103B.yaml b/resources/groups/LvS-103_Rb103B.yaml new file mode 100644 index 00000000..66b37736 --- /dev/null +++ b/resources/groups/LvS-103_Rb103B.yaml @@ -0,0 +1,10 @@ +name: LvS-103 Rb103B +tasks: + - MERAD +units: + - SAM LvS-103 PM 103 Stationary STR + - SAM LvS-103 StriE 103 Mobile ECS + - SAM LvS-103 Elverk 103 Mobile EPP + - SAM LvS-103 Lavett 103 Rb103B Stationary LN +layouts: + - LvS-103B Battery \ No newline at end of file diff --git a/resources/groups/LvS-103_Rb103B_Mobile.yaml b/resources/groups/LvS-103_Rb103B_Mobile.yaml new file mode 100644 index 00000000..0c51ffe4 --- /dev/null +++ b/resources/groups/LvS-103_Rb103B_Mobile.yaml @@ -0,0 +1,10 @@ +name: LvS-103 Rb103B Mobile +tasks: + - MERAD +units: + - SAM LvS-103 PM 103 Mobile STR + - SAM LvS-103 StriE 103 Mobile ECS + - SAM LvS-103 Elverk 103 Mobile EPP + - SAM LvS-103 Lavett 103 Rb103B Mobile LN +layouts: + - LvS-103B Mobile Battery \ No newline at end of file diff --git a/resources/groups/RBS-15.yaml b/resources/groups/RBS-15.yaml new file mode 100644 index 00000000..adecedf0 --- /dev/null +++ b/resources/groups/RBS-15.yaml @@ -0,0 +1,8 @@ +name: RBS-15 +tasks: + - Coastal +units: + - AShM RBS 15KA + - SAM UndE 23 (RBS 70/90/98) STR +layouts: + - Silkworm \ No newline at end of file diff --git a/resources/groups/RBS-70.yaml b/resources/groups/RBS-70.yaml new file mode 100644 index 00000000..9b2f5645 --- /dev/null +++ b/resources/groups/RBS-70.yaml @@ -0,0 +1,10 @@ +name: RBS-70 +tasks: + - SHORAD +units: + - RBS 70 EldE 70 Stationary SAM LN + - BV 410 RBS 70 + - SAM UndE 23 (RBS 70/90/98) STR +layouts: + - 6 Launcher Site (Semicircle) + - 6 Launcher Site (Circle) \ No newline at end of file diff --git a/resources/groups/RBS-90.yaml b/resources/groups/RBS-90.yaml new file mode 100644 index 00000000..23dc2b01 --- /dev/null +++ b/resources/groups/RBS-90.yaml @@ -0,0 +1,9 @@ +name: RBS-90 +tasks: + - SHORAD +units: + - RBS 90 EldE 90 Stationary SAM LN + - BV 410 RBS 90 + - SAM UndE 23 (RBS 70/90/98) STR +layouts: + - 2 Launcher Site \ No newline at end of file diff --git a/resources/groups/RBS-98.yaml b/resources/groups/RBS-98.yaml new file mode 100644 index 00000000..5e3d3c23 --- /dev/null +++ b/resources/groups/RBS-98.yaml @@ -0,0 +1,9 @@ +name: RBS-98 +tasks: + - SHORAD +units: + - RBS 98 EldE 98 Mobile SAM LN + - SAM UndE 23 (RBS 70/90/98) STR +layouts: + - 6 Launcher Site (Semicircle) + - 6 Launcher Site (Circle) \ No newline at end of file diff --git a/resources/layouts/anti_air/LvS-103A_Battery.yaml b/resources/layouts/anti_air/LvS-103A_Battery.yaml new file mode 100644 index 00000000..75ace356 --- /dev/null +++ b/resources/layouts/anti_air/LvS-103A_Battery.yaml @@ -0,0 +1,53 @@ +name: LvS-103A Battery +tasks: + - LORAD +groups: + - Patriot: + - name: Patriot Battery 0 + unit_count: + - 2 + unit_types: + - LvS-103_PM103 + - name: Patriot Battery 1 + unit_count: + - 1 + unit_types: + - LvS-103_Lavett103_Rb103B + - name: Patriot Battery 2 + unit_count: + - 1 + unit_types: + - LvS-103_StriE103 + - name: Patriot Battery 3 + unit_count: + - 1 + unit_types: + - LvS-103_Lavett103_Rb103B + - name: Patriot Battery 4 + unit_count: + - 1 + unit_types: + - LvS-103_Elverk103 + - name: Patriot Battery 5 + unit_count: + - 8 + unit_types: + - LvS-103_Lavett103_Rb103A + - PD: + - name: Patriot Battery 7 + optional: true + sub_task: PointDefense + unit_count: + - 1 + - 2 + unit_classes: + - SHORAD + - name: Patriot Battery 6 + sub_task: AAA + optional: true + unit_count: + - 1 + - 2 + unit_classes: + - AAA +layout_file: resources/layouts/anti_air/Patriot_Battery.miz \ No newline at end of file diff --git a/resources/layouts/anti_air/LvS-103A_Mobile_Battery.yaml b/resources/layouts/anti_air/LvS-103A_Mobile_Battery.yaml new file mode 100644 index 00000000..f28f377b --- /dev/null +++ b/resources/layouts/anti_air/LvS-103A_Mobile_Battery.yaml @@ -0,0 +1,53 @@ +name: LvS-103A Mobile Battery +tasks: + - LORAD +groups: + - Patriot: + - name: Patriot Battery 0 + unit_count: + - 2 + unit_types: + - LvS-103_PM103_HX + - name: Patriot Battery 1 + unit_count: + - 1 + unit_types: + - LvS-103_Lavett103_HX_Rb103B + - name: Patriot Battery 2 + unit_count: + - 1 + unit_types: + - LvS-103_StriE103 + - name: Patriot Battery 3 + unit_count: + - 1 + unit_types: + - LvS-103_Lavett103_HX_Rb103B + - name: Patriot Battery 4 + unit_count: + - 1 + unit_types: + - LvS-103_Elverk103 + - name: Patriot Battery 5 + unit_count: + - 8 + unit_types: + - LvS-103_Lavett103_HX_Rb103A + - PD: + - name: Patriot Battery 7 + optional: true + sub_task: PointDefense + unit_count: + - 1 + - 2 + unit_classes: + - SHORAD + - name: Patriot Battery 6 + sub_task: AAA + optional: true + unit_count: + - 1 + - 2 + unit_classes: + - AAA +layout_file: resources/layouts/anti_air/Patriot_Battery.miz \ No newline at end of file diff --git a/resources/layouts/anti_air/LvS-103B_Battery.yaml b/resources/layouts/anti_air/LvS-103B_Battery.yaml new file mode 100644 index 00000000..7fe56fbf --- /dev/null +++ b/resources/layouts/anti_air/LvS-103B_Battery.yaml @@ -0,0 +1,53 @@ +name: LvS-103B Battery +tasks: + - MERAD +groups: + - Patriot: + - name: Patriot Battery 0 + unit_count: + - 2 + unit_types: + - LvS-103_PM103 + - name: Patriot Battery 1 + unit_count: + - 1 + unit_classes: + - SHORAD + - name: Patriot Battery 2 + unit_count: + - 1 + unit_types: + - LvS-103_StriE103 + - name: Patriot Battery 3 + unit_count: + - 1 + unit_classes: + - SHORAD + - name: Patriot Battery 4 + unit_count: + - 1 + unit_types: + - LvS-103_Elverk103 + - name: Patriot Battery 5 + unit_count: + - 8 + unit_types: + - LvS-103_Lavett103_Rb103B + - PD: + - name: Patriot Battery 7 + optional: true + sub_task: PointDefense + unit_count: + - 1 + - 2 + unit_classes: + - SHORAD + - name: Patriot Battery 6 + sub_task: AAA + optional: true + unit_count: + - 1 + - 2 + unit_classes: + - AAA +layout_file: resources/layouts/anti_air/Patriot_Battery.miz \ No newline at end of file diff --git a/resources/layouts/anti_air/LvS-103B_Mobile_Battery.yaml b/resources/layouts/anti_air/LvS-103B_Mobile_Battery.yaml new file mode 100644 index 00000000..58e6f419 --- /dev/null +++ b/resources/layouts/anti_air/LvS-103B_Mobile_Battery.yaml @@ -0,0 +1,53 @@ +name: LvS-103B Mobile Battery +tasks: + - MERAD +groups: + - Patriot: + - name: Patriot Battery 0 + unit_count: + - 2 + unit_types: + - LvS-103_PM103_HX + - name: Patriot Battery 1 + unit_count: + - 1 + unit_classes: + - SHORAD + - name: Patriot Battery 2 + unit_count: + - 1 + unit_types: + - LvS-103_StriE103 + - name: Patriot Battery 3 + unit_count: + - 1 + unit_classes: + - SHORAD + - name: Patriot Battery 4 + unit_count: + - 1 + unit_types: + - LvS-103_Elverk103 + - name: Patriot Battery 5 + unit_count: + - 8 + unit_types: + - LvS-103_Lavett103_HX_Rb103B + - PD: + - name: Patriot Battery 7 + optional: true + sub_task: PointDefense + unit_count: + - 1 + - 2 + unit_classes: + - SHORAD + - name: Patriot Battery 6 + sub_task: AAA + optional: true + unit_count: + - 1 + - 2 + unit_classes: + - AAA +layout_file: resources/layouts/anti_air/Patriot_Battery.miz \ No newline at end of file diff --git a/resources/ui/units/vehicles/icons/Artillerisystem08_24.jpg b/resources/ui/units/vehicles/icons/Artillerisystem08_24.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c307801f259507ce3cee67b8bfae4d30d5fbad7 GIT binary patch literal 9358 zcmeHNd010Pwl7vePLp zJ8>~cJ8pyHBJ>hsm0e;IgAh)H6`? 1c={ zqvWhAB;{e&U(<%9rnssKe!jl@JgjJR*hv-}cYmQ&d6iV*I8X9&$wwp2efi#P_)`z+ zvi;?1ba42e!v?sio*8=3<06#JmH2NsqHOLw)T4^XAqI8$>b859>Yc1cb ->Q54)NY&ic7lmS;oQS>hRM^sp033G}Wb=HeVB{oL+8q^|7qCO~#G0 z4i=keQJVAmR~f?;mO=_21K|PEb1A3-$liy#Q%-$R`2q6VZwF?loUCt_`Se-7m6OE5 zSFe0A5*Y6Z{3Xim3h%95yZ-q3spshwd)+sZs}~vLd$gQSYroT8;Mjke<+=XCN{Y)u z%b$CHXewNjsS)B}x?fPVK+5^RQrTas;#m6O32QUOuNL3`;ysy+k>7TC5UX%h)+%_} z_%Vzr&1Y>~+ioAjBTB^<&z1!`^f DD%6`ngvtC2C`REe v)}NoQ zOXos|SQRuX=yCdpgwermJ`M5@r@p~g !-=9NzwB`4e9vnd bZq_9=a*f??g%+8`_B*z%y200JM(Y0yrTLfq literal 0 HcmV?d00001 diff --git a/resources/ui/units/vehicles/icons/BV410_RBS70_24.jpg b/resources/ui/units/vehicles/icons/BV410_RBS70_24.jpg new file mode 100644 index 0000000000000000000000000000000000000000..424fd1ef760db1e65aa3443cf5e52e47fe62d139 GIT binary patch literal 9297 zcmeHMc|4Ts+rP&y6d6k@G)bE=4PzM6B&Aid6m2wSVK6foTbAaW_Jc#qDHT$Lv~YwZ z wb8i3wewD z0aUlxZMFj#*o-hn03h$@L~aOUvjEt vpqn8dwR?^>t z^86|JHz+Tg(vgBP5!$N2{wcgnpp1omJ-pZ_WF)rTP b-52UoL+u4F!c;P ztT; rO6_rn){q0rV z@2~6MylrTF|DmnDqqFPdr|$lN!J*-i(Lcw=(YVk!r`tb_OAW>)B_ks(Bag;~kqU*E zw3>|UBBI<}8%KFsfI80PM+NM<(^qpJDlRs4`l{g>_;Qw}0qOmcel#>mWdFOs4*#Db zn+fb&T#Z0k8Ur^^S`ARa7qakWVM|6+pIvKsZ&8<946oF%H9QgP8FTDpi11bKXjXvT zvU}+8{HX5z4~96Ssqa1UXrCpShIb36?jQ~{x{KnaH|@Oj< ^A%P_CW&o}S!4J5!W0!h1KCI4aO2#zsWc>;Bm0 zaaWWkULquO5OBVshA*xy2<2M3p7SVdjC?@utu0IUqF8kMDr9*Fe+?_FZ5AIZ C9TEAwMAhnA+R0kEEH{2e(h=7e1 z)FxCj#oWx@muJeWjg4>~>2ZI!&^YHqsn}s$lUOX?BeK4kkXtV-Zo vndDJomdxFy<=UCOX&UKOw``0axLedjeLj=l|E94J0Z)p#?*z{y zyQp7vJ_bjW-8o1#6g3sMX_trHwC#ih_wIH{jH}51<8s%{IT~K#ePsg#1njxOo7Y=8 zE+^=P2=sj}=Pz^DMA92CiV{=Cd=U_bfZ@-OHV?Y`U0t) SFo%lHHXr(|LdR!A zkL?9QoewJK1s$1UE60Ua;!6l z2*@b=vkw98@qUlrJ{daJZ`U`*N5IoEkq@)%Cw{R=y-vJGFnqJ-(8KuYSh|~wqY^^< zxs?TGyWvtfA7Y*H9fP3(vGh{==#NF!w72QyhQ9Ni`sGIi=fp9cyxNKU3SvAj{CJP| zx$0XxBVytg^PU$|`lA2HF4;YDJLTivkS_6_u5niisiA2=TyXZreVrBit4p_f43^{! z`O&EZb)S0oiQ=vnR*CAv1zK+!(-rd`@VCgVTxvK>-i+&c)52 l;+h%aGn=FKy6#sVz8YVB#`Ax%Jikj`{qSqMW(L zt$F;UKJhuncNhJfqXh+C9ZiL;l t ze8UK5dD3q~dWtOv%lt$w#Jn=$>-rBRUB79ic#B_%TACktL?R%(bWUhNu+7~9O6J0# zWzE%vUe7 !z`JvGyk-Gr&mXXb@vY6^EwIes2k }+?D8=7 zS#n7|t`z}wgoy~4l@2;_tz%3HNS2$*GY_ssmQ6K3(+Q@h$DgAxg|BjK^#-0JKo>qX z91mDV74_LS6qeHVwzh?SDW%4sj~45Z0Ablgcnqc}sot(oE3us)%k3Syp7xsDHA<-! zdWd|^2!^W59v1f3u+v$F2X>QdO=G+C>Witfo1@P5q6a;qO}qL4I{*P*2TR5-v#fJt z5%6 ^r##utgs>c)|GVjr-mldfqNb<2D!n*&j=9 zEV9~b#1nO8eyz_)=Z^?hwl^1B_kXf~x{Gokq`oSWRg_uw3H3EQJ1b?HJHtKX!A
f{Dgq|YikxEAk#x4r#>pG zBUC$f78Uku_6Snp^T9z}u&7^CFokvf*DpaAuT}GpctDd$^GpQ580reeREU-O$oyI6 zqo&Y+eSIUXA}jd#L4e5TRh@xQkXTWDVHExm!5YYCv$YO|CJ)f(M~Hm4J?|ZVv+zoF zN`7QnbKh|GFVupd3@`dh=Mtg$Ibms2UaRi8_i1qNdU_{(-(@ `{F4qFp?T3q`IxwT*0>RRq( zr#9!Mxc~00X>OFSw^T5`ogY8uH9UIzxyPKbL t25S$qxEH=krd3 zn5xR^*a)YtwP7VY#x9QK#`_3POa3nH=ZND)$sJ+@R1KO=Xjc&X`do%Z)Sgx^(H97E zLih5ptMr+mhB*Euxa&S27oVlH4d3W3$I$gc3k X!y{LZ~yoR^&P zv!!}*Fov#!9Sr5iI-jiet_tbBd1~-}@^4+5_N96Ic}EJUcSMDwR)v0IBSA#t9UTEd z&zRr0UMczA3r#Br?QXpTLai?))j|ZsXjioI!oS@95?S49NQ@hP@A|3md6%^yJ^Voo z8OD|%EEVTd+;)))otgXp?9#q*b+9qxliMIRAUyLJ^|c^l90AV>nWX`NISFxNIezk3 zqln_RuQ!~PboB?gmD<;;Bc2`+<-EG$-5 VH%W{EE`?FLzEz>E)KEs zyp=F=-SiTsX*cCZ3xSWhv-Z&SpN(m6Pd8b7C`z`q5pGNnpDpAHIxa_9e-1uQbl6pH zW;LtwT(fO^&sbj4$c<{lfbxi0v7PD8dm?t^w#kl$WGV(U4d*a+)`t7$Y;kW0QPQ={ ziTnMy$B1Ch@Vi%Pmkyyr>pdD1sz!3$KRZ4RcN%&AtJ{Db&nN$7PhXPIHT`U~OB*S| zW0CHDmBL2zNMVSORqFmXLSElkA-B>myw29EU`s~EPGc)Qqyc%a9PAww b}Vsou=eZ^%seKx}y=W1rZ%HH3W>CN60 z9>{bK-|j*W_oY)9IO-bx)nS%l9Dfcoh^8OL@#FF>!>n- ^l<|0~A$E(iUY1Sck+7aT}uZU|v=gBDMlGw3t6{=tEMk^mTV0@IJlfogon zIB{kv^ee)QHX5)Oo8vFBfXvQlL3u{$A3BdN4I{K%&!Y#Ui)>zRjYE+v89X|hVJQ(! zX$&%%Xv)MhP02(&$& R;C{2&^a&O~t_vN0Qi&{k-;=06DgkNG@L$zZfVC0 4nor`LeXx zvDq32Kjci^?(m}pv7jzYRyLQx3*}FZyRbP-=O7x&9g%EKHX)i3&CSU06`e?)(%8ie z 14{{hJ)PdbBUVM@W9o0*y7Nn{cOZ^2}k;#n3f z7TJVm!7`;;OxyE$te{X@Ak)SR?l|-m?ziNFl>V|Q9+ppQhI%v6AmKME{3;VX(Zpry z8 nZ`%NiQm~+O#gES6%d7%`!wm{_+PF?1)<^W^ zyI{3U8O#B*0G>wY``bI)xlC7S{=OfnM+;5>)ZtOAzn}k?BPtB|ssO7y`cP{v-9Io0 z$_JoK4h`~0 VLeeF zc!FTS27Vw2;9<{&BYfZl=hyucdmV}W4rt{Gt=NDLE!G1b-~gJ$9-w;wbzu9(EuUp- zA{oLcuLD4~1wjUv03d%B0MRJ~5ne?QQ7SAbz60Pl?l*hh6#y)T;rOX 2g7Pe7Wu;k4 zN-DGGs;bOZo2{gzs;R1`j@8i6P@bcut%=p1i`BqNikQ;SMn+aqR#p+KqNIZTw;Lh` zTmMs~VSqeBE27$9tuzJ}1E(vZ^WiCiaiXkFH909+8F_$_hGoTha1K`BzHid7iYSXr zRpwNsRpFs%OrC9%ZgqWSyJPT+jT%g}_FkJDzR5j-1 z(VMl0pSkz&k8iYzvnMZ6Pi}nMN4LJPMlL&ctILvX (eR zsuj1M+@-OsOU?nVtgD8uJefw5t4qOH)l}zV^@%o;rJ-9?%xltYd%vP*Se=5a@m}dQ zTa!+&Z|ha&j2ir~e1LO^bdx#>B?YPbJ_@v^Iv2ahQJpA(l0u>0hAtbbS+CHXxA4-f zq?1V}PZw Z9Wap{dYfcZ1Z+zL9@E(HWQHFq&0^EwJ zhVF&h+(k0#I3mgB%u85>PBUHS=tK)honlOmD&-LEc5ODh9W%VQ^;L=X&%F^PndjSC z=f5i74b3rVRthRr9KW@f>VJ*KT-V~T*d!^qe*3|5Ht)R$ZIc~y|J*~e*IvAIp7HK2 zHR=5qqFmzVx;=KGWCdN2D;n7KFxaWqMqC;E(DhT>{nO*yH1wXnIrSl%d>~9NF=FM> zQTgCU5l8MHrM-Tn_w!@baVHo94i?j4gBACg7}UTbqN5G%bij|f5BtAPZ#8w1{ra%i z80;PKjuWT+Y%LFeUG7_U0+?R;!Ae8PxdH(@9{*wH7Knf)1eP%0vYY?L>pb!EkT z_U|dB0kdgUshh57U6`G}V2!52T8Cxo3x-Ec(&bJbQ$KZlWw(<|^2MAQ )nqDnaOcH7d2E=mq}49Ut(zc`)EQ&^TA!)mCaV~aH3w?9k9t}}|4 zPz%!zQVS2!bb6rFLa-mNzRZ32wSR_MRqC@7F?XM<8m6w)F3(<0mWuWWGjCIPsC7D# zrfFii`{X@sM~tjd!I#;JhqcdAy_x`FPL9B0i_yKO+Q&+Nl}!OO*R_NVr3qNM@=pu# z_2iSwtU1q3?kAk@(d=SeYq294*t~TgJGk_kLZ82QpRe-ZP?4eimKfTR1sjh)D?ae_ zxZ{(x4Ys-4bo~xF)VXV4$;?u0w-L33Jk`+5^2XiR{XX^7dYf7HKb^4uwb8i3wewD z0aUlxZMFj#*o-hn03h$@L~aOUvjEtvpqn8dwR?^>t z^86|JHz+Tg(vgBP5!$N2{wcgnpp1omJ-pZ_WF)rTP b-52UoL+u4F!c;P ztT; rO6_rn){q0rV z@2~6MylrTF|DmnDqqFPdr|$lN!J*-i(Lcw=(YVk!r`tb_OAW>)B_ks(Bag;~kqU*E zw3>|UBBI<}8%KFsfI80PM+NM<(^qpJDlRs4`l{g>_;Qw}0qOmcel#>mWdFOs4*#Db zn+fb&T#Z0k8Ur^^S`ARa7qakWVM|6+pIvKsZ&8<946oF%H9QgP8FTDpi11bKXjXvT zvU}+8{HX5z4~96Ssqa1UXrCpShIb36?jQ~{x{KnaH|@Oj< ^A%P_CW&o}S!4J5!W0!h1KCI4aO2#zsWc>;Bm0 zaaWWkULquO5OBVshA*xy2<2M3p7SVdjC?@utu0IUqF8kMDr9*Fe+?_FZ5AIZ C9TEAwMAhnA+R0kEEH{2e(h=7e1 z)FxCj#oWx@muJeWjg4>~>2ZI!&^YHqsn}s$lUOX?BeK4kkXtV-Zo vndDJomdxFy<=UCOX&UKOw``0axLedjeLj=l|E94J0Z)p#?*z{y zyQp7vJ_bjW-8o1#6g3sMX_trHwC#ih_wIH{jH}51<8s%{IT~K#ePsg#1njxOo7Y=8 zE+^=P2=sj}=Pz^DMA92CiV{=Cd=U_bfZ@-OHV?Y`U0t) SFo%lHHXr(|LdR!A zkL?9QoewJK1s$1UE60Ua;!6l z2*@b=vkw98@qUlrJ{daJZ`U`*N5IoEkq@)%Cw{R=y-vJGFnqJ-(8KuYSh|~wqY^^< zxs?TGyWvtfA7Y*H9fP3(vGh{==#NF!w72QyhQ9Ni`sGIi=fp9cyxNKU3SvAj{CJP| zx$0XxBVytg^PU$|`lA2HF4;YDJLTivkS_6_u5niisiA2=TyXZreVrBit4p_f43^{! z`O&EZb)S0oiQ=vnR*CAv1zK+!(-rd`@VCgVTxvK>-i+&c)52 l;+h%aGn=FKy6#sVz8YVB#`Ax%Jikj`{qSqMW(L zt$F;UKJhuncNhJfqXh+C9ZiL;l t ze8UK5dD3q~dWtOv%lt$w#Jn=$>-rBRUB79ic#B_%TACktL?R%(bWUhNu+7~9O6J0# zWzE%vUe7 !z`JvGyk-Gr&mXXb@vY6^EwIes2k }+?D8=7 zS#n7|t`z}wgoy~4l@2;_tz%3HNS2$*GY_ssmQ6K3(+Q@h$DgAxg|BjK^#-0JKo>qX z91mDV74_LS6qeHVwzh?SDW%4sj~45Z0Ablgcnqc}sot(oE3us)%k3Syp7xsDHA<-! zdWd|^2!^W59v1f3u+v$F2X>QdO=G+C>Witfo1@P5q6a;qO}qL4I{*P*2TR5-v#fJt z5%6 ^r##utgs>c)|GVjr-mldfqNb<2D!n*&j=9 zEV9~b#1nO8eyz_)=Z^?hwl^1B_kXf~x{Gokq`oSWRg_uw3H3EQJ1b?HJHtKX!A
f{Dgq|YikxEAk#x4r#>pG zBUC$f78Uku_6Snp^T9z}u&7^CFokvf*DpaAuT}GpctDd$^GpQ580reeREU-O$oyI6 zqo&Y+eSIUXA}jd#L4e5TRh@xQkXTWDVHExm!5YYCv$YO|CJ)f(M~Hm4J?|ZVv+zoF zN`7QnbKh|GFVupd3@`dh=Mtg$Ibms2UaRi8_i1qNdU_{(-(@ `{F4qFp?T3q`IxwT*0>RRq( zr#9!Mxc~00X>OFSw^T5`ogY8uH9UIzxyPKbL t25S$qxEH=krd3 zn5xR^*a)YtwP7VY#x9QK#`_3POa3nH=ZND)$sJ+@R1KO=Xjc&X`do%Z)Sgx^(H97E zLih5ptMr+mhB*Euxa&S27oVlH4d3W3$I$gc3k X!y{LZ~yoR^&P zv!!}*Fov#!9Sr5iI-jiet_tbBd1~-}@^4+5_N96Ic}EJUcSMDwR)v0IBSA#t9UTEd z&zRr0UMczA3r#Br?QXpTLai?))j|ZsXjioI!oS@95?S49NQ@hP@A|3md6%^yJ^Voo z8OD|%EEVTd+;)))otgXp?9#q*b+9qxliMIRAUyLJ^|c^l90AV>nWX`NISFxNIezk3 zqln_RuQ!~PboB?gmD<;;Bc2`+<-EG$-5 VH%W{EE`?FLzEz>E)KEs zyp=F=-SiTsX*cCZ3xSWhv-Z&SpN(m6Pd8b7C`z`q5pGNnpDpAHIxa_9e-1uQbl6pH zW;LtwT(fO^&sbj4$c<{lfbxi0v7PD8dm?t^w#kl$WGV(U4d*a+)`t7$Y;kW0QPQ={ ziTnMy$B1Ch@Vi%Pmkyyr>pdD1sz!3$KRZ4RcN%&AtJ{Db&nN$7PhXPIHT`U~OB*S| zW0CHDmBL2zNMVSORqFmXLSElkA-B>myw29EU`s~EPGc)Qqyc%a9PAww b}Vsou=eZ^%seKx}y=W1rZ%HH3W>CN60 z9>{bK-|j*W_oY)9IO-bx)nS%l9Dfcoh^8OL@#FF>!>n- ^l<|0~A$E(iUY1Sck+7aT}uZU|v=gBDMlGw3t6{=tEMk^mTV0@IJlfogon zIB{kv^ee)QHX5)Oo8vFBfXvQlL3u{$A3BdN4I{K%&!Y#Ui)>zRjYE+v89X|hVJQ(! zX$&%%Xv)MhP02(&$& R;C{2&^a&O~t_vN0Qi&{k-;=06DgkNG@L$zZfVC0 4nor`LeXx zvDq32Kjci^?(m}pv7jzYRyLQx3*}FZyRbP-=O7x&9g%EKHX)i3&CSU06`e?)(%8ie z 14{{hJ)PdbBUVM@W9o0*y7Nn{cOZ^2}k;#n3f z7TJVm!7`;;OxyE$te{X@Ak)SR?l|-m?ziNFl>V|Q9+ppQhI%v6AmKME{3;VX(Zpry z8 nZ`%NiQm~+O#gES6%d7%`!wm{_+PF?1)<^W^ zyI{3U8O#B*0G>wY``bI)xlC7S{=OfnM+;5>)ZtOAzn}k?BPtB|ssO7y`cP{v-9Io0 z$_JoK4h`~0 VLeeF zc!FTS27Vw2;9<{&BYfZl=hyucdmV}W4rt{Gt=NDLE!G1b-~gJ$9-w;wbzu9(EuUp- zA{oLcuLD4~1wjUv03d%B0MRJ~5ne?QQ7SAbz60Pl?l*hh6#y)T;rOX 2g7Pe7Wu;k4 zN-DGGs;bOZo2{gzs;R1`j@8i6P@bcut%=p1i`BqNikQ;SMn+aqR#p+KqNIZTw;Lh` zTmMs~VSqeBE27$9tuzJ}1E(vZ^WiCiaiXkFH909+8F_$_hGoTha1K`BzHid7iYSXr zRpwNsRpFs%OrC9%ZgqWSyJPT+jT%g}_FkJDzR5j-1 z(VMl0pSkz&k8iYzvnMZ6Pi}nMN4LJPMlL&ctILvX (eR zsuj1M+@-OsOU?nVtgD8uJefw5t4qOH)l}zV^@%o;rJ-9?%xltYd%vP*Se=5a@m}dQ zTa!+&Z|ha&j2ir~e1LO^bdx#>B?YPbJ_@v^Iv2ahQJpA(l0u>0hAtbbS+CHXxA4-f zq?1V}PZw Z9Wap{dYfcZ1Z+zL9@E(HWQHFq&0^EwJ zhVF&h+(k0#I3mgB%u85>PBUHS=tK)honlOmD&-LEc5ODh9W%VQ^;L=X&%F^PndjSC z=f5i74b3rVRthRr9KW@f>VJ*KT-V~T*d!^qe*3|5Ht)R$ZIc~y|J*~e*IvAIp7HK2 zHR=5qqFmzVx;=KGWCdN2D;n7KFxaWqMqC;E(DhT>{nO*yH1wXnIrSl%d>~9NF=FM> zQTgCU5l8MHrM-Tn_w!@baVHo94i?j4gBACg7}UTbqN5G%bij|f5BtAPZ#8w1{ra%i z80;PKjuWT+Y%LFeUG7_U0+?R;!Ae8PxdH(@9{*wH7Knf)1eP%0vYY?L>pb!EkT z_U|dB0kdgUshh57U6`G}V2!52T8Cxo3x-Ec(&bJbQ$KZlWw(<|^2MAQ )nqDnaOcH7d2E=mq}49Ut(zc`)EQ&^TA!)mCaV~aH3w?9k9t}}|4 zPz%!zQVS2!bb6rFLa-mNzRZ32wSR_MRqC@7F?XM<8m6w)F3(<0mWuWWGjCIPsC7D# zrfFii`{X@sM~tjd!I#;JhqcdAy_x`FPL9B0i_yKO+Q&+Nl}!OO*R_NVr3qNM@=pu# z_2iSwtU1q3?kAk@(d=SeYq294*t~TgJGk_kLZ82QpRe-ZP?4eimKfTR1sjh)D?ae_ zxZ{(x4Ys-4bo~xF)VXV4$;?u0w-L33Jk`+5^2XiR{XX^7dYf7HKb^4ugT0AF6551pA%~Jw z2C23~LKLFZsM$mZmFS!~Jnwp@!u7rTeXsBRuJ^ysGS9W{XRZ6b*M0x)wPt#rALKRi z7tmhp;pqV|uvuU%06^Z3Z*||y4gtW^a}H1k0AAxUO289JTzKhXumA&l^qP!OQS>*U zY&0VO3FTQMI!aI`K-+P!e+Vxkl=Wa=121-hvcmQwlmnnMJe|s6Mo@9qmez`fBaRB+ zMn+T^>$4+k!0gYAOIz> z`;Zz~4sFy?+tc4OghSuje=9 }bc!kQKW@mMKt~;{$G~LGfRYXdtAj!A0}~jh3c4RLFxcUSQNk*#sH&-t8LI&m z3bj$Buu95U6%}P=s2vaIfwGQ@t|`G)b%GC7%`9AxxFh8cb@K&zcl3Rqf1XC7MeH0i z)?lLHq{-7~%$zlQ4%x=m&fdY%ZK1ozqF+20`}wa}xhi0FAf3SsVQpY< >s`K${UFI~$oD7-Gbar4&Qd-uy8ls|m*_(k>0 zS2eY->+0XWYkL2oxuv!3 YkDSUju_pnpk2&!ry_|vE1uaKt;|hx6KXTC9GjC~A(f;Cf$#Y@jzFm84 zCC?Kxc*REXtv3RG)#F_39~mcj2^-Igx;(^jmIk;o!*Ao!==|t}sX`%r#5}w01b>;x zk8^fiIyu 8GBwh9E8A)xPK+dEDj0^A-@+Hw&P znC57bAJQm}dvLqf 8 ztXWW)ME^XHLl5%GpS`?eivoh$nSY7(1-y8nOygm9w4h>5U1b-wZOzfSQFAZ i7IixLUGG_(XM+3ZqYw_r nd#zh~-ga9$QV7$ZMb z+HHb>waJ5v1a0jIFojUJpDokN-r3R2cqY9qILo4R2>RM`GCv{UC;|pspz^JV@L-Re zrrfJTlrMO3X^d3(fRNlD-{ypW>{*;xJ?PC9_lnmIF%eLk?f%)|4Fc}ND&hqFD{hsz zz(sVcq{#?)U7fsNS~ZkFH|Z52ATRsP=>h!g%#+5TTzVe?-D(J62BZy8sNM3Vk{+?) z1ImM2ZBnlm4gwa!O^^jQ!A A zb15$TPFG=rRB+CXdH874q#;UR> (^+#X z)p*NG53T;v#pg@|3O_eDRmfiq@iXR@O8PpIMB!^KSyi9q1$8sU$!UfIIp!-L*AS1) zEqc>uv|sR0B;Q{YE% wbc>-k`{&M+*TD#j^b@ z&o6T;%B73>8DC=&(6MQs_`u7Z-W%7}yLOz3>pYs%e-Z&VL_(ADjCC7l*4#c>+B#Gv z5y&=nTaoHhpO$}?7p|@ApP0Aky68=OW=w^U>(rc8#$T%iG2%2C!sC*^$|tdIackLw zC&_xWvt`qr67OBO5F_#J>c2?Nvt=KUgg@Xf5qAcs?TzZnk57{sMR!8ztBp^+Ouzb) z8+9nSqx{hcNe#X$(WN|JriGreieS27|3I#>yiOvJ7IoCg8~GXc>dysLePw;E8Jm6l z)#~)chy9*6Ozmy77YpUnUzf}5U~U`F%4hUMBj5}yH>_Gt@a7CzM$M^^9!i4Yz}Xhu z`@NT)tLm>y)1xIVHj_9Fmkz}EKe^epyw4)c>0 cC#4= zkB9AZM!@1LQrh-uGm@U$Rb0O&@)sq)X_2cSpeAd*4e7YYyZlxD4H !x0c-5=}KG1R%%yJ=lx ze8Tm4RkEYS7IuZPynQ)abMvG_m2&Z?mycS>Nfqhd=Dez+=q aEG<10o?;J|%8T&B_~3wiM->vmO;WbR`O#n+64e8B2vd^Tg?f<-8ns9mz65 z0 GRYK)~5p!9Agi{IIY~o}0X`&3*e7;bys3%?aV= zsz+a6rAkV-zFOmA(wAYE#mh0!& $; zaA|Lf$-S>N#j@-3N;7JOFAlZ! k}>x;c4QD4>*Cj)pkV@t$2 zE5)5ldz>#c>+jLL(fRe+^eSG>#ni+VHfaR+XYyD2_XQh7l?^us&W~q{2#smhQ$CdM zCJ1GuTKQ^0Un@^PexFHe5G+x3Fx@1fI5P5HkIxeWhxi4x61R#WY4Nen6D=lhgOjY| zyV85Fyz5ygSyt7%zlblLBri PcHpi$j*Xv9u>? z6`gZB)~NJF47XgGU*4DXruEb|@rZfB&1X}JpO$o%+U0IcUyvYoap8UH|6231WO7fQ zJS|C3O_3J|$)CXQdwl5^vAo!Yp*Azi^+Rl_E&qTx(Cdb6$54K4VWgWo)UcXVB{7l3 zZ8e_SEfkz%QF^Nokh_S8of%}zN)Z{Ao^!?bz1Sdu4Y#wo)Wd9ro^b<8#(Yq0G*( zN_q_e?Js=Y@~ZA+eQJ=1z2Cz7mo+-9CoR>&np^8Sk^~h3DIYrZ|L|FOGP(B&U49Jy z)b-3TAOG&2lOVQTYNLEzzS1SMrT$ihiDs-Z>uX5oYxpx5&^M6PFvzQ_lcx!}f)A$z zIa3~5toKr@&+FlcI**^N*|wGvdqT46mqy)6O0}SSBK*y~V!Iy!-X@CQ&osxW2k1+d zHuCJ-WE=bUvyv$T84aC%=UlYPrKJdXZz6x3Q@?p#hXhv84x)Umyzh^v>cY#Lf9;Ta zf3@rsm3}zy?0k7*he>^DckSbD1k^R0kek1_wFfV+Dr#;h66rO~*s`r~-d_(3_S;EF zm9nm5%^dmE8xP`T?HjyKiF259TM8HFBz;+AKe>bl55O-b&X-;6+RK(4ih8$;kS1gm zPP%kQc5!Rf#*+0Eqz*pmYDR5{j0|(Mvf}bBsSF;CX-VgCtTt1_tl;yd6_`ia97d&Y zVn*U {v|Gg=@+-mpB}e~?!YjkxZvh(cHGPf z<1izsxXqkUF5hvpvzfxVBb3o$D>IxzC32IqSpa-Ab>l@aab!!fr8OQtct;b>ppOVf zh@ &e?1v)R>qU%NUX+FM?%7aBy(2vL;#)iFl}i=f`p*shja!zWJz!g-kv@ zf*lsg=5cYTM=FgM73pjS*B=gy6Sj2eH^+aA0f&P|tI+00x<^Cfe}@>~KQ@eM<;r zq9W)__h=?J(tOmMLH}kO78MbyNPt1NVums~P>l}}CwyB9ePaKnjV8=ubHWrB5ZP~9 zQ2wU$x51-J!wel4^5{|MBAyGK%}`H{3?7}$a8!sSk`2+0K(fcvNcIFgnaFg&JJ`^e z_z*hP!P>!w9zwPwjQa89@*}BSIurE+JzKJ&6B?NeKlThf!-2uXlS8NkJdI8#;BDc! zZ3u&5Pq1f>+IvT^;Wna%{umGHhXMW2X-pc;hG>sx(&=P8*@13@r-o2Tc&3dtgJ2Uv zc3_eiW;h1j(SsMkp~5<_IaC(YYGW9aWrjoXa&%qp>1+mHnvC2o52Z$iKwY?5*<1!M zhCedy&*m`wBB>~L1Y0{>BEgnGaIm)~!8W3?k{Q8=I|g;8cxR#r-_b3CNsZ)1`15$7 z&Su|Ush~S;8025rd^jCDvUmNM;UiKg8>iSgj#N6j51q~U)MzG5Wq6Rjfy!ku;faD( z9Ufu-9mphmyO0oT8s5f%0715~qeGAx1U$)sW@kgTwI`98^ig|0FC;RC8o_jB!HUC3 zVZ9YEe{i!#aF{)+8MA?jCJEmM;jM{y0?~iueUO8h6^z{qJut&*SpClo6>~ovu2FS( zVo~wi7k~@yXZwl3PXvA<@DqWb2>e9g{~rS1A0e1r_*YI0d_X|nDP8q+b6dCE*W1H$ zi8~~KAbE2-l+NKRTLZx1Mn?E9T7ZLG1Wv65GE KvI@1^&F7&SyFf21rc`GV& zLZe`8iiT#W$>gr^gZ(skO#zD_Gr1IUcQ`-;QGg9XK_tM#o(o6#z!%Oh_!st*752-a z6%AUk0UcT_1U$e2RE0f2YXEg%`;IL?ghW&fVKf&2pwfsSJ<|bDO9eo75J4n=Ac*V? zB=6n;@F(}XJ?}IC_I+^t;P l&EDF{QX zk`nrXO&NYv)KTh9WvrT-s=DS_O-+rl8XDuq>uQf1uQOglL)$=GXM&!-zP_f`L_-5T zLtQ<6Jq2Nig*M76V^mbe=#A4Dr}rN>L=L?ETQn>{?xO6YA()TFK;mtbeT2J03DR^Z zsv}KB6=2mcN|3>uG|b?QPM|#otE{AgjF4d3SZz4+!g<|zHLz;xZ%2Y6Syz{ S)zQ_5 z?$u#L7!{?rm6|DWyVv=+?t8exR4wrE)=Br$rmMKc&bVaJ{3#(XlxVn9ugq@gcC6UR z7cbc4w5^-F;nVE}7E9!@E^%s=DJ6yKz2eImK5$8#4vZbE@_j`ZxsoncXM(ae&eX?M zu_nZUg4v;@ sY#RS#Mc-x{(2YVJz=6_kN}4S02UPGT~rBAl_i#f` %IAX#jDmGp9Jq$Etq5& zY%NZAvL0(QBigS$_0!lHCrq@e>(+2Xq64?-lYN|WdB>I=aV(qdXRzFS&X;Au9f92` zf?OTJvB2E{&DU>N+)Tf_A6Gncjeyvkn(;h?{m3|THGOH>!2OedW!IGXU&&lqYNe 6G@S?7-DGd*kc zr(gZcd||iFuFfZq5{^l-hm1_H)n{u%QbLlCrDCcwUIV%vIn>dMp1N)~J(xqgb!7Fn zbZ*1q%Jko+PnxPx@zJ1;{;V;<_nA$ret7ZXJ*?g4DM4HJ@m0>gpCloBWWgvD46Wju zLOXT36J#omci;L1!=Ivqa_qzZ=U^CXcoMWt3DlIlZ}r#yD~o{Dimx#2-rMf#-qS2! z-+RSuV%IeKkrj{oCjGWyD!JP0yjRUh#ZExoK`LJHorF46prP$b_1W=U;Sk*k+FzQ@ zmo!FU$UWK3Vb8?1{o8(>`QcD>FmUUc<~Ej*TeLR4Ek0ECCQlP}sjcvcvgRY30Y(T} zejloK_^?ZOE-2d4U3+YNF@2AxE->mne$!d~fM&qKae0-KcY!&lUzqdW8gBL8jal)) zXCHQMz@-7>@WF!2Y0-biW_mVWOC6)-mip}W<@W9O3Q}Bll2lJ7pV?k^z&3oyA^@{O z3*$e|sL6#P+R(9uJMLcB(36foNsbK5{ypyuoAXWGJ}l1}3^Ol|Ybu+6$5pc1Sx`M@ qs}0tO9OPN~`Kyvsn&%bB!>+b DP*xR{07-xV0#Q*E1(8KWM#YeXO+p|Et4b6XMnoC6tB8u* zu!#!-q7wlfm0TBy8z6*5Wdsoe%8~#f$?Fq9eece_-@EU-|GjBAbfvqhy6V@}bxuwp zdn0=bv{!q0dH@t`Rwyd~Wbd@yRwPA+0pRJm5U2qFuc;^n;0dW1cuhws0u=0#%K)V; z?{7oeaDu)EY0C*71xRC|tQPG54lf*}(XelTS7f@9T=o;BgP<}DnM9*9NG7({w(@3z zn XO$o5 znG-a^hf)~V^APeYOwf#}Z~`_p`H$?!9fktPiZVWM2Wl!Rsw&EAs;a8$>S|Lo(OQ}s z8k)1F&zOduZD2fSwt TWd?!~&oQpNy4u>c~sjI7N zYG~?fY3bukjZAU>c9Y!$I%;4m3OZ{B6m(FEIw;vgU<~b4M&c0#jU8_&1w|!g6;(C$ zDH@QWTpK}3Q9(&jSy@R5a_@xmKuJe=x+!+4$_!tUs#zQwxBJKiHS=X9_h SHM=eOS Oey5_-%x!&=uc!^{7x zN3*r=tPHGQXr^y$$(-g*aK!R 9zb)8L-ipfu=~Oxp!7;oxNrGDDLFI&g)M{ z5@@^~U5>?97WtIZM}z`ybeH{{=DFfobB<&zGGARG
mSxu@sg}BU{%<7c9bI*6?_}w>l)nGO+qqX~!@-*tOXG&C?Q#n H-@rmjb3>n|(l{83(rB-C)^hz6=j#!UebukBhE-a~Lp;ur9?naC6 zT8Pj48@Df^vwyAi{B;jHH1ox2<*gUtUu#`Gbm%d=JLj$RFQLOSU&P*6zgR2-CCO|~ zdo}S jLn1UJ7;IIU(uyC*V)lzX%M>u z3Prt*zUFdB2CP4KR4v>X@0NQ<2DsIu^~Vb51?QvV)r)psA>QFv$ibm}>E#cko_NUr zWSE%R^J*BfMGjeYh={`?83?}6QoeN!eG$=(DOl^fF;S15_{UJ6R|f44f}uj!2K(OD zYEB)yxxk7(R*e^JtRo)m5o~%^vAv`}wOliCF|$9lEXX=V@zWh{FZ*ksw4Ai5J%%s7 zOC~-F@(>&M^JHL7fp<;cTS>%?O%07UF74)`q?%s1Y4^3GrB+?dmrwf;==zV;IHg_$ z)272i`P;U0*u9d)^(tN+r+w$OwO>_uBg~z4EA<6e#J)=FyhBuJljIAkIsA&JeYt%b z{5j3Py&rV?qkQ%XLSngLW#O? U7NfnM^Z=-uMfey!p{Hpoi(Z9 z<(9{q3;TqZ+XYMRtl>)v+64h3@j42Z-mt5L$%b04Oy3#um@m%kl2l8}85PakW|!&~ z8b7y#mtQ{LV*e%PiwdzXr}^&tw~}i5SZP!4jxHIf-|LJ+*vJgSjv|{n5FF(g$MW zQN7$Qx(xh{6L+YJ+i>@!U{3g#jyXf0LkAMaO1T}rWt@_JX?f0RYC+IIkG 8Xyyy5^>zLHO$31PQZVq(}U0*hXCN=76J8?}0-bf;D2fa1-A-HtRbSxWSXXy*C zJ?h10og69>*sLW6JEhg=KZhalv<@rf%D|RO>2TZHWT2y3lF}0CS{=Oi@wxV^dK$Ch zJ}xem9)mGSlva8>?EZr$1D>rMX?DkG{r;224@O_Pv ^Mr>Xim{%m_czgt@CAXc|%%a4mI9x-IU5QP)DS=~W5hcDG~N9SN=z?(f< ze}Cn*k!%_8s3F1(*5ltGVvm)=^H|`2Ecm07W&Wi*Z=NQ1kwr<|%77CtEzHb7&6guT zrEcnK`?+_=v$0d$%6WX UhH$r$qWZ(fzl|!!^9oS7Ac5-KOwjh%%1C1;8G5vYmFVZqY7z@Go zs&f9`FWt;9ZJ%>ujbIo?6?=F{SL3WtGajyH#Td!%&=+0%NdQ9wnep6KkZcH3A18r$ z(D>!?W4HD#<>s`#`RFw)HEuW+1C7{*^-oQ%S@_yHF^40%%@q?RDcZS5h`CZ;j~A{B zrqqW=eHIyo+of%mlw_qO%&Z;XUxN^OLs66i% e=3;kH& z3s09pD)Ga0>0; ^^9 z6#AV7u_&tF+fE;F3$Y1X+~vd@_9YoO2y-J^2L$}XP1n~3a-%xRT8VS$eLIQiJ$;)! zk2U}7d8Oq}K@;O >ny AW-I0F@o=X+1wxjM@n4C#6Rq zNK#F*zDQK`n`i&s-VweeQaLj}H^D8W;hMvhGpR6nz!>Q9YmtiR(P2g9eaEs|yW9pp zqwL$WEB>f)?RIP8NH (u!5Jv z%^xa^F&Ez*eXioWL-_0T4miGrUfS`YmD4^mud&U8n8-;K2VJ}ussT+`?eXV-niJU9 z8ty2yk(RGS|HOpJre_UZpd|yulclpu&&a@N!40!{xx@#fFV(A?BvC(=)z$5cT2d8K z6>%dyB#O8Vxxbdiun#)bxfZ_ol*1I~j%}BLtHFtng>;*<{8B-8K=I(`K1pBx7r3$A zn!nC$Xc^1qRj%i7_@(f6vsvq0j^t9cs4e7V*1J09usGnCkeykHy&@PI+w@^By0)u? zx5j#G$8B!q<}_oQ#99b&qk-zl3dwvY-WYr|=&7f^9?O(=C9s=e0yryFbm(obZ5klY z5^UzCm&w5A_A;sH*#HdLsn|@hxN)v!|JQc=h9v(L(mHX-=*sNQXt+Oym6DIgo=+{W zicToJ+maxODvetbEiB%YQ9`ce!9#eF4i8~o$n3(*IR7}kihz|F5$NKGJLH35g`3^G zK9AfI@S^MQ`{Ft(eX#TA+w5~7O9;qaK17ldea=$)lsjsi)5(6d`8N0M&TUsOQ`-d@ z<^H#enZYeECseI``XPBcr?)O{aIm=S)j;k<>g}fAbrN2;kt~XVTu)uP@+ ?qdg{3ht`WqNDw+Zya};~MgXoyVTROx?~g zzMn~U8|*n`{){gkBNOk#NY1ajw#ewvsGxsjNP6P3oeNxvD~0+SuWoDA5S$AcU0VwS zxXV!_ykgu`JqW{nHU#};yxx+Mn&zb+=p&_P67sr7**Tr5B7N=`$ rY|ku)N?+li$0iJn#_iIk$6ALC*^v<4rxeq_~-`eyhB}N zi8)LUFcDl|_w=0%5RAKnxDq^E@p;~F`!XZSyuu~sGGK)4`%br4ZsELce$VDLK{Re3 zGZ(pMW;-0HrjL4z-^Y%g{-kUB?#6&9RTR@MWJ;oXuh2^$LyLu@fp-J91hSLQ$Uv!| zx8B)`GvwxzWg8Un>q__^qyvq^smE^x=28aSc8W{*`ZZDAuLj^#DEn)>v@&>=F#JsC z@gnQp 6{aP1fgjY@E>!Z%K)q1opw1h4gp4QaHY*l>?uhj2mv59(>YT#}xST=(Z(k ztPp|CNK*e;wGe+s>Q-N0&~$DjPlX%B$b7w;)~h==tZqSo-;_9eg5|#balW0!GkGb8 zj PEs-_J-f6~1uvoFqHa0O#YZ8SXO0_1_X*NluSR44Q-3GW2lVVBaZB&*?C^bAX z#?`EkQ*CAvNpUsXVDD|~9qUewh+LJzp!%n*4Irm%BRf&dh;Ak>NzO^MSQ?c@GD)IE z$1t6fT+QUlogs}3+nAZiSy5!%66Wl;++#um z{N!pjVQOMxqIDwPn$8Hf!8$oP+1TQ2a5xO)z%Y|zSfnIO4AXp4!*VK<%!rI-MbcwT z5RIfzdOXY346Z+J7%kS@`
G2FQbwvU- zhGjk}P9cAjjg4nS%N?MQZK%;y8f0Ta#IfI&Lf(UX<3=0~kEF%QB_OijxFG$F=}(PE zmWCcWFQ=2^kwrY0yP6@IoGEm2B*j@y;v5N11V<7HgQMa@F?Liu4&y`!b;96nDWN0> zGSwCzhMm;o8N+0eV#riP57cZO36>Tk zghF=qpfhMBxDSyuQaIHnDwY~ G>H`kd10_d#!%>q%!%=U zNE+3jMMAK{IuIOiSO;4>M|%R^(awH?Baq5q!iYhX$=^iD&3ATZP)RI0BY;kib~XF< zq6&$$agbL i9_H zpMY#{i?t6WIoV_I1RNP-M+kGogi`GZ@DC-_fl4MhP^oZ}#^ssxFjgXoL0uXScN|&@ z_gnr-&BSs7hXs?Ii4j!9N%)oxV~fLJaRC!=*&NMmpzSuuff;wh=6`x9pZno(O|rui zi;&+EfSbu*?JorWLf|h1{zBj{1pY$c{~rS1zd}%B;8RW_{DL5RuW-ZD-92QTpO1&9 z*9urxgC()^(PSD^$rb=w42$8na+wLN@R+D}!Fr!2m krj*3ryz}n4{H=i7em^L0S$!o z8)Q6moc@f^;c^-&rvfx1z|S4}hK96B_z!gG4>UP~L4!PYkjH{Ti-GzTg2rhILhnFm zT68?LP2La>HK{S{{b6qbFC(xL)_c8SMbrd@f_M-Kq5%tFU>^fVn7|LtFZ(C*26Fjz zP%0EkMFKLESPtlb21s&wfb0R}f$clC%rHDoK7`U-27q##Og1nV0M%mvNPdyY#1~{T z$wgQaZ2{n3%y)VEc>o-T;P@}!$1HLIn6?*yTMxgFg`NbUA{_wzrdSe#Bwq)qo+^aF zB6oj209qRXnDHEdDL;+l2Ir7@aH$c10Em@WEdbf40hkvKb#MA7ej}CgZ@B$So(cTq zWmrW81>_etCHSkXh7>fFr>Lr`sA*2o)YO=wp`kT(y0+F-ov9ic+Pd00Gte_<&eWWy zr>~3FpN^i1mX~1_p^TEUy0Wr5T1!I<{cks!6s-AA6}N%xcciAP50)sRU^#QLrVFD& z0Tw?IR41B}DoR;JK@rwPXN}iICnt~|1&h1NvWe27wxTv1p(P~0G}>=%ufUpSsATAR z=J*at)A7AIk3G`z9QQtdUuEf7#L3$>n1sXWXOHObKnkvNV4WBihGBVfvOyb^fU=6t zbckFtEcU~CxU#|!Zxaz%_LK|5y4EWy*54y@+^swx1PFd<+!+7y_im%*jed(U21(0y z9f+!lPsm0)pu|z7-U~x&*;!{k^3L_)SKZ7zU+tB>oQ bY>__*EUte z`pVaYFc49%U%%d>`$X^M8Tb-q(V|5UJyV>!tQH%X95zW)BO z<%i?z5pTI?hs4%LRqVc=)ir$KxjRg0#JNt`{j`5mb znua!`E?JLNAIK5`|037>#nDGM_^@jmHiotXd$%j;>$!2v0~_qFvX3fcIE?L!j@;9| zwJ>V7aQ%W1qjb{**LvL1CR(-ME-O5D@%lmaiUX&DehKxzb?0}oSz&cXbi#(%6G)BU zTpL=4Qv3k|6woon`W{(Iio3A8 KaYr8e=re 9Wu|FOLW0-xyFz-va{rA>Tw&T* 4mwl8U14H6F8{V%5d zGGbcs{Hkx*;h_EJOnNiW5l5wmP8fC=oXB^!W3~CIUaFXdn5B)Fg&fJr!vU267+R#= zaYw!(tL^48;{Y>lmxkigdWdzS8K0H9eSFkNtaihv!UNYJXerSW0Z{qp8XnKWl!f zt~lHtm8N3cW^a1PbjW?5zNHHD^-}hQdkWi@1L2X3%ejiR+qe9&>gTDufZCD|4+4&> zo>y)&Pdju|J<2?*ZP=Pt?fq$fqU&&{Xo=&ay^mk*-IKi#?Y{#@)XR1*IqDa&RZB&9 z7kJ+I>~1`NZC>Au<@ZnMTkKP;K6gUr4dE1e+q5qdR)6^n9fb>CE0uP{eOjKDRje4e QdxNsa-pi;>PO_%|0#qBraR2}S literal 0 HcmV?d00001 diff --git a/resources/ui/units/vehicles/icons/LvKv9040_24.jpg b/resources/ui/units/vehicles/icons/LvKv9040_24.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be41d27bb42b640562393aa97486759fecf3abff GIT binary patch literal 8890 zcmeHMd0bQ1w%%bLWiSW@lmHeS2q6PQ5Qr04L_`J=RG=XV5hMvD%u{Mxt0GFR1A+>o zQe<#IL{J2rfLg_fA{7uQ4qydDW)R4E`-DN?yS?}K?)%;Uo*NEloxRsud#!KneGcb* z$aCaRpuXP8*$H4^GsBnxfOO2;;TRJf1c0;iGN1qeJmz7ffHRc1@X*9a0}MQ)hb~4| zaxR0i-i&+;%1dT+q@YZMwyN;_8$3u*#=>(WJc9SgNNnFh*#|nqGw2)^pN_LIw~#a( zX;zr)nNeW|^Kry~7@XAtzzljrqnkaib9UVXy%8 t_`ue!V=B79!Gh==ICDu#LEQk~e#lVzmZ$q*(CsRnM6O5vwqKdML zj;g8-$xz>r^lvxh7SK=t-(q00MnFmfBdvi!?g0ZBr!2Z2F)-NahLMt%k(HBIP*hTe z3MJ|&Qqoc~(z3ELGEh4ajsqDDSxrOYD!KXYba|t2ENR!FYz5=hMYpv)>OU+d2lBsH zR9c{|^Of$`CZ ?kw^2wNJYa# zT0=(GkSM3Q%3YowKHrG6O98w3P %cK2lS1x77>PVI4N*ued} z_eykfs`Yl1`RwOF1;4A3-umP;Y UbydzCwGZXOUKS)x0{i%fmz8*Ur5d_FlFOvojjrw zbQH9tnucw($qBoB{H)fh64$aRk=PyqjoFcY?E|$4ScHIX_pmpFm&H6ww=1DjkEWW$ zW( rM1eKHyWm$o+c$8M_(?OK>`UzA(qw6P$5 z g=B?1X@x9Ra%UMUyW52;fvr=%xi8 zeWV_<#$aFy0Y3{Tmen PYSBPJz}0bKMN28| zZkAiz@7r^#D}QxQ>!sZ- @L z+pQXLMZnwgQHFRcLuYc?D@wZNf% {@%j+!K@Jke0=8HH_90GsYL^`&o?Nx=QsPEsNCMQ@ZC#? zp8k|Adr!bpJfJmJsNFftod|d^^#}odo+ cf6jqjLP+oRvTNrxrdm&BH6E>_x`^45I-g!F;x(S?oJhKQQ9q}{w8YAJgz@H4 zV)x#DhtiRND+oCIzO`zsKefDf`wIW5DueQ-;;F(enmB)tdv1|`-PTe2K%qvgp0GZe zO&fS>@TBOXU1TwD(nSC_%mbmgrp)n%=tEM;(llOZS6fa);HGt+gnc(Bh1tC=ur`9J z<%@d7^~DFu1$|!HouW{$yteH7SDt*cseDBjWp_osY}Ta*AD V$MC8@8P1ImU@CZa{gLZg$34Xg$FmE z?>8PZPR@!;X@?u1Fd2`43oEtvRmZ9A))PA*;7@}I%djWg#&yO^*)3Xc u;kuEjom_^4M`K@zb^PW4vVGp#%m#tlkxQNN9^8?9 zCpTW>QD%2F`=NUTtz^0C^WMz~52MZv+UE%{UAoUwn b-J1IsCA(s zn_?Zd)Sc`qeUiQ3Wsp44! uuV zf421EC}$krOIDJ5ZNzGgSy~84%WCbS^?KGPqzsnRc9YkYO{kq3=xZ;nB&HzXzyh5t zPAdY;;6|4E)iJV^X4>uPR6h8KxVbplOj`U@T-)s)+ukECiR~B+A7m_g<`h#@+Bw|o z_#N+*Sk%2T3$C@2VdK>0{o NTn#v~M={C6iv7xA~NAw=9`8 x>i-X=$0{j9+uL z=3A}s4q;d(AYeqe)vgczsnukcc6%s>w+!cZX%rSmjtjR6Pr&$n_n8Q)*I&qNxL#u- zaFf uYa zgCp?n#(jYRIpGD%#S3gEx)U=4Bn#w%s Zh#OcD}cj0F^5MQ`1Zoxa` zi^o2lPU$1UaZY*kgpIglVcnke($V8J!k=#V4yjr5K5ir;U<16P4f`dmD5d=sAeq(U z9j+)fzgd_!J{6z1Z21EMf!#-jcM4S=0`5?=#^E;mO*j=t>(E6&Zq+1wQvPu+|8!A$ zV(z#&pf9Rd^r7o%TYgJ(?1{<*#=?Sxv1oB-)qnwf2xRkAUy1z@Ai2mm|9y>}F5y)9 zl(7y17%<%pSFcVW0G9bhfLbI1)=$q9J!$L fI zlOCkDaa+ZYh<^G>`ZdBQGZSPckjusXa9f1J42R;^uF!9Nb1AL3>yebX;B;OQVy$e{@@8Lt 3 z2cH>a>#^2p#sj>vH<}4GIy%}snrzPFvk62hl}fN65lAFF)W8d3xe@djJXc^m>tQWR zz~BdmMFjJ>IMgFOkQW(YZv^L`4vZ7#>N@B6Z!zF-&}b#vf(XYbX#B4b6L`gju?QY4 z0WXrzU^zyyxDm#)=1j(%ZCE5fRFVLbL12ZlI8aRh5hu<~g}yP*X`>0VgE?Um3yAET z7L@0d{x*1YYM7zzS{@@3oy2*qy%FlkmdRrTGi@az(V9#RBonRiLDnQXp2B33@N_1V zfe*BzFf9Y=)^tlt>Z~7Ut{{TWWw1~`(6f0kbV6p5t%9uS6ugZk*&0t_QEc!wRul@} zl0puoGbmOp7SU?f-i;p&mk~Ym^LS7{Oz6kjifCiQw16Qnm{dH)nrMj+Bn7hYL1dy0 zgKl9(rjubDOopu!kI$jQIs|j*Y!)FTjKwy>p?KM@+T?6+1V38LTy6@bM+8A#xLAX^ zOkT8Lrr#@=!}5%vqu3FxtgT2yOA8wciA X`m}@8su++1#mcaX6<^i!e^w=V4P&-*wPv3I |4my|3 zf;$RUby_X>Z$P#TqFS&lh*W%#1=9vk31rydsU%AaJj;S*V{OHx+OUF%v-SdBP((DH z&sxQX6^D_+dP_dO;Fiqbuyj^4dIt+l5`K@tTafTXlGn`l7>W@A#!f&t%yb%r|Cym= z?6b`^s}6T8D$d;i9B^OS7X-c_@CAV{2z)`{3j+WD5cu>8!Q#UIa-!i20`gMovh$iX z0h>JBoSZi}LIMVoC#ORh9D$4l032=v-(%fs9OMFU@?DS_QUPi}3E=4rL71zjlh-UG z@sH<`MwDCu;3*#U^^fEKvPYE(UlkyefrDBr8DabgD1QrOtLTU@R6Y)6Ec|DU3FSg4 zoAF_QP=1c~2Tsd9sLYngDDeicd@qkRFgGleaqQ3Jz|UmH4n7C!P@v9YCWj0COZiO8 zOjJ%lWlm@$j7`$e3{_a%&7SbQ7#{jy9b^VwA$NuYfglnDgHR9w@bJuqJp$kX$5;Oo zdtHhBCTJB1t%3mqTC4>;zyWlLJwR&!bzu91tssa@l5}BIRs$g0h9HAq10a7GfT^Dm zWFi|urp`d}>;(X~xS#BKrvb1ThW$T(>RX%zfZC4$T)X$FFE9;&(mep^G= Ck~(091VenEx06rESx=!7+3koc#j;FNoEKIsno$05D-g-`oF5-YBO!hugo@ znZZv&*hx!Cp}(-nz+YJfl=_lYl9!iLP*GA*QC3n`R-LD*t~yU+p0cv~0(Fh~SS>9r z6*X<01y~(TtQJ;6*hxbh8CgYHSw*a>vMTo9ZipDT{HJJ8fZRdZKOL}A8Uu;1S@us4 z!Yu_ErB6*x9#YGY?1L2ASJM>Qr!lw%q-CUJkr@_BU0NOXg!B!Zvsiw3Ti4?|H}P?u zYcloZOdl7PD;|iQZ+NcvhO6Iv&AT~4$w9G3Ya*}@zg~xObLx h;N_G3~ynyxTcv}2>6?OjQLecl#{@0xN`X4*lxcmmU&965ezabxb z^0wgmS2+efo36i3xf^roqM<`#!Ck?6YN;zLdA!b75D6z-r~yecnCEASVl<>QrRN)} zdq}2(Lp02@0 BO|XkhcU{nYG@kLWz^>z5lOePIAiiEch6n*GoZ-Pq#B<*ShoAC2K(>I?zNlH zn(N=3sAHCtrxb3uX!B!1-kI#ZAHUgXd3CdT>H(^wz+Qn8zkv82e}2mjrM5Ppx;@0n z!>??A#SX56sojz>u3IagSZtCbyHEgz^S0hnZu;&S49id*RvyykpHjsD4Z~GLcY64) z>_bKUvlXHl7G4VW?da%EkZC7o-|%)cHaf4m>-sm*FY9ef_EkT3Q8y_RtLU7NHZZBa znEh~N(%GRq2QCa$FaP!}SLoScb~*mo^R(PWJJ|LY{no4K_C|`*`@_>~YtJ7}kEc8} zGCf&Tn?05K>|N$jVZ6?>EI6%%{gkX5^}Qai@6+`HF*jhqUujG;y>l?ahl7SX(NGd7 zT3hu#$6X4Oli#rqP82^-+xD=D l1ox-9s=roz zc67z)5{K(V>GKAr#fFPkc3A8z(B?O#{q=2U>!SOKsjCUEgwUCRI`jjv`wTt}U {eu52!aTS6Fr>vyX5*Ityv~FOA( CkXrx0mGyfP=$#Kp6md&Bn+92S{s=@j>ya lJ-vXvPL z$bkbVl)yG9qm0U)|K=fVnlAq>3n8YMufC&ZVkYU`a2z>^n>?%^z;^jb3}?Xm8GoR4 zCux)qBllI$Q^+qjNgtdIJ77_k{ULvhFcd&XL|VWapgd!S(hNmqB_*YqGnHql>Zqxz zsHo1<(pJ}5INxB=!uk68hD(f>8)8>2*4JM_Ub)H?Pa=^FmRs6d5NwQzBm$}gGjrxl zRTWh|H8nkgk-ib(KQ72aps5UYW1zEGAg76u*Tf)CfdRBr5uJ}1XzbU5k&{ #A1G)lY8l~I&(L Xv;P+t6F-XmS-SD%*< zeM9~>bJm=>dh_NlUABD1%I`>K=41;?t2Jxat+(Icu+hcU&E3P(%bP}L_%Zje{CS~a z;SqZyqkjJTF9+g&J$UHE$y28jlg=ckT+GP4bookFcFwK*g2LN^J9qCre)9BLY1#7^ zFRN>6>*^aCo0>b`biRGp)&2g%$NquAFGIs4qhsT!U#Oo` D99@)p?+cH zBH$&jsi0_tpP{wdNr@V)jV0_?*7@=Hg}g^I7ZaU7>-vVgnl)z$sbgtB>YB{6|D9uh z`#*U$?btWJnt`f31_n=F6HtI?MC?@3oHbU`D=oOV)xZ9&XHiLW62H(zE86A0kXxT* z8j?5?4Ow!=(%P>rPZrsu4Puu~Vz(G+ZMC$Pr*i5ReOSV>Y3J7Gd>YPd7i~SW?@|e| zWhkR!IH#yMJHokZwsRE%{C$YcxqZVK{6b^uK;q`K+IC{|`F4?GJ5<^0*)H1PgWhf{ z7?m2-r{m3WV`;Tqp?`FCikJEazlEOR)4vx|oH4`ix|ymA`R^Gs2_Y^{pDt6-f;A z5Wq#iHE$L3-ibRCd+vA&ikeflH=iH0%~pNTeog<8uWwuJZ(}02inG>C(uMryqtt$ %k93v6183EqD?HmLo@<)gCE7p= Q){0A1LZd{d|h{6aFLYSK4yS`yenR#J)-Rhc(Yvqbv=OmM_*;t9qo*@cIt}u zfE+UuBo_R)TxqFbck!Sgwok7tDzSN9c1iOQY2CSnRTC3u%8FM-Y#$t;EgG_U=wl*s zB+v?-;atccui4xVrz>wizhXF}a##{TsSx@fxm5O9S}^u7aZ|!_17lvF oKyrx{zmy}O=lG?pUTC1-92?0r0`7IP_vHs({2$2C)rjp86>Ty$#!y~|iKc M73G@kr2#S1Zipt;gw{qO;5lCs z#roVvdDn*kBLob6*m<<{$7bdz#Mi+%3i`}met^tG_XH#U&_`a!RepK9bPe>S#`&ga z*R>>J>x4yFap0~!>GUS)@se=<&w6E@?k!ImVa#t##KB-@MyubVjTDXW^W$m#7dw2D zTI`-7VAV+9NGXhdPmZ&H8i&G*=NH1ACike#1b;SVej&ZhKDo5Fv!(v@!{_<6(ibHo z)+4mhy!cq%I#zRf(|zIVPpt`W%5D_$V%_2Ny5uC!UhrwbLd#ldE7Tnxh=2e~VTWkv z(o5~9OWsxmx7}~0H?>&iIxOEs@m_M$UCVZR#qed)Ig9IZEp7wk*zWLN{v67s@J+_O z{qfNaHW@G7DxcZ v5*n!cOM@ Qs@ o05E~*s^tkvNbA85SI1nM1(z&)7V;e ziG^!VN SB|FFmbVpB~XI zS*iN|my**HUcy4`qQcaSdD*L*`cjOEE^xnR4rMErLc^}Q 1O^gsc+P40l!N- zUAz|oy#dLzR2N!;$g7*vUV3JsD@6-mBwb1wgElnQ_`I2$oG^O2)8I=#ylq(d-I!-z z$_CnC1TWrcx0PFeyU%DM0^aharRR(KBU-}w=X;yd#{yEjrShU3 eX!r3homQ`^3sxIJ))U73p%bOB@ui~Zi{l6@UD;HL#irwA(PULO77h!J{ z(?KbS Jnj=o+wX)!9oJnMBYGJ}JQehYWGN(0R zjFI3I^?qY#v1iYQ+_WLW$>>ARs!qLFp!eoLr>=@%<0&U{vS?dhnSWfxaAs>--EQwe zVsi$?jHF+ilic@%jxkACz?KZdJx?Ec_I7BYNw3tWPrwm=?yPAm`VGIWa&EF9mDXGk zpQ3%RE4;I!wMFk*ON>%%- {?85$cgJ^Kd)boLq64145pRiQ7scee z2Z~0xW5w2PZYP^Fir8X{QsU 6ZT6BR@%zY}vOwR|GQI2GC%Ym@8=nUzqy{@3QYTf^?l|$LnyI^U zdvn?qk~twfr >GFe8zm~XIdi6Fx9)cWZ^pdbo3pD{f=ZHV zb$(~zvR*@KylXVE?eun1m)S|0Dff#3xf}rwrEqUvB~2TuAkg$1E+!6VExkS1KPYMu zrPS+szurP_>@+5^&+@B@Fkngu*p>O4Z|iWvS%U~c{k==Cg5d+$V6+>yr#3I+zw1N* zoMt`sM|1oiZ)4c5lh(Zp7I0!D-^b^_;unw+kQo_`pO{z0H}DrxI^cA &u9H^5he}suGE`xZP#jwFIiXX!t7HJK@m*&n`w_5}B71l6 z5FNX#S1v!yC5{ScE%mp|M(@M-mO;USB4+h%1aue(Cv78&l_)2sj2GenTlIwu~5j z-`EvcU{DC3ehy6nxLho&Vm{m|9}WzLuLR%UoUbIYfpZ*s X7tmz&)4@cY6q=T)sd|LF=@ z*Zj_*w{KFmu-^I|cd`9o@yk!DwTHLbxOiWFya#E5=L)J}dqP8ltV~QeJYy=I>&q~v zaoHw&sX-?2Yu*IdQ1%8 hhnb_PW6&DL9@d7a5Qa ~fuuw+`-OtK-?fOX#@Xi)HX=+47gmDDXm>a@0!CP8dnwSzy2m~DD z!0{qEq13%N4sY?4hP4bHErb;m%HnbiQH@kzZdj--7LNbbFm{lm eMd#93bSoK2G^LV# z{VWMMf(4#|BN5F^aa0=J6o)61sbotM(UM4HOzCmp@It8^8Uxh>H5;>_5?>;LM)ISQ zaAua~cqs2{j %y2|sGL>#=YHms;`cBDj4Pn7)L=F6-J*XZ!)I&2jrBTTwQyh(E zW{x9~%*}9?bOHm1HzQm4nUj6VL_es9PP1Ci4PjGZ99V2BlVRc?#9(3#QM{~HZ*#E4 z!Xv85+iii=P(R2ECo79X=SJ`*+g({~hD#_F#SU*yHYecC31oAkDIRY|nB;J0gz(^u zL6yl)sAT3_tqEaJL%AWYTyCH(cKQGdooQb|-oWC)?#Rix>%s`0qykxnvYBH=rJ?iC z7R#fCGw9gKM%o@Khsl5|3P$xS8|zO%W-!dieq p%K&%d;vIJ6YTTXxiDxMC8Al~bG%dl;yb@bnF5O2FX>u9K&4 z=2#PGy9v5rzPe%ZKRuN7{b6xUvBMRMlG7W2o#9{QF9iNV;4cLJLf|h1{zBmY9|GS# zAs8I^mJ 6W?DFAFvXo$1@kA^VwW2n>( z^MI;A9n1porIZ)s=(65*D*yD)^>96!N&}z AxYLW5BH45W47%NiZhS0TMB1R4nGMzr1cE8UCIOc{-)S%FT7tMeM@n+~K6nSY>t z|3K6Bgs>qG3GytVvpG<|oaa}Xj?(*3njIJhZIcz$LsbUH%>~v=;H3}jVIJ5KW=ai# zF9-uH5C}p64%Qsl!UN8*|HpqJKVK%l4NCb!DHfnXiM4 CGuK{?-`6kaj4}irGY(Ms`ZAm%+>VF5| z_S0`|zDWQG;sDTV3ZjNkW#gb(RXIPH{2sUhfSMNo+P?uXYx`H+U?18KG8zDIg;;H_ z1RyyDfMramd&j@<8_l3k t)c@TaJZCOQ>oDJjiRR-L7)sxnJO zMQyg0hT3e+*(xd;b2K!yb#!%gRn_O}&C$`*($UqCrDx@#jDq4!Ma7vqYAR|v|8YU2 zVAFpq=?##_Xs%Ze{2-5kY0jx!?*a(79LyhnD~dDFM7F#VOqlA)5~km}AO+K-^2lV$ zQA1t>HiX@MeVz4kkFBGhX37an=Z9`vzjIg5FL2hUhretZ4DYV>%$C0xaNtq-!qZiJ zsMHW9k72eL{ &6PH89dv6vL6!aF{xw$oS?_$5El_9rZyp1o`co4JrEVsJu zR^#DSJ|Aq32CQkOKx
gwtm2_dDbg?^{GF`d`t7S(F>mtq1S6C1=}g>VA73|Izw);gGgd-IIjd^IZkm z%gFe=@iP|Deby6-?2T8$ObSonvW%5pVt+9&diqh5AHL+>amn_~$|ha5_2CV|g7{b2 z8lyioozX9WMjB~AqhNuqPx_4knlQodMBNXK)0najLowQroivWY$lq@N>HY(3>Zi|9 zcj-m$zh;;ouW^6BCuZ|=(T1k#JC4V%{MvEj$fo`EU3VfEuYT_CQIPEg7EfeV+|R@9 zuJk`xptw6{{FJTXy4Ue@v~tNb;gcB$ZY{XlcU=7a_Y1bh_~pmOJgc!1MS0l0ON*`C zy6R?6G6YDL{FZGC8mh;xRMs41O8_)}zUE}2e=20~X`yMfTH|ZP(12^GmjLrQf!FP; zf7LSd^fr%EN=$z-^GNEu@{sZu1BMY>+MybKblRXZXIc%wXc}qYor3pIhh8JrUfwlI z*Vp7x6~V$JH{*9!^~%pi=dc^RZ62L5TiJ1N$Cq6HU(F~E%8f**(m(@hLp8!h@U_78 zD1$Zlc;2hYkVEqlGc1nm(_bc1=PcphZ&>4AK6h>APvMt!)_<2wcR4ap{N#G3BAFEb zRM}{7PVoBod$-5o%`9G|l-4PLB(J3rvtPa}$(ZQKtrf{{nr|O``oSh0Gso^)ANelh z {C;&oQ-1Li4b$dxr+y6>v`y|QT)?r`+?jKCRYvul6&)adz>a3229}i24SuQV z+GRG^%H*ab_`0683+bR|O5*S8Eg0&`o9l1^J+tpcEnzvWIux{a73dhcq;`*oH2ni= CYOu8c literal 0 HcmV?d00001 diff --git a/resources/ui/units/vehicles/icons/Strv2000_24.jpg b/resources/ui/units/vehicles/icons/Strv2000_24.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05bff61d8deaf1beaad0085009bdb50ea2b37afc GIT binary patch literal 9039 zcmeHNcUV)|w%>FVkYZF6m55yl5JC$A8AL!F8KkI)3Z`O!BtVc3vCLSoFqV<38B_!u zunbZ(0;7odM#>;X5FsK8Dj?EJNY2|Q6#d?vd%t(zcmI2CIh=L&UhB8l`t7yP;hZJX zh`a_GTO6DmfDCN 1^^y&WMqL8l-Tgll92;4@QfadWE7<5 zLMZD@$$vn3&6JKTl=0A34W6IE!x+jKcy53P^O(HU_9K)%AsCKIX3>MmSR(@?X~P;% z3o|`aDl}#=7XJ@}(^>%NLp0R8>9eDg^EQZvH!?6bfj$@+6D*C4E%C-!ytyU8!qSuo zWWmvMN?;qbQATZl{SqPUnrZ(j4 G&A<*QD=I1}Dkv){Db1RtJX;l`rmCW% zx=?GbI%dft-K9$wEnbXWVXzvjr@wsh;x*=L^^Nc*CMLS8iPjdzRt5wUV-!SY)~s2o zDyrIQYTCxj7B4gYw;S>Y&{PKdWMHs*Kvq*mPE!VX40NHN3TQscKxZeLjI5lzf})c0 ztl271Ax{HkN={Z@PC-Fl9%{$HaUid$ptTHdt2oz{tfUu&F+OxQO?mmoI}hi%)qGw- zpadVDHGBR7?S+e0u3Eij?K%@vGjj`~rQIfb2gl7$TiiXi@7U?N%Zo~*Gko_m{kS0q zLc_u%B9Hv|)6rwcPsE)&f8m#l35iL`SFT=5zn+nqb>sKkyLtHqh4=11Dt%n`r2OfB z{rSAMuD;<#W7EsFH|=lVb#%V}@UgFdU~p)7WOQsCjSG!)y8UfjnlLU|d3iZ`B{VJ> z*)Vv>Y04`s!z*gpx+;-_=IR+AQpRjNn|9~ntmOo^&+{n3HM8fhFlk%ahlVDN?0*;7 z;r~-)Gl6}H>m^W?lYxsTrwK@)XIS){m37Bq{qLQZC`;}NVm|J1>lwMyMp;rk$QpqI zYYIJ&af%FtkqH>e$)Aqri)sp5)62A>22QF0JMv+FD1;fw8Wz>W8EnvCja=mvxy0e^ z%P4BagAg-d5))oPrTpjU1b^BVw4Tnh5k{JcYJwW!6w7=f`J5u1nD>RAN6_=fnBu{d z{e|~7hoVznFVopC9dJzDess^9vpaeDYYMv^?(|ff2>hUC;*~b?XnGk5 >t6P@ZY13NA#Rl##i1T0U@r#Nsp&9dOy(+mt zXlk@4?D`{{q3`V )-cCxd+&N(V+lBg@2&kLjxAqQZfAW7C8gZ>M;&ew^ ziSMU7rx36J0bZ&1hkM6DpO8Lez>5T ddGkyQ)P#V!snZtU__QgoJ>G ztBFK)2RK~8Yr~dL+(*D$7fGJs#0t`27xb4jUdL5h_Tk=D(+(~FRtBl&PW(6%T4grx zsv^}Opbr6(JcE62t=&x+4^l)sb^FT^uoMAZJN!ol&&tQ=a1r1PgC>?XUH*$!&T04+ zPV|h_P#n{6pgM0%_kFY3Cy7<3#c=k!x*&cFuU#ni^R9h*ixK6V5ihAPk*rJ!ZI|rs zL;(HfNzraeA`h}C_WOLufOl*ti+VmZJZrnIYvJ-{?2G6g;rqsN5l`%w@|7Y2%$JmS zU7`su 3qEJikTf>It zBRV7PqkX4*n_JJP9!;CiYWY~gZW3KeAx!M5;;H)y^BQ6i@X4AKkANKSNUNY>-q BLybr}({;1l@wYV)oC;zJG3uxsvO7<2Cg`}2j9cvX4k2mge z_HFy9IlKCe_4=!V21#wMSeN|@vdK$l*m6$`S9iGwCDt&7l