Загрузка данных
/*
/\ /\ /\
TTTTT H H EEEE K K | \/ \/ | NN N GGG
T H H E K K *----------* N N N G
T HHHHH EEE KK I I I I N N N G GG
T H H E K K I I I I N NN G G
T H H EEEE K K I I I I N N GGG
This plugin (the software) is © Copyright the_kiiiing.
You may not copy, modify, merge, publish, distribute, sublicense, or sell copies of this software without explicit consent from the_kiiiing.
DISCLAIMER:
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
using \u0048\u0061\u0072\u006D\u006F\u006E\u0079Lib;
using JetBrains.Annotations;
using Network;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Plugins.HalloweenExtensions;
using PluginComponents.Halloween;
using PluginComponents.Halloween.Core;
using PluginComponents.Halloween.Extensions.BaseNetworkable;
using PluginComponents.Halloween.Extensions.Enumerable;
using PluginComponents.Halloween.External.NpcSpawn;
using PluginComponents.Halloween.Loot;
using PluginComponents.Halloween.LoottableApi;
using PluginComponents.Halloween.MapMarker;
using PluginComponents.Halloween.SpawnPoint;
using PluginComponents.Halloween.Tools.Entity;
using ProtoBuf;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Linq;
using System.Xml.Serialization;
using UnityEngine;
using VLB;
using Net = Network.Net;
using Pool = Facepunch.Pool;
using Random = UnityEngine.Random;
using Time = UnityEngine.Time;
/*
* CHANGELOG
*
* V 1.0.0
* - added check for empty player list in EventManager.MaybeRunSoundEffect and MaybeRunLightningEffect
* - removed unnecessary usings
*
* V 1.0.1
* - fixed record permission not registered
* - added map markers for graveyards
*
* V 1.0.2
* - fixed recording not working
*
* V 1.0.3
* - destroy decorations on plugin unload
* - replace custom zombies with default scarecrows until ai is fixed
*
* V 1.0.4
* - junk pile decorations no longer cause lag or crash the server when loading/unloading the plugin
* - fix null reference exception when graveyard despawns
* - added skin support for grave yard loot
*
* V 1.0.5
* - add support for carbon
* - fix error with OverrideCorpseName
* - networking update
*
* V 1.0.6
* - patch networking for May 04 update
*
* V 1.0.7
* - fix config value enableJumpscares ignored
*
* V 1.1.0
* - ignore NPCs created with NpcSpawn
* - add limit for junk pile decorations
* - add health config for zombies
* - remove junk pile decorations when unloading
*
* V 1.1.1
* - actually ignore NPCs created with NpcSpawn
* - improve graveyard performance
* - graveyard spawn time can now be configured
*
* V 1.2.0
* - major rewrite
* - switch to BasePlugin
* - remove MarkerApi requirement
* - fix graveyard spawn issues
* - change zombies to NpcSpawn npcs
* - loottable integration
*
* V 1.2.1
* - fix NRE in MaybeRunLightningEffect
*
* V 1.2.2
* - removed some legacy code
* - add BuildingManager debugging
*
* V 1.2.3
* - add loot config for graveyard zombies
* - fix BuildingManager server exception
* - fix junk pile decorations not properly destroyed on unload
* - fix infinite loop in LootManager.FillWithLoot that could lead to sever crash
* - misc refactoring
*
* V 1.2.4
* - fix bug in LootManager
*
* V 1.2.5
* - fix graveyard spawn points
* - add config option for grave yard fire
*
* V 1.3.0
* - rework sound system
* - rework jumpscare system
* - add random jumpscares
* - add config option for chat commands
* - fix graveyards spawning too close to each other
* - fix graveyards spawning near safe zones
*
* V 1.3.1
* - fix small bug in jumpscare command
* - fix bug with fog not appearing
*
* V 1.3.2
* - update for Loot Api
*
* V 1.3.3
* - fix for rust update
*
*/
namespace Oxide.Plugins
{
[Info(nameof(Halloween), "The_Kiiiing", "1.3.3")]
[Description("Happy Halloween")]
public class Halloween : BasePlugin<Halloween, Halloween.Configuration>
{
#region Fields
private const ulong DECORATION_SKIN = 385UL;
private const string PRESET_BOX = "gy_box";
private const string PRESET_ZOMBIE = "gy_zombie";
[Perm]
private const string PERM_EDIT = "halloween.edit";
[Perm]
private const string PERM_RECORD = "halloween.record";
[Perm]
private const string PERM_SCARE = "halloween.scare";
private const float SPAWN_AREA_RADIUS = 10f;
private const int SPAWN_POINT_RESOLUTION = 10;
private int junkPileDecorationCount;
private ulong configEditor;
private GraveyardConfig graveYardConfigDraft;
private JunkPileConfig junkPileConfigDraft;
private static List<byte[]> record;
private static BasePlayer recordPlayer;
private Dictionary<char, JunkPileConfig> junkPileConfigs;
private EventManager _eventManager;
[PluginReference, UsedImplicitly]
private readonly Plugin NpcSpawn;
private readonly Dictionary<ulong, NpcConfig> npcProfiles = new();
private readonly Dictionary<NetworkableId, List<BaseEntity>> junkPileDecorations = new();
private static readonly List<BaseJumpscarePlayer> _jumpscareNpcs = new();
#endregion
#region Hooks
#region General
protected override void Init()
{
base.Init();
SoundManager.LoadBuiltinSounds();
LoadJunkPileConfigs();
AddCovalenceCommand(Config.CmdGyName, nameof(CmdGy));
AddCovalenceCommand(Config.CmdJpName, nameof(CmdJp));
AddCovalenceCommand(Config.CmdRecName, nameof(CmdRec));
AddCovalenceCommand(Config.CmdScareName, nameof(CmdScare));
\u0048\u0061\u0072\u006D\u006F\u006E\u0079Instance.Patch(AccessTools.Method(typeof(JunkPile), "SinkAndDestroy"), AccessTools.Method(typeof(JunkPile_SinkAndDestroy), nameof(JunkPile_SinkAndDestroy.Prefix)));
}
protected override void OnServerInitializedDelayed()
{
base.OnServerInitializedDelayed();
AddAllDecorations();
_eventManager = new GameObject().AddComponent<EventManager>();
_eventManager.Init();
UpdateNpcClothing();
LoottableApi.ClearPresets(Instance);
LoottableApi.CreatePreset(Instance, PRESET_BOX, "Graveyard Crate", "crate_normal");
LoottableApi.CreatePreset(Instance, PRESET_ZOMBIE, "Graveyard Zombie", "npc_scarecrow");
}
protected override void Unload()
{
EntityTools.KillSafe(_jumpscareNpcs);
RemoveAllDecorations();
if (_eventManager)
{
UnityEngine.Object.Destroy(_eventManager.gameObject);
}
SoundManager.Unload();
base.Unload();
}
//[ConsoleCommand("deco")]
//void CmdDecoration(ConsoleSystem.Arg arg)
//{
// arg.ReplyWith($"Current decoration count: {junkPileDecorationCount}");
//}
#endregion
#region Junkpile / Graveyard editing
[Hook] object OnHammerHit(BasePlayer player, HitInfo info)
{
if (!permission.UserHasPermission(player.UserIDString, PERM_EDIT) || configEditor != player.userID || info.HitEntity == null)
{
return null;
}
if (junkPileConfigDraft != null)
{
junkPileConfigDraft.AddEntity(info.HitEntity);
player.ChatMessage($"Added {info.HitEntity.ShortPrefabName} to the current junkpile");
}
else if (graveYardConfigDraft != null)
{
graveYardConfigDraft.AddObject(info.HitEntity);
if (info.HitEntity.PrefabName == "assets/prefabs/misc/xmas/snowman/snowman.deployed.prefab")
{
player.ChatMessage($"Added a zombie spawn point to the current graveyard");
}
else
{
player.ChatMessage($"Added {info.HitEntity.ShortPrefabName} to the current graveyard");
}
}
else
{
player.ChatMessage("You have to create a new graveyard config first or start editing a junk pile");
}
return false;
}
#endregion
#region Junk pile decoration
[Hook] void OnEntitySpawned(JunkPile junkPile)
{
if (Config.enableJunkPileDecoration && junkPile.IsValid() && junkPileDecorationCount < Config.maxJunkPileDecorationsTotal && !junkPile.ShortPrefabName.Contains("water"))
{
// Make sure there are no decorations left
RemoveDecorations(junkPile);
AddDecorations(junkPile);
}
}
[Hook] void OnEntityKill(JunkPile junkPile)
{
RemoveDecorations(junkPile);
}
#if DEBUG
[ConsoleCommand("sink"), UsedImplicitly]
void CmdSink(ConsoleSystem.Arg arg)
{
var player = arg.Player();
if (Physics.Raycast(player.eyes.HeadRay(), out var hit, 3f))
{
if (hit.GetEntity() is JunkPile junkPile)
{
junkPile.SinkAndDestroy();
arg.ReplyWith("Sink da junk pile");
}
}
}
#endif
#endregion
#region NPC Clothing
[Hook] void OnEntitySpawned(NPCPlayer npc)
{
NextFrame(() => UpdateNpcClothing(npc));
}
#endregion
#region Recording
[Hook] object OnPlayerVoice(BasePlayer player, byte[] data)
{
if (recordPlayer != null && player == recordPlayer)
{
record.Add(data);
}
return null;
}
#endregion
#region Jumpscare
[Hook] void OnLootEntity(BasePlayer player, LootContainer container)
{
if (Config.lootJumpscares.Enabled && (Random.Range(0f, 100f) < Config.lootJumpscares.ChancePercent || DEBUG))
{
var pd = PlayerData.Of(player);
if (DateTime.UtcNow.Subtract(pd.lastCrateJumpscare).TotalMinutes > Config.lootJumpscares.DelayMinutes)
{
pd.lastCrateJumpscare = DateTime.UtcNow;
var sound = SoundManager.GetSound(Config.lootJumpscares.Sounds.GetRandomOrDefault());
if (sound == null)
{
LogError($"Failed to get sound for loot jumpscare - no sounds configured");
return;
}
BaseJumpscarePlayer.Create(player, Config.lootJumpscares.NpcName, sound, false, container.transform.position, 1f);
}
}
}
#endregion
#region Graveyard
[Hook] void OnCorpsePopulate(ScientistNPC npc, NPCPlayerCorpse corpse)
{
if (npc == null || corpse == null)
{
return;
}
if (npcProfiles.Remove(npc.userID, out var profile) && profile.lootTable.enabled)
{
Instance.NextFrame(() =>
{
if (!corpse.IsValid())
{
LogError($"Failed to populate NPC corpse ({npc.displayName}) - invalid corpse");
return;
}
LootManager.FillWithLoot(corpse.containers[0], profile.lootTable);
// Drop bag
if (profile.removeCorpse && !corpse.IsDestroyed)
{
corpse.Kill();
}
});
}
}
private void OnGraveyardDestroyed(Graveyard graveyard)
{
_eventManager?.OnGraveyardDestroyed(graveyard);
}
#endregion
#endregion
#region Commands
// Jumpscare
void CmdScare(IPlayer iPlayer, string command, string[] args)
{
if (!permission.UserHasPermission(iPlayer.Id, PERM_SCARE))
{
iPlayer.Reply("No permission");
return;
}
BasePlayer target = null;
if (args.Length == 1)
{
target = BasePlayer.Find(args[0]);
}
else
{
target = iPlayer.Object as BasePlayer;
}
if (target == null)
{
iPlayer.Reply("Target player not found");
return;
}
RunJumpscare(target);
iPlayer.Reply($"Jumpscare npc spawned for player {target.displayName}");
}
// Grave yard
private void CmdGy(IPlayer iPlayer, string command, string[] args)
{
if (iPlayer.Object is not BasePlayer player)
{
return;
}
if (!permission.UserHasPermission(player.UserIDString, PERM_EDIT))
{
player.ChatMessage("You don't have permission to do that");
return;
}
if (args.Length == 1 && args[0] == "new")
{
configEditor = player.userID;
graveYardConfigDraft = new GraveyardConfig(player.transform.position);
player.ChatMessage($"Created graveyard at {player.transform.position}. Hit objects with a hammer to add them to your graveyard");
}
else if (args.Length == 2 && args[0] == "save")
{
if (graveYardConfigDraft == null)
{
player.ChatMessage("Nothing to save, create a graveyard first");
return;
}
ConfigManager.SaveGraveyardConfig(graveYardConfigDraft, args[1]);
player.ChatMessage($"Saved config as {args[1]}.json");
graveYardConfigDraft = null;
configEditor = 0UL;
}
else
{
player.ChatMessage("Invalid syntax! Usage:\n" +
$"{Config.CmdGyName} new - create a new graveyard\n" +
$"{Config.CmdGyName} save <name> - save the current graveyard");
}
}
// Junk pile
private void CmdJp(IPlayer iPlayer, string command, string[] args)
{
if (iPlayer.Object is not BasePlayer player)
{
return;
}
var error = $"Invalid syntax. Usage:\n{Config.CmdJpName} <type> to edit the config of a certain type\n{Config.CmdJpName} save to save the current config";
if (!permission.UserHasPermission(player.UserIDString, PERM_EDIT))
{
player.ChatMessage("You don't have permission to do that");
}
else if (args.Length != 1)
{
player.ChatMessage(error);
}
else if (args[0] == "save")
{
if (junkPileConfigDraft == null)
{
player.ChatMessage("Nothing to save, edit a junkpile first");
return;
}
string name = $"pile_{junkPileConfigDraft.type}";
ConfigManager.SaveJunkPileConfig(junkPileConfigDraft, name);
junkPileConfigDraft.junkPile?.Kill();
player.ChatMessage($"Saved junk pile config as {name}.json");
junkPileConfigDraft = null;
configEditor = 0UL;
}
else if ("abcdefghij".Contains(args[0]) && args[0].Length == 1)
{
configEditor = player.userID;
char type = args[0].First();
var jp = EntityTools.CreateEntity<JunkPile>($"assets/prefabs/misc/junkpile/junkpile_{type}.prefab", player.transform.position);
jp.Spawn();
junkPileConfigDraft = new JunkPileConfig(jp);
}
else
{
player.ChatMessage(error);
}
}
// Recording
private void CmdRec(IPlayer iPlayer, string command, string[] args)
{
if (iPlayer.Object is not BasePlayer player)
{
return;
}
if (!permission.UserHasPermission(player.UserIDString, PERM_RECORD))
{
player.ChatMessage("You don't have permission to do that");
return;
}
if (args.Length == 0)
{
// Start recording
if (recordPlayer == null)
{
player.ChatMessage("Start recording");
record = new List<byte[]>();
recordPlayer = player;
}
// Stop recording
else
{
player.ChatMessage($"Stop recording, use '{Config.CmdRecName} test' to preview your recording. Use '{Config.CmdRecName} save <name>' to it.");
recordPlayer = null;
}
}
else if (args.Length == 1 && args[0] == "test")
{
if (record.IsNullOrEmpty())
{
player.ChatMessage("Failed to play sound: recoding is empty");
return;
}
var sound = ProtoSound.Create(record);
BaseJumpscarePlayer.Create(player, "Jumpscare Test", sound, false, player.transform.position + Vector3.forward);
}
else if (args.Length == 2 && args[0] == "save")
{
if (record.IsNullOrEmpty())
{
player.ChatMessage("Nothing to save, start a recording first");
return;
}
SoundManager.SaveSound(args[1], record);
player.ChatMessage($"Saved recording with name '{args[1]}'");
}
else if (DEBUG && args.Length == 2 && args[0] == "savexml")
{
if (record.IsNullOrEmpty())
{
player.ChatMessage("Nothing to save, start a recording first");
return;
}
SoundManager.SaveSoundLegacy(args[1], record);
player.ChatMessage($"Saved recording with name '{args[1]}'");
}
else
{
player.ChatMessage($"Invalid syntax! Usage:\n{Config.CmdRecName} - Start/stop recording\n{Config.CmdRecName} test - Play recording\n{Config.CmdRecName} save <name> - Save recording");
}
}
#endregion
#region NPC Clothing
private void UpdateNpcClothing()
{
foreach (var npc in BaseNetworkable.serverEntities.OfType<NPCPlayer>())
{
UpdateNpcClothing(npc);
}
}
private void UpdateNpcClothing(NPCPlayer npc)
{
if (npc == null || npc.IsDestroyed || npc.IsDead() || npc.inventory?.containerWear == null || Config.ignoreNpcSkins.Contains(npc.skinID)) return;
string name = npc.ShortPrefabName.Replace(".prefab", string.Empty);
if (Config.npcClothing.TryGetValue(name, out var newClothes))
{
npc.inventory.containerWear.Clear();
ItemManager.DoRemoves();
foreach (var cloth in newClothes)
{
Item itm = ItemManager.CreateByName(cloth.shortname, 1, cloth.skin);
if (itm == null) continue;
if (!itm.MoveToContainer(npc.inventory.containerWear))
{
itm.Remove();
LogDebug($"Failed to move item {cloth.shortname} to {npc.ShortPrefabName}");
}
}
}
}
#endregion
#region Junkpile Decoration
private void AddDecorations(JunkPile junkPile)
{
var key = junkPile.ShortPrefabName.Last();
if (junkPileConfigs.TryGetValue(key, out var cfg))
{
var entities = Pool.Get<List<BaseEntity>>();
cfg.Apply(junkPile, entities);
junkPileDecorationCount += entities.Count;
junkPileDecorations.Add(junkPile.net.ID, entities);
}
}
private void RemoveDecorations(JunkPile junkPile)
{
if (junkPile.IsValid() && junkPileDecorations.Remove(junkPile.net.ID, out var entities))
{
junkPileDecorationCount -= entities.Count;
EntityTools.Kill(entities);
Pool.FreeUnmanaged(ref entities);
}
}
class JunkPile_SinkAndDestroy
{
public static void Prefix(JunkPile __instance)
{
Instance?.RemoveDecorations(__instance);
}
}
private void RemoveAllDecorations()
{
EntityTools.KillSafe(junkPileDecorations.Values.SelectMany(x => x));
junkPileDecorations.Clear();
Log($"Cleared {junkPileDecorationCount} junk pile decoration entities");
}
private void AddAllDecorations()
{
if (Config.enableJunkPileDecoration)
{
ServerMgr.Instance.StartCoroutine(AddAllDecorationsCoro());
}
}
private IEnumerator AddAllDecorationsCoro()
{
yield return CoroutineEx.waitForFixedUpdate;
var sw = new Stopwatch();
sw.Start();
var junkPiles = BaseNetworkable.serverEntities.OfType<JunkPile>().ToArray();
foreach (var jp in junkPiles)
{
OnEntitySpawned(jp);
yield return CoroutineEx.waitForEndOfFrame;
}
sw.Stop();
Log($"Decorated {junkPiles.Length} junk piles in {sw.Elapsed.TotalSeconds:N2} seconds with {junkPileDecorationCount} total entities");
}
internal class JunkPileConfig
{
[JsonIgnore]
public bool Default => decorations.IsNullOrEmpty();
[JsonIgnore]
public JunkPile junkPile;
public bool water;
public char type;
public List<JunkPileDecoration> decorations;
public JunkPileConfig() { }
[JsonConstructor]
public JunkPileConfig(bool water, char type, List<JunkPileDecoration> decorations)
{
this.water = water;
this.type = type;
this.decorations = decorations;
}
public JunkPileConfig(JunkPile junkPile)
{
this.junkPile = junkPile;
type = junkPile.ShortPrefabName.Last();
decorations = new List<JunkPileDecoration>();
water = false;
}
public void AddEntity(BaseEntity ent)
{
decorations.Add(new JunkPileDecoration
{
prefabName = ent.PrefabName,
rotation = ent.transform.eulerAngles - junkPile.transform.eulerAngles,
position = ent.transform.position - junkPile.transform.position
});
ent.Kill();
}
public void Apply(JunkPile junkPile, List<BaseEntity> entities)
{
foreach(var decoration in decorations.GetRandom(Config.maxJunkPileDecorations))
{
AddDecoration(decoration);
}
void AddDecoration(JunkPileDecoration decoration)
{
var worldPos = junkPile.transform.position + (junkPile.transform.rotation * decoration.position);
var localRot = junkPile.transform.rotation * Quaternion.Euler(decoration.rotation);
var ent = EntityTools.CreateEntity<BaseEntity>(decoration.prefabName, worldPos, localRot);
UnityEngine.Object.DestroyImmediate(ent.GetComponent<DestroyOnGroundMissing>());
UnityEngine.Object.DestroyImmediate(ent.GetComponent<GroundWatch>());
ent.skinID = DECORATION_SKIN;
// No set parent, causes server exception probably
//ent.SetParent(junkPile, worldPositionStays: true);
ent.Spawn();
ent.SetFlag(BaseEntity.Flags.On, true);
entities.Add(ent);
}
}
public class JunkPileDecoration
{
public Vector3 position;
public Vector3 rotation;
public string prefabName;
}
}
private void LoadJunkPileConfigs()
{
junkPileConfigs = new Dictionary<char, JunkPileConfig>();
foreach(char type in "abcdefghij")
{
string name = $"pile_{type}";
var cfg = ConfigManager.LoadJunkPileConfig(name);
if (cfg == null || cfg.Default)
{
if (!Config.enableJunkPileDecoration)
{
continue;
}
cfg = ConfigManager.LoadDefaultJunkPileConfig(type);
}
junkPileConfigs.Add(type, cfg);
}
}
#endregion
#region Event Manager
internal class EventManager : FacepunchBehaviour
{
private const float TICK_TIME = 10f;
private static DateTime GameTime => Instance.covalence.Server.Time;
private static readonly ConsoleSystem.Option cmdOptions = new() { IsServer = true, IsUnrestricted = true };
private readonly List<Graveyard> _graveyards = new();
private bool _wasNight;
private Coroutine _fogCoro;
private SpawnPointManager _spawnPointManager;
public void Init()
{
LogDebug($"Night time {Config.graveyardSpawnTime.start} - {Config.graveyardSpawnTime.end}");
_spawnPointManager = new SpawnPointManager(SPAWN_POINT_RESOLUTION);
_spawnPointManager.Configure(x =>
{
x.CustomValidator = IsNotNearOtherGraveyard;
x.MinDistanceToBuildings = 40f;
x.MinDistanceToSafeZones = 100f;
x.ValidHeight = new Range<float>
{
Min = ConVar.Env.oceanlevel // No graveyard below water level
};
x.BlockTopology(SpawnPointManager.TP_DEFAULT);
if (!Config.allowGraveyardOnRoad)
{
x.BlockTopology(SpawnPointManager.TP_ROAD);
}
});
StartCoroutine(_spawnPointManager.CacheSpawnPoints());
InvokeRepeating(DoTick, 0, TICK_TIME);
}
void OnDestroy()
{
DespawnGraveyards(true);
_graveyards.Clear();
}
public void OnGraveyardDestroyed(Graveyard graveyard)
{
_graveyards.Remove(graveyard);
}
private void DoTick()
{
if (IsNightTime())
{
if (Config.enableLightningEffects)
{
MaybeRunLightningEffect();
}
if (Config.enableSoundEffects)
{
MaybeRunSoundEffect();
}
if (Config.enableFoggyNights && !_wasNight)
{
FadeFog(1f);
}
if (Config.enableGraveYards && _graveyards.Count < Config.graveyardPopulation)
{
SpawnGraveyard();
}
if (Config.randomJumpscares.Enabled)
{
MaybeRunJumpscare();
}
_wasNight = true;
}
else
{
if (_wasNight)
{
if (Config.enableFoggyNights)
{
FadeFog(0f);
}
DespawnGraveyards();
}
_wasNight = false;
}
}
private void MaybeRunJumpscare()
{
if (BasePlayer.activePlayerList.Count < 1 || (GameTime.Hour < 21 && GameTime.Hour > 4))
{
return;
}
foreach (var victim in BasePlayer.activePlayerList.Where(x => !x.IsNpc))
{
if (Random.Range(0f, 100f) < Config.randomJumpscares.ChancePercent)
{
var victimData = PlayerData.Of(victim);
if (DateTime.UtcNow.Subtract(victimData.lastRandomJumpscare).TotalMinutes > Config.randomJumpscares.DelayMinutes
&& !(victim.InSafeZone() || victim.IsNearBase() || victim.IsHeadUnderwater()))
{
victimData.lastRandomJumpscare = DateTime.UtcNow;
RunJumpscare(victim);
}
}
}
}
public void SpawnGraveyard()
{
if (!_spawnPointManager.Initialized)
{
LogWarning("Failed to spawn graveyard - spawn points still initializing");
return;
}
if (!_spawnPointManager.TryGetRandomSpawnPoint(out var point))
{
LogWarning("Failed to spawn graveyard - attempt limit exceeded, consider decreasing the graveyard population in the config");
}
var gc = Config.RandomGraveyardConfig;
if (!gc.IsValid)
{
LogError("Failed to spawn graveyard - invalid configuration file");
}
else
{
var gy = Graveyard.Spawn(point, gc);
_graveyards.Add(gy);
Log($"Graveyard spawned at {point}");
}
}
private void DespawnGraveyards(bool force = false)
{
var graveyards = Pool.Get<List<Graveyard>>();
graveyards.AddRange(_graveyards);
foreach (var graveyard in graveyards)
{
if (force || !Config.enableGraveYardFire)
{
graveyard.Destroy();
}
else
{
var players = Pool.Get<List<BasePlayer>>();
Vis.Entities(graveyard.Position, 100f, players);
players.RemoveAll(x => x.IsNpc);
if (players.Count > 0)
{
graveyard.Despawn();
}
else
{
graveyard.Destroy();
}
Pool.FreeUnmanaged(ref players);
}
}
Pool.FreeUnmanaged(ref graveyards);
}
#region Effects / Fog
private void MaybeRunLightningEffect()
{
if (BasePlayer.activePlayerList.Count > 0 && Random.Range(0, 3) == 0)
{
var player = BasePlayer.activePlayerList[Random.Range(0, BasePlayer.activePlayerList.Count)];
RunEffect("assets/content/effects/weather/pfx_lightning_strong.prefab", player.transform.position);
}
}
private void MaybeRunSoundEffect()
{
if (BasePlayer.activePlayerList.Count < 1 || (GameTime.Hour < 21 && GameTime.Hour > 4))
{
return;
}
for (int i = 0; i < 5; i++)
{
var victim = BasePlayer.activePlayerList.GetRandom();
if (victim.InSafeZone() || victim.IsNearBase() || victim.IsHeadUnderwater())
{
continue;
}
var victimData = PlayerData.Of(victim);
if (DateTime.UtcNow.Subtract(victimData.lastSoundEffect).TotalMinutes < Config.minSoundEffectDelay)
{
continue;
}
Invoke(() =>
{
var pos = victim.RandomPositionAround(10f, 2f);
RunEffect(Config.RandomSoundEffect, pos);
victimData.lastSoundEffect = DateTime.UtcNow;
}, 3f);
break;
}
}
private void FadeFog(float target, float time = 30f, float stepSize = 0.02f)
{
if (_fogCoro != null)
{
Log("Stop fog");
ServerMgr.Instance.StopCoroutine(_fogCoro);
}
Log($"Fade {(target > 0.5f ? "in" : "out")} fog");
_fogCoro = ServerMgr.Instance.StartCoroutine(FadeFogCoro(target, time, stepSize));
}
private static IEnumerator FadeFogCoro(float target, float time, float stepSize)
{
var value = ConVar.Weather.fog;
if (target < value)
{
stepSize *= -1;
}
int steps = Mathf.CeilToInt(Mathf.Abs((target - value) / stepSize));
float stepTime = time / steps;
bool b = false;
for(int step = 0; step < steps; step++)
{
value += stepSize;
if (value > 1f || value < 0f)
{
value = Mathf.Clamp(value, 0f, 1f);
b = true;
}
ConVar.Weather.fog = value;
if (b)
{
break;
}
yield return CoroutineEx.waitForSeconds(stepTime);
}
}
#endregion
private bool IsNotNearOtherGraveyard(Vector3 pos)
{
foreach (var gy in _graveyards)
{
if (Vector3.Distance(pos, gy.Position) - SPAWN_AREA_RADIUS * 2 < Config.minGraveyardDist)
{
return false;
}
}
return true;
}
private static bool IsNightTime()
{
if (Config.graveyardSpawnTime.start > Config.graveyardSpawnTime.end)
{
return GameTime.Hour > Config.graveyardSpawnTime.start || GameTime.Hour < Config.graveyardSpawnTime.end;
}
else
{
return GameTime.Hour > Config.graveyardSpawnTime.start && GameTime.Hour < Config.graveyardSpawnTime.end;
}
}
}
#endregion
#region Player Data
internal class PlayerData
{
private static readonly Dictionary<ulong, PlayerData> data = new Dictionary<ulong, PlayerData>();
public ulong Id { get; }
public DateTime lastSoundEffect;
public DateTime lastCrateJumpscare;
public DateTime lastRandomJumpscare;
private PlayerData(ulong id)
{
Id = id;
lastSoundEffect = DateTime.MinValue;
lastCrateJumpscare = DateTime.MinValue;
lastRandomJumpscare = DateTime.MinValue;
}
public static PlayerData Of(BasePlayer player) => Of(player.userID);
public static PlayerData Of(ulong id)
{
if (data.TryGetValue(id, out var pd))
{
return pd;
}
pd = new PlayerData(id);
data.Add(id, pd);
return pd;
}
}
#endregion
#region Graveyard
internal class Graveyard : FacepunchBehaviour
{
public Vector3 Position => transform.position;
public bool IsDespawning { get; private set; }
public readonly List<BaseEntity> Objects = new();
public readonly List<ScientistNPC> Zombies = new();
private CustomMapMarker _marker;
private void OnDestroy()
{
_marker?.Destroy();
foreach(var obj in Objects)
{
if (!obj.IsNullOrDestroyed())
{
obj.Kill(IsDespawning ? BaseNetworkable.DestroyMode.Gib : BaseNetworkable.DestroyMode.None);
}
}
foreach(var zombie in Zombies)
{
Instance?.npcProfiles.Remove(zombie.userID);
if (IsDespawning && zombie.IsAlive())
{
zombie.Die();
}
else if (!IsDespawning && !zombie.IsDestroyed)
{
zombie.Kill();
}
}
Instance?.OnGraveyardDestroyed(this);
}
public void Destroy() => Destroy(this);
private void Start()
{
if (Config.enableGraveyardMapMarker)
{
CreateMarker();
}
}
private void CreateMarker()
{
if (!ColorUtility.TryParseHtmlString(Config.mapMarkerSettings.color, out var color))
{
LogError($"Invalid map marker color '{Config.mapMarkerSettings.color}'. Color must be in hex format");
}
_marker = CustomMapMarker.Create(Position, Config.mapMarkerSettings.radius, color);
_marker.SetText(Config.mapMarkerSettings.name);
}
public void Despawn()
{
LogDebug("Despawn graveyard");
_marker?.Destroy();
IsDespawning = true;
foreach(var obj in Objects)
{
if (obj.IsNullOrDestroyed())
{
continue;
}
if (obj is StorageContainer container)
{
container.inventory?.Clear();
}
var fb = EntityTools.CreateEntity<FireBall>("assets/bundled/prefabs/fireball.prefab", obj.transform.position);
fb.damagePerSecond = 5f;
fb.lifeTimeMin = Config.graveyardDespawnTime;
fb.lifeTimeMax = Config.graveyardDespawnTime + 10f;
fb.Spawn();
}
Invoke(Destroy, Config.graveyardDespawnTime);
}
public static Graveyard Spawn(Vector3 position, GraveyardConfig config)
{
var gy = new GameObject().AddComponent<Graveyard>();
gy.transform.position = position;
foreach (var obj in config.objects)
{
var ent = SpawnObject(obj, position);
if (ent is StorageContainer container && !LoottableApi.AssignPreset(Instance, PRESET_BOX, container))
{
LootManager.FillWithLoot(container, Config.graveyardLootTable);
}
gy.Objects.Add(ent);
}
foreach (var spawnPoint in config.zombieSpawns)
{
var pos = position + spawnPoint;
pos.y = TerrainMeta.HeightMap.GetHeight(pos) + 0.5f;
var zombie = SpawnZombie(pos);
if (zombie != null)
{
gy.Zombies.Add(zombie);
}
}
return gy;
static BaseEntity SpawnObject(GraveyardConfig.GraveyardObject obj, Vector3 pos)
{
pos += obj.Offset;
pos.y = TerrainMeta.HeightMap.GetHeight(pos);
var norm = TerrainMeta.HeightMap.GetNormal(pos);
float x = Mathf.Atan(norm.x) * Mathf.Rad2Deg;
float z = Mathf.Atan(norm.z) * Mathf.Rad2Deg;
var rot = Quaternion.Euler(x, 90f, z);
if (obj.Rotation != default)
{
rot *= Quaternion.Euler(Vector3.up * (obj.Rotation.y + 90f));
}
var ent = EntityTools.CreateEntity<BaseEntity>(obj.PrefabName, pos, rot);
ent.Spawn();
//LogDebug($"Graveyard object {obj.PrefabName} spawned at {pos}");
if (ent is FogMachine fm)
{
fm.fuelPerSec = 0f;
fm.SetFlag(FogMachine.Flag_HasJuice, true);
fm.SetFlag(FogMachine.FogFieldOn, true);
fm.SetFlag(FogMachine.Emitting, true);
}
else if (ent is BaseOven || ent is Candle)
{
ent.SetFlag(BaseEntity.Flags.On, true);
}
return ent;
}
static ScientistNPC SpawnZombie(Vector3 position)
{
if (Instance.NpcSpawn == null)
{
LogError("Failed to spawn npc - NpcSpawn is not loaded");
return null;
}
var config = Config.graveyardNpcConfig;
var npcConfig = new NpcSpawnConfig
{
Name = config.name,
WearItems = config.clothing.Select(x => new NpcSpawnNpcWear { ShortName = x.shortName, SkinID = x.skinId }),
BeltItems = config.belt.Select(x => new NpcSpawnNpcBelt { ShortName = x.shortName, Amount = x.amount, SkinID = x.skinId, Ammo = String.Empty, Mods = Array.Empty<string>() }),
Kit = config.kit,
Health = config.health,
RoamRange = config.roamRange,
ChaseRange = config.chaseRange,
SenseRange = config.senseRange,
ListenRange = config.senseRange / 2f,
AttackRangeMultiplier = config.attackRangeMultiplier,
VisionCone = config.visionCone,
DamageScale = config.damageScale,
TurretDamageScale = 1f,
AimConeScale = 1f,
DisableRadio = true,
CanRunAwayWater = true,
CanSleep = false,
Speed = 6f,
AreaMask = 1,
AgentTypeID = -1372625422,
HomePosition = position.ToString(),
MemoryDuration = config.memoryDuration,
States = new HashSet<string> { NpcSpawnStates.ROAM, NpcSpawnStates.CHASE, NpcSpawnStates.COMBAT }
};
var scientist = Instance.NpcSpawn?.Call("SpawnNpc", position, JObject.FromObject(npcConfig)) as ScientistNPC;
if (scientist == null)
{
LogError("Failed to spawn npc - scientist is null");
return null;
}
LoottableApi.AssignPreset(Instance, PRESET_ZOMBIE, scientist);
if (config.lootTable.enabled)
{
Instance?.npcProfiles.Add(scientist.userID, config);
}
return scientist;
}
}
}
public class GraveyardConfig
{
[JsonIgnore]
public bool IsValid => (objects?.Count ?? 0) > 0;
[JsonIgnore]
private readonly Vector3 center;
public List<GraveyardObject> objects;
public List<Vector3> zombieSpawns;
[JsonConstructor]
public GraveyardConfig() { }
public GraveyardConfig(Vector3 worldPos)
{
center = worldPos;
objects = new List<GraveyardObject>();
zombieSpawns = new List<Vector3>();
}
public void AddObject(BaseEntity entity)
{
var offset = center - entity.transform.position;
if (entity.ShortPrefabName == "snowman.deployed")
{
AddZombie(offset);
entity.Kill();
return;
}
var o = new GraveyardObject(entity.PrefabName, offset, entity.transform.eulerAngles);
objects.Add(o);
entity.Kill();
}
public void AddZombie(Vector3 offset)
{
zombieSpawns.Add(offset);
}
public record GraveyardObject(
[JsonProperty("prefabName")] string PrefabName,
[JsonProperty("offset")] Vector3 Offset,
[JsonProperty("rotation")] Vector3 Rotation
);
}
#endregion
#region Jumpscare v2
private static void RunJumpscare(BasePlayer target)
{
var sound = SoundManager.GetSound(Config.randomJumpscares.Sounds.GetRandomOrDefault());
if (sound == null)
{
LogError("Failed to get sound for random jumpscare - no sounds configured");
return;
}
BaseJumpscarePlayer.Create(target, Config.randomJumpscares.NpcName, sound, true);
}
class BaseJumpscarePlayer : BasePlayer
{
public float Speed { get; set; } = 7f;
public float DistanceToTarget { get; set; } = 2f;
public BasePlayer TargetPlayer { get; set; }
public bool NeedsAttention { get; set; }
[CanBeNull]
public ISound Sound { get; set; }
private bool isPlayingSound;
public override void ServerInit()
{
userID = (ulong)Random.Range(0, 10000000);
UserIDString = userID.ToString();
//displayName = UserIDString;
bots.Add(this);
base.ServerInit();
_jumpscareNpcs.Add(this);
RemovePlayerRigidbody();
DisablePlayerCollider();
SetupClothing();
if (NeedsAttention)
{
InvokeRandomized(RandomEffect, 1f, 5f, 2f);
InvokeRandomized(FaceCheck, 2f, 2f, 1f);
}
else
{
PlaySound();
}
Invoke(KillIfNotPlaying, 60f);
}
public override void DestroyShared()
{
base.DestroyShared();
_jumpscareNpcs.Remove(this);
}
public override void OnDied(HitInfo info)
{
base.OnDied(info);
Effect.server.Run("assets/prefabs/clothes/halloween.scarecrow/effects/soul_release_effect.prefab", transform.position, Vector3.forward, broadcast: true);
}
public override BaseCorpse CreateCorpse(PlayerFlags flagsOnDeath, Vector3 posOnDeath, Quaternion rotOnDeath, List<TriggerBase> triggersOnDeath, bool forceServerSide = false) => null;
public override bool EligibleForWounding(HitInfo info) => false;
public override float StartMaxHealth() => StartHealth();
public override float StartHealth() => 1f;
#region Movement
void FixedUpdate()
{
if (TargetPlayer == null)
{
return;
}
OverrideViewAngles(Quaternion.LookRotation(TargetPlayer.transform.position - transform.position).eulerAngles);
var targetPos = TargetPlayer.transform.position;
if (!IsAtTarget(targetPos))
{
var forward = (targetPos - transform.position).normalized;
forward *= (Speed * Time.fixedDeltaTime);
transform.position += forward;
transform.hasChanged = true;
}
SendNetworkUpdate();
bool IsAtTarget(Vector3 pos)
{
return Mathf.Abs(pos.x - transform.position.x) < DistanceToTarget && Mathf.Abs(pos.y - transform.position.y) < DistanceToTarget && Mathf.Abs(pos.z - transform.position.z) < DistanceToTarget;
}
}
#endregion
private void SetupClothing()
{
if (NeedsAttention)
{
inventory.containerWear.AddItem(ItemManager.FindItemDefinition("burlap.headwrap"), 1, 3339379263);
inventory.containerWear.AddItem(ItemManager.FindItemDefinition("attire.hide.poncho"), 1, 3339380266);
inventory.containerWear.AddItem(ItemManager.FindItemDefinition("gloweyes"), 1);
inventory.containerWear.AddItem(ItemManager.FindItemDefinition("hoodie"), 1, 883710255);
inventory.containerWear.AddItem(ItemManager.FindItemDefinition("pants"), 1, 883709785);
inventory.containerWear.AddItem(ItemManager.FindItemDefinition("tactical.gloves"), 1);
inventory.containerWear.AddItem(ItemManager.FindItemDefinition("shoes.boots"), 1, 883709405);
}
else
{
inventory.containerWear.AddItem(ItemManager.FindItemDefinition("ghostsheet"), 1);
inventory.containerWear.AddItem(ItemManager.FindItemDefinition("gloweyes"), 1);
inventory.containerWear.AddItem(ItemManager.FindItemDefinition("pants"), 1, 883709785);
inventory.containerWear.AddItem(ItemManager.FindItemDefinition("tactical.gloves"), 1);
inventory.containerWear.AddItem(ItemManager.FindItemDefinition("shoes.boots"), 1, 883709405);
}
}
private void FaceCheck()
{
if (TargetPlayer == null || TargetPlayer.IsDead())
{
DieInstantly();
return;
}
var a = Mathf.Abs(TargetPlayer.viewAngles.y - viewAngles.y - 180);
if (a > 180)
{
a = Mathf.Abs(360 - a);
}
if (a < 45)
{
CancelInvoke(RandomEffect);
CancelInvoke(FaceCheck);
PlaySound();
}
}
private void RandomEffect()
{
var effect = Config.randomJumpscares.Effects.GetRandomOrDefault();
if (effect != null)
{
Effect.server.Run(effect, transform.position, broadcast: true);
}
}
private void KillIfNotPlaying()
{
if (!isPlayingSound)
{
DieInstantly();
}
}
#region Sound
private void PlaySound()
{
StartCoroutine(SoundCoro());
}
private IEnumerator SoundCoro()
{
yield return CoroutineEx.waitForEndOfFrame;
if (Sound != null && Sound.IsValid)
{
isPlayingSound = true;
var soundQueue = Sound.GetChunks();
var timeTaken = 0f;
var totalTime = soundQueue.Count * 0.13f + 0.2f;
while (soundQueue.TryDequeue(out var nextChunk))
{
BroadcastSoundData(net.ID, nextChunk);
timeTaken += 0.07f;
yield return CoroutineEx.waitForSeconds(0.07f);
}
if (timeTaken < totalTime)
{
yield return new WaitForSeconds(totalTime - timeTaken);
}
isPlayingSound = false;
}
else
{
LogError($"{nameof(BaseJumpscarePlayer)}: Sound is null");
}
yield return CoroutineEx.waitForSeconds(2);
KillIfNotPlaying();
void BroadcastSoundData(NetworkableId netId, byte[] data)
{
using var netWrite = Net.sv.StartWrite();
netWrite.PacketID(Message.Type.VoiceData);
netWrite.EntityID(netId);
netWrite.BytesWithSize(data);
netWrite.Send(new SendInfo(GetConnectionsWithin(transform.position, 100f)));
}
}
#endregion
public static void Create(BasePlayer target, string npcName, [CanBeNull] ISound sound, bool needsAttention = true, Vector3 spawnPos = default, float distanceToTarget = 2f)
{
if (spawnPos == default)
{
spawnPos = target.transform.position + target.eyes.BodyForward() * -2f;
spawnPos.y = target.transform.position.y + 0.2f;
}
var ent = EntityTools.CreateCustomEntity<BasePlayer, BaseJumpscarePlayer>("assets/prefabs/player/player.prefab", spawnPos);
ent.NeedsAttention = needsAttention;
ent.Sound = sound;
ent.TargetPlayer = target;
ent.DistanceToTarget = distanceToTarget;
ent.displayName = npcName;
ent.Spawn();
}
}
#endregion
#region Helpers
private static void RunEffect(string effect, BaseEntity entity, Vector3? localPos = null)
{
if (entity == null)
{
return;
}
Effect.server.Run(effect, entity, 0, localPos ?? Vector3.zero, Vector3.back, null, true);
}
private static void RunEffect(string effect, Vector3 position)
{
Effect.server.Run(effect, position, broadcast: true);
}
#endregion
#region SoundManager
private static class SoundManager
{
#region Built-In sounds
private const string LAUGH = """<?xml version="1.0" encoding="utf-16"?><LegacySound xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><chunks><base64Binary>E6g7PQEAEAELwF0G9QEqAAAAaAvrUmpyoBrrTSufV5OeeMC1pD09SdlG9qIoslUuKTStbzCufwa6kZQXKgABAGgJlIU6bW41erqnFD3JJnVE81Rm1cBa8Il2iKDsW+zf3eskMBA2f/lMvCoAAgBoCZSF2fVc9B1yKW4X57rvCJgRMqIWxHdG/Y5fmQHS8SG0KfN+lY2PRGcqAAMAaAmUhS0nPp8aR1aTri5vGvJUhND6T/++qLOmRD0z+gbbftmIcKzqae0eOgAEAGiABFpSd0N0cpcWvmhTv9+8l1wyFwYUlhGzCrIWgpYqmuCd15iAe+5KSQJBnnbE89SpkpQ+SgwNKHVQAAUAaImRYi8gqqFzfS5yUDhJWJAqd/z+meJ/hbfbww0rapBpjzvhOnA+sJUKTMPke0mBwWSBtxZTRb1Ue4JFNldetp/a5WKZbDqOVcJngZKLxnRNAAYAaImLlW3fiE8SOFScXGSZf7z6zI0Nf5z1hwuWVnUeAz63+/wJpqYYs4wgPXcq2EW1gu5+hzdVGWZjS76BN53KO4BYGEBmpZikPNc6YipWAAcAaIlSCi2rveXukVcJkFz+IA98rgKiVJ1k0CQhsR6bOxfFmDUeeZ4ySPR1SvUiMc4M5BPKvI7JdWAIVD6Zhl+YI2GKnx5m1f7gjpSM6/jkq1NT9z6P1LaKw7y7</base64Binary><base64Binary>E6g7PQEAEAELwF0GXwBbAAgAaJ10hzPJGXvOfSUJRYIbNqVFTTUU5oEaC3Q/LMwb+oikEEaCf7BBHavgLPNDdXupLeHMUnHCT8YTDUeCkvliCkS46shfgBsOHARk6SQAg7UQL1wLcI0m/NdFCAvAXQb+AFsACQBonGR4tsuv61xfVcXAe2QQsH4PPckqftM2DP5zemLlv1FooZF0oq1v7CYLfEjNYio73Iv2C/CujrAlzsTCxFXPTiNP37+7kW2AXgzjzZ7LpMu/ruM26iSFG+q2UQAKAGiJlnqCAAz5sVZ5KLE0Q3ayAFxDscO40THVSeOuVa9bz8eZw7yn8P5c7uLj2DOpNSdKnRAGgF7l8EzTn2WPZlMXIrzBvkHkweZNB6cASB4NrEYACwBoiTB1MEmsZoRfVf/GIfIH/XM30TrErbZa68WdnKEkYzShFlqMUBdJMvwXmEnvF9nud0U8zzvRUKA+Su7EM0d0s5fZXZzBC8BdBp8ATQAMAGiJJSM3czJ+svdULhZXHgDxmvrOWwOA94//FOal/jXObjZAt/pi2H/ftPjdC0SX8Qz6CTcoHf4eW6A9jH+I9wcvaI+bWSVjwz/hbZH2SgANAGiIyDGwsPNRQ8tFwpk3xiuHMWTJeT8o4q9GiH6enQgFFIbPjustyR4oAve2PI4xMMZrdppXY0ZrOs2tmnnK9MMtciR7m8OK1IPwgGojLQ==</base64Binary><base64Binary>E6g7PQEAEAELwF0GFgFaAA4AaIjXyaRhV9HePAdfhgF0fcd9gIl2wM5Um4iHx8W6iTr3R5NY/8jYjEayurWCqLyLxoO+q99RKZ/Be7xQJojSVnOlKiYt9ZmG2Lf8e8zo61kdU5iecsx44im1WgAPAGiMKLTvjJaCXZTeTDbhzayxERx7WuGYYHNgB01bP3fOiDrn4cCnwtSN+PAlA2MlcTngpIpx/yjHGL47qlz/ymXC8/BDC4Slib7C6KRhkW+H3tKG1lbQQu0Fa1YAEABojhH7N/6ESonjKjP/3E2pDV8IXnC3zCS+fonUT78vUsqD5wg+34MlsHKQQf2dgwEdVPEcDknhnB6Roop2sIxfOooKukd+gEwBgbeRL+1rowgf8vjLFgvAXQYOAV0AEQBooNdnK1pncvw1eebfIZVuXq1fsV4rCiBIbrEKVZvjcKaeshRUHGDRD0ylSvMurjvN9NodgKwsJ6yoJc+go9q1TljQNMy3S1QTHbxWCh+zRSygOyAVMRTtwrfg4VRUABIAaIsxHXRuqD5QWsNWE0mbWkUxkg68qafwm03XimeksM4Qv3thQEhS1LyBo6lbCnhEDMEdQOu4PQw/baj7RqjC4kjhYGUqkD1eCX5WxPzpsqrd446EUQATAGiJhgqmnV3leXFa4uFmlsSFoVGkFm1k2lAYPdsMYEqL3fnYJJWQNQ5v3z2O9jZZioi3gDGC2LLuJRUZjkKIkce/oUZE4MsIx91tBnMQ0xllAk+R/rs=</base64Binary><base64Binary>E6g7PQEAEAELwF0G9wBGABQAaC8qmbfjxbLPFMYPjgXhJRjjyHeGhKRDFhmFkBNyvLbtTT1yJawOAslhvDiLQz6LQ3ztu7vyfMocjNa2Gi6khc6aV1Nl2EoAFQBoLbriDXuDTzCDINpafzupZaghSo7Jg+T0/qWXjJVHPIoejsmqUShVjkykDehViwYE2bzugUtRTe35gE5z2akOX/9ewLIDru8MQFsAFgBoiVY+aacOLa9BOMv+6n2NJhyqwrsyNJbx3k98b8y44LuA+/05X75EF6Bylw3HMt+9+TgMUPKevHjSQhs7DCptf6LypdYhXI2yIlKqck6FF7jIviOp9rcR29nXC8BdBsoAXQAXAGii7wmdlclU4RATDMbn11no8u1EOQlPGbit2rHM9g2XoGqbKMsyumbQrQ4DVLjHzK7N+YNNOmuR35CkbDjRFDe1GxTnjtjgZZRxagI1bB/YH5vjLeLnsVyWhhebCWUAGABopD16oR//4rfZQ90Ghq5Yq3EO544FUng6ca7AZpuQLlktOfsazpA3UAfRHXtX/AETgDkPgiuXFE8TIYNyAerMxCGXdBmZiRtM5aiSrglRxaptEoGgCNggGdR5uRl4n8aIiET+ldCs/9c=</base64Binary><base64Binary>E6g7PQEAEAELwF0GXgBaABkAaKXgJU4ILJSdpVL8Lo71Exz7XXiNGfiTLGdu60qNpENp3qeCSwdQsErAn1odbYYjps0fDQCxQYXHoeT5JT7uhQ/ysxAxrZtErVq+rbiVdzljpT7wXv9Cfd4QC8BdBkABVQAaAGi947iaolW/ILwK5q0+AphGazm/u1E929BKbC1IgjemBh+k7Dvv8R5QhCnY67Hxy03dDtRirCSY5TKHl4CPVy024xzSl2KyHjKTetv+u++WAZN2Dx5OABsAaIn+ioHqurybDWY0qY/YEpME2m4tsJmyFU2p2DPSY6Hb69A472R10Yn91LeUDBryNDQyWQsTkkUgj0HDL6b/SGE+V8nbd75+Wj512llISAAcAGgzJ7g1qTKtPwRAQdX8ILdYgHJqztueun7mDASvp9dD8aMF+dq+8luBwREXF3pj2oIsQSsrU6uSiTMo7Evzxy0ZF51Az+ySbkUAHQBoMof6FmbmNI06TfGFssIrhrkkZgFsQeBGzPwgmiwf9lyrUydOdUgc8aQPrQv0HZXVmiE/nX/zknroS+9WlICrEXWdralBG1Uu</base64Binary><base64Binary>E6g7PQEAEAELwF0G9wBDAB4AaC8HO/WzGDTXcW5dnLpiMWeu/Nr3bzI21Jt95dVilZHNe0mJRgoJmClUrLog0QdWjytPZjmC+sLAQ19f2UuKf+w+oE0AHwBoLXXxdOKUE2h0RbqJG1MS1qlVlwkqF5LHxoA8Ei63EjICD1KtOdblC9TwxpDEFgxbx8Ni6P7E6QIEjZ/P6NfqDJg+uP3k4SJgtnKGHlsAIABoicF2edkf/RoHqr1PQNXP4KPd5xQdQJA3atjOBmF5hoK8akgLhMcjLiRkG+9t93+9ODw6HD9JUy2dNqOGmQ/xtlS22Ga3WNBgvv+dzEZvVqLxBqAQMXdQB6vQC8BdBmUAYQAhAGiiecNJzHuvW2mA8byOrIZK6mllRbqDYb3WSJy+I9yLP2LooJLQPtSjvuPWMvAAloZK5neMH9Dih0+RP64npODgugAEyT/jQD/R4HqRYaMkGe+XO2qGOJu4arXCM8HVdksLwF0GCQFdACIAaKJoMEhuy2l7b0fqXVdBXN7YvszFCoLKyNU8Vqn1r/kY6y0+VpULijoLovOwg9/o1FaGvc9NUOT/K3EbDsFpmpu4BQcfgN2Gu01AZjDqV/8GV3FER6tjDloOrITeVgAjAGifhrZ23HbJBY+wJkYoq1ejTlrPcSEL9QGFdLiL5ukGceUeBrjal/P/TqDL1ahz54hLf6q1SwWKeDTDpi4YbX4GguTy/RbJW390UKsrFkbw7vR0eeXoSgAkAGgyzJEOzv+0Pu251NozUNnX6bQLQirtWFNNOaPF++ge0nHI12nIFY4ioEnv36sLFhzE9pPsxkbGKuNNdu898qvpn/Vy44ddxptq/VEtLg==</base64Binary><base64Binary>E6g7PQEAEAELwF0GkABEACUAaC9ee181OjBGCtERjec3s6JbrkC8yL0h6MIJ1BjzCPV7vQrTcZ0wC/UFw33kKyr1cUBX+BLHJ4B1F/IsNxn9Xyjnw+5EACYAaC9f0WkopQ2dXNEE+8tXXHFF0e9WohgA4cATTjEk+YIVTGatjO2/FO7/NPSMHg+PMPj/rLEuiUASjeZgfmCUETqYSE8LwF0GCgFJACcAaC9d/PIq05Vwoz29KTGLEWluuBxjHKNTa2PPx6oLG5JZq9cRF6JSEJIG8BN5siA9fGQ1PuV865Xj4ek6UYi8okf4e/AUE65wglkAKABoiwsNewC4jTYweayf2SpI5gBzeGmG5haHKuQFDAWsjvCL6lnYKvubRn6y7kyw8FIc309p/tIV7bXA7o1hca0ivxU8MKgQsamK8KujXac9LQ5veqYpIa0Ya1wAKQBojTR/sYzo3U3TB3FeUkpdgNo+MgUs2zNcW32VHM3zNN4LXJL8xTezWw9lgn3ZfBIGik5xESrFbhuFh+eq0RWwavT3AOq0xXKGq4HQhZLHGvGgrDyC2o09O0dJh1nw5HY=</base64Binary><base64Binary>E6g7PQEAEAELwF0GvQBbACoAaI2n9qt4ZE05kZ2Iq8e6kJk6KqrHP47jaT3yrm00Vra8Fw4hAUkuLvNq07oVgnk5qTsRNL431cU64xP4i49CwrB07wv5HYKSia9JgWQjXzbLE0jMNiZE30diMVoAKwBopOfiQlXhP9wVrsuZCfY1wxKmBpDWsC6S9bwkmd/DakX61F5nelCv8/V1zoutl3E+fvr2FK7K5k+rDpndwlFBZi9EDlbx5RDeuXRk6UAMmGH6pwIkCm1rMpoLwF0GCgFeACwAaKOc40XkU10GYJjmN0lcnF9tcY6aNKa8j3adNTi9XPPTrT6q8Dgkiuvz5HipMD8FjtkcUCMtzI/8q25bY/zyRwlWR3RYByziy3BsCNoxhlQSrEhoIMBysaXfm3HBhlUALQBogmwQu/LZ9CDOWAniNbIVJwiQfP/use7lr51GfcAinliRGsJyrkSaR9kjVehgVKj6rD0s02zpY+zrAOzJKDFGCJ2CQSwpN17g/V5Ji/d7P66o8FY0SwAuAGiCYRe/iABP3JENd2GIA9bak+O31jKVvzpM+zVtuQ513uVDoS3ldbCGh+b3E+u5vJlwtMCPQgrO0OhBfq/3Rlz3JqZOew4SQtiL9AvAXQbwAEsALwBoL17SAlDuoKivSzduFwojUKnFenaiCgex6raszs8KOeVqx1ZeegElqK+LmOwHDTx2KyLEuC76jEzqjS/5pwqbX+kb5mir+wGXRK9FADAAaC9f0ra4QnG//X5UpkoPR+QEy/tXjZX7n5V6/FMhuYuMBeT4Fru/DzZabtB7oQKHnENDxD86kAzHb4EgBMeEOq2FFb+cVAAxAGiJP6pFzX32VggpD8P9+7h50SA4DdYNWLAEJMYflQ2eojdS5EH3VGPMnfH/jGDX8AT912179oZ9nNx9ifsLj/SnBF2upJ4amMufAoFGkFjg3hgIWv76Xqg=</base64Binary><base64Binary>E6g7PQEAEAELwF0GYABcADIAaJynYWn4c7KmyvcQkG0s8HSH6wbYJfI2fERj2XeF1O+bmzHykmMmVQshYwd/KUJ80VSsngvnAdHyh492V5mIeQ8hfS+4JDlK6d5CGwNozrMY02tXSl71pddFViALwF0GeAFiADMAaKFxzaVDSZUur4kd0igv4xmZhF9cfTxJdhV8P6/echIzPwG3PvBcxBQFIrPGMevVZJP1uM+aDQ3vjx/1oc/d5/L78Ode7Sh3rCOWo9zn9xc75NXShUk4tMjx8Yh2y6WHIPhhADQAaKKJYVj4sUfgcESjnRdf3UlKtempfOMRj5VuJf0hI3Rn1uhupDgl/GYi+fvQr/FQZp/95M8UDGNpcCFhDXF8w1D/9ScNfmDetlDOg228lNb6SfZ9PT+QHAb8NJkUDIHtHFoANQBooh/MQetLE2Dr/uc/Ksy4GpNqjQmSoS/Ggabai9t7RjPnjpZBxUFo8QlyELyJoi/NO7Xw4aOXxFalZDXgX6nmOPer7jB57cdcBOXoKIgk4AYIYWgvySzgfDZLADYAaIvCmWb35Ux1qd+mjIj6eyRzuEe5+/JsJtwwb6TfWV6f2WeLOaB3eQ3rvyhPsUXQJG9MHZTwZhQezEtVHxlQqbQGNNYXb+9jkla0D6ohrA==</base64Binary><base64Binary>E6g7PQEAEAELwF0GSABEADcAaDURUW+ooHKxKLay3MtXa7PWgonfsBBW8TnSpEXIef9fpowpbDwssRERXX2K/d42X93h7fnDwuVqcUX9R9PbRQ3ludsLwF0G/ABAADgAaDRobBicpI0RFiXfM9uk0bPMbfNZ/VIy7h1UyIWNyYHkFIW8ReQy28cv/UWIFYbxhSWu5VvDOOa/UxT6EdJ9NlYAOQBoiT/Je9fiw6MsOP0k2cgMmUR7mXuaMWU56PUW2xatRS4N8wICdftgMbMHHdj28xwdeImPtPfUqUpV9M5P+RvSm5wQs+YAJCSp8+e/douDECE9FThADVoAOgBoiw2aa4gV2fxsofZ9rocTP1+SGGj0dzI1AuOgQFlbTJb2eoyR41yRONsbVlmNFN2C1qYZFBzyC8f17fu6xrBLkkO6Wk5GFI/Rk1DiOQGm2Epd+Mg6VQh9lRgLwF0GJwFdADsAaKFG2vaTyvEnWowHD+LeYA5H13HaNojvp8+zKKg/nqT1fht52Kc8oKzg1LLfTOOj4YEalUg8/cqfJ6gwsI6RQ+OC1jK5egxCSjqF82/CyZUrV5XTkO7D+CbslsVQYQA8AGihsooOFjMlVwxJDBLCrmVjf2rlsiUqRc4KMpqqQfB0v7Zh+fX6H4PZ/c+WQEhAnuvBCwB+gRlb0m0k7d/tZjk7u6oOq1RxJMC1Vs/wRqjcqR7kEPQedzW4FHvMdtqEfsldAD0AaKPNVH9eZ7zQ5CYDbYsga5t4PMr8yT6a/TZDrKGQXWs9/bfNYwIca6ct85wVId3HwjGDX8BtsgRWFZs3+a4R9Jke1H+HL9AQeldFSGhTnvPDGRNuvXr9uGRUNzGyJgglIw==</base64Binary><base64Binary>E6g7PQEAEAELwF0GswBXAD4AaKOekBe4kv2vDyNYlMcV/v1eubKZ9DxA4dinWzvGPZzODVeW8OQAh6xXn8Z8rMgGPSdtBciuFPU9Tb2UwD6/1pek3tSjelFObZ1jMBU+cpB7anJytrv7VAA/AGiiRAUdn1KzOTql22WQC+rlMApv/dK8va6sv15ZVvoCSs5WteJU++fRipAJofE66GgBuMx/wmw/W4sbjZyctiBICALyEoirUpLu5f9M6PHKjx8iNgvAXQbLADsAQABoNvhaETSfu6Yp7OT6ciL/q1EltO9RE01gb7GP/qNeG3mPgsmNVdFVaBV2QkM1CBk6VEUQvPDSBifDEz8AQQBoMOiHCywM4JtJ2jKxvuQxdjgcko/Z5bWwRxjkAtKYd8H+wluyTy1B3cC5/vW8Ftver68iShX4brNXHD+UeT1FAEIAaC9e5NOH9yiYMaAmZuhdJ93Zj5CoXMFwu8P2OVxIZP7wcT6hjdXcHN1QEI/NxqDg3uUBp3udG5tK3tTMKI7hQCOCdsY6C6TT1A==</base64Binary><base64Binary>E6g7PQEAEAELwF0GvABTAEMAaIjazB0dwW5ctQdXKE/0sSSwZrlZtwFvzSX197y9AtPWBiDcNsLdFK3KnuIvae3GJ8iPFBssI3ewzaejMgycjQjW0rfAcprmDhbG93RSulEfouxhAEQAaJ8q7kumx4bnoxn2UalU9EO15fY/k0/gpr45Q0sNWUVxNenQv1D4GZlLD67LGqsMkkweW849R9XcsPkYUrwegBOLq4IhW4hcH8gwLj9u/qmE/xqiUPtMUJrTbFslSOUAdwvAXQYPAVkARQBooTyUfh7Sn5sawxZEjQclz2yl3wD9MonmMMQu41Otfh1CkaLpRpRyWqRTmXUwsxDxWwlSCWKqH+0WLd4CLRcgbSFMuO81n1S+d4IwBiFJ+AmSod70lsc7yVcARgBook2nZ0K0neKej2LGUo/tzfYO+kGDiufKhv+C1KlN6X8BIHmwR1M3u0xo6HIbsXIj5KfkyjXratOgSUz8Lm/I0j7a0bqDORkO8rcELzDCfsttrsu4fy9TAEcAaJ+HSg2zobOlK++IbEYN72v8woty0t7pwS4Zy/g0Ir+cjd9/ToAsMg8AOO8PpyvFUEBhvPhNAaGQ9gh43XmrArlWNmH+qJzyLevRcXqYqwUq4W8LwF0G6QBUAEgAaJyJTbODzWX69rcSvUJLrkTyxYOWx07ctgc8vqBZo4/fcrUd2hdHOhJ+w063KBFBgn3gfcOgLYL8MceMhXRCtSD5uu2Oq5afg0L43XXIYsUP7lmeRwBJAGiKUTl6XI833wJt1NDakvcCxfXxLkXrbVR+qygslNwWSgUHLj63hnE2X5U4+cMCWbUuF/ZVvpth8ZU6xVzUeGfEdYGsuqgAQgBKAGgxEWzOnA6xmvBymBsJCs3pKvI+NV7Pjq7csqKun2C5g5wT60Bdi39pPmKyzeLq6E2SsGt4DTKJaUcVU3LfJWF4Rxm7V5c=</base64Binary><base64Binary>E6g7PQEAEAELwF0GWgBWAEsAaIETw6K6DJbYSdWL8T6v25UxH0LKYhVq6+AJMdx1cTtyernY/WmFj/fNr9P4FRF3CULFZsBQGXFogKZ/Wpg4/pUS9/BLZIQApOsalbjwLXhi9PtipXwLwF0GggFgAEwAaJ8gHa6d2M6fnZNhgK8fjy/7rwek8NUfhfTUo+jTNPQU+x835vbvpeDvTP4CrIQ5XfV7653d0r17dmtoJGiPdC6/SjivA8HU/rl0ciyuZ/OYMsJvk1547At8zZQVsc3GXwBNAGihVgmaZHO4H3nn6IEHXkkxBqB7qFmmLUacaSwrVo7QCtK5f8AtF/mR8TkJ68wIuM/bmgBnXqo11R6J/mehn0GNtFfuU45lV+B+EJHA4Lw8ZgqvGDrrEZdc29Ofe7xtVwBOAGiivCyhHCYJ40Mh4gkK5thUVTycboFEV1Af8mRZgGvmRcAJyiHTFEEreMVukEkcdTdoDKdSxJJjsI5N0AnuDLyD2h1M5+M/bcD8IpmygrXvANDF6VCW/1wATwBoo+kQbEXsCu+vMMIgWtQ321a0U+wJUDSPT0WjvuGKzYtlN4QlDRyIRam/Dr1RS+X0AV10tM6nJ1Ag8mA1T0mpycP7xPuC5H+0DIQ6aYNc3w7TbG1hwWeEQ90kzyL0SYk=</base64Binary><base64Binary>E6g7PQEAEAELwF0GVwBTAFAAaKTm8Bdy9fLM72zJLbxypxUwaQ0fQcI4x6lOWEEHRa9JsM6AE0DlpqtxZVfHbGQb2ndkv4J/itbtEgdPPzlcGSTOhbo7OcDZ0pRWmxmGhrk+fS0LwF0G7gBRAFEAaKC4yTlV/5MeA3kP6jL+87gVaKQqkLLCm20uNXeC+lw8NTiZfNxnkIYlL4a4Ho1PuRHUlOkSoJFymDJrRn0sDxCWnA8p9QSzA8J8D8MO3ha2UgBSAGiclgAwrY11P2rDkRy6smgrRocT8c9Pr9jMy8KdeVeog5OKCXprdVwvdftA4+bvT0ahmQhDZe8OB6znV6MnYDRLL39saVqpA4mMTssR1ifnp2I/AFMAaDS7QUw6MW1WSzaXiQEv8yaUJRsYftpNimQ8KzjYy5L4Z4WEzHQKk0GfQrYmhj+43ireX2vVvdgn/5cLU7XX4ZxpSw==</base64Binary><base64Binary>E6g7PQEAEAELwF0GkAA9AFQAaDLSTEOh9+L+lF6iNShdPITGPUt0TEdIwJXbgt3fAXIeU+n2CsPmYFBRMj2zEej3KERY8S2fRpygWk/EkEsAVQBoMV1468yPhtOy4faBgKmKPsnOuVWk6OYDZVdptW9f2PtgEHDhTLI3OBeOjZLeO0TFuaqf19amgbtzrEZh3iB6OJ88+1E5fjr7JtsLwF0G2wBIAFYAaDNzlczZnN81tdzJz+4kMcltMpr4XQOXZnvZue4gSieH0lZnv9hNIITJjakiqbLaYzsKPM6W/7u9WDIOKYHfVLWyKnyUeHd0RwBXAGgzMVIs4jN2hrOHdRLlDi4T3wxk7/6Zap5/muNL1IbWloohlgx53fMitBFeSEDaYo8gRs9xqEQ+lnUNxX6zg4ZD1FktF64BQABYAGgyjLCFraSJL+g7Wu6K7MlDVAAURYYorIesOOJdPeWvGHy9ViVtsVwKrR0jb6awbbdwm43ZqToAcJDDioNeB9avi+IC</base64Binary><base64Binary>E6g7PQEAEAELwF0GSQBFAFkAaDDkMn2oMoBl6wcsiVHYEfNAKAJZa1PmXuj6mYImUgSvmpYaDZzjj29ZTxpsDbi5tI+8kwqLDgHp/BWFwZ+5bHTb7JppC8BdBp4ARABaAGgtdTfmdb8zTmaHcPwSR72pNSDTH+gpP7gGvN5K74jkg8Ji4GFFK8yBoraR5MBstWdccQ7CRJZDcl1R43xVaBJUme8bSABbAGgtdiBvPfO0ZrmERihaLd9HX5o72MchjRE2AgIZmeor3FWWHWf+ny7Pnd03ZIrmiZIUsh2/3Joh/Pky2QTjuk4UTrnlLuNJ6wEAXABoAQBdAGiGaQoC</base64Binary><base64Binary>E6g7PQEAEAELwF0GIAFPAF4AaIjNr54KMT92DsCnviRopC84hUItzrG8oVb50rN0VVIn5PdJXOQyks9eVLlNufV3xKeLtFaPxh3LaEDWui6YnXn3oNNfknu9hFxmZPHu6mIAXwBom1Om2mzJzvw8E1Qnt6PMU9KMwAu8gBhooZ/p4C/hX+Cd0Ix1qbWAqdEUA/TJb5542eSi1ZSzs0V0J39IcYg5fbEuX2Zz5OjGJJmy/5fdqe8j9Uv4hSGG+60LrpnB/qSgmGMAYABonG2457LcobZ/u00eAuIoIk35cYDLYerIzBl5iUoZMTE7xlozn+GXWyL8uKTqr+zxdC4zU6Xpk0qpBHR4+8bITreN0a1xrl4V0jzblrfyI5E845IQ0Q8O7CTykAFqlh3oFqYLwF0G7gBZAGEAaJwIf2nzQ/FqfYN1Z0Wg3NLvPwXqf5A5dbgmGzC3m6cR2dYSCYZyA3YCHzsrD16HNzxvz871fra9Lwz02sCHBYJUfeAQY89y7eWoFncYGbcZb8WnWvD2xPRIAGIAaIl0fncreyiQ158QiEetuNfHBc374tYg/UNgp7Y4k7Gpme1Z7f2SEMfBB2OW5cDbLkbZeq/CM2dJOfgbtEEf03oiMujh6h3wQQBjAGgtbXVVeZ8kg6whuFZuJdZkI77SVi6Ho5wlfwjJMX+QkHsss/8AoYuiwEg3OcLvS4LvWpISCQXRBJLj8emWGNAXC8BdBksARwBkAGgs2eQfSMoHpnd3qpnnCjKDJR+Dc1Bqhu0G/to1PkZ4wQa5v5nA1D3lijgGZwCpzF5Maoklkd73QQXLWVvfYSzz/I8XyZ4DK9gG+A==</base64Binary><base64Binary>E6g7PQEAEAELwF0GrgBQAGUAaCujIe2tU3RSbTG63+YWx90FplpvJlsppxuD4upyNb4bd07/0QoBEAFqmf/BQmOtqOIT86w7dpKC4h6LGtmtv8+0x8vlXpB0CEBMm21hh8FWAGYAaIjaub1GZ0Tc7os38+YW4YztCf9FP5ulsk5e3BxsJAgR1z53cYQKf/h4FxW1BJZrFGSsiOldEMtwGFPezg8mKHqcYbBwGRvkNSuc3LhgnZpZsUQGa3ELwF0GIgFfAGcAaIsSS9BFv+akndEbeAjFy9B9SJ3e5VPEJDo8fcy2uQEaWCkBafOWCQOCMZEjSO7ujHSRaEbJWIFFnWKULUxG+TkJfYW5i7R7OBiT3/2T/Ky5FKPzksd4sW3CFVl93VBaAGgAaI03wBLHZxFjXvqrlinzvLQP/tgDYsWBb5wRSA/VxUJsra2r9bz9CT59hY5HrEL1PrLiSlF0EbEo0KqfUovD2LkUEgK+S9wQqFDKk1axeDctquFqaNRzdzZiXQBpAGiOsfxXbmB2G1BeI6bQMsgAUSrB8YXlEFzAwO0QVweJ1Bhmu1iMcW/o89A6fhrdnOO/Eij7umevhmsv9Rv09XRBiglfiB8Egd2kfpH+oI2aLTwmYB7eH0yNFa4YpjsZRGQ=</base64Binary><base64Binary>E6g7PQEAEAELwF0GHgFaAGoAaI+86pMZoiP3HPH+1T6esfhCz4K9ebUuuZEoYohqp+tzPw8Ex/xqeFhY09gJSmXdPwPzcE9u7BhU9vVHajVaa/8UryxkEjpUt4kj8nnhufzHvYzafwSOpPXsXQBrAGiQTwQZJygTGjb5uKwTlR+nwCIuMgJ8oQXOOS3/CJr1NFnm8iT+YY3aS5kO4kbTFkmYKzQBV9+7rHS5uI0fSroqDODkZRD0X+MzsyLpr4IVjUlOZ0Ba5sfbpNUGn1sAbABokGmq532lgezavLoaD1/jOfx5iwT27UjL9lxHyRTTaCWf3AVy2whholfzvdIO8/YTdkx3+XblXUY274P2s3wU8hoH+l74m05+BO08E9frRx/IUuZIQWb0OKIvC8BdBhIBWwBtAGiQ+QrSB8TYbuezag9CiVt0TK9Zool51Ryad8DCY4/cz/VQnYAo/qJ8613rsyHDeIrRBayUiV4M0UIYXP+98isOf30BaE3t47qZpJYJkI+qVWxxmcmKX8i9FXZbAG4AaJFti6KCVyvt0w5qFWa8GaptqK2UKwC+/ZKxhBY9oGGjs0PiF5wOHqTL5nXybWd63x+H+8x/3TeJYvGxjy9bm/sLZPE8c7N0odSUdO70TviOiq1afvHKJXaNGVAAbwBokXcOxl5yXGee+4uCw+/dCvO9YFdMaS3mmwisdP8xetC1p+ERJ/w5txdPQcO+mmoRUukR9znb0ijQHFT/ugCIzviGfcg1oCIH6UevP42wy2Y5t/w=</base64Binary><base64Binary>E6g7PQEAEAELwF0GqwBSAHAAaJFr3UuInYC10hGD69nPsSQjJLR/VtgPmK2PmcV84W8g5fyU4IcjGE7oMWvkX6Y4P7ICm283X5o7JLENdPx8ArVpfZZbDdDg3nWPaOVfhONiB1EAcQBokWvdRbKln2QrOFh+SWKfXVf5KNe/DeMtYBttGNoK+uYK7v0OwTDuedHx7PpNiHDMznsjdJnwkA1M3lD/lRzlStTObG3/hVVd3rcLHUa45TsLwF0GAgFPAHIAaJDcfbxs4G+F6kRF9VqkgFvQODu/mPngOhFyk8/nFNRjIK/Zclr0SlyaLLagXcSGCG54FmgZBKNOw3GnGhJyF3mzEkX/nx0yEIuyzrGBM1IAcwBokLbmWs9jzMLHK1TiGfUYMBEStwjbqG2L7djyNr+/4EitJ4cVJ8B1YEHB2J+wJS8e9YWcajoF52eKpOlgimfJUZ3U1ekk3KDNYhArx5xJQC9MVQB0AGiQJyNVjtse1CR2e70abDyiN9aOiRrpEtVuLYCtBMGLtIPlbE5wqi8Ulh5d1WF4zRIuH/B0UmFiYTILZKqKdum7t95N7/axrOFz34K6qbI0P3oeoKULwF0GsgBYAHUAaI/LizG19ob4nPQOitRdSuI2D0Rw2aVJwbV9yzjsSKcLiNHWSHG7lu1/9Mqe2uzLlVeWKVKlWsaEvHPhAk0brtT4bgnUroNl4hDY2QLh8byTT7Rmv7IKcVIAdgBoj7Z60SIp6DY3nnESIpB6v4RsC3HnGokdzObfDsjNkIoL8DFpn6hplmygFEESD0sLRFy9/8xeEsH8HMD4lijr/2wXCh3zz/DM+8EM3QH8Z915fyjwnQ==</base64Binary><base64Binary>E6g7PQEAEAELwF0G9wBNAHcAaI8EDKqi/+FOmOqtQ8UEp+iQb8ZLe5o5oJCuxcTiJPHKJhBjEsw5iHGIBZdHkd/acDoDgIfIchq5pSoD4nqjgt3FyKrQ64D+L9FJhadOAHgAaI1jxGeGhCsgPOC6P9ZZGodYuInC3j7UhIOj/osl2om+J+B0HrQPJxhf0QybWtG6bGod73hv8Ds/d4CyyF/i7Zmn6L6qFM0IMffKua5rUAB5AGiB6VZ+R//mgEkrXYv5AY/N1SVIX8XShSdLB4R4dG9Hgv6vJnSyieTv/atpJqRuj9RvMYk7dUq4ofyEyYO3eLqiSh0GQroMtd7wlYR1C4GyC8BdBlIATgB6AGiLT4b9bdhzfLm0g7mqK6ByJ0FEG9HlpFT/+Kn7ca8ei2TL81otUiaTSp/lZTZ9xWcONN878wPAmDVIdM/zd5dzVj6eO41ymtLcMXjtsRVQvds=</base64Binary><base64Binary>E6g7PQEAEAELwF0GJQFeAHsAaKA2WzTi4FmW4cvgxjyCAF5Juob0WUQeiebDx66hqPoJTmlKGPGxUn5ATLezTfrhaVT69YykamOHi40K0TuP376wJf7NmELdlURjHAtXhFwvsjyxCeMjJ3QVfZ7HXF0AfABoorou94tqedy+XdxibBWZcowNm2mqwjnuSINjgQItHKxg3Fmf4NrjmfnsKMQ58jKec0iwL8I428uEJFmtD29EIp8o86chzUtw+n2ZpSppDGtO2f81DozZek/Jcm9eAH0AaKWKbm2coPNNPDJIzA7AvcENoDdnZrSbCwWhyYfEGUDSZImMCWEk8s8REQRoBe94FAyvnWitMdtLOoSNeqXtid2rxiLQ8jlpJWb0FZl2LbxodHl01ZjdzM9HZjxHGwvAXQauAFcAfgBop0aRY3EGeolhR9/A8n8atgxmPubRwbJUVvJIeRDLQ5z8IQEfGqBuFlIXdKWIGtrcKYRnMy2S30mPjZML3QM0QpAEL8NNXbwb8+guOoezD0FvAnw2a4BPAH8AaI6l4J/UhTmPzMTctc25SYfE2EwZJguaSmSXWoc6bdvBZqDxKol5ep6iC37KcaC+aVM1lHkCibevQ5nx49vRR/WAegGTElzQhVtDsMpEZHzSIDk=</base64Binary><base64Binary>E6g7PQEAEAELwF0G8QBOAIAAaI6hMUllRQbvaKPH/6EHffx0PuGUtRvl4SmJf1Vy6RNZkbLCltbc8jqwDpNxQJHdQ2vV3MC7YUhEoc5qgCIY4AWaf6iS6mBa3QFOQ0blSwCBAGiOEFRfV9KL7VFqIGvLKesEVyZXRLq4HL+SU3oDIB9mCxGgIfad1JDZt4kVPx1QhGBnvl7yWJQRQAK0EvB3zwiIC+TE+XIOxISFLUwAggBojN1V7dBFfFE3t0OMcz9v3SLBZagw79Yclo4aCT3kY79vY05Z+hypBx8s9uGfa+Ve4gAJWhcMEcEUY/1nQwMVegRxWK+d+j0+zHTgC8BdBrAAVgCDAGiMfg57aXchcEPoHX7SShnNrrvF9DwRyCp7sCHHO3jDEGUxoQA6A7VWsEWN40H80s6bIMmj34Wa4nDw9JxWpA6olLmsSpcrHnObQWoc9xkZDjjme2qdUgCEAGiMlQr8cuA74U0cmdQ+2XugIA+Z5/Zcf5WxBcJEn2v98Ab67iDjhO4I3J3Ar1P3G+775d3vCP+wZykfOthdDnLiSX9xeX0LPK5HdX02CJEGZsp8ON7U</base64Binary><base64Binary>E6g7PQEAEAELwF0GBwFSAIUAaI2vPPPSTM6cY0lFZK2rLhS13Vi8FQ+rSeBVAgkTna8tffIf/c9p0AEuHq6tu40ksmJLKzAVCvp2L9geZzMn12JMD2Jd1NpTuDdhj7ym5AiPjVQAhgBoksf9onOLXBLJGoBca0fVS3QFWN74ZExhCb6Vveee0V+LbNVLQV6fetqjNT4VeERLJ5AwiCUNU/uKCVUwNb6rLW6vGYa2IZfZ+j0voGoR1gqhseFVAIcAaLMxl0GAQjzcVpYut8KPjwZSnMYqdeRIwuayX5kwvSJCeCjE4G/7STdFIhjfQYXzFEB1XBND5cAZLdsQIh/tkYWXy2hB3Vpf83EBRNS5ZZx5PYOVTAvAXQZZAFUAiABorg5jQhrkG6KzGUzyOWfBkm/s8xsggi0HrDGWUUCfIKOLtCGrYXU/ryxmdwaNk49nysjOUxNmv8hrvCwjDjNyR/ANoP/Cu7g8T8dkROvmOrf2VF8cptZCzQ==</base64Binary><base64Binary>E6g7PQEAEAELwF0G5wBPAIkAaKX27IRAWAEP0uCFZo4PaQgRUdvFneArbKbt6uVzvfuOCFjbkpm/Lm1rGCauhjzuLKpadba6f7r6XDL4fmuunBzaF5BX3G6z0BsCDPbM50oAigBojWNdyxPG5Wy5u89XMqcS063IXEzwUwxZ+0abffKDFzV16X/tcMoW+HD7eaSU72ixgKvPOfhydvUHamTjQASNEOmwuekSKm5D10IAiwBoN9d71TPwa1OwoeH9qnsP7sxd9COLUBnIexHcoQEmJaGzDALwayjVZCKa3tkGbusnIh3XEwaU38eFvdbNE6bj3a0LwF0GZAFCAIwAaDaKMotGvIVCqtF+5Xju0H+Bu3dByoxJMt+khWMtaQJJcY+l9hE3Ku/D1jwqfy7pAIbe56hPZwiu9R1vTHdRKXnFWACNAGiMLQV/GWbCaUst3jvgUFZ2LdV7XjaDLKanGbKp3O0aGlfjo2dP+pabO/wsZWsT7e+r2NtHcHJn6MUB2p34qUeq5CiTujeV34mVFu75AKkqJ04oLtWZUI5fAI4AaKnXAd9uJ+MPyrnvwDLRvFuTTwXevPapCagwV3+dN3XY+9KZg78BfG02JNH3+LY1r7ne8KMuyuoHQrggA71mci9fh3g/DX5GocBYCb7t3JWSABXQMpoRrfANwg/eTN9bAI8AaLBGYL1dS+DkYNbVHwJR+p/gkny3PbuYEYNVC7LMoItGJs92dlFZmN89vrU4MSW0vD87f7TeHjV+p+Zit+qKiNGLCyToxyCGuh+xkWQyqu69AROVEKXtW2D6y71tsq0=</base64Binary><base64Binary>E6g7PQEAEAELwF0GXQBZAJAAaLA0w2iXmB5uev7ubHM8e9j7T+SGYvxP6AkKziLJUeiK5iOH1Qk1NGWjdkHFPtKLkwZ6+BNhzwk4LaqYiPfl3fnSGkXXWUi7aNUzHqE+rXoPdSiyE7y3pdcLwF0GAAFWAJEAaK4PAY3TDbldliFpAgfd0EOO0vIl77hAvStBRx779v+LCv+UW6SHwul7RdyuzfhTJjVBhVt3nOMpZlvXUEdlrUKStSv+uGhVpPM1JamlkdVX8oNPlJFSAJIAaKj+9IU84hvTEzYWoaEqArxS3GN2DXzkxX/CC6epVzBCCggP+CtG1iczFzrsyj1m3nn2YrO8UGA3Lco8aSpfFKJXn3Q32Qr0UbYI5rQiTwuI+EwAkwBojnfx3k8EaMO5ZTdsPhEwdCD+BBNhHUHJTWtpjUctgip6xNaowpIG45MW4308cm06DXzJQ0kCiqMgQcklnFJJZersRrkYpXahbEh5C8BdBo8AQQCUAGg3KY0Lnp9qVH0w+GqZhbl2xVTtoL7G9awUmauhZ3C7axBTsyjz61317f7OjQE6LrJo7Y3cnsAjK4XXhUwGUK1JRgCVAGg2e3RtLWKUZAyrQlukveeYVTKY5EpXw4W8P+5/su0Hvh9ObAC3KK+17u+23/hpIrPBM1v6+ye12V5rd+dU+0aiwR4kIpu1caLa</base64Binary><base64Binary>E6g7PQEAEAELwF0GDAFSAJYAaIr4RWBf8VFvrcG9n9V4vSb2tGYeJ8hQxETfRN/b8CGrCA+9L4DhLtiR+jbiU7AJX+Uk5qVrHLJo2ozRAnQOTXhf7uf7y75dphibgwqC45dsRFkAlwBokjQhi99K5pLHqiYq1VDGheRpFmidtdC3r8pEle8qUo5KUdbdc9aJ5nrYUdLTS33ZRdZTpHYSBsIahwTK2REfA5rJgmPcpQY9uKYuTDd3gexMcTl5M6QnB1UAmABok574Py4s+46hZKzBQWKrOCPPN+E0UicevC7G8f+1IEzlcgIPNn0X+iikaCDVdk7Puxr6SGIPG1MVJrDfNbclNf10Q1Xut9HZLf4wgVq+qWx1pRi5C8BdBvkAUwCZAGiToSwD3wJVXUcUaAdVyH9U6TUAM0IINX9bpnTbMHDstYY6BL4sL2Iq3Z/FjC3IGdElZhfSaewY8i+OL6CKLrDHrqlHXeeuHENKpDJxzXtuXvsBUACaAGiSWRONoFV+mgk6dqH8xFLhQt8IK0mMPmjcJplFe5H35Skk9i5DdYuoHaUzZsJr33g7NTXSDmg3uUFWOKq/My3VpZeu6rnfdnU0h7xRwW5VSgCbAGiOccYfT1s8PfIAXm6BuW2Kb6vT1USjorqbrri8gpgVjTDmDWFwyLd/ZbiIMWPxqfiYhsHiqkMjTefR5bzzkMnycr6kTVJHOFkmw2FGYg==</base64Binary><base64Binary>E6g7PQEAEAELwF0GmwBCAJwAaDfcsqhzD5z9Ge46v5x9spRvpMm8hdeVvYAwzsfSFAq3ImQ1HBpt/JHsT3TBFtVhQdzXooEIHVDtNc8NKntJ3Yz7UQCdAGiK+DT27DnUKHfv3TORW1dwnvgY1/H3KTpAzJ5Kf6KvIfIw9WmXyUaWayP/mXxyUEb3YY5qzyzUO3laQAFgsjBUtgAB51zhvqW6FXPFIoz0uwvAXQYdAVcAngBoguJ8k+s7Od6PLjORXWZu4HqCTAv5GenhyAVzYstNVDG65/VZ+r7l+gBV+Vr8jI7hIiDNKjN0YqOtQ5ctgxi+FuFD+pWKxbjJFmb6Mt128KdKY6BcAL1jAJ8AaLRMC0o6lvpIWlcagNfNEkRMOx0ymv7lHF4f/8z3HMm/Dg3TR0Gk5iCKTxdUnzlPBA49RC6O2vo0C6YJNM/hnl5lMYCxaTf8KXLiesPUUS6z+HdZwIGOoJX7fK0gwcKTXzbAVwCgAGi17BSfedUIO2rYQHRjgMy9VaTIW21Izjf7TtHuiLJL1m1wEh/M0xUA4eHdd9CdKWcgICup/IUEORvyWi7epLL47Ip1IK4LEjZBAST0OD2HN7HfK8aGU/OJjAg=</base64Binary><base64Binary>E6g7PQEAEAELwF0GWABUAKEAaLXWkm5ywgZecNURxuoBpzHFSej25cN9TcNgSGLgGFsXUmo73joQ2JzItGCLWEXn81e+uRoKkjKYeizwevqQr8YB3tMF/pBZaxSyqAvySwlyYoH6C8BdBu4AUgCiAGizJAxcmLM2dX+HNV3HwfSE6jl+yrlxY8KFihN3IkGNPQLCKpRvPtKNAPh7wgcntY8CVhLqVHUDuBGLOgMg0nQRZLRBVvcA6a+zLnhDWasqkz1NAKMAaI+mvRxCq4XnmQvBrbTKbKYS0m6fbsn8Ot9WhKaAQtDn1vcZMFXdWUU6PQtUEdikmvMGbsEYXLZVeFcMALSVonoJnrP4hr6zbu0LGF9DAKQAaDpJTH66dr02zTwH8782SRausXrOiwGk2SIxsInj/xXy3/wg2tsyKEC5Vrug7qRjSjaiDWLnvRYEozacw4DqNs6+MyVLsE8=</base64Binary><base64Binary>E6g7PQEAEAELwF0GbQFCAKUAaDfaQksPrxMyJQHcGjM4ZyDiElu/5pITq4rsh3So9Gy4cTzeWHh1EnyHGVi7M5J2NL+SOq5SC2/l3chwzyjEnwS5YgCmAGifPpkDrGuQKnXLYWxgWj6p9ZB819RGUx2WkFw6uWgCRttd61lgr3LUccX5NXX7n0R3E05/D5sbQpPQ5lPKBUeKFui/38nw+LQrDwOWaqOpLaQp76UVu04egVkQ5BzM3rmrWwCnAGiyUW87uAax58zHkSDrq7W9qvmYTv4XNyl+irI5+XRiLIWNu33farJuEOhm6k6a5mUDssJV4vPz+iEGuXDo+z69DMrqwYqvIe9KbbBu/aNTrSLVcfeYHpuOWGBeAKgAaLO9eJU1ee9IOctMzPJWT2qIcD62/fj0zNyN/CThJjLhX5XMPGE+IaltJ2kMA3g0Xg9N6wiKzCU/CF1W1uOqOzjTcnyvtHS7v2sc429AURYoscWW1ewEmRMnMHFuwgvAXQZfAFsAqQBos5bjea+ebIurcWCdYWGScvr/JlcRJF6HHDJwF1dMHRVnmoDwBWLvJHyI+iXMeiJQ+vGVhK8x5TPpOan6gymVienlGjnvdmZZM95Aps/ZQQxP6ZgCfhYjk8RaJ3ZRag==</base64Binary><base64Binary>E6g7PQEAEAELwF0G8ABQAKoAaK4OUlFns5zGKtu+LVPy+mRTDIgEEy7DVrOeAlP8s4NPPK83Yh9wK0PLDOmbcvuWcLu3y0zArhz8FjquiwIQiAtJ/i5hsnfIR5D9xqaPxM5PAKsAaKXw5lzQl7BlXdPihrFir26MKs3Hw/eE0YKFQz9++hb1OgflJdkpiyvCQyt8HJZmHNqlIGpqvKyPKiUPuoRZ3xD4yf9SUf3qHdLJjt3+6kUArABoOWoA0Y+e9MpK4RDp0SILcC+TSRQihREs7Z7XqaCixtxHtkDaiKTMo/G2uZYuVgP+z4IpyJ+/5Ay6N08rk8Cibg9xW9ALwF0GmABCAK0AaDdMcBBUswtR+VeBkmqlEikHIaPWZTo0sbUZNeGyJ+m8HnthZvZdpv4qiVnM+sLYk5o1fumkHloNORszwq5ylTEQTgCuAGiBiDPY5l0cu/4wBujvwytbJ7ogw36+ibXAayqsjfBrmZYsIZztiLSONpTjinHaq5WmZJGwzVrB8LS6rLIw9dj+59AnxEzRTuKCXwNLeTqhARM=</base64Binary><base64Binary>E6g7PQEAEAELwF0GDAFUAK8AaJEdVGFx4MC64QvkyfjdoEcsdSdWkmEY3dW04NZCBe3h7a5GmF9mDxile93Esyj8zPqwlDZkBEn+oZagSxqxAhRSytmZSiaO9f8C6sQuu9QSqe//UgCwAGiTTqIkVF2XAogeS2zzYyThaLfI/q2jBgIRk46I1M9iIjvqT5Aj0ehxxacPJvmltRumvXxIBBZb04zJWArgiEmOmGtLXPVskzNAv4+ZjOTLmplaALEAaLO0VsgaZH5T23MTjb39j3F1Ry5uJzgw4PZENPiv5D7dmK4Ja+yYSA6zxEFTBGD4ryP2WIK70/seCwPV06nbxRjHcR/Ez4pjW3yDQpi/LTuq6w4hajT6OxA9C8BdBvcAVgCyAGizD86K2CxBVt8lPdUsiDvfwQ91Y/3mhIdOpkUY7PvbqpnkYmHp4Y/jqOirRlJw88BMsnLJJICPGQdjdN90UwW/3q1WIVVWELmYt9rK4n1k/eH32WIPTgCzAGiPi7LW09RojMPP5x1bcCh3kpCrLnn2soSejm//wGYMJC9MDKHEujvXYjIXDrUsY7KpgTourw1PT0jnuEy7nDdytHtHDBrnVH3FOSkGy0cAtABoOMWtGZsNu9f25zvlOr9RE0ixiYtFER+PrO8QIHEaJMMlkuFyAHxlcgFik9fuGwWjOKODYLmBnICM7ABSNtrImg2q19aVOgvAXQaaAD4AtQBoNwxcmCkubnAwrW8eM3l+PTdNwsTaJhvt9qBy5DzSMh78TLAxcnKxqg4Kqi4hLyhORNG8Ojg5k3r9Ka6T/VQAtgBogZvGzGLSyEoCELoP5qNxdSQ7FalExzzuTfMeynfJAz0m2KE8BY5n4SuynvILi8Ho8JMrfzQChQ83pNCCe8Be6u+JbsjRl1QwkWWt36f9xA/RYpT+o/o7</base64Binary><base64Binary>E6g7PQEAEAELwF0GBQFSALcAaJFEnvBiNDVGbbqH4cOyMdpwT5stFFg+sxAV/bmM+cYLcxvK+YKGl3cXQALVpddtrLKU36WVSzOUYl29dYLbGxlflDD8VHLycMBl4PtUOKrO+1kAuABokI5tZzHzkY4ECIBBLnIpjwYlj3eToL1d2MBoRBuG58tcOyvp1ztiQpyvk5DxK7Zfh16zNgjEUSAb5vWZwoHEZYaxON8TCq/5WsiNuXxTCpVuxhaJCGDND04AuQBokyZ4bAz+i4PTIn6IJW5uy3O7kS9MRvc1WGEsSeatjEPj2fp17jaSS6TnkIkaeUeNgtjJz29UpuIsjN6AAfVKV0yWIimCNJzz1X+y50ELwF0GVgBSALoAaJMUfu4pU6TxpToCAZr2K4ieKhN5QjglV3/BR8yxzkvBSxn2V1WJCoR6ycEO4AY/s7l+Fw9uVyUxr3PrFJY8VPMN92dCXY8EP9On0jDF4f43v5i5E9k=</base64Binary><base64Binary>E6g7PQEAEAELwF0G8gBXALsAaKxbpReVUXIUEPOitVWvOEkyUe8/J9PnxIBm+ZoE5wMIHjvj9YFoLTk3UYHEeLqbLet+KqKo0aPkTYRlSV7ArkmEOEsOOaYIA0LbU4yMjiD+N/Px8xipSwC8AGiN5CfP0XbzZN0PnBQvIBpzy0xErAM/Ql+N4FiBmsFr5a0aNlPB/e099OYTGX3HkIWDgc+GFs5WYjf/9mi5mtE0aIlN+TXjXBdc4EQAvQBoN9gUsztqCkMF8tJFAuORTRxRFV5X5g1lvhvg417EpvKtflGr7UgsFHQktjbsh6B+WSrJ4WJBYfJgeYIby8BEGeCvjQvAXQZmAUwAvgBoinfVH4s2FCYMsVYxmdZJKr9noWm1l7YWNZBgkjs1CtUqzkvduRVsLvUTp6pK00m3s83DoVgdc8kIOwfSbEOHMQy+okCIQ4KBvxF/XAC/AGiCqQO6oYXPVvJfPPsOEUQBJs3YDoL6e2QgCycscembFQ5GKo6FHyuIOncsJewetpGIMOrCuC0CBA88kukpVjlWKpGj0moUDGj1Ld23wu40v53uDInh8yqtBhDhVgDAAGiQhVT6nEbyqaW0L6unRS3nvSBKtCO5gg8upsMZ8/GdNp/lKAd/KYuuNTaZ1FDrnQxnkUJ/54dUxbZ8OyzNRZQzZOixQA7KZYWVEVyMehmzzQ/wMoqZWADBAGiDxfK3lkDe76SMawdoGM6yU7QXloHKi8DcaPjwqaQuOQmBpN623usl1FjA/YkOHwmAnQE4ZUpIGz02sl3b4nl2PaPvGYE9wdlY9vHrXwB7j7Tfq1DWTFCEOfYh</base64Binary><base64Binary>E6g7PQEAEAELwF0GVQBRAMIAaJJ2/J/07/mbhrMgI6qtctpfykB7IyIVfqljmYmmOwG3gr2KN1hfvD1qi7wDagxX1DrjYDp+PY+zJ3NRYhEue1gGIO1iaEQ0nFqstdoWviPrC8BdBugATgDDAGiQGx4dak5dS1SKoeZfsQHEJt3f/L9eRiSDkZ+K+0NA02I3Z6XLxeZkq86vMXipv8kgVJMLFdptTAh3MBjPtOuMFCDy1wuSZMZElzHVDUoAxABojNfCzck+l9yjRAU5ESNZkpfkJd0YLaeBl4H+PPk+Ij23stKqujoD+QyoMdwrpASGdtmmYtwI6+oyDOAZbr2Ejn7IvceSdQd7Y0QAxQBoNlkayPO1Gh7qOd0b/L8TOz/pcmnffumfWOUwK2F48xMV20+T2z1IdN0a1+FjUPbw52LcOrJmOph/lbsADSUZp4D093pAS5A=</base64Binary><base64Binary>E6g7PQEAEAELwF0GowBGAMYAaDMpHpBw5v8ZeOw2zM9rvcjP6IXQez+s2SRAClqcuzF8BwU37VpN2sEMPFMRH1pLdLCPYol0TJNGciUmaQcVin7vGC0viFUAxwBogVkuqNN5b2XXXLJaYO8KH62kMMRnMNu9j3izC9/TMaM0j2EU8D1HxggyKSCqYErXZwx0yXwlxA+VnFtfA8bWcjtJ0fnOg1hfUO+0LVqIwL1prAP3C8BdBg4BVwDIAGiD5To8O+TtUbmUZ8asb4sBIFbdM7bSOcjKWxWBgx5MGEjOEeDYUE6wztgL0snCGVhS384wMxw8BrqhshSVFzRTLDdgZVo/H2KKF5JJLqWE1nOdV/KQAVoAyQBog/QfyhW1mjgnFoBsJWabxWwXIpjiIOj5D3l12GLdc1d/q6+J9NIzIJOD68Dtrcb/EPLhPlqN9MC+57UZsht6CWq6S2gUqjfCUbJSeQvzXpLuwI3AiVGNX6NRAMoAaJJj5hytZke9d4IIVpFBIP/v2x5ufYn9qP+UMSn+eRX34nsvaN6v3Cd2ZPW+ioIDqBMkXUK4V+dv9JxX5mnJtNVGdsUHTHV6eM1vrFW5UQHCfyIVhQ==</base64Binary><base64Binary>E6g7PQEAEAELwF0GoABNAMsAaJA0Qymw/eZR+aMZs4FTqycPbImBu20C7IrBGE94R15c7MPc3SCW1pYltWXhujEh+JK2obLNhzPTCjsshpoCd0/xL+IgM4lNtG2XhYpLAMwAaIzRh+A8lYNpDApjhp9PQoVttNW+Qt6ORYL2m4HLCd1sydeYHn1gqmwa0pT2mygxi/gijcWQl2KzIeeND2GWrv9EQHX4OWCYBJ7TC8BdBvMARgDNAGg0exF2jiIaBD6YlBfRyJsxPOBp+ngV0nL4TKQHU+IcAxgggm9BCD2NHwaeKORohfMuHHXLatLkEY4aHR5XTEPtyvZX2wVMAM4AaDPNNbxiSMPNuPfcgGMz8ymuxxdoDx3ixsxwklpeEF8OJRQU1sOzB+1jjuO8/YwpWXHSEPNQgwaRPJXLY3J2TLZmf5jnO9TJZidI3FUAzwBogrVcj0YM7SSeam6Sh4KCA80KVsqbNjW6637HrJMCBtaQC8QSguSOWFs7Gm1pi85ih46dK2UypvV2KzjYYZ94hCPWHRSf5+ogUcjiCjWHIgZBLRALC8BdBgcBVgDQAGiRQw7wCxPC4/mF8LyNE7YRA2AgvrvWAgx8lZnWBC2xnWKQc9Bn+eB2XPDr4hGPj/iZ1AQFV2DbX49+R5leVo0cdMrQV9ozVr2NbuH3EDPmNbAI+V5HUADRAGiShRVs1JDyjREk1s/OEY+SrUDNZslaIUSkKECiB/2KMF0VFK0IFUObJL36caF+h1GM4WhOkkWtL7jcPzkNwr/iG7foolPX+B8+c6dNFUeMVQDSAGiSdvuRPtWFRgENsoq205BDsrm5YYPg/S5mjHHF7waly0MGZS/XSOm3FTKPGrK4mIwBS+sIg0bhF/0t3OIR+tQxM4TLydJETJ6qVixd6Q8I5DZIcmcgdefw</base64Binary><base64Binary>E6g7PQEAEAELwF0GTwBLANMAaI75xynOd15OjF3cmJ0YdXNzQIY6E1IrayYx80kXzeUWwf7+arCJE4DHq6KfBXTxibmwHS0moJoNiYyBPyEmozX24O2x5LF8+aRjC8BdBu8AQgDUAGg4xJmFdZnLGQ3SDAssUPo+DtpuIgG/hLQQreq+JOH9Hde9UxZXU9Vc+q33YDKnec9UbRCs3sjcG2++TEYqBy9wTE0A1QBoNla0DlDwb2IuVBW7wE/z92AW0DLeICJ1TUp+qEgOPu+FPMN40uGN+ac0Zxwmc6VHXMHO0DtIiY47NiKW00Z2YKT+/UiSBjm9tI9xBVQA1gBoio5rNd982XJXEBa7JiUZAIacgbZL8uSvVlgiruoDh9oztBm6K5EJXuJ1xxD4QgboM+tprhIft57C9/wqpoyefTZbpGYrGGG7CT4hHl2qnBdeF/6UGq0a</base64Binary><base64Binary>E6g7PQEAEAELwF0GvABaANcAaI3C/GsFyjWuvdUnSA2mg6+67bWW9VRiJCvtlOpFxY6qvTEeptvCDs7p2/S+IKDfgtb5fnRHjoYLu0bIKxZ/kBG1IBhkWs/++Zmeiaj+Tfh45Vr2jsCoZ7o9WgDYAGiqIZnVLzHwHP09WW6vECa/VedSOiznfTiadbiJkRlPIhVteqZTCw0UFtQ7kysbza3wOa0xCi32PLKRRTvfP4J5TxDcO8++LO4c1wq87aArcB+PxvRnq8TAiwvAXQYCAV8A2QBorFxZBFYvnGEDG2veaO/L5ui4620kvAJ1Q+CJRpDbA8P+1a5UpsutgPpG9+mIyKyzPH6ys7Toy9/xzjmbjhXhR6F7JPb4MLKqAKFL7wdHTVcxvRFupLNOtOUU7beptFcA2gBopfEsxoMpc0+QNQn6E0RAHoIhSidV1ouhDfq1Go365y3rHIkWLzSl3zkIBkj3nxQI7c4r5l8QtTIqRcTx0qNEQsJgj7y6rZTEB5x1VAgHE8Knc4ncVIFAANsAaDl0Ue8D8QyEvDG5AjFjolUfY5523aRb7sQQdIoPG2sq68OgU6BE+Sakg34hUl9OgDbT/ix4hFv275HBf+lC6AvAXQaSAEIA3ABoNjvNUrcN860Zhi1NsMb8J7TtktEdKzWLo1TfPpDsvBh1sV0IbV7v6ExgYRixjojoMDXzX5ZiW92WgECkYi7dLo5IAN0AaDCpp3nt42b4jr+8hVPdn6Tmzs5el8UqcPtoq/Y0QaeomKE2fOsAhMYejPjfp7AdmX4Di5o9BWYq7JQZnLI3xuvUKhIONHcRIMU2hg==</base64Binary><base64Binary>E6g7PQEAEAELwF0GIQFZAN4AaIlWP+WVBjADw27oFlRvyfn5kPItg+neXmLughHRiKfTT/tqOg/HbXet317FgSbVHzGUmH6/pE53XILykOElymulaWSODiy+BAlUjCcWz0/sG5loQk+zBdRdAN8AaKPxt41i27w695/IJiS10UCVf+hFcc/UvPwThE0NgiQdvt2mNta2L5U4jKN1Uh/MhYbLIhdZe6U+KLqvX6yekqse9EwqdKjMAKO42tYFM5pXwZjFVwKNYGt1Sq7sXwDgAGipq/N1qcCk+URxn5bOEQGcO5OTi8qCok3csacGJs2LtJGzSRtdnO96Nw8fHm4KtCA0Lxzf8mMNiEJMoXipBBYKdBM38yiGio/bmWhxOOCq6QiTOmAiIQGVHS6M/OwLC8BdBlwAWADhAGiso1wb/EsyMpZLk3k8qYrqzDVQM+/Ygv9uflDQ8aN1TsT4yXQQkHDlp32m5Sm83gfXv+/a1ckKI9LKZOVfhAkh4g4J1fo/FovghTKZxOVojva4wWsGIw7cq54F</base64Binary><base64Binary>E6g7PQEAEAELwF0GLgFWAOIAaKSXPQf7iNg8T+1NcFcYk0cfuyVuqgQAHl5Gk09CP7r4d1tgi+ci7BqaeZns5+O5Jo7KQ+i+hk+2s+Pe6sqQFZPr5kmcF3wKwV6eFOHH040BbUJ6/11GAOMAaDfUjOvSqtRDaus5ACYp1PXT8D23NsYAKwOeo4JnGIxtPiwJ0h/tRaUOLzC/yk47JI+nZjfbbwDz848QagpWnl2oI+hQZEEA5ABoNL+6LuWPKjTbyfNE8D7U6hNFuKqns1riS9Sx6aOmMODmY39Ltw4ChP6X9pZjUlHX0vgF3r1EAvARY20a9g4Q7kEA5QBoMpIzLSku0evrAxzUKU+vy0cCtwJuTX3Lh1HsNc+uMWl6E8zHBgp+wqbc2wVGJZolntjC41b7xWUm0mPbXRaxDgvAXQbyAEMA5gBoL3nv381bNGHwScQ0RDur9PnoWFEOZ8YYgyoGJOhJiUWPJ26LYeU7zt+lB1N4mDdVYiyBDO9pAAzoZgo68bAH0EN+SwDnAGgzxdk2Ryb60yNrCa3+AHLARZruCWoUboUFWwgbqqU1ACgp/yMFss4fgl6L0yBtDJmU/SFwYIPySedYnMGrgacmKEkwELm7ldfZUlgA6ABoi5hM69pFdYySf8DcQ6Rp+MCyybKPUnxxiojRKj2fTGE0lwPjY789Y8ytpxil8G76rmr6PymaVEIe0X6uljtIRQzDx4Bc6vSVLMXl1zzK+2hvmQSHjjQT71g/og==</base64Binary><base64Binary>E6g7PQEAEAELwF0GVwBTAOkAaI3DTTcZDI8dpGJOIj8pvTAzglpy/hDuCp5twsGfhoPthWw031jGDcMLPimSCd2eLcrPlPKa2ybTDczqjVAvFbVx8W56ikIGjYqM8RnEwOURlpoLwF0GBwFVAOoAaJCAeHisVyR5rDzjJjLOKsqPDybDZCijFuHa8eM5WgNtmFe88Wx3QicIwzAlToxeFptlwfnTXZ9jXy3tp+HE/2dAd9G7cEA5nBIMFx6UifB1Coand1MA6wBokO2GUGTA1Z0xfg2gSzgelkUUVCWABxRBjuiKe8jsuJh4RCx0hvUFN/8OiYQTQwEGSNtteS8STD25qJreVgnLX0yq3Q1aP+ErW2d4FjzHcGyJcFMA7ABokW3GOoLuS58uZYDIkI71efFO0WYlwAv31VzrYR/35em6ERdiboEQlkbhTEO8yjaYnyb1SL6iCIfVJAxc7uVoC85UNUbSsQpVen8BtR7jAkBG7JEqCoY=</base64Binary><base64Binary>E6g7PQEAEAELwF0GrwBTAO0AaJGfqKqOzNq1eDDMZ3kz/rXf4g/EZZhpUDthXFlYpQkEnrRF/uYjrMBU5IqJ1iPDtCXQQFbYLbtMzWYE+ge4q9gSgVNNhhMdxY2votWxsWTHexdUAO4AaJH9J4xszM+Y26UEYpe6s8ziV41zIhrfelJnXeq3Smss/M8xm1e7ra4oJx8WPi+Jm9UfcZHXrdyErYA//QN8zm/7iHSlzslwXaUML3sBY/7LRgUQC8BdBgEBVgDvAGiRijLGhaecufY/V4HOeoPrg8xNT1OMSZaSpCMU2X/Prz/EKJ25QyK8KI7TcxcQp5hdzHBn/uW238KgNg4fIrFzCcGuu7rgxJyFB1iDifLDNGCX/DyVTwDwAGiR/S51iyaYVPBPCDe7VVnzDEESbjpatnSPAyFA+s0KnSO8bR6ugQo5/PLxMx5H9khrolJybrYD6lfn6kGz3pElFgxQAm9NJrkO8wOlq6RQAPEAaJH9KPfde2/4yUW15Cfo41vKDtYoBueOkNq0SZut8u53sbzTQimpEPrPyfTYqTwjHatg+K/odV3SgPz0BGP23x1jAMBhn5DLM67iNJ37VtALwF0G/ABLAPIAaJFtxuGux4LKga6pjzz0FRMF/2h3RRGpEgjIVwVQtukMHUNoJrCVBamnuB+6M4J438XTUsfkx4PhyQRN0AEnATf2E2XKYp+Wj6tNUQDzAGiQ3ImZR93qR5o7CzLMd+YZrcwbDXWiNY2ev4QO14qGbJqtgCefSKsqW6n4UE2vvBQcUePsQAXVlY8oAuYe6C4xkUAgX0UEsh8531VEW+K4AlQA9ABokNyVlhakz2RGDZRL0yqlo0Cd5pqU+HrUW5bsBJjcK0cTpg+FtmzZlMIEhvBWKjGUjcmtlfPMIAU27nt+O+GRivJcWkGQxp3ZC4eMFZ2+YTS9zQw1EV9v</base64Binary><base64Binary>E6g7PQEAEAELwF0GsgBYAPUAaJDclSFLsC0xYh9v/6fm9jLZuM/pu7UGTOdfrgU4m8Oo/R0msWoZia1Im57FYyNnCJ/1Qox6pq98EXVLcQANGzp4oLmS07/NrSAOStOCsflVZFJsq1V6F1IA9gBokRisg6ZBBgPVfCk4we5azBY3RGnzXgAByUm0F4SatnxMOfNmmQNODqXc5uAElgStA2/CauzpnnhfTiRe1DO/WsQE5VkpmMueKyyFit2GJhsQC8BdBvsAVQD3AGiRgDjD1yHiT9b90FmrPjOGTUWwvsTuI0eYDdEhA7JfTXATCj1C3WvpO2xdtq6aI2i5SwcH3GmRrPea9kCI87tFfOoBwVvlTpTB60cb/Z8AYlBcJTFOAPgAaJJXJqchYAPzt2Toc14rqsaGiccLgYsWxfJgIHYVnidaS+Cp0N9bKbMagLzMlHDZinuzXgX1SW+eRQ4vfAWPAd6KH6F+W2zo4TDFlAJyTAD5AGiPiL7drK+VfbQwhQ2O276KEdlN2SEDQ7qAYFARaNMTHA1fWk6BSkElctPtCNDvALl7zbiBB/WYDraZF7DMlqEJ60aPDkxHDabLHhwBUvBw</base64Binary><base64Binary>E6g7PQEAEAELwF0GSwBHAPoAaDc4JrTTNHi9XerwYMFHrdxoI4k94kKZrfIVhDjZ++2P4PLU+ziGw4GO3pcDzVZXz0s30jjUaOhFrY5TYBJItOXb+s4UsDILwF0GcwFSAPsAaIF0Yb1hKFC3hE2qO57s5GUNUG4GSRkHE60eY5xs/nQXuw2ZoiCSgfOG0fIAthwINwyukneW8uatlWCfjlF/VOp9rPQVeirgnvlGWecxiPCM31cA/ABok1AoSlPOpmeNUh2V6VdNbbvIe3a7x7Y630iEQdpi0Xh/qyamO4U3GqwfKU3Zg0wOoOW4TUFrgcDIaT3LwdT7z44qqKjiQRgTmdBWCNUDHXn+yylsb09eAP0AaJSM6SaxRdRGNH/1V0olUV7btyStKyLOuiYn7lTA241plVRGRnmndkuOXhN4Z3CcPQK1DKGPIOiAc61onQblmpVH1CqvAWvLXp1dQSVu3Gq9jucFsCRr4rSzVAmVm1wA/gBouPidKiLUqfKlWr4S2MWI24Z8W8vwtIbVkGooXl7/57F0LPonBSPSWfIOkgYbjwp+r4EcQ81e6EmxOn/VlW9fahI6cD4izNSHJ+NxiMPBZ6SEb0XZU1xsKTVaoRdSKyU=</base64Binary><base64Binary>E6g7PQEAEAELwF0GWQBVAP8AaLbLoqH69YFkDGDfOkZ3fwoRG9/640cSD5IRmMJnI54Deqpgkcn8c02UlA/efgTRgjQOv5s0GCtcK61saugFamqn4cvs0H/dXSTaQMT/9V/lz88TogvAXQYIAVgAAAFoteSSF6g1d0eaM1FkFLEKiqKUIviBFqJUVvgFOGlPWUzE2e+0QgdcM+1mVeodyVIUoPAWfx1NIMD3LkpKH9CZlROZEBQsj6OMKPGJt99PTsbuWb7DHbpRUQABAWiUCGqsO8p6IopI8R+IhRu/WiAQzhSumwS2lAGGzsrbU/BZisMSzb6XWQr4JTfD11o8xU9T1tAWLFLUGfA7LM1g5hZjnl8U0ipGDS+kj8XUNFMAAgFolC+vK1vU43JOABVKZsyLBId439cIQ3wVpD9uo+IMBxeLF3t2j1gXfut7H1MG81AoOq7SAdG1Tn3iA5jO0pSPKvOzWUkkOghbiQU1EO5pC948acS7MfQ=</base64Binary><base64Binary>E6g7PQEAEAELwF0GAAFRAAMBaJRnAEyB55DjgDvSLq8oqRwYB33kdKGvHMhXnOaOnAEiGD6Ylpdggt1V4UTMe0z542JWxgEfOiQj1v4UxXrGEPuFHTZwUDou4fpMmwJxTPZqVAAEAWiUEdn2WO+bMrGyJ4hvzkxzCdSsZ5c6thElEymtm5j8I2AHnu8vqBifbMNVOuuanjpxKsbvHXPc6tYKVcZqgT2QMMSdWAQt/tYIPmUTH6bjGmV9S08ABQFolAikILa/Qj4Jpz/gIzEnH3YxqOOy5FKSRmeh0p+gxXaIZ3/wwW75O3Xwy39BQU5tth1X7WfzefgJ+ICQXXzT9urccYAOeIFlSC41bdiVC8BdBq0AUAAGAWiUDvA+473332MyQk7p1P07p7QfhmGjsWkYYCUF0rMFx//6J31eLVIW/7rz9Xv4/Kh24cYwiJK0HOe75rJwagAwqVriWhfXMkcXz+ZVmGMpVQAHAWiVDP66NpFq10GDLTaQl+OvA9XTfOVnEZeRNAaOVLBW6exS+7Z+FzNyjFz9AgO2rF9qlk/BjRzoqDCOlMlFAIrvJDGbJnubUzmbWb2FJ9SXvIYStfzx16BW</base64Binary><base64Binary>E6g7PQEAEAELwF0GDAFXAAgBaLsNLDzqYTmFjS/FxwHkoei1xSpUwrNSE9wHZrh1o6/nn1z0lDoo8a4yyW5btTpKYbUBb084IzGU7sjCmtURF8hpWMiO2MvrhM6AphUv+KplMNTlgkurVQAJAWi4U5NJzitrCvWyjma7C4JfraV7SC+1f5LNryPjtM3mCv6uzrQHL1HUcLv9yRgekIbYxaQlUe4nnmVG1m6sXrEW9KAPl0cosAAXj+t7X1MNt5pyMWlUAAoBaLTF0g/CtlYtrOM9rD9VnV3xAByku1qfIXHZonycSPeVVMSO2sKNIXNI7eTLpfHLcpYB1qPIXXyQz44ItjLXgXbrq+XpK1ODQp7vhi7xfeWCbR9tC8BdBvIASwALAWiR/egplTiPenHG0LbBRTc0XkDDGMwf2Oa/AUpXvb1MvbJzd72APAV/ISD5lFHHaROBIGDxxa9lqyDkgMFCOU7l4v6ZOqWeZiz0u1AADAFokMkaD9smt6cJB92anYs7ooBPpiW03lGkhi2cyfWtCPD0hAh2ZOh+hWHB1KTQqmT6hxobHLwIsLarwqs3RIA86ubW4TDZGYJ9rHrUF6m5QksADQFoj63KCkFrdYSUUm5y0pwjZjROyKseq3zQYseieQuffKbcKlNefrmfD+Lf5SCR6tWWRP0n6CepRL52vh2mYDIreBpaco+mETrihe8LwF0GswBWAA4BaI9xiLNT83LV26OUJ5K11E3+EaCqXwHc3B/jFAveP77jKDpzHjsriLAVq/k4CtAtI54VIkOMyyuL+cI45tmi4pVPQtQMsEXlt1b1t/VO0LEBrDw+HFpVAA8BaJOcOPQHdIXI1OXm6EYC9hXk+OAfjKmd/yQW/N7UKZTYyQbARCkp5y65aJcajuDMZbgsDp2se1MBC0WD/YHpPh+ERsw90ahBPKGVxVLL1E4b1um5j2ga3pU=</base64Binary><base64Binary>E6g7PQEAEAELwF0GDQFVABABaLPRjcdnbh6T2YGF8C0vV2HlrDSkJzYLRj1jJa7b/gFFgtFPw0L9EBKp8wB3gh3NnDNs+DqTnstf48J6Wsofc9zmPqiJxfi2DuIq4jRKKRhLSiDCclQAEQFos2EbXU7tk9JUpfgUZlAy+WLHoQb40+umfhoL3hwXOfp3J86yhf1ER/yJ9f28nDD/H+XdN2c74kZYnBEzWnALmzywGiwFV4TQBk+huShHy9iczzRYABIBaK4QzQ2aL7JridSS5cgqnvAteIdptgfWtF0JONceBoZWvLcx4knPpvl7OEq6BOxbW5NHWgswSPh+3p/E6sPwRWIj64RsKcmxoka12r8/BQjHEw5ITQ8vxwvAXQZcAFgAEwFoq1Obb/GFuovkYhIius3MRBT0k0TaJENviJiw0vhDbX6BgUTlZqGoJmufhMySaLUs4IC+V+WKbVqPJiDvzFHr57hwIXIeRKJa6ZhSy+4p50D4yDmwLGqF6LSzvg==</base64Binary><base64Binary>E6g7PQEAEAELwF0GlgBMABQBaJAmB+W5qaj/+WnJa2cjWovn06/34XYhx4fh3iuHJFsxtQQ0DUOh7D8qNFt/frmyfWd/PcMhuFqCHcN8us52SMKQfiNgb1zUyyUEPUIAFQFoOxTfzHvZnS5SisdPLeU5TdCwL6OZLWbtdVVHoRf8GVmmA72QpQU973PETUa40Tht2ukAcmcbO4bDfnXqXHdK91ILwF0G7ABBABYBaDf1WHfQpbOXmIIjwb3EjR9s6tfJN3f32PBEEyYmZVPLhb48lY41YUR72RJ86pILef71QBGfxt3pS3WndLH4j8ZNABcBaDaZ3ozqsWGZt5Eo9M1wFk2fNEDojtg3/7MXrOr1cUS2bi09k4N9a3xk/hVz5OkSb27lvx3M8V1osVlG1XPSxjDIZeS3JTmLwl/FPfpSABgBaIuC/C8JFvA/120DeErV+XTRvL7DGXOZACa7cOhjc+0031cal/RD/UWplYVtM8/x+1j6HF1bmH2mHb7Fa3BJYcfD4F2DM/S6Yp3/7IYlKBo8HIo5VZI=</base64Binary><base64Binary>E6g7PQEAEAELwF0GEQFdABkBaKvtMTBS8HRFojPV8bmugpQinSEq/nnWNNdgdfPOG80rWypHHPdqJf9eXeIopFvh0WLCdbQHMgWBhrU6XnB6pWKWotZK5UvkzXpXa4bE67DqcBqs/ZyYkRfrt/ZWVwAaAWiwMejt+16B/8qnbUvDlpbePwvvtg3pDTxTwn5qSrgUGs07S/BcVxnVqlZpux9harfYyB/gv1vaC4RuW1FQ/mG7YkkIqwh0/QITd2fIi/gtYVe2VCkv8VEAGwForp+Pc04YWhfGc/+pQJuoGAAgGQVloRx26lPsYiKzHApMrvNYp6Ka3/palFnwOmRMATQ6ozAdyMKSWHvIFnAF9BbQGgodGQeA/WXxEDyIuMcLwF0GsgBUABwBaKzv6hGRI1C+Qw+VbqgNoLnHEWIO3jZjs7ykdHMylHXXWux5LxGE+k9A50jWWx1kjKHPNwvWNgmIiFzWzZYf8r9q9ZXYlAfKGQK6sKu2mA99syPsVgAdAWissCpknPrSo0tSPL0MguZAKqc+td6ElvPu3D+ZWqhu+H8P+mKA/xA3vFx6ZZqeqMuEsRE/sG11sRXiSml3L53QJXtMLdnxsFh5/P8qr6DZ5ju11/wu+4hy4w==</base64Binary><base64Binary>E6g7PQEAEAELwF0G9ABUAB4BaKeKDYYZ/hSf9mSREJtpiHdW3C8LbKPhKGmcWZm748F49cdEgCv+koZyjKZXB/TtBhy9O+rBwRcar73Ydv6kZaVTovLtpOPZb4kvhfxe8fZDZwCRUgAfAWikpoDTGj8qh09DiJja2A5qRhz7N7p60NBhv1XfKbTDd/DvX7jLsGMBkmOEfwniV2rDmEHvzjUa6IHXScPDOQvoivx96oLnIBRIA9nNzCnqNAhCACABaDcHHjlec3K8/kE9lpqLLHF9SxyUhiJJZUydZdVGl4EYRMrSNJqYG98rUySyJv9Q6i5aKlBpkBI340KLG4zZXnDlC8BdBkYAQgAhAWg0+a2MMZDoRd1JUXhOONsyqyrXRpahSSHhmtaSNKyDr3YulD9PYEZqmceQiHvggNyJXTMz/aBNnwu6omGLasWs4NlW6zc=</base64Binary><base64Binary>E6g7PQEAEAELwF0GVgFDACIBaDTd4i24GRaXTqAD4L+V5wkM0MtSDd/LNlJhhIaGenOsqJIgge26LHixarDy70snGNLRHk7dwSYvVsROXk7WQIiBZ0gAIwFoM3jK9mEYaMojEcg57gl+ripklRKKaY5T2sWsO9sfrzBBZ4cwSjnpZrN0oKWxsztZzsAU9DSatsiytZqC+jw/YXXZLs03dJpgACQBaKRaXIgAUQsXVrsy7opHZvD4lcEuBGv6soiCKKChI2Zy9yGvpk9BzAarv7QW9p9qhof5XUCjeKo5X/VCPg6MIWgBVu0gVdhq8hhp+5/3YhShscGKDYKJuVv5dR33LO9tWwAlAWirVAzLwSyD0Tv1vMxaTz/R8MepiV0et/aAlKIxltghbTgziamqVEeCM72Fri6AL+eUBIasOOylccmuvT64jBfwgBNd+luQp+id7Y0F2MZiaRtZmUjeOt+G5aALwF0GHAFaACYBaKtEz5Er65HkobZhDBDhZBfY3Uru9pTztPprV5O1V6eRvmokkuyJe1R2qE9Q7ASj7yaCxQ7cRVo6bmKRYZM6CLtfOtgHvX1WV0Uo4YTtGLOAKkbMng5GJkuuXgAnAWiquqdbkezTmkh04spC8mmLMr8sPAPdhOBBrnZy0K1PD3eLGY9tchYgjnLJeH3I3MNbzwyo9TT6adwbvstg04oZ52p4xrSNhV/usQ+m48Hnv4za30OKibvGeisa8mNYACgBaKmZhsVKzNHJOsczccUUcHXxVZ3Fa5yKN+tWsk+t2dqzqDtH3los3PuzUh6LcMAleW4cXbYuh/OBqgdcQ9Cilcc9uPZOr8YVErx4KbWth4JKbxgD2+LzxXzp1ZI=</base64Binary><base64Binary>E6g7PQEAEAELwF0G9ABRACkBaKmZHwDBMytoPqajrXzVQjDnyV1gGslYkkEPgAsIfELlO8plFG7fhb6fLaq2fc13PQ63GuxpO6Z864XyQaIRX67chD2yokFsKvdQduC8k1UbUwAqAWinQPFzUrgAzQKIM1zEFpiNpdnEoqddsp0/P/q3WJX8GV4Tpyd1c03RYIC3n98ozsMMavfTzb7RHxpX910vaVtiZVL+eilz9BSFclinEv4d5iXoRAArAWg5cuunSTHv/PYXLb8gO1l7xYhI3KI9QgSMPzn9gaV80MBuIXHS4QrFjeGNdkFor1nypzwMYXzDF9d4tm95pgSL0QNRC8BdBkYAQgAsAWg0UlfIqs8sdl5GYU3U89kSU1razBjFXgel2bWDVhjh4JFc6KKhjZxoPUNTKGuelJpCa1D/TiX1eON1c46QS//xjgvAXQaVAEMALQFoMUDof3Qxxanqk+p82oS3ZTZK5ZVfkTCbIQbjj4FQiN/bhG9p++cYTvlAUYFTmQRMHOf0T7BW6/MciTaMrHwCYiGnSgAuAWgvdNaNwnt/FVPAkW+xU30Bg1dhm1mAD8AC8EzLda5h+VH6DHmJuw0ifjgXPIJEekpeScEljSjhuViGiBBiA5v+owsAsv+qTdaPuaNMpA==</base64Binary><base64Binary>E6g7PQEAEAELwF0GDQFNAC8BaDFdr+KfbKOGhabF+edqCkQ4sL5YwhQ350Ne4Pw59Z5Aa/TyHlEanNa07RKgU2aTNCGEJPEQzAd7LSurn7nPfXjRSgtei0be1p3q5x5UADABaIoQHLGQwBinb5LhDfHl/h3QM+ErrpkjDFkU0FeoI+IYd+62jrt8OZ8/IpploCMmH8LYfl9c1IcXN2S3b1U6k7VVy43VW2cScz2m4cnrGGmBdvCJYAAxAWinaiKFxxBGyLYzGVFU8U+wJ3Wm6tZxqfeCL8gTHLQ/Efh+kBnTNn2TY8d0F817F5w3caddLfVE7IGidL5e79+te4DVQegnkQPzFp5tlJR+rQQJK2AzZnhMEh7Xsz1UaAvAXQYMAVgAMgFosAvBSRjW3t2YR5NPbVnvD+BWjSkfLpWeuozPUP7Wb9Dd8v4a2cVozVXB38nzGef6ASbwVzD6acTqpc6uLl/CJ4bfXqJ9JYuHLWbiHd/OOgH/kcr7EQpxVAAzAWiuY2L8U3MmlJ9VdWurqEU+E5U9XRBWULqoWEi6GSEKyHecTE9qwdE8w1ULJPR4A+pmZdGSBdRk8I6GBPLQ+xjnlmqlme8MtDiRNGEte7pwM4iXElQANAForGaqd7z0JXhPg4EUkK2sRT0urCqinV0EtZwPpDczVYKLqyPRi3p34yM6OhHdutDDzn8vEm1Y/GzKipD0siA/MLl8lVof8vsnZvPa9nKtWx4Juj2EuW01</base64Binary><base64Binary>E6g7PQEAEAELwF0GBgFVADUBaKeLauVAjKxG+xK81qHIQkhDGmlPMkFVLq1uy8orM9J4q5jg2feOjZTDjtl0nXYnkZxxlwCxsEyWOlm/ajNalFf/jjIhSiYR4y16tljisZRKo5XqjVgANgFopNwPfxp0RgrRT7MxC26HJ1Goz00E+AMNWVOpn/0xckN5M/1soJgGkyvwO3EPfa6K4BO7+aHCIH8fovw2pIFB/EWmdALjovAFPBjSzZ1Bct2y/r/fYPmVTQA3AWiMTUXLzojatkMFg20Douv/viiRMnoqCHoabN1nbV5eXOWkIM4xiq0eymHRYwxQaQNvLe0G8So6JIVEJz+3MOHvQF5jaWLQKaUAUugCC8BdBpAAQQA4AWg0aBFhCZhLZeapol2rRZ7CkK3KFmiTrdM+HlcPHfRb08zf+IZQzr0A/Hl/XJd2Gs0BHYdzTf/ggbc7CeX/IfNfRwA5AWguBoO1kf0qibIQyvA7dBkYPMu0iQ6VSo3SZT2lLLmxWAxlKzOtZPojEFGXNM5EY9y3cAFyNbLcoNtb9mj5gHUryRLfELb47oh5jw==</base64Binary><base64Binary>E6g7PQEAEAELwF0GSABEADoBaC9BSrldFjZld5bmmt5hsgxA3iAIkHwdIQiRQyAWMz6N3xHwY5jY5Lr0uQEUXdokNTI2368zywzJ4t8KPfUVM/LQNNgLwF0GRQFCADsBaC8/cccHmRqgtVxtLcCPD7GNSAsJ8kPTyODPozn4QznTaXXcVrjOmJvRCz4izdx+HKLSUgxVy+tU1YgNQUlkUu2/RAA8AWgvgYhTyJDStEOs2lbyCMlbK63uWAsxPXM1yFxTzjPXVQl5l87V0WDqyhLB5CwH84XTMqplKfmAtuTr9zUkZaVIwPVIWQA9AWiNv0Y++nn0M159eqaipI3q1RdleZwE7RQUGvBwM3GwYfim6XT2wiS3D45vu0TDIVshoIMXJ0a8aML69XlfgDCfGBDIe/AYEmWcaW1wzlwwMZQqXAr3fSs1VgA+AWiO2Dvc2dw55xylqSpmZlQKTOF0DTmZT+a92ZHc8fZ31WgzF49QPN1hlcJ4tqp+JWnOPD16OrzcS3veepIzvf/TqgxU2uCGUaDIuKDWAiiAerGrpg8CyM6Atg==</base64Binary><base64Binary>E6g7PQEAEAELwF0GGQFTAD8BaI/zL56C8em9gUhzxZ3dCqZHjUMWUl9+wrhdl0acdwGvZx5Y/g7vzJgLq7St4V2JAyLSbRScQbe2HIs0UjOAz2u4ej5xbKoUiXHWgQnx8FLQsoReAEABaKmHYEr/b11azlG0yvhRPGK6FpAChph4IR1bFGvK4+JRGtOI5/jOJrRkOCpj3WquDFdi3CzrR8ORG6YWO1W5DBDCyJgR/fINXBN6FgA3mFvsYLSyfPtkVOoWpYoFGlwAQQFoqV1vtft0Sz+qm+FareFIsekyuQrt7IdNlXlD8lJoJVsNoNKIOm23QSIwBjTtKEO6Qlo0ZRk6ZZYdmgpeCNgjvKLpsDyPOAfvnkl58QrtDqWYIGwjDYV0PimQ6wvAXQZbAFcAQgFopNP2FKU4xG/YZjxQ4bO5asMPdYBW55mU4mQolm9e6u687x/9Ql6puEdvadT0bmz4XC95Sr4SXM+D4qpEI42t/WA58gSs4XIxZ3/eYXpmh5vEyPvQQksF6O6a</base64Binary><base64Binary>E6g7PQEAEAELwF0G1QBFAEMBaDfJKqQX8Ljx5wk11ri3H3eWpzPwiVgowDyDyNZUX29u2Uq7ekLDAJZcgSF0p465CWbgUFpWNaPYZFLW3gYaMHOtqsYOQgBEAWgy0Bhr98o/XJ0cS5mWXIu85LdtCFK26l4y2pEoeT9H6QvUUrCXJHEP7qtIeuDEyuvIrOAVQYvrSXXfL0VWEG/9WkIARQFoMJ7iHZbfhfd52JhWumR1TYZADwfssv1QVYdFmkKL3wPzGStYOf9w0eiP5Q5M+4V6q+rRE/CYi4FY7USQxwLRrMsLwF0GqABLAEYBaCsB/VWukkecXvdx5jJWAc5VSaHtPtY7sQKwyY9+ZBV4IElfmGU8JNNjh7HH+djKAt32ktW+um1b2SU3bdRSzx7I51Xs8+kvtojNVQBHAWiBez6Oy41ZnSar6wjvON/5/Sj2viF54/hRlw+xEWbbbpGE9tLJlDXCXZprlYeRXPkNPO8HrXd7PLj94Cg5AGQ0iyM9xzg6TvovtfpJEaP/2HSK6I9urK4Z</base64Binary><base64Binary>E6g7PQEAEAELwF0GDgFRAEgBaI6TifgKjuLQOaO9ECmWr3pMDPBQObDnnYHYogK+kIXbWXipBTeg6Jmwz2k35mHGaekUNEcQlnlUJyk7DP2b/WzRLB5oBxGe7jH/29WBYVgaWwBJAWiOTcLV+F0Q/GmBLKGVEYZQlsdepp0VXG3vX4mRpSccnkGPVqjxB5i46m/d6wojHVsBOtfMkAH4pxbwnBYYkLk3123nMI98L/46Vs11LCOV38jrxpaB/BBL1ylWAEoBaJDsjqpNvJG9R/eKyh9KYcBtNhS8D3OlPfy4BVQTeHt5/PzOhFcs1lqMPmAxfjiDKDd55yqDwPoLC/BgXi6ngLGAaVO+TokipmAf7yhqKS4m/tajDDMLwF0G/QBVAEsBaKdDSEHdncb5gC7M9mvvDOIIYNXZetv6/oRVKr7UKU0cNIIccW/t2vdWwxm+Ybm5OCUQVKlxSaoHMF1OyLgoawcZsIqyzu7dt2zEcHjjQ7+8HJjK8VMATAFovg6QQAiANi+bBuu6OtcXVNjYupvozS+gJPGM57kUE9nCYZrQWIkVkWGKxvpCkTPF2w2lNC8tyGc7e6sRhtl1+lYpdZ6gxdd3sMUnOWj5penXlUkATQFoMouCb1rJRQ5hPJlLyruNml8ADX8zoSxDz0tPhY0+dZYr8EgvOm75sNXjQcQgf2LqCS26Plp90fvq3pOmwmc4CwSCMkRbzoaTC8BdBpAARgBOAWgxQJOzbEevAaQtSyi+TQhNI8mXKksrAj1U8Xstxrocutwgu/xWYJfKE7vvf1v1yM1vvY36rJOHp8ndZkRI4D2lmywPoo5CAE8BaDEqEQDKXRWCloWZ0aJyoQYXQ5/hP7mt4oSpvSGk6gdZhUZjcNQ51CdIGm97H6k0jnpCq5gkRH3/vFTnAcDgdOiXc0MCAQ==</base64Binary><base64Binary>E6g7PQEAEAELwF0G+gBPAFABaIGlojwyCmuH/Ez/vTz3uNi19sO1zh31O7FgC5WCT+EWxuTfavIuiwovhqm7+Au3EXBMQwhN4ZeZo5ugbH+Tr9k/XC1q4HnBZMjPWT5uMkgAUQFoL3Ui+OnebAnHzmXWjMMfgoASJfVg9Rnuf26MHZ6eIL9wh2X2RL8kkJqNqWFH7IBwAqpEGFI3kkZijE1aaMZCpIXEgIMcWuJXAFIBaIFzrt4nsW8zz/q9yvlEXmwZ43c75mWI7jYM8k3nYFuSJbPit0l90qbtYZLS8RkNIK/25LrMeA8gceaR6KGdRlHq7spcvOUMVRE2b8vDnTS8EwoaSkV8C8BdBmYAYgBTAWikPiAvpS0XXoWgB2ZmZZOohwJcOlho0NtsujYvLTSdNH5ibXSTueBB/6Mk410BSX13JfgdUuHOrZSfa7CdRfHt9t5TzKhYLmhHMgYXL6qyOZQjdESsiF09uu2oyA+fU0hfNaZg1Q==</base64Binary><base64Binary>E6g7PQEAEAELwF0GQgFTAFQBaJBq0riVhNMKZ513vcXM0KAMcBJqCLnCUcIoq250sVysDet+XHlXOC2AbhCkk1oLi+LUWccWo0C2ushhiHC70QCQOIcqQPMZHeWcwrg/RsLbvxhPAFUBaJAh78T0/kf76YVGhne2ZJ4ZFA/ordNzBq2N34SAJcVxJ0ZI0/ZKLcRSHKIXnmuzeuDbjZfX8kIcAfTRKqBRGmYClqWHvPz5/WwBhd+M3E0AVgFojNitVHmxpwyet9OPMQlBtOGALYJDoKqXNPFcC9xMYaRM+1RG/jB/WkD0XqnZlQs4kjr2pr8DPCEVne+3NhxcpeV73oX5N5Pt7NKprEMAVwFoNjKR7yl8v1ONvOjXIyXaKtKxGI08YYv1JgVNfkv4OVgVmUr/3wh8n1wOmFYA+FqfhkLeJymCQsJ54LLpI+Nf9EVsC8BdBlgAVABYAWiI10MoweWKcapmXComCkcV0JUbRs6npCh+qA9y5EPHFAeJw1Z4y0ofs8MIALFMY3XA3335ySjFKavmEe5AD9/NwropOo/KLhc4pEhktWgvZ/zNIfyYKiY=</base64Binary><base64Binary>E6g7PQEAEAELwF0G+gBSAFkBaIEwdDIC0XckWniHy5StdU+N7TuAfOFyBGin8HJD/u6bQJxElMeUjtfTNvDs5U8gLqaPCPbIqHM3zzZuN73Oi0fT6z9mUpbw0ELW+wLVDq6TDk8AWgFoid+G8tFhZm6xcv3Ehlek/NdGuop1Bx6NbVAfLb+JOCw+/xaeCvMzkv6awkgxuamy/uQGm9awoglvoWxv9toPNfFZNd7x9xVnBfrzNKsvTQBbAWiJHgF7SgGDytvyUaYk12eHPbURYZNmaBkMn+bDGTIJxNDraPGCi1EkH5Jg74bRM/Meo0vDpIXzkcqajUKh1MjCRIytZSbNw4wDCAKZC8BdBqQASgBcAWguAll3OEnJY5S/1gxd3ItbvOH0cceElPIWcoBjkhQDdFN95/CbqP1tMqRiHu2XQgIY4+8++ouNcrEQrHDRTsEpHo7IJZ8HC44JUgBdAWiA0EYMyZzCW+xPZlC5T6u+wcYAZc/DWpJhh6pdIvKKdlQboWZE92SU/8CVWoAwwNQgly7MGfl9swOIpUriGJsYRbbQBv8TREykPEN1ZUD9QQknV85r</base64Binary><base64Binary>E6g7PQEAEAELwF0GCAFfAF4BaI3Lccwp6GaoLdmI5pXCJzJiBFBV3Kj0/3z0K6eniDfvLoSOBBDjUc2uTjVF1bC9AeCDD+ncPoMqU+tK466l9giASZ1/OfPhcJ5Px+uD82RKtWSh5myMhNOA7eKq8dVPAF8BaJAhgDDWgBdXKP/OMIoQUo7/4ouJ0iuvEBzbAgrepIGcGnNCrCQEHe4eTZmfgb/lts+qc+u7UttiZIp8hxFbRS5olIDJPyoh1u844EOIzk4AYAFoi7uojzhRTXyaLfcEM9uXU/I++lroZmMW9HUSEplsMV5Hxnc/gClFrB9awOUrd/uSX+FxuFCFlaszmo2Xzc9NHWwkTQeP8y6chY7wStYLwF0G3gBDAGEBaDCkjk+6gqMUNWX9YipYXJoQwmRApo+/60DAjd7o3Bu3rwAQ8qM4qi0An1aFe/Ed1KF6ZwNesCPodDhRx0wpNLVc6UUAYgFoLpfwEV/owz9YBN8R3MAQuSeo61Ri1qsxByF0xIhDPz3vNW+qlwWVJu1oJngc+eWaptwaVrTOS7ygx41MiZ9M09gROs5KAGMBaCtmtTe82fDOooyXoIRufmY+Ss+Hl1PLyjgTx84l4aiXs/WJ+vnbsPkzeJo6TuNFj5W5RUgTLSR4immI4lEKGuCBoChWhG/7GZwLwF0G/QBNAGQBaCr2f22nlz1OBeBKAjynYy+CE1/jSsqjcLcpcqDTLBK6lrTUjWz2iYKgYN2OsMDg2N1l5UI8XInL+rMU+gIxTH/JggsrROn9q8MAn+FSAGUBaCrqX83e4TnfanNTTGyBub3GLMV1P+eGUrJIJ1Ylpho6K9jqkRruDQ5VhsYoZeMjvzaK4RK4GToXcReTtflh7sXCZ0lrNSKilP5Kjw+yl2OINVIAZgFoK2a5irqEqomno1lopSH2Vmn1SgzMAg00CEV1ACnaomN8/jkgezw8130FgJsVfFnKQZMh7/+1D/xqvxACMG+MaPJ2jYcG8DYkqjgJqXYTZSzm7r+SXg==</base64Binary><base64Binary>E6g7PQEAEAELwF0GsgBLAGcBaCtvuG7qAFoFVXZWvKtiKDz2rBCgvfgxkmennpklTS6ljbSkQVgKoI3YPIfDv6D94jKeM2Z7v3C1YWqXu+B5nx42b5EqFSAydzICXwBoAWiA0x5M91iXp2Gzhuq4hXyC/5KCeGi197Gd0mASiY8B0iokfVTCbTHPxOA7sccq9ha1MsYTpkcrMCKHXZ4VE5MNUiDAFWlp6W7KdQj4KctIUeUXZrLZI+LFmZOM9ux8C8BdBl4AWgBpAWiPbo4WY1N8s3SWASeccXqmDWDWPTuX2EhwlEmx0LSdZOfHnxNM+vryoecBEx3YikH3FDED794OUWeLmIpkkGCERc1XqsK3m+7JBlqozHdceWn/u9/4ECCcwf00L18=</base64Binary><base64Binary>E6g7PQEAEAELwF0G8ABTAGoBaI+LsJbIstK5pTxmCuvLBqM8/hzI4JBu4fm+0sn2iLzpyJccwNeIuK1Jd1vkxu2eXOQMmsnqqXYV6DBdpEk1Jojnlq+pnd0w+NYfZQiD26H1wU9NAGsBaIqtsW5tticC4tuOrTWDpXqsYTB2SQQNOh4w5VIXHzLmcE1Xs3BtWk6RH94nLCWzpXosDzeOleaI5tcMivQixlqRV9YQYoD1uN65rBBEAGwBaDEMGsiZLEI6NKYyR2/Xk0l2juVXKOUlFKMBhVxdF8yxOli4FKQxTW57UxAlOcEXe+t9wx8ydaGxLJaPebUZPbeFwqoLwF0GPQFBAG0BaC8/ccCU2nnYJzMPs1avozCw3aTy+mP47yqtK8kcaH7VD9NbqT9K7Id0IrzDSsAAc5YinAMs5X/EOnVPb/Gf9VNSAG4BaIjFvcwQrqeQ/tNqLDa7CMcikpd128xfBm2tpzS/6OBcmtobIs/kjTC31/0M1fwvJ+R5xzOJDLejNvZm7lujdNvAU6U+6dBX68Fqg9O2Vf+f91EAbwFoiOPSSTmomSsKho1QW3rvDuwS82AtKdHi0pRl1HXIh1Z8ZyBWk4+ED03XD1z6RiX08mGrJBxx/LGVa9E9dnB7SEt9HZopx1aY/KyVufj3pDtJAHABaCuNpFSj3jnIWzM3oZu6tL1DD1Rjzou+uxwSgq/XZ4hnTsIYp1QVCHhAQAneapmdthG2jS1/c8XrpYLP+ZACJRlFMokudRCCkBgF4cQ=</base64Binary><base64Binary>E6g7PQEAEAELwF0GTQBJAHEBaCmXG7333IsiO0DJgGBzCzAkVZBjcsflN3oxHDM8lPz8801LYOda97SdRk83bECjhw9dT4XbmRdjQTeP8OuZCXf1T5S3JY0gmAvAXQYLAVcAcgFoiCE6orh5s4b2ch5xiMe2Su1EekEkL5Ng43jfiV2Nf+nKi1+SMfkd0YI3dhWHD1BjxKwWI6qVhFysbxaC09a8MMd2kyOtRXNA0BbS+DFEqKgdbuPCcRZXAHMBaJDIMw6fWTV4TfPzEC2DU7QnywGOZiTFmKM5hsQnXNVZEa2Yh/JXbD0Tqq0RkJl2arkjiD+lyWbWULRc2ND0q5PEKzvPfZeXcQ1ruU9IyMBn0t1gU7LDUQB0AWiMRmzUM5UJ1YeP/kXdy3BdsCFcZQgHK7Q3qndAfwiRt7jApIe1BRQK/FwDWdJ3IRW1mJVpa/W6JjYA5G4LLpSzYghk+6IjjXe0HThJOeaRrfSXToc=</base64Binary><base64Binary>E6g7PQEAEAELwF0GngBLAHUBaDDnZLs1mScxREjPmUZYpPb5MXehGD3Y8UcQCV1GzhA8pGPFEvdAnpQG9lavNrZsBs/vMMJ8qPg3S+5Hc0FuC42UAKotX448xpvOSwB2AWgtb12HnDpdkxNHbIi0VAW/52f+GQ2/ZpiiBZFTs0meF/rZcOKF2UoSGMbZqPA4V6Nsz4jldFG4UGWbH/P29pU0gVR96z8jYFmqGwvAXQbbAEgAdwFoLVavgwxn8Dtj3PDtb4OHNaeWcQBAzSmz4X8y8vOv/v+tN+dNMUYXx3dYQC+oLfxmugWDU/oywZgVliEgeetXCmjRshzmuSBHAHgBaCrp3kGT3Kk1LAatUzrhQxH/EaBynjYwu72eZsEKciBzSWcLbcZlzLYFqXqdY8ca1SzbN4mifDTnNbDT9Glwml4UqaIx9FdAAHkBaCjMNXddZr+c7c4KLkPBrazxFPKlTiPp7wQmI8whoyRvLKU4lwVnlHOXzHfGUuD8m4z14tfhlD0+nriace5fusHFeEs=</base64Binary><base64Binary>E6g7PQEAEAELwF0GmQA0AHoBaAsapAsshCeOh2N4/wcghceOivkXG/6BTJtytfBv397nqKHKB6SVR2oXL+e4YqdFGap7ki4AewFoClfOV5VRFcPeTgfJs7NmD3mSx6coXVvhwiULqbjc6Be+HhRVlJgphSxJGYyWKwB8AWgJlHfdERNu4iNj4+rkDFdjeStWvEv9u34Ni8zVvC4wbPdboQySKUqTyTALwF0GMwAqAH0BaAmTtQGtszWuodhmLC3hGGE0bDpEA2f0FNm3Xf9+KUnLrt1b5WFR6avoAQB+AWgLwF0GDwABAH8BaAEAgAFoAQCBAWjYPeQP</base64Binary><base64Binary>E6g7PQEAEAELwF0GBQABAIIBaAvAXQYPAAEAgwFoAQCEAWgBAIUBaPv1ZU8=</base64Binary><base64Binary>E6g7PQEAEAELwF0GCgABAIYBaAEAhwFoC8BdBhYAAQCIAWgBAIkBaAEAigFoAQCLAWj//zyDKg0=</base64Binary><base64Binary>E6g7PQEAEAELwF0A7gJmaHKl</base64Binary></chunks></LegacySound>""";
private const string SCREAM = """<?xml version="1.0" encoding="utf-16"?><LegacySound xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><chunks><base64Binary>E6g7PQEAEAELwF0GMgI7AAAAaAxvp8Pfo/B+ef9fvDBEVaC1VnM0OXqORsKDoqsvYCpMJ5TMrvGZ7Hf4gKgccvQIETCEh9h+oTDZgsVAAAEAaA05/9dIvGeWAM/Vxt6B5XgQ/ueRQ2yRzW9b5pd6ukhoMJ17ZWgYK1JU+fGKK6QvlHywt9Ij7tMEQ/beCdbV4D0AAgBoDTWJJROwUH44zmfQQ+B9OY4dPdO0kl4JFHJyK9H7swBxIVdz3jVwN40dJ4ihVHSlj5uWi8m5lnDywUmWQwADAGgNOf6BnUtD2b1JztF/P/NwmPfTQ2mjdxxlw11Jlakjn1MuddeRBwVbxDVDtkYXN8LjCpB1umxUU+0fausKPa90YZdBAAQAaA05/oJlIDF2m1Jb7ZljOvKpTMo0kVzamvquDb68pB2X0cXg2CsMOYyq+KYVn81eUeHD0ZfZW0tcIgReQ98gxhhHAAUAaA1Vp33170h0vRBZo7x9gt8Sx9PcDnED8osq6GrBdlgYTac4jcdotQOLQzqQ7ncIWXMaIfUyTpyLg0A/LjiWPJy5d3yl61RBAAYAaA821vI/GoZEd0CtoZQKUpvzXSvcYVeSvEJ6CMPHRgUlQ9a7X3AenOSe4hNMo2RAXgDvrUAMWH9hvBMlZ71YqWhOAAcAaIAL6Ud1QSGwye+6+gt6UQzCOJ6T0+Lq7AS3BKG5EHNadWipHVZL07jIMeL2z/2rWDv66hCgI5gjGPQh5Nc+Vkh9B2tj86wMnvXUEZNaCRiI5A==</base64Binary><base64Binary>E6g7PQEAEAELwF0GXABYAAgAaJHLMLdmeHc9j8LCg+6Y4hakX5jg0GnNofoqny3qzZVzXaNEnx6dZe75OFhMvRLay/08apCMdDZrZO/twm8QbXH1grgy+wQrNX6oWBgoUSJh3rq6NclgAQvAXQYhAVoACQBokPeG85/KSDplnxdkM/0mnjLeVDlgTL0eMvJz5izQU0L8ZgE1FUfmiuPhYzVRtcp3ynJgJVxANgMBE5k/R3K1hRBFnlpOGeQLDxj4TU32TXY1k8Oyg/63OYpcAAoAaI4p4kVwk8bvMk/v77day/l1ocTSeKGfa8m8o35V/f9yHV57lWV3qzxN7ZnVyUmT05Ha6L52QHSNo5zOBAAbus4d3MyPhWFDKf6VOuhyuezwalQxaNBuwhS9frRfAAsAaI9nmipPoUSXKpd+w/xCPsxCn1KJO+GVnIWwPtuRqVEGxt2JLG47Ed9QNzNqOsQde3dITgzASyhAm32JVIw8XURQyepDHTSv5roR/FgA4c9QIi4xaMyS+bqaVSWbiggLwF0GJAFbAAwAaJXkOK7lZ2UZDD40DuN7xsAdr/F1MoF9851qLosBpfRVRBQE0pKdOTluL7dTAP0OAbXO+ypG1gXt8rFM8/paPvH2HL4vtuZNfO5crfGudU5SgDLLPemFBh6Lil4ADQBoule7IG56vfOi0f75suhGLqe3kUrUI/IoaHSX8h6qkF+XE+1GXKeJABQ7rdg5yIQzKH8C/0a/hOSGbVLv4svsUGDVdksD5OpyoqKiSAMBhV9aAZWJkVFrjhYaj4EXXwAOAGi5p8aJ9mUSj7wu5ylgSPL8gvqYZY18mWKGUNYUbrjY1DGSgY0BgEcu8e1kM3WejJwZHlczEDd0Mv5mWV+Yzf7+ieTVd5W9jhLmTGSmGO/AIXiroVgAW1WgRWQBGOeydyn5pQ==</base64Binary><base64Binary>E6g7PQEAEAELwF0GtgBcAA8AaL+rxVQFsPyFsZoJ1ljXs/L0H9jgFdggHuLJAX5OoCpE8Mv5egKzId5ipbZ9FXkuzI8SxW/s3Pov/BO8wLcOUpkzt4OnUwwRVh52qF7VrA5dRTx/pfDqQXXHV1JSABAAaL+t4JvbrsoaO/o9XXk6kVaeVe/o9gKkAXzkldZSaxUi6dKvEBSxzpLtBuEoxk0R7VVSVgThGNDnV2jUgwmPnd9rNO6jPL6qX/dHpzmLrvKRygvAXQYmAVcAEQBov61YkOY9lFfY8R1SJ2C9aHSEuoBDj/yItI4Mv/YgOsYSRzHoDYdkbLqA84/qvDOn7jbce2a9FfS0B0fmMpowPVCkJWNSof1ql7WsneVSpH1BuRB2Q79gABIAaL+tUjdpnx61QaMA429BVVkDzKDsK0LSB71aBgubeqf00YOXOIqAFMnWuIwbBy6cznddT6Ayp7LZloZ6C/b6+pBHRKA8+9LIEIk7ONEGztWpqrGGQXduffw2LoFXc/sMYwATAGi/riceaAXqpJzZqlLGKLVRhnwbkPKv43bKclogd83EIdmMAJfQ0NrrYWY2ukGfZkRSOc/AXKNZzIBzZNQIGIoHNBan73Qvok5EZVISQcY6QH25su8RZ6S335fW0n0bhFh7kjBmC7U=</base64Binary><base64Binary>E6g7PQEAEAELwF0GsgBVABQAaJXjjeTjqIxTFl9LgH/a57OWIfbrn8kEw/WP0nhcx9HUu59HO0d7/fzLsqJbsBZC3wz6ifsUviVeSjto/+MafRpO9ao9T95JgYTOpJ35qe7GtYFuuFUAFQBoljDS3Zmwmu8XgAnp/YvwkltraVTcBBqEi8baE+51nn+vs9XhX0gc0IdMFNSrIfnfQ8fDp2H/ZOEwhoEhYTFgCHO/tMf/pb7/ypLTxtLXdkH3Ah+KC8BdBv0AUAAWAGiWM9KIIYH9yyl3IBJyOk0BF2LTWcWHjquV3eykfjepQowcvURwXtFzDTcklU/X954dGYrLCfldKYM/FpTbDXubdh51oRbOifCOJjrB+n06TwAXAGiWLDxvmorwVwqCMk9pNVf0AX23jLv09IV/bfedoeyFk5upgHc0jmJHcRDEPR+QvA+Oy5DZcvXtk3Wvrjr9ZVAOhMZkjN6ytc2YiCj5NodSABgAaJYz0oim8TVJbkUDZfY0Stsuue85qNabHlkvNlJYGe6moElZB0xxekrLir+EMFwPHciNrpWbEx8y0cPuNOaY08MN3aCxFWvrfzTZ96bG2uMJyp3v4NM=</base64Binary><base64Binary>E6g7PQEAEAELwF0GWQBVABkAaJYz0oixckNXRY+Tp35qdRmvZve2ThCVkFSaTgp6Do8Gf+tkscG4CVGLWLMdJ0pDG7JJW1VRwD1brxfSen5ZVS25gWAFNeJANxshKpMe7b85QWFEygvAXQZpAVMAGgBoli2K89+Bq+qm9GwOR1OLUqdMCwMPFHIzqf0QWTRFmjnpvpcAt9bjrZn8k/m3AYEYpTPKvHd0dJjhYDsLbK5BDNOEV+FWbsDtM/DSF7C+VmlJCVQAGwBoljPSiCGCdDhgLcp1SW1N7T7qp/eQVAbYbpzATh/+VcVuUmA2xVrEBRsoOpSKzNYZMzS59g3wXRIBrqnQr+cEZtL8TbWwaQG2EWCmBZKIykMi1zlTABwAaJYtivPfgawucUe5QEahMJ8oS4TP7twzjt26WNn2BtCNtKv8SuHL0iXc/tCRZ0tddNGForBK2FbyFc7QmJdLFn1DlZezxCMzS60CMJb9/tBQzAhfAB0AaJYn9X1BFBlIp9ssudtDd1UtRlh1j2mT4AbLu2ig1DBQudKQbMirdcLAaaximxvzV58/DJLNelxhmO0NuJCYRS6nL658EyvVhh9GGxJGOFJQ2WbjqMhS4PCJ+Ifk99MLwF0GBwFVAB4AaJZQiRe/69S50tC+CZpd3iVvYHstHXAFcZVbrDxGel89Sg0wXbU/7oiddXUyOwJtehzvUDQcOg4s6j0Gii1LECryGq5GdgFOY5zWPZ7yfchujQjJsFMAHwBolpzPaNdnNiYvJdG58FKGNEzyh3HDdHSGBnS6zt2qFk1QAfhmIX/Gfys4LUOrlMkGlR2hDoecVViMb7EL8/2ihGibFjDoIqwkLWeMIFETAgSogVMAIABolr1+q2hOz467jVCMMlMWUvO7sRvgfPlnOKKLbrIOrKaex1afOJQqaK1tNmGPBgqfwhLGzd7lMCAPeMj/iJ2jXiHHWb4m0jz04a2zGsxcr+xfg9V1d8U=</base64Binary><base64Binary>E6g7PQEAEAELwF0GVABQACEAaJbrZkooRgrIbA01ML/cDJNEbpu/GU9k3lL8p3T4Lq0hqz6HMUfYHx6ccRjkp83W1C/mR38TJKwq+iuS+JrNkbjzv/E/VH5dALRfcvTmZ/oLwF0GAAFMACIAaJbrZkolDekXP3rTpjo7UBkABXkUUcqZ8Oig74TpWZfP0AHL4FnNtlCjyPy7rnMuR6cc5HbD89seyuzld4aVuHYSFoSaggZX00ydiVQAIwBollBQUKUJiPi2PCSoj5dGU06P55/KP+Yk5lcRyNakyMfZYTL3eMF9qzoUCdhNJ7SVs+CBHCafp0fcTgtOtlAlJavfmOZjy0wkF/jPUonnzIeJMklUACQAaJYOtb/y4Hz7gnwssXgekf+QUyd5/QTYJnozlVHlKZF0p41eJkqjX4enRstk0SEj8TzxazMAekw8qGvspO7cY0+zMpjTquuu7I4gg/ro0VHn/puAONeADg==</base64Binary><base64Binary>E6g7PQEAEAELwF0GDQFXACUAaJbn0KguXtwhBhFeCXJIWSMlrskclXz7PqqFa74qsBH+Y4VHPCCNon5VY1iMmmFPmoHS6RypwFtpvmsGKIWGLE7g08+H1U9rFkjY/UD7GYH21cNAJ8ZCWAAmAGiW59CbsH7v5FkadQzhITopVCZT7TWvTnb5lAtCqQ2oGDtzt5nm1Lam0sHUHNVDw5H2KSYn5XxYMv7sSRLeRrx2fK5sbZaE/+ze7/7RR8kMeFVZMOWsdJlSACcAaJcJhKCQOSIaiWJyIol7kg1j2MargE52YZsNB6AWgaS5Mvgk93aosAtg9Vu2t5s7kc+UPvybj2R1C7ZK/Zrm/yuZVi+lShhuogzuOJTm/XiQzAvAXQauAFIAKABolxiMFbe/YsVSAc14rFyz3xLPv8tO0//Py9m9yI9Qyoa4Fg23lo67cSj8Y+aD1sjjFFJpD65o1sVRutWOAQFVj6TQ5yYDLiFnBnqZtS450JVNVAApAGiXGIwVt2uiUxLYERzIQRDcQUuO/DcXcHRI+v5oxy/WI/qHsMGexaYeFitDG2FYHzbBaZ5zPredNzCT2ueYF7vwbyvySktuMCuV7t8Abf/XGKtmVHhQA0E=</base64Binary><base64Binary>E6g7PQEAEAELwF0GpwBOACoAaJcOfoKykc2Y1IKzMxN/prHkZbHWTMqMhHBnRD83E0Kn8YPEiqi4Y/J7xekEAtEa62GG4tqLaGcEMOCdxJzqyRQZHXRJ+Nagy5o18ZRXUQArAGiW3l0QTkVf6U50KsHincK/QewU1hwA9G5AMe7xghh1cWKW4NfLwIkLa+/JSWF8uf+tqUAZvljqXU6KUtidTaZnDTjHuKaoKFccZ5tEkXBrzQvAXQYWAV0ALABoluycFTdSJ/nkaAUbPWUxJ7L9L0QQYCswxI34ORokqIwDomCZOM8V4EoM56CrGB7gqwO2+MBnxpkwmG7ANgrplxYftPMJIuXGhblHwJx83dVWkr7KzsijG4MFjlJXAC0AaJbn8QfrHIjjnlDpHOOyTCg+CddaWMy7G0oBkBHeW1pv3ynVby9vNeZ5mW6ZKHJ4WOHJ7jT5pfwooP0AwLsGr7lfOEUpl1m5b76TuQV69yzAqtJ93MzRVgAuAGiW52UQmNzivnraqgZssy9pCHd1KBb8g4hyRLoyQHBL+6FOKzqEMBkB0+P2rgrmFfmo3JGfNj/5KWfCgfNk0Th0vOhOxmPZTQ1IkZWRrOYWd6uyNq37GPrT7g==</base64Binary><base64Binary>E6g7PQEAEAELwF0GVABQAC8AaJbiZtZjeQ++br2IJdW3Rql64poGCs6qAp/tNJ7XzpY5C6Hr70zoipStI6lRb6Ene7PQMjPKlBlwO/QWN3stUBC+Gqj7rcJbLfIn3iiYlGALwF0GAAFRADAAaJZ8/5Hmgo1glgnRYD8zxhWcgkYoJz6H3ohb0AZ437twJeDMAFHRenAlIbjLsCG9mdC7HYn3bXCGd3+i6FXkw9kXncxsl/RttpR7C+bzYsqPUwAxAGiWq1rooz4gW4Gx2U3ZEpXFY97aTgLJQMQcz2bvZPAQf38j91MkfieNoj3S3AywMjKcWFUoBoeXUzfw6doANK8rRiWuh5LAPSm6n9xYf1ZhaVfVUAAyAGiW6sAbXkxInWxKZ41PBYIzw55wJyJQowL6VNVZ+u1Gz9EgRnu5YtDgWordSSZP9izgiTNfzL8Yq+gYluN3DGS5TW3UxmG1UtkerbC/dxIqC8BdBlQBTwAzAGiW59Cqa4rf7wrxB3BXfx/BRR8QjlZ1LP7H6m12JeBwv8jPT0CH7LBNAiuXkE6bJQwEEF6vMa8QlFCaokPiWTJbvuLurkvo02TvojH4qwRRADQAaJZxN2F09gc4ZtgoY6T/mu1mKN5JeGZPROXO9+fSGZNDcOzx6JBXJl2/+MJo81ppLXDlNMEVyZseaQH4PLB7qBhbglLs1wVqEmVq8RqlkMrVVAA1AGiW8DDJd2QHzhfWkov0yF4HhYlz1LQBZ6VG0Kekr1jwpQRvmxACx4wLYRA8zbI5yAiYNSidLf5m0SuXTBIsf9hznXrrNWiW1PLCIFOY1kLZOXApnVAANgBolveNThjJdFnF3G3fYPnqyttOq7oWbQo2HUqoikKYA00YfGU0FZUuB6uBVWyHDThoyJj1OaaompbH9lU9aTylT266JBdlmTV2ZYI5bklZCR88bnc=</base64Binary><base64Binary>E6g7PQEAEAELwF0G/ABQADcAaIVoAdSkJdrXLzTTsCWHNF9MMOYPn36BVv2sGRdwPKLStcP6DyZpuwZc43ACC5v0W3X0JXg8yzNHDgGjBgk58SGgvAzYKayd/pkiqbVPWxdPADgAaJbny7hZiCw6iSus7fWCdQV0ltqrf2S5jozL3QLGZ85Ff5mYNUTxI+CZML8L8eaFhNJsdHv1GrlfVui6vp/gMUahsFL0cevoZc543mSn2lEAOQBohXrsnMkHC+qG17h2pZ0EMSvQjBgFLDbxiHclf2ENrDZrZFRMjD09ElUlj9645lxOvzrVJrKa7D36xNfRAzNccDWDoUqAhTLipYI9gvK5bWILwF0GVgBSADoAaJbmpAs1DPfFo7dUFzqfl8XiNbUxd0bWpYkl1p4U1cUiDfJqLalFZmnJtJFgmcvuc/9+D8JiKZZ3ApRwsRc9X5ySUzpFikFr0cpMlG4RjbbdWRSJgg4=</base64Binary><base64Binary>E6g7PQEAEAELwF0GtQBYADsAaJaUiCDm6pbhD7Q5w0M6KHl5BQ6TG0enHM8+Lwia6aeUtvwoOQ/cjel0cQSowrmUaRJXEMPXCwqMbxKmdKafTmiI+EG2F4SVIo1G/2hq2myDjV4muVGdAFUAPABolvgfd3iMMbT4+IlFr+sCWg31oOwdn3e1azDkmM+YvMEVytzETT/G4uVGjx/A4RWO2oJwkFgVdabz5mcZUMJF+AhNZPBOMrizU1QeXrrDbEZK4CiTC8BdBgwBUAA9AGiXQzvDa3zCyPnFaVSg04NtsC4izX9OonOVbpmOv6ua4mWwMPZXUmO3VcI8NG7m7/7gq82+LOf1qYqGJDzINHRAXfeVDZ/mBIPFJ0f92R8TVQA+AGi/6J60w6ZbOhCqpLORl+28/xJeFaLUG6OIrSok2y/cUBmuhRD6pleswljYh/OKK+b+OxjBEqY7CYvcSohHi9qzeLD+nDNEueTAShrYIrjSabOZy5RbAD8AaL/pelcdxMfbr5TUraUnCrb6SYyRSh/pTBJFllispAsUeOuLJqA5r4pEkhv6/1bLbC8cD+lVmbRWqJkLs9lyQFUV0Z39oGQcKwcHGIBccTsJiMARWo5Oayh8G9EZgeA=</base64Binary><base64Binary>E6g7PQEAEAELwF0GDQFVAEAAaL/rip+lLwURSEd5HLyh3vIicBH6bxgwG4OZkRoRt4FkfjMSEkXrqBm7G5IiO5rVuOYJz6piPEi9vyGSvUCA3HUU4cPX9RcC7V3Bcvlpfa5Mk9zze1QAQQBovEdFVjm4spRLbgAX3fqeWBv/gL+r39z23smUtkgjiRGGRmeHjIiD7VuJd7t1XD/iSpt28O0/Y9jnpg+Vi58Mc51XGxgnYbhV5yhTTS6/wT8HRhtYAEIAaL/oWxD1Mvi7S7X6XLnlRG6dtDwsFYs0u1LDm/VO00rVQiaRierFvm+iFbEwkiyvn1jQ4Ia0vT1m0/xhhsKVCmVOXIJ5Jm1LSzJT0cRkPTM9pCdKv3B0kwvAXQayAF0AQwBov+jLwMGEwPLrBCThkve+DUBjq0B+GanmDT/YM4xzzBDqZ57yYhBBFr44RxreoAy1U3BaHZSCMrp/WWvmKn5wEf+qIcu2VNAKtfSEaxjatItwEirAktmBQ7GJBmBNAEQAaJc/pcHHr4k1IJc8HYqEfr2uA3cVW17cfT1ASp4g1O3YUTDmBnX5GDgl/1065R54zo/MEoMzN4thdjTutFRjyKahfEX//VUxm3xErVJtVueh</base64Binary><base64Binary>E6g7PQEAEAELwF0G7gBIAEUAaJdEeA/umg8GNP18qt8TEpgligm0PsPVSaewoEMB2K0ak0HUymI8Wj6dC38STUms4n/MdddoE1wiHhqGkOBcxEQMaUcLX04RTABGAGiXP6vXIl7nsJfRuX5wdTT4Lo8jxAkZBKi/ro6f9uKEjbrkUMHuM0gY7MGVuPNjGa2jf9hPa4bDyIn/2Pdo0d6smPNpbH5i9a4ZGeBOAEcAaJc7Xq2IbxvTeoz0J26wFqjIItDi+FoMxsll1pjI13lA1BjZjVrULk4hGeb8A+bPLfmXAEiKlHKRr3+RU6lqF0eLbD/wK5iAy4IwDIRJC8BdBlQAUABIAGiXF/PEWrDZ/fpOEWB0frIqm7M18tekF9Inh9Ln/4HmFTGYxEvy8pstmN7+dwDkFvMMrIgVngdEGTONfeNKUioF2uPvsth7GFWPAQxFjRsiC8BdBu4ASwBJAGiXDfCD/+spGGw1H45lmItpMTnG+yno7hgMTBiJv5p9DI98eu9uorML1z4nNR68pIYTHrav/gK1ogVSOMSNoN6zp7xYs5W7up0X0kkASgBolj0LvIBftfgWvympgR+hbs4ONYb9U2197wKa7MmGqL/MOQQkKnJibbKg1MwihCEx4wF5tql/t26o7NdAYT7UV1PEdcfTrb2nTgBLAGiWLzU1iR0JAAKC8NY7VxYVktxuy4QW9BDYjt88ug7CEwteAgpRLmDN36nSka63A3tfrjlgWlcDuc85Lh1zq9tglqaMi8chWMkUxZce0A+h2gM=</base64Binary><base64Binary>E6g7PQEAEAELwF0GWgFTAEwAaJYn6+9t7255f6wuxHMafDcMNNC90qM9k5qRWEQ23/3BNn4jb9vhVVJht73QEQVnNT5Qe2PpEHy0GMKNFSAch06GDxB5ni6moQoDZxKuE6K3/1lZAE0AaJadRH/vv74Kyvd4E5DGJwu0aog8uFb0n+XKvIfv73mz06KFgh92bt6F1rQLNt4CbtmqnurqrdIHytXFxJ+m5rtaCjwg2grxqCQIW89fWKbPBrvrXkE9jSJOAE4AaJa8vurieUKCoN0UWrFSAhqfrsObAZuArsmdJaiA/YSR5TirGS7kYrGi7tupeZJW1zRezwzAavQ4XzSNQLU3KyA8ZISqMPVvwOVhZNXIUABPAGiFfJFVP/t0izxgs/I/i4L4HggHzvgYBtNKVb54Eu2z41pCqjZ/tt9/UFmAwIu/qwVba/dKpwN5EYx9EEyjCZKbhUHaaXLJ/iqmj8BWpZviC8BdBgYBVABQAGiFe5szteE4gW0d6y3HOVlQhASlLsAMfmWmxjF4qL+4iOA9dosli/PRsnLUnKFBw4TMRiL6V4Abmxh8WLqI5fXEutD+7fbJavjWoVDNxNcHw0IzV1AAUQBol0MThhXOEpVaeKnf8RMWMRTce0FkMYHNwz/qi6fH9s/Iowv6SkisCeiFinSF1b/PG0ABio/GFXDFVa/F9llRvLrOSV76MmqBPWL9aIbvElYAUgBovCYxvsAvxNFbi5iNTEEhhBd0d69jDoFUVdjBQRHv7g5JR11i0KE+AOiaKgaRsa/MLxYxdL/kQ2WP6xACbXkxUMfITGEi1LuJf5LMm6Lscje4HGdBWydhEIM=</base64Binary><base64Binary>E6g7PQEAEAELwF0GWgBWAFMAaL/rKxIP3Zcg7wNQhcz2uvLINSgdXFY1HPmgTk0mD6QdJrYo1t7mcwcAoegRvk1UY6+Cfu9PSKXK8alkvBLwK+ejQGMcE9nqAVt6oA2CpQV7Q/cPIokLwF0GAwFSAFQAaL/rKwDnbbHuOrtdSQlAnfMaIF/buZG65cJQXA31RXmpuYHYm3+xyue4Cq3zzWnBXrIRK3qok17CfzfY+k5xVsTwZ5CvxXutzPvUdfy9tBKTUVEAVQBolz+pMFo2LE83ARnsTKKC7IU+xQ+NdrwTXvF8o8PLkbyt1GV2o6Hw6jvmNPXo0zDEqVZfTLPK2X2rYrCzd8uatHHdtEfJR83oltes5sdOhlpUAFYAaJdIZgyvmpMOl7GfkuylYa3jbeQEOs8lYqZd66i2WN+tNXzPnTPLdGpRmtqvHIkzoNEdPoXkhlw1Mj7TZn7VSbyTUuKoMzISy0zILnUG7yRfy/SKfvPO0Q==</base64Binary><base64Binary>E6g7PQEAEAELwF0GpgBPAFcAaJdgDEnLm6kel1jcqsMT6PDbmirrfepUQleerXL0gJ6lMGF/WgIYg5ALrerXAueZ3jGUtA/dvGa7nRBmEtNT6g8+ZyyN5uh6tHM7nzscRk8AWABolzpuWqb4X2KkVx7uKBFpqjbHSvRXVKVfh0arLn3vD4SJX6bbYY9iWETKBcSksJkuaUk6SW4Uh36ou+Q4JjJNtE3BtWMQXpH81+9rCQ/RC8BdBvkAUgBZAGiXHOx5sg3f95INTaRkzv9qlR11j6VtH9EBBGrbcaO5CPKQdZSUfuR/C0+YMf5aIeY2M49K6X8RW9ZZWNg/BSOglVNH0EZ9lwFHmKWniwmlBVtPAFoAaJdDE/+qsOsdwXwkH6NRIHZ9s5Au6IZ3iszJENfrkz1zcG4d0DyiPl6+kHJsPkwhcZkFTJnwIXNiNYAY3PwQmE8lUN8qNQ7VhGi3Ac2Bk0wAWwBol0KIyZuRYqGwLLpbdKSeDh3VOeOqTKYutU4WsLeA97V8tJ0KN9MIA6IH7n40qw9LMRJvjOgCC/DLbVrJZBmoe0P/qP4rYhZdnUcShG0aLA==</base64Binary><base64Binary>E6g7PQEAEAELwF0GrQBRAFwAaJcTqqROP1tiuoqz/wgSVNjnkOBzgXA52fuCpfcExyH5xizQFAgVru8bPNtlTaUe3ZnGIWq/JfcK8BQ4k9yKaTMjZ98Qe1KEMJsngKrVZfNhVABdAGiXJEHekTszvbr20qAuVWvWbhu5rhECnMRk5pehMtGHGaCr7hJZfsDOmjRfDHuCIfK60XJaSxBtj7qB2vIXAvk6qUnoDl+Dyg7b8ZCXzJ6a02+KUwvAXQZPAEsAXgBol0RmkLzaGkWQE4C/qHViEN774+GYDF6MtpaVSRi/41b/G9d+Ic5EqdFo9wNwSv32+zBbtwmk+KLAoxQZslVGKjel3+vKQBDfK9NPt1hD</base64Binary><base64Binary>E6g7PQEAEAELwF0G9QBRAF8AaJcj2xy1uSBM9h/3g5SfuVFB2G5RFWP3ZfjVW5ZBsILLVVaUe3U3lgQ67lpxCciRBG9Ty8iPtAT1B+iyTqYLtwCGTEhIv89/SH+Nh7MnodPaSQBgAGiXQp7BnGHfIboRZhINOxH+rqpNVuCsec0SnYckQO0IpJoOGsDtBRqytIxGTjjWJnDl3nPsPfmS/ZyeqKNwZSOPXs69H1IHhJJPAGEAaJdERzo7MX7xFgk4aGpcUVG7KoPeqGnO6M0/956QXcgNZyxNhOIMd1XSFvuNCMe6HILTqaCnRqw/KMVwc0U7XlKu9i4ly9T90X/+dn/gsQvAXQbxAEwAYgBol0R4invScaJ9/O1QWen09BSMknvq039Yb5e4jY290Lo5LU+INae+nlAse1xU6C8T19vLZbZnGoVxrQ5jlsn0Iq8Ei+5JGXQm15jLTQBjAGiXP6kwdZ7Tyrgt3KPXJRhFzAnVtxYfES8IGYOYpnXuVQml0XPcoZqcJ/Fb0U2Qq2h6BYtcrzFhkc+iJfZ8C6I1iBpj+VkyOXtgQi9JTABkAGiXCYSEMRdlue5gW5C+BXzJVK4ieg5igntarc1LFPtWOdPzQpTzMjzeVJw4Y69L5CumZe9KF8gL80ZYYLnC1+GWIQE+LGpChoux6Nse9GeQ</base64Binary><base64Binary>E6g7PQEAEAELwF0GpABPAGUAaJcYiIp70YSpaYh49FCskuJSZsZjuTNSlNTrsxnkQ5eCI6f5p8YCy+ApmNaAAfr1IXsGvx+rVzetguYlp9GEgz69VoOvB24EK6BGQHnC4U0AZgBolxcj/6valXC+loPuqGwEb+MrtyLuJFQAB0zDUcpYOuj3U7lctK/5gAWGbT1cIuXrhzfVYHcAYl6AlYt7YBD++CVeoPIWsZK17LvCWwvAXQYFAVIAZwBolxdKRZWW8sROzjs7OSZRBDYltm0VPIRh9X2R2St0TNZDEEq2detMQAQRemABxyJHxnrXcg4uqiGWJ8Vu1BUlhDcpzycINatRd8AMbVkSU6iaVwBoAGiXGU8tH07V48VqSWQ2qp1lsr3hG8Q05hweRZyfazyhcYRGv9BbJOsFNZMqgUfxgWjArqhRF9vi+TUmlmBtYjjpbJoI3AW2GjexDVh+v7ARz3lV9fwEU1AAaQBolz+WeEe6fwxjadeY25L5njTtT9c2cZLQu5XJlKVGUAT+TqVFy/MUW0LAHRJriDI3QR4+fIitpQ9vWBHNxKkaFugKVriW2s0mAtqqtCAaivLsoTU=</base64Binary><base64Binary>E6g7PQEAEAELwF0GnQBJAGoAaJc/qTB8Ct/XYBotFkGtaYWQyDNanMtW+51oO6Bk//iupw2/iFX3SlePXkVjgXpWtF8hx+bUjWQoBBhfmVfH9Q1gQKWcp1ssIUwAawBolz+lwYSzbIbCSAQgp1I/sHvYMY/ywX66jp++A6u5JfLcsfFM4PtGJN+5yRJHLex+uQI1xk+e/I4aH/yJqboJGaXrUfZOWVOmnPhRC8BdBu8ASwBsAGiXT2n7rGd1/zcsjzutrWhap5/VI5RyjiG5yiTDWqhl2crk4a5GUkzt0SfQznjK0EeFmWhluRTAFZtBRCV9iuW/O0ylvVPgaz07E08AbQBol0RxkVvybyEDwyHgBOhvSKCMbjC+1jhpbi+2h7S7YA7CpRKmmysQAJUQqHszRXbHB0hiZMKqLrVQHBc5Eka2tf/ow1USEewcA6xGf5yASQBuAGiFmREnDwByajLsxXoMEYInWEzeePPnUIZsJNmPa4lQAmA88BrPP17P5UVCXdF+xypzBDAM6Ph7k2fD9DoTHOsGUqnfG4z93xqxSEen</base64Binary><base64Binary>E6g7PQEAEAELwF0G/ABLAG8AaJc/qTB72qzapSaiLTe9RR781N6T/c4TWl0GIiM53rkg+KJAImn4yAYBsH818x4OnBf4Bi8ZeJo79uVvPxahsoRS/xvoWVC5SF2jTgBwAGi8Ig+2YukVcPDM8rgFuxR60bWT5xq2BLgN3vM3ZZfvcuNTLva5wAj4yide9IBd/Btycec8tXJNQM/9HIa6gXJsDqOIkbWV4bJ7z+uZk1cAcQBov+epkcocFkC+AlQkkJPpckm+c/FS5VlawxF/EWo3Uk4eIhCTrLaF0eXD1weHpeoUXRtozKqBtK6QZbL8QWGiogXXUpQlCuBoPyQs+sQFGsOUH2H+4cQLwF0GAwFTAHIAaLv8VyGclVbPElbTMet+5DmQ7Sni8WZrVB+/tv42F4CX7IIJ0uumOOgpSHVlp/IgmbxaAFP/K5OlTYrUBh5uiFjSQ4ObSkFHBS24mUw7xtG+4NlSAHMAaLv5j+w2qj2BI3f/oqYiKiivxzHXd8DHw1tfIYv9Y83ms2da5i007REpCsg48gPFnt63VWCR8XVKjlk4ozHeNgemf8FPcFmwSDFp3Bv62WFcm1IAdABou/4SBaWhKhdM0DXLlRIkm7c3tVVV3lj9RhiiAq7hQiGM28lenhJVPrCQvGn3udbLOjNe2SYqsxSw9Z7wUm/EAyBlQVnwjsiw9BmrEgvAFhbaC8BdBqUATwB1AGi8IgOQk1wzIvb/a664jbQO9mIxDYWokMluXsno0Eq3K+U3Agmo6rlgO9ZYOM+813SCh7YKH/o2nlT32fDsm764cyF3HAK5bBa+hcq8wpxOAHYAaLwIyVTFbLtl8kP75WmDWYtIfJ60CkV10FWjHgc7GM5iTE34WtO7pZK4rddfoELQURPMgkmVy5K70KrjVatkqOmcFqzT38jZpK9wx/JBCw/xDw==</base64Binary><base64Binary>E6g7PQEAEAELwF0GAQFYAHcAaL/nwHe25SZ29Wz+OQ3VOfHZ0qbKMlDXB30AGg3nFa49KGV7CbBOcnCWOyxzbMnxqe3XtkJtMtoIYoTQipWoxCA1XnTTJfGGB3RRPwXGEw6JTnv1fPfm2U0AeABolz+YVPsg1s9mqzLIJVper90vIgrscyxpdwlgkWO4gckxGsofo1g4jJ08gMJaZ39RuIr5wn/L56WsK2mh0S2om+v5sWwJBatEdEZe41AAeQBovCIPtpN7Nl9LC6NkHSXGr5bVK21ATBrVRbQuzXHctSmOlKtyL3cDi7hTduyj1OEQyZMStDfljlU7p5pwY30POnB/83fTmnDeT2wIGJDCIQvAXQZQAEwAegBovCIDkJNbpsvblYuhHJE62BdCU76hnOOMnImYy0dNZqvj3DSsLYAaBOqbb3dulsODKPhMqTPtjYTnJBI4O1gXfVYqDgdCb6weQTLjR09S6Q==</base64Binary><base64Binary>E6g7PQEAEAELwF0G7wBKAHsAaD+ex5Dtb8Y6teqFicDt0kKpEpkfCgV79IcCAheq4HAe0cQpBLM/LpM2jHNCnFLH++hx0Vi70jjPG4GRQrOaFQ1moJj7ie8j3oROAHwAaJc/ppuxweyCF638NsZnd6mNNfDXi4zrdC6J1cOTTExd2r5rgy5ykx/e4uNnGqrqXIgP1PChhrS1fjzGKklAy/fgQanPIlieAX+o9MIZSwB9AGi8GRsAo/PhW86yXztO5TIYot8m64ZfPKYvC7JKf8OLrHJKc0hmzEtNd7XoWFiLYrorAKc/yn9C/B/pTYPZApILcX5bHdr5GQgnogvAXQarAFMAfgBov+WTYssHorY02E3suomk+sFd9BXV9pXNGm8I2ecoC4OjZ8v7Z6ka+tCsp7DRqsZ4L13XeLeVzDxq/Cyc892dsSpl60MdAvgJeBXC1bSDCEjzClAAfwBov+Xq9Krw0h/ilRpxF8kU56JC/b68caHzzIiHbCha2H1+4JcEIz/PxkoM8paPGwePy8XBXoq+vHFHANzwK71Q1nZcTA5xc7wWS784aJ/eGNI4Adw=</base64Binary><base64Binary>E6g7PQEAEAELwF0G/wBQAIAAaLv3JYisV0rjEthfndI+NTHE6gR0xA1AAqTvB+tYrrWX3hc9U93/p2Hfzp7wdIdczBZkOVcnrUDTqIB4+drVC6jtSrR5ky2Yco6v79QvuWtXAIEAaL/cwHZIgemuhgOcjET+gJC/xgO1z1A7GItDxlOIjmMObpCF4RZhaxhAxDMYC2sCZUNnrSwsHMuRs7/8FXJbsIyMQtUBCPpVjqCLKObVBX1SXUd5rH3UTACCAGiWeaYktM0ltq3XxMR4/J6m5n3pXPTvIWkQrfhHRzavnQZO/T4z0+i+i0tr2IKh7YzoCSft9RuWawUmqMS7DDvgAqcC4+v78vf7gpkLwF0GowBPAIMAaJY1sNHi0cJxfYxsL91EONy7gyWBfilol66ndSPWRMd+9Kfgur4hJeLTLEFBOhyg6C55FMGp134/oY2ZoAYLk8OcoswKxkHCY2R1SJvVYUwAhABolnsohf1zWpQA0ivf+5VChkc2xBowndvsDbzKfbe1ysBRrS8E35u5vAjCrhC9GwxOwhRSFIcZQnAunaWXIRoY6fP4BOqsMnZbPPfTC8BdBv4ATgCFAGiWoH7oATaOlR+B9Jxl4gOAn+MWqxlo9tdh+2Qo/BkXR7CmEU/8o3/SZyN2v2BUXCibrzmtOclK3iPD1/7UpQPUm0+Ah6shkk6QEOT0a1AAhgBouoX/8f5FpkVaPIcDqBVAw1LI7yVbgpTPxGQ+Pft2bxjBsyXEMxjVxrFSadzCgcDq71SmJBTW0e18HkrsTjuX7Jq+LfiUw2qN/DsckRJBW1QAhwBov9FHrAq/FyTIj2ChniJBIaiz/ImUkOldYcwWhDKVLTBjVGzniXYMxWTunqk9bwH65iv8Dq13bHZGS6taekkPE6StXiHBn5v6ddiIB3a1dKvKmFFJFwx/</base64Binary><base64Binary>E6g7PQEAEAELwF0GBwFOAIgAaLp+zX2WqGXhH6bpfz3cWNY2V/Lbupog9RDZc6rKIyfzsoJRdKgiqkw3c4xgSsX/ZF1tGJgZUIP9rP4vOnshgKuBrsf8NqY+kgwTDjxLVwCJAGi6huervv+EyXAug8k1PBnGkltO1wMiNldH44M3gpebm92M7XGWyY/WjhdARg4ByDWGs5+PmNoviTxP1qMZ4ZCbzbHTqi4EMzBCCws6dMl9eejtihSYVVYAigBou3ZTBqntu9RFXIwxtinhjgf69sqckhL1qxKRTho5KPPHSxNx/R2ALQ4ICsmLc+0GtUp4lwCta7G4sr2+E3MK0mwt7NU0DHKaZ5bwVbtnD9zpZlBknAvAXQZdAFkAiwBou7E0cpKvgmJ+DWRKuwOs48nlc/M9h67nmIqn7nPJf8+Z1Y9qg5ggpGMtSXh0U+nC3ulBj/uMgPosyPsh09vuxKUuq0iabgEOksWv+PYa+rgErXhxdOx5IsgyWRk=</base64Binary><base64Binary>E6g7PQEAEAELwF0GWAFTAIwAaLv9+9iuX06HTq727F0AiniXZUIXAdJoqS1MY/YiP7xC2YSnK12ysHe6rSaTAsoP+z0m3RbwRrY8Ex3SBm8VNY+2JPzlsvWrLPLs68LGSgsGmyJTAI0AaLv4Y/ffpB/Kr2Yj6rnco0W7lFT8SA8v09dDn2QrqKL3eJ/UgkezHPbuN0BdBuWlGmob4STosvVfMXzNxAsBCtVc1B04IEr3rC/vVuM53xKsrgtRAI4AaLwijKPHamg6JfcLtl22blrFWkQewt+B/8QZ+BnsrpVmTU9SzdZUnhom+arZ/UKivivTaFx/ah9Yln3ME108tElJWG/5hD3YEPuYBA5QaylaUQCPAGi8IoyxBqus/sMHn/ZnQQPivRu6KPvwWad3ZW+qJM0gSCkkRWP2g1mhxYZILdXB4T4q+D444u9IZ0mwKwZeJEhmi48BaGGBBJPRPu4r/xoFUwvAXQZZAFUAkABov+hjeVvbvs3zwNLmXUx8XRNYAQ+IS4ShvPuth6uu1Ec1bnxFNoAXiNF3GNNZioHRRtePtvq+TGGAU+XB44oJ1FzDX5Ore+G7iBZukRaffzpR/8Mch9YPiQ==</base64Binary><base64Binary>E6g7PQEAEAELwF0GBwFSAJEAaLwijKPH3182HkEYhw+z+G4fzg4ydZn4Pj4LhVIhTziEaXQhO+LPj6wmtcLNJRO1tKxi7Sn7jZKjXmdiLEPty5nGasgL/QcrpPs0fF/HFy92mVUAkgBovB3Cc+KcRCC/GIMgri/vL4kvusS/khTD9WZ/VEYAWfSM2STAjCoGDUu81qhKA8IMwu4GE4X4g5kOdSHiXG4SNu19NYyJHOufelvkXMq++cFVsNLYVACTAGi8Ioz77rhWnk0pegk/8vwnC6EuIDoH1EjLxZuXHQttiPuInkBB7n3Dzd/KfZIXHXI7qjbKTfmGDv+17iDthxCSJufXmJSwWB2KX4i4NQm8/A+tmwvAXQYHAVIAlABovCKM++6CJKx8Vo7gZgm93c+U5NzwEvNrLt8HuDqNGUWhMlXlgzMkOCI0N/S2f0Ny7IEldpWzI4Wl3U5GYY7QJUNp2vBtoDr6w3ihvo/He3XwVgCVAGi8Ioyf5q4AvR0NfB766mXbp1FLsuZRdn89fC9VTc7/3CDzL9rBozyoBxvvHA8l21i5+nLxXFPnLykhWcSSNHn0aauXE0i9qB/ppjDDU7ywA7yGtEEaUwCWAGi8Ig16n2Ajc12xbofE33+uyW2sMpKiU+o76ObNxj93uFJA+vIn6K6pEo+MzeYPilEFKQI41FOYElQAqTpx/FeAJ0NEd7TL6zSRKCEfxcRgofs6OLhq3g==</base64Binary><base64Binary>E6g7PQEAEAELwF0GqQBUAJcAaLwijLFaXLAIUsBoWIkEX83dJ4zhxwVmfB/j5vwAj2qUYNReNiSa0AH0P1ebEtM7dkHczGn9Dnr44HstLgeLSHseVcrbx/Enev+ZyScJMrmxZoYoTQCYAGi8IKepeen3Rtqz0E1fSB7MUhhEU0/7MkBZnFeYvy+G7wOJ7gpCKgMRMMC+6vT+TswSXsUn0/jJNlhWerxcg02ybQX89MCvHGjtVlM8C8BdBg0BWgCZAGi/5YrbOGlDOaEzDPBGp0P352wzfoGWT3Alh4FcWQrqYTieJdZVh8WsSygVyg3BCsVh3CvE2SJ5XvgY9MEMY81Y7gzAeTiptZAd4lvUoNrdUZ1N0xUIo5pdgFYAmgBou/hxKYSO4rHprux36JiGXRRan9pXBG2B6t/OAbhvwQHQpZkIvGCsGeD+nKu+ULvgeFJBcqySpSZKUE6Po/yCrYNDDhOBfOUnLKRaTrdBeoyly61i1FEAmwBovCCoRskWDIRyRaa3H6bb2oYdM8cEkQ006O1V2MtS5D0fdw/tE6uN0nPKir/1+/Vg8BJ19w2j65vCX53ykfvE2ERKV+B4SuiAjWh/sYim4blAbrFb</base64Binary><base64Binary>E6g7PQEAEAELwF0GpwBPAJwAaJbngM17SnRAZ6beL57NP7CZHrvY3MvzC7bK/TaDAym/U6ms0BkVdoR6Ud2II2LFyG4tXj9YGZbSZifAN9cT0jqpxow0kSPXPggPisI/zFAAnQBohX0pZBMi8ZdhzSHQfeuP6xvdtKd5UFRPrwFd7tnUY4lUkMD5oFVCmhtTg8tnCsWT6l0m9AevsuLFVdy07VQlSwOoUk7WC5rJjnHX/+N/WwvAXQb1AEsAngBoluyU9SCo166XFUwEvWcePekYlLSjqGfU3ib2r/FON8cGrTYgAdvO/MCdA6KlYm9SJYKklBmV70eF6OVPbxIDXSB72xajFee4HcpSAJ8AaJcjfyc3lpob2wBMFFO9wPfqzcHLcEq8QZGqdFskrbDHqbCqnewxuzicypPUYiTyvu3xTmmI7ckOLX/nHxMHdqJuy3XTPDL2hHQQrS+cgX6UREwAoABol0BAf10t2IHuqtsJD+bWMq2WIJV7TnooMvU3JPA9QaRW/qlK1BuaLvdqANVeD4lm0ZzP7lF3pKENDqSqI1A0NilrTDDNHWqor1sIC8BdBlAATAChAGiXP6kMi6jrXjqKDSKSMEzB9ugZP0VLMIUUj6Vs/9Ff/2qCfyFHzAHyItNqbGM2DLy0y/O2Y3Ha3UhmciZWtY8Y0qvOsmvYoM5J99nnidr4</base64Binary><base64Binary>E6g7PQEAEAELwF0G7wBNAKIAaJc9bLhoHZiYhjLd7Xo0UCEgpSJIsJoN1XOTQNof/88eb34Yc+Pv3rwdNbLiKwsx7s7wH8CdHE7DTXHHB8E7RQj5cQtXtkQuaXgC1sdLAKMAaJcUUKZK0vWOwnEx9NIMgAF3bD/cOWGR7AFvsHrVFlUwtpLp0LKcOSmo1lOyaCGim9rcuHtnl2zR7NGy/cZR4CPQwBb6uSj9fw7BSwCkAGiW3WaQFuXPVzap3B+G0ODv3urWUGJmNr9/vK9txdm9yAARFNTLPvcYUo3HcUMt8mrfs+omEEjuSTp8oENTGdA2smFimBQwf9iotwvAXQYaAU8ApQBoluHfMqeCVmBhZ+w6sN+MGBg95b55w94RDjeOs4c4b9wYTOf4HN04Wl2vcVBLZTfJXRXLXJcxZmztERsLLSPbTQUx5Gfp2rkusEZaN89NOQCmAGiExcARyZDzcZ5o6CkvVNSkRiOdBw/VOpcdRB00aPIv/vdlKJZ1fTL33s/f/KQWdjB/FNQlhlmAy0QApwBoOI9RCGiCPd+Od+yjEskJaVZMod8eCJouPnNSSIrQuiq4IspbE0rlHy4pXnrNjgm1a+qj5R3lZBmbJZpEkeL0HbPeYD4AqABogEzHcMszpBUhzPfMlKRj8scTJZzfPnnC6phdeLdKDr/WLHcB2B/PRW2jmJ8HOQxW56k11zmYugbWWumdLdv9D28=</base64Binary><base64Binary>E6g7PQEAEAELwF0GSwBHAKkAaIQwv8Q0ceokEBbPTYB4ktUexp07MN9Nzq2WmEM/1JF0nYXwv4X+aPPXwV77urWAgDXDQXnmdJK1ce9FMLtVVE3BIfm3OaULwF0G9gBQAKoAaIRJ+HS5VbXfbVdNqUfQqbqwZX1+n2JR3cYmUJNrg7F/wRjraq+wtzLMPiydFETMsnA94d431tpBXb+aE7oOsmmF8kFL9eEuohB8f4ee6/BLAKsAaJQOtnSZXMiu/YIbkHTInR/QC1xrIsinVKl6ZXm+Kd47pl/OmnltES5XEY+UPC4CBjYEOP0iKBtAzg4kU6ppeoeSODE3QGiNN/b2TwCsAGiEZo6HUrnAuQ43zi1MBLKV9N1tarhAABFB4au4U8wQ1pSOwjaW8foGBR093YbB0T7hA6bgFkOO4Ki+bLhdLOjrUCZGm8W0/2xKW6pShr0LwF0GnABJAK0AaISPHHefX+qF8VxLTHAt/u2csd4mJoJLd2XR/ViI679bO6i4rxziDVJnT98dCv6NSUtNlT8euGUh2qzwIGKXAmo/3b127nqfUUsArgBohBoE2Ccb3+r4LlzoOtKPy/xObnp7GkYKZM+eBolHyfvCgBPSrJNawZJqf1LNihtJXZCQ+yALGVz6ZpPeg+zNwykRLp2RAl/LiTmfO9gP</base64Binary><base64Binary>E6g7PQEAEAELwF0G0QA9AK8AaIQC/3oCvwF5LC3OHH/is2NyIObu0CLO1ErG22OBTL9tAAUSpfgBJsFOTUAnJ4+r2WS8SRVQlEfITeCf9jMAsABog6MXEYbrPc8Lye8KtZQ7wJHPTofpqTChZD8NPJDxggkVqUVZR9WrfFWNU/CFXR+gTGRVALEAaINuXxkVjdQCxKYM3xrkkQJkBsXrbrQA6nQZLN/sE/QIrqhv6nHrm2925/Zqo+3jT0xxoPJWzLwVaR/FwtkmkTID5ZGOyPh8JhDFgBgid4q0BgRCqgvAXQa4AFUAsgBot7z8BzDeWu8lOYq21mZiEwvymvX1bxzdOzFey4KB1w31HG2G8PfO6Lf4Ryw7aBAIPK8JqCWMM5K3P6mt2GSJuKgtZL5DFKNdWFIU/AGToy4hBLz5WwCzAGi3vRcKvaBQXCqXh8Q60PI6szpjeMF1cbMPq7LOaA04mQDZs/iSBFg136QIdhW8q+zi0yawnPTvKVbxnBmiCB42RUh6ef8wJv0ouhhNPLpdV5Dnhvsnkc4raG0tNhKb</base64Binary><base64Binary>E6g7PQEAEAELwF0G+ABTALQAaLiaIsLTSFyfHLf2hT8kzyOFsE7bbP5XBPYFcgdyWEpn0jh974VFxLQ1rMh9UVJSK7nEoQPH7IIlYcBC+zndkRLlk3EaEL4BKhY9aE8GVkTZVy1QALUAaLfRA576Wi2ggMqgEHhmcqLDsggqEw3kqITaKtVg5QYfDPuVBkx/aJU9kkQC/9S0AAVeSBXPgFJWacp+2Xiit6shADru9MwDORXvyk+gl1xJALYAaLfFHC/jEu0VY72XQP2VoE9wT+0kQlFu2cNMZtHRj81/rD0s+oQKteIhX42sBLbwl75cYe6SNn9YtFpDg9Zq4EzpjlPR0DB5EwvAXQZPAEsAtwBot7lqdZ1aerN0h0RcMLxOhGNWqeQxRm+ASmvVWvlKBXCcWUAyoGuSlUrAqWEkFSW/lr1Co9evFd7c+dbx/6gzOrUSomFatIbuK5cLwF0GFQFaALgAaLe9PCrxfU1gHdsReMsd9JRg+oOtcZFzTVxtp7IWkJFoq7J7B/+ZUnp175iBbhr0FqAbwBW9+DYmcOpWneUSYUrMd2zgyuiWfZTDSJoPCm3RGF+b5yfvNsqDWAC5AGi367+yWqzUUUgkhcNsjgs7l5TLDmPAtlKWsgvUNGWf8Iu3q0j5DXuztkRAyL4nN0bLx9oaWAcf+TWI+cJXld/wVNwIg882TSTXl2z3LxhCE2PbSANEnSNXALoAaLfRBY8uVSfUa8bLEjh7tSQcgzFPyGKP2wJCDYpowEZQY8LuopfjhY+nu39SxMIs6rpByulyy+HwB7LmoZYRtojiKbaqSd+h2Hwsh8MPxWLiYx1KEcufs+1A1Q==</base64Binary><base64Binary>E6g7PQEAEAELwF0GGgFcALsAaLe9FsczecAIrWoDVP3YdwJRcDd4uAYoSNa5P7REAKOhYr1oUobb6T5NV67j9qlO1D/BPucoC4MXFUDjOaJ54ShOD/FgeGxWDZB7oseyBmPxL7C8miR/+HtV1SVaALwAaLmBxeWZf8xGVfz5+9yBQOXjkbZVhc/vDyRT+SJGIuMWwjRTmwsnU6F/E3XVyBaaNPQW5+oSJMBEdqWROPBOVWwzo54j/5OFL6OJcC5C8/1TUbwpy+nFJKtdWAC9AGi4Fu5pMlFu5NnXsjQ07WNgc7YFkHNWt8XS35f2J70hi70svsatMACyE7iFx2xit/CZ+8/4qD+HIbxdMoAHYDTo8CG3yI42S/MuUCls/yN6yoxkg+icIg0LwF0GXgFNAL4AaLlC+7nYPcjNhbTgL3YN93UaUiaKcN3eVz+E46bHDUBHeit2GuXtl4WRtasgK86bcre4N0vQ3T/ORbeqQeePvGICpk6R2WAb+ELkwDtUAL8AaLmGcnKptQklCpxFyk+RZuQjOQlnaJeKUIgeTqDnTLwIOY96N3tZzEy+0t2N0rbJbFS9fv6Vm7iZM/rkiwpk1YxCMn+d95qFEwRPBOTUmM0bxX4UWgDAAGi4wYAxYVoliXY/3E++LhTe3MH0x3fuuBAvcagWQ2XbScrT+nTgriBeejc3comjke9Qf3DALqhw8JvsMWnWVTKFCXeFOox88gEAKflKCxnlHoeQPgNawyMRnFMAwQBouVd2Oj0IuVyRbGc3qTPjtWmri8rzE32grJZNoJRyNS/P6LmXLqNWwmShDHR7XXJj5Dkqt+Dc5Eht4WOX0J/JkAZwR9MCrtySGWUElV23ehI2FXp5nQ4=</base64Binary><base64Binary>E6g7PQEAEAELwF0GVQBRAMIAaLlw/dCOeNTnCfygytkje8leDqB8Jhlasmvp9KMV/mIfp/FtdwAAo7yc952YWTpVKljwEfZ/G+ljwzBFvMAQZwFCdD4a8yR4kM/ulpucT0IbC8BdBgsBWQDDAGi5i2l+31tML7DSr0/voHjiP/0pU7sjpdmHj9V5+okc4JhfyGC3EAuAGwH3L6nTr9WAGUaOHKWQ80ponDcFC6FiNlrS8/XaMOBcryp0HSNnMQu4iPtrQFWdUgDEAGi53Dedbasb2kdzt1qbfOAR57FvetPE/rmuM6+bZovTy9cd6NqoSYMp1y/RZqXSt8hU3vIAnWySkN9vbPvZDmI4S1fgp70L1BoHvXA6yS6eCJRUAMUAaLjBc14jTX4djZ8EnAZ1RDE5yUlc3hNMOSgMwuK/SlMJsiS9HzB4CJFeteZPjUttZez2PgR2HAFXO0hjd5+bdgg0aKZY+IaBViAXJICrdSUdKnvk71O9gg==</base64Binary><base64Binary>E6g7PQEAEAELwF0GrQBUAMYAaLmLa3BvtA5eBOt5S8FN8ejnQ8HPGXW/2QtTskwcQWiWZ4Dv24HuoOsZmKkded09cN4X6zPMW+BxhgGL1QANLlwy25OvQY9F6O+4x8jGRltKarmVUQDHAGi5pYc2kwlR0JuzzBOmOOrZH4gkZXdhseefgt9TTj8RfBaqGE8vcK9U9y17O0W54ihkeu9Rbq2gHJHCHmRpg2CZ6LnEtxGpo4GX1vY70z/JHQvAXQb8AE4AyABouYHJlODMcpmFwkNJIkSz3QFshE3xpEye8x4e4JBQBd2wkzM/gM+iIr+skidzvLTgJr9kgp+jPeqTmqsM5BClisoacls2IK85UQ2RkRVXAMkAaLikLed00JB1Wgln9w5Q0ZtvR0IZxvy8KM4iT+fAHumfc3iVAAxC1s/hZnflI49UdLoz3D9NfCmWqkpYvs0QPgF/VGC8DRY7etGFYPH7cR4pZJvLbJSbSwDKAGiWLSkyXZNr/raBA7IF/GhD7WeI2zFOHaCj0hiHupFjBqflI9R5D7BXN7rxyMYk+xKUjypUSBkPWUf7U2HsV7AS7n7Vrp34xOnZVlFVQhM=</base64Binary><base64Binary>E6g7PQEAEAELwF0GmwBLAMsAaJYn/fCyM7MMBhVBte5F9tVJO3zt6QBl6fqBdwknU6V1/ZZYuEo0hxrpbIrCr6Xs5vUkXzTfWQqCZ6+Fsb1dRCLrClmVhS9zuvzbSADMAGiWLSj/80nFpVTn29Lu+wUfdI1X/k2flksA7Ibz/r9JlCC3N9JlWT2gX3dKn8c1wo/3JyWUYjbCrph8C4NHXghXO3v9+mxBZAvAXQb3AE0AzQBolilb5B+aKb1sNWMTakDz/ti1OJo5JAhGV6N2GzzO0I7rX7LP6T6GWFcWri+ujOWVVDcYVfB4Ck+8KpPvcQzv96mr+cOWsIdGeOPqFlQAzgBouYtWa2tcUZP5FqGjRI0UCkRw7/EIP7VbZ9FDFzyYwDBEY+eqwo5Nu/wHR3MWUOHQPZNTslDSw/EPDluV9I81+C5xMyRInjlZOh8J/y3bhcVNFV1KAM8AaLikK162RxKyP33cm2L6IzZqlrwAs0GNeu65KuRM/Qgfm0+4VzOLGQDDiCS9pXjuHdHkDe/+YrLmdmYZz01tBZKBfTZLY2XtQJ0QcbcI</base64Binary><base64Binary>E6g7PQEAEAELwF0GXgBaANAAaLike8vKfXl0Iv/3TKdkubEu2yM+grgxVy0f0eDr4pwcE0yx3RjoovP5aPEW27/tBNL8tZHvgDdrQ2NHIJYygDxINJPTlVdf/9zpVtDdy5/zdfhzDP8p0nqmC8BdBhYBXQDRAGi5i73Jq2oK3C2fSvkL9eehV7zJv+wAGFIZS8xkqktaMVQsEoWbcXNYeuFHYguCLqIB7aaFm3I/hHm+oGIeeF9uByr/GHbaa9V2TGTtwRlDZEHqj//YpEPY5iOVlFgA0gBouaA2WLWRqXeDcFTW1RE1PdT7CSgt5rya+TPQNT7b1YhuQTv22R2BNNzg642bWTJDjdv7Tm3HDtnkpplbmAKT1IIF08qqdRRxHS5QQ7vxT2Ba6pMzSrLuVQDTAGi5n2uCOhfeM5m1vvXTbfPkpeuyRNrjzuLVaqWC48B6SapW8t/mERoxvUO4+WCvfrpJad4rtKd5fOOz8d4nHrp7ec5ubbELj4H5KZmp0w8cLlpC1p8LwF0GzQBBANQAaLkzQHLHWUaImAZjVCgjBc/c5fH8Q581C2dnaRRP54L1g6dBaDLojivCA1GjoXQFVGH5ZvP76pkjcM7O3N6nEiwnANUAaIJhBbL1c82xcePGVO/V+gbpUBnYmzZoGdi3ezMvgRVLw/Ge3Zl3WQDWAGiEwEJ5QJNOMj0i2Nm1M1HACq2/coa58PLXI3UTvEtRF7uhPupWJA0nG0fKD5tShRzqpvxo955JH4o2NF/Z9MHF8z6Syp0ChKpAYD/jOKsMYMgTNs8LLoyBE6KxKw==</base64Binary><base64Binary>E6g7PQEAEAELwF0GcgFVANcAaJXA+oo9B1tLNWP5vIJkyPm9//YJmgU5a4gajXyLlYC9Faiy2E3v9vyBMYU6I5XLIC17s+qD4m7VGvXEAeXCczk48M/yIfhBnHcMFWWtKIF4SDFmQVQA2ABouG7FYL1KlPrPm/qCnWsJuuX5lGRFzSHNX9g6fuW9h1QHckoYJBvHS/0m/YuIZ7byCcU0V5/U8P3BlBLNGVatEzf+eEhk/Rg9IlL+BtFDfsPncchfANkAaLfx7UUZV5x3MzHS/4+pPpT2mRwcKx0sHYHCvmpNORITc7qliZPrZLCoULV/IA+pt4MvIFa60pSd0sMoMPAmL0PyupplEiFpwwOAs7eeWS7trpL6YoFVz68q16PhhUdaANoAaLt1xF6xXADlmWWzFtr4qWncZxOBIPp8F3gvx1N84mhhGN0znXrXzWN1xKMTLiFfyGZSb+nNk7A/yghofyy9zz+Y30gZxq6jX+ayY7eyFXRoF98gluoBV/QvC8BdBloAVgDbAGi7WSfTHBrQHl/wU1GJIla5rWyzPegKmw2hmTB+j+ZBdGfwppatWsOvsdJGedo2M9QKMv4mv2yRVcOv3/jan9lMUNkbIwG5tSXcf6MrlPuMK+/G0nJxmTqhFQ==</base64Binary><base64Binary>E6g7PQEAEAELwF0GvgBXANwAaLtAcjiOInPZL0wU3whJ2F6KSvUmkvPJyXIZKa9X2I4aGiagMgXRpTef0GrpkTiuWmz1jSAGwygCLvEqW14CBzYo/YfqYGl32kjYfbpgz1GTBD2st5dQXwDdAGi6oxSRAihVwQNmMhTV/4oTLD6/WnijTNYWjWZ51YNdR0k0QsLy9rzoWowJQ+/RG9apqFnRg0A5GUjZOP08wcebM8QadpMW2vx4EVkbxyOJccDGLyL+suk0PanW7mbGC8BdBhwBWQDeAGi7+OzfZ4+Euc6HoQ2sWDcsnOMEwUAnz2gXlDmHmtD7v+/co8B5CbFhL9cl+eEervSSzhiaIlnEkxOGDj1r6HF3ehFtfq3QOHALAFOXvEy1Z5ZdD5FvsAmTVQDfAGi79EkMGtagwULM9cK3KhkGD6BJhuNEdYeY893Wq+JPaFK+vhyJt15dyofFXLMG1lcLC19vGUtpBgWzbRzrg5lWHdBpdbm5/9/aTRBvdrY/yohb2XpiAOAAaLt20qRMpFcCIqaELIYF4TeUgh1iL12XENU1HtH5NCtaG9YaU8MkFiV4XxztHZ/MAIyigcL35tC+LaWC+lir0UQPsN8Xp7h1kXvhxEG/XIdEkees5ua2AFn8HqpwKuO0ggn6kNlU</base64Binary><base64Binary>E6g7PQEAEAELwF0GWQBVAOEAaJcUUCn8rUpUEOo/5yqijSCCdBIlsxQKkGJnAfYrokn+6LKP23Y9RfNaz66VRcGt3NDGf3dIpRYgjoxecz9HrvEr3isYL4wOSkT5M3HdlMkt4SCYSQvAXQZKAUsA4gBolxPAoBthnGrcUSgwk3+ty3ckYGautEkoy+vziSGnhusVJaHEZz72oJV1ZHw4pZ+EzlH9/Lgy+UJ6KO2cc7RVdlPh4z9Kto/uVwZNAOMAaJbsnD3Xn8F5Ab/aGVTFviZLDvj3rDVukI90B4Qzuu+W6/EC+uVb9Hs+t8OWi+ZaNqeDOLWsMGE7zf+M0X5Y6GeP1OXLzo3d8FbB9ApRAOQAaJbsnD3XutlP8iVhvAA9xBXOZdY1amkoaQPka4hWMGR3xNG/Q0LpkU+W7m7YUUSiBUqA/ozBzNHw8psvgBVQn1x1p382luxj6rZyHvnGBnTRUQDlAGiXOecnx7ei47boUKIm9iZ9CBzZWNdM+PBr4wYXROzV/qRbXeCXbf1LiESCfoBSFEOB6aX3Wcpda+Iv5xKoQ9d7RrUOAnNWzCBU3NtuDY1qGg2dIeI=</base64Binary><base64Binary>E6g7PQEAEAELwF0GAAFSAOYAaJbrZh2+/bs1J74YWacEglpcnmurtqKFiM7zSU0MZV8RFAyS7s6s1Fxjv2Ss/45GfkQgeoILjJaT3c74vy8x8XYmPeNIkPAFxXRWcQJ9SQscOVAA5wBolxdWHdMVC9nnGqoO6QCBYLha4MuIm6rgIz7PD6mdXJoBI0v6oTZGPASRdarluXmKLYvRMTA1wV6wLlWbgG6RskwWC+pNCtrq1rExkb/xFFIA6ABolw8msWcI97LboaKSTrA2LsEGoURKjQ9KiWcPljiYGq1wXTrnEq093cawDkSjz3x5qm98C5dAoynXGwmqEAeJKd60qQS3mtj0XsU5lkolU+vIC8BdBlsAVwDpAGiW6zdsz7CzXyrPCCnesutkty4XJeGFkSOf1TDZq5vpeIBGFR5wa2+pGL9t/7/rj0GCXhK/iedW3owcSIqghqe+7Zeo/ENoixIutNtdVglUldQsFLg5jAPFZhE=</base64Binary><base64Binary>E6g7PQEAEAELwF0GDAFSAOoAaJbrN2zPMuusGnftZsBkrbFU5sZ2szbRhlnjgF04H104puG/WSSbEMHcFrXLPnTBfsFZ+wOSQiOtB7MS/9D/gHzhm3nyB9cv8zz/lb+c3S4t2lUA6wBolutmJVdV+mOp7umy+rb2W2tHbTOV3iv43rAJbG+n4Q7VV1tkYm2mw5ElgUDfXpHx4Xh/oUGs0nIdGU9UoI0ZFCLLoSzAfkJTJ6qfgJMApsqbfsbQWQDsAGiW6zdvuBN/Bl/LClp3sj5n+TamyotFNiNgzfex1InTZZC/CrRhZhA1pVV7DdmHV8bKqBYowjbqov7WUQQgkuq68c3RIjW54a7jXhHjKAMshqVWRWlz3E6aC8BdBrUAVgDtAGiW6zdvuri7tro8TsBgtcG+AG+F3a9aGLNvnznDu2A25KzQuYkJfvtX+d294vTBr5+lipdCjXiV5RSy+DYPvWmInzdIx2DCV6Tsn/FUU0PNhxUrSUVDVwDuAGiW7HtfNG5nlsLHzX9JRDQqKY9lBYRHvNbQvHgKcZzAb7Eii9mfAaF+7RoXUT88c4PFSeBG1V3O2zGAtcKbTXNfcvcWfOcoo0dU9FdjasyUD+hHwrmx0QvAXQb5AFIA7wBolutmHd6gwSe9F4A1nT+KA0arG9gdPC35f2AY92+7tqUIXek6vTqMbhi6Bw88xVS3MLRrXRJ6qXYHVeB/8YbxOsPd5wQXeWUtox3EbjPPXeyZUgDwAGiW62Yd3gCd906t/JPqlyT7NTm4x59dktbfIvjyQvQupFKlKgcdWeRvJW9f0aiqPE/H8H/hbH7LMDQ8cdRB0UcGKyQcGAkHoJhQK2Rh0xb/bBJJAPEAaJbrZh2zXw1UagVt5CcHVya6pDNMFTjrf5BUWu7dxe/6tShFyzodIN8cWzTgjHppoqwPXzdArlid/wFoDxecTdvTux1YfKC7EcpOVMU=</base64Binary><base64Binary>E6g7PQEAEAELwF0G8wBMAPIAaJbr9omc1M+vbogjYkwqYl/iBgP9D7H1n3nRxSFowFsx7QCcsVNbxfNx4K2KLghJbvZGN+QH5a48bzBionYCQ62JEWYDD+4MzXdDCUwA8wBoluycDlAirEfuecvyD8yV9fUZWeq2T4M80qHj6m9egDYlXbQeKwUIcZRgda2D5W1MHCo0vohLHzQDucdhFXK6JY4LZa3THLwkrAqYTwD0AGiWoIEwYi7Nk9OL3zks6etGuwfW7BwOJmHYhLoox6EDASYdiwpKjixmRC1/XMT9/qNaDcXLAeKU60VEIUwFkJIHq329NYOrMFjAyf463NELwF0GqQBPAPUAaJbrZhFvokI7RjV91KdOccQXFWBLWmn7zboKFQ6Aa67mhz21TFw6g9uwQgfvgIHkkWr+pD9N4unhWdPwoJf3lbeyFRQBQblutCQIAoDL2VIA9gBolutmEWf6ayriiRiuwDDslzICwBn1kBbsc4HCW2JKTsQRW0dADXKymdGJpbSNj979KS75QYKIsztDzbWfV+h8+7exZEy1NvWtbqbkMyXjCtrBmzlf2Q==</base64Binary><base64Binary>E6g7PQEAEAELwF0GAwFTAPcAaJbsp0fHrys3euT7+Y3uIYa5+wj2e2Xp5BV570oNjaqVIrOyvLj4DnHXiw3QESIRJIPPdmg1e+fq9ewW8UP7VZdr2o+K8YlsN8XUfgmPGQVa+YpRAPgAaJbn0IXQeOEKU28ds1U42iq/SazTrqwPfRUhrgcFpObxdoy4CR2ZKuc0BM90ZVRdUTn5jXYjYskPjTH9IOR84rFoabi3tjGAVOjTbv8es73QUwD5AGiW7Jv/oWgzKTfWxpv0KlD8dP+9/8864Ua8UCF0LUbuuWZpYu0RSD8s91FkEexA/EPvFM71ae8LjEND75sN8wPJ+yiVf7B42lZAvcqGRgXGmrgSC8BdBu4ATAD6AGiXF1YhWyFIIYoEO+q7kxWpIbGFO38le5nzHKTAri5kHIMMFqfKSrvQxx6k6Y7HrpYuytI4X5btKTGHKSEEeDMCXj6ec9q3AI1sB3dHAPsAaJcSVJe55MQT/1FdA3SKSWU524zBFlBmVZhQX+H+SHOcKHD9J1bfrnvRyD+3hOUL+UFthjk+l+QWQEGkAOESc17v1cJcatdPAPwAaJbrZhFb1lQ0HW4OEbko0iO0Al/oytgQLSq86nKJv6CwFsbAB5V+G1Lbtu6jjJjAr0hYiFpKRfCKRwlHzVDdVcv9d5NU6F2Uv940RIaTDNgzECA=</base64Binary><base64Binary>E6g7PQEAEAELwF0GpgBMAP0AaJbn0IWpUO6ffkKdtEelQBHrl8E82+Vu+Ocu8EH1VNcayMvq90QK6rVxA0y7BAYItHCaTIQP9g4ngAEA3lbTR2LliTellFHI7+CF/lIA/gBoluNat0nB3ANG1xsJJJOTllGMRf9LbCRrsFZgn61TUZO6fO12FyRaUXv3KMInncl1QVaUPIgbzxbhVi0ofHuDPFjfc5pvyryWPdHKTrFJfhZPC8BdBv8AVgD/AGiWqoLw56DvJPwtxIPr6nfRE8AQ25YeHAo0f+IvrHseCtEYcu9X5H/JGbESk6gcUGcq5OWKUmqGElr1xn57TT6drWLUmyo0qPZgMaR9Onuk7EMxtSWMTwAAAWiW7Kc6zqHBwGI2B7SUxjbwqtWNIkMUGGbJKcSIWAsjfgS9Tbp9Q+SZeujPrI8t9A9TvFuBtVin4MDkfpYFy8flV6SGV8fPNKe9qOL8o3BOAAEBaJbrZgp2CINT+zBixjCHSN9HmQRuhXNtZ0o6AJ3zAs15bD4JBM8v1/DEOVoKLuoBlCfD1lDwZzNKEeLJrnQiRV54gZ07O5jPSqcEJVOoO7Q2Sw==</base64Binary><base64Binary>E6g7PQEAEAELwF0GUQBNAAIBaJbn0IHKqSc7c86RuhceuDbHE4OlUayERUc3g9XyHFbi7AidgBOnj5pC9FckY9oh3N4VAbGNuBFm7BELxPNxXcH2LximzU3NcxkKgm8LwF0GsQBWAAMBaJbig6+iO3uunwo8chyJu3l0gJycLqL1h3V1zz6Sd/SgPPUsz1HNXA4P5NSjpn4C9/jPF7L+X54M6MM4HKT9LK7zyzEpFqLuf7kllsoaDKH2HN/MFgNTAAQBaJaU5xp66u1SN6zpNBtvd45RTcu0+kkar6cocCL61+kGDx7Ldhq3wfJu386H6Qqxw0askBpQkzYZb/RTRlavr3G7bJz6EbJ2QAgLV8qSWHf09IELwF0GDwFRAAUBaJa75ynwz6STJiT2oJ3QU/rXMrjQ39II3IC7aT11YOvXbSEcn7uSZ92AjOVhGHCcezx1ItnTw2uV3b3DGeekq5UyNck8wyr7x5uAjE+7lBc4VwAGAWi77nGi79VAv2uju+cDS9ywVaQLvBdG99wvrk5oLAmKBUkiIL6oeaFrQqY8P+8MpJP2lAJ6VokSLW23Yqu13z9DCezs4OurDpK88FwCPaRDhWdaLeMt0lsABwFou2bl3hshqse8H+58rzs1z1Nk4xv0JtDKwR6+P1zNH+DjAYyK3GV26dM3j9lh09pkrDrEibYWmvsNupY1WkTvoNXYIxjDA1jM95QCBVAqbaufr/l9PgcwTJFJNmDuMQ==</base64Binary><base64Binary>E6g7PQEAEAELwF0GGwFZAAgBaLtdyOf09IyDSYAOlqtqKmQ+hd68bgJP5jzr0F/uMmGMilEjhEW15ilvdIQa7ueKmQsmYC+FbRjpTbXAPi0Cx2a1UXJsCGngXDsTRFMaeM2iaHMYq/Uvg0JbAAkBaLuKOeaIdTl3i/cs2yu0lVkmnYgtA5jUJ4H1dduLLQUTcbeHfHVFQAxDC6IW2xHzKWIwLMdAeAb6qtwh9GWW8kzCni+8CHo9VrGqQn+k0ceoMH86gk9gV5fJ0FsACgFou21TkX6Alrn1SKVm91gCKUdbRbMC/wjqkGRfGBTMwzFZd2dSJhSbi+QTVfBnG4xEJ6XjG363TdgWdXx4lFC6DP0qhPJz0vzbbbxQvTLegS9e558/x+VEVKiBC8BdBgYBUwALAWi/3iA/ENxuymjTC30sjYYo4xhjSeHlS/qEtnkbfq5AeJ6lyIYVNTbJo3adhH8jCqmb0xcG8cqSYRFrLfDox9fzS2dnX7pbAC+9p6ei7b7OBdy4UwAMAWi7+ZDGuqgA1p9OlmNEgvCT22cHueadCIeC4KmNoGH/0tOujilT3ptqezr3dAKWOKRcSHhyGX+cicIWL/M1hlFuAtt7+HPThHzNLyZAQd8KUil+VAANAWi7+LwecGQ/3GIjla+Rd4NvTJakMSZZta0nrXNb3TlRf8eJTNLvZ+NJnn4ZUen2gQ6to70rJ6O1QBUxPJfosodjM0RrsCd3XALM6CQv0YZD5ROcGPg+Guw=</base64Binary><base64Binary>E6g7PQEAEAELwF0GrgBVAA4BaLv4vBI/7TDbKCsa7RBXRr7RrhwidWsalboCmPXO/4uGr9PhSZPvQMeogz7VJuiRISUdTrRJQ7kmi65XrnnXhPPiBr08oA3eCAuDcuS2st3rC5NKOVEADwFou/i79uZAIYwMdf5uCEseWg2uaUmcV1YuKMl9ZaudyOti/UQLlxyJLtU4HoUwsfR95OSmArkehmxxce3PW8tMD+clSdLdx1nKLrlPplbwiPkLwF0GBQFMABABaLv5TwThBDwW2irlMmGhOK+CGgJRLUkp3TjLQ360BZPcVlhmG8JRHa2EB6JCYLIB48wzrI+2tFKbmhE0DW42TplWLjjdVo31jBlzCFUAEQFou/cezgd+Tqh6sQPK5rsbqXq6vhikud0oinsI7S8LzOSl9ptUCVE2IjQWuzBVAfRIxywhEH0iOeGOuDW8e+DeSYeJCzx70SD9BYl6069JFpn6xJcBWAASAWi7dxSf23bGD/5RPtg/gxCXyZ1IMXJ0SaFNCfrtP/kerdWPCJOWCZknyq2lTuOT9mfLsyqcjrsIZZ5XNDN55yxEhLqUaueuP4H38O8g6z12WRghUElK04DrU3rP</base64Binary><base64Binary>E6g7PQEAEAELwF0GVQBRABMBaLv0FwzVmXzvfwiZHfbc9enCC0R8ZNy0youaTkpltPEh+tjquVySGWHwjzf66LcUXibIvr+6nS6c59mWPlusyJ6T2LHtHkllyrazHGaYnakQC8BdBmQBVgAUAWi7WkCo5ki+eqst/J6VZTl5vQ4LWcoDMXjtnQOVazT4cKpeCh5E3m8KflUBxoi58C1ORVGqE9uc4rl8uB4KaLxvbwpCqEZ8i4SZzP3ySbNSggC4MKD5UQAVAWi7bgkkVMJkMCQV7qhtcas1xOFYICcQslzNRMUiu2t4Jm1/nm4LX0YHngjoXPKPwQUVXXx3L2CvxY3Ltrmf6OSZ7Zn2g7yJoblDStaXbz64NlcAFgFou/js734H2jejaTCNgtWW1PS436K01pkQu91wHsIqXBEdiZpASbWoEQTxCha5dZg7f19QItspBwaR1FXS3K+XuGrnfTkobWx5rhPGdMaKB9kKIe1eM79WABcBaLuKUuphDnYGrIzeroHVvpP0beZvsmwJRfHV2/v4jHCWWkCnGA9OsXk9luRkhwBacnIWxSzVi/zGdi/Zj/qIM6gIts9+M7QihdNGJBWFCo/SWz8W04huAnKn</base64Binary><base64Binary>E6g7PQEAEAELwF0GVgBSABgBaLv4b165uxoXxHPfhG41UutbG2B6ao0JudnRsJyKud57UaJjiLPWDFmY0jS8G/RNOziEn9kqTvLhHDeCccKolLAqfrtJn1Q1Sy6M0ZGCcht06gvAXQYKAVsAGQFou/4SYPZD6l4PZuZj5pI/2amd/kNJIfmgkUwnn0tqKQ16J5dReiQeaAu6bew0D0C8Xn2ffbJQ+Z/B1T2q4tZKpwKR9bDoiyR3yyhspUNZ8zx99C7/DgInJQxDUQAaAWi8Ig9KtUYgukt945FclrHU7sqxV2p08UYTCQ+qEGpU+uXqm0e9Xue+ziPskr+EoAFShyP4vdlnmcYfdtA0F+yDKTRY9x5Fg/ya6dK4otMub1IAGwFovBfrZIGuXCB/mG5baIx5crgZiI8mL73wnas09poTbJF9BiVg4qraQHmR3xtI4OKzhTOZL+0gsMVlD2HNrKhhvFHbPSmWQbEayLfG2IFfy/hvzdsi3w==</base64Binary><base64Binary>E6g7PQEAEAELwF0GCAFXABwBaLv4b1V6RUkwX+wbWHwFPDYAJ4dHuioQWMj6D2v0VUSXBbKY3hBkgF4xYN+cmp8myRbQGkB3u1O3bslTVc5QmvINUyXUMn9vCP9YFBWcz9S8+tvEbLmBVgAdAWi8AZVrDfulW2S4PBXM40oq2KPCD9AjI7p1PqRX+aSV5bLhaalG7MOPeXziSk2CIa7UCkja9Nhx4nfvU39jE62umxdff+zmRsHFKqi4PyDzELU4+SxxTwAeAWi7+OojpOxjSQeG2ofegOgVwhCjGbA2hlXz1gOO9b6EfPySP6avRQ7pEUzLXKXjJoCbJbDeowZOhiEsQ7Is26n9dVCXNYTCdPNxW4cMQW8LwF0GqQBWAB8BaLv+GvQBWdjflNy5B53bvL9whRa/WKgc+ZVefN0y1/G3D6zLSdvjk/Fula3313NWW7tYWnF9hJgewdXZYpSCdPJiHE/ZYB/v0gS2WUjkOMO83K8Jwj5LACABaLwh3cIfnqMS+k/d2I/X23/q0YAakOPOAxSL4zqKSMorXOH+y/0K2TNX3EvzrXWipMjgZMJ0l3iDXT8ve9w26P9DyICKrJSKkBQDC8BdBvsAUwAhAWi7+Oxy/zi1clAJJKchXVg/bh85BbRwJBhjcgZ0GcKoUaKj/cN8LvsMSGZ54j4yNYvF3ejY0M15nfNM43PT0gyuRxq2X32z2K+PY/yxb5FZJg9vUgAiAWi7+OXIxh5q7tS1UcdwBPJlsdIrrGNXNVQ+Sf3+3YBk1H0fSFdnmInKE05sIZp+/Y8id8m69LrkrghPI+GT687oGVY+18sMdQ65EpzPMTll7K9KACMBaLwihkZwemkOYYgMZKsbuaPV+kuTwDhqcPL3KPfsek+r3+9vdDBnfdsI9Yyep/tFMn6zr7nHhWWwOyhHjafaPwp+Q/os8rDfSsD3h1GH</base64Binary><base64Binary>E6g7PQEAEAELwF0GqQBVACQBaLwihkZwdKHkxlDhuUXIm2mrG6i9mCV37tFBXQa4mNAd0UdFWARIjUJDK8hNugRmxUalkagLrDbyBwCdj6pYYmR8u8HgWB1pf2eG9wQD6hBZ/WgUwUwAJQFovCDEBiIINwhmiIELY4L5lZPJ/jxRQG3upvyNlTfazmav+Gy0xzGC6FgBFgb+ZjMaBrXzGWQx849wrcaio8FCRQZAZW+IqzBiNBUAC8BdBv4AVQAmAWi8AlLu7+blJEwaBaSKU/l74aOvlO8tIhToQMIXFsSM+adanamW5/n4/x8CABoHCy8PjIo9Uii7NdsymFSuRbXRIKdwaEuMJd7ASx/qr4DCt2ET8S9GACcBaLwdwqKGVTeV8xad4lu/nhOtX9/n5md/P8/bu9WjnlLPolCXhSUzpbCBle1903fp/HkjHYpIIxp6hpA5x0r4HFIdqLKRQFcAKAFou/x8oNhK3x+hDLlzPqq5E5zVx05WHuYcVYFGKyYjNeShZ1hcZlx+V8fjN7yzieL3mjjyju4hBZK+tuPFyeBZAuydy5MRFY6j1jIpkNuqdFRqK8B3Q4Q5AFF/</base64Binary><base64Binary>E6g7PQEAEAELwF0GTwBLACkBaLv3JbKE+1gTsPU9lMWPLaxTPGU4GAyNk6u8CJJf79F6EMlgQJ4QlkDhYPG0TvaWdMc8Hu4sHzDF63An6tQEsLibp0i5iblgH4E+C8BdBgUBVgAqAWi7r1ARUoxZpXiSDuYfjIcQN/yUfXJwN9ecM7XtfIDUJ8eVUZ7pADHoZHP3555BOrdKiyG+jcwBbHJuGtx2Aa45ESilRYoZk0UP4E0iObs9hVmvx6HoVAArAWi8Ioo81yiTicf8z8yITI03B0h4v0XEaE2zBSVRPe/hMCyGP8oQNFshK70YHQFUie6ofHTyiOZnDX/rKHcQkFkP/7k7k0uGAc73pbeC3RFWxfWpQE8ALAFovB2mty6Cyg7a38fvHqqhEtConCXKhC6najxlEFTCPGakfSNsQEta54/hCBj5NYNVH5zJeyfI44aV8JT5ODxOuRSk4GFIdAZEnW4e1d7LsZMg/g==</base64Binary><base64Binary>E6g7PQEAEAELwF0GXAFTAC0BaLv+EmxaPDNAr6E4A9jXIu916dsSfwjcs7DZFMyH9uu4E1KtCtTekFLjJbMF6usyUufIrX0RQ+B2Sbg8IrrS/nTFxhQyhjr+hhWz0q9dTEx67i9WAC4BaLwmHSK1DY0mkKFpUU0kDjpUFOhZj4mRWnAr9Obevbvr+00Mn50dJMip1HmoY6Cxq16IIHJnr4pv8KXcsjpYx1h1POf16NCp6Y5FwMSe+ejwo8SeyXFWAC8BaLwYEMFalI1SZnv8XlK5uEoZfoEgn41r0Z1bbt53UEwaOa/+iA/ixjd6V/1q9n3DSS3Z/lAJ93PQmnRl20Y7chnh5Ns9cMzpkIPMPs3x2H2EpOlSaiZNADABaLv4ckNfyECnaAKNbN3Lf0DuBU3rGeRg+df3toZEF9g0bLdISlEWy8/Xp5YqQsV380ulVrn8BEPBnJknuYohKc9+va5QNhsEG2VIFHYLwF0GWQBVADEBaLv0SDAjCR3GK/wiEe3nsJDBOn4e2hkGdDcOTz8yIUYRFbsG9MKksD8+Qf1NXPykeeaMjsxGJPHFQgVUp9GD0eDtGra6Z9RJPWHP4/dM0kefpRn35ue+h68=</base64Binary><base64Binary>E6g7PQEAEAELwF0G+gBSADIBaLu2+d057BlKL0k4Eakt3877wB/4+D2nIpFZ01K6KuclneNyxGPveaTSRU1q4nen1CT37yexCZbPPuZjXnoTTtzoOKa4m8vMzmS6XtfQ+7UUyVMAMwFovAGUVZVDv6Z/XGYEJSEzMAE1T4QKjG+NzEuMZbOvkZaTESM7Atv1EY8yNbrm8EjBjpWKOIyxnJRejVDfd/J5LdA6gYKZbsx26n9bqeK8yQ2NPkkANAFovCKNrxRoXzKKruJhqJRzGx0iiEi3DU6KhUgtGSZUtj9bs8cvGcDrmYgSIPEy2982GwBlNahA1mrWuoM7CvmcvGeS8Wltm2ZBC8BdBqcATAA1AWi8HVegX1ven4sBlC0fJlRs5XKh680Iwpr+Dgl/XGVtiT88NdcF3U0d4kiV0uX+FKikc7QHNncg1aON350cPE8VBKx8gSWd6oGvvB5TADYBaLuKULUOCh1D+G9gNniQK5ZGvowogjk3DaIFeZUDeqNkcK+22TWkrMgf5w/7JCVaBEN+nNT5fPdAvQHfenFhwa1/zs5C/fcN1QpzxOjE2bP8JuTOyIue</base64Binary><base64Binary>E6g7PQEAEAELwF0GAgFYADcBaLwH9bliy62CIPGE6HkO2mi9hzM2hsvtXraK2l/n7T2EAjayoMiHH4TVXMaixSce/gmpgBYMmno5boMvKmatHizsXaJnNlasb3rh05BN4W9d3HzlZ1KWgE8AOAFovAGViHrQAJS+pVWOlyxGN3dAzt42YMtmxGB1037VhLHc+1IN1LdyiPGe2xT1zXcvWZLFCuTiSAvMCH+Pi8sazLY17eri6yykcBOJN/83TwA5AWi8IMTfmuLixTZtX2XUpsGXCMnMg+qe5+vnPzz5oHPX4HIxno98BaVq5NvduYbQJF869fjWdoFE3BHDc5GLFfBcZ9XX+QeXY8Bf/KUJMt8LwF0GSwBHADoBaLv0IfYGSKJWsvSFqlDX3xzaWX9nn2Q+LnoPKFAHpxujrYZrDbPXEpdc5f6Qq4ly8jkv06UnAy948l6Su54LRF2xaNb/7b8LwF0GSQFPADsBaLv47a8WiMg73nXIy4WGKCFGcG0OAH1jNoT+KGaC4yuoJXBE1vYyXkjNQ6lhPNEbvbXDwA7miylveRA4mxncXDUCaq8dpQtk5I8UF0w2L0sAPAFou/juBiPk5TwqL8FM2gsTzny3B3nBkyAzQlCX6RDgmLLMhU0xm1h4Y7ofnEVmPnqa2g9u/giZkwgV9I7R4v0ahLa957vjJB81FudOAD0BaLvuxiW/AhCYxu6yvwgGM33acOnjwKYPykXMy0Sff6unouTyNVLkadNMmwJELmYFUDYPD5ujaawRMWRy1mNa8MIoua1xQGSCgJYFd1/mUQA+AWi7r1O0XtlNDMsitrSq1kojWenCrojZgfNn2m9v7Butm8BYRxySaaPppEQUcqwubkM4x6c0hX7jVzZywpJd17iQ94BCTaT+LxtaOLlSML+oMGLL84o=</base64Binary><base64Binary>E6g7PQEAEAELwF0GUQBNAD8BaLv4zRxWWP8GX3GmyjtiQ2Aa9fWoVv/FrRDsaIISASjiPWKDt1dS0Kot0FiV03aBcasvKPiwDyujBbu7IFhv/bAA/tnszBOMMaHzx38LwF0GBQFYAEABaLv46dyxshRZcROj15ahYbu/ak81rMho/A04YP5zVnRsQ5zZf+ZF1eTDFD8hokHUWt0Y5osgKSW6saBrC6EQY2+UnA2fzk7+u23T8Zk5PlC7FvyTPpIJOFAAQQFou/jq9AUgtTqn8W4EQinYT+dRXKd8RSjC0MeQhFhvpeHwt3xWwmLzP+QV8POSDOgZusR+zrbR4zuQCbM7J4yWLh50tWbM23EO3wP9s3iMgVEAQgFou/joxgkVeVJAXjoSaTXXoVDTHox3ZQ2oS2NZGW5HlG8jOAXeqIFMANG1rZMtSRVlwQUQxyg2n3oZcvsQBkII2rzzytCIARX2BUywG+/2Rrjy5i+a</base64Binary><base64Binary>E6g7PQEAEAELwF0GAAFWAEMBaLv46eSEmEW+ywPawrUGPPWPvFgO4w3wb4qFKEjXGFUwuJ4OJe44QOZjHv5ysdx1a1rX6a/UA9Y82/kabeqlA6hJW5cABrwxzJujO/AtPg54pc68nrlPAEQBaLv46MYHffs+cDQy4Z+RDp3fPXtmuTsIZMLbjhOCAzeYdRmSXnRwJljx9cvB6Xz6DpyUe/FXOQmtUlBZz0L9He3FN2ivXat0NocV606wLk8ARQFou/jp5H7FyGc4quuizLbDhqwGrJ1vO+YLu4j4/kIXTi4uYW88oEw2RVbWxVyqykEU3sZTURIYYbuPKaLp+UtqffWM2tM3Y9OjwkimHJP+C8BdBqQATgBGAWi79CIPZSiNNw+ZQHvLs5UrqMiYJ7o5Abpq7jmHtEw0tYj5kxHjY9IRlp0o4KxSqtqwznPT4o4ld8nJmyWJF7AIQ39rAANlLeSMrHMSQE4ARwFouyuO/Bit5DQCrn7/hf48eTWy9d6WLHgS+BbuOzh6GBshGJ2geSkECtjCFhV8h22xrRM4HC8hjciFssG1FlYK0u5PjHYfQMYE6DVPl2WSSPdq</base64Binary><base64Binary>E6g7PQEAEAELwF0GAQFSAEgBaLv6nwCceG2ugZE6ufSoH6whS9g5/Htyjf+CZhM8bf86RLbszWw1IdUM0vZcaj9nQyXa/F2+OqDf/n5fmMDk3U6TKl2wpBE5Feh1imnSt6oPEFIASQFou/h1QDEQpLwbJPrblL73SDTdVbKRL028v+vVOle2K/rUO97Rp3+bmXxskRzbLUaebF074KpbRO3/2qhaoK8i1sSXmtb8lcHTxOFUC4aUeezhUQBKAWi7+O2vFqZJu8IIBhKLaJOv70uy/GJHaSCoFL8pJ+3vM9KC5fXa8j/0qAl+ZgXVldrs/TFOhRoFMoq4WYCe/MV3xnUjopbglPNALT0S9UR3/wvAXQazAFgASwFou/zHU3VE7X0YC9IwYZD2z49ZiSJUgxCKqOPSLAOFEmF/dVXOV/NRp61SZ+Qt6QR1AFuYvny8hHo0ir+P/5iVCprGipEkFrEvyMWL/EcL7qnJRKXTSX8wUwBMAWi8AYxB7XXG+X3FyabRKOuYV9ONNgdvw9zUlEdA6m9TJg0cY0nnoqxOixbQWEzmZpJZVpcpMZtdjOcT6wNsXFYnQiOnluQyr/dt+FKzfMuOD3kSMEWeOw==</base64Binary><base64Binary>E6g7PQEAEAELwF0GAAFSAE0BaLv47hqrl/YCjSCMIvafks2BWVVDAMHF1ETDRRV34CAZ1Ttabp+LzhfYN0sNPX8TU1d4cArRsHSddZ9oeUc7ms/D1qxgUfJvireCpbDuG86HP1QATgFou/jq868OJosgzAT+MtkxFvRoZwqLbNGDfWsd2ngc+NRYiRfZiw+qE57X1rHhbBwjZnRiD5ipY8Fu3+I6DZhnXdSjl34DQhyBC8Wg4xESxdqCV8BOAE8BaLwijhqsZo8SmHYODzEyVkIsFV06qOaOK13poMq2Kyazfh2hsVsm7XBaJngmfeUdNLhGpz6gOA76r1T/M6kKkJoKRpqk9yZIgCOwzsTuC8BdBvkAUQBQAWi8Io4fT43vi6X/VYP2wEQ60Ol/Rn4s6H5eFOZ/fESQdqG2hvNiDAoB4gv/PnFeRP789hO3+56bJqfgsSH8vFCllYWQBGA91qhZYC2YLjNmr0kAUQFovCJtCiuWFXbwztmeoeJgoVoQjmekK1TSGH8b9CyV4M4KEZd4qcApMJpaL6qZfhq3Ho7pb9V0WNua3a2DUJz7SQZCcKBO40DYUwBSAWi8JIhpksThkeikM1c3obElheYY0A2Eq27FPWR9kti9K3dDGJnbG0jwJhMaZvENwKDFAQe5K4YYVsxF7WQlns/1cUFFLRPSSSXNDS4I6H7CXPJnh8m4yQ==</base64Binary><base64Binary>E6g7PQEAEAELwF0G/gBQAFMBaLwijh0tGQziZC7btL3lbxcqqAvjp8R+pLlTlRKDhQPhrnk++I/+sQ1LwnPjIVIIzpl/QkpaqQ3FgeaTh1e99iH7aI8H7q+ySmvBrR3Mdv5XAFQBaLv47a8WiHDgnyenpb9NJnwvxbA4zMibKymd41oEZP4yEpBLdAT2DTNTR1MFPVKJj9p4zJaumz+hQCKiggNSwnB/GNaERVTFs5rxL5r4OdeksgNb4XeuSwBVAWi8IonACBe1jFf3geUI7ukR2inHhlwQAcDqc7q6iMS3RR1Nkfgpl8nEggAUszpPZZHgeAHkEi69TwW+y2OVD0SNPP1bTH2cbrT4rwvAXQapAFUAVgFovCKOGqqVSkmD3UhvYtZOtZ8wL+ejjo5Ki3ZiVTLDQTEmL9WD93zvj9m0RlfGg5zHi7TgeLwK6nkjmdFuEoB6d4C0dunn/gkISnLcKijQggEa0+TCTABXAWi8IhVAML7bR4pAoeiLl8baKCHhXhJnwXLXOoZda2uw15l60kQlBVXcDLofnMGWBLJ7SAis/Q9/KSofXb+CsZaNZAPBi/SIaxVLY6/hF+/8</base64Binary><base64Binary>E6g7PQEAEAELwF0G9wBLAFgBaLwemISNZPAcFxIIWo6KeS9j95Abo9lhHtl0bEF8C59UzpVck8U27az1b+W6HnkosyJ0qeBQIYfNTc77e9mKFHWqdjfDNx+K+0jvUABZAWi7+O2vF1Dx2nT3iuNt/TLEjSjhSSYlgbN8Ym19TXgcq5A410b9HvAbk0IY8vxQZHre6uxaQ1XLlPpq+xXA6tudzYRr4gZ/z7Ope3NDFbTFUABaAWi8IonkevJXiFaH0tp8BneDESSBF4/xsrOGgI0aF1sj0mhx3shN9C0XyucnnY54MxgBq0X3l1d1vbPb23IIjAsSOCTZ++3ty9FWRDGW/adxC8BdBlcAUwBbAWi7+Oxopl6JGI/dv/7eHiZ72OPvOv3UrkxTWeJekVhASa8jKsTBPxjgssSl0VaTS1zUosqs5eGnpzyVZcj5ST0cFiPtnFhH1RlLUmG1I6gb5Cn3OzBELA==</base64Binary><base64Binary>E6g7PQEAEAELwF0GAgFYAFwBaLwBgmFdGMnScIAivlnQrApBTXLvzJi+6srT57VxJW9J/yPdiVpG2bEHLH8lrqZ9B8YOnOT80RInQvAZ6tSJSkEbMnx4CeCNkSE6DSeE/aeQrC3W9OeMh00AXQFovCIT44C+kOaKaQZQ0OyiG1IlAb0gVxR/DKZeIRxw/upsMRX2Hef2ch/T382hm/blrvZ9Bk2t4DAojY9nrjA9H8wB7fQcT+As03tRt1EAXgFovBgRjEnPCz+3tEfm22CmrBOoMGwvcKigAKTwBXoiqT8bQRsiMWwkqyfqKog3dTfB6oYu8ma23or6s7Uuz4hSAzCn08bjbxklYH/9xnFV+McLwF0G6wBVAF8BaLv46vQFHExSeisU8wBqsj8j7DNtCDG+Pn3wd0URsRlcF2GgHKK/dp+t/alB9mg+ibFOZ8gDnWxJxvkzYww1vinZ8vdm0vvrQRT7HwG8Y1uACP+M+TIAYAFohZKAADZMm12CJZjdL8KIOm0KSkG78wCg7p8JKPlD3mbORV5q5WmDDGKcjZvxtMUB/yUAYQFoBjIABv42XYsu4VdJ5aBmEiyRDqD0YAkM/TaxHR0pmxd4a+X4LwBiAWgqqYYCWrkaICKNvehVWZQ50dRaaKloHdF3wt3mp3mev83OfPj4x1/5jpVYFfwoC8BdBjwAOABjAWgSXS9dHIyOR+lAwvxmwpo86bCIW8BR7XCaZZMjJ8kN9f+RXO3qnyJBmi44algdA8WPamRPPzApjmWInQ==</base64Binary><base64Binary>E6g7PQEAEAELwF0GfAA7AGQBaBIbNmMhDvDPkYd/QDhCm63SL5hWHSaIHIo4rlX5zkGsP0SmX2R5HxX4Tk5q9CYTPYAd+Jvm0E6HVR45AGUBaBJdCdAwF9V6yFAwIANUqx3v2xjogvmpccj54TRc8H9Q9Ecr6TdY6f+nCimp8I99QZELCzR2knxgC8BdBr8AOwBmAWgSXZhVdIap5inZaalKTR7J8HB8jO+D8fdozMMNY2WyXHzs+mFD9+G1rTiq4DOq4AeZ8KF4teFjrO9XOQBnAWgR9tb6u0tSURHyvYCTvAoe0fNXSgwUekvxa5uzLr79j1mE41iR6+epGrK1S2NkrXhBeFgEcvMiFz8AaAFoDvNY4C67josA8YtTMJ/8RW09Vbiig6kHpxQzqznpX3FPg2mVzsawUL3mkkIrJDN+DHpMF52w1TougbX5BZe6NHQ0</base64Binary><base64Binary>E6g7PQEAEAELwF0GQQA9AGkBaA8pLf/ISNukNkXeY/MmFLIY9IKg9pzPSVnUejfyIpJSlzvcjhltWPtbl0gWgAODyTeoa7YLxdgaGhL93gvAXQYPAAEAagFoAQBrAWgBAGwBaLcN8lM=</base64Binary><base64Binary>E6g7PQEAEAELwF0GFAABAG0BaAEAbgFoAQBvAWgBAHABaAvAXQYFAAEAcQFoQfM8pw==</base64Binary><base64Binary>E6g7PQEAEAELwF0GDwABAHIBaAEAcwFoAQB0AWgLwF0GFgABAHUBaAEAdgFoAQB3AWgBAHgBaP//C8BdAO4CW/H8Rw==</base64Binary></chunks></LegacySound>""";
#endregion
private static readonly Dictionary<string, ISound> _soundDict = new();
public static void LoadBuiltinSounds()
{
var laugh = DeserializeXml<LegacySound>(LAUGH);
_soundDict.Add("_laugh", laugh);
var scream = DeserializeXml<LegacySound>(SCREAM);
_soundDict.Add("_scream", scream);
}
public static void Unload() => _soundDict.Clear();
[CanBeNull]
public static ISound GetSound([CanBeNull] string name)
{
if (name == null)
{
return null;
}
if (_soundDict.TryGetValue(name, out var sound))
{
return sound;
}
var dir = GetSoundDirectory();
var protoSoundFile = Path.Combine(dir, $"{name}.pb");
var jsonSoundFile = Path.Combine(dir, $"{name}.json");
if (File.Exists(protoSoundFile))
{
using var stream = File.OpenRead(protoSoundFile);
sound = Serializer.Deserialize<ProtoSound>(stream);
}
else if (File.Exists(jsonSoundFile))
{
var json = File.ReadAllText(jsonSoundFile);
sound = JsonConvert.DeserializeObject<LegacySound>(json);
if (sound != null && sound.IsValid)
{
sound.OnDeserialize();
}
}
// Sound may still be null - but we add it anyway to avoid IO every time
_soundDict.Add(name, sound);
return sound;
}
public static void SaveSound(string name, IEnumerable<byte[]> chunks)
{
var sound = ProtoSound.Create(chunks);
var filePath = Path.Combine(GetSoundDirectory(), $"{name}.pb");
using var stream = File.Open(filePath, FileMode.Create);
Serializer.Serialize(stream, sound);
}
public static void SaveSoundLegacy(string name, IEnumerable<byte[]> chunks)
{
var sound = new LegacySound
{
chunks = chunks.ToList()
};
sound.OnSerialize();
var filePath = Path.Combine(GetSoundDirectory(), $"{name}.xml");
File.WriteAllText(filePath, SerializeXml(sound));
}
private static T DeserializeXml<T>(string serialized)
{
var xmlSerializer = new XmlSerializer(typeof(T));
using var textReader = new StringReader(serialized);
return (T)xmlSerializer.Deserialize(textReader);
}
private static string SerializeXml<T>(T toSerialize)
{
var xmlSerializer = new XmlSerializer(toSerialize.GetType());
using var textWriter = new StringWriter();
xmlSerializer.Serialize(textWriter, toSerialize);
return textWriter.ToString();
}
private static string GetSoundDirectory()
{
var dir = Path.Combine(DataFolder, "sounds");
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
return dir;
}
}
[Serializable]
public class LegacySound : ISound
{
[JsonIgnore]
public bool IsValid => (chunks != null && chunks.Any()) || (sequence != null && sequence.Any());
[JsonIgnore]
public List<byte[]> chunks = new List<byte[]>();
// Causes conflict with json serialization
//[NonSerialized]
[JsonProperty]
private List<string> sequence;
// [JsonIgnore]
// public float Runtime => chunks.Count * 0.15f + 0.2f;
public Queue<byte[]> GetChunks()
{
return new Queue<byte[]>(chunks);
}
public void OnSerialize()
{
sequence = chunks.Select(Convert.ToBase64String).ToList();
}
public void OnDeserialize()
{
if (sequence == null)
{
LogError("Failed to deserialize sequence");
return;
}
chunks = sequence.Select(Convert.FromBase64String).ToList();
}
}
[ProtoContract]
public class ProtoSound : ISound
{
[ProtoMember(1)]
public byte[][] Chunks { get; set; }
[ProtoIgnore]
public bool IsValid => Chunks != null && Chunks.Length > 0;
public Queue<byte[]> GetChunks()
{
return new Queue<byte[]>(Chunks);
}
public void OnSerialize() { }
public void OnDeserialize() { }
public static ProtoSound Create(IEnumerable<byte[]> chunks)
{
return new ProtoSound
{
Chunks = chunks.ToArray()
};
}
}
private interface ISound
{
bool IsValid { get; }
Queue<byte[]> GetChunks();
void OnSerialize();
void OnDeserialize();
}
#endregion
#region ConfigManager
private static class ConfigManager
{
#region Default config
private const string defaultGraveyardJson = """{"objects":[{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":-0.8553467,"y":0.00003385544,"z":0.7173157},"rotation":{"x":0,"y":253.48851,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":-1.93078613,"y":-0.0458238125,"z":-1.09896851},"rotation":{"x":-2.26783627e-7,"y":345.866241,"z":1.72357643},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/coffin/coffinstorage.prefab","offset":{"x":-2.31542969,"y":0.0000309944153,"z":0.3977356},"rotation":{"x":0.0000134974653,"y":74.74707,"z":0.00000293165431},"lockRotation":false},{"prefabName":"assets/content/props/fog machine/fogmachine.prefab","offset":{"x":-1.63818359,"y":0.000018119812,"z":0.264099121},"rotation":{"x":0.000009659346,"y":350.9592,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-1.3203125,"y":0.00004196167,"z":0.0230102539},"rotation":{"x":0.000009659347,"y":118.081993,"z":-4.0711095e-13},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-1.53686523,"y":0.0000176429749,"z":0.7641907},"rotation":{"x":0.000009659346,"y":71.37329,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-1.74523926,"y":-0.0000212192535,"z":1.44848633},"rotation":{"x":0.000009659346,"y":37.4867859,"z":-2.035555e-13},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":-2.76989746,"y":-0.0451231,"z":1.7975769},"rotation":{"x":-0.00000208107326,"y":165.265121,"z":357.357758},"lockRotation":false},{"prefabName":"assets/content/props/fog machine/fogmachine.prefab","offset":{"x":-2.78955078,"y":0.0000138282776,"z":-0.0179748535},"rotation":{"x":0.000009659346,"y":174.513641,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-3.20617676,"y":0.00002861023,"z":0.23526001},"rotation":{"x":0.00000578243862,"y":253.217438,"z":-0.00000288016145},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-3.30786133,"y":0.0000197887421,"z":0.9121399},"rotation":{"x":0.000009659348,"y":290.342346,"z":-8.142219e-13},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":-4.003418,"y":0.013563633,"z":-0.8026428},"rotation":{"x":359.974731,"y":91.21362,"z":1.19329548},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.stone.deployed.prefab","offset":{"x":-4.04455566,"y":0.0054636,"z":-0.0390930176},"rotation":{"x":1.15657592,"y":75.695015,"z":359.7051},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":-4.404175,"y":0.0129747391,"z":0.5748596},"rotation":{"x":1.09568751,"y":66.63109,"z":359.5266},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":-3.744751,"y":-0.101410389,"z":0.00305175781},"rotation":{"x":-0.00000170754731,"y":74.3531952,"z":0.426511317},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-2.98291016,"y":0.009921074,"z":-0.6281738},"rotation":{"x":359.054474,"y":217.613937,"z":359.271545},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":-2.49047852,"y":0.0035803318,"z":-1.68170166},"rotation":{"x":359.71347,"y":346.1115,"z":358.841339},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.stone.deployed.prefab","offset":{"x":-1.87524414,"y":0.0000109672546,"z":-1.40307617},"rotation":{"x":0.000009659346,"y":348.3937,"z":-1.01777751e-13},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":-1.18969727,"y":0.0000612735748,"z":-1.3638916},"rotation":{"x":0.000009659347,"y":359.86673,"z":-7.951387e-16},"lockRotation":false},{"prefabName":"assets/bundled/prefabs/autospawn/collectable/stone/halloween/halloween-sulfur-collectible.prefab","offset":{"x":-3.89379883,"y":-0.00000596046448,"z":2.40826416},"rotation":{"x":0.00000503659066,"y":213.664276,"z":-0.000001398522},"lockRotation":false},{"prefabName":"assets/bundled/prefabs/autospawn/collectable/stone/halloween/halloween-bone-collectable.prefab","offset":{"x":0.245117188,"y":-0.0000102519989,"z":3.31918335},"rotation":{"x":0.000009659347,"y":143.6002,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/scarecrow/scarecrow.deployed.prefab","offset":{"x":1.92895508,"y":0.0000193119049,"z":1.85293579},"rotation":{"x":0.0000135316968,"y":253.39859,"z":0.00000288628667},"lockRotation":false},{"prefabName":"assets/bundled/prefabs/autospawn/collectable/stone/halloween/halloween-sulfur-collectible.prefab","offset":{"x":2.01086426,"y":0.0000238418579,"z":-1.81207275},"rotation":{"x":0.000009659348,"y":49.27787,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab","offset":{"x":3.49707031,"y":0.0000195503235,"z":-4.09390259},"rotation":{"x":0.000009659347,"y":155.07312,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":3.60107422,"y":0.00004005432,"z":-3.70605469},"rotation":{"x":0.000009659348,"y":157.772079,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/scarecrow/scarecrow.deployed.prefab","offset":{"x":1.56689453,"y":0.0106554031,"z":-4.83428955},"rotation":{"x":0.3889132,"y":160.986588,"z":1.1284349},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":1.11401367,"y":0.0200433731,"z":-5.34158325},"rotation":{"x":0.3796192,"y":161.457626,"z":1.13159478},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":-0.376708984,"y":0.0305254459,"z":-5.677124},"rotation":{"x":0.000009659347,"y":169.202057,"z":0},"lockRotation":false},{"prefabName":"assets/bundled/prefabs/autospawn/collectable/stone/halloween/halloween-metal-collectable.prefab","offset":{"x":-4.102051,"y":0.0305883884,"z":-6.44747925},"rotation":{"x":0.0000144774713,"y":7.92584133,"z":3.33783e-7},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab","offset":{"x":-6.54797363,"y":0.0382885933,"z":-7.848175},"rotation":{"x":359.139374,"y":223.861343,"z":359.173},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-6.201782,"y":0.0343384743,"z":-7.66012573},"rotation":{"x":359.0704,"y":218.848541,"z":359.251343},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab","offset":{"x":-8.175415,"y":0.0305464268,"z":-6.28564453},"rotation":{"x":0.000009659348,"y":238.86351,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-7.87548828,"y":0.030559063,"z":-6.204193},"rotation":{"x":0.000005039364,"y":213.890854,"z":-0.00000140766},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab","offset":{"x":-9.025879,"y":0.0305149555,"z":-4.60971069},"rotation":{"x":0.00000564686161,"y":247.63829,"z":-0.000002688067},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/cursed_cauldron/cursedcauldron.deployed.prefab","offset":{"x":-9.71106,"y":0.0305495262,"z":-2.1401062},"rotation":{"x":0.00000585138832,"y":255.918121,"z":-0.00000297072347},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab","offset":{"x":-9.650513,"y":0.0305356979,"z":-0.34161377},"rotation":{"x":0.000009659347,"y":285.843384,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-8.85144,"y":0.0298864841,"z":1.34243774},"rotation":{"x":0.884414,"y":317.810638,"z":359.198456},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab","offset":{"x":-9.012695,"y":0.0231897831,"z":1.664093},"rotation":{"x":0.495797247,"y":294.540344,"z":358.914276},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":-8.130859,"y":0.00003528595,"z":3.07324219},"rotation":{"x":0.000009659347,"y":316.4879,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-7.312622,"y":0.000011920929,"z":3.32696533},"rotation":{"x":0.000009659346,"y":343.757,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/coffin/coffinstorage.prefab","offset":{"x":-6.791992,"y":0.00002861023,"z":4.225708},"rotation":{"x":0.000005015632,"y":328.09787,"z":0.00000132727212},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-6.73181152,"y":0.0000343322754,"z":3.46838379},"rotation":{"x":0.000009659347,"y":343.083862,"z":-1.01777751e-13},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-6.340088,"y":0.0000257492065,"z":3.7354126},"rotation":{"x":0.000005134751,"y":319.052551,"z":0.000001689313},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-5.87280273,"y":0.0000171661377,"z":4.141571},"rotation":{"x":0.0000142967519,"y":327.5576,"z":-0.00000134915183},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":-5.29748535,"y":4.76837158e-7,"z":5.39541626},"rotation":{"x":0.000009659347,"y":272.748047,"z":-4.07111e-13},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab","offset":{"x":0.4880371,"y":0.0000276565552,"z":6.9331665},"rotation":{"x":0.000009659347,"y":354.0187,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":0.364501953,"y":0.0000138282776,"z":6.557312},"rotation":{"x":0.000009659348,"y":0.9036973,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":1.927002,"y":-0.00000548362732,"z":7.2578125},"rotation":{"x":0.0000144783935,"y":352.396942,"z":-3.20209949e-7},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":3.276245,"y":0.0000228881836,"z":6.8921814},"rotation":{"x":0.00000535524,"y":53.95629,"z":-0.00000219098388},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab","offset":{"x":3.4831543,"y":0.0000462532043,"z":7.202057},"rotation":{"x":0.0000144862634,"y":3.87219954,"z":1.63169986e-7},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":4.561157,"y":0.00003695488,"z":7.17922974},"rotation":{"x":0.000004925867,"y":22.9088554,"z":-9.591173e-7},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab","offset":{"x":5.96459961,"y":0.0000357627869,"z":6.42126465},"rotation":{"x":0.000009659347,"y":36.94886,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":5.647461,"y":0.00003671646,"z":6.23403931},"rotation":{"x":0.00000598202359,"y":80.82408,"z":-0.00000313097962},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":6.880249,"y":0.00000381469727,"z":5.48220825},"rotation":{"x":0.00001388053,"y":58.14395,"z":0.00000234677623},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":7.55810547,"y":0.0000176429749,"z":4.130249},"rotation":{"x":0.000009659347,"y":110.928383,"z":-4.07111e-13},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":6.984741,"y":0.0000298023224,"z":4.13027954},"rotation":{"x":0.00001385274,"y":120.513214,"z":-0.00000239608062},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":6.49389648,"y":-0.00000524520874,"z":3.97286987},"rotation":{"x":0.000009659348,"y":140.901154,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":6.05322266,"y":0.0000324249268,"z":3.82070923},"rotation":{"x":0.0000142799872,"y":146.162628,"z":-0.00000140550412},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":5.61193848,"y":-0.00000524520874,"z":3.60189819},"rotation":{"x":0.000009659348,"y":144.003357,"z":-2.035555e-13},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":5.18286133,"y":0.0000259876251,"z":3.330902},"rotation":{"x":0.000009659347,"y":121.593117,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":5.208374,"y":0.0000243186951,"z":2.91519165},"rotation":{"x":0.000009659347,"y":104.583847,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":5.319214,"y":0.00003504753,"z":2.56253052},"rotation":{"x":0.000009659348,"y":70.69874,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":5.61560059,"y":0.00003528595,"z":2.38934326},"rotation":{"x":0.000009659347,"y":37.08588,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":5.987671,"y":0.00006341934,"z":2.44271851},"rotation":{"x":0.0000144888718,"y":0.899703562,"z":3.791928e-8},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":6.373169,"y":0.000011920929,"z":2.5411377},"rotation":{"x":0.000009659347,"y":357.262939,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":6.774414,"y":0.00003528595,"z":2.61859131},"rotation":{"x":0.000009659348,"y":0.905399859,"z":6.36110859e-15},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":7.164795,"y":0.00006151199,"z":2.7288208},"rotation":{"x":0.000004856384,"y":347.942627,"z":5.072427e-7},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":7.58764648,"y":0.0000205039978,"z":2.819641},"rotation":{"x":0.00000485757573,"y":347.676361,"z":5.184022e-7},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":7.89831543,"y":0.0000123977661,"z":3.20263672},"rotation":{"x":0.000009659347,"y":98.2373,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab","offset":{"x":7.977295,"y":0.0000262260437,"z":3.77929688},"rotation":{"x":0.0000135554019,"y":72.45221,"z":0.00000285420765},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":8.397583,"y":0.0000174045563,"z":0.692474365},"rotation":{"x":0.000013469813,"y":104.178719,"z":-0.000002967504},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab","offset":{"x":7.81713867,"y":0.0000243186951,"z":-0.366394043},"rotation":{"x":0.000009659348,"y":123.619446,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":7.83618164,"y":0.0000329017639,"z":0.107452393},"rotation":{"x":0.000009659346,"y":112.5486,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":7.230957,"y":0.00006151199,"z":-1.695282},"rotation":{"x":0.000009659346,"y":136.982117,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":6.140381,"y":0.0000305175781,"z":-2.18276978},"rotation":{"x":0.0000142347826,"y":142.653244,"z":-0.00000154632994},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab","offset":{"x":6.119995,"y":0.00000715255737,"z":-2.5241394},"rotation":{"x":0.0000051158,"y":140.358,"z":0.00000163765912},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":4.89343262,"y":0.0000329017639,"z":-3.50061035},"rotation":{"x":0.000009659347,"y":141.03392,"z":-2.035555e-13},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/coffin/coffinstorage.prefab","offset":{"x":6.60339355,"y":0.0000171661377,"z":3.27584839},"rotation":{"x":-0.00000280505355,"y":341.013062,"z":-0.00000572775434},"lockRotation":false},{"prefabName":"assets/bundled/prefabs/autospawn/collectable/stone/halloween/halloween-bone-collectable.prefab","offset":{"x":-6.4161377,"y":0.0305466652,"z":-2.40640259},"rotation":{"x":0.000009659347,"y":273.603027,"z":4.07111e-13},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab","offset":{"x":-4.21459961,"y":0.0305576324,"z":-8.918182},"rotation":{"x":0.000004881133,"y":196.742813,"z":-7.031485e-7},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-3.89953613,"y":0.0305500031,"z":-8.745026},"rotation":{"x":0.0000049658247,"y":207.273727,"z":-0.00000113868},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":-2.74401855,"y":0.030520916,"z":-9.084991},"rotation":{"x":0.000009659346,"y":181.758743,"z":-1.27222189e-14},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab","offset":{"x":-1.50805664,"y":0.0305073261,"z":-8.972748},"rotation":{"x":0.000009659347,"y":179.865738,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-1.07348633,"y":0.0305213928,"z":-9.120209},"rotation":{"x":0.00000487239959,"y":164.746262,"z":6.41000042e-7},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/scarecrow/scarecrow.deployed.prefab","offset":{"x":0.9310303,"y":0.0305259228,"z":-7.01425171},"rotation":{"x":0.000009659347,"y":54.00304,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/scarecrow/scarecrow.deployed.prefab","offset":{"x":4.62109375,"y":0.0305294991,"z":-6.99713135},"rotation":{"x":0.000005708021,"y":70.20288,"z":-0.00000277718686},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":4.2734375,"y":0.0305650234,"z":-7.12896729},"rotation":{"x":0.000009659347,"y":72.45397,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":0.6031494,"y":0.03057909,"z":-7.20101929},"rotation":{"x":0.000009659348,"y":49.63679,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/scarecrow/scarecrow.deployed.prefab","offset":{"x":7.974121,"y":0.0000348091125,"z":-3.52142334},"rotation":{"x":0.000009659347,"y":316.1278,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":8.279175,"y":0.0000448226929,"z":-3.75708},"rotation":{"x":0.0000140564653,"y":311.131836,"z":-0.00000199777514},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":9.257568,"y":0.0305199623,"z":-6.436249},"rotation":{"x":0.0000137802126,"y":242.868622,"z":0.00000251877464},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":0.2869873,"y":-0.0000152587891,"z":8.215576},"rotation":{"x":0.0000142549352,"y":215.823227,"z":0.00000148536321},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-0.717773438,"y":0.0000283718109,"z":8.790527},"rotation":{"x":0.000009659347,"y":235.938766,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":-1.892334,"y":0.0000123977661,"z":10.9476318},"rotation":{"x":0.000009659347,"y":171.1817,"z":5.08888755e-14},"lockRotation":false},{"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab","offset":{"x":-4.88806152,"y":0.000036239624,"z":10.1401978},"rotation":{"x":0.00000965934851,"y":169.292831,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/scarecrow/scarecrow.deployed.prefab","offset":{"x":-5.46105957,"y":0.0000247955322,"z":7.216217},"rotation":{"x":0.0000138165351,"y":118.803932,"z":-0.00000245836077},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-5.63134766,"y":0.000027179718,"z":7.74789429},"rotation":{"x":0.000009659348,"y":117.858971,"z":-4.0711095e-13},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab","offset":{"x":-5.92797852,"y":0.000039100647,"z":7.303406},"rotation":{"x":0.0000143921279,"y":157.007584,"z":-9.625688e-7},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":-1.40625,"y":-0.162520885,"z":8.794281},"rotation":{"x":-0.000001947671,"y":256.5592,"z":0.4252314},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.stone.deployed.prefab","offset":{"x":-0.387817383,"y":-0.0000143051147,"z":8.206146},"rotation":{"x":0.0000051388306,"y":221.223267,"z":-0.0000017001986},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":0.3894043,"y":-0.150010824,"z":7.61203},"rotation":{"x":0.00000261468176,"y":169.649551,"z":359.090729},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":-4.351074,"y":0.000008583069,"z":7.97094727},"rotation":{"x":0,"y":255.19931,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":-5.40551758,"y":-0.03238702,"z":5.98376465},"rotation":{"x":-4.935879e-7,"y":339.519165,"z":1.22325051},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":3.38317871,"y":-0.119962215,"z":7.843567},"rotation":{"x":-0.00000246606351,"y":1.63430548,"z":0.231166527},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":6.11914063,"y":-0.08985424,"z":6.989502},"rotation":{"x":1.60082564e-7,"y":33.40346,"z":0.926589251},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":8.091675,"y":-0.0597145557,"z":4.828766},"rotation":{"x":-0.00000255465079,"y":62.1244354,"z":0.2169731},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":8.907593,"y":-0.0826499462,"z":1.97076416},"rotation":{"x":-0.00000186762986,"y":85.81539,"z":358.9176},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":8.3671875,"y":-0.0564644337,"z":-0.7786255},"rotation":{"x":-3.20165128e-7,"y":116.755585,"z":2.11445427},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":6.50109863,"y":-0.00000524520874,"z":-3.11712646},"rotation":{"x":0,"y":140.898315,"z":0},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":3.91711426,"y":-0.0619373322,"z":-4.7211},"rotation":{"x":0.00000277476443,"y":155.139114,"z":357.6848},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":1.182373,"y":-0.130412817,"z":-5.793579},"rotation":{"x":-0.000004552348,"y":161.857651,"z":359.649078},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":7.30078125,"y":-0.0278611183,"z":-7.332245},"rotation":{"x":-3.8019607e-7,"y":156.096756,"z":359.608582},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":4.489624,"y":-0.0522985458,"z":-8.375458},"rotation":{"x":0.00000170754731,"y":163.121811,"z":359.4593},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":1.57775879,"y":-0.08722329,"z":-9.112946},"rotation":{"x":-0.000003882002,"y":168.3862,"z":359.2098},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":-1.3449707,"y":-0.1053493,"z":-9.664429},"rotation":{"x":0.00000149243635,"y":170.230438,"z":0.0919348449},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":-4.2890625,"y":-0.0949764252,"z":-9.631653},"rotation":{"x":-0.00000274474883,"y":191.1251,"z":0.305086553},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":-6.952881,"y":-0.05514598,"z":-8.477814},"rotation":{"x":-2.13443414e-7,"y":216.092438,"z":1.22994649},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":-8.899414,"y":-0.0307371616,"z":-6.240326},"rotation":{"x":-0.00000148076367,"y":62.0881157,"z":0.310998529},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":-10.2220459,"y":-0.0301301479,"z":-3.569519},"rotation":{"x":-0.00000130734088,"y":65.22035,"z":359.66568},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":-10.5438232,"y":-0.0444667339,"z":-0.70614624},"rotation":{"x":-0.00000178758864,"y":101.76313,"z":0.8757367},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":-9.62207,"y":-0.08525491,"z":2.12442017},"rotation":{"x":-0.00000146742343,"y":114.127533,"z":0.685146034},"lockRotation":false},{"prefabName":"assets/prefabs/misc/halloween/graveyard_fence/graveyardfence.prefab","offset":{"x":-7.913208,"y":-0.08369398,"z":4.45916748},"rotation":{"x":-0.00000229451666,"y":138.291153,"z":359.2544},"lockRotation":false}],"zombieSpawns":[{"x":3.56323242,"y":0.0000157356262,"z":0.8786621},{"x":-5.48376465,"y":0.03541088,"z":-8.360443},{"x":2.74731445,"y":0.000008583069,"z":4.94171143},{"x":-6.681885,"y":0.0298466682,"z":1.0118103},{"x":9.051147,"y":0.0000112056732,"z":-1.24377441},{"x":8.039673,"y":0.030531168,"z":-7.77059937},{"x":2.90625,"y":0.0000011920929,"z":9.123322},{"x":-11.2504883,"y":0.03055787,"z":2.32556152}]}""";
private const string defaultPileA = """{"water":false,"type":"a","decorations":[{"position":{"x":-0.3137207,"y":0.07618427,"z":1.76635742},"rotation":{"x":8.633948,"y":348.5868,"z":352.117523},"prefabName":"assets/prefabs/misc/halloween/scarecrow/scarecrow.deployed.prefab"},{"position":{"x":2.16723633,"y":0.4474535,"z":0.6627197},"rotation":{"x":359.92627,"y":64.3647842,"z":0.09918409},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab"},{"position":{"x":2.31634521,"y":-0.08292389,"z":-0.599731445},"rotation":{"x":33.5820045,"y":123.808105,"z":1.91495693},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":0.215148926,"y":0.047917366,"z":-1.21911621},"rotation":{"x":11.7777462,"y":121.560829,"z":5.13143539},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skins/skullspikes.pumpkin.deployed.prefab"},{"position":{"x":-2.09436035,"y":0.969965,"z":-1.01977539},"rotation":{"x":357.004333,"y":310.936,"z":358.672729},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":-1.77233887,"y":0.9240303,"z":0.243896484},"rotation":{"x":1.05366111,"y":310.389984,"z":357.341461},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab"},{"position":{"x":-3.22277832,"y":-0.0966711044,"z":0.6883545},"rotation":{"x":18.8892479,"y":274.9687,"z":0.801842153},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skullspikes.deployed.prefab"},{"position":{"x":1.19012451,"y":0.921124458,"z":0.4260254},"rotation":{"x":355.769073,"y":13.640192,"z":7.882624},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"}]}""";
private const string defaultPileB = """{"water":false,"type":"b","decorations":[{"position":{"x":1.70526123,"y":0.657169342,"z":-0.3482666},"rotation":{"x":3.66692066,"y":45.239872,"z":359.421936},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab"},{"position":{"x":1.03851318,"y":0.444253922,"z":0.321411133},"rotation":{"x":356.732971,"y":69.5262756,"z":351.716339},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skins/skullspikes.pumpkin.deployed.prefab"},{"position":{"x":1.24316406,"y":1.47918034,"z":-1.24523926},"rotation":{"x":3.63404274,"y":118.195511,"z":1.34748018},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab"},{"position":{"x":-0.162902832,"y":0.6707716,"z":-1.45739746},"rotation":{"x":2.73558259,"y":226.719452,"z":359.314972},"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.stone.deployed.prefab"},{"position":{"x":-0.3890381,"y":0.6543369,"z":-1.73657227},"rotation":{"x":2.64143,"y":220.27066,"z":359.012177},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":-1.71502686,"y":1.80590725,"z":1.52404785},"rotation":{"x":2.06557536,"y":302.36853,"z":0.0515213721},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab"},{"position":{"x":-0.043762207,"y":2.71414185,"z":0.5855713},"rotation":{"x":2.47662663,"y":245.977,"z":357.702942},"prefabName":"assets/prefabs/misc/halloween/scarecrow/scarecrow.deployed.prefab"},{"position":{"x":-0.207275391,"y":0.3951664,"z":1.30871582},"rotation":{"x":17.0786419,"y":37.8700829,"z":359.844635},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skins/skullspikes.candles.deployed.prefab"}]}""";
private const string defaultPileC = """{"water":false,"type":"c","decorations":[{"position":{"x":-2.62475586,"y":0.00137043,"z":0.842041},"rotation":{"x":12.7946091,"y":245.9385,"z":359.6421},"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab"},{"position":{"x":-2.32946777,"y":0.04228115,"z":0.7397461},"rotation":{"x":8.791769,"y":238.815186,"z":343.980164},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":-2.18518066,"y":0.0165586472,"z":1.53979492},"rotation":{"x":12.0330009,"y":352.262817,"z":359.653473},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skins/skullspikes.candles.deployed.prefab"},{"position":{"x":2.302185,"y":0.262998581,"z":-0.0574951172},"rotation":{"x":2.327561,"y":56.05398,"z":351.194977},"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab"},{"position":{"x":2.17059326,"y":0.226635933,"z":-0.5501709},"rotation":{"x":8.138159,"y":104.522346,"z":355.9028},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":1.9864502,"y":0.170712471,"z":-1.07226563},"rotation":{"x":11.0216227,"y":147.694275,"z":0.6736235},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.happy.prefab"}]}""";
private const string defaultPileD = """{"water":false,"type":"d","decorations":[{"position":{"x":0.0285644531,"y":0.358247757,"z":0.09123427},"rotation":{"x":8.805238,"y":61.410183,"z":358.456},"prefabName":"assets/prefabs/misc/halloween/scarecrow/scarecrow.deployed.prefab"},{"position":{"x":-1.30078506,"y":1.1594429,"z":0.31005007},"rotation":{"x":6.90095234,"y":320.784851,"z":2.80424118},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab"},{"position":{"x":-0.9705839,"y":0.3494873,"z":-0.5886281},"rotation":{"x":2.29222226,"y":227.973434,"z":357.077484},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skins/skullspikes.candles.deployed.prefab"},{"position":{"x":-0.423654556,"y":1.3590641,"z":-1.03887677},"rotation":{"x":16.56447,"y":186.047516,"z":358.079865},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"}]}""";
private const string defaultPileE = """{"water":false,"type":"e","decorations":[{"position":{"x":-0.880441666,"y":0.3054161,"z":-0.510950565},"rotation":{"x":8.062617,"y":181.602509,"z":359.341736},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab"},{"position":{"x":0.14836216,"y":0.219125748,"z":-0.711302757},"rotation":{"x":10.9138241,"y":186.765915,"z":3.49875069},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skins/skullspikes.pumpkin.deployed.prefab"},{"position":{"x":1.12559128,"y":0.04369545,"z":-1.0759573},"rotation":{"x":9.839871,"y":147.496063,"z":2.802296},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skins/skullspikes.candles.deployed.prefab"},{"position":{"x":-0.207486629,"y":0.3676567,"z":0.5052052},"rotation":{"x":8.809003,"y":61.5525436,"z":358.477783},"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.wood.deployed.prefab"},{"position":{"x":-0.220489025,"y":0.363843918,"z":0.2639863},"rotation":{"x":357.911438,"y":2.60934162,"z":4.608762},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":-1.87372541,"y":0.178339,"z":0.112344384},"rotation":{"x":7.311178,"y":342.339264,"z":9.504964},"prefabName":"assets/prefabs/misc/halloween/scarecrow/scarecrow.deployed.prefab"}]}""";
private const string defaultPileF = """{"water":false,"type":"f","decorations":[{"position":{"x":0.534318,"y":0.3499527,"z":-0.136197329},"rotation":{"x":2.8943615,"y":77.101944,"z":350.1714},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.happy.prefab"},{"position":{"x":-0.02256012,"y":0.381908417,"z":-0.224438429},"rotation":{"x":10.4285574,"y":167.622925,"z":358.481171},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skins/skullspikes.candles.deployed.prefab"},{"position":{"x":-0.4614811,"y":0.332000732,"z":-0.524418354},"rotation":{"x":10.0835495,"y":193.014069,"z":3.07504082},"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.stone.deployed.prefab"},{"position":{"x":-0.8663378,"y":1.149147,"z":0.345117569},"rotation":{"x":0.220404059,"y":357.818634,"z":5.76643467},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.happy.prefab"},{"position":{"x":-0.85182,"y":0.311922073,"z":-0.7939303},"rotation":{"x":7.179059,"y":218.972946,"z":2.759523},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"}]}""";
private const string defaultPileG = """{"water":false,"type":"g","decorations":[{"position":{"x":2.41292381,"y":0.0312099457,"z":-0.4514251},"rotation":{"x":12.524889,"y":44.73879,"z":358.4596},"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.stone.deployed.prefab"},{"position":{"x":2.74277687,"y":-0.0467987061,"z":-0.339167148},"rotation":{"x":16.221487,"y":52.6186562,"z":1.1618154},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":2.4266758,"y":-0.0391616821,"z":0.0383346975},"rotation":{"x":21.1232319,"y":94.32902,"z":356.2568},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":-0.6190529,"y":0.165113449,"z":3.02720618},"rotation":{"x":10.6358738,"y":32.8656425,"z":353.318939},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skins/skullspikes.candles.deployed.prefab"},{"position":{"x":-3.32156849,"y":0.562101364,"z":2.68483472},"rotation":{"x":10.2825747,"y":305.8667,"z":358.545441},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":-1.60050583,"y":1.761982,"z":1.691622},"rotation":{"x":1.79971945,"y":295.518219,"z":0.4375894},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":-1.32880592,"y":1.7817955,"z":0.8196764},"rotation":{"x":0.908187449,"y":309.915222,"z":3.01421046},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.happy.prefab"},{"position":{"x":-0.519062042,"y":0.0963726044,"z":-1.56937647},"rotation":{"x":2.43805337,"y":230.662064,"z":2.25142884},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skins/skullspikes.pumpkin.deployed.prefab"},{"position":{"x":2.459959,"y":-0.00315094,"z":-2.193352},"rotation":{"x":12.3491373,"y":149.7389,"z":3.96454453},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.happy.prefab"}]}""";
private const string defaultPileH = """{"water":false,"type":"h","decorations":[{"position":{"x":2.17673683,"y":0.06470299,"z":0.9743713},"rotation":{"x":16.0321026,"y":72.01199,"z":0.291995734},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skins/skullspikes.pumpkin.deployed.prefab"},{"position":{"x":-0.65765667,"y":0.298780441,"z":-0.4392893},"rotation":{"x":2.80704618,"y":261.441,"z":353.882446},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab"},{"position":{"x":-0.6726122,"y":0.494907379,"z":0.6405169},"rotation":{"x":359.1595,"y":129.4761,"z":3.0738256},"prefabName":"assets/prefabs/misc/halloween/candles/largecandleset.prefab"},{"position":{"x":0.6185255,"y":0.4272461,"z":1.4041698},"rotation":{"x":3.122857,"y":17.2293186,"z":359.632782},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab"},{"position":{"x":-0.151872635,"y":0.435071945,"z":1.59286582},"rotation":{"x":2.70594287,"y":55.4333534,"z":1.63678491},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":-0.0608139038,"y":0.5733471,"z":1.11835241},"rotation":{"x":3.00600338,"y":42.3453,"z":0.981819749},"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.stone.deployed.prefab"},{"position":{"x":-1.06064892,"y":0.497777939,"z":1.97149622},"rotation":{"x":0.921317637,"y":312.207,"z":355.969421},"prefabName":"assets/prefabs/misc/halloween/scarecrow/scarecrow.deployed.prefab"},{"position":{"x":-1.060811,"y":0.812721252,"z":3.267889},"rotation":{"x":1.84406829,"y":11.4453039,"z":0.9495676},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":-2.532467,"y":0.06676674,"z":1.65496087},"rotation":{"x":15.9878931,"y":271.838257,"z":2.97801018},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skins/skullspikes.candles.deployed.prefab"}]}""";
private const string defaultPileI = """{"water":false,"type":"i","decorations":[{"position":{"x":0.843569756,"y":0.232639313,"z":-0.0219564736},"rotation":{"x":17.204752,"y":97.18578,"z":359.584167},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skins/skullspikes.candles.deployed.prefab"},{"position":{"x":-0.7554674,"y":0.308132172,"z":-1.08500361},"rotation":{"x":358.752533,"y":197.523438,"z":4.229652},"prefabName":"assets/prefabs/misc/halloween/deployablegravestone/gravestone.stone.deployed.prefab"},{"position":{"x":-1.016882,"y":0.284563065,"z":-1.33527243},"rotation":{"x":17.6642418,"y":213.236008,"z":0.29085654},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":-1.41609192,"y":0.6662159,"z":1.39465773},"rotation":{"x":350.23172,"y":199.4962,"z":358.2971},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab"},{"position":{"x":-0.1942091,"y":0.368310928,"z":1.32470012},"rotation":{"x":354.6352,"y":32.1155319,"z":3.89119935},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"}]}""";
private const string defaultPileJ = """{"water":false,"type":"j","decorations":[{"position":{"x":-2.27161217,"y":0.213348389,"z":2.50333166},"rotation":{"x":12.5190935,"y":291.13385,"z":11.6333733},"prefabName":"assets/prefabs/misc/halloween/scarecrow/scarecrow.deployed.prefab"},{"position":{"x":-1.9931612,"y":0.110141754,"z":1.04218352},"rotation":{"x":16.143652,"y":226.251129,"z":358.4025},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skins/skullspikes.pumpkin.deployed.prefab"},{"position":{"x":-0.1964016,"y":1.11312866,"z":2.300363},"rotation":{"x":0.4604976,"y":47.63449,"z":358.015442},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.angry.prefab"},{"position":{"x":-0.499943733,"y":0.590990067,"z":2.80501318},"rotation":{"x":5.03090143,"y":84.74667,"z":0.08528825},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":2.492528,"y":0.383829117,"z":-0.469989657},"rotation":{"x":1.12197554,"y":90.6007,"z":0.7751849},"prefabName":"assets/prefabs/deployable/jack o lantern/jackolantern.happy.prefab"},{"position":{"x":2.53445721,"y":0.375169754,"z":0.117781758},"rotation":{"x":1.363693,"y":56.08642,"z":0.00310338545},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":2.07875776,"y":0.5685806,"z":0.0953382254},"rotation":{"x":1.16840744,"y":24.9100132,"z":359.296753},"prefabName":"assets/prefabs/misc/halloween/candles/smallcandleset.prefab"},{"position":{"x":-0.339736938,"y":0.2002449,"z":-1.47314847},"rotation":{"x":12.9163933,"y":169.723,"z":3.7546823},"prefabName":"assets/prefabs/misc/halloween/skull spikes/skins/skullspikes.candles.deployed.prefab"}]}""";
#endregion
public static void SaveGraveyardConfig(GraveyardConfig config, string name)
{
Interface.Oxide.DataFileSystem.WriteObject("Halloween/graveyards/" + name, config);
}
public static GraveyardConfig LoadGraveyardConfig(string name)
{
if (name == "_default")
{
return JsonConvert.DeserializeObject<GraveyardConfig>(defaultGraveyardJson);
}
var cfg = Interface.Oxide.DataFileSystem.ReadObject<GraveyardConfig>("Halloween/graveyards/" + name);
return cfg;
}
public static void SaveJunkPileConfig(JunkPileConfig config, string name)
{
Interface.Oxide.DataFileSystem.WriteObject("Halloween/junkpiles/" + name, config);
}
public static JunkPileConfig LoadJunkPileConfig(string name)
{
var cfg = Interface.Oxide.DataFileSystem.ReadObject<JunkPileConfig>("Halloween/junkpiles/" + name);
return cfg;
}
public static JunkPileConfig LoadDefaultJunkPileConfig(char type)
{
string json = string.Empty;
switch (type)
{
case 'a':
json = defaultPileA;
break;
case 'b':
json = defaultPileB;
break;
case 'c':
json = defaultPileC;
break;
case 'd':
json = defaultPileD;
break;
case 'e':
json = defaultPileE;
break;
case 'f':
json = defaultPileF;
break;
case 'g':
json = defaultPileG;
break;
case 'h':
json = defaultPileH;
break;
case 'i':
json = defaultPileI;
break;
case 'j':
json = defaultPileJ;
break;
default:
break;
}
return JsonConvert.DeserializeObject<JunkPileConfig>(json);
}
}
#endregion
#region Configuration
[SuppressMessage("ReSharper", "FieldCanBeMadeReadOnly.Global")]
[SuppressMessage("ReSharper", "ConvertToConstant.Global")]
public class Configuration
{
[JsonProperty("Enable lightnings at night")]
public bool enableLightningEffects = true;
[JsonProperty("Enable fog at night")]
public bool enableFoggyNights = true;
[JsonProperty("Enable junk pile decorations")]
public bool enableJunkPileDecoration = true;
[JsonProperty("Max decorations per junk pile")]
public int maxJunkPileDecorations = 2;
[JsonProperty("Max total junk pile decorations (set lower to reduce performance impact)")]
public int maxJunkPileDecorationsTotal = 2000;
[JsonProperty("Enable grave yards")]
public bool enableGraveYards = true;
[JsonProperty("Enable fire when grave yards despawn (impacts performance)")]
public bool enableGraveYardFire = false;
[JsonProperty("Show graveyards on the map (requires https://codefling.com/plugins/marker-api)")]
public bool enableGraveyardMapMarker = true;
[JsonProperty("Map marker settings", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public MapMarkerSettings mapMarkerSettings = new();
[JsonProperty("Spawn graveyards during this time")]
public StartEndTime graveyardSpawnTime = new(19, 7);
[JsonProperty("Grave yard zombie health")]
public float graveyardZombieHealth = 120f;
[JsonProperty("Grave yard population at night")]
public int graveyardPopulation = 20;
[JsonProperty("Allow grave yards on roads")]
public bool allowGraveyardOnRoad = true;
[JsonProperty("Grave yard despawn time (seconds)")]
public float graveyardDespawnTime = 40f;
[JsonProperty("Minimum distance between grave yards")]
public float minGraveyardDist = 50f;
[JsonProperty("Grave yard configurations to spawn", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public List<string> graveyardConfigs = new List<string>
{
"_default"
};
[JsonProperty("Grave yard loot table", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public List<LootManager.LootItem> graveyardLootTable = new List<LootManager.LootItem>
{
new("scrap", 5, 10, 1f),
new("corn", 2, 8, 0.8f),
new("potato", 1, 2, 0.2f),
new("skull", 1, 1, 0.5f),
new("knife.butcher", 1, 1, 0.4f),
new("pitchfork", 1, 1, 0.3f),
new("halloween.lootbag.small", 1, 3, 0.7f),
new("halloween.lootbag.medium", 1, 2, 0.3f),
new("halloween.lootbag.large", 1, 1, 0.05f),
new("sulfur", 50, 150, 0.3f),
new("cloth", 5, 40, 0.3f),
new("frankensteintable", 1, 1, 0.1f),
new("frankensteins.monster.03.head", 1, 1, 0.15f),
new("frankensteins.monster.03.legs", 1, 1, 0.15f),
new("frankensteins.monster.03.torso", 1, 1, 0.15f),
new("frankensteins.monster.02.head", 1, 1, 0.2f),
new("frankensteins.monster.02.legs", 1, 1, 0.2f),
new("frankensteins.monster.02.torso", 1, 1, 0.2f),
new("frankensteins.monster.01.head", 1, 1, 0.3f),
new("frankensteins.monster.01.legs", 1, 1, 0.3f),
new("frankensteins.monster.01.torso", 1, 1, 0.3f),
};
[JsonProperty("Grave yard zombie configuration")]
public NpcConfig graveyardNpcConfig = new();
[JsonProperty("Enable sound effects at night")]
public bool enableSoundEffects = true;
[JsonProperty("Minimum time between sound effects (per player, in minutes)")]
public float minSoundEffectDelay = 5f;
[JsonProperty("List of sound effects", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public List<string> soundEffects = new List<string>
{
"assets/bundled/prefabs/fx/player/beartrap_scream.prefab",
"assets/bundled/prefabs/fx/player/howl.prefab"
};
[JsonProperty("Custom NPC Clothing", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public Dictionary<string, ClothingItem[]> npcClothing = new Dictionary<string, ClothingItem[]>
{
["scientistnpc_junkpile_pistol"] = ClothingItem.Single("halloween.mummysuit", 0UL),
["scientistnpc_heavy"] = new[]
{
new ClothingItem("tshirt.long", 2461910209),
new ClothingItem("metal.facemask", 1171198416),
new ClothingItem("pants", 2461910644),
new ClothingItem("gloweyes", 0),
new ClothingItem("shoes.boots", 2461911046),
new ClothingItem("tactical.gloves", 0),
},
["scientistnpc_oilrig"] = new[]
{
new ClothingItem("burlap.headwrap", 2857176433),
new ClothingItem("burlap.shirt", 2857177309),
new ClothingItem("burlap.trousers", 2857176980),
new ClothingItem("shoes.boots", 916448999),
new ClothingItem("tactical.gloves", 0),
new ClothingItem("gloweyes", 0),
},
["stables_shopkeeper"] = new[]
{
new ClothingItem("pumpkin", 0),
new ClothingItem("gloweyes", 0),
},
["bandit_conversationalist"] = new[]
{
new ClothingItem("pumpkin", 0),
new ClothingItem("gloweyes", 0),
},
};
[JsonProperty("Custom NPC clothing ignored NPC skins")]
public HashSet<ulong> ignoreNpcSkins = new HashSet<ulong>
{
11162132011012
};
[JsonProperty("Loot jumpscare configuration", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public JumpscareConfig lootJumpscares = new()
{
Enabled = true,
ChancePercent = 5f,
DelayMinutes = 30,
NpcName = "Ghost",
Sounds = new List<string>()
{
"_laugh",
"_scream"
}
};
[JsonProperty("Random jumpscare configuration", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public JumpscareConfig randomJumpscares = new()
{
Enabled = true,
ChancePercent = 5f,
DelayMinutes = 30,
NpcName = "Ghost",
Sounds = new List<string>
{
"_laugh",
"_scream"
},
Effects = new List<string>
{
"assets/prefabs/deployable/reactive target/effects/snd_knockdown.prefab",
"assets/prefabs/clothes/halloween.scarecrow/effects/soul_release_effect.prefab",
"assets/bundled/prefabs/fx/item_break.prefab",
"assets/prefabs/building/door.hinged/effects/door-wood-knock.prefab",
"assets/prefabs/weapons/cleaver big/effects/hit.prefab",
"assets/prefabs/weapons/sword big/effects/hit.prefab",
"assets/bundled/prefabs/fx/player/gutshot_scream.prefab"
}
};
// [JsonProperty("Jumpscare chance (%)")]
// public float jumpscareChance = 5f;
//
// [JsonProperty("Minimum time between jumpscares (per player, in minutes)")]
// public float minJumpscareDelay = 30f;
//
// [JsonProperty("Jumpscare sounds", ObjectCreationHandling = ObjectCreationHandling.Replace)]
// public List<string> jumpscareSounds = new List<string>
// {
// "_laugh",
// "_scream"
// };
[JsonProperty("Recording command name")]
public string CmdRecName { get; set; } = "rec";
[JsonProperty("Grave yard command name")]
public string CmdGyName { get; set; } = "gy";
[JsonProperty("Junk pile decoration command name")]
public string CmdJpName { get; set; } = "jp";
[JsonProperty("Jumpscare command name")]
public string CmdScareName { get; set; } = "jumpscare";
[JsonIgnore] // This is very bad style I know
public string RandomSoundEffect => soundEffects.IsNullOrEmpty() ? "assets/bundled/prefabs/fx/player/beartrap_scream.prefab" : soundEffects.GetRandom();
[JsonIgnore] // And also this one
public GraveyardConfig RandomGraveyardConfig => ConfigManager.LoadGraveyardConfig(graveyardConfigs.IsNullOrEmpty() ? "_default" : graveyardConfigs.GetRandom());
}
public class NpcConfig
{
[JsonProperty("Npc name")]
public string name = "Zombie";
[JsonProperty("Health")]
public float health = 150f;
[JsonProperty("Attack range multiplier")]
public float attackRangeMultiplier = 1;
[JsonProperty("Sense range (m)")]
public float senseRange = 50f;
[JsonProperty("Vision cone (degrees)")]
public float visionCone = 135f;
[JsonProperty("Damage scale (1 = 100%)")]
public float damageScale = 1f;
[JsonProperty("Memory duration (seconds)")]
public float memoryDuration = 60f;
[JsonProperty("Roam range (m)")]
public float roamRange = 30f;
[JsonProperty("Chase range (m)")]
public float chaseRange = 50f;
[JsonProperty("Remove corpse on death and drop bag")]
public bool removeCorpse = false;
[JsonProperty("Kit (requires Kits plugin)")]
public string kit = string.Empty;
[JsonProperty("Clothing items", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public List<Item> clothing = new List<Item>
{
new Item { shortName = "scarecrow.suit" }
};
[JsonProperty("Belt items", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public List<Item> belt = new()
{
new Item { shortName = "pitchfork" }
};
[JsonProperty("Custom loot configuration")]
public LootManager.LootTable lootTable = new()
{
enabled = false,
minItems = 1,
maxItems = 5,
items = new List<LootManager.LootItem>()
{
new("scrap", 5, 10, 1f)
}
};
public class Item
{
public string shortName;
public int amount = 1;
public ulong skinId;
}
}
public class ClothingItem
{
[JsonProperty("Item shortname")]
public string shortname;
[JsonProperty("Skin id")]
public ulong skin;
public ClothingItem(string shortname, ulong skin)
{
this.shortname = shortname;
this.skin = skin;
}
public static ClothingItem[] Single(string shortname, ulong skin)
{
return new ClothingItem[] { new ClothingItem(shortname, skin) };
}
}
public class MapMarkerSettings
{
[JsonProperty("Name")]
public string name = "A Graveyard";
[JsonProperty("Radius")]
public float radius = 0.2f;
[JsonProperty("Color (hex format)")]
public string color = "#FFFF00";
}
public struct StartEndTime
{
public int start;
public int end;
public StartEndTime(int start, int end)
{
this.start = start;
this.end = end;
}
}
public class JumpscareConfig
{
[JsonProperty("Enabled")]
public bool Enabled { get; set; }
[JsonProperty("Jumpscare NPC name")]
public string NpcName { get; set; }
[JsonProperty("Jumpscare chance (%)")]
public float ChancePercent { get; set; }
[JsonProperty("Minimum time between jumpscares (per player, in minutes)")]
public int DelayMinutes { get; set; }
[JsonProperty("Jumpscare sounds - played when the player is looking at the npc")]
public List<string> Sounds { get; set; }
[JsonProperty("Attention sound effects - played when the player is not looking at the npc", NullValueHandling = NullValueHandling.Ignore)]
public List<string> Effects { get; set; }
}
#endregion
}
namespace HalloweenExtensions
{
internal static class HalloweenEx
{
public static float AngleTo(this Vector3 origin, Vector3 target)
{
Vector3 norm = (target - origin);
float a = norm.z < 0 ? 180f : 0f;
return Mathf.Atan(norm.x / norm.z) * Mathf.Rad2Deg + a;
}
public static Vector3 RandomPositionAround(this BaseEntity entity, float radius, float minDistance = 0f)
{
float distance = UnityEngine.Random.Range(minDistance, radius);
float angle = UnityEngine.Random.Range(0f, 359f);
var delta = Quaternion.Euler(0, angle, 0) * (Vector3.forward * distance);
return entity.transform.position + delta;
}
public static bool IsNearBase(this BasePlayer player)
{
var bp = player.GetBuildingPrivilege();
return bp?.IsAuthed(player) ?? false;
}
}
}
}
namespace PluginComponents.Halloween.Extensions.Enumerable{
using System;
using System.Collections.Generic;
using System.Linq;
using PluginComponents.Halloween;
using PluginComponents.Halloween.Extensions;
public static class EnumerableExtensions{
public static IEnumerable<T> GetRandom<T>(this IList<T> list, int count){
if (list.Count < 1){
throw new InvalidOperationException("Can not take random element from empty list");
}
if (list.Count <= count){
for (int i = 0; i < list.Count; i++){
yield return list[i];
}
yield break;
}
int returned = 0;
for (int i = 0; i < list.Count; i++){
float chance = (float)(count - returned) / (list.Count - i);
if (UnityEngine.Random.Range(0f, 1f) <= chance){
returned++;
yield return list[i];
}
}
}
// ИСПРАВЛЕННЫЙ МЕТОД: Дописали корректный возврат случайного элемента
public static T GetRandom<T>(this IList<T> list){
if (list.Count < 1){
throw new InvalidOperationException("Can not take random element from empty list");
}
return list[UnityEngine.Random.Range(0, list.Count)];
}
}
}