From c4d9ccc4fa5e900e9bd4a5da6de70be7c6a56b94 Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Fri, 12 Jun 2026 17:38:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A9=BA=E5=9F=BA=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E9=A3=9E=E8=A1=8C=E4=B8=8E=E6=8A=95=E5=BC=B9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PlatformEntity: 新增状态机 Idle→FlyingToTarget→ReadyToRelease - EquipmentDeployment: 新增 CruiseSpeed 字段(空基平台巡航速度) - MunitionEntity: 空投弹药继承载机速度矢量,替代自由落体 - Kinematics: 新增 AirDropPosition/AirDropFallTime/DirectionVelocity 工具方法 - SimulationEngine: 空基平台先飞后投,AdjustFireTimesForAirBased 补偿飞行耗时 - SimulationRunner: 空基平台 3D 可视化(蓝色 Capsule) - 集成测试 Scenario_AirBased_PlatformFliesAndDrops 通过(8x 加速) - 实施文档同步进度 --- .../tasks/实施计划与任务跟踪.md | 85 +++++++++++++----- .../Algorithms/AlgorithmTypes.cs | 4 + .../Algorithms/Kinematics.cs | 43 +++++++++ .../Models/EquipmentDeployment.cs | 3 + .../Simulation/MunitionEntity.cs | 34 ++++--- .../Simulation/PlatformEntity.cs | 80 ++++++++++++++++- .../Simulation/SimulationEngine.cs | 58 +++++++++++- .../CounterDrone.Core/CounterDrone.Core.dll | Bin 105472 -> 110080 bytes .../Scripts/Managers/ManagerVerification.cs | 2 + .../Scripts/Managers/SimulationBootstrap.cs | 2 + .../Scripts/Managers/SimulationRunner.cs | 26 +++++- .../FullPipelineTests.cs | 75 +++++++++++++++- 12 files changed, 370 insertions(+), 42 deletions(-) diff --git a/docs/implementation/tasks/实施计划与任务跟踪.md b/docs/implementation/tasks/实施计划与任务跟踪.md index 30ac4f6..392ebce 100644 --- a/docs/implementation/tasks/实施计划与任务跟踪.md +++ b/docs/implementation/tasks/实施计划与任务跟踪.md @@ -1,8 +1,8 @@ # 实施计划与任务跟踪 > **项目**:反无人机仿真系统后端 -> **文档版本**:V1.1 -> **更新日期**:2026-06-11 +> **文档版本**:V1.2 +> **更新日期**:2026-06-12 --- @@ -14,10 +14,11 @@ Phase 2 ✅ 想定管理 Phase 3 ✅ 算法层 Phase 4 ✅ 仿真引擎 Phase 5 ✅ 报告生成 -Phase 6 ⬜ Unity 集成(需 Unity 22.3.62) +Phase 6 ✅ Unity 集成(桥接层 + 示例项目) Phase 7 ✅ 打磨收尾 +Phase 8 ⬜ 待开发 ──────────────────────── -已完成 P1-P5 + P7 +已完成 P1-P7 ``` --- @@ -93,23 +94,29 @@ Phase 7 ✅ 打磨收尾 --- -### Phase 6:Unity 集成 ⬜ +### Phase 6:Unity 集成 ✅ **目标**:将 Core.dll 集成到 Unity,实现完整运行链路。 -**前置条件**:安装 Unity Hub + Editor 22.3.62 +**前置条件**:安装 Unity Hub + Editor 22.3.62 +**位置**:`src/Unity/`(完整 Unity 项目) -| # | 任务 | 预估 | 状态 | -|---|------|------|------| -| 6.1 | 创建 Unity 项目,导入 Core.dll | 1h | ⬜ | -| 6.2 | 实现 `UnityPathProvider` | 1h | ⬜ | -| 6.3 | 实现 `ModelManager` | 3h | ⬜ | -| 6.4 | 实现 `ScenarioManager`(5 步向导) | 4h | ⬜ | -| 6.5 | 实现 `SimulationRunner`(Update 驱动) | 3h | ⬜ | -| 6.6 | 实现 `ReplayController`(协程回放) | 3h | ⬜ | -| 6.7 | 实现 `ReportManager` | 2h | ⬜ | -| 6.8 | 3D 实体可视化 | 4h | ⬜ | -| 6.9 | 粒子系统参数传递 | 3h | ⬜ | -| 6.10 | 端到端联调 | 6h | ⬜ | +| # | 任务 | 预估 | 状态 | 说明 | +|---|------|------|------|------| +| 6.1 | 创建 Unity 项目,导入 Core.dll | 1h | ✅ | `src/Unity/` 项目,16 个 DLL → `Assets/Plugins/` | +| 6.2 | 实现 `UnityPathProvider` | 1h | ✅ | `Application.persistentDataPath` 桥接 | +| 6.3 | 实现 `ModelManager` | 3h | ✅ | 导入/删除/查询,含 Verify | +| 6.4 | 实现 `ScenarioManager`(5 步配置) | 4h | ✅ | 完整 CRUD + 搜索分页 + 多编队 Route | +| 6.5 | 实现 `SimulationRunner`(Update 驱动) | 3h | ✅ | Tick 驱动 + 事件订阅 + 实体位置同步 + 炮弹轨迹可视化 | +| 6.6 | 实现 `ReplayController`(帧加载) | 3h | ✅ | 从分库加载帧数据,TotalFrames/GetFrame | +| 6.7 | 实现 `ReportManager` | 2h | ✅ | 生成 + Markdown 导出 | +| 6.8 | 3D 实体可视化 | 4h | ✅ | Drone/Cube、Cloud/Sphere、Munition/Cylinder,逐帧位置同步 | +| 6.9 | 粒子系统参数传递 | 3h | ✅ | 云团半径缩放 + 颜色/透明度动态更新 | +| 6.10 | 端到端联调 + 一键验证 | 6h | ✅ | `ManagerVerification` 7 模块全过,`SimulationBootstrap` 一键 Demo | + +**额外交付物**: +- `SimulationBootstrap.cs`:一键创建想定 → 推荐方案 → 启动仿真(Scene 直接运行) +- `simple_simulation.unity`:预配置场景文件 +- `ManagerVerification`:Inspector 右键 `Run Full Verification` → Console 7 行 OK --- @@ -136,12 +143,44 @@ Phase 7 ✅ 打磨收尾 | 行覆盖率 | **95.4%** | | 分支覆盖率 | **80.5%** | | 执行时间 | ~9 秒 | -| 项目文件 | `CounterDrone.Core.dll` (.NET Standard 2.1) | -| 零 Unity 依赖 | ✅ 可脱离 Unity 独立运行和测试 | +| Core 程序集 | `CounterDrone.Core.dll` (.NET Standard 2.1) | +| Unity 项目 | `src/Unity/`(Unity 2022.3.62) | +| Unity Manager | 7 个 MonoBehaviour 桥接 + 1 个 Bootstrap | +| 零 Unity 依赖 | ✅ Core 可脱离 Unity 独立运行和测试 | --- -## 四、里程碑 +## 四、Phase 8:待开发功能(后端范围) + +> UI/视觉/动画属于前端同事范畴,以下仅列后端 Core 需实现的功能。 + +### 8.1 仿真增强 + +| # | 功能 | 说明 | +|---|------|------| +| 8.1.1 | 探测设备搜索逻辑 | `DetectionEntity` 类已存在,需接入 `SimulationEngine` 实现探测→火控链路闭环 | +| 8.1.2 | 蜂群运动模型 | `FormationMode.Swarm` 枚举已定义,需差异化行为(随机扰动、个体差异) | +| 8.1.3 | 空基平台飞行动态 | `PlatformEntity` 状态机(Idle→FlyingToTarget→ReadyToRelease),巡航飞行,弹药继承载机速度下落,`Kinematics` 工具类支撑,集成测试通过 | ✅ | +| 8.1.4 | 预置典型目标库 | 具体无人机型号 JSON 配置(如 DJI Mavic 3、Shahed-136 等),导入 `TargetConfig` 默认值 | +| 8.1.5 | 毁伤曲线参数校准 | 三种毁伤模型的 damageRate/threshold/burstDamage 需甲方/领域专家确认后写入 | + +### 8.2 报告与导出 + +| # | 功能 | 说明 | +|---|------|------| +| 8.2.1 | PDF 导出 | QuestPDF 或其他 .NET Standard 2.1 方案调研,`IReportService.ExportReport()` 实现 | +| 8.2.2 | Word 导出 | 调研可行方案 | + +### 8.3 第三方对接 + +| # | 功能 | 说明 | +|---|------|------| +| 8.3.1 | 第三方 DLL 接口规范 | 与供应商对齐 `ICloudDispersionModel` P/Invoke 签名和调用约定 | +| 8.3.2 | 扩散模型替换验证 | 通过 `AlgorithmFactory.Register` 切换到第三方实现后的集成测试 | + +--- + +## 五、里程碑 | 里程碑 | 状态 | |------|------| @@ -150,12 +189,12 @@ Phase 7 ✅ 打磨收尾 | M3 — 算法可计算 | ✅ | | M4 — 仿真可运行 | ✅ | | M5 — 报告可生成 | ✅ | -| M6 — Unity 可演示 | ⬜ | +| M6 — Unity 可演示 | ✅ | | M7 — 交付就绪 | ✅ | --- -## 五、状态图例 +## 六、状态图例 | 符号 | 含义 | |------|------| diff --git a/src/CounterDrone.Core/Algorithms/AlgorithmTypes.cs b/src/CounterDrone.Core/Algorithms/AlgorithmTypes.cs index daa7a74..0544ff0 100644 --- a/src/CounterDrone.Core/Algorithms/AlgorithmTypes.cs +++ b/src/CounterDrone.Core/Algorithms/AlgorithmTypes.cs @@ -90,6 +90,10 @@ namespace CounterDrone.Core.Algorithms public float CoverageVolume { get; set; } public float Cooldown { get; set; } = 5f; public float MuzzleVelocity { get; set; } = 800f; + /// 空基平台巡航速度 m/s + public float CruiseSpeed { get; set; } = 55f; + /// 空基平台投放高度 m + public float ReleaseAltitude { get; set; } } public class RecommendedDetection diff --git a/src/CounterDrone.Core/Algorithms/Kinematics.cs b/src/CounterDrone.Core/Algorithms/Kinematics.cs index a166dfb..703d5ff 100644 --- a/src/CounterDrone.Core/Algorithms/Kinematics.cs +++ b/src/CounterDrone.Core/Algorithms/Kinematics.cs @@ -70,6 +70,49 @@ namespace CounterDrone.Core.Algorithms return (x, y, z); } + /// 空投弹药位置:继承载机速度 + 重力下落 + /// 投放点坐标 + /// 载机速度矢量 (m/s) + /// 经过时间 (s) + public static (float X, float Y, float Z) AirDropPosition( + float startX, float startY, float startZ, + float carrierVelX, float carrierVelY, float carrierVelZ, + float time) + { + const float g = 9.81f; + var x = startX + carrierVelX * time; + var y = startY + carrierVelY * time - 0.5f * g * time * time; + var z = startZ + carrierVelZ * time; + return (x, y, z); + } + + /// 空投降落时间:从释放高度下落到目标高度所需时间 + /// 释放高度 (m) + /// 目标高度 (m) + /// 载机垂直速度 (m/s),正=向上,默认 0(平飞) + public static float AirDropFallTime(float releaseAlt, float targetAlt, float carrierVelY = 0f) + { + const float g = 9.81f; + var dy = releaseAlt - targetAlt; + if (dy <= 0) return 0f; + return ((float)Math.Sqrt(carrierVelY * carrierVelY + 2f * g * dy) - carrierVelY) / g; + } + + /// 两点间方向的速度矢量:normalize(to - from) × speed + public static (float X, float Y, float Z) DirectionVelocity( + float fromX, float fromY, float fromZ, + float toX, float toY, float toZ, + float speed) + { + float dx = toX - fromX; + float dy = toY - fromY; + float dz = toZ - fromZ; + float dist = (float)Math.Sqrt(dx * dx + dy * dy + dz * dz); + if (dist < 0.01f) return (0, 0, 0); + float s = speed / dist; + return (dx * s, dy * s, dz * s); + } + /// 点到矩形距离(简化判定) public static float Distance2D(float x1, float z1, float x2, float z2) { diff --git a/src/CounterDrone.Core/Models/EquipmentDeployment.cs b/src/CounterDrone.Core/Models/EquipmentDeployment.cs index 5046262..cfaa507 100644 --- a/src/CounterDrone.Core/Models/EquipmentDeployment.cs +++ b/src/CounterDrone.Core/Models/EquipmentDeployment.cs @@ -38,6 +38,9 @@ namespace CounterDrone.Core.Models public double Cooldown { get; set; } = 5.0; + /// 空基平台巡航速度 m/s(地基为 NULL) + public double? CruiseSpeed { get; set; } + // 探测设备专用 public double? DetectionRadius { get; set; } } diff --git a/src/CounterDrone.Core/Simulation/MunitionEntity.cs b/src/CounterDrone.Core/Simulation/MunitionEntity.cs index 95f4dc2..627fd01 100644 --- a/src/CounterDrone.Core/Simulation/MunitionEntity.cs +++ b/src/CounterDrone.Core/Simulation/MunitionEntity.cs @@ -23,12 +23,16 @@ namespace CounterDrone.Core.Simulation private readonly float _azimuth; private readonly float _startX, _startY, _startZ; + // 空基投放:继承载机速度 + private readonly float _carrierVelX, _carrierVelY, _carrierVelZ; + private bool _hasExceededReleaseAltitude; public MunitionEntity(string id, PlatformType launchMode, AerosolType aerosolType, float startX, float startY, float startZ, float targetX, float targetY, float targetZ, - float muzzleVelocity, float releaseAltitude) + float muzzleVelocity, float releaseAltitude, + float carrierVelX = 0f, float carrierVelY = 0f, float carrierVelZ = 0f) { Id = id; LaunchMode = launchMode; @@ -38,14 +42,18 @@ namespace CounterDrone.Core.Simulation TargetX = targetX; TargetY = targetY; TargetZ = targetZ; _muzzleVelocity = muzzleVelocity; ReleaseAltitude = releaseAltitude; + _carrierVelX = carrierVelX; + _carrierVelY = carrierVelY; + _carrierVelZ = carrierVelZ; - // 根据目标距离反算发射角(取低弹道) - var dx = targetX - startX; - var dz = targetZ - startZ; - var horizontalDist = (float)System.Math.Sqrt(dx * dx + dz * dz); - _azimuth = horizontalDist > 0.001f ? (float)System.Math.Atan2(dx, dz) : 0; - - _launchAngle = Kinematics.CalculateLaunchAngle(horizontalDist, muzzleVelocity, releaseAltitude); + if (launchMode == PlatformType.GroundBased) + { + var dx = targetX - startX; + var dz = targetZ - startZ; + var horizontalDist = (float)System.Math.Sqrt(dx * dx + dz * dz); + _azimuth = horizontalDist > 0.001f ? (float)System.Math.Atan2(dx, dz) : 0; + _launchAngle = Kinematics.CalculateLaunchAngle(horizontalDist, muzzleVelocity, releaseAltitude); + } } public void Update(float deltaTime) @@ -59,7 +67,6 @@ namespace CounterDrone.Core.Simulation _startX, _startY, _startZ, _launchAngle, _azimuth, _muzzleVelocity, _time); PosX = x; PosY = y; PosZ = z; - // 必须先从上方越过释放高度,再回落时才触发 if (PosY > ReleaseAltitude) _hasExceededReleaseAltitude = true; @@ -71,10 +78,11 @@ namespace CounterDrone.Core.Simulation } else { - // 空基投放:自由落体 - PosY -= 9.81f * deltaTime; - PosX += (TargetX - PosX) * 0.1f; - PosZ += (TargetZ - PosZ) * 0.1f; + (float x, float y, float z) = Kinematics.AirDropPosition( + _startX, _startY, _startZ, + _carrierVelX, _carrierVelY, _carrierVelZ, + _time); + PosX = x; PosY = y; PosZ = z; if (PosY <= ReleaseAltitude) { diff --git a/src/CounterDrone.Core/Simulation/PlatformEntity.cs b/src/CounterDrone.Core/Simulation/PlatformEntity.cs index 730da1b..95f09d2 100644 --- a/src/CounterDrone.Core/Simulation/PlatformEntity.cs +++ b/src/CounterDrone.Core/Simulation/PlatformEntity.cs @@ -1,7 +1,11 @@ +using System; +using CounterDrone.Core.Algorithms; using CounterDrone.Core.Models; namespace CounterDrone.Core.Simulation { + public enum PlatformState { Idle, FlyingToTarget, ReadyToRelease } + public class PlatformEntity { public string Id { get; } @@ -14,7 +18,23 @@ namespace CounterDrone.Core.Simulation public int MunitionCount { get; private set; } public float Cooldown { get; } public float CooldownRemaining { get; private set; } - public bool Ready => CooldownRemaining <= 0 && MunitionCount > 0; + public PlatformState State { get; private set; } = PlatformState.Idle; + + // 空基平台 + public float CruiseSpeed { get; } + public float PatrolX { get; } + public float PatrolY { get; } + public float PatrolZ { get; } + public float ReleaseAltitude { get; } + private float _targetX, _targetY, _targetZ; + private float _flightDistance; + private float _flownDistance; + + // 地基平台 + public float MuzzleVelocity { get; } + + /// Ready 包含:冷却就绪 + 有弹药 + 非飞行中 + public bool Ready => CooldownRemaining <= 0 && MunitionCount > 0 && State != PlatformState.FlyingToTarget; public PlatformEntity(string id, EquipmentDeployment config) { @@ -27,18 +47,74 @@ namespace CounterDrone.Core.Simulation AerosolType = config.AerosolType.HasValue ? (AerosolType?)config.AerosolType.Value : null; MunitionCount = config.MunitionCount ?? 3; Cooldown = (float)config.Cooldown; + MuzzleVelocity = (float)(config.MuzzleVelocity ?? 800f); + CruiseSpeed = (float)(config.CruiseSpeed ?? 55f); + ReleaseAltitude = (float)(config.ReleaseAltitude ?? 1000f); + + PatrolX = PosX; + PatrolY = PosY; + PatrolZ = PosZ; } public void Update(float deltaTime) { if (CooldownRemaining > 0) CooldownRemaining -= deltaTime; + + if (State != PlatformState.FlyingToTarget) return; + + float step = CruiseSpeed * deltaTime; + _flownDistance += step; + + if (_flownDistance >= _flightDistance || _flightDistance < 0.01f) + { + PosX = _targetX; + PosY = _targetY; + PosZ = _targetZ; + State = PlatformState.ReadyToRelease; + return; + } + + float t = _flownDistance / _flightDistance; + PosX = PatrolX + (_targetX - PatrolX) * t; + PosY = PatrolY + (_targetY - PatrolY) * t; + PosZ = PatrolZ + (_targetZ - PatrolZ) * t; } - public void Fire() + /// 下令空基平台飞往投放点 + public void CommandFlyTo(float targetX, float targetY, float targetZ) + { + if (PlatformType != Models.PlatformType.AirBased) return; + _targetX = targetX; + _targetY = targetY; + _targetZ = targetZ; + float dx = targetX - PosX; + float dy = targetY - PosY; + float dz = targetZ - PosZ; + _flightDistance = (float)Math.Sqrt(dx * dx + dy * dy + dz * dz); + _flownDistance = 0; + State = PlatformState.FlyingToTarget; + } + + /// 地基:直接发射;空基:投弹后冷却 + public void Release() { MunitionCount--; CooldownRemaining = Cooldown; + State = PlatformState.Idle; + } + + /// 空基平台到达投放点后可投弹 + public bool CanRelease => State == PlatformState.ReadyToRelease && CooldownRemaining <= 0 && MunitionCount > 0; + + /// 当前速度矢量(空基平台:飞行方向 × 巡航速度;地基:零矢量) + public (float Vx, float Vy, float Vz) CurrentVelocity + { + get + { + if (PlatformType != Models.PlatformType.AirBased) return (0, 0, 0); + return Kinematics.DirectionVelocity(PatrolX, PatrolY, PatrolZ, _targetX, _targetY, _targetZ, CruiseSpeed); + } } } } diff --git a/src/CounterDrone.Core/Simulation/SimulationEngine.cs b/src/CounterDrone.Core/Simulation/SimulationEngine.cs index 3c882c2..bdb55d5 100644 --- a/src/CounterDrone.Core/Simulation/SimulationEngine.cs +++ b/src/CounterDrone.Core/Simulation/SimulationEngine.cs @@ -114,6 +114,7 @@ namespace CounterDrone.Core.Simulation SimulationTime = 0; _entityCounter = 0; _nextFireIndex = 0; + AdjustFireTimesForAirBased(); _frameDb = _frameStore.CreateOrOpen(_taskId); State = SimulationState.Running; } @@ -133,9 +134,18 @@ namespace CounterDrone.Core.Simulation { var fe = _fireSchedule[_nextFireIndex++]; var platform = _platforms.Count > fe.PlatformIndex ? _platforms[fe.PlatformIndex] : null; - if (platform != null && platform.Ready) + if (platform == null) continue; + + if (platform.PlatformType == Models.PlatformType.AirBased && platform.Ready) { - platform.Fire(); + // 空基:下令飞往投放点(投放点 = 目标正上方,ReleaseAltitude 高度) + var releaseAlt = platform.ReleaseAltitude > 0 ? platform.ReleaseAltitude : _disperseHeight; + platform.CommandFlyTo(fe.TargetX, releaseAlt, fe.TargetZ); + } + else if (platform.Ready) + { + // 地基:直接发射 + platform.Release(); var m = new MunitionEntity($"mun_{++_entityCounter}", platform.PlatformType ?? Models.PlatformType.GroundBased, platform.AerosolType ?? Models.AerosolType.InertGas, @@ -147,6 +157,23 @@ namespace CounterDrone.Core.Simulation } } + // 1b. 空基平台到达投放点 → 投弹 + foreach (var platform in _platforms.Where(p => p.CanRelease)) + { + var (cvx, cvy, cvz) = platform.CurrentVelocity; + platform.Release(); + var m = new MunitionEntity($"mun_{++_entityCounter}", + Models.PlatformType.AirBased, + platform.AerosolType ?? Models.AerosolType.InertGas, + platform.PosX, platform.PosY, platform.PosZ, + platform.PosX, _disperseHeight, platform.PosZ, + 0f, _disperseHeight, + cvx, cvy, cvz); + _munitions.Add(m); + OnMunitionLaunched?.Invoke(m); + frameEvents.Add(new SimEvent { Type = SimEventType.MunitionLaunched, OccurredAt = SimulationTime, SourceId = platform.Id, Description = $"空基投放 {m.Id}" }); + } + // 2. 弹药飞行 → 云团生成 foreach (var m in _munitions.ToList()) { @@ -238,11 +265,38 @@ namespace CounterDrone.Core.Simulation public void Resume() { if (State == SimulationState.Paused) State = SimulationState.Running; } public void Stop() { State = SimulationState.Stopped; _frameDb?.Close(); } + /// 为空基平台提前发射时间,补偿飞行耗时 + private void AdjustFireTimesForAirBased() + { + for (int i = 0; i < _fireSchedule.Count; i++) + { + var fe = _fireSchedule[i]; + if (fe.PlatformIndex >= _platforms.Count) continue; + var p = _platforms[fe.PlatformIndex]; + if (p.PlatformType != Models.PlatformType.AirBased) continue; + + var releaseAlt = p.ReleaseAltitude > 0 ? p.ReleaseAltitude : _disperseHeight; + float dx = fe.TargetX - p.PatrolX; + float dy = releaseAlt - p.PatrolY; + float dz = fe.TargetZ - p.PatrolZ; + float flightDist = (float)Math.Sqrt(dx * dx + dy * dy + dz * dz); + float flightTime = flightDist / (p.CruiseSpeed > 0.1f ? p.CruiseSpeed : 55f); + float fallTime = Kinematics.AirDropFallTime(releaseAlt, _disperseHeight); + + fe.FireTime -= flightTime + fallTime; + if (fe.FireTime < 0) fe.FireTime = 0.1f; + } + _fireSchedule.Sort((a, b) => a.FireTime.CompareTo(b.FireTime)); + _nextFireIndex = 0; + } + private List CollectSnapshots() { var list = new List(); foreach (var d in _drones) list.Add(new EntitySnapshot { EntityId = d.Id, EntityType = Models.EntityType.Drone, PosX = d.PosX, PosY = d.PosY, PosZ = d.PosZ, StateData = JsonSerializer.Serialize(new { damageStage = (int)_damageModel.GetDamageStage(1 - d.Hp), hp = d.Hp }) }); + foreach (var p in _platforms.Where(p => p.PlatformType == Models.PlatformType.AirBased)) + list.Add(new EntitySnapshot { EntityId = p.Id, EntityType = Models.EntityType.Platform, PosX = p.PosX, PosY = p.PosY, PosZ = p.PosZ, StateData = JsonSerializer.Serialize(new { state = p.State.ToString() }) }); foreach (var c in _clouds) list.Add(new EntitySnapshot { EntityId = c.Id, EntityType = Models.EntityType.Cloud, PosX = c.Dispersion.Center.X, PosY = c.Dispersion.Center.Y, PosZ = c.Dispersion.Center.Z, StateData = JsonSerializer.Serialize(new { radius = c.Dispersion.Radius, opacity = c.Dispersion.Particles.Opacity, phase = c.Dispersion.Phase, elapsed = c.Dispersion.Elapsed }) }); return list; diff --git a/src/Unity/Assets/Plugins/CounterDrone.Core/CounterDrone.Core.dll b/src/Unity/Assets/Plugins/CounterDrone.Core/CounterDrone.Core.dll index 4b35554ad9b13554488e8e4b07872ec57cee6791..c13dd41ad3dd889464da04e387dfb527616b9309 100644 GIT binary patch literal 110080 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

Fg1mt5VOJ|@# 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 literal 105472 zcmcG%34Bvk+CP5IO>&c_3r*6bg|c*^B{Xe;QkGUq3zSVjRJOLLAR-C{E+isgNiC>| z3M%g6#-JlEI4;F;8y)v?7j@jmb#%sM)KOoZ(Q$$Q_j%5_Nm`2I=l#FGe&C$v`#sz9 zJZHT(H#aj{E))(SgcJV{91!AO#Prv|;V%arNX{B?f0o#r_I%;Ja{BXyvrk?cD_9k^ zPKqACqTqz%SFW^9DOhx3L3GW^f~6}98fVTbSYa(bu`)B$J5X1B;?ep?Nl z9qhLt+91CzHp>@i!>O>zEh)cE)_$Yf%r*+yZ}4*|Roq6^n;cq$Ai~dK=BYWejY4ZM z0`@c7rG8t4nEnd##$9}37q3&}J$Rj4Wv}bp$)+vzL!yt8En5+ybsyb@wlM6`M-$OU zeG+{{t^JxlqUQfwAC=@OS7i8&lGPYv`CBQl`;uhc=e-SfN~YgYvKk{he=7xcK9alk zdAJ;nmmOztY~*gM4B0hAUAhJOqI*Z-y*Pfk>$teVS*&Xx23PF#tw- z^j{Q*tYIinippsmppR&Iwsq;LZm$`xLWy$I3=cEyG)$Ih zlVGwLO_$J+l+zVd$TBlL5;!O9K$&!Rd6nCOhTe=ww%-WXK+1HaS@5p66!W2nn9`h{aS zpJT6%({+sH7kqRG)X&@2&4Uv_?#fjjL=#wPxC*GjaW5T1L8@XFaz{@<5VGpXDo1oZ zG1MIiX8S?Rtp_o$9K`(nAm+PnOxd!;S_A`~MjM6Uv7`nqV}!~ksW{r(&^=YQNHc?N zrbHL96GnAUKwWU0lj?-yIEGg^hF6?rRYn+d*R)KBFjLk?DueZrvSNLtlC(Z@iLt7L z!|AfHMCx(67=4S5^BJ_{ndL^P%%LmB!NY8OObTbSGnILq7_TdpdV;9*k`~i!X>z+; znwE#_;f_|F#ff_MJ3{*msLFj|tnEhr|8iYy+BVipcDyB6K1-4-e%=d=UBcn~X zqTSYb@L1-;`B1t$Hvn900y5k{1>Lz#>AD!#R&~F_WriD(9PWdRWGr?$HWE7##~~eK z4PuNXiDS%aj_u;pxrWQCGlUr@lOc~InaqYf z0dgxHbqGvkKn|e(B?n|VE$n1i^u~Y*S(6}JD<~H&TxOEP`UnowKZRS(90ngaSC*OO z4o@T52xIL-ccLz{NmXNnvFd@E!W7j~ruOe8unlwA=fJA!bhNg3UAdJmS6*dW88(lp zl+RIc4)V0bCL?3I;kHnP7Y?Go_v@Qmoh|T8Lqkg#>ECDj97!{^OyqMb-HU5#EFrIlLv#`V{*o)kBSWV8Efs_R-?X@!zyJ#HHk<&>>)c>3F zNIvH6pHMe;17DWQnhu|MM_&WNFTyhb(j75B20@9_`cWcsSwB;hwZAi-^23{5Oa zS=`p8Bs*Acn+r9UTP_9WF>ou;#2`(9W(MgBv@pn2U_OIh46MtkW*=mIR1x7Lpj_>| z0|yS^v?BJ0Fv}9B6?Ineh&%30o>dw#kFfFiV#OE=Ueg)>8#X4>700ITG_kyVgxFzW z6N&7@OFvXjS+~@`8Kc4=^`;6y#Gdd}R1&Nanti?5yEg!277q@N7uoITXMJ zUiZGAenmmjBBdbQCevRi$&cVVK~m%)Kj&T`^+8quxVU*MpKNrLlNN zEG*p->sVA#*7Xc~$nkj48J5oBt1+~2;z%9G$afs7t-uZ(UH}1?2<(6J#O2|I!0Dk3 zGdh*J;&`BdGZb(|2Kk&m*N%YcGsBBOy2B?REKdg<4#AV#l;LybHeqSPs&W3(s+T;p z=i(H@d*~n?hjl!dV%k$#Kt@bDMX&%OViPQYDAz@ChTtl3gy49Hj)ziARk8q^X@7hO zF-|R5%dx4^r9CNxO_B7$fsE9loo)ojt~eHIU^9-jo%k@ikM^!G`T(&>zC!GdlP*S< zCr-K;S!r?7#mMr;hjE-9C!Mm~SvZ+xrDd7T={Sm|oWwE=Pm$$6qjsp9*Q}ZNpWYF+6a~o(SG1}Oo zHnyjYt!bm0j5e;njrHWhVSi$s_Nrw%omc4$?5}LSTN&?Bwug@)4^Y>eBi%-B9Qz3> zrLblPwVRSY{v0AyUR6hK_(YT|14p$KJ@&7@;~Xu`D$NLEB|^;$IV8Ec==tZKtHb)w zY8W(Nk&dB~Hcs@hKCs!yh>$#&F+yNskx@9t+5J_Urz2$xPpdpxmO0CBiYumED3O|Sq0d#WnJ0toD@ zieLf65jMfX3r71gGL6b>kxClTSy%((R7SIuTdgIuy3GV)%~$|&q)o5@;wYP70mRWZ z!2*a`Ho?NFMy!<-p$d%{`pp}ss*+94wzIQ<@^fs01rV59N+}jj)rwPgZ4U9t3em4B zI}0d};iCu^K%mnV!2$?$xFT2pv6=|P=r)cq7&zWQF^})T=xaaqbsNlcdd+mVBfJ9E zoq{zjKf~BStj8S=VZ-y9?&0s*^P;D6)~_rV;P&9d)b1h2)%I{;YJLhH%^1zh#~aG*RY7|M>CF94s0EX>qs1s6JO61@_6H?vB=Y# z=7^r7?IhX*;EV-6F-7mLt&9cLxd$28hV6NmL8 zmgM*sC~dY;SdkuW#@ZM|d*0Iw#aYvFwV*85#B92J7|(kGns?gy4kx-FWoDlg(Y*_! zjpWw(aV*3*Qjno3w~Xn^9#b%~FG7cmnP@b+*1l56@a*e{CJwq%KqsoK>PmsMP9E9! zk!szF>}xo<8or{i&*h$7^a(}8g3r7q6`|5pE4l3FWE1uGyIyy>=~nl0)%s|mqwy&P zX<;2n_Q!!UM}LS;jFrRT0jJODcZA_{Z~UJLH(PU&)rT&upe{TeiD7J;k$_9r)Wpec zRKPk6a%>}I=}%d3YoO*V)b3MvF3LCfT-N(AFyMyp0rg416AGk7W-I-oZSbdIw4n_r zj`3cfH%_9@yS0ffzRp0sK4-EaE&EJgn$P2N$FLQf)|r$k4W-k->df`fs_JT323@?h zK6Ulz*dH2(g~Rp_O)P6O(zR7bql|Sna3DQ$tUo=xg~SYB1|NsYr-cHUk;9BODiyup zziXWlLywr&IjF>!3FR_z3>P+u4?F3j>862N z#b64pO_|8Ri&Prj_rSHN>UirC0F1F`G4h8xaw2|3Yld!%c?EUZJAD}Hxw_%dqBWnm9610KI8e7V9nvtW){*xD(wC~~$v z2YnDduc8-J^dcgojaI-IPFW^yskKo*V`g4~s??dNq{2}e!96zXN>J_?M!#8-ON&Or zo9I%r1TEnhW?CHtqIbdy6qyIWACl1|GA(owDkbOXtpR=S9a5;>$_ebtwr5B$?v$}x z_8&N)v)^Aa)6vb~uTyZZJfXw}&(J5_VlsVf! zMaQJ<--BrJ-;Dw#9h4Hrh8eMLruKV{4q(Dyg}H@Lwq7)pmZRTB|JaK9@Rv<@@=Qcy zR5TV5ePV9b+=ZOJ>=LUHz-*#B-LMLM>_q0_0En<~m_DC1P({UvEC<^}89qUgd5uu-p5#+V0x_(bdKHtk!lhrKGwz(q{WN;G?PA zb8k;4qXYDbm6CXw@4$-7@oe6LUK*c{WzH;`5V0U7#)VL5s)NP^eShinJpj7;RW4m0Qw$L0_)biL!b$^zFeh z!4$_JcNwbCL*r)}8oBiBMfa5t8tp}`wTslK2<;EmCCs&q#^weGDNS)8(_QJx(7Lp@O@Ami`faFj5gk)dCOLts9Nzn z)+}}zrCRr*l-hGWbdsT4|L0NkYj$9C)40cJuNUG=tQOxP{s@3KcgV!!V{3sCERIH; z%I^XG68u%puKafJrKsy3@EJ&_KdR?jVCW@IcXj2j0PX|+F2t$zXPAPoz3xPu%72Y~ zZzKQn;O+V+>BGlx`hbd$Gn&Z*qYpTX@No|%DW8^97^P+8YCO$>F@Srh=R)V+7|?u| z1^Wkex^+J?q(|2IW%vO|8D{KC@~lUVy-P?AS(hn_7SQ-y6hbm)l^Ms@OEL}hcoWHL z-7KO@8jsZgy4mt#6e&6O2Q-iq9!Tr=6-cul0!F)kL{z&$4OqE9gxV7GmG&Oqb}~m} zvIrccZ$RdNQ)}sST4>9pTd4`In7G6v14`pA^y3)LO8G7{Jv*T6uxSIz+p-I? z^*;7)n{cNjdLYLhX8TII+UMZSu6CTV4`=`6en+44%Dyyq{9?-vH3ST?S3G%|t?sC!A6&NP;Mj_@N$Do>9>tyQr{A)gj|3L9^U!+L}wr-jEQ=<_oeh3nZi zs=>4#Lq0qeRI9MVdYo|Cu3j?y1l1N$Jm8anRtAceDayie$6GeiF836nntCF+!QKT|2$GD-t zq2uOTFN4MkMTU8-7f@5FhrC9Z?*_nYRSH`BkV>9WX)h5%CHeRa^~^LO(7nFc%OJfD zi>~b2zp@uutVX!B#qDo1_6pKVIw*yne2Ii{+KZ$+_)3|c@{43R`0hfcv;FI?rH4`J zSGhE$ga;#Y!0BxNpRU=elG!LlWpg>(zv-F{-nVO`6qU_XdbEGrHE%WLeVtpTlrU_L z1l$IFOy)D2eD3f&n1lh38NC#qx86j?Qq%eiN73C$D*9lGjC(Mv92Van3DOz)OJH^C zQRSomN@mFIF+-YDtjcn3oo`>X>xQGlz&k9yA;Y&S-h*-nRd1^|8JW9jJU>ZAV=3~b zkbUmtm6P4x-NZW&=3gS-buj-W@#evNFPB*5Z2wnR*N;ec6QyuB9bB}6i~hT7(UHlb zl+tri+Yi%FgU=Iw7rs*0S6zE?0g}79DVC(VbnH3c(=0p}XNKSJ$@9@GIRjlpY(1uX z-#x%-bWw4zk*{*v={=VFhSSdKDb2PpVE$?o1|h4b!V!v?o-jR46#i?EhKxeCo(9Am zE}pJe7|az^gHQW=Fn4_qIVbm+^YRpx=%J?Y2R*5zY}JFm1>T76M!E1?n2I&~u~6xh zRY(cohD`WvO87ex%;*Ei_$zz(MP$`AO+iiJ4|`H2`e8EHa_SeH8Pv@+d)_$QiE36- zhJyw}B$*+hF;*Jy!8vCpb1tH)CSpzI8+qLs&W6xIGY+BQt%+1>D58;7wAlL?{-3VysYx!NltRyRM%wYHPU?uLO}da$Xzh#?!G1vxN=L$&Te!9BY{&CW zsih7})=Vj?W;`a7nrBS1W=iR?<_u^1&s|I59A$6ol%i_h-!;$JWX+V)W6hanbR0a} zZFJ2_QqeUD*_X~1j~r}9uczKfR~?a|BVT$mOR0U4nJD4*qJ++xsY>9c^+6@fXe%=6 z?cUz?KZ19=YG@UJDpSvB{mFcPx0^4ij&M~Nd1Ve)6+LAf8fN5{<>7OADXP&=xa{&7 z6CIFfNPF?$kN=Up=&fka8wo}4<2Wn&G{v(nTt|5SBCmTt{sn2rdHTUS=ITTQuutI zX|$0MrrXn$X7Tyn85@a%2QH%qQRGaX-L1hX1fA8b2od3rY4J1tX7pz`E&K^h)(T2U zvxcYw{OQ-H#1A6^*V@A=RxLYSAv`nsHoR$#02^=_ZRALNEKrLQr9Ky3hY{njaOW*T zS8NJl^hZiDKhp$mzKi~JO@{f6=Q15}C#=KcnRsxN9?vupWjS+)IC8U{S+3k6&H>(R z7l`I8R}1d)Q*9Q8NQ55yi)5H>RGP1FYhS~l@$8$50iZsil^HPbNHQ0n#Ow=0-R>W_ zeu2a!m%D8;PD3RjbKeTP4)xJ3H-Y6qJ>5z(2_x(Rsl$-cfiZ&lo zQ4c*7AIUuQaOuI3seOaZB0^8IN8I5Wgm^|1<3B==r{n5B_HVRH6X!dM)2#0)!Z#WI z!?DZy0WsZ6a*9@T<^bC3Qs#`;tO!M27`u*WCXL`d$gOUi=r0!W6viX7(OgQV8I0%n zX?RCRfpA9;Bl<_s8BPy>Gpxk4s%c#Oq}w$_Big0E#A>)1(+aEM*%Z0rTPVWg9_MiE zil57|89$F>cYG_yp7=Jz{4CvC)KvgG68FR=KnGjtN6>7!I}Gd1Y<#LpO*t(;j?m?y z=p5v8Mvo_rlXk|6p)HoQ5JgTakD^?wkBa&t!re5g#k77#)#`2nST3rfBC|BM4eh|VQxI7*R1WgD!!n7PsTlIS!wM2} zlwzn4999}Jcq)+UrQYCDs@^D)P%pMI)0(4lP(L}WUc}5(4E319$^+Bx!A#{3`S6fF zcDX6E-MC4~4oabK#6;TDy5^Zmd7uLFP)d7x*W|+~*~`h4LSLnbSa?jwEc*zJlEJCY zD96JKUDnEImU$4L07h= zLt*R-d^EI1Bi(4D-cfmJ)Og7fMdbjoB?_Ydl9tf-Icc60vmL5C;Vd)?v%TKP2s~R0 zHF4wAVeJI(wyr^_m2tB&_%2$iGS?y=U5G~{}fq9Rw3L=Yz zV_uKX%i)_f=)LY|F>{~Q_0UB%C7+k;@*JF7KL>{u*lU%LI?2yz@Tnkw7C^CsJ{OD7 z_iqVVxEm6&22uLqigEDU3i#yOjS6?ErGaW0tIOnCgOOOut|+5y;x)}^FhSIwKUm6>lXYd2Gf{xgn5_3oW+V2#NvZFiSIqOkyUPM7{XGJ7l5qz zK&?m^u6kCYE;S!AMbQv7AINuAs+q)iLN;IQNbR#;?6cv>LQjQ6_Q5uNy1y>PXV)EU zk-0BwXH`COP#`53pep$T1^{~n7r_6A>Up4J0LaPlu2qHA-U#Id?3w4$$zM$*kT%A~IOUWOg+ zo|MHy(om$kvirV(#z_N`7vSr<+Q1FWro3|ys0(nu)@2O|GHuoRWoP zzq0VMU$AgM4;CKk;=7xL+(0)A|NF&vH!Z1q{-0{e4g4xCQ?IF!Kq_MwJJ z4^FhlD=NY!8KD6a!M7tZ-08v_wL z!*uLnPSqUTiRQlbc2+f~sHQ{Dskx}!nn=w|B4zBoqzbxViREj$IEJy>KieT;|0J!F zdkJnzCiYL5@XPz>WNJjOBXs7#eKB8bzP34^ZN>+JUV2J5vJW#>+k9)vI&xA^He*dn zT}P;8$LF9iwf*ahTR3d~pNa z_`fn~Lsyfi!fqzH_bokGQ*&Rpf}}#Xg5B5p|67OHV`zjLLv;Plmq%(0(d7}w5V<5d zhWN@zpTRKU4n2nO#kmV{LB41rV3m1PdT8wFwqLVCht? zumIw6n_vON6*j>Fh%0S^1rR%If&~y)*#rw9uC@slKwM)JEP%MyCRhM*olUR+Vy8{8 zz;nwGQN%^${~qoOu;cXCsK`SGF7oMbYD1h9wV|gWPHGy(!};%(`Zy_Rr{*-oNk#oN z$(@wiQ}0OARo zU;)IFHo*djKiLEen7h zD1rqLxbdL~7C_*RfFf7`fjbh4U;)Gsn_vM1ZaAnMEP%lM1Vyj_0{03O!2$?egDZjs z5V(d{1PdT=J+BBBK;YV25iEefm9`>S0D)^_MX&$@*T;%r0e&U_&iW<)lAp9w$wL^J zTZ?h3GpR1FYE@G#plw{;DuM+NxN1}c3m|aSsR$N8;OMRh z7C_)otOyoB;83jy7C_*Dtq2yVUmSc-|ByD4dfG5jOpBzF7D*W`QmZ{#PHiPE$MIXK zzyfr_F-#FGfWWa>5iEc>+$LB6fm5%_!2*csHo<}#Z%6*pc%#O(+SIHTsX=>$VZWf- zbqdv+v|$DiuTdRb4lR;?+98xB>4imh zNfuDm2{yq3h{ZO+0*DiBf&~yuY=Q+4C)orGAWpUk7CJ(wap2X=6w; zEs{=HOQ~UcvjMf&(?q3ad*Z3}q%W2M@rYmnTDIB*3m}%;1PdTm*aQn8R@wv$AS|0; z0mLesU;)Hxn_vM%)FxO^bN(0S1L>~!Lnak3rJgS59z5z(h%c< z)UdCyzNwE>oAxS*lODCGAsxV}y`(!f0I@q*fL?K%U;#wCO|SssbemuSM2AhV0Aiy} zumEC{O|Sss44Ys<_5A|aPk#nK4iP7X41RbZPO2C&EaBcbDPhF0GU9a!EMjH!#;IYv zDFk;3;?$%O!>a9#Q)5O9>$Nvd%_NP+63Vxv<19d(qiuo(5LixC4i-RQQB?#Bcxf}1 zQ+%xuYmc`nw^<4E@u6A_i>R0DO*Xd$jkAwgKxOCH1PdU}wFwqLoM#g(fY@piEP&W% z6D)u@-zHc9ae+;+0OCTMV1dtcI5!;n%uMR)fkujIkyO;Ssr76!>hR!`#fuA&`RUOBd9c^Dgtx7AzZef|0|W=odY;^u&6YB}{A_w1H0s(sYS+ypd2H9_TiUNch5L@httNi_&aklisLzlb z{H~bM(5qV>zp$`lddu}iNY-Ov$Mo{IU)0N9&`&OYr(g~0i(&Wl z?ptWz*7KH_?fr3YZojzz_Y7m$N%19q%5l7%BfZ3}b1dwdW09RBqr{_g9N#5J2bo8= zVy>i^ZkDkCVuwwz0OBf}U;)I{Ho*djYixprAN0JY3iV{Bs*Ko2G=r%UBeoH@gyU3P zPkbtvoKn{Uu}&qq;PnO?lXJ-NBe`6CYfY@adEP%M)CRhM* zgH5mi;;H8J5g5c;J`DB(JDoB8n_^|t4p5>l$_S|VAa5xyVws@F=Z7a(W&1-=*w z(lZ~<5)Jdq?04^xPmI`9B*n=adh(GU^yDKCBz<`w5c`q^c{7C<~?6D)xEqfM}Is_tt_)gyrTq*4#t*;zpOM{I%x5Rcjf3-;F0g4OIXs>vCD zoFZ5J3Cj0-+`2>T;IIj|?HEu9Ksg*7Hu0-fy5??9%?*&u-K=t-rt5Ce84+`y7M1*@ zN>-uHqjI+BwpISbd#UO3YeNLlr-#wlT-}TX!x8=qx)YB#h2KU@Yxk2-ntP1}5Pz}> z7C<~@6D)vu+9p_df&Bi|_&Aj(5idQbl1B7rx@ksbG)uV?9iujA=tl2R#a^WL=*0J1 zdV?8?|B;DC+dh=TBdJ+<_C3qAGU=nQNVU=SQWv_7%!>3g+FtHLuVY$GMSO|n5GMyH zt+(!7MywYah*O(JERND~YR8D3Mk3X%E#N(Og#i`u7drtfO9{VQt|Xe7iLWE|#Wsa^ z6!fPkI+&OO5{vQ5ar|X9SVas~@$c)cQieDK;qShBE1XO%xVphAV`zUuVwE$jn9%pL z4@UN>r{|hbv#P4OfgWE;z~dUM+7vjjfu3MWq@vyG6zFNNMgm%kQ;ZpxFeX-%obWDBnNU#h5#;v5isv_GVXOy7mldpV~9%sQ+Ehl)>wCk6<|BF?8Nr zL=(a^;&@8H8U75z)ZA~LKdcCaQcek3CjrtA%3yxsp-ld12pYTbS1__^ zz3_@gQ;0gMcPZ5yyATzY@KMRymJ~05h<5>;fyg=;ugG% zh?eq(*y)d@rc?2dwG`zuJiH_6K};`>*Y&-V%r*T@Nl$;428=eFS8z+T+7tLJZ)MWum(5!z#t&PxHBX1Mzv( zKBD$rkhGD2starUyd)mB@oK>h3sO@zTo`j;gwKqDc(|tJ4y7OBfPdK zx4E^&&eKHJ=fT8Sy)Vy~Ge5kFvi0@_e3{L@toimEHAI6lFwh4o_Gu2}^Qkz{Hxww0 ztn?MOa;047e6-pUDDw4Uz9{h(`f`trKg(j8>d&I4_;VUlAI6{8fch@} z0s&NrQ|gNlt<_M=SBTdi7E(=BTlwxpiE@fH4h}5wscM&7voxYgms@i*qFR?*^9XsY z$xy9zxix`Mh@Q1U@m@=pTQgX4S;dIySrST}N)dnMo-Q)Yl03R3B*T`I4qgjO0#L4n z0f0ET+=8Pa^w!Bx+zj;d|Pa#=B4R_rVG^{?9M=9S6z*+pCp z-n_$cKkG7%`&v6W9$;NTF<%jt#9n7k>zKwfj`~_C^{HN~^&?rP8X7vvkkmDmZ*BolPB1wEopNo~ioBky@I(iX35>Wu#lZ zOW|hK7wK6}S2&23z639+MwEefMqpGkX<*|eAVV3na^khKN23kAN@@cD zzAm?dRENUW{WM<2A)vR%^48}wL-e-&NPG~A=LFo)dcV1nnu?<=eSIO)jxRZ+DsmE~ zwj;HqgHpl^Nr$#l&XiY52ZrT|906~f5`5k;PUR7+gY-#{oZ?HjHj+s1e7zg$_*`w& zzO@Nt`CReoeh3U%(xZgbr?5)WH!+qEkoYuo&MyL!!`Q@*jAey=+ zC zyy>eosdU-6={VwG4*m!KaW_q1R3_f-M*Kg33lXOSWFe+M;&H4JCqh6kCiwH|M!dHq z6r%U;dP{P3oR`bEgAQ$Ux%sA!U)S*)-SFEQze6$IQe_}OV;)*-|s#yy*CbdUOprF8Yv9U1gX2;NM??MdThFa8%4<>&S> zV8l4mGyFZOq2IJpcHp-|NZBsG*VO%YK-`{WW!f`2+B39_j-uZIAyZXa?UnF=(MH}- z=eW#nrt7p{I0L4s+7nANd!^_i@8$-hjU0sA5vdVg35=h^O8r3cbpw*fu{wKmw3FQvL(79L>p)iL9*$YF3keJ`BO3iKJ0k$A0-7mOeO``|w{Pb)wb{^L%p zh%~T5>5;LBtH-BDMk3yexDv5@LVBc>c*Ok?ACEYM_-w>kIQ3nFSQ(V=E_$oi)CRh= zsGcw%zX}w-0E=6zgReF4dvM_k6^w01OxMp2aS~b|4?P`@7BByx4qlYsV$RR-ppK6E zA=#eg;ftscAnvu|q6ZDsGjO-yr}367*<6p0!Eo9@GxIakR4H$oF2(tuuBTVibN^DC zPC=iGPC%P3t&kT2E1J$4WMsM6=XkX@ezQ!av@|&xumLSi_zk-(mzzFt<4IEQArb$Y z>FU|%OtFvdCsLm~jb@jl*{gokQY&oVn;3vR{CS_zoaIEOELTrIf2reqDl zL>FWO|LtB4LGF+Lkpc(&u(M%=6W?$S<$5Fj-grX|{(Jj)BWAugV)Vw%JvC0~*;3Na zn1~x0Tw71$Br>$&1A$UV^w3_^);N{xp5`h&WVq!J}&sXHhz0Q}HHueMdbH zb4+J#_ zM6<@LXjcnfed0ncP4kPL{s^usoq-?u@-($TZ>KmP_2FKWua^; z(n_IB! zIGg9EHC4Ot<5JS=Nv9uW^XNvaF60~V?_*KrlMV|w&HU9SSOD>XO|VcIE5c^i@gb4+ z8fnLsu@XxAxJ#OY-zr~*8*=0E`T+W!+5aLs4yyM!hxIPD2qXDx6XCb8LX}mvKqjbnGxKMrdt>5qmk#~>;Doul1rAJ{45esdbi#I8VE zNe89S@3ckehvgzvrj^U;9knuc1l6C}rGA}e>u{*JGB$_G=KPwnm9ZAe+vk_^R>qE_ zJpEJi^oi{!b^FBr!CL3UzDU)6tb<-afDtkPW#IbC*ojm_L23=K_+ctj<={(5>q>H2 ze?2^H(-IX8R2A9$T>M%n7zbZ9SvycPv_Cme4_8$h$%|52Z^q9$e7qF6h{0b5{-0W1 zIka;4(BZ>sh;a#8i{7{#@1JPL9&`ov_!*FAof2KT@}wB$Soe24@{Pr+c+M=b;amPa zI8i)#&Q$DIVk>Y*U!;v+ZY`qB_%rZz?s)@#pO!`!OFzir0vi~$j!qY6;D04D;7VQW zK%5Q?D|qj|&dF;N=cQe1F#h8-E^3f33YqFaG2TgNH^cbB-`Z;8F)_qNmD9$WV$2W< z7gXF`*Gsfw!@=j$6)T6CqIgIx-T>NENnwz~Dh}`BaAyVa85LCa%?Wo@o8pP`yX#DG z7V0s@&m0~(g!rSzQ8>Edj%u%%KI)rtQ%rQ^dgqD4I%=!gNvYEZQ`n0&d8C@;zlbHhqdI9x%SGHAQPClH^m^2jvAdM&TKepv?;DCp;FGnN#}aj z{9&%`AI!T)k{>!F55|x{((dLPSW{NGGcK>8T zv&F?+PEMe5$BG@C_H~%j7HQO8!D(wwTZXjjkI=$RU+xy*bTeBW^E4qt_Yr(&#ouL5<#-NVN>mXbjgyHEJBms{$nmiJ}0!^?W&h6GT)!%>(men_L0_Cs0da3F0V=EMl`H(8vL_OTqu zY52|>(!P)pM*BJEKV^AJ&M#$U3OXR`Ip;La>BOsLlkK^UNt}l3Jk*(COixM6G-jlv zWf?P5P%q=i6qIcom4bZ6(TrAboql6hN}V~z?3A2AV{S^$kTEYMt+&yXQm&8DoRXGr z%ugxT*El96XMf|^l$-;MMJZ_o#$ry}%bE=|mNFX2ekn0p8BM}TY=jtOtZ<;?MR1%D z>qXeG9ED<2=3Syt+?4rygm<(2B+FN124$gGmDyXCig3NBSE(2^G^1Cc7+>ED;j5Fw z&O&i^Hif754uDw`%tQE(e*F+Ceqs)#-kVFPZ zQP`S0yq6Ru1v4|GXvpdZIj0wepK$n1ACfop8-wuD9Fl*>c{U+cX(+`d{bpv^n)v+< z;7P-SYbz9&qHLj9%4O@aN!|r*rP$(|2zkRalIMnrUsg)tB~=tY>89{r4}~3Rl;@6O z%CBsHAut8<{lOVMwzwuZ7kuLY((qcgr75ppFVozTHZx;x$3rCxdd=-vGK|6-GANwG zVOr(_lo}j70bwWnEX7sup%fo+IJpnWWgLorCnNQlzN-+<&ZSacpe>YQU*R2L$hj!A zu9qoR!wOT(hZUxn0V_=L2s53`w6R^wQNOL*HN(b0pV^rdj&7vz)bug1ba_!6VIZ;* z;Xj9;g^Yr%;Tk`!2yeTk|92TWdsiq4<4`3*q}UUWBjK^g_6^ zCI{ieHN6pjUeiC@C!(l%p!kN{qLCmm>d5mn7o;fcSDX#~b0{2JNMRv|cZW!B%ct<7 z-V}b8N8wM*|2~)GFES}So@@9s=Q*AG`tFog*7m17t$u3p&H%~(@{v4~<@>qRVI1xp zK&d5J6#j?9=X;SngUi0dBV=w?DVVZe6z=CRm`Czj=BF_;Ae)%c%wLsHZGFeu-d8}p z(yg97Fs*<*@D0nueAL$0y(#|{Y~ytW#I&>QVxQc_9(aMn7Pd?IQ`M>bc|3dIZ+95!>9H>E0(`tsCKNbNO+!W)KBc*F<_ zA7~tv$n&;2hEh4aiNoC-e!}6G9Dc>&=Lqd~x7Q8Ed|5D*!YVI?FOKFgeQ;v#S9vR$ zr||O$l?ncgj0P}k5!$tF9W@2aXVp^@%;j}?VE$c2VO4crf?r!Y4%)sop2EEHaS45n z3Qq!ac^ZXv!zU&9e#57Mxpyjs<>M%vojEO$y0-L4FvpFg@TKY_6Z}^b=74#(c20uH z8oUmgd|gf9(X|v77g4xt6jmO+*8Pxi0+?YOe#T*L5iv6}DIDHN;i>5qN>079@PtI! zf#X`xVsJQxM`W}l+I@e*0x+YdP*|P5Ai>uSUkv7+>cto>sblGH0UC$%3n`>sNn+hz ziaZC;jy23T4xrR`cxIi><9wH&M*FpWXdE{5BU#n2M(G8qUojm%`7Do-b`5|cw@(V_N;v$H8xYu+3A|f%aCmutD*F}lslBHB5Mdit-(|CW46kp~d4+k5SBCW7tDvVpNIS(B`D-BG z*|#0xtNqVLc!Tdkgz0@RMYz51wFry*PDYDq+jFU7GL6MGF4xzlb#>-Y92J(Y&7xetQ*dtW*WDa{`o z@FNz;rfKu6gz5=iMh0ZzH zi@B_-N7bqFH1J7=a+=~fZucQRdu-;jM{O?Yu!MDZWdK<^Kc7x14-BI4pV;3`aT=Fe z%%$e?8D<5}Y}lRa{)K(nHT(yJb=3zD?iuFv4HIXUWcsAoQA4MNt1_tm-;QTrO{Z}F z7}9*oGzu5F=tTE&ejnsthSQ+kn^oLvem--4#NquoJ&qK!%mF@AT#7S>Db^1n-OfNr z{6JqwY!ZVJRvOg^4>&07>!R>Kq8g=|hK@yeeB)=?lz#&Feqsv3y>b@9s~i;m$w}d5 zu455?<|5f;QaHdo8R2QJ7{VH6=9wf*L8(_rlGk$$H#%cJsy`0qJxOGC&(NgNq*{+3r%Q$M zCfA*b3#oOCo)pXL@$Popz7tNdtWe-@vuEG%PDh}!dtP*LwX`ar(F3^!@l;y2z(eVbHi~=GZt~*8 zgAz*HC@va%lNWbY`R_^B)04l$y#pIP0X>uG4`Wi%(~Lr;ly@_1$VSd#j6RZ7i%-;O zM78+DG>xbhpIB_?WE5w#*>jke($3Q8j1i;#KCw-s=-{zHmul2Lp%LgBjc(2OM*74p z3PG1CNPAHsaZS~1e^9)y(W8@&_2-Er2eH=NUcPA3sBX}A_~pih8vR(e*q<*>*2p=q z5onc00~xJT2<@#z+FpeOwNN1H!pRnj#YBy+hJD3ihDNcnwf} z=tPa)OeeHLqn06O0Iktz@YGIOEaHqdddB0i>teB4r}c3+`Ui^hby~4|8_?xC&FN|M zmx$|hTBc_k&`mn+-$*MJcj&YONGlch=`>GmqkoWiM5pzt-3IiGPWx#5MgFjOS*LwH z{&JwVblT&C8vTRChZ?;)XdBSy8l4M0%fz=DT?akO#LpU?0$n1)MITpTZk_{OA|hKM zc>WrHx%i6FMsa21UH;)>F?}c}HjC}$v;8B*&k=>r9JtM2BSw@fG&SAC6Fg%T@)S(y zl(k}#MpYBA3yYZwp@l*I!^Co3u4Y7)e~fraqm_dm@Yjhw6{^nr$3Ej9FMg_2h-Ta* zQ9VSVlQTNyWO1iLJnANk`!xEr=uQ7*@rXt=$|sAbHKP8TEM8)?(L?<=S^Pz(QU6U5 zALumdzbWD~oksmPReYnxqMVap*ZKz6vm;UCTCVo-~p5Nx5E5_1eQs^<7)APh6jjk;H&Oc8aq0!$5 z{|q!&BeHg$IF6CBcAhv%r;)Wyf_{MpYnF$sZ4&Er8d=*cI&>OY+bqt}Y0<&%K#SO} z(a_1AvPE2}bB>=Z@s9XiI_V0ny?Kh zSEH%$;PGOBMsvN{K=dm$zwpbjk zQ3=u(i}?z{B2%0wF3@Rjk1GwFC@$CNt8qhsc51X~Tuoq!xJjc6$BhTNQ=>b}rw2|F z_i6M%`B6ZRYIOIMPI(CG29d4X1uuhA=I#{v!1=<2lZ@Tq*cMz>(5E*B#d;ucnjSvrkuSRv*! z+UOx0R*1zqjciycmg_XKVWn83)5r!(#C00kV2RB-?IY|RtHk*leT#KzmAG7^@5e3< ztQOa4^hw=Hpxqj^Hmn1>U8CjWHUZtM5q>ic=qruFKv6-zv_m80`Haf~F|kmi4}eY) zS7J4p;h%wX#911>T6-XHE)~MxlP)TEo&rErj-K%#i1oJ$g@Uv*vzx~Y6X&ZUVoF=bfJjs*H(ayCDuO2m_{tns6B z==o;)d(zcjIwj{f3IOe`IwI%#1o~rDHvi(f%DJ$9ZqAK~w5ioga&AqaN5U&|@Qn!m zd(!ps*flw~C(zu+jX8HFQ1hg7ayk=e;P6Xx?oObUL$1lWCxJq>x8*z_E@to2S+O(c zL9s{sn!NN!amG~2{E;LtJt8jBh`jWuxK1PT(xc)IMw`V=<$uU|OdL6j%54^Zp7>nO zpTuHD+r`xrU(I<&+@R66>bG;A6`yM)$9$OcoR~hF%54{u8vl{=yx61BWn;e1c|m-u z(dUuxb6yl<=BS*vOgfOWPu#_bY`}GqxIc-4FNwDqeI%*>UJ--lQMr$BnK~@z4KYF^ z>c2Ndqej$!e-THvsGQV)?}?`vQ43kYzlyy1Dvf&cQ*o6>)SI7)JsMGOel9YOQ8}qM zzZPSTRfu}?8?jC!>dk)%ddUlEM!or+XgE$G>dpU%KWjw2`J>2Qpwg%}e-@1k6{6mh z@=Qh>#WT>wA)jJ&nb>?-S?Oa~Xgzk4Y&rXcWGz0qP$A@O4Ep8g8d1)GoU%BXGe^!=NZemG zGZ>Wbr=*4Crzt2`eyekC@wNo>WXFkIi`ZIwVz9TIz9d;^zHCxRTzS}vU|;#ZM)wUn zCD>2yTAIvREcYk`Jo`BJ%4r)}|G7#t**x7w{=6%5M_%ai5G zhXDT~}2|gFckSjxcFZHc+}o&Eq?b zN{MZi(^|*x4pz#(8f^-98bjnjjV=lA4i1qO8d=jjjiGXcMyF5T9ULmhYBUpR!{j85 z79eeyoT*WBq|>O9^E6r&*&VEs3pJWo*J%uwCu_8Z`BRh?1xn83)M(z$) z%S{?BsOmIE$a6J{R_zXskQZz85ZW6luhQsMv^P@Tpiy9Gr!h+I(WqqT?%*hSw?=!+ zPGhuuP@~7q-NDiFNsacxXEpK#jUI*1YUJx0{Rlm4<$D^XkJ=rqm7i#IE6#j}$*(ke z5NE!_x>ghUpu}0L>b@FPB{@U1SjFmTN z^ljtr;8=N^MpKJBWxc#xqvm3Xr%4{tXhdnJ(IB7HXkzK^V1s;7qo;A_WSo3mqc@AB z7$@J?$SCPF#>-DM3Y6>)j+b9+^a4CFLH-N7kxo<@V)hVBU-A@^#uf9PJI2Q`|F_GZc_ zG&&LO&6F=_G#2e0DPPlQCfYkvzNgVpw0D&JSfg=h?AYcy!sULd(j z_0dyxopP2;)98&l+$WVdD&udn=VHv9*|LvDH(=(>mc<%9JZ(>Kj*MvZ=Cr*))e7+_ zpDSPcJ25ZPMvY$p% zv4$KYOEua$t)ArNOrv_F9WSFA%|zPqvQ48$F#8wDGc*Qgq4C(9igrQ_b(Qn^c`KDf8GRPIrTEm|i3qtnQu zWm3kJePq!x>D7oVYL$MC$f8!6uhFj3PPtqbYqYl%pVi57jXs{SLI^=MTNV5((Mx(idzY`l}qehDdX9La9=oQ?b-z4W~^!_khhs)zM zdTmIjafV!?(T78J2hWg}M*l{+Gv!*1Ok4+?DLXVeJMxV@OK#EVn#g?j?{=|$2oGWMl?Ilk&`uY zV81?u~n|tXp@PjrsW2OSnF-_4V^}# zXPbOqBhq@C{8S^-`h5AdMx^!m@&}C?Cv+MYNMo(Ceb$8C!3$)%M%yv6E|j<-gTKw5 z>oBq|lzla#`-9u%K#l1B;C5M|5#1lWNRH5m?hjrh$7)3P2QQYBG@|>17t5I%(fz?o zSLakP< z+KPK^QnYG|R*P0`?YBwMT3c;vYh9{-O^O>;TeVheUAXVh`MtA@JL%4mH|qSYHt(|Qcat9KIN9~PNsn>d zV<@GYb&2EtfKs|yPj=kl7~O8sGaWY`quVX|B**1obh}kAcHCf$Znx^w9QP4)-_q5N zI{@9c^g72q0H3$%u;YFTpSS5o$9)&!zOCCF_XC9cw!X-5O@(_*r@qv2TMF+S*{QE~ zoa|0^=^Gp;yOUkI({e2N@8~C;PTJXb^fQi=cJ>|pC&$THuuK2haWWR{(r-I%wRzFcj%mUTh{L{#(j4^*m0#N?a|-WBON#MB(1)yk91t+)IIu6 zeXQfEr)qVlp6)p5?|13Bj+6d=m-ahuJ#=^LrH*Tc?rvRUIp+3z`j1X0x&5Ag#c`6` z@98%jC++O}`mc_YcJ_V!vEx>vBzEfqj$4P4*sTk;+5AaK+@lY1oRq{p`Y^}cj+EW2 zOC9$BQg*MN;7*p~=$9NPC9y}p<~S*d2lP9RlahEq|HE-I zDn6(`cbtrh59&NTpC}_rD|*h4^bp5gf}ZmuJ=$@y4tYo)LNA#(Vdl75lAL})a`wP~>Ki20s?&a}&%ujTkT&B#afUmW-SSQ5c_(4;dj{DJ~D+(XeZ#iyXlxRQK18+=l4 zbey!oU+HGYNgMo?Zg-rlwtuZV94D*oU+b@V97fuw^fw$QqxVz#7RSlx{j}cYI2pa4 z*1H`iqxWz01CEo?`#1Whj%z|Y`>lT5ap$9*{Z{|RaXZmIf2W^w+_%v_f2Vsb$C7wP zPq;|R^9{Xm!k0%qqqjKj)(P82J+E&hXLpHT(4A?PFX)fbEdN`NzL>Q_pRekp$X&0_ zU(hk?RXxvfH%`5BRIk2_+_hsaJmnkUauWRX8wB$a0q~oL| z_vwj_JA3-|qyDU?J1#u^R&eticSm6R@O|3vxIKYgqxR`4$4Sq5O|N#G^qkl9*_LA- zUe`A{-H}W09re2Ia@@qF4}klg<6fS1@2EHQ4;{CE)&t;vVmW$wQ@`kR-@yIwH+7%m z?wS0PQE%$MIBvo*AFH?Y2acP6%pu@Db=k)!%g7ax97W^pj3^v;U(}@9Ae8 zcaL9*d{qF-k%yH8HKG26dZu$I$!~d?2 zcHFx8KNEZ%;_XYpXetXCpr2= z|ITrrmX(bDmwv%vNp+fKT;)$4L+PRDa+&=>ebVe>qNiz-KyVJ4+BpZ_9^& zuAjFY)AG44+F?ug(8(`Chg**LyR_hl$;XfWT#s|yPv_3Ts|O}H?pJe90(ZRQWQIMU zPjH;fum|))$H|!mWhxyfXBL!M>9}=Bi#BT=7sGvKZGw)Ik~e0fKt>w<1SoWK0Mbv;<#%UUj^>xj*}eanO`|ha+GKO zU^&K+Z(d4rfzkQq19I0FTt9c|=s~9BD^h~j7aRw!*sO5eFRE%r4>678E-jcdt9 zcP+);9rK~%N*0t4Kh%8YxY-M?0+)L!YnnM4Y3BFi%E{UJVWhd=aWX%QHNQ`@9A`cw zcfAVDiHsg+wqDM>|-2=gpZ$Xt}Q~mMKmwPw;euB@gqGoa7qvypW>u87kaVhO0D2cBQDia@_zFfb7WgVnOSh7DBsW$uF8CgoXzd2W+S=l z)s9nsGx}6>$W3B-y*mBaS4J;4I~@1?+}B30GVeL=>vQ6X) z%z0+u$Ne+!Dsa_~`wh-+wV87q_bg7TwVANvx(mvOZ#E5%`vuNt zZ8mM>>}qC<>99KXqb=t0e%!VFEWg!HcL%xc>PmIom@VcW$IUad#%whYJFYNi)|hs) z*Kx<@&Kk4L{Kj!UJ!{PQ=0$S09xgC_{kZ+k@*Fd7%mqf@CM980eW4jl&W5|tj3l>R z9jg|NxzLn2?x(tP%thun$KCF$9CNWb(Q&`asT`9q0mpqiciET@Q{}i1b1TPOVrm>W zB(HMJc2n!PNqN;{c9?p{?Z`cQ%vVgzaf@MjsoCbZVBXndzG^OUT#>3AbD6oyao^Er zkGb6Jbli5N>}#gearfn%J?08?7de~TE6oGsY;LbKk2=e@;PXoJgyW7dm1C|lzjxeU z;q&X}6~`4Je^;B=$yqPgn0Lw97_Kp&^wa5YOIdGMXQ<$qYfPczUeNVpt~J9P_cLF7 z%s0#_j(a=jt7E=tD#+Owt~1NY*%+=fXZ6#C`f<^I+AuyE zyQ3d>Pe1NKa-Nr-e!3_7anJPQUhEg{^?tf{$!*8EpRbR(&V1;&ziHtNHj>Dmy(jV7F?yU8>--O0I~V{S5+r0H%pUvs(!bLSX&zYX?XCdeCc@KOlS-<_`9 zpH|N<7PtF-C8`*rfiW&b`DD6$Av;$d~Sizjf2I{i<8CA-6x2jo6AIg z#YB-mUL^7dXc?&z$<*Z{nFaL1Mq%kwx6PBV^DE?yKz^WBnf8)?n~VP$v?+W5x$xon z6p3Xk{N$?7aK0)}JqSs@ijEi0=P-pL@i|FmF0Mg&dahT+Nsp9pj(Q?rd_GbjDepjx`RWo#3RD9mh3Z^L z2B`~Cr$y>1=19`-rS{*)A|+#M?f=XEV1EA3${SHiMjd*bl-1v6OIg|4nUhw|wlqGS zFFBP~XYdS;*q?y5XImqlu!h8={}Y>cXNn)O^g>Ck*_t(MZ)n>ANzZ3!3At+Q+<}(Q zl!}L6&XJVlB5gV92DGtU^)y@ib7;3l{Wp7%P0!sYr#$?-u(qpvsgjmv)C-eRX)8|l zZi6SbQu5#WQ}kq%s+SkrgQV}|s2=3VlLt7qNU0iE<_9YiX=8?^;bUp!sJBiOKj)&v zjM~nzVlL_qo=*{sp&w~=CDGC!Fs^j1?RTl3`2TmAKgE3Q2Kv-Pterk!u6hobr@Dao zss~u0-UWK?>i^C^-9l#FLT${xxnX-i)0 zwyZK+^1W!2xoUg`URI~@a7fZVGp>}x^K2#mXGf&}7yJJ!f&W(m|GP_IF~%{>zZh-2 zHPYf`GH$$q899%uP`vksYqtN~@}nvlZT@$s{Qn;RnJevIU?pkPKY_RxmO(G(3jc7f zNe-5a|Gc#Ait8S%qi{cqp5L{zyp}ZlX_nM%0oE-!yqd^Wc)$=fdkbgV=de~WYCTpX zJ~gv4RcoR(sue2-pLz^7IqL6Rp=GY;|8vX#JV!PcnQ8k^J$Ng(w~$k#KE=8S*K26Q zhHHBt*Y=)`ToD*v5%_pTkfSyoEA4+L$}Nxf`D!gnPpf91SZ)UT)VFe^Om+c1c`N0j z&7n3|bwZoxY^2QX)tpwXST`D8o%N@`f*6hJLwbDb4+Y}+3)G`gVe}@SD#cYvj+%)z zMy|RITD(7$tt$krQPUttEpxq**`kK=+T?hyMKjT^28Yrn6YaV&U2fNq>5~6hI(=RG z5ZkRqyHb_@f)fCgpNAHxl}*2uTgiD#3snhTOuJ5=r^Y)H!g#~_MzsRx!&c(64xe*z zTB{c4)9OGMswFtxI}Dho4g(HSlYw}eoH(BtAXX7q6VD=sfOwAsa3r2(7y2gPSoI|7 zv$XgL0rPNjQ}8@uJF$b<1>A)v$mAVsJNS;ZD8pWTPxANZ-_qkGV-dtFFVnq4)KfOCQqO{A>E7 z`ek+GDKF^P)CHCMVe`_Gzk)7Xif7}^1Ux|}eioU-%okOaX0jQybd7n3@xG&8#OZ-| z)NOMvG9N;+!+fSjSKMfFw8(R`$e)2+zd0oe++1}faK_TReTNw-hd#As>Cb$4KC0|7NbXWDP8C6BNac+&7q(BO?Aa@bEPf43wvEOH0Mf|WDUdK%CNUHYz?)y zQ`p3vo)mWurw9`_v>{GTdZE4Ff^x}bextqnHftP z^42kyM;S|)+I4#O^sDm@rTwFfF-)7soQ-H7qx>nC-#4dxFYj5{Jd^h_ZN@RIwE2B` zPa0`CHT3WrwXeB6O6z)uk_oWiVcwzqCet+MpLvD))d_j3oMqmnCgT?wy3~4H*ZcUF6_~t&O5GfzqxM74B&5OECnt z(vYWWjGRZRF>>;##>g3?8Y8EPq-MWe_`VJ=y|b`^CDUL_hN0Fm)H;S*$587Ss(~f8 zfH;R3W=>J#RlhH6ARTv-7ph7JExdtKQ8#mMeK8ut$$xzD)=8#=)UM zae9l>K2G~(w3$Q697@8Z!=!WAiY{Q;Uci)Jz*c$zLp9LyT9aS-ok3GELf!?G_X<9% zWYl_A$#}KHh~!H2pu2rtu>UJY=8bcHJ7^B=7ZA%Gisf}E^QiASj3ieAZ76At%V@KV z{%@ttt<=^~UPJlql;2MII?BTi#q(}zcT>9?E%58P4b(O;>;sg1^oKgJY3X1%d(?;zeve2Vq^Eb(O{Z|i#5$lJPJHuAQvmyNuw>t!RS)?PMp2JJOk zPB!nIw8ngB?wqp&c=PnF#h;m1C+x@jZRI@chqU<&I4U>CC#|lScqnlk@nxhlPu^;c zK0X1GQMoUpo&TZuWzKFp*eZ6gg-rE{|2edoY`(tqb<7%HBlgZ%gZc66OBW8Fj2=`z zIL;AcD&ifQlj9T5qAed>?C85@t}zRIGFO%pm(gbp)3d-QW7j&L^vy8k4aA#FebtA9 zN&DMre;4g{ z)BZl%KTPeT)OJ(*OG=)iX@0oisUf9!+lX)MF?gqg89ohn zY>qj68s5o24LDXU2aZ=~0FT2P8K>cQrXK{JtbPtGQ@;hCMtL7!&HCE6!3`g{^sDe3W~1EkAH zhe+3vuJcKHIw;vr$#zP*DA`5HE=qbR*-Ob@O8O|-N69|l*HrOXox|93Bz9kpcrK-6 zJSF3E#KuoafLKO(8RbDrLc}`C>nKl9vYnFclyp+kMchUCF3Ni-*-Ob@O8O|-N69`) zbS_hv%M|8HdP*r7Psw;n{FDTUWt5ju9;75htfRaxSMpewyIpM>o1nadxSiVV)NY6N z;<25ScM*3{yNlXg(0+4lH|0IVz0~fdb}zKIkL{ye=Sj*-h<;*_m>_l%yNSI-l}~$O zDbY_15QD@JF+uDgb`raY-NYVZFR_oP3dFM}mJmyceqw-FRv;x@Rv_h5RrgMYliy@x2wa(l~7(v98c|dYR5x+?6?5sWt5juUIzJsaUsg})KOALNe3m{DcMd*7bUwW*+t1-(tAnwQmcyCT8MsPSrKcnNKz7{Bth&TZl`uT zwVjmgqGT5(-IVO5WG^MXl?7_Ys=+KtqK{ZYEG3R7`iW)4ATdO&BPNI)#O=gRVi$22v76XK+)L~w_7V3H)exqH z=p&X8#}oa;GGdTeM@$g66FZ5!h~31!#C=5HQ1L&WIC-d)WEtrov5uG^ZYOpUcM-dZ zdx^coeMEH#>w;K998dHU%ZNc@g4jvyCO&zHq+$Od-;_EXCVonYlZV{`+D|%2Ob|PX zcMp?L-K3u!CSiL?E4&8|BMh;GSV{~KgTxRqLF^!Q61#}q#2#WVv5%-m&@-`==qCn< zL1KuQAa)QtiCx6oN66aaZoI1sDW{}|_!#9+j*$HJQqo6MhcZTD39*zIAXXhJenO<9 zhf3HE(p|)EVh^#G*hhTrP)UOtNzcTbks>J}T}t#51H`J45=)SDh#01QbflDdf|3s6 z<&<=i?jm**dx*WnKB5}M*olRs#D59tQsU%M;yFM%MC>4T5qpSzL_J#k6pj`Tg`;-? zODUN=njT1ph#kZ(Vh^#8sPXzHgdzrrAz}xyi+J}K@!v!G$uYNp?jyZ_%=ba-!{~t+ zAclw?#4h69htUJ+Cl8afJ$blD_8%^Ec&wEF4&voUi2U{=*iMcR?PH|(A0hEhI8x-n z@e*T#*h%arJ~m#oy`*0wttN z31SDai`Y%?5k< z=$}|ZEG7Dh0b-CCA|{9(#7<%tv76XK>?QUQ)l~W?mJmyceqw+aB!-9yVh6F4*hTCn z_7HoCeMEIU{S!-wr9?k5KnxN?#00T}*h%anb`yJuy~IAEnnwS`5@IPaKnxN?#00T} z*h%anb`yJuy~IAEnoiHe5@IRQPYe))#1Jt->>zd$yNKPy9%3)CkEmwQKe2>ZO7s&0 z#2_(5Ob|PWoy0C;H?fD?ZaQdx?ESHIJT& zCB#yqpBNwpi3wsSv76XK>?QUQ^?a59v6Sd128jt`C$XE@OH?N@6wyx%5);HuVmGmu zs7@ApKQTy55IcyS#4chtv6rY8FsH;4Vkyy23=o6F&;q&gN|5d#-ATHa*hh&vh2BmP z%M#M1r2V7=q=TeGq!Xk&NOzL%BHc~8hjcILKGJF-{V$|{(xs&Rqywabq(h_=q&rA= zlI|kiO}dA4A5kr$=SB2Px|Fn^bbxe_bcl30Z)(q*Z|a1N2Y2l(e68fOL>_h;)K$JL_aY|Ob|PXy+pNymP9`>NK6nriQU9rqFPFOqMsNfCWxKHZelM{ zRf)ZySYEY9tsfU8ogj7+yNSI-b*k9soGO+jr2WJoF+uDkb`yJv>NKW`7$hc$oy2Zp zFHtR{CDBjpBz6;fiE24*h<;*_m>_l%yNSI-wSx9UKQTxQuh^r`8v zOH2^Ei9c5Fsw4CQye=#1az%Nh^0nRKJj28_D9$oYmWnkyS{~$cAQlyIUKMcQjQ>uojqw$O3$Ag=v zhO33R|5&C*;-&J(;Vj}*RSQkKnufQBFIHDU^DR}bzN0GC_h50KTB06SOV#7}_3o$D zsp>g(8h(punR-(#$M0gVR{v0I@Qc{h_#NyT{KEC=Dqo+0U#woMhU+ucVfrlGBR?Bu zSgT5P5a)s-Y9=!Bg9-PJQFvBy5AfN=Lix@hXdz*~!d3jAWw&w;m{@C)G6lb-@! zQ}%mccky#Ts|`;Sn**o(2{>kgXy*~Fb~im-I^{LUYp47LIO7Dd`D>A2%k=kvl~w-& zo|i9@a|#5P7YdFzNpM)%7r+-M3cZUqSJCFgG6`j4dG~1FVO|O|{cK~XFhiX|&yS85 zZ^sT!<)Y`XxKU-J{n|DrG1&sO6 z2Hp?|18q4xJz0F(8i_4#g8arwg4>q~))C{!3Egyx;8#x++&oM0Man175c-#Sg1?}L zp>u`qVJ@z+xnnH2#y?|kV zbhPBRJii5!X$68Mg@R_LV3hJ|$}1>8j`EjJk+|++YF{}`EN$B6F>TjWiO;|kvH3}n z#ML@i=<}J!Z=EKR8Kmd3OeV7gs)>JOzHE6~pSC=&WeJR#AYtbbk7T<|w|w|miRGWm z1Z~Uz*W_)m&&>PNlvgeh?T=V)jm*WP<0UU|&XZVnE*9GQw`n+xIkGM4nli~_x_0Aa zk-Roj@XhJsVbCn0yN;7qnr?6NWm9+Aob;DTTR6NmOuy!~KI1Q@|gC`Zn17{(G!C9t> zz&Ut^!Qj{2j{}|vTchTx>A-og)oMP_;8(_GgFYE(aCY?s(5CB1pi$={oW|N{CFmelI(T{->l{3Vq)rFc!4sZ&fe*aF0BG=B$2q_# zLL2pEgfloj6@s<_XjCIY$S)(+fsP>rp2qrmU$Df4I#AJ3^ZyB zLKt;EZ1EmtAf69`Eq;L-Xw=29)hYorsspxKT>`{&)~X%!4xmwAL1>Nj-T9y|Lujoo z2O9M?gvQ$dfCf)^bb!7JXz;r}+d*FqH0m0J#;?r+4Su)htDvs~;w=a8q48#(%R%1& zANX}_piwu&hgP=$jk*;+G}e<>gT4(uwE8yCs7`p&IG_Ga(BFY4qjtfEQMco%6@&M5 z+yWe{zXh9dK!X+Jw?Q8XH0mhb1-b-iu&Uez`e-0ptiA*E1Rz?hz7zDZK%*w=yFpI^ z8mvIS4|)m^ZCKv}dMXfYSpNX@G@wz__5Gk{0MVZH9?-LZXwUjV&~t!j&-x+ICj!x) z^&_C?0galke**d>puulS{1o&8AX>8i8R$hov}D}_IsimV)_Xyh0nw86{ZE5l4m4_o{w?U0K%-XaXF#t88ns6M0dzIcs2cr8 z(5C|p-tYfB=(Rxf1^puEvw-Le`X$ik0MQrpE1}4&ztC@k-UKvwzx%tO8-WJzZ2ueR7|^I@{XXdP zfOxV`{~dH3h#sN;0eUkKJwksBdMnVVcKr$HZ9w!9{VC`RfaoLobI=z7(MR+F&GHs~J#4c>Ko0_cZc8~KpnnE5s#~7|x(8^~&+&^VTI~fI^%$N&khii1K>tFQfqnvL z@NU!!(7ys2yzg`gXgn(e`e|JS`ZqwMeydLd{X3vh&)~XTtKS2S`h#8x`dOe+f7Gi% zKL<4Gd0h?q1t6X<)u)4g324;I_)QC~UIF5r8~B|H`~o%5s9yZ`gjP5u3i{9bOQ81w zje1Sjf_@!n)SEg4`YoVQ`*j`YzW|MTTSq{@12lN&Wj*M>0uA0{83p|w(5UzICeR-M zjru!&(?H%H*$Da{ItKb9AfCq6=YjqNXw<)SE9g&wMtz3g2+-gjE{HP)t@DH}JM`ttJAEnuIrqYc&~&6^Q8qeH;)g z5VH&P@j$FV%pIVo1C5$t?gTv(h}DR>8}w`-RwL&7picl|+&1@so(IIZZGHgyBp}9Z zb3f<>K%-7Edq6J)8nwtg2-*)cDqtQ0y%>mhp_oTNmjjKe!26oDsstLf#QYTWQXs}{ z^E1$=0Wofy9?;8y7`M${&?|u$x6R|AR|7F_n_Ne z2mLc3MpttT=)FLUu4W?W$AK7K@!ShWS0LUyWR3&gAVya+8}#pi7+uW?pq~X|bTxB9KL^ApisxD}ewvdZc@>E9)0_gj4~X&8ECRg` zi18E8zGD0YV%#%jzzLg@FPr)D)!`>KJ)cRJAL zTMNwbodwMGodeACeF>QFs|6PLLcp=UI`|m}#K_}|fIbq4k;hjLx&&CNCgDotL|j=^ zVGr{htmPZA-o6;?<7=^oy&F58ui}}YPw|U;Q{|~yeX9PR{+;gAA+yC?Y3?vjn3v3- zP0*)v@^eP!9GBCV^H$E^az4uWJSQi&IJYzRuH5@_|DOA4t}m}B?~=Tm^Sbh$%zG*C zFM03h9g{ybzcRlezdQf={7>>H6ig{tP;gp7b-^WtKP&uY;irW~gRU6#<3UdhdV5f5 z(P>2+i>@kqy6EGg$;C5^7ZtB5{!($UxTE;G;#-SvFWz1JtKvz6=M4Vl;9Cao8vNtI zKOg*u!TSae9WrJ}>5!|3+%zO7A&qiDqM)CPFKAY4yT|gnWVPj(~j%IZMdpDAD;{Gxe(WB7vUP}VqAYE@ae$k5`4C! ze&jDl4LeySKIv$LDi=d?th$GK3j0gn2H6c`T$#@tKIv@%YTf2TyHd zB#y$zgQ~{&pi1~2QFr)WQNf&7)J6E*iqBqrUdnl2&CPvKU6QMHsmaxU&YiC>%=;qe z^1S(aXWnZ4Sl%Xl&ex~ppRdo!U#;=}Tzu}Yopas-F*f zp5KKC_v)Yr)rW&>%^g0}CHRp=QRMMKwFuv(_+E$a&ymNDq8Ih&X#bz<*YSB!eYfaM z{llXDpx?%4K0Z;D*Mq7D_7m~_b`jE4yc2%4z8$Oidj`+f4-C%LzZ$$+zcToJ_3q#U z=H0;~e5VX~U+o$)Ur&_kTd;6`ZS9QOnKRUaC6T5`ODG;$xZaakU4{yRg>|*H<2;wRxz!vE*@(UKeQX@CadtoIbM=Tq-QRvIq?LssfpHY65p0%azwl)QWtA%j5LLp zw>8A0OIl)W&9tK10ogw>n{aM6;k(#qBli&9>-O3q-c)XU@#17D${fLzS!n zhRUn~h|^0_JPpjpoLc9fME^o_8Wa<#v_i|~M@*`kqVZ^`A-av(g5V$}I#X4)HPr=Y zsugVw4Wac75s+0CO>K>6jgDK{5{|S)!u^G-+afLP11!>Is}LeuhXxIQYa*fW%BF_) z>gG@r*ov*qEs@sNXiS(uUEC5C=d~fZ@%FM}w;6<>Lj6%ax(L5gC6Q9RT%OKqK{+GnY4 zE;$&aW@i-EY*iCG17cfN8G5HdSy7c)R?c9K)u$JZ)1Yubr4^2oP0 z%pItKz-s0V)IhLszNZC|K7`DugR0;<)0FUD>$W)xI>U1U~ylAK+x zR#d3!3hXsYh?=&R^_Uu(;^@JlCh5SZ(L*-*3RT_Sism$}Y9;oOYt)Lhs(LNGoXId} zl3pcU6n?BM#Yt@7l45I}EcHk@sT?SikYz1!S{G_a8ub$}C!rR6ovGsPTV$27md21I zX61$rC>I-dhEOcm#GIByEsCuL0@0ksyq%@0qxFp;F!oC{Uf!%ligUW8_$>PApDU{z zD3g$B8M8+H1Y%Lc9G>NJYP}E0lnt37jIkJ8dSY>x2qA2at>$dz_-vbFFp}f5`_-+r z@N%5gCB;_KKX+C+P&OdP)+jB<)|1Wg*)GRtE1M4&ODyhO3t{tdw%RPiWo@lm7HV7{ z4yiy(B*Yw4$1#7EhvFgTF~wC!BH{ALh7e{VYRe-Hk$9xCCDa%xU$0g+N18mkc0-zQ zc_`WheQkI>x@esWG&Z)$Bpqw2ZjRKc+E8O-jFjs*WwC|^3|G*%PGd)o)~O1Sw1AMJ zs0uS(_!6!<*49!Nak3<1n?UO(Czo|0NSk1+dMvvn5>L{#aVwL6oH$%akFJ-c7-ZJ5 z^rEC|$FyMLZ4oKmI@5}#IOcX|nq&guunL94wJV#dqm6A1?0pqY;Ye7uL>gn8BUu!I zhWZ$~_r}Jw#-WynS~i^>Yl>j*ZfTR?)@eUc(&GSWNEW;+TarN~W2go=k-^bYB3m16 z3a8{LZc9?WG+MtgWsfOY#-LP?{sP9ZHq_o6i#EkE8A~c$vX{GNu`Gm@nTV4~&(I*% zk(P#7-6mL7VzrO2>UgZV8Q-;NC-wERa8qRskx)}xGe&JJ@KGCb)-*w^IaG(nohHH5x^Po%?cz|~Cak+$ zR9R-pOrtY1Mc&AnU6nS*_p1qJY`p9k@nA17K5}rWzo8ME;AuWaTfFB^pzQ) zDx4|vW{^ycoisA#ZidKI*o0<_#G42*!*JNl6eow>OjY{unyF16yE3(@AtqDDktbAy4 zTnPU=3+!Bk!hxpxY|*cYWs_oGBif9etax^Hzdg5%94(JvQ5F98HY>2~%q$D(rP(!D zcgD&#hMMXlQk0n?u}p}ywzV8Yn_8%44_$_3TMH`gj93HqkTSiyIy#uTx(@rGnW50i zvPfy1T_x?jA-l@8gY3$*ZvAiVR$;Na0T+zfy>KYZu38%j#WzM;vMX1`wj4}l2hr@o zDmJ5e9Yn=-cXl1N=vt+svlMrvu~~MbvnpK;*8Dpg45+di#%^6rWNUUevVk3Gkxc~j zw}>o4v!nx?!=la9R5V88*)^Q!G6SrMwPo`oV@$Pdl4f+hO01@{YZkY)w8qhc&^1r1 z&l1qvN5FPx9hQHY7S*AK&A8M%h&HVWqKjp9;4KUes*lAQ!m%w)Ya)%f=FI9svbPFN zF*9{&7Mr7yE!maqa%-dEYyqiT7HO)_s^sNqb-d*udKs@W)8b_`Q{yHkUI5|xJ<|Y7 zh5A-(Q)OyWEiY47v0;N;b8n86#jq8I%Sp}_nRexE2h%JMZ9TYB)-UC_2;*gardMwY z&(z>@r>-U1EV}_&l-Qy;wKbdOj7ST1!XmBNwX3ji6|HMHn7YihqRa@F#X`8smWd=& z7ubyJP}z*nu3p-l8KkVO1e{}$sE_#xIWU7=~KEc?;SNaM6>A^ zx5e7A+u2?j;@z!`?$17oL8B?$n(5pt)=W*ZNHbMvQMh7lknM*oE;&ABk;|5R7O^+~ zWKr3xYS}i*OamvTYD~@CR?5_S8xpk365h^2SroX$<}8#&<@wB_s^IKY-Gpt2jj?zZ z12@;Kv6tK#m6Xit!3@wD52liN0+;a_KG$F$0?CRsm5181s8`n2Nox%U;+a8DZw|}e zNH$d&){O^Kd7B^E!r21PjLNHjyH}m5=UBWnf;l)#I^6&mIhdYYgGgZ2fijcm=-a8I}jyPH{byv2GDof{p!ZgdbU875b5K%32sc%|E)%4q7# z+qP|Mh@26@2BPd=W$2f-HAcf(H5IM#C~lVEK1@q&eQ14DZro;uPqw3fYjsAnHF_`) z72$g9^x;-hHuq(*mV+x-w}m*kWTYxN!`E!Y`gbE1O3Gaurv#~s9PCEp_O&~Upeiwa ztENaC^HEbc)Pl{{Xd|mtOu%l6v~Q7b*+Av40QZnBC9%oEhM4iMPe!k!xU zgJsv=V!}gbmjkhvNy6-0ti?j_6`bg&+y+nGO4YWuy5`4f$M|u{LcD2|RuGm_KdjoP1 zq2I;`cA@+8Op?6?kPI(36mTgfw*`_iu}j+`VZ7-)^{HJFt54%aFBdUXkO*Oh;>{G? zq~h+jDhoB#$=wy)%aYx0#S0im2b!B3+8rIX>SnQ762ZN#vUL=)`RqCNsr}&du>Dbw7bv4BWY)lMJC)4&1?^ zWromB#yl~imWSeX8!ef3>_t_{92sksb*u`sCJ(l#6}X%&kF|-oDhybIsR4Q87XMNV z3MtX@NPJ@~++QZw;ZCwdj$7dtL}g2?F(tBr`pYCxnuOU*Z9~}{rt!(jwjGXpRjSr@ zIm=Yz$_VL{eV&$hO-!x?m5hC%IL7G>!bu#mT}2`}Nm9ZS1Ktduv`OEgVv70+#9ii2 z7VWZ#tNR~BQ?(n?j-{zqcRr0tlMODqAtBLt+g_9=nI^GYi`$0wCav0lLg%=x;xYS; z-J*C%+9mz=-y);00V2s?(mZ{~jK=*0k+l6ZZXGy#Cw#@e5Vp$(Nu30$!j9TX^+J(EuOKEkTlY9Qk>$#ax0K> zd*n$1ioHw|-2S7R6eqg0eLZT^dC{lM$LT65>4T`2$o=zl+mPLAPA1=5!X|UjPau&d zcMO@N6jzUXwarOCX`6?%OXtN)a{rLp6xZzSE861ak&t9sQag*(CN~r5BgLWaQVesP zOcvHESfC{xrm=CUkhR$Fj9~2q;5s|f!m6Go>o>*jC#NWI-x{nvFkxxt2x~OiqqG_F z7}2EdKT?^_i{3Tjbg@)n7O_}oY*^A~rqmA5vRlc*N^K>{W+cTDNfvPpCdO8ogWbY` z!Fe`~6z@2zl`Rzw@Vu%`5KBLxorfTk`|!$6$r6`6<0u3R!)=t>lJFRe1a|)vOW4+E z80RY)QUZAUrwou}>;VH$pa78RG@udV+ zO)1(dx1~`OM4H@-RHkL@Gsy;dDv+nFYLc4|?oQT0t?YW;?Np|m@L(uT63OMeOq{JL zl^n#t?wxFZpq+-cl1kHi@nfM7ZmWx@0tVXRv8tvzoW+3Cl-Mh7UifcKQ><#i^ zX_5AnaaAkM!SJAPO6El<2@5r)8M}oS<#BiYmVBmiD7Z^!@No7N*9&NpKQzaUgtz)oq`pPkNyiUW2yEPJ)ZE%|;ufez*4|JTo z(DH;*9_hCyXw_d}?^}4sJGpQSOC;RGSlli<)tL81QWn9+fQvqD>clEVqyr{YCzS+v zyZ&j014OhMc$0%3y-n-ntq)nE%PkNu!LH#eVuQ zcs#ER^Hc+v>PV=iZlhc~Y{cLgw+H*=hDoyW$#|7dMi$mdleBv*Om#ZXDv(7LZ?o76 zNU@@|_gEMgmqL!0=+b#Q>UZ14IvXJB&(?;vVL6GM)L`yl6w=Zdkc4;b1erZWNNG*1 zO|GIK#JJCIiQKC+hE6ha27Pk`Wych1UhY1ytVq~{sVaE{Q(+4r z9BWiz)PP)}s_HGFmPQPfb@tgEY!ABI&sA*N(h7D=raPnTYvI{^dM_lB|dQ`kD$1)+(k|sbS#>9$t znI^;F(u#dUIXv%$TO7q6U3;1Ur;3pPy}9bOp49DDuL-3|lEo?Kx#cXXR3@Ur?iLSbqvY)g zZH#q1?u}glPa-++HX-Rc$w=j|k2OT=k`nBM;n}7znrjPdR5lTLFBfOc>v3@{jlz?# z7*lt9ZAqr_IM!O{?gUG!q`7!E^t@t`GZ)k3malEzn6${q{7~*O5{-8oGpX$-*qnCn zn2wV7Hk0=KC9CiNiHp;lg_-&!gC4~vOlo3W?qk~!lnfsD;%1mEYh4c`DJv%{labJA zrK^#&H`4Kd7dgpL>b^81PGg(6X)BvJ%u2tT)U@p{;cTyJx$iDJ<9Jj+reI5M!=8hs zxRA7D9OJL0BC^OQ&6x%}QrOso2xwf_jZK?lp?4;11#!j+0jGd(2 zS?nb59mVzpa`L^!76a98><50&C%8v;&so@*b&T=dRy?=3z8VzBd5Yi zC&H2noe)DP_}cm;IZaM*NaL!+>;OuNt^e^37TW-keM(bdO%cXZj2QbRl9-^kc$23G z?J`cC21+is>sq}ATpkV8H^p!p6e8A>oasUd;=G8hq%>aiT;sL6A;kvqMqA~Lv{_bW zD0#V`myFiCdf_rP)_gFvToz;OY)R_vZUZi8q@HZ_ytyrxudRxWBnrZIbh)14UWzqL zj`FN@xNSvkgmC8q&CXh2+D#s9Veb10xP(u)kn-RbAj*R~xcHVq)jDG{w1wzMZx=x> ze7!VUy0#hpr4>uSIyu|BA&x!8a3s(aYG`kbqRe=iCjGiq@zS7G)iuC@?E|Sz$Z59m zO7^f^c8r&6b}ySUSp?gJSt`>}a%t>J&Mkj!AaC`H+%_i_Qc@^xNtO4wS8{cltaTYJ zr=^yONqH)ajW0R;+X&NGDROTygZRBwOzVK|y^^aE>x{#;x3sVh2Z+jIt=sG}qS-Vp{TlJ&>{5$v&DXio$1)ds4%tq#q<6%QrbBkIdyV8of-@v!Og z=;Q{FCy-l5*shD)Aohe3uAH!Vmm{-QnmoG1mYd=tDHAW1HntSE#m(u-+Djf~ViGGj z_NHW#;S8B~_{p_aJI!$Z7Vs6MBQH^WteOr zX;uSewLI^HKBIogrio7^I}aksEO7)4(q11kz0% ziRHH(zGBFJ$Fb<3zeM6poynp>8Y|l5sVpi}oapR$hrMR%Qd}K(6+})elrkSr^X$@i zWE5{XP;uTrb=O>K<@zsULa`T~)mSfqJ~a}zE2_$d2uN{j8!2OUWZLs>7-8j3r&C~G z)jkf%66>!^Ubs738EzdJ=dPf;HaZ>$R~WB14%xF~jDLWLhXRt=Jbmt4BbXm{9*CIdvZ?(*6*!37xhJaGLKjjIOi6~^UiLB8Y`lJsVU z{X-m}P>nnX!Bn{AgbX;`wO!fbNf4+to?>ksb9Tc`5u9#IyD7;T%}JA`>UhZtC*9P! zIOb)bOuA1C(kIWNM({wccZd#~jLYOMoLmZG7r03>W%mQH-avDci$LZi?Q9(*NarJ| zb9dI(yAf|Klbkex@FWD#tl2Br!_PuKrl~rUQ1l9#5%Ap z)G94QP|_f03>i5IG$Bk1Zs)VA2_rvtx;97TOp3QGl}mrF&ajXn%~KB^(}tDaW;$LG z+rsbD<8?w}sSmeXaWDdFx~lM2>ae=tQAXD$93#nMN8xQb>eATSCL}=Gjn&%TW@)c3 zEw{njowBTWO&x-y*ECkN*^WWll-Ubnukl%bQ8{O+nzyRft*T~Yq-k+GAA4@bx4Tcl zEXw6DPfgNOijxRsjoVHu+@(skbfN9x1-yI(8`SNxU*ry&w_~-^)YOiyo_ecFYPZy0 zowTbByh?#b&M~-B;jJHprc}Ow=kJhuI|$KWY4#q#$~*5$`y_+H_aO)?QKkiETtstpy5&GGi+;a1C` zl(20Iaq~9Sx=pFF^YQk)61*QTgtzbEJso&QUp3yfXQ>jr8NCGh8F;haR8Sl7Rz6QQ z6S5L~F2v7MSRXA26~;UL+VH+U&&mrKL&y-`Umk_;_M}#Ph~H*-##=!Uw-;`f(?s|N zbZq897fxztL+j$sp9cAQrH-hE??${?M^e!U>oxe);Z1@q(5t~U^uGyjYXmnkWmSdu z4TfR46+eR@-y2}phBz_t&`%>gOv5`0Tk+k5pLSV;?>1<0f`lo9Z0HiiA<|~+eW*=| z7o!^KQ7d56h_psvuSS>AW1L|d@E&>bA5rQsvBstgXv|!cZa~iJm6}+A_aU}{Zf5?P zpf872Gtv=5nM$5TriQJB2h=a5Q75q}s=&JwolU8gNKQit6JMRzkrX8*NQZ<;@ z@rsk`VOLn9zJFPLxM!0dJY&s&U43%o)75|7oWD`$Ke#fo8v0?QE`IEy!8Px-4_@(k z;-nSZw&`J|U%p~(KS|*%koh`}qSM|9ne z&Ejpr#-X)`AJF54{%Yi-6%)@Iy6!7iJ#lpjeyv~z{+Fx8D5F)^pSVU38xQKhileqX zcEya9cdS3PMvuGzlJ*<_y14}Jxhzo&R>`+M;sX38Lh3)AgLZ^ie!8M-jpW0I)4B4k zlA2K$e_ZV}6UAEM9G&DAS5##Zu&Jv|o z=o#YU4;S59uSbi=S1;%Da?JW4v~EAsmf+9vMh5G_mC8_wYw}r#Hdv`fDV3<-+<4SA{o`rG zTW4i-MJXI+Er!+fw}6JZnB4T;bJI2VVKiYlmci$Vp3D2|OE7{^@6ud|H0!f_66`5V zU0QuJhUUm`uT77kMEwZ84e^hclpS@=K>wQ%!*q=Fw4sL=ZXRgk(!lucT64=9>tBxu zpikAK-^p)X#Nne6t=P7?m(I{L?y6h0{gKGhjke88-8~W+TI<3xzfz}OiF-Br4C`OB zNX~Cr|BdiR5gB=eOZVk! z&ZYc1l<=_ik3`p8MW__H22*L{cI7 zTfVaCV(WcUzf{Q#d_H=)^mT8(K3~mB@{^%Q-dIk*x^`itf310;lI7%b*SK2GxMIae zD?W-`eXb4rQRKs&lhAstzY--{o1QnWcs$5BX7|ru=ID^61cpvMKh;a0sn$a!uO%3d zY(48DX~Ew3FZ6@!|Lf{sUi3(_E=r9Ay3meWwe|Y=^jfoHpOvK3vObX%D~#1L^7&Ag zlE0r_WNYNa>mS@?^CnVDc_XXD(7zV{9jEIgb~_$@qtw=<%x~7G*SaKa(z?XLt4mL2 zQ*Z0j$_frhfB5ekmt9tPK>XM^QX`vq`E+%U%fbI@91m=mbwkgl2`gP3izFQ<2fb3j zD4k4iYM!w@BwHTz;M|EN>X7x{UL$=_5A8g5=ocmGt!wfuKX@6mqM3QtF<0r_DfO>! z(WBoBP7EH}P`$F?z`UBs>Y=rb&6}DFF)E+jI5D`Y{-#L5fxMQz=MAleY_!Pso+mPE zo7eKN*yhGJOg>BJ&beOj3*uYEac6zFQ|JCV^4Y~Y|6ga^d=9>IPiVWVPUoK7cU@#oyYQjY=hYnAAk^vArJGiLJ7=9P{O_yZy-50&E-dW$;c8Mt zPkABn-zCbMjqvjz%&}KX8u~k4E>RMP)Ri8(;Dw%7OO&*3#yjkk7w$s%v^GBUlkrk! z$(HVmVI|h0RKBb+>^f=iiZjodv{oP0juoW*FUNnF>#L>sRisAzW7`>_Y7uH0xG;Kv zx5h}Wo{B_b*A}w&`ru3SIc%U$S+iHc|M9M;%D0R{<@hb93-Qi&T%Gu^BKBeJ>%)rF zw*~9YgvtuA-S7rDXM_a?ep;QtJ2>m?KIsM>KL>9Kp9;@upU}b{*ORD>ZaH zM!eL&8r%O0;CQZoWwjnxskSt~w&1`s)vq?My7-E@O4idhjI=}vbIbaib;&RzrEMR6U`qY+Ynv`k&drBesk))#^1pWs zTQ_0FloeAh`P)?(-<-X)2APdd!e~1~>Eo@vw5xBPd;E$i^%t$5u_iTw$}GQQvuGc? ze8EP2oE=4X9$pcKa3SUg+TnmqVm~%31GjDLAkIEkf$IQK777+O&ve@d0To z7h+s2KCt7)t}9aWvYol?oUF&sS+T55><>TSSv-zXup^qYQF+b9`5Rm3`EPjq)?tk^ zxBWonlxSVxLx;!(F>IKyLrBgiR^^QxexV*d&wfp^Uo#3v4o`HL;WLI$EdZ6!!xOtb z;y#afz#|@ZL`Q)~6nn%W9&xBglz7A>kC-FrIARFc0y9F5(7wD83LiZvUwfi_B;pl4 zLSDn~sQeNm#>#0Va|I(*UOqhlkl`U_gf3LRA;S}|4>@97@yOxDIpThV8R3I_gO6{B zM3E9ZXU2W|2IVJ1$gfw7@a5#|;j42?j2>cgl^HT*NZ|~WY2y81iGSn{(!)E(<(K@A z_O3TXuIh^4_vX)gJNxGCyt}h$Y-iUe#CD2nm?V>AV&gwL+E}K#siR%X3W?do*zRgJ z!4?tAd#Tb06)HrCMIllJ3;7Tv;C`^+hX@K0Qiy0_TZBsSgU}T6A(UAA`<;8=o7u#o zAN*3lc8JioUo`Im%s_@UNM}|_fU%y(S1ztS7|vM z%%{$jVq2r&Pnm)2KH7nM&2gtxsMFF&1%e6#$R?>DEApZS49j8+bzpY=2HLwKPEBAe z>`w_?7EDv1FPM{(uM2Do3G44bWvFJ+#rBx)v6UJN{@;_NUL69aw57P z1U^b-lP$%N(8pvU8Fxk}qU2AGsR9I#AW4Fv@c#St$t)Rw78SLKn8QQs(r)Sv<#g%c0R{w+=QE z5{9AZ<2If0FQ_?%DOH=oyDg@aPhBv8WX+mVv@ok}X0J@bIl=-8DCQliuTPE3V5=Jwa2BR60Y2!2L0;3vdZ6Tl!H`ac==5k_pVq#JAdy_m1 zmz#3R6``v@T~al!I$lkuFYBFpQS2>k>hx8e)}@EE9VMRxG*Vb%>f_I3lVzPO=N6FQ zeK=J3D*LdqHH{mm%}mC+TNm$NEtsooZea={rT2@N6tz-uO>}|(Feo)FOW(3YN-ZSI zrkpI#dTS94f$9qELEZ(uU3XU7jf|zEJ338tQwmL_I(f#yve44aK(_?D-KNue8jb?d z?ir}Fh#A6MP%9mYCkgBi(V2Km4)L-KU{YG{RpMsZGz`s#OY#;*fjZs79!#V#v7geE z5#(_hey{+togN1_Om4=Gv+Az(N@m1Df>9U=GErzlzUv1JyCHqOBnCvNQI_v&?PJkX<*&zyhOdmh{v_(Ii1!pEtnUCwaNysu9N3Q2%1S#C#QT|QF6)m z;m4eTs?l**cf&ABE@t-NyKuXKW+4zwx$APAEL^UyZq~5re-4Qc&xat`2q+{HBC1&f z-}h7zX4Gh8onS>kR~VkmK$j`>-Zk#So{f))7a8|qmjj_Fn*_OFL^&`$G{O7ZF=>rP z=y_HFI$aknVg15HB1}%HMhS`ESnHK_DqD>gq2hHA35J`l(~FT9Tk_&SCur=3W2&Ij z$4rbzoS)3SFJ0$O8L4a&lOU`^ATbXvp5Z9ia@?#PY8zf{V#O1tyUW|!fUz#rS9F0; zpwkv*9+64V^a}|8O4Zkc9?PAIL>CL9bO}nK!=d>6?bYdemf2; zOFJABgiv7*(GDk8myIUd*VYOQzHgD!(43ihlopsgcf3NPS6stL<^ZcTmYJ7ISfP@a z#<=!m!4Kteuf*Ues5Ux>iN9pyQCn8(I9e)u1*~K~7Bs)+b79gurRoj6SSTZp4ihK~ z-fw)JYb&-A@SD^X!qY=bak88(#lsPI*$?b~K|-;#dV8o<3g<>QT)=ZmiQhtbW|%U_ zDX~CfaX33%S(It`yYYRSk3y*BQEoMlAbkb zMf%axh*~E`?IQX#a+)L+-dYV zUEXd9{9zJKQN@z379{?9wH=f!);90HesFEJ|;SwyT+ z#WI0M;1fKee|bZ(^8W9(7k~Tw^EVa0_WI6k$lZ5y@!d1M8&UjY2gR#yDwHQnZW*tj z({T|iN>VIClWsXM=8QWQBF+$;H7K}7p&ZQ+bIvWhOg})4*+yrX6_DJ*s*A=!a2q1- zp}Rz0KyUl;X|u;CS;LL8O`A4tRp=pRcMH1YDa)Z{)9p5ub}(0Ihjg06rwC4D0xz(H zf#~EIdOg6*ae^ZRzb1H@;5P(M61+h0s#~s>Wnfhb{RY9C1g8n!CisxxBZ7|!J|Q?y za0wt)1VzKb2gfwF0wv3tWX&wYdN`g@Qd;Ld$56BxGsQfbkXfCem$jJ7GP|;jt-@@Q zut{0wnd5lV?F1c5nw$s>f8$21+D~wd;J8eKxjPskne0hfGfi+JulC)ny6fi1rk`hh zKd%qi@+84>Ufm9BhI{S^;h@f6b6K5TqsanOqSFruJ|?(8a4By(8|2x(&+$s=fHDpT zC3+H`48U8tLuxSR5)@E$N?dp+1;R719mMkuEX1-iOtD?Z;=Y2Nt89F+A6c6M}62AFyZRuz7BU4 zU~FP8+M93P%l2rxm!Y~js!Pdl5y=73`vuebf($Uh+GKA|kZb0+PM))z7y}GXw&i2w>XAJ+H~f)sKq0Sri3 zhe6{$1W%OAOd&57wJ?gYPs6q~otAdpkW7ggi*c`H_N|yus+-Tdgijm})uMn}X*A7h z=r%bu%2XKQuG8qdIl!gzKnQdv$1pt3e|8rwkJj)c#KqW;=@``m$)XwBo!lw;cpQb{ zUNXswNlu&Oj7iR#EF`C-kete9Hd)TiBw5aoX){OS2}5QB6w8{6FiuVyUMF*k`hcQ7#%4pY z8m5NELx{1s4EH@_f-C$G%&=Yr72Hsf5PQH<4ey>+&@+#2VAjnzhC0EcVBmWOF9}>a zmu7At&0LP$H9+plkqddQH>iehV+8j=sFe(ftn}D4JxYQ&0vr|*;v`|P3-AC81@nhz zhbF@@2FQ*m;moC2afdq81#z?rY*4$X1To@ZRhhjK)>zc9q5sYpQ8ES$1Wpa|2|98s6>7M-KTT zSq{d;7CeqY0U?7^gaqb+q>BP>zNjT6#07$bkG2uKcqd@Cb~=kf?Hpy=w6T&jgk^F9 z33{6~6@5Xb{bG|3u>l+cm!ME+s<70AT_k|eEXn~s?nu*2XL?ldX9S+LSnl4Mc#Mt~ zGg5I*;0LU>D?*lAk(!IXVTZtPGhH^mMJg`{R}rp>`0vz$;SC-ZWBj5R|ZW+fX}!m=)~my^%sxm|f~AZdV=^95xSDbCeyK)`nWxs_bg$?Ul z{HN3=N3EB_bsO8Q&ZgGZc4zCxEuDSy`?hWAY;A4Xy=ULPt$R1MH}BrCxwCuIp3U17 zURy0PD^;=Lqx?<0b^WJ&|8w81;spF7KexxU@oR_f$Q=*kd$tepl~W+=)xVewTP*M# zcT_m|5dfTt+GB95PfX)g%#IozI+~p!@>AJLt##D+=Nyfe5tQT%HP$M;r&^9&%QxJm zn4h@D|1D!i^KW8^WGKm;@O#+@=Z%i->25?XN7YcUuUX@HYkcQGMUD!F&xISd*{N*& zH?`;!g76N_nRV`Sek^=xBPgO^uB}h}?KS26V21c3M7;)W9nEG1v_OsH^DTUipzg>} z9Z-08_3G<~cX#i;raf`)*!-67AG!CH`r{ux_ZRZ`?hSMI9D*Uv_4h6;Ebg7#ec-^M zxnc9-OSka*Lvx1??pcMGpPQR|6OIm58zFGckj4$0gKFl)^V{4tDX4Q+xqbEgr(0?cFQC z#UgD!yB16?SIcT{|1%|+F2=f6sbuw##V2{1;tD+JcHlGnrlaO*yY`wdw2`}4-Hj8t z_o~})>Y8Ud?oxN6dWbrhZI*^Iyta+Llzd&^br{hAyQwHW=8|QeT z1N5)amS?benuL8kh7p-F(B#h=o=xUyaC`$FA9I>{z0@28R;ixw$olL8hc8WwEC=M2 zh@2|_lDt}2ahzQKd!^Sy7){1w15RMK@(=r71A1!ANcb>h#}7f}Blu$ZdG>n&|CGY! z0la$X^FiUlwg;dOYV|>!$3*B8AMHz@cUe3&&OWp8v&0iQUq*L>zRf($h<@jxah|Uk zjN;4iQtB{Ho;oA?G}t_ z4>0>cu^04hwHcTVfE}cpP`4S>ygD*}cuO$;@nq5i& 0 ? p.CruiseSpeed : null, + ReleaseAltitude = p.ReleaseAltitude > 0 ? p.ReleaseAltitude : null, }); scenarioMgr.SaveDeployment(taskId, equips); db.Close(); diff --git a/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs b/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs index cfd7baf..b22fcce 100644 --- a/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs +++ b/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs @@ -82,6 +82,8 @@ namespace CounterDrone.Unity PositionX = p.Position.X, PositionY = p.Position.Y, PositionZ = p.Position.Z, AerosolType = (int)rec.Best.RecommendedAerosolType, MunitionCount = 1, Cooldown = p.Cooldown, MuzzleVelocity = p.MuzzleVelocity, + CruiseSpeed = p.CruiseSpeed > 0 ? p.CruiseSpeed : null, + ReleaseAltitude = p.ReleaseAltitude > 0 ? p.ReleaseAltitude : null, }); scenario.SaveDeployment(taskId, equips); diff --git a/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs b/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs index 67d4491..8a43e3a 100644 --- a/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs +++ b/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs @@ -19,6 +19,7 @@ namespace CounterDrone.Unity [SerializeField] private GameObject _dronePrefab; [SerializeField] private GameObject _cloudPrefab; + [SerializeField] private GameObject _platformPrefab; private SimulationEngine _engine; private FrameDataStore _frameStore; @@ -29,6 +30,7 @@ namespace CounterDrone.Unity private readonly Dictionary _entityVisuals = new(); private readonly Dictionary _clouds = new(); private readonly HashSet _knownMunitions = new(); + private readonly HashSet _knownPlatforms = new(); public SimulationEngine Engine => _engine; @@ -86,7 +88,16 @@ namespace CounterDrone.Unity foreach (var snap in result.EntitySnapshots) { - if (!_entityVisuals.TryGetValue(snap.EntityId, out var go) || go == null) continue; + if (!_entityVisuals.TryGetValue(snap.EntityId, out var go) || go == null) + { + // 新出现的实体(如空基平台在首次帧快照中) + if (snap.EntityType == EntityType.Platform) + { + SpawnPlatformVisual(snap); + if (!_entityVisuals.TryGetValue(snap.EntityId, out go) || go == null) continue; + } + else continue; + } go.transform.position = new UVector3(snap.PosX, snap.PosY, snap.PosZ); if (snap.EntityType == EntityType.Cloud) @@ -158,6 +169,19 @@ namespace CounterDrone.Unity _entityVisuals[drone.Id] = go; } + private void SpawnPlatformVisual(EntitySnapshot snap) + { + if (_knownPlatforms.Contains(snap.EntityId)) return; + _knownPlatforms.Add(snap.EntityId); + var prefab = _platformPrefab != null ? _platformPrefab : GameObject.CreatePrimitive(PrimitiveType.Capsule); + var go = Instantiate(prefab, new UVector3(snap.PosX, snap.PosY, snap.PosZ), Quaternion.identity); + go.name = snap.EntityId; + go.transform.localScale = new UVector3(30, 80, 30); + var mat = go.GetComponent().material; + mat.color = new Color(0.2f, 0.5f, 1f, 0.8f); // 蓝色半透明 = 空基平台 + _entityVisuals[snap.EntityId] = go; + } + private float ParseCloudOpacity(string stateData) { try diff --git a/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs b/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs index c8129a3..6ce1487 100644 --- a/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs +++ b/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs @@ -61,7 +61,7 @@ namespace CounterDrone.Core.Tests } engine.Initialize(_taskId); - engine.TimeScale = 4f; // 4倍速加速 + engine.TimeScale = 8f; // 8倍速加速 for (int i = 0; i < maxTicks; i++) { var r = engine.Tick(tickDt); @@ -337,5 +337,78 @@ namespace CounterDrone.Core.Tests Assert.True(cloudsGenerated > 0, msg); VerifyAndExportReport(eng, drone); } + // ═══════════════════════════════════════════════ + // 场景 5:空基平台 — 基于推荐方案,平台改为空基 + // ═══════════════════════════════════════════════ + + [Fact] + public void Scenario_AirBased_PlatformFliesAndDrops() + { + var task = _scenario.CreateTask("空基平台拦截测试", ""); + _taskId = task.Id; + + _scenario.SaveScene(_taskId, new CombatScene { WindSpeed = 0 }); + _scenario.SaveTarget(_taskId, new TargetConfig + { + GroupId = "default", + TargetType = (int)TargetType.Piston, + PowerType = (int)PowerType.Piston, + Quantity = 1, + TypicalSpeed = 300, + TypicalAltitude = 500, + }); + _scenario.SaveRoute(_taskId, "default", new RoutePlan { FormationMode = (int)FormationMode.Single }, + new List + { + new Waypoint { PosX = 0, PosY = 500, PosZ = 0, Speed = 300 }, + new Waypoint { PosX = 15000, PosY = 500, PosZ = 0, Speed = 300 }, + }); + + // 先用推荐算法生成方案 + var rec = GetAndApplyRecommendation(); + Assert.NotNull(rec.Best.FireSchedule); + Assert.True(rec.Best.FireSchedule.Count > 0); + + // 将推荐的地基平台改为空基:巡逻点在防御圈边缘空中 + var saved = _scenario.GetTaskDetail(_taskId)!; + var midX = (float)(saved.Cloud.PositionX); + var airEquips = new List(); + foreach (var e in saved.Equipment.Where(eq => eq.EquipmentRole == (int)EquipmentRole.LaunchPlatform)) + { + e.PlatformType = (int)Models.PlatformType.AirBased; + // 巡逻点:防御圈边缘,侧方 2000m,高度 2500m 巡航 + e.PositionX = midX - 2000; + e.PositionY = 2500; + e.PositionZ = -2000; + e.CruiseSpeed = 55; // ~200 km/h + e.ReleaseAltitude = 1500; // 投放高度 + e.MuzzleVelocity = null; // 空基不需要炮口初速 + airEquips.Add(e); + } + _scenario.SaveDeployment(_taskId, airEquips); + + // 更新 FireSchedule:引擎初始化时会自动 AdjustFireTimesForAirBased + _lastFireSchedule = rec.Best.FireSchedule; + + var eng = RunSimulation(8000); + + var launched = eng.Events.Count(e => e.Type == SimEventType.MunitionLaunched); + var cloudsGenerated = eng.Events.Count(e => e.Type == SimEventType.CloudGenerated); + var drone = eng.Drones[0]; + + var msg = $"AirBased: platforms={airEquips.Count}, launched={launched}, clouds={cloudsGenerated}, " + + $"droneStatus={drone.Status}, hp={drone.Hp:F3}, simTime={eng.SimulationTime:F1}s"; + + Assert.True(launched > 0, msg); + Assert.True(cloudsGenerated > 0, msg); + + // 验证平台确实飞了(位置偏离了巡逻点) + var platSnapshots = eng.Events + .Where(e => e.Type == SimEventType.MunitionLaunched && e.Description.Contains("空基投放")) + .ToList(); + Assert.True(platSnapshots.Count > 0, "应有空基投放事件"); + + VerifyAndExportReport(eng, drone); + } } }